summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mach-k3/include/mach/hardware.h6
-rw-r--r--drivers/soc/soc_ti_k3.c16
2 files changed, 20 insertions, 2 deletions
diff --git a/arch/arm/mach-k3/include/mach/hardware.h b/arch/arm/mach-k3/include/mach/hardware.h
index b191d53a0f5..1657697fbd8 100644
--- a/arch/arm/mach-k3/include/mach/hardware.h
+++ b/arch/arm/mach-k3/include/mach/hardware.h
@@ -62,6 +62,12 @@
#define JTAG_ID_PARTNO_J722S 0xbba0
#define JTAG_ID_PARTNO_J784S4 0xbb80
+#define CTRLMMR_WKUP_JTAG_DEVICE_ID (WKUP_CTRL_MMR0_BASE + 0x18)
+#define JTAG_DEV_J742S2_PKG_MASK GENMASK(2, 0)
+#define JTAG_DEV_J742S2_PKG_SHIFT 0
+
+#define JTAG_ID_PKG_J742S2 0x7
+
#define K3_SOC_ID(id, ID) \
static inline bool soc_is_##id(void) \
{ \
diff --git a/drivers/soc/soc_ti_k3.c b/drivers/soc/soc_ti_k3.c
index a3acca4d394..b34cbd08e07 100644
--- a/drivers/soc/soc_ti_k3.c
+++ b/drivers/soc/soc_ti_k3.c
@@ -18,8 +18,12 @@ struct soc_ti_k3_plat {
static const char *get_family_string(u32 idreg)
{
const char *family;
+ u32 jtag_dev_id;
+ u32 pkg;
u32 soc;
+ jtag_dev_id = readl(CTRLMMR_WKUP_JTAG_DEVICE_ID);
+
soc = (idreg & JTAG_ID_PARTNO_MASK) >> JTAG_ID_PARTNO_SHIFT;
switch (soc) {
@@ -51,8 +55,16 @@ static const char *get_family_string(u32 idreg)
family = "J722S";
break;
case JTAG_ID_PARTNO_J784S4:
- family = "J784S4";
- break;
+ {
+ /* Keep default family as J784S4 */
+ family = "J784S4";
+
+ pkg = (jtag_dev_id & JTAG_DEV_J742S2_PKG_MASK) >> JTAG_DEV_J742S2_PKG_SHIFT;
+ if (pkg == JTAG_ID_PKG_J742S2)
+ family = "J742S2";
+
+ break;
+ }
default:
family = "Unknown Silicon";
};