]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
arm64: versal-net: Add support for SPP production version
authorMichal Simek <michal.simek@amd.com>
Wed, 17 May 2023 08:21:32 +0000 (10:21 +0200)
committerMichal Simek <michal.simek@amd.com>
Mon, 12 Jun 2023 11:24:31 +0000 (13:24 +0200)
Production version restarting platform version field from 0 that's why add
new calculation to be able to use different DT for these platforms.
Requested DT names for production silicons for IPP/SPP and EMU platform are
versal-net-ipp-rev2.0.dts and versal-net-emu-rev2.0.dts.
If platform version increase numbers revision can be even higher.
As of today platform version is 2 that's why expected is rev2.2.

Signed-off-by: Michal Simek <michal.simek@amd.com>
Link: https://lore.kernel.org/r/691e166b3cf2643d7edf482bda5500163eecb35a.1684311689.git.michal.simek@amd.com
arch/arm/mach-versal-net/include/mach/hardware.h
board/xilinx/versal-net/board.c

index 89b84a2efc2d04056d7cf693faefd7c272b2cc4b..3f04104961d2d57a722632730ed64a062b773a5c 100644 (file)
@@ -51,6 +51,7 @@ struct crp_regs {
 #define PMC_TAP_VERSION                (PMC_TAP + 0x4)
 # define PMC_VERSION_MASK      GENMASK(7, 0)
 # define PS_VERSION_MASK       GENMASK(15, 8)
+# define PS_VERSION_PRODUCTION 0x20
 # define RTL_VERSION_MASK      GENMASK(23, 16)
 # define PLATFORM_MASK         GENMASK(27, 24)
 # define PLATFORM_VERSION_MASK GENMASK(31, 28)
index 6595d6f3e88a663e14513464252db24b9085eefc..a68b608b82cb5490349f293b799f997e997cc68e 100644 (file)
@@ -75,32 +75,45 @@ char *soc_name_decode(void)
 
 bool soc_detection(void)
 {
-       u32 version;
+       u32 version, ps_version;
 
        version = readl(PMC_TAP_VERSION);
        platform_id = FIELD_GET(PLATFORM_MASK, version);
+       ps_version = FIELD_GET(PS_VERSION_MASK, version);
 
        debug("idcode %x, version %x, usercode %x\n",
              readl(PMC_TAP_IDCODE), version,
              readl(PMC_TAP_USERCODE));
 
-       debug("pmc_ver %lx, ps version %lx, rtl version %lx\n",
+       debug("pmc_ver %lx, ps version %x, rtl version %lx\n",
              FIELD_GET(PMC_VERSION_MASK, version),
-             FIELD_GET(PS_VERSION_MASK, version),
+             ps_version,
              FIELD_GET(RTL_VERSION_MASK, version));
 
        platform_version = FIELD_GET(PLATFORM_VERSION_MASK, version);
 
        if (platform_id == VERSAL_NET_SPP ||
            platform_id == VERSAL_NET_EMU) {
-               /*
-                * 9 is diff for
-                * 0 means 0.9 version
-                * 1 means 1.0 version
-                * 2 means 1.1 version
-                * etc,
-                */
-               platform_version += 9;
+               if (ps_version == PS_VERSION_PRODUCTION) {
+                       /*
+                        * ES1 version ends at 1.9 version where there was +9
+                        * used because of IPP/SPP conversion. Production
+                        * version have platform_version started from 0 again
+                        * that's why adding +20 to continue with the same line.
+                        * It means the last ES1 version ends at 1.9 version and
+                        * new PRODUCTION line starts at 2.0.
+                        */
+                       platform_version += 20;
+               } else {
+                       /*
+                        * 9 is diff for
+                        * 0 means 0.9 version
+                        * 1 means 1.0 version
+                        * 2 means 1.1 version
+                        * etc,
+                        */
+                       platform_version += 9;
+               }
        }
 
        debug("Platform id: %d version: %d.%d\n", platform_id,