armv8: fsl-layerscape: Add NXP LS2081A, LS2041A SoC support
authorPriyanka Jain <priyanka.jain@nxp.com>
Thu, 27 Apr 2017 09:38:06 +0000 (15:08 +0530)
committerYork Sun <york.sun@nxp.com>
Tue, 23 May 2017 16:40:23 +0000 (09:40 -0700)
The QorIQ LS2081A SoC has eight 64-bit ARM v8 Cortex A72 cores and
is built on layerscape architecture. It is 40-pin derivative of
LS2084A (non-AIOP personality of LS2088A). So feature-wise it is
same as LS2084A. LS2041A is a 4-core personality of LS2081A.

Signed-off-by: Priyanka Jain <priyanka.jain@nxp.com>
Signed-off-by: Santan Kumar <santan.kumar@nxp.com>
Reviewed-by: York Sun <york.sun@nxp.com>
arch/arm/cpu/armv8/fsl-layerscape/cpu.c
arch/arm/cpu/armv8/fsl-layerscape/doc/README.soc
arch/arm/include/asm/arch-fsl-layerscape/cpu.h
arch/arm/include/asm/arch-fsl-layerscape/soc.h
drivers/pci/pcie_layerscape.c
drivers/pci/pcie_layerscape.h
drivers/pci/pcie_layerscape_fixup.c

index bb029608bf2499817da7770a6954bc649a42cd49..cba0095e6a1d92449b46d5fc6ab7cb85a7cf4a1c 100644 (file)
@@ -1,4 +1,5 @@
 /*
+ * Copyright 2017 NXP
  * Copyright 2014-2015 Freescale Semiconductor, Inc.
  *
  * SPDX-License-Identifier:    GPL-2.0+
@@ -98,7 +99,8 @@ static void fix_pcie_mmu_map(void)
 
        /* Fix PCIE base and size for LS2088A */
        if ((ver == SVR_LS2088A) || (ver == SVR_LS2084A) ||
-           (ver == SVR_LS2048A) || (ver == SVR_LS2044A)) {
+           (ver == SVR_LS2048A) || (ver == SVR_LS2044A) ||
+           (ver == SVR_LS2081A) || (ver == SVR_LS2041A)) {
                for (i = 0; i < ARRAY_SIZE(final_map); i++) {
                        switch (final_map[i].phys) {
                        case CONFIG_SYS_PCIE1_PHYS_ADDR:
index c7496c02f57b2c04c4a3328b0c525b750280047b..3ae16ae7adf4e1f2a8092b3f28520adc6f53dfc1 100644 (file)
@@ -5,6 +5,7 @@ SoC overview
        3. LS1012A
        4. LS1046A
        5. LS2088A
+       6. LS2081A
 
 LS1043A
 ---------
@@ -227,3 +228,13 @@ LS2088A SoC has 3 more similar SoC personalities
 
 3)LS2044A, few difference w.r.t. LS2084A:
        a) Four 64-bit ARM v8 Cortex-A72 CPUs
+
+LS2081A
+--------
+LS2081A is 40-pin derivative of LS2084A.
+So feature-wise it is same as LS2084A.
+Refer to LS2084A(LS2088A) section above for details.
+
+It has one more similar SoC personality
+1)LS2041A, few difference w.r.t. LS2081A:
+       a) Four 64-bit ARM v8 Cortex-A72 CPUs
index 95c3e2fc08628d78fd4c5e94ecb5b7cedaf78cad..d6a273a2c4f139e4fa05cf6d136411f91e2fa36f 100644 (file)
@@ -1,4 +1,5 @@
 /*
+ * Copyright 2017 NXP
  * Copyright 2014-2015, Freescale Semiconductor
  *
  * SPDX-License-Identifier:    GPL-2.0+
@@ -15,6 +16,8 @@ static struct cpu_type cpu_type_list[] = {
        CPU_TYPE_ENTRY(LS2084A, LS2084A, 8),
        CPU_TYPE_ENTRY(LS2048A, LS2048A, 4),
        CPU_TYPE_ENTRY(LS2044A, LS2044A, 4),
+       CPU_TYPE_ENTRY(LS2081A, LS2081A, 8),
+       CPU_TYPE_ENTRY(LS2041A, LS2041A, 4),
        CPU_TYPE_ENTRY(LS1043A, LS1043A, 4),
        CPU_TYPE_ENTRY(LS1023A, LS1023A, 2),
        CPU_TYPE_ENTRY(LS1046A, LS1046A, 4),
index 426fe8ef86b178e321c1d625213780f70e6e78c4..cc3b079bbfb8516ca8014ada369d545004f4b344 100644 (file)
@@ -1,4 +1,5 @@
 /*
+ * Copyright 2017 NXP
  * Copyright 2015 Freescale Semiconductor
  *
  * SPDX-License-Identifier:    GPL-2.0+
@@ -54,6 +55,8 @@ struct cpu_type {
 #define SVR_LS2084A            0x870910
 #define SVR_LS2048A            0x870920
 #define SVR_LS2044A            0x870930
+#define SVR_LS2081A            0x870919
+#define SVR_LS2041A            0x870915
 
 #define SVR_DEV_LS2080A                0x8701
 
index 1c5a33ac2835275f84a73fb299f0c4f24caf5fe7..7565e2fd929e6e89a0382bb8537f8a9d5afccdd7 100644 (file)
@@ -1,4 +1,5 @@
 /*
+ * Copyright 2017 NXP
  * Copyright 2014-2015 Freescale Semiconductor, Inc.
  * Layerscape PCIe driver
  *
@@ -170,7 +171,8 @@ static void ls_pcie_setup_atu(struct ls_pcie *pcie)
        /* Fix the pcie memory map for LS2088A series SoCs */
        svr = (svr >> SVR_VAR_PER_SHIFT) & 0xFFFFFE;
        if (svr == SVR_LS2088A || svr == SVR_LS2084A ||
-           svr == SVR_LS2048A || svr == SVR_LS2044A) {
+           svr == SVR_LS2048A || svr == SVR_LS2044A ||
+           svr == SVR_LS2081A || svr == SVR_LS2041A) {
                if (io)
                        io->phys_start = (io->phys_start &
                                         (PCIE_PHYS_SIZE - 1)) +
@@ -531,7 +533,8 @@ static int ls_pcie_probe(struct udevice *dev)
        svr = get_svr();
        svr = (svr >> SVR_VAR_PER_SHIFT) & 0xFFFFFE;
        if (svr == SVR_LS2088A || svr == SVR_LS2084A ||
-           svr == SVR_LS2048A || svr == SVR_LS2044A) {
+           svr == SVR_LS2048A || svr == SVR_LS2044A ||
+           svr == SVR_LS2081A || svr == SVR_LS2041A) {
                pcie->cfg_res.start = LS2088A_PCIE1_PHYS_ADDR +
                                        LS2088A_PCIE_PHYS_SIZE * pcie->idx;
                pcie->ctrl = pcie->lut + 0x40000;
index e3324a5e52c41d80ab86ac59da79e3b88b74afa3..308b073f2b88d6e91638a56cb0c6794c53a01823 100644 (file)
@@ -1,4 +1,5 @@
 /*
+ * Copyright 2017 NXP
  * Copyright 2014-2015 Freescale Semiconductor, Inc.
  * Layerscape PCIe driver
  *
 #define SVR_LS2084A            0x870910
 #define SVR_LS2048A            0x870920
 #define SVR_LS2044A            0x870930
+#define SVR_LS2081A            0x870919
+#define SVR_LS2041A            0x870915
 
 /* LS1021a PCIE space */
 #define LS1021_PCIE_SPACE_OFFSET       0x4000000000ULL
index d504bbda378b636dc93ab38732b2060ff7cfe086..ce709bfc1477b75aebc1d0431eada2f05a4ffd1f 100644 (file)
@@ -1,4 +1,5 @@
 /*
+ * Copyright 2017 NXP
  * Copyright 2014-2015 Freescale Semiconductor, Inc.
  * Layerscape PCIe driver
  *
@@ -82,7 +83,8 @@ static void fdt_pcie_set_msi_map_entry(void *blob, struct ls_pcie *pcie,
 #ifdef CONFIG_FSL_PCIE_COMPAT /* Compatible with older version of dts node */
                svr = (get_svr() >> SVR_VAR_PER_SHIFT) & 0xFFFFFE;
                if (svr == SVR_LS2088A || svr == SVR_LS2084A ||
-                   svr == SVR_LS2048A || svr == SVR_LS2044A)
+                   svr == SVR_LS2048A || svr == SVR_LS2044A ||
+                   svr == SVR_LS2081A || svr == SVR_LS2041A)
                        compat = "fsl,ls2088a-pcie";
                else
                        compat = CONFIG_FSL_PCIE_COMPAT;
@@ -217,7 +219,8 @@ static void ft_pcie_ls_setup(void *blob, struct ls_pcie *pcie)
 #ifdef CONFIG_FSL_PCIE_COMPAT /* Compatible with older version of dts node */
                svr = (get_svr() >> SVR_VAR_PER_SHIFT) & 0xFFFFFE;
                if (svr == SVR_LS2088A || svr == SVR_LS2084A ||
-                   svr == SVR_LS2048A || svr == SVR_LS2044A)
+                   svr == SVR_LS2048A || svr == SVR_LS2044A ||
+                   svr == SVR_LS2081A || svr == SVR_LS2041A)
                        compat = "fsl,ls2088a-pcie";
                else
                        compat = CONFIG_FSL_PCIE_COMPAT;