123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831 |
- From 71bd508d7ded8c504ef05d1b4befecfe25e54cb1 Mon Sep 17 00:00:00 2001
- From: Ian Molton <[email protected]>
- Date: Fri, 8 Dec 2017 13:10:29 +0100
- Subject: [PATCH] brcmfmac: Rename / replace old IO functions with simpler
- ones.
- Primarily this patch removes:
- brcmf_sdiod_f0_writeb()
- brcmf_sdiod_reg_write()
- brcmf_sdiod_reg_read()
- Since we no longer use the quirky method of deciding which function to
- address via the address being accessed, take the opportunity to rename
- some IO functions more in line with common kernel code. We also convert
- those that map directly to sdio_{read,write}*() to macros.
- Signed-off-by: Ian Molton <[email protected]>
- Reviewed-by: Arend van Spriel <[email protected]>
- Signed-off-by: Arend van Spriel <[email protected]>
- Signed-off-by: Kalle Valo <[email protected]>
- ---
- .../wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 169 +++----------------
- .../wireless/broadcom/brcm80211/brcmfmac/sdio.c | 186 ++++++++++-----------
- .../wireless/broadcom/brcm80211/brcmfmac/sdio.h | 28 +++-
- 3 files changed, 138 insertions(+), 245 deletions(-)
- --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
- +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
- @@ -137,27 +137,27 @@ int brcmf_sdiod_intr_register(struct brc
- if (sdiodev->bus_if->chip == BRCM_CC_43362_CHIP_ID) {
- /* assign GPIO to SDIO core */
- addr = CORE_CC_REG(SI_ENUM_BASE, gpiocontrol);
- - gpiocontrol = brcmf_sdiod_regrl(sdiodev, addr, &ret);
- + gpiocontrol = brcmf_sdiod_readl(sdiodev, addr, &ret);
- gpiocontrol |= 0x2;
- - brcmf_sdiod_regwl(sdiodev, addr, gpiocontrol, &ret);
- + brcmf_sdiod_writel(sdiodev, addr, gpiocontrol, &ret);
-
- - brcmf_sdiod_regwb(sdiodev, SBSDIO_GPIO_SELECT, 0xf,
- - &ret);
- - brcmf_sdiod_regwb(sdiodev, SBSDIO_GPIO_OUT, 0, &ret);
- - brcmf_sdiod_regwb(sdiodev, SBSDIO_GPIO_EN, 0x2, &ret);
- + brcmf_sdiod_writeb(sdiodev, SBSDIO_GPIO_SELECT,
- + 0xf, &ret);
- + brcmf_sdiod_writeb(sdiodev, SBSDIO_GPIO_OUT, 0, &ret);
- + brcmf_sdiod_writeb(sdiodev, SBSDIO_GPIO_EN, 0x2, &ret);
- }
-
- /* must configure SDIO_CCCR_IENx to enable irq */
- - data = brcmf_sdiod_regrb(sdiodev, SDIO_CCCR_IENx, &ret);
- + data = brcmf_sdiod_func0_rb(sdiodev, SDIO_CCCR_IENx, &ret);
- data |= 1 << SDIO_FUNC_1 | 1 << SDIO_FUNC_2 | 1;
- - brcmf_sdiod_regwb(sdiodev, SDIO_CCCR_IENx, data, &ret);
- + brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_IENx, data, &ret);
-
- /* redirect, configure and enable io for interrupt signal */
- data = SDIO_SEPINT_MASK | SDIO_SEPINT_OE;
- if (pdata->oob_irq_flags & IRQF_TRIGGER_HIGH)
- data |= SDIO_SEPINT_ACT_HI;
- - brcmf_sdiod_regwb(sdiodev, SDIO_CCCR_BRCM_SEPINT, data, &ret);
- -
- + brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_BRCM_SEPINT,
- + data, &ret);
- sdio_release_host(sdiodev->func[1]);
- } else {
- brcmf_dbg(SDIO, "Entering\n");
- @@ -183,8 +183,8 @@ void brcmf_sdiod_intr_unregister(struct
-
- pdata = &sdiodev->settings->bus.sdio;
- sdio_claim_host(sdiodev->func[1]);
- - brcmf_sdiod_regwb(sdiodev, SDIO_CCCR_BRCM_SEPINT, 0, NULL);
- - brcmf_sdiod_regwb(sdiodev, SDIO_CCCR_IENx, 0, NULL);
- + brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_BRCM_SEPINT, 0, NULL);
- + brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_IENx, 0, NULL);
- sdio_release_host(sdiodev->func[1]);
-
- sdiodev->oob_irq_requested = false;
- @@ -242,8 +242,8 @@ static int brcmf_sdiod_set_sbaddr_window
- addr = (address & SBSDIO_SBWINDOW_MASK) >> 8;
-
- for (i = 0 ; i < 3 && !err ; i++, addr >>= 8)
- - brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_SBADDRLOW + i,
- - addr & 0xff, &err);
- + brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_SBADDRLOW + i,
- + addr & 0xff, &err);
-
- return err;
- }
- @@ -267,124 +267,15 @@ static int brcmf_sdiod_addrprep(struct b
- return 0;
- }
-
- -static inline int brcmf_sdiod_f0_writeb(struct sdio_func *func, u8 byte,
- - uint regaddr)
- -{
- - int err_ret;
- -
- - /*
- - * Can only directly write to some F0 registers.
- - * Handle CCCR_IENx and CCCR_ABORT command
- - * as a special case.
- - */
- - if ((regaddr == SDIO_CCCR_ABORT) ||
- - (regaddr == SDIO_CCCR_IENx))
- - sdio_writeb(func, byte, regaddr, &err_ret);
- - else
- - sdio_f0_writeb(func, byte, regaddr, &err_ret);
- -
- - return err_ret;
- -}
- -
- -static int brcmf_sdiod_reg_write(struct brcmf_sdio_dev *sdiodev, u32 addr,
- - u8 regsz, void *data)
- -{
- - int ret;
- -
- - /*
- - * figure out how to read the register based on address range
- - * 0x00 ~ 0x7FF: function 0 CCCR and FBR
- - * 0x10000 ~ 0x1FFFF: function 1 miscellaneous registers
- - * The rest: function 1 silicon backplane core registers
- - * f0 writes must be bytewise
- - */
- -
- - if ((addr & ~REG_F0_REG_MASK) == 0) {
- - if (WARN_ON(regsz > 1))
- - return -EINVAL;
- - ret = brcmf_sdiod_f0_writeb(sdiodev->func[0],
- - *(u8 *)data, addr);
- - } else {
- - switch (regsz) {
- - case 1:
- - sdio_writeb(sdiodev->func[1], *(u8 *)data, addr, &ret);
- - break;
- - case 4:
- - ret = brcmf_sdiod_addrprep(sdiodev, &addr);
- - if (ret)
- - goto done;
- -
- - sdio_writel(sdiodev->func[1], *(u32 *)data, addr, &ret);
- - break;
- - default:
- - WARN(1, "Invalid reg size\n");
- - ret = -EINVAL;
- - break;
- - }
- - }
- -
- -done:
- - return ret;
- -}
- -
- -static int brcmf_sdiod_reg_read(struct brcmf_sdio_dev *sdiodev, u32 addr,
- - u8 regsz, void *data)
- -{
- - int ret;
- -
- - /*
- - * figure out how to read the register based on address range
- - * 0x00 ~ 0x7FF: function 0 CCCR and FBR
- - * 0x10000 ~ 0x1FFFF: function 1 miscellaneous registers
- - * The rest: function 1 silicon backplane core registers
- - * f0 reads must be bytewise
- - */
- - if ((addr & ~REG_F0_REG_MASK) == 0) {
- - if (WARN_ON(regsz > 1))
- - return -EINVAL;
- - *(u8 *)data = sdio_f0_readb(sdiodev->func[0], addr, &ret);
- - } else {
- - switch (regsz) {
- - case 1:
- - *(u8 *)data = sdio_readb(sdiodev->func[1], addr, &ret);
- - break;
- - case 4:
- - ret = brcmf_sdiod_addrprep(sdiodev, &addr);
- - if (ret)
- - goto done;
- -
- - *(u32 *)data = sdio_readl(sdiodev->func[1], addr, &ret);
- - break;
- - default:
- - WARN(1, "Invalid reg size\n");
- - ret = -EINVAL;
- - break;
- - }
- - }
- -
- -done:
- - return ret;
- -}
- -
- -u8 brcmf_sdiod_regrb(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret)
- +u32 brcmf_sdiod_readl(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret)
- {
- - u8 data;
- + u32 data = 0;
- int retval;
-
- - retval = brcmf_sdiod_reg_read(sdiodev, addr, 1, &data);
- -
- - if (ret)
- - *ret = retval;
- -
- - return data;
- -}
- + retval = brcmf_sdiod_addrprep(sdiodev, &addr);
-
- -u32 brcmf_sdiod_regrl(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret)
- -{
- - u32 data;
- - int retval;
- -
- - retval = brcmf_sdiod_reg_read(sdiodev, addr, 4, &data);
- + if (!retval)
- + data = sdio_readl(sdiodev->func[1], addr, &retval);
-
- if (ret)
- *ret = retval;
- @@ -392,23 +283,15 @@ u32 brcmf_sdiod_regrl(struct brcmf_sdio_
- return data;
- }
-
- -void brcmf_sdiod_regwb(struct brcmf_sdio_dev *sdiodev, u32 addr,
- - u8 data, int *ret)
- +void brcmf_sdiod_writel(struct brcmf_sdio_dev *sdiodev, u32 addr,
- + u32 data, int *ret)
- {
- int retval;
-
- - retval = brcmf_sdiod_reg_write(sdiodev, addr, 1, &data);
- -
- - if (ret)
- - *ret = retval;
- -}
- -
- -void brcmf_sdiod_regwl(struct brcmf_sdio_dev *sdiodev, u32 addr,
- - u32 data, int *ret)
- -{
- - int retval;
- + retval = brcmf_sdiod_addrprep(sdiodev, &addr);
-
- - retval = brcmf_sdiod_reg_write(sdiodev, addr, 4, &data);
- + if (!retval)
- + sdio_writel(sdiodev->func[1], data, addr, &retval);
-
- if (ret)
- *ret = retval;
- @@ -846,8 +729,8 @@ int brcmf_sdiod_abort(struct brcmf_sdio_
- {
- brcmf_dbg(SDIO, "Enter\n");
-
- - /* issue abort cmd52 command through F0 */
- - brcmf_sdiod_reg_write(sdiodev, SDIO_CCCR_ABORT, 1, &fn);
- + /* Issue abort cmd52 command through F0 */
- + brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_ABORT, fn, NULL);
-
- brcmf_dbg(SDIO, "Exit\n");
- return 0;
- --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
- +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
- @@ -669,7 +669,7 @@ static int r_sdreg32(struct brcmf_sdio *
- int ret;
-
- core = brcmf_chip_get_core(bus->ci, BCMA_CORE_SDIO_DEV);
- - *regvar = brcmf_sdiod_regrl(bus->sdiodev, core->base + offset, &ret);
- + *regvar = brcmf_sdiod_readl(bus->sdiodev, core->base + offset, &ret);
-
- return ret;
- }
- @@ -680,7 +680,7 @@ static int w_sdreg32(struct brcmf_sdio *
- int ret;
-
- core = brcmf_chip_get_core(bus->ci, BCMA_CORE_SDIO_DEV);
- - brcmf_sdiod_regwl(bus->sdiodev, core->base + reg_offset, regval, &ret);
- + brcmf_sdiod_writel(bus->sdiodev, core->base + reg_offset, regval, &ret);
-
- return ret;
- }
- @@ -697,8 +697,7 @@ brcmf_sdio_kso_control(struct brcmf_sdio
-
- wr_val = (on << SBSDIO_FUNC1_SLEEPCSR_KSO_SHIFT);
- /* 1st KSO write goes to AOS wake up core if device is asleep */
- - brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR,
- - wr_val, &err);
- + brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR, wr_val, &err);
-
- if (on) {
- /* device WAKEUP through KSO:
- @@ -724,7 +723,7 @@ brcmf_sdio_kso_control(struct brcmf_sdio
- * just one write attempt may fail,
- * read it back until it matches written value
- */
- - rd_val = brcmf_sdiod_regrb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR,
- + rd_val = brcmf_sdiod_readb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR,
- &err);
- if (!err) {
- if ((rd_val & bmask) == cmp_val)
- @@ -734,9 +733,11 @@ brcmf_sdio_kso_control(struct brcmf_sdio
- /* bail out upon subsequent access errors */
- if (err && (err_cnt++ > BRCMF_SDIO_MAX_ACCESS_ERRORS))
- break;
- +
- udelay(KSO_WAIT_US);
- - brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR,
- - wr_val, &err);
- + brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR, wr_val,
- + &err);
- +
- } while (try_cnt++ < MAX_KSO_ATTEMPTS);
-
- if (try_cnt > 2)
- @@ -772,15 +773,15 @@ static int brcmf_sdio_htclk(struct brcmf
- clkreq =
- bus->alp_only ? SBSDIO_ALP_AVAIL_REQ : SBSDIO_HT_AVAIL_REQ;
-
- - brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
- - clkreq, &err);
- + brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
- + clkreq, &err);
- if (err) {
- brcmf_err("HT Avail request error: %d\n", err);
- return -EBADE;
- }
-
- /* Check current status */
- - clkctl = brcmf_sdiod_regrb(bus->sdiodev,
- + clkctl = brcmf_sdiod_readb(bus->sdiodev,
- SBSDIO_FUNC1_CHIPCLKCSR, &err);
- if (err) {
- brcmf_err("HT Avail read error: %d\n", err);
- @@ -790,35 +791,34 @@ static int brcmf_sdio_htclk(struct brcmf
- /* Go to pending and await interrupt if appropriate */
- if (!SBSDIO_CLKAV(clkctl, bus->alp_only) && pendok) {
- /* Allow only clock-available interrupt */
- - devctl = brcmf_sdiod_regrb(bus->sdiodev,
- + devctl = brcmf_sdiod_readb(bus->sdiodev,
- SBSDIO_DEVICE_CTL, &err);
- if (err) {
- - brcmf_err("Devctl error setting CA: %d\n",
- - err);
- + brcmf_err("Devctl error setting CA: %d\n", err);
- return -EBADE;
- }
-
- devctl |= SBSDIO_DEVCTL_CA_INT_ONLY;
- - brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_DEVICE_CTL,
- - devctl, &err);
- + brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_DEVICE_CTL,
- + devctl, &err);
- brcmf_dbg(SDIO, "CLKCTL: set PENDING\n");
- bus->clkstate = CLK_PENDING;
-
- return 0;
- } else if (bus->clkstate == CLK_PENDING) {
- /* Cancel CA-only interrupt filter */
- - devctl = brcmf_sdiod_regrb(bus->sdiodev,
- + devctl = brcmf_sdiod_readb(bus->sdiodev,
- SBSDIO_DEVICE_CTL, &err);
- devctl &= ~SBSDIO_DEVCTL_CA_INT_ONLY;
- - brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_DEVICE_CTL,
- - devctl, &err);
- + brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_DEVICE_CTL,
- + devctl, &err);
- }
-
- /* Otherwise, wait here (polling) for HT Avail */
- timeout = jiffies +
- msecs_to_jiffies(PMU_MAX_TRANSITION_DLY/1000);
- while (!SBSDIO_CLKAV(clkctl, bus->alp_only)) {
- - clkctl = brcmf_sdiod_regrb(bus->sdiodev,
- + clkctl = brcmf_sdiod_readb(bus->sdiodev,
- SBSDIO_FUNC1_CHIPCLKCSR,
- &err);
- if (time_after(jiffies, timeout))
- @@ -852,16 +852,16 @@ static int brcmf_sdio_htclk(struct brcmf
-
- if (bus->clkstate == CLK_PENDING) {
- /* Cancel CA-only interrupt filter */
- - devctl = brcmf_sdiod_regrb(bus->sdiodev,
- + devctl = brcmf_sdiod_readb(bus->sdiodev,
- SBSDIO_DEVICE_CTL, &err);
- devctl &= ~SBSDIO_DEVCTL_CA_INT_ONLY;
- - brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_DEVICE_CTL,
- - devctl, &err);
- + brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_DEVICE_CTL,
- + devctl, &err);
- }
-
- bus->clkstate = CLK_SDONLY;
- - brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
- - clkreq, &err);
- + brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
- + clkreq, &err);
- brcmf_dbg(SDIO, "CLKCTL: turned OFF\n");
- if (err) {
- brcmf_err("Failed access turning clock off: %d\n",
- @@ -951,14 +951,14 @@ brcmf_sdio_bus_sleep(struct brcmf_sdio *
-
- /* Going to sleep */
- if (sleep) {
- - clkcsr = brcmf_sdiod_regrb(bus->sdiodev,
- + clkcsr = brcmf_sdiod_readb(bus->sdiodev,
- SBSDIO_FUNC1_CHIPCLKCSR,
- &err);
- if ((clkcsr & SBSDIO_CSR_MASK) == 0) {
- brcmf_dbg(SDIO, "no clock, set ALP\n");
- - brcmf_sdiod_regwb(bus->sdiodev,
- - SBSDIO_FUNC1_CHIPCLKCSR,
- - SBSDIO_ALP_AVAIL_REQ, &err);
- + brcmf_sdiod_writeb(bus->sdiodev,
- + SBSDIO_FUNC1_CHIPCLKCSR,
- + SBSDIO_ALP_AVAIL_REQ, &err);
- }
- err = brcmf_sdio_kso_control(bus, false);
- } else {
- @@ -1178,16 +1178,16 @@ static void brcmf_sdio_rxfail(struct brc
- if (abort)
- brcmf_sdiod_abort(bus->sdiodev, SDIO_FUNC_2);
-
- - brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_FRAMECTRL,
- - SFC_RF_TERM, &err);
- + brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_FRAMECTRL, SFC_RF_TERM,
- + &err);
- bus->sdcnt.f1regdata++;
-
- /* Wait until the packet has been flushed (device/FIFO stable) */
- for (lastrbc = retries = 0xffff; retries > 0; retries--) {
- - hi = brcmf_sdiod_regrb(bus->sdiodev,
- - SBSDIO_FUNC1_RFRAMEBCHI, &err);
- - lo = brcmf_sdiod_regrb(bus->sdiodev,
- - SBSDIO_FUNC1_RFRAMEBCLO, &err);
- + hi = brcmf_sdiod_readb(bus->sdiodev, SBSDIO_FUNC1_RFRAMEBCHI,
- + &err);
- + lo = brcmf_sdiod_readb(bus->sdiodev, SBSDIO_FUNC1_RFRAMEBCLO,
- + &err);
- bus->sdcnt.f1regdata += 2;
-
- if ((hi == 0) && (lo == 0))
- @@ -1229,12 +1229,12 @@ static void brcmf_sdio_txfail(struct brc
- bus->sdcnt.tx_sderrs++;
-
- brcmf_sdiod_abort(sdiodev, SDIO_FUNC_2);
- - brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_FRAMECTRL, SFC_WF_TERM, NULL);
- + brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_FRAMECTRL, SFC_WF_TERM, NULL);
- bus->sdcnt.f1regdata++;
-
- for (i = 0; i < 3; i++) {
- - hi = brcmf_sdiod_regrb(sdiodev, SBSDIO_FUNC1_WFRAMEBCHI, NULL);
- - lo = brcmf_sdiod_regrb(sdiodev, SBSDIO_FUNC1_WFRAMEBCLO, NULL);
- + hi = brcmf_sdiod_readb(sdiodev, SBSDIO_FUNC1_WFRAMEBCHI, NULL);
- + lo = brcmf_sdiod_readb(sdiodev, SBSDIO_FUNC1_WFRAMEBCLO, NULL);
- bus->sdcnt.f1regdata += 2;
- if ((hi == 0) && (lo == 0))
- break;
- @@ -2446,11 +2446,11 @@ static void brcmf_sdio_bus_stop(struct d
- bus->hostintmask = 0;
-
- /* Force backplane clocks to assure F2 interrupt propagates */
- - saveclk = brcmf_sdiod_regrb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
- + saveclk = brcmf_sdiod_readb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
- &err);
- if (!err)
- - brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
- - (saveclk | SBSDIO_FORCE_HT), &err);
- + brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
- + (saveclk | SBSDIO_FORCE_HT), &err);
- if (err)
- brcmf_err("Failed to force clock for F2: err %d\n",
- err);
- @@ -2509,7 +2509,7 @@ static int brcmf_sdio_intr_rstatus(struc
- buscore = brcmf_chip_get_core(bus->ci, BCMA_CORE_SDIO_DEV);
- addr = buscore->base + offsetof(struct sdpcmd_regs, intstatus);
-
- - val = brcmf_sdiod_regrl(bus->sdiodev, addr, &ret);
- + val = brcmf_sdiod_readl(bus->sdiodev, addr, &ret);
- bus->sdcnt.f1regdata++;
- if (ret != 0)
- return ret;
- @@ -2519,7 +2519,7 @@ static int brcmf_sdio_intr_rstatus(struc
-
- /* Clear interrupts */
- if (val) {
- - brcmf_sdiod_regwl(bus->sdiodev, addr, val, &ret);
- + brcmf_sdiod_writel(bus->sdiodev, addr, val, &ret);
- bus->sdcnt.f1regdata++;
- atomic_or(val, &bus->intstatus);
- }
- @@ -2545,23 +2545,23 @@ static void brcmf_sdio_dpc(struct brcmf_
-
- #ifdef DEBUG
- /* Check for inconsistent device control */
- - devctl = brcmf_sdiod_regrb(bus->sdiodev,
- - SBSDIO_DEVICE_CTL, &err);
- + devctl = brcmf_sdiod_readb(bus->sdiodev, SBSDIO_DEVICE_CTL,
- + &err);
- #endif /* DEBUG */
-
- /* Read CSR, if clock on switch to AVAIL, else ignore */
- - clkctl = brcmf_sdiod_regrb(bus->sdiodev,
- + clkctl = brcmf_sdiod_readb(bus->sdiodev,
- SBSDIO_FUNC1_CHIPCLKCSR, &err);
-
- brcmf_dbg(SDIO, "DPC: PENDING, devctl 0x%02x clkctl 0x%02x\n",
- devctl, clkctl);
-
- if (SBSDIO_HTAV(clkctl)) {
- - devctl = brcmf_sdiod_regrb(bus->sdiodev,
- + devctl = brcmf_sdiod_readb(bus->sdiodev,
- SBSDIO_DEVICE_CTL, &err);
- devctl &= ~SBSDIO_DEVCTL_CA_INT_ONLY;
- - brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_DEVICE_CTL,
- - devctl, &err);
- + brcmf_sdiod_writeb(bus->sdiodev,
- + SBSDIO_DEVICE_CTL, devctl, &err);
- bus->clkstate = CLK_AVAIL;
- }
- }
- @@ -3347,31 +3347,31 @@ static void brcmf_sdio_sr_init(struct br
-
- brcmf_dbg(TRACE, "Enter\n");
-
- - val = brcmf_sdiod_regrb(bus->sdiodev, SBSDIO_FUNC1_WAKEUPCTRL, &err);
- + val = brcmf_sdiod_readb(bus->sdiodev, SBSDIO_FUNC1_WAKEUPCTRL, &err);
- if (err) {
- brcmf_err("error reading SBSDIO_FUNC1_WAKEUPCTRL\n");
- return;
- }
-
- val |= 1 << SBSDIO_FUNC1_WCTRL_HTWAIT_SHIFT;
- - brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_WAKEUPCTRL, val, &err);
- + brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_WAKEUPCTRL, val, &err);
- if (err) {
- brcmf_err("error writing SBSDIO_FUNC1_WAKEUPCTRL\n");
- return;
- }
-
- /* Add CMD14 Support */
- - brcmf_sdiod_regwb(bus->sdiodev, SDIO_CCCR_BRCM_CARDCAP,
- - (SDIO_CCCR_BRCM_CARDCAP_CMD14_SUPPORT |
- - SDIO_CCCR_BRCM_CARDCAP_CMD14_EXT),
- - &err);
- + brcmf_sdiod_func0_wb(bus->sdiodev, SDIO_CCCR_BRCM_CARDCAP,
- + (SDIO_CCCR_BRCM_CARDCAP_CMD14_SUPPORT |
- + SDIO_CCCR_BRCM_CARDCAP_CMD14_EXT),
- + &err);
- if (err) {
- brcmf_err("error writing SDIO_CCCR_BRCM_CARDCAP\n");
- return;
- }
-
- - brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
- - SBSDIO_FORCE_HT, &err);
- + brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
- + SBSDIO_FORCE_HT, &err);
- if (err) {
- brcmf_err("error writing SBSDIO_FUNC1_CHIPCLKCSR\n");
- return;
- @@ -3394,7 +3394,7 @@ static int brcmf_sdio_kso_init(struct br
- if (brcmf_chip_get_core(bus->ci, BCMA_CORE_SDIO_DEV)->rev < 12)
- return 0;
-
- - val = brcmf_sdiod_regrb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR, &err);
- + val = brcmf_sdiod_readb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR, &err);
- if (err) {
- brcmf_err("error reading SBSDIO_FUNC1_SLEEPCSR\n");
- return err;
- @@ -3403,8 +3403,8 @@ static int brcmf_sdio_kso_init(struct br
- if (!(val & SBSDIO_FUNC1_SLEEPCSR_KSO_MASK)) {
- val |= (SBSDIO_FUNC1_SLEEPCSR_KSO_EN <<
- SBSDIO_FUNC1_SLEEPCSR_KSO_SHIFT);
- - brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR,
- - val, &err);
- + brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_SLEEPCSR,
- + val, &err);
- if (err) {
- brcmf_err("error writing SBSDIO_FUNC1_SLEEPCSR\n");
- return err;
- @@ -3565,9 +3565,9 @@ static void brcmf_sdio_bus_watchdog(stru
- u8 devpend;
-
- sdio_claim_host(bus->sdiodev->func[1]);
- - devpend = brcmf_sdiod_regrb(bus->sdiodev,
- - SDIO_CCCR_INTx,
- - NULL);
- + devpend = brcmf_sdiod_func0_rb(bus->sdiodev,
- + SDIO_CCCR_INTx,
- + NULL);
- sdio_release_host(bus->sdiodev->func[1]);
- intstatus = devpend & (INTR_STATUS_FUNC1 |
- INTR_STATUS_FUNC2);
- @@ -3705,12 +3705,12 @@ brcmf_sdio_drivestrengthinit(struct brcm
- }
- }
- addr = CORE_CC_REG(pmu->base, chipcontrol_addr);
- - brcmf_sdiod_regwl(sdiodev, addr, 1, NULL);
- - cc_data_temp = brcmf_sdiod_regrl(sdiodev, addr, NULL);
- + brcmf_sdiod_writel(sdiodev, addr, 1, NULL);
- + cc_data_temp = brcmf_sdiod_readl(sdiodev, addr, NULL);
- cc_data_temp &= ~str_mask;
- drivestrength_sel <<= str_shift;
- cc_data_temp |= drivestrength_sel;
- - brcmf_sdiod_regwl(sdiodev, addr, cc_data_temp, NULL);
- + brcmf_sdiod_writel(sdiodev, addr, cc_data_temp, NULL);
-
- brcmf_dbg(INFO, "SDIO: %d mA (req=%d mA) drive strength selected, set to 0x%08x\n",
- str_tab[i].strength, drivestrength, cc_data_temp);
- @@ -3725,7 +3725,7 @@ static int brcmf_sdio_buscoreprep(void *
-
- /* Try forcing SDIO core to do ALPAvail request only */
- clkset = SBSDIO_FORCE_HW_CLKREQ_OFF | SBSDIO_ALP_AVAIL_REQ;
- - brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, clkset, &err);
- + brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, clkset, &err);
- if (err) {
- brcmf_err("error writing for HT off\n");
- return err;
- @@ -3733,8 +3733,7 @@ static int brcmf_sdio_buscoreprep(void *
-
- /* If register supported, wait for ALPAvail and then force ALP */
- /* This may take up to 15 milliseconds */
- - clkval = brcmf_sdiod_regrb(sdiodev,
- - SBSDIO_FUNC1_CHIPCLKCSR, NULL);
- + clkval = brcmf_sdiod_readb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, NULL);
-
- if ((clkval & ~SBSDIO_AVBITS) != clkset) {
- brcmf_err("ChipClkCSR access: wrote 0x%02x read 0x%02x\n",
- @@ -3742,10 +3741,11 @@ static int brcmf_sdio_buscoreprep(void *
- return -EACCES;
- }
-
- - SPINWAIT(((clkval = brcmf_sdiod_regrb(sdiodev,
- - SBSDIO_FUNC1_CHIPCLKCSR, NULL)),
- - !SBSDIO_ALPAV(clkval)),
- - PMU_MAX_TRANSITION_DLY);
- + SPINWAIT(((clkval = brcmf_sdiod_readb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
- + NULL)),
- + !SBSDIO_ALPAV(clkval)),
- + PMU_MAX_TRANSITION_DLY);
- +
- if (!SBSDIO_ALPAV(clkval)) {
- brcmf_err("timeout on ALPAV wait, clkval 0x%02x\n",
- clkval);
- @@ -3753,11 +3753,11 @@ static int brcmf_sdio_buscoreprep(void *
- }
-
- clkset = SBSDIO_FORCE_HW_CLKREQ_OFF | SBSDIO_FORCE_ALP;
- - brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, clkset, &err);
- + brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, clkset, &err);
- udelay(65);
-
- /* Also, disable the extra SDIO pull-ups */
- - brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_SDIOPULLUP, 0, NULL);
- + brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_SDIOPULLUP, 0, NULL);
-
- return 0;
- }
- @@ -3772,7 +3772,7 @@ static void brcmf_sdio_buscore_activate(
- /* clear all interrupts */
- core = brcmf_chip_get_core(chip, BCMA_CORE_SDIO_DEV);
- reg_addr = core->base + offsetof(struct sdpcmd_regs, intstatus);
- - brcmf_sdiod_regwl(sdiodev, reg_addr, 0xFFFFFFFF, NULL);
- + brcmf_sdiod_writel(sdiodev, reg_addr, 0xFFFFFFFF, NULL);
-
- if (rstvec)
- /* Write reset vector to address 0 */
- @@ -3785,7 +3785,7 @@ static u32 brcmf_sdio_buscore_read32(voi
- struct brcmf_sdio_dev *sdiodev = ctx;
- u32 val, rev;
-
- - val = brcmf_sdiod_regrl(sdiodev, addr, NULL);
- + val = brcmf_sdiod_readl(sdiodev, addr, NULL);
- if ((sdiodev->func[0]->device == SDIO_DEVICE_ID_BROADCOM_4335_4339 ||
- sdiodev->func[0]->device == SDIO_DEVICE_ID_BROADCOM_4339) &&
- addr == CORE_CC_REG(SI_ENUM_BASE, chipid)) {
- @@ -3802,7 +3802,7 @@ static void brcmf_sdio_buscore_write32(v
- {
- struct brcmf_sdio_dev *sdiodev = ctx;
-
- - brcmf_sdiod_regwl(sdiodev, addr, val, NULL);
- + brcmf_sdiod_writel(sdiodev, addr, val, NULL);
- }
-
- static const struct brcmf_buscore_ops brcmf_sdio_buscore_ops = {
- @@ -3826,18 +3826,18 @@ brcmf_sdio_probe_attach(struct brcmf_sdi
- sdio_claim_host(sdiodev->func[1]);
-
- pr_debug("F1 signature read @0x18000000=0x%4x\n",
- - brcmf_sdiod_regrl(sdiodev, SI_ENUM_BASE, NULL));
- + brcmf_sdiod_readl(sdiodev, SI_ENUM_BASE, NULL));
-
- /*
- * Force PLL off until brcmf_chip_attach()
- * programs PLL control regs
- */
-
- - brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
- - BRCMF_INIT_CLKCTL1, &err);
- + brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, BRCMF_INIT_CLKCTL1,
- + &err);
- if (!err)
- - clkctl = brcmf_sdiod_regrb(sdiodev,
- - SBSDIO_FUNC1_CHIPCLKCSR, &err);
- + clkctl = brcmf_sdiod_readb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
- + &err);
-
- if (err || ((clkctl & ~SBSDIO_AVBITS) != BRCMF_INIT_CLKCTL1)) {
- brcmf_err("ChipClkCSR access: err %d wrote 0x%02x read 0x%02x\n",
- @@ -3897,25 +3897,25 @@ brcmf_sdio_probe_attach(struct brcmf_sdi
- brcmf_sdio_drivestrengthinit(sdiodev, bus->ci, drivestrength);
-
- /* Set card control so an SDIO card reset does a WLAN backplane reset */
- - reg_val = brcmf_sdiod_regrb(sdiodev, SDIO_CCCR_BRCM_CARDCTRL, &err);
- + reg_val = brcmf_sdiod_func0_rb(sdiodev, SDIO_CCCR_BRCM_CARDCTRL, &err);
- if (err)
- goto fail;
-
- reg_val |= SDIO_CCCR_BRCM_CARDCTRL_WLANRESET;
-
- - brcmf_sdiod_regwb(sdiodev, SDIO_CCCR_BRCM_CARDCTRL, reg_val, &err);
- + brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_BRCM_CARDCTRL, reg_val, &err);
- if (err)
- goto fail;
-
- /* set PMUControl so a backplane reset does PMU state reload */
- reg_addr = CORE_CC_REG(brcmf_chip_get_pmu(bus->ci)->base, pmucontrol);
- - reg_val = brcmf_sdiod_regrl(sdiodev, reg_addr, &err);
- + reg_val = brcmf_sdiod_readl(sdiodev, reg_addr, &err);
- if (err)
- goto fail;
-
- reg_val |= (BCMA_CC_PMU_CTL_RES_RELOAD << BCMA_CC_PMU_CTL_RES_SHIFT);
-
- - brcmf_sdiod_regwl(sdiodev, reg_addr, reg_val, &err);
- + brcmf_sdiod_writel(sdiodev, reg_addr, reg_val, &err);
- if (err)
- goto fail;
-
- @@ -4055,10 +4055,10 @@ static void brcmf_sdio_firmware_callback
- goto release;
-
- /* Force clocks on backplane to be sure F2 interrupt propagates */
- - saveclk = brcmf_sdiod_regrb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, &err);
- + saveclk = brcmf_sdiod_readb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, &err);
- if (!err) {
- - brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
- - (saveclk | SBSDIO_FORCE_HT), &err);
- + brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
- + (saveclk | SBSDIO_FORCE_HT), &err);
- }
- if (err) {
- brcmf_err("Failed to force clock for F2: err %d\n", err);
- @@ -4080,7 +4080,7 @@ static void brcmf_sdio_firmware_callback
- w_sdreg32(bus, bus->hostintmask,
- offsetof(struct sdpcmd_regs, hostintmask));
-
- - brcmf_sdiod_regwb(sdiodev, SBSDIO_WATERMARK, 8, &err);
- + brcmf_sdiod_writeb(sdiodev, SBSDIO_WATERMARK, 8, &err);
- } else {
- /* Disable F2 again */
- sdio_disable_func(sdiodev->func[SDIO_FUNC_2]);
- @@ -4091,8 +4091,8 @@ static void brcmf_sdio_firmware_callback
- brcmf_sdio_sr_init(bus);
- } else {
- /* Restore previous clock setting */
- - brcmf_sdiod_regwb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
- - saveclk, &err);
- + brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_CHIPCLKCSR,
- + saveclk, &err);
- }
-
- if (err == 0) {
- @@ -4225,7 +4225,7 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
- bus->rxflow = false;
-
- /* Done with backplane-dependent accesses, can drop clock... */
- - brcmf_sdiod_regwb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, 0, NULL);
- + brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, 0, NULL);
-
- sdio_release_host(bus->sdiodev->func[1]);
-
- --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
- +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
- @@ -50,6 +50,7 @@
- #define SBSDIO_NUM_FUNCTION 3
-
- /* function 0 vendor specific CCCR registers */
- +
- #define SDIO_CCCR_BRCM_CARDCAP 0xf0
- #define SDIO_CCCR_BRCM_CARDCAP_CMD14_SUPPORT 0x02
- #define SDIO_CCCR_BRCM_CARDCAP_CMD14_EXT 0x04
- @@ -131,8 +132,6 @@
- /* with b15, maps to 32-bit SB access */
- #define SBSDIO_SB_ACCESS_2_4B_FLAG 0x08000
-
- -/* valid bits in SBSDIO_FUNC1_SBADDRxxx regs */
- -
- /* Address bits from SBADDR regs */
- #define SBSDIO_SBWINDOW_MASK 0xffff8000
-
- @@ -293,13 +292,24 @@ struct sdpcmd_regs {
- int brcmf_sdiod_intr_register(struct brcmf_sdio_dev *sdiodev);
- void brcmf_sdiod_intr_unregister(struct brcmf_sdio_dev *sdiodev);
-
- -/* sdio device register access interface */
- -u8 brcmf_sdiod_regrb(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret);
- -u32 brcmf_sdiod_regrl(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret);
- -void brcmf_sdiod_regwb(struct brcmf_sdio_dev *sdiodev, u32 addr, u8 data,
- - int *ret);
- -void brcmf_sdiod_regwl(struct brcmf_sdio_dev *sdiodev, u32 addr, u32 data,
- - int *ret);
- +/* SDIO device register access interface */
- +/* Accessors for SDIO Function 0 */
- +#define brcmf_sdiod_func0_rb(sdiodev, addr, r) \
- + sdio_readb((sdiodev)->func[0], (addr), (r))
- +
- +#define brcmf_sdiod_func0_wb(sdiodev, addr, v, ret) \
- + sdio_writeb((sdiodev)->func[0], (v), (addr), (ret))
- +
- +/* Accessors for SDIO Function 1 */
- +#define brcmf_sdiod_readb(sdiodev, addr, r) \
- + sdio_readb((sdiodev)->func[1], (addr), (r))
- +
- +#define brcmf_sdiod_writeb(sdiodev, addr, v, ret) \
- + sdio_writeb((sdiodev)->func[1], (v), (addr), (ret))
- +
- +u32 brcmf_sdiod_readl(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret);
- +void brcmf_sdiod_writel(struct brcmf_sdio_dev *sdiodev, u32 addr, u32 data,
- + int *ret);
-
- /* Buffer transfer to/from device (client) core via cmd53.
- * fn: function number
|