From bde9b10b1daea2b2d0ca17e8e76c67d4b6cbacdd Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Thu, 25 Oct 2018 06:52:02 -0600 Subject: [PATCH] drivers/wireless/ieee80211/bcmf_core.c: There were two functions that have a address issue. In bcmf_read_sbreg and bcmf_write_sbreg, SBSDIO_SB_OFT_ADDR_MASK should be used before map address space. Noted by Shao Li in Bitbucket issue #126. --- drivers/wireless/ieee80211/bcmf_core.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/wireless/ieee80211/bcmf_core.c b/drivers/wireless/ieee80211/bcmf_core.c index 73e5456eb59..95e39feec2a 100644 --- a/drivers/wireless/ieee80211/bcmf_core.c +++ b/drivers/wireless/ieee80211/bcmf_core.c @@ -327,6 +327,8 @@ int bcmf_read_sbreg(FAR struct bcmf_sdio_dev_s *sbus, uint32_t address, return ret; } + address &= SBSDIO_SB_OFT_ADDR_MASK; + /* Map to 32-bit access if len == 4 */ if (len == 4) @@ -334,8 +336,7 @@ int bcmf_read_sbreg(FAR struct bcmf_sdio_dev_s *sbus, uint32_t address, address |= SBSDIO_SB_ACCESS_2_4B_FLAG; } - return bcmf_transfer_bytes(sbus, false, 1, - address & SBSDIO_SB_OFT_ADDR_MASK, reg, len); + return bcmf_transfer_bytes(sbus, false, 1, address, reg, len); } /**************************************************************************** @@ -352,6 +353,8 @@ int bcmf_write_sbreg(FAR struct bcmf_sdio_dev_s *sbus, uint32_t address, return ret; } + address &= SBSDIO_SB_OFT_ADDR_MASK; + /* Map to 32-bit access if len == 4 */ if (len == 4) @@ -359,8 +362,7 @@ int bcmf_write_sbreg(FAR struct bcmf_sdio_dev_s *sbus, uint32_t address, address |= SBSDIO_SB_ACCESS_2_4B_FLAG; } - return bcmf_transfer_bytes(sbus, true, 1, address & SBSDIO_SB_OFT_ADDR_MASK, - reg, len); + return bcmf_transfer_bytes(sbus, true, 1, address, reg, len); } /****************************************************************************