armv8: ls1043a/ls2080a: check SoC by device ID
authorWenbin song <wenbin.song@nxp.com>
Mon, 4 Dec 2017 04:18:28 +0000 (12:18 +0800)
committerYork Sun <york.sun@nxp.com>
Wed, 13 Dec 2017 21:40:29 +0000 (13:40 -0800)
Check LS1043A/LS2080a by device ID without using personality ID to
determine revision number. This check applies to all various
personalities of the same SoC family.

Signed-off-by: Wenbin Song <wenbin.song@nxp.com>
Reviewed-by: York Sun <york.sun@nxp.com>
arch/arm/cpu/armv8/fsl-layerscape/cpu.c
arch/arm/cpu/armv8/fsl-layerscape/fdt.c
arch/arm/cpu/armv8/fsl-layerscape/lowlevel.S
arch/arm/include/asm/arch-fsl-layerscape/soc.h
drivers/net/fsl-mc/dpio/qbman_private.h
drivers/usb/common/fsl-errata.c

index d08262971e74c1be3306fec011aa058e8681301f..00d2564c7998bb5e6643b66e88081fda4e804373 100644 (file)
@@ -538,8 +538,8 @@ int arch_early_init_r(void)
         * erratum A009635 is valid only for LS2080A SoC and
         * its personalitiesi
         */
-       svr_dev_id = get_svr() >> 16;
-       if (svr_dev_id == SVR_DEV_LS2080A)
+       svr_dev_id = get_svr();
+       if (IS_SVR_DEV(svr_dev_id, SVR_DEV(SVR_LS2080A)))
                erratum_a009635();
 #endif
 #if defined(CONFIG_SYS_FSL_ERRATUM_A009942) && defined(CONFIG_SYS_FSL_DDR)
@@ -604,8 +604,8 @@ int timer_init(void)
         * For LS2080A SoC and its personalities, timer controller
         * offset is different
         */
-       svr_dev_id = get_svr() >> 16;
-       if (svr_dev_id == SVR_DEV_LS2080A)
+       svr_dev_id = get_svr();
+       if (IS_SVR_DEV(svr_dev_id, SVR_DEV(SVR_LS2080A)))
                cntcr = (u32 *)SYS_FSL_LS2080A_LS2085A_TIMER_ADDR;
 
 #endif
index cae59da803b56c39d701a03ae58be0cf06c5ee37..d1a7d0de9c9f0aa020d1e3ff05aa72ff02212625 100644 (file)
@@ -145,7 +145,7 @@ static void fdt_fixup_gic(void *blob)
 
        val = gur_in32(&gur->svr);
 
-       if (SVR_SOC_VER(val) != SVR_LS1043A) {
+       if (!IS_SVR_DEV(val, SVR_DEV(SVR_LS1043A))) {
                align_64k = 1;
        } else if (SVR_REV(val) != REV1_0) {
                val = scfg_in32(&scfg->gic_align) & (0x01 << GIC_ADDR_BIT);
@@ -327,7 +327,7 @@ static void fdt_fixup_msi(void *blob)
 
        rev = gur_in32(&gur->svr);
 
-       if (SVR_SOC_VER(rev) != SVR_LS1043A)
+       if (!IS_SVR_DEV(rev, SVR_DEV(SVR_LS1043A)))
                return;
 
        rev = SVR_REV(rev);
index fa93096c688c1ee3d52e02181d76c81580b1e72d..c089ceef3262f3032f7ffd623561ccda43a312bd 100644 (file)
@@ -37,9 +37,8 @@ ENTRY(get_gic_offset)
        ldr     x2, =DCFG_CCSR_SVR
        ldr     w2, [x2]
        rev     w2, w2
-       mov     w3, w2
-       ands    w3, w3, #SVR_WO_E << 8
-       mov     w4, #SVR_LS1043A << 8
+       lsr     w3, w2, #16
+       ldr     w4, =SVR_DEV(SVR_LS1043A)
        cmp     w3, w4
        b.ne    1f
        ands    w2, w2, #0xff
@@ -92,7 +91,7 @@ ENTRY(lowlevel_init)
         */
        bl      get_svr
        lsr     w0, w0, #16
-       ldr     w1, =SVR_DEV_LS2080A
+       ldr     w1, =SVR_DEV(SVR_LS2080A)
        cmp     w0, w1
        b.eq    1f
 
@@ -224,7 +223,7 @@ ENTRY(lowlevel_init)
         */
        bl      get_svr
        lsr     w0, w0, #16
-       ldr     w1, =SVR_DEV_LS2080A
+       ldr     w1, =SVR_DEV(SVR_LS2080A)
        cmp     w0, w1
        b.eq    1f
 
index 247f09e0f5ff69bd209aebac8ab5f9c01df704b2..09f64e7bd7e654e3b0d41bcf6515197edf071cfb 100644 (file)
@@ -76,8 +76,6 @@ struct cpu_type {
 #define SVR_LS2081A            0x870918
 #define SVR_LS2041A            0x870914
 
-#define SVR_DEV_LS2080A                0x8701
-
 #define SVR_MAJ(svr)           (((svr) >> 4) & 0xf)
 #define SVR_MIN(svr)           (((svr) >> 0) & 0xf)
 #define SVR_REV(svr)           (((svr) >> 0) & 0xff)
@@ -85,6 +83,8 @@ struct cpu_type {
 #define IS_E_PROCESSOR(svr)    (!((svr >> 8) & 0x1))
 #define IS_SVR_REV(svr, maj, min) \
                ((SVR_MAJ(svr) == (maj)) && (SVR_MIN(svr) == (min)))
+#define SVR_DEV(svr)           ((svr) >> 8)
+#define IS_SVR_DEV(svr, dev)   (((svr) >> 16) == (dev))
 
 /* ahci port register default value */
 #define AHCI_PORT_PHY_1_CFG    0xa003fffe
index 73bbae373efe71db16f20ffd941f691dd0690310..873323be0fc352d48abc937d89a371fdf8cc719e 100644 (file)
@@ -175,8 +175,8 @@ void qbman_version(u32 *major, u32 *minor)
         * LS2080A SoC and its personalities has qbman cotroller version 4.0
         * New SoCs like LS2088A, LS1088A has qbman conroller version 4.1
         */
-       svr_dev_id = get_svr() >> 16;
-       if (svr_dev_id == SVR_DEV_LS2080A) {
+       svr_dev_id = get_svr();
+       if (IS_SVR_DEV(svr_dev_id, SVR_DEV(SVR_LS2080A))) {
                *major = 4;
                *minor = 0;
        } else {
index 823beb32f6351bc8ddd81a2cfaaa06009334037c..6e2a464e0af3c729d0ea455696c1c33cabac24d2 100644 (file)
@@ -198,6 +198,11 @@ bool has_erratum_a010151(void)
        u32 svr = get_svr();
        u32 soc = SVR_SOC_VER(svr);
 
+#ifdef CONFIG_ARM64
+       if (IS_SVR_DEV(svr, SVR_DEV(SVR_LS1043A)))
+               return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
+#endif
+
        switch (soc) {
 #ifdef CONFIG_ARM64
        case SVR_LS2080A:
@@ -209,8 +214,6 @@ bool has_erratum_a010151(void)
        case SVR_LS1046A:
        case SVR_LS1012A:
                return IS_SVR_REV(svr, 1, 0);
-       case SVR_LS1043A:
-               return IS_SVR_REV(svr, 1, 0) || IS_SVR_REV(svr, 1, 1);
 #endif
 #ifdef CONFIG_ARCH_LS1021A
        case SOC_VER_LS1020: