summaryrefslogtreecommitdiff
path: root/drivers/soc/soc_ti_k3.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/soc/soc_ti_k3.c')
-rw-r--r--drivers/soc/soc_ti_k3.c44
1 files changed, 31 insertions, 13 deletions
diff --git a/drivers/soc/soc_ti_k3.c b/drivers/soc/soc_ti_k3.c
index 9abed7d490..965728e818 100644
--- a/drivers/soc/soc_ti_k3.c
+++ b/drivers/soc/soc_ti_k3.c
@@ -14,9 +14,7 @@
#define J721E 0xbb64
#define J7200 0xbb6d
#define AM64X 0xbb38
-
-#define REV_SR1_0 0
-#define REV_SR2_0 1
+#define J721S2 0xbb75
#define JTAG_ID_VARIANT_SHIFT 28
#define JTAG_ID_VARIANT_MASK (0xf << 28)
@@ -48,6 +46,9 @@ static const char *get_family_string(u32 idreg)
case AM64X:
family = "AM64X";
break;
+ case J721S2:
+ family = "J721S2";
+ break;
default:
family = "Unknown Silicon";
};
@@ -55,25 +56,42 @@ static const char *get_family_string(u32 idreg)
return family;
}
+static char *j721e_rev_string_map[] = {
+ "1.0", "1.1",
+};
+
+static char *am65x_rev_string_map[] = {
+ "1.0", "2.0",
+};
+
static const char *get_rev_string(u32 idreg)
{
- const char *revision;
u32 rev;
+ u32 soc;
rev = (idreg & JTAG_ID_VARIANT_MASK) >> JTAG_ID_VARIANT_SHIFT;
+ soc = (idreg & JTAG_ID_PARTNO_MASK) >> JTAG_ID_PARTNO_SHIFT;
- switch (rev) {
- case REV_SR1_0:
- revision = "1.0";
- break;
- case REV_SR2_0:
- revision = "2.0";
- break;
+ switch (soc) {
+ case J721E:
+ if (rev > ARRAY_SIZE(j721e_rev_string_map))
+ goto bail;
+ return j721e_rev_string_map[rev];
+
+ case AM65X:
+ if (rev > ARRAY_SIZE(am65x_rev_string_map))
+ goto bail;
+ return am65x_rev_string_map[rev];
+
+ case AM64X:
+ case J7200:
default:
- revision = "Unknown Revision";
+ if (!rev)
+ return "1.0";
};
- return revision;
+bail:
+ return "Unknown Revision";
}
static int soc_ti_k3_get_family(struct udevice *dev, char *buf, int size)