From 25b2cc3add54b5fa9b9043b806a64ee7f44bcffe Mon Sep 17 00:00:00 2001 From: Gaurang Rathod Date: Thu, 16 Feb 2023 07:25:31 -0600 Subject: [PATCH 200/296] brcmfmac: Move shared console address location 1. In 43022-secure mode, we have read restriction featured which is controlled by OTP bit 265. 2. After firmware initialization, host can only read/write 384KB-512KB socram area. 3. This change is to read a console address from (512kb-4) location instead of (640Kb-4). Signed-off-by: Gaurang Rathod --- .../broadcom/brcm80211/brcmfmac/sdio.c | 19 +++++++++++++++++-- .../broadcom/brcm80211/brcmfmac/sdio.h | 9 +++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c index 8e46ec1dffb6..1218a4834e9d 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c @@ -1143,8 +1143,18 @@ static int brcmf_sdio_readshared(struct brcmf_sdio *bus, /* * Read last word in socram to determine * address of sdpcm_shared structure + * + * In 43022:secure-mode shared console address will be present at + * (512KB-4) location because other RAM area will be Read-blocked + * for host. Host can only read/write (384Kb-512Kb) RAM area. + * Read block is controlled by OTP bit. */ - shaddr = bus->ci->rambase + bus->ci->ramsize - 4; + + if (bus->ci->blhs && (bus->ci->chip == CY_CC_43022_CHIP_ID)) + shaddr = bus->ci->rambase + CM3_SOCRAM_WRITE_END_LOCATION - 4; + else + shaddr = bus->ci->rambase + bus->ci->ramsize - 4; + if (!bus->ci->rambase && brcmf_chip_sr_capable(bus->ci)) shaddr -= bus->ci->srsize; rv = brcmf_sdiod_ramrw(bus->sdiodev, false, shaddr, @@ -3796,7 +3806,12 @@ static int brcmf_sdio_download_nvram(struct brcmf_sdio *bus, brcmf_dbg(TRACE, "Enter\n"); - address = bus->ci->ramsize - varsz + bus->ci->rambase; + /* In 43022:secure-mode NVRAM should be copied to 512KB RAM area */ + if (bus->ci->blhs && (bus->ci->chip == CY_CC_43022_CHIP_ID)) + address = CM3_SOCRAM_WRITE_END_LOCATION - varsz + bus->ci->rambase; + else + address = bus->ci->ramsize - varsz + bus->ci->rambase; + err = brcmf_sdiod_ramrw(bus->sdiodev, true, address, vars, varsz); if (err) brcmf_err("error %d on writing %d nvram bytes at 0x%08x\n", diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h index c3eee08a3084..64ebf80f132d 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h @@ -38,6 +38,15 @@ #define BRCMF_SDIO_REG_DAR_H2D_MSG_0 0x10030 #define BRCMF_SDIO_REG_DAR_D2H_MSG_0 0x10038 +#define BRCMF_SDIO_REG_D2H_MSG_0 0x1800204C +#define BRCMF_SDIO_REG_H2D_MSG_0 0x18002048 + +#define CM3_SOCRAM_WRITE_END_LOCATION 0x80000 + +/* Sdio rev 27 only */ +/* To read secure-mode bit */ +#define SBSDIO_FUNC1_SECURE_MODE 0x10001 + /* function 0 vendor specific CCCR registers */ #define SDIO_CCCR_BRCM_CARDCAP 0xf0 -- 2.25.1