From 1866368a8ab8cacf73aa47f67138040d5620439d Mon Sep 17 00:00:00 2001 From: Yutang Jiang Date: Sat, 24 Dec 2016 01:11:32 +0800 Subject: layerscape: add ls1088ardb device support LS1088A is an ARMv8 implementation combining eight ARM A53 processor cores. The LS1088ARDB is an evaluatoin platform that supports the LS1088A family SoCs. Features summary: - Eight 64-bit ARM v8 Cortex-A53 CPUs - Data path acceleration architecture 2.0 (DPAA2) - Ethernet interfaces - QUADSPI flash, 3 PCIe, 2 USB, 1 SD, 2 DUARTs etc Signed-off-by: Yutang Jiang --- ...ging-fsl-dpaa2-mac-Interrupt-code-cleanup.patch | 182 +++++++++++++++++++++ 1 file changed, 182 insertions(+) create mode 100644 target/linux/layerscape/patches-4.4/7209-staging-fsl-dpaa2-mac-Interrupt-code-cleanup.patch (limited to 'target/linux/layerscape/patches-4.4/7209-staging-fsl-dpaa2-mac-Interrupt-code-cleanup.patch') diff --git a/target/linux/layerscape/patches-4.4/7209-staging-fsl-dpaa2-mac-Interrupt-code-cleanup.patch b/target/linux/layerscape/patches-4.4/7209-staging-fsl-dpaa2-mac-Interrupt-code-cleanup.patch new file mode 100644 index 0000000000..9ed721f7fa --- /dev/null +++ b/target/linux/layerscape/patches-4.4/7209-staging-fsl-dpaa2-mac-Interrupt-code-cleanup.patch @@ -0,0 +1,182 @@ +From bb42890533f9592e8d30654b4e0b19c3cf7caaec Mon Sep 17 00:00:00 2001 +From: Ioana Radulescu +Date: Fri, 1 Apr 2016 18:38:18 +0300 +Subject: [PATCH 209/226] staging: fsl-dpaa2/mac: Interrupt code cleanup + +Cleanup and a couple of minor fixes for the interrupt +handling code: +* Removed a few unnecessary checks, unify format for others +* Don't print error/debug messages in interrupt handler +* No need to explicitly disable DPMAC interrupts before +configuring them +* Use unlikely in interrupt handler routine error checks +* if status register is zero or we're unable to read its value, +return IRQ_NONE instead of IRQ_HANDLED +* always clear the entire status register, not just the bit(s) +that were treated + +Signed-off-by: Ioana Radulescu +(cherry picked from commit 4b46eec16c56e4f453ca1558af9aceaf6ffe831a) +(Stuart:resolved merge conflict) +Signed-off-by: Stuart Yoder +--- + drivers/staging/fsl-dpaa2/mac/mac.c | 77 ++++++++--------------------------- + 1 file changed, 16 insertions(+), 61 deletions(-) + +--- a/drivers/staging/fsl-dpaa2/mac/mac.c ++++ b/drivers/staging/fsl-dpaa2/mac/mac.c +@@ -132,7 +132,7 @@ static void dpaa2_mac_link_changed(struc + } + + /* IRQ bits that we handle */ +-static const u32 dpmac_irq_mask = DPMAC_IRQ_EVENT_LINK_CFG_REQ; ++static const u32 dpmac_irq_mask = DPMAC_IRQ_EVENT_LINK_CFG_REQ; + + #ifdef CONFIG_FSL_DPAA2_MAC_NETDEVS + static netdev_tx_t dpaa2_mac_drop_frame(struct sk_buff *skb, +@@ -345,16 +345,13 @@ static const struct ethtool_ops dpaa2_ma + }; + #endif /* CONFIG_FSL_DPAA2_MAC_NETDEVS */ + +-static int configure_link(struct dpaa2_mac_priv *priv, +- struct dpmac_link_cfg *cfg) ++static void configure_link(struct dpaa2_mac_priv *priv, ++ struct dpmac_link_cfg *cfg) + { + struct phy_device *phydev = priv->netdev->phydev; + +- if (!phydev) { +- dev_warn(priv->netdev->dev.parent, +- "asked to change PHY settings but PHY ref is NULL, ignoring\n"); +- return 0; +- } ++ if (unlikely(!phydev)) ++ return; + + phydev->speed = cfg->rate; + phydev->duplex = !!(cfg->options & DPMAC_LINK_OPT_HALF_DUPLEX); +@@ -368,8 +365,6 @@ static int configure_link(struct dpaa2_m + } + + phy_start_aneg(phydev); +- +- return 0; + } + + static irqreturn_t dpaa2_mac_irq_handler(int irq_num, void *arg) +@@ -378,53 +373,29 @@ static irqreturn_t dpaa2_mac_irq_handler + struct fsl_mc_device *mc_dev = to_fsl_mc_device(dev); + struct dpaa2_mac_priv *priv = dev_get_drvdata(dev); + struct dpmac_link_cfg link_cfg; +- u8 irq_index = DPMAC_IRQ_INDEX; +- u32 status, clear = 0; ++ u32 status; + int err; + +- if (mc_dev->irqs[0]->msi_desc->irq != irq_num) { +- dev_err(dev, "received unexpected interrupt %d!\n", irq_num); +- goto err; +- } +- + err = dpmac_get_irq_status(mc_dev->mc_io, 0, mc_dev->mc_handle, +- irq_index, &status); +- if (err) { +- dev_err(dev, "dpmac_get_irq_status err %d\n", err); +- clear = ~0x0u; +- goto out; +- } ++ DPMAC_IRQ_INDEX, &status); ++ if (unlikely(err || !status)) ++ return IRQ_NONE; + + /* DPNI-initiated link configuration; 'ifconfig up' also calls this */ + if (status & DPMAC_IRQ_EVENT_LINK_CFG_REQ) { +- dev_dbg(dev, "DPMAC IRQ %d - LINK_CFG_REQ\n", irq_num); +- clear |= DPMAC_IRQ_EVENT_LINK_CFG_REQ; +- + err = dpmac_get_link_cfg(mc_dev->mc_io, 0, mc_dev->mc_handle, + &link_cfg); +- if (err) { +- dev_err(dev, "dpmac_get_link_cfg err %d\n", err); ++ if (unlikely(err)) + goto out; +- } + +- err = configure_link(priv, &link_cfg); +- if (err) { +- dev_err(dev, "cannot configure link\n"); +- goto out; +- } ++ configure_link(priv, &link_cfg); + } + + out: +- err = dpmac_clear_irq_status(mc_dev->mc_io, 0, mc_dev->mc_handle, +- irq_index, clear); +- if (err < 0) +- dev_err(&mc_dev->dev, "dpmac_clear_irq_status() err %d\n", err); ++ dpmac_clear_irq_status(mc_dev->mc_io, 0, mc_dev->mc_handle, ++ DPMAC_IRQ_INDEX, status); + + return IRQ_HANDLED; +- +-err: +- dev_warn(dev, "DPMAC IRQ %d was not handled!\n", irq_num); +- return IRQ_NONE; + } + + static int setup_irqs(struct fsl_mc_device *mc_dev) +@@ -437,19 +408,6 @@ static int setup_irqs(struct fsl_mc_devi + return err; + } + +- err = dpmac_set_irq_mask(mc_dev->mc_io, 0, mc_dev->mc_handle, +- DPMAC_IRQ_INDEX, dpmac_irq_mask); +- if (err < 0) { +- dev_err(&mc_dev->dev, "dpmac_set_irq_mask err %d\n", err); +- goto free_irq; +- } +- err = dpmac_set_irq_enable(mc_dev->mc_io, 0, mc_dev->mc_handle, +- DPMAC_IRQ_INDEX, 0); +- if (err) { +- dev_err(&mc_dev->dev, "dpmac_set_irq_enable err %d\n", err); +- goto free_irq; +- } +- + err = devm_request_threaded_irq(&mc_dev->dev, + mc_dev->irqs[0]->msi_desc->irq, + NULL, &dpaa2_mac_irq_handler, +@@ -463,7 +421,7 @@ static int setup_irqs(struct fsl_mc_devi + + err = dpmac_set_irq_mask(mc_dev->mc_io, 0, mc_dev->mc_handle, + DPMAC_IRQ_INDEX, dpmac_irq_mask); +- if (err < 0) { ++ if (err) { + dev_err(&mc_dev->dev, "dpmac_set_irq_mask err %d\n", err); + goto free_irq; + } +@@ -490,12 +448,12 @@ static void teardown_irqs(struct fsl_mc_ + + err = dpmac_set_irq_mask(mc_dev->mc_io, 0, mc_dev->mc_handle, + DPMAC_IRQ_INDEX, dpmac_irq_mask); +- if (err < 0) ++ if (err) + dev_err(&mc_dev->dev, "dpmac_set_irq_mask err %d\n", err); + + err = dpmac_set_irq_enable(mc_dev->mc_io, 0, mc_dev->mc_handle, + DPMAC_IRQ_INDEX, 0); +- if (err < 0) ++ if (err) + dev_err(&mc_dev->dev, "dpmac_set_irq_enable err %d\n", err); + + devm_free_irq(&mc_dev->dev, mc_dev->irqs[0]->msi_desc->irq, &mc_dev->dev); +@@ -562,9 +520,6 @@ static int dpaa2_mac_probe(struct fsl_mc + phy_interface_t if_mode; + int err = 0; + +- /* just being completely paranoid */ +- if (!mc_dev) +- return -EFAULT; + dev = &mc_dev->dev; + + /* prepare a net_dev structure to make the phy lib API happy */ -- cgit v1.2.3