mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Alessio Ferri <alessio.ferri@mythread.it>
To: "Rafał Miłecki" <zajec5@gmail.com>, "Michael Buesch" <m@bues.ch>,
	vit9696 <vit9696@protonmail.com>
Cc: linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org,
	 linux-mips@vger.kernel.org,
	Alessio Ferri <alessio.ferri@mythread.it>
Subject: [PATCH wireless-next v2 7/8] firmware: bcm47xx_sprom: read boardflags3 and AvVmid_c0..2 from NVRAM
Date: Tue, 27 Oct 2026 00:53:50 +0100	[thread overview]
Message-ID: <20261027-bcma-ac-rev1-v2-7-b69b61c31920@mythread.it> (raw)
In-Reply-To: <20261027-bcma-ac-rev1-v2-0-b69b61c31920@mythread.it>

Read them along with ledbh4..ledbh15. AvVmid_cN holds the Av/Vmid pairs
of chain N's power detector per band; avvmid_valid marks the chains
whose list parsed. A boardflags3 in NVRAM overrides the SPROM word.

Signed-off-by: Alessio Ferri <alessio.ferri@mythread.it>
---
 drivers/firmware/broadcom/bcm47xx_sprom.c | 32 +++++++++++++++++++++++++++++++
 include/linux/ssb/ssb.h                   |  3 +++
 2 files changed, 35 insertions(+)

diff --git a/drivers/firmware/broadcom/bcm47xx_sprom.c b/drivers/firmware/broadcom/bcm47xx_sprom.c
index 75604cd70..581dd867d 100644
--- a/drivers/firmware/broadcom/bcm47xx_sprom.c
+++ b/drivers/firmware/broadcom/bcm47xx_sprom.c
@@ -173,6 +173,32 @@ static void nvram_read_alpha2(const char *prefix, const char *name,
 	memcpy(val, buf, 2);
 }
 
+/*
+ * AvVmid_c<core>: Av,Vmid of the chain's power detector for 2g, 5gl, 5gml,
+ * 5gmu and 5gh. The chain is marked valid only if all ten values parse.
+ */
+static void nvram_read_avvmid(const char *prefix, int core,
+			      struct ssb_sprom *sprom, bool fallback)
+{
+	char name[sizeof("AvVmid_c0")];
+	char buf[64], *p = buf, *tok;
+	u8 v[10];
+	int n = 0;
+
+	snprintf(name, sizeof(name), "AvVmid_c%d", core);
+	if (get_nvram_var(prefix, NULL, name, buf, sizeof(buf), fallback) < 0)
+		return;
+	while (n < ARRAY_SIZE(v) && (tok = strsep(&p, ",")) != NULL) {
+		if (kstrtou8(strim(tok), 0, &v[n]))
+			return;
+		n++;
+	}
+	if (n != ARRAY_SIZE(v))
+		return;
+	memcpy(sprom->avvmid[core], v, sizeof(v));
+	sprom->avvmid_valid |= BIT(core);
+}
+
 /* Variables read from NVRAM whether or not the SPROM itself comes from it. */
 static void bcm47xx_sprom_fill_nvram_only(struct ssb_sprom *sprom,
 					  const char *prefix, bool fallback)
@@ -185,6 +211,12 @@ static void bcm47xx_sprom_fill_nvram_only(struct ssb_sprom *sprom,
 		nvram_read_u8(prefix, NULL, name, &sprom->gpio_ext[i], 0xff,
 			      fallback);
 	}
+
+	nvram_read_u32(prefix, NULL, "boardflags3", &sprom->boardflags3, 0,
+		       fallback);
+	sprom->avvmid_valid = 0;
+	for (i = 0; i < ARRAY_SIZE(sprom->avvmid); i++)
+		nvram_read_avvmid(prefix, i, sprom, fallback);
 }
 
 /* This is one-function-only macro, it uses local "sprom" variable! */
diff --git a/include/linux/ssb/ssb.h b/include/linux/ssb/ssb.h
index 02e6c9054..5a4daa76d 100644
--- a/include/linux/ssb/ssb.h
+++ b/include/linux/ssb/ssb.h
@@ -77,6 +77,9 @@ struct ssb_sprom {
 	u8 gpio2;		/* GPIO pin 2 */
 	u8 gpio3;		/* GPIO pin 3 */
 	u8 gpio_ext[12];	/* GPIO pins 4-15, NVRAM ledbh4-15 only */
+	/* NVRAM AvVmid_c0..2: {Av, Vmid} for 2g, 5gl, 5gml, 5gmu, 5gh */
+	u8 avvmid[3][5][2];
+	u8 avvmid_valid;	/* bit per chain whose AvVmid_cN parsed */
 	u8 maxpwr_bg;		/* 2.4GHz Amplifier Max Power (in dBm Q5.2) */
 	u8 maxpwr_al;		/* 5.2GHz Amplifier Max Power (in dBm Q5.2) */
 	u8 maxpwr_a;		/* 5.3GHz Amplifier Max Power (in dBm Q5.2) */

-- 
2.34.1


  parent reply	other threads:[~2026-10-26 23:54 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-26 23:53 [PATCH wireless-next v2 0/8] bcma-ac-rev1: support 4352/4360 rev3 chips Alessio Ferri
2026-10-26 23:53 ` [PATCH wireless-next v2 1/8] bcma: core: clear only FORCEHT for BCMA_CLKMODE_DYNAMIC Alessio Ferri
2026-10-26 23:53 ` [PATCH wireless-next v2 2/8] bcma: pmu: init PLL and resources on BCM4352/BCM4360 Alessio Ferri
2026-10-28  0:44   ` vit9696
2026-10-28  9:14     ` Alessio Ferri
2026-10-28 13:34       ` vit9696
2026-10-26 23:53 ` [PATCH wireless-next v2 3/8] bcma: pcie2: request HT " Alessio Ferri
2026-10-28 11:40   ` vit9696
2026-10-26 23:53 ` [PATCH wireless-next v2 4/8] bcma: chipcommon: enable asynchronous GPIO interrupts Alessio Ferri
2026-10-26 23:53 ` [PATCH wireless-next v2 5/8] bcma: extract SPROM revision 11 Alessio Ferri
2026-10-26 23:53 ` [PATCH wireless-next v2 6/8] firmware: bcm47xx_sprom: read ledbh4..ledbh15 from NVRAM Alessio Ferri
2026-10-28 12:43   ` vit9696
2026-10-26 23:53 ` Alessio Ferri [this message]
2026-10-28 13:27   ` [PATCH wireless-next v2 7/8] firmware: bcm47xx_sprom: read boardflags3 and AvVmid_c0..2 " vit9696
2026-10-26 23:53 ` [PATCH wireless-next v2 8/8] bcma: add the BCM4352 PCI ID Alessio Ferri

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20261027-bcma-ac-rev1-v2-7-b69b61c31920@mythread.it \
    --to=alessio.ferri@mythread.it \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mips@vger.kernel.org \
    --cc=linux-wireless@vger.kernel.org \
    --cc=m@bues.ch \
    --cc=vit9696@protonmail.com \
    --cc=zajec5@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®