* [PATCH 0/2] Add AM62P silicon revision detection via NVMEM @ 2026-02-04 21:37 Judith Mendez 2026-02-04 21:37 ` [PATCH 1/2] dt-bindings: hwinfo: ti,k3-socinfo: Add nvmem-cells support Judith Mendez 2026-02-04 21:37 ` [PATCH 2/2] soc: ti: k3-socinfo: Add support for AM62P variants via NVMEM Judith Mendez 0 siblings, 2 replies; 8+ messages in thread From: Judith Mendez @ 2026-02-04 21:37 UTC (permalink / raw) To: Judith Mendez, Nishanth Menon, Vignesh Raghavendra, Tero Kristo, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Santosh Shilimkar Cc: linux-arm-kernel, devicetree, linux-kernel, Andrew Davis This series adds support for detecting AM62P silicon revisions using the NVMEM framework to read the GP_SW1 register. Background: =========== On AM62P SoCs, the standard JTAGID register does not provide information on silicon revision, instead the GP_SW1 register contains the information needed for proper device identification. Proper silicon revision detection is required to apply proper workarounds and quirks for different silicon revisions, particularly for MMCSD [0]. Implementation history: ======================= An initial implementation [0] added a second register range directly to the chipid node to access GP_SW registers. Following upstream review feedback to split the patches appropriately, an alternative RFC approach [1] was explored that introduced a new NVMEM eFuse binding specifically for TI K3 SoCs. This final implementation takes a simpler approach by leveraging the existing NVMEM framework with optional nvmem-cells support. The k3-socinfo driver can now optionally consume silicon revision data from the NVMEM provider, making it more flexible and avoiding the need for either direct register access or new bindings. Implementation details: ======================= - NVMEM support is fully optional - the driver continues to work without it and falls back to SR1.0 for AM62P devices - When NVMEM cells are present, the driver reads GP_SW1 to accurately detect SR1.1 and SR1.2 variants [0] https://lore.kernel.org/linux-mmc/20250805234950.3781367-1-jm@ti.com/ [1] https://lore.kernel.org/all/20250924210735.1732423-1-jm@ti.com/ Judith Mendez (2): dt-bindings: hwinfo: ti,k3-socinfo: Add nvmem-cells support soc: ti: k3-socinfo: Add support for AM62P variants via NVMEM .../bindings/hwinfo/ti,k3-socinfo.yaml | 12 +++++ drivers/soc/ti/k3-socinfo.c | 48 +++++++++++++++++-- 2 files changed, 57 insertions(+), 3 deletions(-) -- 2.52.0 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/2] dt-bindings: hwinfo: ti,k3-socinfo: Add nvmem-cells support 2026-02-04 21:37 [PATCH 0/2] Add AM62P silicon revision detection via NVMEM Judith Mendez @ 2026-02-04 21:37 ` Judith Mendez 2026-02-04 21:37 ` [PATCH 2/2] soc: ti: k3-socinfo: Add support for AM62P variants via NVMEM Judith Mendez 1 sibling, 0 replies; 8+ messages in thread From: Judith Mendez @ 2026-02-04 21:37 UTC (permalink / raw) To: Judith Mendez, Nishanth Menon, Vignesh Raghavendra, Tero Kristo, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Santosh Shilimkar Cc: linux-arm-kernel, devicetree, linux-kernel, Andrew Davis Add optional nvmem-cells and nvmem-cell-names properties to support reading silicon revision information from alternate location using NVMEM providers. This is used on AM62P to read GP_SW1 register for accurate silicon revision detection. Signed-off-by: Judith Mendez <jm@ti.com> --- .../devicetree/bindings/hwinfo/ti,k3-socinfo.yaml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Documentation/devicetree/bindings/hwinfo/ti,k3-socinfo.yaml b/Documentation/devicetree/bindings/hwinfo/ti,k3-socinfo.yaml index dada28b47ea07..58cc937e13351 100644 --- a/Documentation/devicetree/bindings/hwinfo/ti,k3-socinfo.yaml +++ b/Documentation/devicetree/bindings/hwinfo/ti,k3-socinfo.yaml @@ -15,6 +15,9 @@ description: | represented by CTRLMMR_xxx_JTAGID register which contains information about SoC id and revision. + On some SoCs like AM62P, the silicon revision is determined by reading + alternative registers via NVMEM cells. + properties: $nodename: pattern: "^chipid@[0-9a-f]+$" @@ -26,6 +29,15 @@ properties: reg: maxItems: 1 + nvmem-cells: + maxItems: 1 + description: + Reference to NVMEM node containing revision information. + + nvmem-cell-names: + items: + - const: gpsw1 + required: - compatible - reg -- 2.52.0 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/2] soc: ti: k3-socinfo: Add support for AM62P variants via NVMEM 2026-02-04 21:37 [PATCH 0/2] Add AM62P silicon revision detection via NVMEM Judith Mendez 2026-02-04 21:37 ` [PATCH 1/2] dt-bindings: hwinfo: ti,k3-socinfo: Add nvmem-cells support Judith Mendez @ 2026-02-04 21:37 ` Judith Mendez 2026-02-04 21:54 ` Andrew Davis 1 sibling, 1 reply; 8+ messages in thread From: Judith Mendez @ 2026-02-04 21:37 UTC (permalink / raw) To: Judith Mendez, Nishanth Menon, Vignesh Raghavendra, Tero Kristo, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Santosh Shilimkar Cc: linux-arm-kernel, devicetree, linux-kernel, Andrew Davis Add support for detecting AM62P silicon revisions. On AM62P, silicon revision is discovered with GP_SW1 register instead of JTAGID register. Use the NVMEM framework to read GP_SW1 from the gpsw-efuse nvmem provider to determine SoC revision. Signed-off-by: Judith Mendez <jm@ti.com> --- drivers/soc/ti/k3-socinfo.c | 48 ++++++++++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/drivers/soc/ti/k3-socinfo.c b/drivers/soc/ti/k3-socinfo.c index 42275cb5ba1c8..4b6947a9ceb4d 100644 --- a/drivers/soc/ti/k3-socinfo.c +++ b/drivers/soc/ti/k3-socinfo.c @@ -6,6 +6,7 @@ */ #include <linux/mfd/syscon.h> +#include <linux/nvmem-consumer.h> #include <linux/of.h> #include <linux/of_address.h> #include <linux/regmap.h> @@ -25,6 +26,9 @@ #define CTRLMMR_WKUP_JTAGID_VARIANT_SHIFT (28) #define CTRLMMR_WKUP_JTAGID_VARIANT_MASK GENMASK(31, 28) +#define GP_SW1_VALID_BIT BIT(4) +#define GP_SW1_ADR_MASK GENMASK(3, 0) + #define CTRLMMR_WKUP_JTAGID_PARTNO_SHIFT (12) #define CTRLMMR_WKUP_JTAGID_PARTNO_MASK GENMASK(27, 12) @@ -70,6 +74,29 @@ static const char * const am62lx_rev_string_map[] = { "1.0", "1.1", }; +static const char * const am62p_gpsw_rev_string_map[] = { + "1.0", "1.1", "1.2", +}; + +static int +k3_chipinfo_get_gpsw_variant(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + u32 gpsw_val, adr_val = 0; + int ret; + + ret = nvmem_cell_read_u32(dev, "gpsw1", &gpsw_val); + if (ret) + return ret; + + if (!(gpsw_val & GP_SW1_VALID_BIT)) + return 0; + + adr_val = gpsw_val & GP_SW1_ADR_MASK; + + return adr_val; +} + static int k3_chipinfo_partno_to_names(unsigned int partno, struct soc_device_attribute *soc_dev_attr) @@ -86,9 +113,11 @@ k3_chipinfo_partno_to_names(unsigned int partno, } static int -k3_chipinfo_variant_to_sr(unsigned int partno, unsigned int variant, - struct soc_device_attribute *soc_dev_attr) +k3_chipinfo_variant_to_sr(struct platform_device *pdev, unsigned int partno, + unsigned int variant, struct soc_device_attribute *soc_dev_attr) { + int gpsw_variant = 0; + switch (partno) { case JTAG_ID_PARTNO_J721E: if (variant >= ARRAY_SIZE(j721e_rev_string_map)) @@ -102,6 +131,19 @@ k3_chipinfo_variant_to_sr(unsigned int partno, unsigned int variant, soc_dev_attr->revision = kasprintf(GFP_KERNEL, "SR%s", am62lx_rev_string_map[variant]); break; + case JTAG_ID_PARTNO_AM62PX: + /* Check GP_SW1 for silicon revision */ + gpsw_variant = k3_chipinfo_get_gpsw_variant(pdev); + if (gpsw_variant == -EPROBE_DEFER) + return gpsw_variant; + if (gpsw_variant < 0 || gpsw_variant >= ARRAY_SIZE(am62p_gpsw_rev_string_map)) { + dev_warn(&pdev->dev, "Failed to get silicon variant (%d), set SR1.0\n", + gpsw_variant); + gpsw_variant = 0; + } + soc_dev_attr->revision = kasprintf(GFP_KERNEL, "SR%s", + am62p_gpsw_rev_string_map[gpsw_variant]); + break; default: variant++; soc_dev_attr->revision = kasprintf(GFP_KERNEL, "SR%x.0", @@ -173,7 +215,7 @@ static int k3_chipinfo_probe(struct platform_device *pdev) goto err; } - ret = k3_chipinfo_variant_to_sr(partno_id, variant, soc_dev_attr); + ret = k3_chipinfo_variant_to_sr(pdev, partno_id, variant, soc_dev_attr); if (ret) { dev_err(dev, "Unknown SoC SR[0x%08X]: %d\n", jtag_id, ret); goto err; -- 2.52.0 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] soc: ti: k3-socinfo: Add support for AM62P variants via NVMEM 2026-02-04 21:37 ` [PATCH 2/2] soc: ti: k3-socinfo: Add support for AM62P variants via NVMEM Judith Mendez @ 2026-02-04 21:54 ` Andrew Davis 2026-02-05 0:51 ` Judith Mendez 2026-02-06 0:38 ` Judith Mendez 0 siblings, 2 replies; 8+ messages in thread From: Andrew Davis @ 2026-02-04 21:54 UTC (permalink / raw) To: Judith Mendez, Nishanth Menon, Vignesh Raghavendra, Tero Kristo, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Santosh Shilimkar Cc: linux-arm-kernel, devicetree, linux-kernel On 2/4/26 3:37 PM, Judith Mendez wrote: > Add support for detecting AM62P silicon revisions. > > On AM62P, silicon revision is discovered with GP_SW1 register instead > of JTAGID register. Use the NVMEM framework to read GP_SW1 from the > gpsw-efuse nvmem provider to determine SoC revision. > > Signed-off-by: Judith Mendez <jm@ti.com> > --- > drivers/soc/ti/k3-socinfo.c | 48 ++++++++++++++++++++++++++++++++++--- > 1 file changed, 45 insertions(+), 3 deletions(-) > > diff --git a/drivers/soc/ti/k3-socinfo.c b/drivers/soc/ti/k3-socinfo.c > index 42275cb5ba1c8..4b6947a9ceb4d 100644 > --- a/drivers/soc/ti/k3-socinfo.c > +++ b/drivers/soc/ti/k3-socinfo.c > @@ -6,6 +6,7 @@ > */ > > #include <linux/mfd/syscon.h> > +#include <linux/nvmem-consumer.h> > #include <linux/of.h> > #include <linux/of_address.h> > #include <linux/regmap.h> > @@ -25,6 +26,9 @@ > #define CTRLMMR_WKUP_JTAGID_VARIANT_SHIFT (28) > #define CTRLMMR_WKUP_JTAGID_VARIANT_MASK GENMASK(31, 28) > > +#define GP_SW1_VALID_BIT BIT(4) > +#define GP_SW1_ADR_MASK GENMASK(3, 0) > + > #define CTRLMMR_WKUP_JTAGID_PARTNO_SHIFT (12) > #define CTRLMMR_WKUP_JTAGID_PARTNO_MASK GENMASK(27, 12) > > @@ -70,6 +74,29 @@ static const char * const am62lx_rev_string_map[] = { > "1.0", "1.1", > }; > > +static const char * const am62p_gpsw_rev_string_map[] = { > + "1.0", "1.1", "1.2", > +}; > + > +static int > +k3_chipinfo_get_gpsw_variant(struct platform_device *pdev) > +{ > + struct device *dev = &pdev->dev; > + u32 gpsw_val, adr_val = 0; > + int ret; > + > + ret = nvmem_cell_read_u32(dev, "gpsw1", &gpsw_val); > + if (ret) > + return ret; > + > + if (!(gpsw_val & GP_SW1_VALID_BIT)) > + return 0; Return -1 here so you will get the warning message about setting default SR1.0. > + > + adr_val = gpsw_val & GP_SW1_ADR_MASK; > + > + return adr_val; Merge the above two lines, return gpsw_val & GP_SW1_ADR_MASK; Or maybe try using FIELD_GET() or similar if you are feeling fancy. > +} > + > static int > k3_chipinfo_partno_to_names(unsigned int partno, > struct soc_device_attribute *soc_dev_attr) > @@ -86,9 +113,11 @@ k3_chipinfo_partno_to_names(unsigned int partno, > } > > static int > -k3_chipinfo_variant_to_sr(unsigned int partno, unsigned int variant, > - struct soc_device_attribute *soc_dev_attr) > +k3_chipinfo_variant_to_sr(struct platform_device *pdev, unsigned int partno, You pass in the platform_device struct pointer, but only ever use the ->dev member, just pass in the "dev" device pointer. Otherwise LGTM Andrew > + unsigned int variant, struct soc_device_attribute *soc_dev_attr) > { > + int gpsw_variant = 0; > + > switch (partno) { > case JTAG_ID_PARTNO_J721E: > if (variant >= ARRAY_SIZE(j721e_rev_string_map)) > @@ -102,6 +131,19 @@ k3_chipinfo_variant_to_sr(unsigned int partno, unsigned int variant, > soc_dev_attr->revision = kasprintf(GFP_KERNEL, "SR%s", > am62lx_rev_string_map[variant]); > break; > + case JTAG_ID_PARTNO_AM62PX: > + /* Check GP_SW1 for silicon revision */ > + gpsw_variant = k3_chipinfo_get_gpsw_variant(pdev); > + if (gpsw_variant == -EPROBE_DEFER) > + return gpsw_variant; > + if (gpsw_variant < 0 || gpsw_variant >= ARRAY_SIZE(am62p_gpsw_rev_string_map)) { > + dev_warn(&pdev->dev, "Failed to get silicon variant (%d), set SR1.0\n", > + gpsw_variant); > + gpsw_variant = 0; > + } > + soc_dev_attr->revision = kasprintf(GFP_KERNEL, "SR%s", > + am62p_gpsw_rev_string_map[gpsw_variant]); > + break; > default: > variant++; > soc_dev_attr->revision = kasprintf(GFP_KERNEL, "SR%x.0", > @@ -173,7 +215,7 @@ static int k3_chipinfo_probe(struct platform_device *pdev) > goto err; > } > > - ret = k3_chipinfo_variant_to_sr(partno_id, variant, soc_dev_attr); > + ret = k3_chipinfo_variant_to_sr(pdev, partno_id, variant, soc_dev_attr); > if (ret) { > dev_err(dev, "Unknown SoC SR[0x%08X]: %d\n", jtag_id, ret); > goto err; ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] soc: ti: k3-socinfo: Add support for AM62P variants via NVMEM 2026-02-04 21:54 ` Andrew Davis @ 2026-02-05 0:51 ` Judith Mendez 2026-02-06 0:38 ` Judith Mendez 1 sibling, 0 replies; 8+ messages in thread From: Judith Mendez @ 2026-02-05 0:51 UTC (permalink / raw) To: Andrew Davis, Nishanth Menon, Vignesh Raghavendra, Tero Kristo, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Santosh Shilimkar Cc: linux-arm-kernel, devicetree, linux-kernel Hi Andrew, On 2/4/26 3:54 PM, Andrew Davis wrote: > On 2/4/26 3:37 PM, Judith Mendez wrote: >> Add support for detecting AM62P silicon revisions. >> >> On AM62P, silicon revision is discovered with GP_SW1 register instead >> of JTAGID register. Use the NVMEM framework to read GP_SW1 from the >> gpsw-efuse nvmem provider to determine SoC revision. >> >> Signed-off-by: Judith Mendez <jm@ti.com> >> --- >> drivers/soc/ti/k3-socinfo.c | 48 ++++++++++++++++++++++++++++++++++--- >> 1 file changed, 45 insertions(+), 3 deletions(-) >> >> diff --git a/drivers/soc/ti/k3-socinfo.c b/drivers/soc/ti/k3-socinfo.c >> index 42275cb5ba1c8..4b6947a9ceb4d 100644 >> --- a/drivers/soc/ti/k3-socinfo.c >> +++ b/drivers/soc/ti/k3-socinfo.c >> @@ -6,6 +6,7 @@ >> */ >> #include <linux/mfd/syscon.h> >> +#include <linux/nvmem-consumer.h> >> #include <linux/of.h> >> #include <linux/of_address.h> >> #include <linux/regmap.h> >> @@ -25,6 +26,9 @@ >> #define CTRLMMR_WKUP_JTAGID_VARIANT_SHIFT (28) >> #define CTRLMMR_WKUP_JTAGID_VARIANT_MASK GENMASK(31, 28) >> +#define GP_SW1_VALID_BIT BIT(4) >> +#define GP_SW1_ADR_MASK GENMASK(3, 0) >> + >> #define CTRLMMR_WKUP_JTAGID_PARTNO_SHIFT (12) >> #define CTRLMMR_WKUP_JTAGID_PARTNO_MASK GENMASK(27, 12) >> @@ -70,6 +74,29 @@ static const char * const am62lx_rev_string_map[] = { >> "1.0", "1.1", >> }; >> +static const char * const am62p_gpsw_rev_string_map[] = { >> + "1.0", "1.1", "1.2", >> +}; >> + >> +static int >> +k3_chipinfo_get_gpsw_variant(struct platform_device *pdev) >> +{ >> + struct device *dev = &pdev->dev; >> + u32 gpsw_val, adr_val = 0; >> + int ret; >> + >> + ret = nvmem_cell_read_u32(dev, "gpsw1", &gpsw_val); >> + if (ret) >> + return ret; >> + >> + if (!(gpsw_val & GP_SW1_VALID_BIT)) >> + return 0; > > Return -1 here so you will get the warning message about setting default > SR1.0. > >> + >> + adr_val = gpsw_val & GP_SW1_ADR_MASK; >> + >> + return adr_val; > > Merge the above two lines, > > return gpsw_val & GP_SW1_ADR_MASK; > > Or maybe try using FIELD_GET() or similar if you are feeling fancy. > >> +} >> + >> static int >> k3_chipinfo_partno_to_names(unsigned int partno, >> struct soc_device_attribute *soc_dev_attr) >> @@ -86,9 +113,11 @@ k3_chipinfo_partno_to_names(unsigned int partno, >> } >> static int >> -k3_chipinfo_variant_to_sr(unsigned int partno, unsigned int variant, >> - struct soc_device_attribute *soc_dev_attr) >> +k3_chipinfo_variant_to_sr(struct platform_device *pdev, unsigned int >> partno, > > You pass in the platform_device struct pointer, but only ever use the > ->dev member, just pass in the "dev" device pointer. > > Otherwise LGTM > > Andrew > Thanks for reviewing! Will fix according to your review and respin the series. ~ Judith ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] soc: ti: k3-socinfo: Add support for AM62P variants via NVMEM 2026-02-04 21:54 ` Andrew Davis 2026-02-05 0:51 ` Judith Mendez @ 2026-02-06 0:38 ` Judith Mendez 2026-02-06 16:50 ` Andrew Davis 1 sibling, 1 reply; 8+ messages in thread From: Judith Mendez @ 2026-02-06 0:38 UTC (permalink / raw) To: Andrew Davis, Nishanth Menon, Vignesh Raghavendra, Tero Kristo, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Santosh Shilimkar Cc: linux-arm-kernel, devicetree, linux-kernel Andrew, On 2/4/26 3:54 PM, Andrew Davis wrote: > On 2/4/26 3:37 PM, Judith Mendez wrote: >> Add support for detecting AM62P silicon revisions. >> >> On AM62P, silicon revision is discovered with GP_SW1 register instead >> of JTAGID register. Use the NVMEM framework to read GP_SW1 from the >> gpsw-efuse nvmem provider to determine SoC revision. >> >> Signed-off-by: Judith Mendez <jm@ti.com> >> --- >> drivers/soc/ti/k3-socinfo.c | 48 ++++++++++++++++++++++++++++++++++--- >> 1 file changed, 45 insertions(+), 3 deletions(-) >> >> diff --git a/drivers/soc/ti/k3-socinfo.c b/drivers/soc/ti/k3-socinfo.c >> index 42275cb5ba1c8..4b6947a9ceb4d 100644 >> --- a/drivers/soc/ti/k3-socinfo.c >> +++ b/drivers/soc/ti/k3-socinfo.c >> @@ -6,6 +6,7 @@ >> */ >> #include <linux/mfd/syscon.h> >> +#include <linux/nvmem-consumer.h> >> #include <linux/of.h> >> #include <linux/of_address.h> >> #include <linux/regmap.h> >> @@ -25,6 +26,9 @@ >> #define CTRLMMR_WKUP_JTAGID_VARIANT_SHIFT (28) >> #define CTRLMMR_WKUP_JTAGID_VARIANT_MASK GENMASK(31, 28) >> +#define GP_SW1_VALID_BIT BIT(4) >> +#define GP_SW1_ADR_MASK GENMASK(3, 0) >> + >> #define CTRLMMR_WKUP_JTAGID_PARTNO_SHIFT (12) >> #define CTRLMMR_WKUP_JTAGID_PARTNO_MASK GENMASK(27, 12) >> @@ -70,6 +74,29 @@ static const char * const am62lx_rev_string_map[] = { >> "1.0", "1.1", >> }; >> +static const char * const am62p_gpsw_rev_string_map[] = { >> + "1.0", "1.1", "1.2", >> +}; >> + >> +static int >> +k3_chipinfo_get_gpsw_variant(struct platform_device *pdev) >> +{ >> + struct device *dev = &pdev->dev; >> + u32 gpsw_val, adr_val = 0; >> + int ret; >> + >> + ret = nvmem_cell_read_u32(dev, "gpsw1", &gpsw_val); >> + if (ret) >> + return ret; >> + >> + if (!(gpsw_val & GP_SW1_VALID_BIT)) >> + return 0; > > Return -1 here so you will get the warning message about setting default > SR1.0. Actually, thinking about this some more... If valid bit is zero, that means that we have detected SR1.0. Id rather return zero instead of printing an error to the user and overwriting with zero. What do you think? ~ Judith ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] soc: ti: k3-socinfo: Add support for AM62P variants via NVMEM 2026-02-06 0:38 ` Judith Mendez @ 2026-02-06 16:50 ` Andrew Davis 2026-02-06 18:46 ` Judith Mendez 0 siblings, 1 reply; 8+ messages in thread From: Andrew Davis @ 2026-02-06 16:50 UTC (permalink / raw) To: Judith Mendez, Nishanth Menon, Vignesh Raghavendra, Tero Kristo, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Santosh Shilimkar Cc: linux-arm-kernel, devicetree, linux-kernel On 2/5/26 6:38 PM, Judith Mendez wrote: > Andrew, > > On 2/4/26 3:54 PM, Andrew Davis wrote: >> On 2/4/26 3:37 PM, Judith Mendez wrote: >>> Add support for detecting AM62P silicon revisions. >>> >>> On AM62P, silicon revision is discovered with GP_SW1 register instead >>> of JTAGID register. Use the NVMEM framework to read GP_SW1 from the >>> gpsw-efuse nvmem provider to determine SoC revision. >>> >>> Signed-off-by: Judith Mendez <jm@ti.com> >>> --- >>> drivers/soc/ti/k3-socinfo.c | 48 ++++++++++++++++++++++++++++++++++--- >>> 1 file changed, 45 insertions(+), 3 deletions(-) >>> >>> diff --git a/drivers/soc/ti/k3-socinfo.c b/drivers/soc/ti/k3-socinfo.c >>> index 42275cb5ba1c8..4b6947a9ceb4d 100644 >>> --- a/drivers/soc/ti/k3-socinfo.c >>> +++ b/drivers/soc/ti/k3-socinfo.c >>> @@ -6,6 +6,7 @@ >>> */ >>> #include <linux/mfd/syscon.h> >>> +#include <linux/nvmem-consumer.h> >>> #include <linux/of.h> >>> #include <linux/of_address.h> >>> #include <linux/regmap.h> >>> @@ -25,6 +26,9 @@ >>> #define CTRLMMR_WKUP_JTAGID_VARIANT_SHIFT (28) >>> #define CTRLMMR_WKUP_JTAGID_VARIANT_MASK GENMASK(31, 28) >>> +#define GP_SW1_VALID_BIT BIT(4) >>> +#define GP_SW1_ADR_MASK GENMASK(3, 0) >>> + >>> #define CTRLMMR_WKUP_JTAGID_PARTNO_SHIFT (12) >>> #define CTRLMMR_WKUP_JTAGID_PARTNO_MASK GENMASK(27, 12) >>> @@ -70,6 +74,29 @@ static const char * const am62lx_rev_string_map[] = { >>> "1.0", "1.1", >>> }; >>> +static const char * const am62p_gpsw_rev_string_map[] = { >>> + "1.0", "1.1", "1.2", >>> +}; >>> + >>> +static int >>> +k3_chipinfo_get_gpsw_variant(struct platform_device *pdev) >>> +{ >>> + struct device *dev = &pdev->dev; >>> + u32 gpsw_val, adr_val = 0; >>> + int ret; >>> + >>> + ret = nvmem_cell_read_u32(dev, "gpsw1", &gpsw_val); >>> + if (ret) >>> + return ret; >>> + >>> + if (!(gpsw_val & GP_SW1_VALID_BIT)) >>> + return 0; >> >> Return -1 here so you will get the warning message about setting default SR1.0. > > Actually, thinking about this some more... If valid bit is zero, that > means that we have detected SR1.0. To me a valid bit set to zero means the register is not valid.. If you are saying that bit actually signals SR1.0 then that bit is not well named. Although if the whole register is simply all zeros for SR1.0 then do you actually need this check at all? When you do extract the revision from the lowest bits (gpsw_val & GP_SW1_ADR_MASK) the result will also be 0, which is the SR1.0 value anyway. Andrew > Id rather return zero instead of > printing an error to the user and overwriting with zero. What do you > think? > > ~ Judith ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] soc: ti: k3-socinfo: Add support for AM62P variants via NVMEM 2026-02-06 16:50 ` Andrew Davis @ 2026-02-06 18:46 ` Judith Mendez 0 siblings, 0 replies; 8+ messages in thread From: Judith Mendez @ 2026-02-06 18:46 UTC (permalink / raw) To: Andrew Davis, Nishanth Menon, Vignesh Raghavendra, Tero Kristo, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Santosh Shilimkar Cc: linux-arm-kernel, devicetree, linux-kernel On 2/6/26 10:50 AM, Andrew Davis wrote: > On 2/5/26 6:38 PM, Judith Mendez wrote: >> Andrew, >> >> On 2/4/26 3:54 PM, Andrew Davis wrote: >>> On 2/4/26 3:37 PM, Judith Mendez wrote: >>>> Add support for detecting AM62P silicon revisions. >>>> >>>> On AM62P, silicon revision is discovered with GP_SW1 register instead >>>> of JTAGID register. Use the NVMEM framework to read GP_SW1 from the >>>> gpsw-efuse nvmem provider to determine SoC revision. >>>> >>>> Signed-off-by: Judith Mendez <jm@ti.com> >>>> --- >>>> drivers/soc/ti/k3-socinfo.c | 48 +++++++++++++++++++++++++++++++++ >>>> +--- >>>> 1 file changed, 45 insertions(+), 3 deletions(-) >>>> >>>> diff --git a/drivers/soc/ti/k3-socinfo.c b/drivers/soc/ti/k3-socinfo.c >>>> index 42275cb5ba1c8..4b6947a9ceb4d 100644 >>>> --- a/drivers/soc/ti/k3-socinfo.c >>>> +++ b/drivers/soc/ti/k3-socinfo.c >>>> @@ -6,6 +6,7 @@ >>>> */ >>>> #include <linux/mfd/syscon.h> >>>> +#include <linux/nvmem-consumer.h> >>>> #include <linux/of.h> >>>> #include <linux/of_address.h> >>>> #include <linux/regmap.h> >>>> @@ -25,6 +26,9 @@ >>>> #define CTRLMMR_WKUP_JTAGID_VARIANT_SHIFT (28) >>>> #define CTRLMMR_WKUP_JTAGID_VARIANT_MASK GENMASK(31, 28) >>>> +#define GP_SW1_VALID_BIT BIT(4) >>>> +#define GP_SW1_ADR_MASK GENMASK(3, 0) >>>> + >>>> #define CTRLMMR_WKUP_JTAGID_PARTNO_SHIFT (12) >>>> #define CTRLMMR_WKUP_JTAGID_PARTNO_MASK GENMASK(27, 12) >>>> @@ -70,6 +74,29 @@ static const char * const am62lx_rev_string_map[] >>>> = { >>>> "1.0", "1.1", >>>> }; >>>> +static const char * const am62p_gpsw_rev_string_map[] = { >>>> + "1.0", "1.1", "1.2", >>>> +}; >>>> + >>>> +static int >>>> +k3_chipinfo_get_gpsw_variant(struct platform_device *pdev) >>>> +{ >>>> + struct device *dev = &pdev->dev; >>>> + u32 gpsw_val, adr_val = 0; >>>> + int ret; >>>> + >>>> + ret = nvmem_cell_read_u32(dev, "gpsw1", &gpsw_val); >>>> + if (ret) >>>> + return ret; >>>> + >>>> + if (!(gpsw_val & GP_SW1_VALID_BIT)) >>>> + return 0; >>> >>> Return -1 here so you will get the warning message about setting >>> default SR1.0. >> >> Actually, thinking about this some more... If valid bit is zero, that >> means that we have detected SR1.0. > > To me a valid bit set to zero means the register is not valid.. If you are > saying that bit actually signals SR1.0 then that bit is not well named. > > Although if the whole register is simply all zeros for SR1.0 then do you > actually need this check at all? When you do extract the revision from > the lowest bits (gpsw_val & GP_SW1_ADR_MASK) the result will also be 0, > which is the SR1.0 value anyway. Ok, sounds like a plan. Will drop valid bit parsing and respin the series, thanks. ~ Judith ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2026-02-06 18:46 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-02-04 21:37 [PATCH 0/2] Add AM62P silicon revision detection via NVMEM Judith Mendez 2026-02-04 21:37 ` [PATCH 1/2] dt-bindings: hwinfo: ti,k3-socinfo: Add nvmem-cells support Judith Mendez 2026-02-04 21:37 ` [PATCH 2/2] soc: ti: k3-socinfo: Add support for AM62P variants via NVMEM Judith Mendez 2026-02-04 21:54 ` Andrew Davis 2026-02-05 0:51 ` Judith Mendez 2026-02-06 0:38 ` Judith Mendez 2026-02-06 16:50 ` Andrew Davis 2026-02-06 18:46 ` Judith Mendez
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox