Re: [PATCH v2 22/35] brcmfmac: chip: Handle 1024-unit sizes for TCM blocks

From: Arend van Spriel
Date: Thu Jan 20 2022 - 03:50:04 EST


On 1/19/2022 1:36 PM, Arend van Spriel wrote:
On 1/4/2022 8:26 AM, Hector Martin wrote:
BCM4387 has trailing odd-sized blocks as part of TCM which have
their size described as a multiple of 1024 instead of 8192. Handle this
so we can compute the TCM size properly.

So that is the deal. Wish someone over here told me about that :-p Gave my blessing already, but do have some remarks.

Reviewed-by: Arend van Spriel <arend.vanspriel@xxxxxxxxxxxx>
Reviewed-by: Linus Walleij <linus.walleij@xxxxxxxxxx>
Signed-off-by: Hector Martin <marcan@xxxxxxxxx>
---
  .../wireless/broadcom/brcm80211/brcmfmac/chip.c | 17 ++++++++++++-----
  1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
index 713546cebd5a..cfa93e3ef1a1 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/chip.c
@@ -212,8 +212,8 @@ struct sbsocramregs {
  #define    ARMCR4_TCBANB_MASK    0xf
  #define    ARMCR4_TCBANB_SHIFT    0
-#define    ARMCR4_BSZ_MASK        0x3f
-#define    ARMCR4_BSZ_MULT        8192

Instead of deleting can we leave it here and...

+#define    ARMCR4_BSZ_MASK        0x7f
+#define    ARMCR4_BLK_1K_MASK    0x200
  struct brcmf_core_priv {
      struct brcmf_core pub;
@@ -675,7 +675,8 @@ static u32 brcmf_chip_sysmem_ramsize(struct brcmf_core_priv *sysmem)
  }
  /** Return the TCM-RAM size of the ARMCR4 core. */
-static u32 brcmf_chip_tcm_ramsize(struct brcmf_core_priv *cr4)
+static u32 brcmf_chip_tcm_ramsize(struct brcmf_chip_priv *ci,
+                  struct brcmf_core_priv *cr4)

Not sure why you add ci parameter here. It is not used below or am I overlooking something.

  {
      u32 corecap;
      u32 memsize = 0;
@@ -683,6 +684,7 @@ static u32 brcmf_chip_tcm_ramsize(struct brcmf_core_priv *cr4)
      u32 nbb;
      u32 totb;
      u32 bxinfo;
+    u32 blksize;
      u32 idx;
      corecap = brcmf_chip_core_read32(cr4, ARMCR4_CAP);
@@ -694,7 +696,12 @@ static u32 brcmf_chip_tcm_ramsize(struct brcmf_core_priv *cr4)
      for (idx = 0; idx < totb; idx++) {
          brcmf_chip_core_write32(cr4, ARMCR4_BANKIDX, idx);
          bxinfo = brcmf_chip_core_read32(cr4, ARMCR4_BANKINFO);
-        memsize += ((bxinfo & ARMCR4_BSZ_MASK) + 1) * ARMCR4_BSZ_MULT;
+        if (bxinfo & ARMCR4_BLK_1K_MASK)
+            blksize = 1024;
+        else
+            blksize = 8192;

... do following here instead:

blksize = 8192;
if (bxinfo & ARMCR4_BLK_1K_MASK)
blksize >>= 3;

[not sure if mailreader is screwing with indentation or what]

+
+        memsize += ((bxinfo & ARMCR4_BSZ_MASK) + 1) * blksize;
      }
      return memsize;

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature