layerscape: make uImage with zImage for 32-bit kernel
[openwrt/openwrt.git] / target / linux / layerscape / patches-4.4 / 7209-staging-fsl-dpaa2-mac-Interrupt-code-cleanup.patch
1 From bb42890533f9592e8d30654b4e0b19c3cf7caaec Mon Sep 17 00:00:00 2001
2 From: Ioana Radulescu <ruxandra.radulescu@nxp.com>
3 Date: Fri, 1 Apr 2016 18:38:18 +0300
4 Subject: [PATCH 209/226] staging: fsl-dpaa2/mac: Interrupt code cleanup
5
6 Cleanup and a couple of minor fixes for the interrupt
7 handling code:
8 * Removed a few unnecessary checks, unify format for others
9 * Don't print error/debug messages in interrupt handler
10 * No need to explicitly disable DPMAC interrupts before
11 configuring them
12 * Use unlikely in interrupt handler routine error checks
13 * if status register is zero or we're unable to read its value,
14 return IRQ_NONE instead of IRQ_HANDLED
15 * always clear the entire status register, not just the bit(s)
16 that were treated
17
18 Signed-off-by: Ioana Radulescu <ruxandra.radulescu@nxp.com>
19 (cherry picked from commit 4b46eec16c56e4f453ca1558af9aceaf6ffe831a)
20 (Stuart:resolved merge conflict)
21 Signed-off-by: Stuart Yoder <stuart.yoder@nxp.com>
22 ---
23 drivers/staging/fsl-dpaa2/mac/mac.c | 77 ++++++++---------------------------
24 1 file changed, 16 insertions(+), 61 deletions(-)
25
26 --- a/drivers/staging/fsl-dpaa2/mac/mac.c
27 +++ b/drivers/staging/fsl-dpaa2/mac/mac.c
28 @@ -132,7 +132,7 @@ static void dpaa2_mac_link_changed(struc
29 }
30
31 /* IRQ bits that we handle */
32 -static const u32 dpmac_irq_mask = DPMAC_IRQ_EVENT_LINK_CFG_REQ;
33 +static const u32 dpmac_irq_mask = DPMAC_IRQ_EVENT_LINK_CFG_REQ;
34
35 #ifdef CONFIG_FSL_DPAA2_MAC_NETDEVS
36 static netdev_tx_t dpaa2_mac_drop_frame(struct sk_buff *skb,
37 @@ -345,16 +345,13 @@ static const struct ethtool_ops dpaa2_ma
38 };
39 #endif /* CONFIG_FSL_DPAA2_MAC_NETDEVS */
40
41 -static int configure_link(struct dpaa2_mac_priv *priv,
42 - struct dpmac_link_cfg *cfg)
43 +static void configure_link(struct dpaa2_mac_priv *priv,
44 + struct dpmac_link_cfg *cfg)
45 {
46 struct phy_device *phydev = priv->netdev->phydev;
47
48 - if (!phydev) {
49 - dev_warn(priv->netdev->dev.parent,
50 - "asked to change PHY settings but PHY ref is NULL, ignoring\n");
51 - return 0;
52 - }
53 + if (unlikely(!phydev))
54 + return;
55
56 phydev->speed = cfg->rate;
57 phydev->duplex = !!(cfg->options & DPMAC_LINK_OPT_HALF_DUPLEX);
58 @@ -368,8 +365,6 @@ static int configure_link(struct dpaa2_m
59 }
60
61 phy_start_aneg(phydev);
62 -
63 - return 0;
64 }
65
66 static irqreturn_t dpaa2_mac_irq_handler(int irq_num, void *arg)
67 @@ -378,53 +373,29 @@ static irqreturn_t dpaa2_mac_irq_handler
68 struct fsl_mc_device *mc_dev = to_fsl_mc_device(dev);
69 struct dpaa2_mac_priv *priv = dev_get_drvdata(dev);
70 struct dpmac_link_cfg link_cfg;
71 - u8 irq_index = DPMAC_IRQ_INDEX;
72 - u32 status, clear = 0;
73 + u32 status;
74 int err;
75
76 - if (mc_dev->irqs[0]->msi_desc->irq != irq_num) {
77 - dev_err(dev, "received unexpected interrupt %d!\n", irq_num);
78 - goto err;
79 - }
80 -
81 err = dpmac_get_irq_status(mc_dev->mc_io, 0, mc_dev->mc_handle,
82 - irq_index, &status);
83 - if (err) {
84 - dev_err(dev, "dpmac_get_irq_status err %d\n", err);
85 - clear = ~0x0u;
86 - goto out;
87 - }
88 + DPMAC_IRQ_INDEX, &status);
89 + if (unlikely(err || !status))
90 + return IRQ_NONE;
91
92 /* DPNI-initiated link configuration; 'ifconfig up' also calls this */
93 if (status & DPMAC_IRQ_EVENT_LINK_CFG_REQ) {
94 - dev_dbg(dev, "DPMAC IRQ %d - LINK_CFG_REQ\n", irq_num);
95 - clear |= DPMAC_IRQ_EVENT_LINK_CFG_REQ;
96 -
97 err = dpmac_get_link_cfg(mc_dev->mc_io, 0, mc_dev->mc_handle,
98 &link_cfg);
99 - if (err) {
100 - dev_err(dev, "dpmac_get_link_cfg err %d\n", err);
101 + if (unlikely(err))
102 goto out;
103 - }
104
105 - err = configure_link(priv, &link_cfg);
106 - if (err) {
107 - dev_err(dev, "cannot configure link\n");
108 - goto out;
109 - }
110 + configure_link(priv, &link_cfg);
111 }
112
113 out:
114 - err = dpmac_clear_irq_status(mc_dev->mc_io, 0, mc_dev->mc_handle,
115 - irq_index, clear);
116 - if (err < 0)
117 - dev_err(&mc_dev->dev, "dpmac_clear_irq_status() err %d\n", err);
118 + dpmac_clear_irq_status(mc_dev->mc_io, 0, mc_dev->mc_handle,
119 + DPMAC_IRQ_INDEX, status);
120
121 return IRQ_HANDLED;
122 -
123 -err:
124 - dev_warn(dev, "DPMAC IRQ %d was not handled!\n", irq_num);
125 - return IRQ_NONE;
126 }
127
128 static int setup_irqs(struct fsl_mc_device *mc_dev)
129 @@ -437,19 +408,6 @@ static int setup_irqs(struct fsl_mc_devi
130 return err;
131 }
132
133 - err = dpmac_set_irq_mask(mc_dev->mc_io, 0, mc_dev->mc_handle,
134 - DPMAC_IRQ_INDEX, dpmac_irq_mask);
135 - if (err < 0) {
136 - dev_err(&mc_dev->dev, "dpmac_set_irq_mask err %d\n", err);
137 - goto free_irq;
138 - }
139 - err = dpmac_set_irq_enable(mc_dev->mc_io, 0, mc_dev->mc_handle,
140 - DPMAC_IRQ_INDEX, 0);
141 - if (err) {
142 - dev_err(&mc_dev->dev, "dpmac_set_irq_enable err %d\n", err);
143 - goto free_irq;
144 - }
145 -
146 err = devm_request_threaded_irq(&mc_dev->dev,
147 mc_dev->irqs[0]->msi_desc->irq,
148 NULL, &dpaa2_mac_irq_handler,
149 @@ -463,7 +421,7 @@ static int setup_irqs(struct fsl_mc_devi
150
151 err = dpmac_set_irq_mask(mc_dev->mc_io, 0, mc_dev->mc_handle,
152 DPMAC_IRQ_INDEX, dpmac_irq_mask);
153 - if (err < 0) {
154 + if (err) {
155 dev_err(&mc_dev->dev, "dpmac_set_irq_mask err %d\n", err);
156 goto free_irq;
157 }
158 @@ -490,12 +448,12 @@ static void teardown_irqs(struct fsl_mc_
159
160 err = dpmac_set_irq_mask(mc_dev->mc_io, 0, mc_dev->mc_handle,
161 DPMAC_IRQ_INDEX, dpmac_irq_mask);
162 - if (err < 0)
163 + if (err)
164 dev_err(&mc_dev->dev, "dpmac_set_irq_mask err %d\n", err);
165
166 err = dpmac_set_irq_enable(mc_dev->mc_io, 0, mc_dev->mc_handle,
167 DPMAC_IRQ_INDEX, 0);
168 - if (err < 0)
169 + if (err)
170 dev_err(&mc_dev->dev, "dpmac_set_irq_enable err %d\n", err);
171
172 devm_free_irq(&mc_dev->dev, mc_dev->irqs[0]->msi_desc->irq, &mc_dev->dev);
173 @@ -562,9 +520,6 @@ static int dpaa2_mac_probe(struct fsl_mc
174 phy_interface_t if_mode;
175 int err = 0;
176
177 - /* just being completely paranoid */
178 - if (!mc_dev)
179 - return -EFAULT;
180 dev = &mc_dev->dev;
181
182 /* prepare a net_dev structure to make the phy lib API happy */