mac80211: brcmfmac: restructuring sdio access functions - take 2
[openwrt/openwrt.git] / package / kernel / mac80211 / patches / 312-v4.16-0004-brcmfmac-Rename-replace-old-IO-functions-with-simple.patch
1 From 71bd508d7ded8c504ef05d1b4befecfe25e54cb1 Mon Sep 17 00:00:00 2001
2 From: Ian Molton <ian@mnementh.co.uk>
3 Date: Fri, 8 Dec 2017 13:10:29 +0100
4 Subject: [PATCH] brcmfmac: Rename / replace old IO functions with simpler
5 ones.
6
7 Primarily this patch removes:
8
9 brcmf_sdiod_f0_writeb()
10 brcmf_sdiod_reg_write()
11 brcmf_sdiod_reg_read()
12
13 Since we no longer use the quirky method of deciding which function to
14 address via the address being accessed, take the opportunity to rename
15 some IO functions more in line with common kernel code. We also convert
16 those that map directly to sdio_{read,write}*() to macros.
17
18 Signed-off-by: Ian Molton <ian@mnementh.co.uk>
19 Reviewed-by: Arend van Spriel <arend.vanspriel@broadcom.com>
20 Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
21 Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
22 ---
23 .../wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 169 +++----------------
24 .../wireless/broadcom/brcm80211/brcmfmac/sdio.c | 186 ++++++++++-----------
25 .../wireless/broadcom/brcm80211/brcmfmac/sdio.h | 28 +++-
26 3 files changed, 138 insertions(+), 245 deletions(-)
27
28 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
29 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
30 @@ -137,27 +137,27 @@ int brcmf_sdiod_intr_register(struct brc
31 if (sdiodev->bus_if->chip == BRCM_CC_43362_CHIP_ID) {
32 /* assign GPIO to SDIO core */
33 addr = CORE_CC_REG(SI_ENUM_BASE, gpiocontrol);
34 - gpiocontrol = brcmf_sdiod_regrl(sdiodev, addr, &ret);
35 + gpiocontrol = brcmf_sdiod_readl(sdiodev, addr, &ret);
36 gpiocontrol |= 0x2;
37 - brcmf_sdiod_regwl(sdiodev, addr, gpiocontrol, &ret);
38 + brcmf_sdiod_writel(sdiodev, addr, gpiocontrol, &ret);
39
40 - brcmf_sdiod_regwb(sdiodev, SBSDIO_GPIO_SELECT, 0xf,
41 - &ret);
42 - brcmf_sdiod_regwb(sdiodev, SBSDIO_GPIO_OUT, 0, &ret);
43 - brcmf_sdiod_regwb(sdiodev, SBSDIO_GPIO_EN, 0x2, &ret);
44 + brcmf_sdiod_writeb(sdiodev, SBSDIO_GPIO_SELECT,
45 + 0xf, &ret);
46 + brcmf_sdiod_writeb(sdiodev, SBSDIO_GPIO_OUT, 0, &ret);
47 + brcmf_sdiod_writeb(sdiodev, SBSDIO_GPIO_EN, 0x2, &ret);
48 }
49
50 /* must configure SDIO_CCCR_IENx to enable irq */
51 - data = brcmf_sdiod_regrb(sdiodev, SDIO_CCCR_IENx, &ret);
52 + data = brcmf_sdiod_func0_rb(sdiodev, SDIO_CCCR_IENx, &ret);
53 data |= 1 << SDIO_FUNC_1 | 1 << SDIO_FUNC_2 | 1;
54 - brcmf_sdiod_regwb(sdiodev, SDIO_CCCR_IENx, data, &ret);
55 + brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_IENx, data, &ret);
56
57 /* redirect, configure and enable io for interrupt signal */
58 data = SDIO_SEPINT_MASK | SDIO_SEPINT_OE;
59 if (pdata->oob_irq_flags & IRQF_TRIGGER_HIGH)
60 data |= SDIO_SEPINT_ACT_HI;
61 - brcmf_sdiod_regwb(sdiodev, SDIO_CCCR_BRCM_SEPINT, data, &ret);
62 -
63 + brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_BRCM_SEPINT,
64 + data, &ret);
65 sdio_release_host(sdiodev->func[1]);
66 } else {
67 brcmf_dbg(SDIO, "Entering\n");
68 @@ -183,8 +183,8 @@ void brcmf_sdiod_intr_unregister(struct
69
70 pdata = &sdiodev->settings->bus.sdio;
71 sdio_claim_host(sdiodev->func[1]);
72 - brcmf_sdiod_regwb(sdiodev, SDIO_CCCR_BRCM_SEPINT, 0, NULL);
73 - brcmf_sdiod_regwb(sdiodev, SDIO_CCCR_IENx, 0, NULL);
74 + brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_BRCM_SEPINT, 0, NULL);
75 + brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_IENx, 0, NULL);
76 sdio_release_host(sdiodev->func[1]);
77
78 sdiodev->oob_irq_requested = false;
79 @@ -242,8 +242,8 @@ static int brcmf_sdiod_set_sbaddr_window
80 addr = (address & SBSDIO_SBWINDOW_MASK) >> 8;
81
82 for (i = 0 ; i < 3 && !err ; i++, addr >>= 8)
83 - brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_SBADDRLOW + i,
84 - addr & 0xff, &err);
85 + brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_SBADDRLOW + i,
86 + addr & 0xff, &err);
87
88 return err;
89 }
90 @@ -267,124 +267,15 @@ static int brcmf_sdiod_addrprep(struct b
91 return 0;
92 }
93
94 -static inline int brcmf_sdiod_f0_writeb(struct sdio_func *func, u8 byte,
95 - uint regaddr)
96 -{
97 - int err_ret;
98 -
99 - /*
100 - * Can only directly write to some F0 registers.
101 - * Handle CCCR_IENx and CCCR_ABORT command
102 - * as a special case.
103 - */
104 - if ((regaddr == SDIO_CCCR_ABORT) ||
105 - (regaddr == SDIO_CCCR_IENx))
106 - sdio_writeb(func, byte, regaddr, &err_ret);
107 - else
108 - sdio_f0_writeb(func, byte, regaddr, &err_ret);
109 -
110 - return err_ret;
111 -}
112 -
113 -static int brcmf_sdiod_reg_write(struct brcmf_sdio_dev *sdiodev, u32 addr,
114 - u8 regsz, void *data)
115 -{
116 - int ret;
117 -
118 - /*
119 - * figure out how to read the register based on address range
120 - * 0x00 ~ 0x7FF: function 0 CCCR and FBR
121 - * 0x10000 ~ 0x1FFFF: function 1 miscellaneous registers
122 - * The rest: function 1 silicon backplane core registers
123 - * f0 writes must be bytewise
124 - */
125 -
126 - if ((addr & ~REG_F0_REG_MASK) == 0) {
127 - if (WARN_ON(regsz > 1))
128 - return -EINVAL;
129 - ret = brcmf_sdiod_f0_writeb(sdiodev->func[0],
130 - *(u8 *)data, addr);
131 - } else {
132 - switch (regsz) {
133 - case 1:
134 - sdio_writeb(sdiodev->func[1], *(u8 *)data, addr, &ret);
135 - break;
136 - case 4:
137 - ret = brcmf_sdiod_addrprep(sdiodev, &addr);
138 - if (ret)
139 - goto done;
140 -
141 - sdio_writel(sdiodev->func[1], *(u32 *)data, addr, &ret);
142 - break;
143 - default:
144 - WARN(1, "Invalid reg size\n");
145 - ret = -EINVAL;
146 - break;
147 - }
148 - }
149 -
150 -done:
151 - return ret;
152 -}
153 -
154 -static int brcmf_sdiod_reg_read(struct brcmf_sdio_dev *sdiodev, u32 addr,
155 - u8 regsz, void *data)
156 -{
157 - int ret;
158 -
159 - /*
160 - * figure out how to read the register based on address range
161 - * 0x00 ~ 0x7FF: function 0 CCCR and FBR
162 - * 0x10000 ~ 0x1FFFF: function 1 miscellaneous registers
163 - * The rest: function 1 silicon backplane core registers
164 - * f0 reads must be bytewise
165 - */
166 - if ((addr & ~REG_F0_REG_MASK) == 0) {
167 - if (WARN_ON(regsz > 1))
168 - return -EINVAL;
169 - *(u8 *)data = sdio_f0_readb(sdiodev->func[0], addr, &ret);
170 - } else {
171 - switch (regsz) {
172 - case 1:
173 - *(u8 *)data = sdio_readb(sdiodev->func[1], addr, &ret);
174 - break;
175 - case 4:
176 - ret = brcmf_sdiod_addrprep(sdiodev, &addr);
177 - if (ret)
178 - goto done;
179 -
180 - *(u32 *)data = sdio_readl(sdiodev->func[1], addr, &ret);
181 - break;
182 - default:
183 - WARN(1, "Invalid reg size\n");
184 - ret = -EINVAL;
185 - break;
186 - }
187 - }
188 -
189 -done:
190 - return ret;
191 -}
192 -
193 -u8 brcmf_sdiod_regrb(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret)
194 +u32 brcmf_sdiod_readl(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret)
195 {
196 - u8 data;
197 + u32 data = 0;
198 int retval;
199
200 - retval = brcmf_sdiod_reg_read(sdiodev, addr, 1, &data);
201 + retval = brcmf_sdiod_addrprep(sdiodev, &addr);
202
203 - if (ret)
204 - *ret = retval;
205 -
206 - return data;
207 -}
208 -
209 -u32 brcmf_sdiod_regrl(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret)
210 -{
211 - u32 data;
212 - int retval;
213 -
214 - retval = brcmf_sdiod_reg_read(sdiodev, addr, 4, &data);
215 + if (!retval)
216 + data = sdio_readl(sdiodev->func[1], addr, &retval);
217
218 if (ret)
219 *ret = retval;
220 @@ -392,23 +283,15 @@ u32 brcmf_sdiod_regrl(struct brcmf_sdio_
221 return data;
222 }
223
224 -void brcmf_sdiod_regwb(struct brcmf_sdio_dev *sdiodev, u32 addr,
225 - u8 data, int *ret)
226 +void brcmf_sdiod_writel(struct brcmf_sdio_dev *sdiodev, u32 addr,
227 + u32 data, int *ret)
228 {
229 int retval;
230
231 - retval = brcmf_sdiod_reg_write(sdiodev, addr, 1, &data);
232 -
233 - if (ret)
234 - *ret = retval;
235 -}
236 -
237 -void brcmf_sdiod_regwl(struct brcmf_sdio_dev *sdiodev, u32 addr,
238 - u32 data, int *ret)
239 -{
240 - int retval;
241 + retval = brcmf_sdiod_addrprep(sdiodev, &addr);
242
243 - retval = brcmf_sdiod_reg_write(sdiodev, addr, 4, &data);
244 + if (!retval)
245 + sdio_writel(sdiodev->func[1], data, addr, &retval);
246
247 if (ret)
248 *ret = retval;
249 @@ -846,8 +729,8 @@ int brcmf_sdiod_abort(struct brcmf_sdio_
250 {
251 brcmf_dbg(SDIO, "Enter\n");
252
253 - /* issue abort cmd52 command through F0 */
254 - brcmf_sdiod_reg_write(sdiodev, SDIO_CCCR_ABORT, 1, &fn);
255 + /* Issue abort cmd52 command through F0 */
256 + brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_ABORT, fn, NULL);
257
258 brcmf_dbg(SDIO, "Exit\n");
259 return 0;
260 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
261 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
262 @@ -669,7 +669,7 @@ static int r_sdreg32(struct brcmf_sdio *
263 int ret;
264
265 core = brcmf_chip_get_core(bus->ci, BCMA_CORE_SDIO_DEV);
266 - *regvar = brcmf_sdiod_regrl(bus->sdiodev, core->base + offset, &ret);
267 + *regvar = brcmf_sdiod_readl(bus->sdiodev, core->base + offset, &ret);
268
269 return ret;
270 }
271 @@ -680,7 +680,7 @@ static int w_sdreg32(struct brcmf_sdio *
272 int ret;
273
274 core = brcmf_chip_get_core(bus->ci, BCMA_CORE_SDIO_DEV);
275 - brcmf_sdiod_regwl(bus->sdiodev, core->base + reg_offset, regval, &ret);
276 + brcmf_sdiod_writel(bus->sdiodev, core->base + reg_offset, regval, &ret);
277
278 return ret;
279 }
280 @@ -697,8 +697,7 @@ brcmf_sdio_kso_control(struct brcmf_sdio
281
282 wr_val = (on << SBSDIO_FUNC1_SLEEPCSR_KSO_SHIFT);
283 /* 1st KSO write goes to AOS wake up core if device is asleep */
284 - brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR,
285 - wr_val, &err);
286 + brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR, wr_val, &err);
287
288 if (on) {
289 /* device WAKEUP through KSO:
290 @@ -724,7 +723,7 @@ brcmf_sdio_kso_control(struct brcmf_sdio
291 * just one write attempt may fail,
292 * read it back until it matches written value
293 */
294 - rd_val = brcmf_sdiod_regrb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR,
295 + rd_val = brcmf_sdiod_readb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR,
296 &err);
297 if (!err) {
298 if ((rd_val & bmask) == cmp_val)
299 @@ -734,9 +733,11 @@ brcmf_sdio_kso_control(struct brcmf_sdio
300 /* bail out upon subsequent access errors */
301 if (err && (err_cnt++ > BRCMF_SDIO_MAX_ACCESS_ERRORS))
302 break;
303 +
304 udelay(KSO_WAIT_US);
305 - brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR,
306 - wr_val, &err);
307 + brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR, wr_val,
308 + &err);
309 +
310 } while (try_cnt++ < MAX_KSO_ATTEMPTS);
311
312 if (try_cnt > 2)
313 @@ -772,15 +773,15 @@ static int brcmf_sdio_htclk(struct brcmf
314 clkreq =
315 bus->alp_only ? SBSDIO_ALP_AVAIL_REQ : SBSDIO_HT_AVAIL_REQ;
316
317 - brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
318 - clkreq, &err);
319 + brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
320 + clkreq, &err);
321 if (err) {
322 brcmf_err("HT Avail request error: %d\n", err);
323 return -EBADE;
324 }
325
326 /* Check current status */
327 - clkctl = brcmf_sdiod_regrb(bus->sdiodev,
328 + clkctl = brcmf_sdiod_readb(bus->sdiodev,
329 SBSDIO_FUNC1_CHIPCLKCSR, &err);
330 if (err) {
331 brcmf_err("HT Avail read error: %d\n", err);
332 @@ -790,35 +791,34 @@ static int brcmf_sdio_htclk(struct brcmf
333 /* Go to pending and await interrupt if appropriate */
334 if (!SBSDIO_CLKAV(clkctl, bus->alp_only) && pendok) {
335 /* Allow only clock-available interrupt */
336 - devctl = brcmf_sdiod_regrb(bus->sdiodev,
337 + devctl = brcmf_sdiod_readb(bus->sdiodev,
338 SBSDIO_DEVICE_CTL, &err);
339 if (err) {
340 - brcmf_err("Devctl error setting CA: %d\n",
341 - err);
342 + brcmf_err("Devctl error setting CA: %d\n", err);
343 return -EBADE;
344 }
345
346 devctl |= SBSDIO_DEVCTL_CA_INT_ONLY;
347 - brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_DEVICE_CTL,
348 - devctl, &err);
349 + brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_DEVICE_CTL,
350 + devctl, &err);
351 brcmf_dbg(SDIO, "CLKCTL: set PENDING\n");
352 bus->clkstate = CLK_PENDING;
353
354 return 0;
355 } else if (bus->clkstate == CLK_PENDING) {
356 /* Cancel CA-only interrupt filter */
357 - devctl = brcmf_sdiod_regrb(bus->sdiodev,
358 + devctl = brcmf_sdiod_readb(bus->sdiodev,
359 SBSDIO_DEVICE_CTL, &err);
360 devctl &= ~SBSDIO_DEVCTL_CA_INT_ONLY;
361 - brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_DEVICE_CTL,
362 - devctl, &err);
363 + brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_DEVICE_CTL,
364 + devctl, &err);
365 }
366
367 /* Otherwise, wait here (polling) for HT Avail */
368 timeout = jiffies +
369 msecs_to_jiffies(PMU_MAX_TRANSITION_DLY/1000);
370 while (!SBSDIO_CLKAV(clkctl, bus->alp_only)) {
371 - clkctl = brcmf_sdiod_regrb(bus->sdiodev,
372 + clkctl = brcmf_sdiod_readb(bus->sdiodev,
373 SBSDIO_FUNC1_CHIPCLKCSR,
374 &err);
375 if (time_after(jiffies, timeout))
376 @@ -852,16 +852,16 @@ static int brcmf_sdio_htclk(struct brcmf
377
378 if (bus->clkstate == CLK_PENDING) {
379 /* Cancel CA-only interrupt filter */
380 - devctl = brcmf_sdiod_regrb(bus->sdiodev,
381 + devctl = brcmf_sdiod_readb(bus->sdiodev,
382 SBSDIO_DEVICE_CTL, &err);
383 devctl &= ~SBSDIO_DEVCTL_CA_INT_ONLY;
384 - brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_DEVICE_CTL,
385 - devctl, &err);
386 + brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_DEVICE_CTL,
387 + devctl, &err);
388 }
389
390 bus->clkstate = CLK_SDONLY;
391 - brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
392 - clkreq, &err);
393 + brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
394 + clkreq, &err);
395 brcmf_dbg(SDIO, "CLKCTL: turned OFF\n");
396 if (err) {
397 brcmf_err("Failed access turning clock off: %d\n",
398 @@ -951,14 +951,14 @@ brcmf_sdio_bus_sleep(struct brcmf_sdio *
399
400 /* Going to sleep */
401 if (sleep) {
402 - clkcsr = brcmf_sdiod_regrb(bus->sdiodev,
403 + clkcsr = brcmf_sdiod_readb(bus->sdiodev,
404 SBSDIO_FUNC1_CHIPCLKCSR,
405 &err);
406 if ((clkcsr & SBSDIO_CSR_MASK) == 0) {
407 brcmf_dbg(SDIO, "no clock, set ALP\n");
408 - brcmf_sdiod_regwb(bus->sdiodev,
409 - SBSDIO_FUNC1_CHIPCLKCSR,
410 - SBSDIO_ALP_AVAIL_REQ, &err);
411 + brcmf_sdiod_writeb(bus->sdiodev,
412 + SBSDIO_FUNC1_CHIPCLKCSR,
413 + SBSDIO_ALP_AVAIL_REQ, &err);
414 }
415 err = brcmf_sdio_kso_control(bus, false);
416 } else {
417 @@ -1178,16 +1178,16 @@ static void brcmf_sdio_rxfail(struct brc
418 if (abort)
419 brcmf_sdiod_abort(bus->sdiodev, SDIO_FUNC_2);
420
421 - brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_FRAMECTRL,
422 - SFC_RF_TERM, &err);
423 + brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_FRAMECTRL, SFC_RF_TERM,
424 + &err);
425 bus->sdcnt.f1regdata++;
426
427 /* Wait until the packet has been flushed (device/FIFO stable) */
428 for (lastrbc = retries = 0xffff; retries > 0; retries--) {
429 - hi = brcmf_sdiod_regrb(bus->sdiodev,
430 - SBSDIO_FUNC1_RFRAMEBCHI, &err);
431 - lo = brcmf_sdiod_regrb(bus->sdiodev,
432 - SBSDIO_FUNC1_RFRAMEBCLO, &err);
433 + hi = brcmf_sdiod_readb(bus->sdiodev, SBSDIO_FUNC1_RFRAMEBCHI,
434 + &err);
435 + lo = brcmf_sdiod_readb(bus->sdiodev, SBSDIO_FUNC1_RFRAMEBCLO,
436 + &err);
437 bus->sdcnt.f1regdata += 2;
438
439 if ((hi == 0) && (lo == 0))
440 @@ -1229,12 +1229,12 @@ static void brcmf_sdio_txfail(struct brc
441 bus->sdcnt.tx_sderrs++;
442
443 brcmf_sdiod_abort(sdiodev, SDIO_FUNC_2);
444 - brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_FRAMECTRL, SFC_WF_TERM, NULL);
445 + brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_FRAMECTRL, SFC_WF_TERM, NULL);
446 bus->sdcnt.f1regdata++;
447
448 for (i = 0; i < 3; i++) {
449 - hi = brcmf_sdiod_regrb(sdiodev, SBSDIO_FUNC1_WFRAMEBCHI, NULL);
450 - lo = brcmf_sdiod_regrb(sdiodev, SBSDIO_FUNC1_WFRAMEBCLO, NULL);
451 + hi = brcmf_sdiod_readb(sdiodev, SBSDIO_FUNC1_WFRAMEBCHI, NULL);
452 + lo = brcmf_sdiod_readb(sdiodev, SBSDIO_FUNC1_WFRAMEBCLO, NULL);
453 bus->sdcnt.f1regdata += 2;
454 if ((hi == 0) && (lo == 0))
455 break;
456 @@ -2446,11 +2446,11 @@ static void brcmf_sdio_bus_stop(struct d
457 bus->hostintmask = 0;
458
459 /* Force backplane clocks to assure F2 interrupt propagates */
460 - saveclk = brcmf_sdiod_regrb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
461 + saveclk = brcmf_sdiod_readb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
462 &err);
463 if (!err)
464 - brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
465 - (saveclk | SBSDIO_FORCE_HT), &err);
466 + brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
467 + (saveclk | SBSDIO_FORCE_HT), &err);
468 if (err)
469 brcmf_err("Failed to force clock for F2: err %d\n",
470 err);
471 @@ -2509,7 +2509,7 @@ static int brcmf_sdio_intr_rstatus(struc
472 buscore = brcmf_chip_get_core(bus->ci, BCMA_CORE_SDIO_DEV);
473 addr = buscore->base + offsetof(struct sdpcmd_regs, intstatus);
474
475 - val = brcmf_sdiod_regrl(bus->sdiodev, addr, &ret);
476 + val = brcmf_sdiod_readl(bus->sdiodev, addr, &ret);
477 bus->sdcnt.f1regdata++;
478 if (ret != 0)
479 return ret;
480 @@ -2519,7 +2519,7 @@ static int brcmf_sdio_intr_rstatus(struc
481
482 /* Clear interrupts */
483 if (val) {
484 - brcmf_sdiod_regwl(bus->sdiodev, addr, val, &ret);
485 + brcmf_sdiod_writel(bus->sdiodev, addr, val, &ret);
486 bus->sdcnt.f1regdata++;
487 atomic_or(val, &bus->intstatus);
488 }
489 @@ -2545,23 +2545,23 @@ static void brcmf_sdio_dpc(struct brcmf_
490
491 #ifdef DEBUG
492 /* Check for inconsistent device control */
493 - devctl = brcmf_sdiod_regrb(bus->sdiodev,
494 - SBSDIO_DEVICE_CTL, &err);
495 + devctl = brcmf_sdiod_readb(bus->sdiodev, SBSDIO_DEVICE_CTL,
496 + &err);
497 #endif /* DEBUG */
498
499 /* Read CSR, if clock on switch to AVAIL, else ignore */
500 - clkctl = brcmf_sdiod_regrb(bus->sdiodev,
501 + clkctl = brcmf_sdiod_readb(bus->sdiodev,
502 SBSDIO_FUNC1_CHIPCLKCSR, &err);
503
504 brcmf_dbg(SDIO, "DPC: PENDING, devctl 0x%02x clkctl 0x%02x\n",
505 devctl, clkctl);
506
507 if (SBSDIO_HTAV(clkctl)) {
508 - devctl = brcmf_sdiod_regrb(bus->sdiodev,
509 + devctl = brcmf_sdiod_readb(bus->sdiodev,
510 SBSDIO_DEVICE_CTL, &err);
511 devctl &= ~SBSDIO_DEVCTL_CA_INT_ONLY;
512 - brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_DEVICE_CTL,
513 - devctl, &err);
514 + brcmf_sdiod_writeb(bus->sdiodev,
515 + SBSDIO_DEVICE_CTL, devctl, &err);
516 bus->clkstate = CLK_AVAIL;
517 }
518 }
519 @@ -3347,31 +3347,31 @@ static void brcmf_sdio_sr_init(struct br
520
521 brcmf_dbg(TRACE, "Enter\n");
522
523 - val = brcmf_sdiod_regrb(bus->sdiodev, SBSDIO_FUNC1_WAKEUPCTRL, &err);
524 + val = brcmf_sdiod_readb(bus->sdiodev, SBSDIO_FUNC1_WAKEUPCTRL, &err);
525 if (err) {
526 brcmf_err("error reading SBSDIO_FUNC1_WAKEUPCTRL\n");
527 return;
528 }
529
530 val |= 1 << SBSDIO_FUNC1_WCTRL_HTWAIT_SHIFT;
531 - brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_WAKEUPCTRL, val, &err);
532 + brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_WAKEUPCTRL, val, &err);
533 if (err) {
534 brcmf_err("error writing SBSDIO_FUNC1_WAKEUPCTRL\n");
535 return;
536 }
537
538 /* Add CMD14 Support */
539 - brcmf_sdiod_regwb(bus->sdiodev, SDIO_CCCR_BRCM_CARDCAP,
540 - (SDIO_CCCR_BRCM_CARDCAP_CMD14_SUPPORT |
541 - SDIO_CCCR_BRCM_CARDCAP_CMD14_EXT),
542 - &err);
543 + brcmf_sdiod_func0_wb(bus->sdiodev, SDIO_CCCR_BRCM_CARDCAP,
544 + (SDIO_CCCR_BRCM_CARDCAP_CMD14_SUPPORT |
545 + SDIO_CCCR_BRCM_CARDCAP_CMD14_EXT),
546 + &err);
547 if (err) {
548 brcmf_err("error writing SDIO_CCCR_BRCM_CARDCAP\n");
549 return;
550 }
551
552 - brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
553 - SBSDIO_FORCE_HT, &err);
554 + brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
555 + SBSDIO_FORCE_HT, &err);
556 if (err) {
557 brcmf_err("error writing SBSDIO_FUNC1_CHIPCLKCSR\n");
558 return;
559 @@ -3394,7 +3394,7 @@ static int brcmf_sdio_kso_init(struct br
560 if (brcmf_chip_get_core(bus->ci, BCMA_CORE_SDIO_DEV)->rev < 12)
561 return 0;
562
563 - val = brcmf_sdiod_regrb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR, &err);
564 + val = brcmf_sdiod_readb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR, &err);
565 if (err) {
566 brcmf_err("error reading SBSDIO_FUNC1_SLEEPCSR\n");
567 return err;
568 @@ -3403,8 +3403,8 @@ static int brcmf_sdio_kso_init(struct br
569 if (!(val & SBSDIO_FUNC1_SLEEPCSR_KSO_MASK)) {
570 val |= (SBSDIO_FUNC1_SLEEPCSR_KSO_EN <<
571 SBSDIO_FUNC1_SLEEPCSR_KSO_SHIFT);
572 - brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR,
573 - val, &err);
574 + brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR,
575 + val, &err);
576 if (err) {
577 brcmf_err("error writing SBSDIO_FUNC1_SLEEPCSR\n");
578 return err;
579 @@ -3565,9 +3565,9 @@ static void brcmf_sdio_bus_watchdog(stru
580 u8 devpend;
581
582 sdio_claim_host(bus->sdiodev->func[1]);
583 - devpend = brcmf_sdiod_regrb(bus->sdiodev,
584 - SDIO_CCCR_INTx,
585 - NULL);
586 + devpend = brcmf_sdiod_func0_rb(bus->sdiodev,
587 + SDIO_CCCR_INTx,
588 + NULL);
589 sdio_release_host(bus->sdiodev->func[1]);
590 intstatus = devpend & (INTR_STATUS_FUNC1 |
591 INTR_STATUS_FUNC2);
592 @@ -3705,12 +3705,12 @@ brcmf_sdio_drivestrengthinit(struct brcm
593 }
594 }
595 addr = CORE_CC_REG(pmu->base, chipcontrol_addr);
596 - brcmf_sdiod_regwl(sdiodev, addr, 1, NULL);
597 - cc_data_temp = brcmf_sdiod_regrl(sdiodev, addr, NULL);
598 + brcmf_sdiod_writel(sdiodev, addr, 1, NULL);
599 + cc_data_temp = brcmf_sdiod_readl(sdiodev, addr, NULL);
600 cc_data_temp &= ~str_mask;
601 drivestrength_sel <<= str_shift;
602 cc_data_temp |= drivestrength_sel;
603 - brcmf_sdiod_regwl(sdiodev, addr, cc_data_temp, NULL);
604 + brcmf_sdiod_writel(sdiodev, addr, cc_data_temp, NULL);
605
606 brcmf_dbg(INFO, "SDIO: %d mA (req=%d mA) drive strength selected, set to 0x%08x\n",
607 str_tab[i].strength, drivestrength, cc_data_temp);
608 @@ -3725,7 +3725,7 @@ static int brcmf_sdio_buscoreprep(void *
609
610 /* Try forcing SDIO core to do ALPAvail request only */
611 clkset = SBSDIO_FORCE_HW_CLKREQ_OFF | SBSDIO_ALP_AVAIL_REQ;
612 - brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, clkset, &err);
613 + brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, clkset, &err);
614 if (err) {
615 brcmf_err("error writing for HT off\n");
616 return err;
617 @@ -3733,8 +3733,7 @@ static int brcmf_sdio_buscoreprep(void *
618
619 /* If register supported, wait for ALPAvail and then force ALP */
620 /* This may take up to 15 milliseconds */
621 - clkval = brcmf_sdiod_regrb(sdiodev,
622 - SBSDIO_FUNC1_CHIPCLKCSR, NULL);
623 + clkval = brcmf_sdiod_readb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, NULL);
624
625 if ((clkval & ~SBSDIO_AVBITS) != clkset) {
626 brcmf_err("ChipClkCSR access: wrote 0x%02x read 0x%02x\n",
627 @@ -3742,10 +3741,11 @@ static int brcmf_sdio_buscoreprep(void *
628 return -EACCES;
629 }
630
631 - SPINWAIT(((clkval = brcmf_sdiod_regrb(sdiodev,
632 - SBSDIO_FUNC1_CHIPCLKCSR, NULL)),
633 - !SBSDIO_ALPAV(clkval)),
634 - PMU_MAX_TRANSITION_DLY);
635 + SPINWAIT(((clkval = brcmf_sdiod_readb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
636 + NULL)),
637 + !SBSDIO_ALPAV(clkval)),
638 + PMU_MAX_TRANSITION_DLY);
639 +
640 if (!SBSDIO_ALPAV(clkval)) {
641 brcmf_err("timeout on ALPAV wait, clkval 0x%02x\n",
642 clkval);
643 @@ -3753,11 +3753,11 @@ static int brcmf_sdio_buscoreprep(void *
644 }
645
646 clkset = SBSDIO_FORCE_HW_CLKREQ_OFF | SBSDIO_FORCE_ALP;
647 - brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, clkset, &err);
648 + brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, clkset, &err);
649 udelay(65);
650
651 /* Also, disable the extra SDIO pull-ups */
652 - brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_SDIOPULLUP, 0, NULL);
653 + brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_SDIOPULLUP, 0, NULL);
654
655 return 0;
656 }
657 @@ -3772,7 +3772,7 @@ static void brcmf_sdio_buscore_activate(
658 /* clear all interrupts */
659 core = brcmf_chip_get_core(chip, BCMA_CORE_SDIO_DEV);
660 reg_addr = core->base + offsetof(struct sdpcmd_regs, intstatus);
661 - brcmf_sdiod_regwl(sdiodev, reg_addr, 0xFFFFFFFF, NULL);
662 + brcmf_sdiod_writel(sdiodev, reg_addr, 0xFFFFFFFF, NULL);
663
664 if (rstvec)
665 /* Write reset vector to address 0 */
666 @@ -3785,7 +3785,7 @@ static u32 brcmf_sdio_buscore_read32(voi
667 struct brcmf_sdio_dev *sdiodev = ctx;
668 u32 val, rev;
669
670 - val = brcmf_sdiod_regrl(sdiodev, addr, NULL);
671 + val = brcmf_sdiod_readl(sdiodev, addr, NULL);
672 if ((sdiodev->func[0]->device == SDIO_DEVICE_ID_BROADCOM_4335_4339 ||
673 sdiodev->func[0]->device == SDIO_DEVICE_ID_BROADCOM_4339) &&
674 addr == CORE_CC_REG(SI_ENUM_BASE, chipid)) {
675 @@ -3802,7 +3802,7 @@ static void brcmf_sdio_buscore_write32(v
676 {
677 struct brcmf_sdio_dev *sdiodev = ctx;
678
679 - brcmf_sdiod_regwl(sdiodev, addr, val, NULL);
680 + brcmf_sdiod_writel(sdiodev, addr, val, NULL);
681 }
682
683 static const struct brcmf_buscore_ops brcmf_sdio_buscore_ops = {
684 @@ -3826,18 +3826,18 @@ brcmf_sdio_probe_attach(struct brcmf_sdi
685 sdio_claim_host(sdiodev->func[1]);
686
687 pr_debug("F1 signature read @0x18000000=0x%4x\n",
688 - brcmf_sdiod_regrl(sdiodev, SI_ENUM_BASE, NULL));
689 + brcmf_sdiod_readl(sdiodev, SI_ENUM_BASE, NULL));
690
691 /*
692 * Force PLL off until brcmf_chip_attach()
693 * programs PLL control regs
694 */
695
696 - brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
697 - BRCMF_INIT_CLKCTL1, &err);
698 + brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, BRCMF_INIT_CLKCTL1,
699 + &err);
700 if (!err)
701 - clkctl = brcmf_sdiod_regrb(sdiodev,
702 - SBSDIO_FUNC1_CHIPCLKCSR, &err);
703 + clkctl = brcmf_sdiod_readb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
704 + &err);
705
706 if (err || ((clkctl & ~SBSDIO_AVBITS) != BRCMF_INIT_CLKCTL1)) {
707 brcmf_err("ChipClkCSR access: err %d wrote 0x%02x read 0x%02x\n",
708 @@ -3897,25 +3897,25 @@ brcmf_sdio_probe_attach(struct brcmf_sdi
709 brcmf_sdio_drivestrengthinit(sdiodev, bus->ci, drivestrength);
710
711 /* Set card control so an SDIO card reset does a WLAN backplane reset */
712 - reg_val = brcmf_sdiod_regrb(sdiodev, SDIO_CCCR_BRCM_CARDCTRL, &err);
713 + reg_val = brcmf_sdiod_func0_rb(sdiodev, SDIO_CCCR_BRCM_CARDCTRL, &err);
714 if (err)
715 goto fail;
716
717 reg_val |= SDIO_CCCR_BRCM_CARDCTRL_WLANRESET;
718
719 - brcmf_sdiod_regwb(sdiodev, SDIO_CCCR_BRCM_CARDCTRL, reg_val, &err);
720 + brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_BRCM_CARDCTRL, reg_val, &err);
721 if (err)
722 goto fail;
723
724 /* set PMUControl so a backplane reset does PMU state reload */
725 reg_addr = CORE_CC_REG(brcmf_chip_get_pmu(bus->ci)->base, pmucontrol);
726 - reg_val = brcmf_sdiod_regrl(sdiodev, reg_addr, &err);
727 + reg_val = brcmf_sdiod_readl(sdiodev, reg_addr, &err);
728 if (err)
729 goto fail;
730
731 reg_val |= (BCMA_CC_PMU_CTL_RES_RELOAD << BCMA_CC_PMU_CTL_RES_SHIFT);
732
733 - brcmf_sdiod_regwl(sdiodev, reg_addr, reg_val, &err);
734 + brcmf_sdiod_writel(sdiodev, reg_addr, reg_val, &err);
735 if (err)
736 goto fail;
737
738 @@ -4055,10 +4055,10 @@ static void brcmf_sdio_firmware_callback
739 goto release;
740
741 /* Force clocks on backplane to be sure F2 interrupt propagates */
742 - saveclk = brcmf_sdiod_regrb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, &err);
743 + saveclk = brcmf_sdiod_readb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, &err);
744 if (!err) {
745 - brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
746 - (saveclk | SBSDIO_FORCE_HT), &err);
747 + brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
748 + (saveclk | SBSDIO_FORCE_HT), &err);
749 }
750 if (err) {
751 brcmf_err("Failed to force clock for F2: err %d\n", err);
752 @@ -4080,7 +4080,7 @@ static void brcmf_sdio_firmware_callback
753 w_sdreg32(bus, bus->hostintmask,
754 offsetof(struct sdpcmd_regs, hostintmask));
755
756 - brcmf_sdiod_regwb(sdiodev, SBSDIO_WATERMARK, 8, &err);
757 + brcmf_sdiod_writeb(sdiodev, SBSDIO_WATERMARK, 8, &err);
758 } else {
759 /* Disable F2 again */
760 sdio_disable_func(sdiodev->func[SDIO_FUNC_2]);
761 @@ -4091,8 +4091,8 @@ static void brcmf_sdio_firmware_callback
762 brcmf_sdio_sr_init(bus);
763 } else {
764 /* Restore previous clock setting */
765 - brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
766 - saveclk, &err);
767 + brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
768 + saveclk, &err);
769 }
770
771 if (err == 0) {
772 @@ -4225,7 +4225,7 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
773 bus->rxflow = false;
774
775 /* Done with backplane-dependent accesses, can drop clock... */
776 - brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, 0, NULL);
777 + brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, 0, NULL);
778
779 sdio_release_host(bus->sdiodev->func[1]);
780
781 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
782 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
783 @@ -50,6 +50,7 @@
784 #define SBSDIO_NUM_FUNCTION 3
785
786 /* function 0 vendor specific CCCR registers */
787 +
788 #define SDIO_CCCR_BRCM_CARDCAP 0xf0
789 #define SDIO_CCCR_BRCM_CARDCAP_CMD14_SUPPORT 0x02
790 #define SDIO_CCCR_BRCM_CARDCAP_CMD14_EXT 0x04
791 @@ -131,8 +132,6 @@
792 /* with b15, maps to 32-bit SB access */
793 #define SBSDIO_SB_ACCESS_2_4B_FLAG 0x08000
794
795 -/* valid bits in SBSDIO_FUNC1_SBADDRxxx regs */
796 -
797 /* Address bits from SBADDR regs */
798 #define SBSDIO_SBWINDOW_MASK 0xffff8000
799
800 @@ -293,13 +292,24 @@ struct sdpcmd_regs {
801 int brcmf_sdiod_intr_register(struct brcmf_sdio_dev *sdiodev);
802 void brcmf_sdiod_intr_unregister(struct brcmf_sdio_dev *sdiodev);
803
804 -/* sdio device register access interface */
805 -u8 brcmf_sdiod_regrb(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret);
806 -u32 brcmf_sdiod_regrl(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret);
807 -void brcmf_sdiod_regwb(struct brcmf_sdio_dev *sdiodev, u32 addr, u8 data,
808 - int *ret);
809 -void brcmf_sdiod_regwl(struct brcmf_sdio_dev *sdiodev, u32 addr, u32 data,
810 - int *ret);
811 +/* SDIO device register access interface */
812 +/* Accessors for SDIO Function 0 */
813 +#define brcmf_sdiod_func0_rb(sdiodev, addr, r) \
814 + sdio_readb((sdiodev)->func[0], (addr), (r))
815 +
816 +#define brcmf_sdiod_func0_wb(sdiodev, addr, v, ret) \
817 + sdio_writeb((sdiodev)->func[0], (v), (addr), (ret))
818 +
819 +/* Accessors for SDIO Function 1 */
820 +#define brcmf_sdiod_readb(sdiodev, addr, r) \
821 + sdio_readb((sdiodev)->func[1], (addr), (r))
822 +
823 +#define brcmf_sdiod_writeb(sdiodev, addr, v, ret) \
824 + sdio_writeb((sdiodev)->func[1], (v), (addr), (ret))
825 +
826 +u32 brcmf_sdiod_readl(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret);
827 +void brcmf_sdiod_writel(struct brcmf_sdio_dev *sdiodev, u32 addr, u32 data,
828 + int *ret);
829
830 /* Buffer transfer to/from device (client) core via cmd53.
831 * fn: function number