[U-Boot] [PATCH 1/3 v2] armv8: ls1028a: Add NXP LS1028A SoC support
Prabhakar Kushwaha
prabhakar.kushwaha at nxp.com
Sun Apr 7 09:58:16 UTC 2019
> -----Original Message-----
> From: Yuantian Tang <andy.tang at nxp.com>
> Sent: Wednesday, April 3, 2019 12:48 PM
> To: Prabhakar Kushwaha <prabhakar.kushwaha at nxp.com>
> Cc: albert.u.boot at aribaud.net; Sudhanshu Gupta
> <sudhanshu.gupta at nxp.com>; Harninder Rai <harninder.rai at nxp.com>; Rajesh
> Bhagat <rajesh.bhagat at nxp.com>; Bhaskar Upadhaya
> <bhaskar.upadhaya at nxp.com>; u-boot at lists.denx.de; Andy Tang
> <andy.tang at nxp.com>
> Subject: [PATCH 1/3 v2] armv8: ls1028a: Add NXP LS1028A SoC support
>
> LS1028A processor integrates two 64-bit Arm Cortex-A72 cores with a GPU and
> LCD controller, as well as TSN-enabled Ethernet ports and a TSN-enabled switch
> with four external ports.
> The high performance Cortex-A72 cores, performing above 16,000 CoreMarks,
> combined with 2.5 Gbit Ethernet, PCI express Gen 3.0, SATA 3.0, USB 3.0 and
> Octal/Quad SPI interfaces provide capabilities for a number of industrial and
> embedded applications. The device provides excellent integration with the new
> Time-Sensitive Networking standards and enables a number of TSN applications
>
> Features Summary
> * Two 32/64-bit Arm v8 Cortex-A72 CPUs
> * Cache coherent interconnect fabric (CCI-400)
> * 32-bit DDR3L/DDR4 SDRAM memory controller with ECC support
> * LCD controller and DisplayPort/eDP interface
> * Graphics processing unit
> * TSN-capable Ethernet Switch with four external ports
> * Ethernet Controller (ENETC) with TSN functionality
> * Four SerDes lanes with two PLLs for high-speed peripheral interfaces
> * Additional peripheral interfaces
> * Two high-speed USB 3.0 controllers
> * Two eSDHC controllers
> * Two controller area network (FlexCAN) modules
> * supporting flexible datarate (FD)
> * Three serial peripheral interface (SPI) controllers
> * Flexible SPI interface (FlexSPI) controller
> * Eight I2C controllers
> * Six LPUARTs
> * 16550-compliant DUART
> * General Purpose IO (GPIO)
> * Eight FlexTimers/PWM controllers
> * Six asynchronous audio interface (SAI)
> * Support for hardware virtualization and partitioning enforcement
> * QorIQ platform's trust architecture 3.0
> * Queue direct memory access controller (qDMA)
> * Enhanced direct memory access controller (eDMA)
> * Global programmable interrupt controller (GIC)
> * Arm generic timer
> * Thermal Monitor Unit (TMU)
>
It looks to be marketing description
This patch is not supporting all above features. So update description with whatever supported by this patch.
> Signed-off-by: Sudhanshu Gupta <sudhanshu.gupta at nxp.com>
> Signed-off-by: Rai Harninder <harninder.rai at nxp.com>
> Signed-off-by: Rajesh Bhagat <rajesh.bhagat at nxp.com>
> Signed-off-by: Bhaskar Upadhaya <Bhaskar.Upadhaya at nxp.com>
> Signed-off-by: Tang Yuantian <andy.tang at nxp.com>
> ---
> v2:
> - fix many issues
> arch/arm/cpu/armv8/fsl-layerscape/Kconfig | 39 ++-
> arch/arm/cpu/armv8/fsl-layerscape/Makefile | 4 +
> arch/arm/cpu/armv8/fsl-layerscape/cpu.c | 3 +
> arch/arm/cpu/armv8/fsl-layerscape/doc/README.soc | 51 ++++
> arch/arm/cpu/armv8/fsl-layerscape/ls1028a_serdes.c | 88 +++++++
> arch/arm/dts/fsl-ls1028a.dtsi | 280 +++++++++++++++++++++
> arch/arm/include/asm/arch-fsl-layerscape/config.h | 61 +++++
> .../include/asm/arch-fsl-layerscape/fsl_serdes.h | 16 ++
> .../include/asm/arch-fsl-layerscape/immap_lsch3.h | 9 +
> arch/arm/include/asm/arch-fsl-layerscape/soc.h | 1 +
> .../asm/arch-fsl-layerscape/stream_id_lsch3.h | 2 +-
> 11 files changed, 552 insertions(+), 2 deletions(-) create mode 100644
> arch/arm/cpu/armv8/fsl-layerscape/ls1028a_serdes.c
> create mode 100644 arch/arm/dts/fsl-ls1028a.dtsi
>
> diff --git a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig
> b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig
> index f48481f..8ecd095 100644
> --- a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig
> +++ b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig
> @@ -20,6 +20,40 @@ config ARCH_LS1012A
> select SYS_I2C_MXC_I2C2
> imply PANIC_HANG
>
> +config ARCH_LS1028A
> + bool
> + select ARMV8_SET_SMPEN
> + select FSL_LSCH3
> + select NXP_LSCH3_2
> + select SYS_FSL_HAS_CCI400
> + select SYS_FSL_SRDS_1
> + select SYS_HAS_SERDES
> + select SYS_FSL_DDR
> + select SYS_FSL_DDR_LE
> + select SYS_FSL_DDR_VER_50
> + select SYS_FSL_HAS_DDR3
> + select SYS_FSL_HAS_DDR4
> + select SYS_FSL_HAS_SEC
> + select SYS_FSL_SEC_COMPAT_5
> + select SYS_FSL_SEC_LE
> + select FSL_TZASC_1
> + select ARCH_EARLY_INIT_R
> + select BOARD_EARLY_INIT_F
> + select SYS_I2C_MXC
> + select SYS_I2C_MXC_I2C1
> + select SYS_I2C_MXC_I2C2
> + select SYS_I2C_MXC_I2C3
> + select SYS_I2C_MXC_I2C4
> + select SYS_I2C_MXC_I2C5
> + select SYS_I2C_MXC_I2C6
> + select SYS_I2C_MXC_I2C7
> + select SYS_I2C_MXC_I2C8
> + select SYS_FSL_ERRATUM_A009007
> + select SYS_FSL_ERRATUM_A008514 if !TFABOOT
> + select SYS_FSL_ERRATUM_A009663 if !TFABOOT
> + select SYS_FSL_ERRATUM_A009942 if !TFABOOT
> + imply PANIC_HANG
> +
> config ARCH_LS1043A
> bool
> select ARMV8_SET_SMPEN
> @@ -244,6 +278,7 @@ config FSL_PCIE_COMPAT
> string "PCIe compatible of Kernel DT"
> depends on PCIE_LAYERSCAPE
> default "fsl,ls1012a-pcie" if ARCH_LS1012A
> + default "fsl,ls1028a-pcie" if ARCH_LS1028A
> default "fsl,ls1043a-pcie" if ARCH_LS1043A
> default "fsl,ls1046a-pcie" if ARCH_LS1046A
> default "fsl,ls2080a-pcie" if ARCH_LS2080A @@ -343,6 +378,7 @@
> config SYS_FSL_ERRATUM_A010539
>
> config MAX_CPUS
> int "Maximum number of CPUs permitted for Layerscape"
> + default 2 if ARCH_LS1028A
> default 4 if ARCH_LS1043A
> default 4 if ARCH_LS1046A
> default 16 if ARCH_LS2080A
> @@ -377,7 +413,7 @@ config QSPI_AHB_INIT config SYS_CCI400_OFFSET
> hex "Offset for CCI400 base"
> depends on SYS_FSL_HAS_CCI400
> - default 0x3090000 if ARCH_LS1088A
> + default 0x3090000 if ARCH_LS1088A || ARCH_LS1028A
> default 0x180000 if FSL_LSCH2
> help
> Offset for CCI400 base
> @@ -446,6 +482,7 @@ config CLUSTER_CLK_FREQ
>
> config SYS_FSL_PCLK_DIV
> int "Platform clock divider"
> + default 1 if ARCH_LS1028A
> default 1 if ARCH_LS1043A
> default 1 if ARCH_LS1046A
> default 1 if ARCH_LS1088A
> diff --git a/arch/arm/cpu/armv8/fsl-layerscape/Makefile
> b/arch/arm/cpu/armv8/fsl-layerscape/Makefile
> index e9bc987..a8d3cf9 100644
> --- a/arch/arm/cpu/armv8/fsl-layerscape/Makefile
> +++ b/arch/arm/cpu/armv8/fsl-layerscape/Makefile
> @@ -48,3 +48,7 @@ endif
> ifneq ($(CONFIG_ARCH_LS1088A),)
> obj-$(CONFIG_SYS_HAS_SERDES) += ls1088a_serdes.o endif
> +
> +ifneq ($(CONFIG_ARCH_LS1028A),)
> +obj-$(CONFIG_SYS_HAS_SERDES) += ls1028a_serdes.o endif
> diff --git a/arch/arm/cpu/armv8/fsl-layerscape/cpu.c
> b/arch/arm/cpu/armv8/fsl-layerscape/cpu.c
> index 978d46b..657d13c 100644
> --- a/arch/arm/cpu/armv8/fsl-layerscape/cpu.c
> +++ b/arch/arm/cpu/armv8/fsl-layerscape/cpu.c
> @@ -58,6 +58,7 @@ static struct cpu_type cpu_type_list[] = {
> CPU_TYPE_ENTRY(LS1026A, LS1026A, 2),
> CPU_TYPE_ENTRY(LS2040A, LS2040A, 4),
> CPU_TYPE_ENTRY(LS1012A, LS1012A, 1),
> + CPU_TYPE_ENTRY(LS1028A, LS1028A, 2),
> CPU_TYPE_ENTRY(LS1088A, LS1088A, 8),
> CPU_TYPE_ENTRY(LS1084A, LS1084A, 8),
> CPU_TYPE_ENTRY(LS1048A, LS1048A, 4),
> @@ -246,11 +247,13 @@ static struct mm_region final_map[] = {
> PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
> PTE_BLOCK_NON_SHARE | PTE_BLOCK_PXN | PTE_BLOCK_UXN
> },
> +#ifndef CONFIG_ARCH_LS1028A
Please avoid using SoC specific #ifndef. Use #ifdef CONFIG_SYS_PCIE3_PHYS_ADDR
And change code accordingly.
> { CONFIG_SYS_PCIE3_PHYS_ADDR, CONFIG_SYS_PCIE3_PHYS_ADDR,
> CONFIG_SYS_PCIE3_PHYS_SIZE,
> PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
> PTE_BLOCK_NON_SHARE | PTE_BLOCK_PXN | PTE_BLOCK_UXN
> },
> +#endif
> #if defined(CONFIG_ARCH_LS2080A) || defined(CONFIG_ARCH_LX2160A)
> { CONFIG_SYS_PCIE4_PHYS_ADDR, CONFIG_SYS_PCIE4_PHYS_ADDR,
> CONFIG_SYS_PCIE4_PHYS_SIZE,
> diff --git a/arch/arm/cpu/armv8/fsl-layerscape/doc/README.soc
> b/arch/arm/cpu/armv8/fsl-layerscape/doc/README.soc
> index a0e2621..ad55573 100644
> --- a/arch/arm/cpu/armv8/fsl-layerscape/doc/README.soc
> +++ b/arch/arm/cpu/armv8/fsl-layerscape/doc/README.soc
> @@ -8,6 +8,7 @@ SoC overview
> 6. LS2088A
> 7. LS2081A
> 8. LX2160A
> + 9. LS1028A
>
> LS1043A
> ---------
> @@ -328,3 +329,53 @@ LX2160A SoC has 2 more similar SoC personalities
>
> 2)LX2080A, few difference w.r.t. LX2160A:
> a) Eight 64-bit ARM v8 Cortex-A72 CPUs
> +
> +
> +LS1028A
> +--------
> +The QorIQ LS1028A processor integrates two 64-bit Arm Cortex-A72 cores
> +with a GPU and LCD controller, as well as two TSN-enabled Ethernet
> +controllers and a TSNenabled 4-port switch.
> +
> +The high performance Cortex-A72 cores, performing above 16,000
> +CoreMarks, combined with 2.5 Gbit Ethernet, PCI express Gen 3.0, SATA
> +3.0, USB 3.0 and Octal/Quad SPI interfaces provide capabilities for a
> +number of industrial and embedded applications. The device provides
> +excellent integration with the new Time-Sensitive Networking standard,
> +and enables a number of TSN applications.
> +
> +The LS1028A SoC includes the following function and features:
> + - Two 64-bit ARM v8 A72 CPUs
> + - Cache Coherent interconnect (CCI-400)
> + - One 32-bit DDR3L/DDR4 SDRAM memory controller with ECC
> + - eDP/Displayport interface
> + - Graphics processing unit
> + - One Configurable x4 SerDes
> + - Ethernet interfaces
> + - Non-switched: One Ethernet MAC supporting 2.5G, 1G, 100M, 10M, one
> + ethernet MAC supporting 1G, 100M, 10M.
> + - Switched: TSN IP to support four 2.5/1G interfaces.
> + - None of the MACs support MACSEC
> + - Support for RGMII, SGMII (and 1000Base-KX), SGMII 2.5x, QSGMII
> + - Support for 10G-SXGMII and 10G-QXGMII.
> + - Energy efficient Ethernet support (802.3az)
> + - IEEE 1588 support
> + - High-speed peripheral interfaces
> + - Two PCIe 3.0 controllers, one supporting x4 operation
> + - One serial ATA (SATA 3.0) controller
> + - Additional peripheral interfaces
> + - Two high-speed USB 2.0/3.0 controllers with integrated PHY each
> + supporting host or device modes
> + - Two Enhanced secure digital host controllers (SD/SDIO/eMMC)
> + - Two Serial peripheral interface (SPI) controllers
> + - Eight I2C controllers
> + - Two UART controllers
> + - Additional six Industrual UARTs (LPUART).
> + - One FlexSPI controller
> + - General Purpose IO (GPIO)
> + - Two CAN-FD interfaces
> + - Eight Flextimers with PWM I/O
> + - Support for hardware virtualization and partitioning enforcement
> + - Layerscape Trust Architecture
> + - Service Processor (SP) provides pre-boot initialization and secure-boot
> + capabilities
> diff --git a/arch/arm/cpu/armv8/fsl-layerscape/ls1028a_serdes.c
> b/arch/arm/cpu/armv8/fsl-layerscape/ls1028a_serdes.c
> new file mode 100644
> index 0000000..f5f264c
> --- /dev/null
> +++ b/arch/arm/cpu/armv8/fsl-layerscape/ls1028a_serdes.c
> @@ -0,0 +1,88 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * Copyright 2019 NXP
> + */
> +
> +#include <common.h>
> +#include <asm/arch/fsl_serdes.h>
> +
> +struct serdes_config {
> + u32 protocol;
> + u8 lanes[SRDS_MAX_LANES];
> + u8 rcw_lanes[SRDS_MAX_LANES];
> +};
> +
> +static struct serdes_config serdes1_cfg_tbl[] = {
> + /* SerDes 1 */
> + {0xE031, {SXGMII1, QXGMII2, NONE, SATA1} },
> + {0xB991, {SXGMII1, SGMII1, SGMII2, PCIE1} },
> + {0xBB31, {SXGMII1, QXGMII2, PCIE1, PCIE1} },
> + {0xCC31, {SXGMII1, QXGMII2, PCIE2, PCIE2} },
> + {0xBB51, {SXGMII1, QSGMII_B, PCIE2, PCIE1} },
> + {0xCC51, {SXGMII1, QSGMII_B, PCIE2, PCIE2} },
> + {0xCC3B, {PCIE1, QXGMII2, PCIE2, PCIE2} },
> + {0xCC5B, {PCIE1, QSGMII_B, PCIE2, PCIE2} },
> + {0xBB38, {SGMII_T1, QXGMII2, PCIE2, PCIE1} },
> + {0xCC38, {SGMII_T1, QXGMII2, PCIE2, PCIE2} },
> + {0xBB58, {SGMII_T1, QSGMII_B, PCIE2, PCIE1} },
> + {0xEB99, {SGMII1, SGMII1, PCIE2, SATA1} },
> + {0xCC99, {SGMII1, SGMII1, PCIE2, PCIE2} },
> + {0xBB99, {SGMII1, SGMII1, PCIE2, PCIE1} },
> + {0xCC58, {SGMII_T1, QSGMII_B, PCIE2, PCIE2} },
> + {0xCC8B, {PCIE1, SGMII_T1, PCIE2, PCIE2} },
> + {0x9999, {SGMII1, SGMII2, SGMII3, SGMII4} },
> + {0xEB58, {SGMII_T1, QSGMII_B, PCIE2, SATA1} },
> + {0xEB8B, {PCIE1, SGMII_T1, PCIE2, SATA1} },
> + {0xE8CC, {PCIE1, PCIE1, SGMII_T1, SATA1} },
> + {0xEBCC, {PCIE1, PCIE1, PCIE2, SATA1} },
> + {0xCCCC, {PCIE1, PCIE1, PCIE2, PCIE2} },
> + {0xDDDD, {PCIE1, PCIE1, PCIE1, PCIE1} },
> + {}
> +};
> +
> +static struct serdes_config *serdes_cfg_tbl[] = {
> + serdes1_cfg_tbl,
> +};
> +
> +enum srds_prtcl serdes_get_prtcl(int serdes, int cfg, int lane) {
> + struct serdes_config *ptr;
> +
> + if (serdes >= ARRAY_SIZE(serdes_cfg_tbl))
> + return 0;
> +
> + ptr = serdes_cfg_tbl[serdes];
> + while (ptr->protocol) {
> + if (ptr->protocol == cfg)
> + return ptr->lanes[lane];
> + ptr++;
> + }
> +
> + return 0;
> +}
> +
> +int is_serdes_prtcl_valid(int serdes, u32 prtcl) {
> + int i;
> + struct serdes_config *ptr;
> +
> + if (serdes >= ARRAY_SIZE(serdes_cfg_tbl))
> + return 0;
> +
> + ptr = serdes_cfg_tbl[serdes];
> + while (ptr->protocol) {
> + if (ptr->protocol == prtcl)
> + break;
> + ptr++;
> + }
> +
> + if (!ptr->protocol)
> + return 0;
> +
> + for (i = 0; i < SRDS_MAX_LANES; i++) {
> + if (ptr->lanes[i] != NONE)
> + return 1;
> + }
> +
> + return 0;
> +}
> diff --git a/arch/arm/dts/fsl-ls1028a.dtsi b/arch/arm/dts/fsl-ls1028a.dtsi new
> file mode 100644 index 0000000..a38c8ce
> --- /dev/null
> +++ b/arch/arm/dts/fsl-ls1028a.dtsi
> @@ -0,0 +1,280 @@
> +// SPDX-License-Identifier: GPL-2.0+ OR X11
> +/*
> + * NXP ls1028a SOC common device tree source
> + *
> + * Copyright 2019 NXP
> + *
> + */
> +
> +/ {
> + compatible = "fsl,ls1028a";
> + interrupt-parent = <&gic>;
> + #address-cells = <2>;
> + #size-cells = <2>;
> +
> + sysclk: sysclk {
> + compatible = "fixed-clock";
> + #clock-cells = <0>;
> + clock-frequency = <100000000>;
> + clock-output-names = "sysclk";
> + };
> +
> + clockgen: clocking at 1300000 {
> + compatible = "fsl,ls1028a-clockgen";
> + reg = <0x0 0x1300000 0x0 0xa0000>;
> + #clock-cells = <2>;
> + clocks = <&sysclk>;
> + };
> +
> + memory at 01080000 {
> + device_type = "memory";
> + reg = <0x00000000 0x01080000 0 0x80000000>;
> + /* DRAM space - 1, size : 2 GB DRAM */
> + };
> +
> + gic: interrupt-controller at 6000000 {
> + compatible = "arm,gic-v3";
> + reg = <0x0 0x06000000 0 0x10000>, /* GIC Dist */
> + <0x0 0x06040000 0 0x40000>;
> + #interrupt-cells = <3>;
> + interrupt-controller;
> + interrupts = <1 9 0x4>;
> + };
> +
> + timer {
> + compatible = "arm,armv8-timer";
> + interrupts = <1 13 0x8>, /* Physical Secure PPI, active-low */
> + <1 14 0x8>, /* Physical Non-Secure PPI, active-low
> */
> + <1 11 0x8>, /* Virtual PPI, active-low */
> + <1 10 0x8>; /* Hypervisor PPI, active-low */
> + };
> +
> + fspi: flexspi at 20C0000 {
> + compatible = "nxp,dn-fspi";
> + #address-cells = <1>;
> + #size-cells = <0>;
> + reg = <0x0 0x20C0000 0x0 0x10000>,
> + <0x0 0x20000000 0x0 0x10000000>; /*64MB flash*/
> + reg-names = "FSPI", "FSPI-memory";
> + num-cs = <1>;
> + status = "disabled";
> + };
> +
> + serial0: serial at 21c0500 {
> + device_type = "serial";
> + compatible = "fsl,ns16550", "ns16550a";
> + reg = <0x0 0x21c0500 0x0 0x100>;
> + interrupts = <0 32 0x1>; /* edge triggered */
> + status = "disabled";
> + };
> +
> + serial1: serial at 21c0600 {
> + device_type = "serial";
> + compatible = "fsl,ns16550", "ns16550a";
> + reg = <0x0 0x21c0600 0x0 0x100>;
> + interrupts = <0 32 0x1>; /* edge triggered */
> + status = "disabled";
> + };
> +
> + pcie at 3400000 { /* rcie_enetc */
This patch does not have support of enetc. So avoid references of entc
> + compatible = "fsl,ls-pcie", "fsl,ls1028-pcie", "snps,dw-pcie";
> + reg = <0x00 0x03400000 0x0 0x80000
> + 0x00 0x03480000 0x0 0x40000 /* lut registers */
> + 0x00 0x034c0000 0x0 0x40000 /* pf controls registers */
> + 0x80 0x00000000 0x0 0x20000>; /* configuration space */
> + reg-names = "dbi", "lut", "ctrl", "config";
> + #address-cells = <3>;
> + #size-cells = <2>;
> + device_type = "pci";
> + num-lanes = <4>;
> + bus-range = <0x0 0xff>;
> + ranges = <0x81000000 0x0 0x00000000 0x80 0x00020000 0x0
> 0x00010000 /* downstream I/O */
> + 0x82000000 0x0 0x40000000 0x80 0x40000000 0x0
> 0x40000000>; /* non-prefetchable memory */
> + };
> +
> + pcie at 3500000 {
> + compatible = "fsl,ls-pcie", "fsl,ls1028-pcie", "snps,dw-pcie";
> + reg = <0x00 0x03500000 0x0 0x80000
> + 0x00 0x03580000 0x0 0x40000 /* lut registers */
> + 0x00 0x035c0000 0x0 0x40000 /* pf controls registers */
> + 0x88 0x00000000 0x0 0x20000>; /* configuration space */
> + reg-names = "dbi", "lut", "ctrl", "config";
> + #address-cells = <3>;
> + #size-cells = <2>;
> + device_type = "pci";
> + num-lanes = <4>;
> + bus-range = <0x0 0xff>;
> + ranges = <0x81000000 0x0 0x00000000 0x88 0x00020000 0x0
> 0x00010000 /* downstream I/O */
> + 0x82000000 0x0 0x40000000 0x88 0x40000000 0x0
> 0x40000000>; /* non-prefetchable memory */
> + };
> +
> + i2c0: i2c at 2000000 {
> + compatible = "fsl,vf610-i2c";
> + #address-cells = <1>;
> + #size-cells = <0>;
> + reg = <0x0 0x2000000 0x0 0x10000>;
> + interrupts = <0 34 0x4>;
> + clock-names = "i2c";
> + clocks = <&clockgen 4 0>;
> + status = "disabled";
> + };
> +
> + i2c1: i2c at 2010000 {
> + compatible = "fsl,vf610-i2c";
> + #address-cells = <1>;
> + #size-cells = <0>;
> + reg = <0x0 0x2010000 0x0 0x10000>;
> + interrupts = <0 34 0x4>;
> + clock-names = "i2c";
> + clocks = <&clockgen 4 0>;
> + status = "disabled";
> + };
> +
> + i2c2: i2c at 2020000 {
> + compatible = "fsl,vf610-i2c";
> + #address-cells = <1>;
> + #size-cells = <0>;
> + reg = <0x0 0x2020000 0x0 0x10000>;
> + interrupts = <0 35 0x4>;
> + clock-names = "i2c";
> + clocks = <&clockgen 4 0>;
> + status = "disabled";
> + };
> +
> + i2c3: i2c at 2030000 {
> + compatible = "fsl,vf610-i2c";
> + #address-cells = <1>;
> + #size-cells = <0>;
> + reg = <0x0 0x2030000 0x0 0x10000>;
> + interrupts = <0 35 0x4>;
> + clock-names = "i2c";
> + clocks = <&clockgen 4 0>;
> + status = "disabled";
> + };
> +
> + i2c4: i2c at 2040000 {
> + compatible = "fsl,vf610-i2c";
> + #address-cells = <1>;
> + #size-cells = <0>;
> + reg = <0x0 0x2040000 0x0 0x10000>;
> + interrupts = <0 74 0x4>;
> + clock-names = "i2c";
> + clocks = <&clockgen 4 0>;
> + status = "disabled";
> + };
> +
> + i2c5: i2c at 2050000 {
> + compatible = "fsl,vf610-i2c";
> + #address-cells = <1>;
> + #size-cells = <0>;
> + reg = <0x0 0x2050000 0x0 0x10000>;
> + interrupts = <0 74 0x4>;
> + clock-names = "i2c";
> + clocks = <&clockgen 4 0>;
> + status = "disabled";
> + };
> +
> + i2c6: i2c at 2060000 {
> + compatible = "fsl,vf610-i2c";
> + #address-cells = <1>;
> + #size-cells = <0>;
> + reg = <0x0 0x2060000 0x0 0x10000>;
> + interrupts = <0 75 0x4>;
> + clock-names = "i2c";
> + clocks = <&clockgen 4 0>;
> + status = "disabled";
> + };
> +
> + i2c7: i2c at 2070000 {
> + compatible = "fsl,vf610-i2c";
> + #address-cells = <1>;
> + #size-cells = <0>;
> + reg = <0x0 0x2070000 0x0 0x10000>;
> + interrupts = <0 75 0x4>;
> + clock-names = "i2c";
> + clocks = <&clockgen 4 0>;
> + status = "disabled";
> + };
> +
> + usb1: usb3 at 3100000 {
> + compatible = "fsl,layerscape-dwc3";
> + reg = <0x0 0x3100000 0x0 0x10000>;
> + interrupts = <0 80 0x4>;
> + dr_mode = "host";
> + status = "disabled";
> + };
> +
> + usb2: usb3 at 3110000 {
> + compatible = "fsl,layerscape-dwc3";
> + reg = <0x0 0x3110000 0x0 0x10000>;
> + interrupts = <0 81 0x4>;
> + dr_mode = "host";
> + status = "disabled";
> + };
> +
> + dspi0: dspi at 2100000 {
> + compatible = "fsl,vf610-dspi";
> + #address-cells = <1>;
> + #size-cells = <0>;
> + reg = <0x0 0x2100000 0x0 0x10000>;
> + interrupts = <0 26 0x4>;
> + clock-names = "dspi";
> + clocks = <&clockgen 4 0>;
> + num-cs = <5>;
> + litte-endian;
> + status = "disabled";
> + };
> +
> + dspi1: dspi at 2110000 {
> + compatible = "fsl,vf610-dspi";
> + #address-cells = <1>;
> + #size-cells = <0>;
> + reg = <0x0 0x2110000 0x0 0x10000>;
> + interrupts = <0 26 0x4>;
> + clock-names = "dspi";
> + clocks = <&clockgen 4 0>;
> + num-cs = <5>;
> + little-endian;
> + status = "disabled";
> + };
> +
> + dspi2: dspi at 2120000 {
> + compatible = "fsl,vf610-dspi";
> + #address-cells = <1>;
> + #size-cells = <0>;
> + reg = <0x0 0x2120000 0x0 0x10000>;
> + interrupts = <0 26 0x4>;
> + clock-names = "dspi";
> + clocks = <&clockgen 4 0>;
> + num-cs = <5>;
> + little-endian;
> + status = "disabled";
> + };
> +
> + esdhc0: esdhc at 2140000 {
> + compatible = "fsl,esdhc";
> + reg = <0x0 0x2140000 0x0 0x10000>;
> + interrupts = <0 28 0x4>;
> + big-endian;
> + bus-width = <4>;
> + status = "disabled";
> + };
> +
> + esdhc1: esdhc at 2150000 {
> + compatible = "fsl,esdhc";
> + reg = <0x0 0x2150000 0x0 0x10000>;
> + interrupts = <0 63 0x4>;
> + big-endian;
> + non-removable;
> + bus-width = <4>;
> + status = "disabled";
> + };
> +
> + sata: sata at 3200000 {
> + compatible = "fsl,ls1028a-ahci";
> + reg = <0x0 0x3200000 0x0 0x10000>;
> + interrupts = <0 133 4>;
> + clocks = <&clockgen 4 1>;
> + status = "disabled";
> + };
> +};
> diff --git a/arch/arm/include/asm/arch-fsl-layerscape/config.h
> b/arch/arm/include/asm/arch-fsl-layerscape/config.h
> index 903d509..eb21c09 100644
> --- a/arch/arm/include/asm/arch-fsl-layerscape/config.h
> +++ b/arch/arm/include/asm/arch-fsl-layerscape/config.h
> @@ -229,6 +229,67 @@
>
> #define CONFIG_SYS_FSL_MAX_NUM_OF_SEC 1
>
> +#elif defined(CONFIG_ARCH_LS1028A)
> +#define CONFIG_SYS_FSL_NUM_CC_PLLS 3
> +#define CONFIG_SYS_FSL_CLUSTER_CLOCKS { 1, 1 }
> +#define CONFIG_GICV3
> +#define CONFIG_FSL_TZPC_BP147
> +#define CONFIG_FSL_TZASC_400
> +
> +/* TZ Protection Controller Definitions */
> +#define TZPC_BASE 0x02200000
> +#define TZPCR0SIZE_BASE (TZPC_BASE)
> +#define TZPCDECPROT_0_STAT_BASE (TZPC_BASE + 0x800)
> +#define TZPCDECPROT_0_SET_BASE (TZPC_BASE + 0x804)
> +#define TZPCDECPROT_0_CLR_BASE (TZPC_BASE + 0x808)
> +#define TZPCDECPROT_1_STAT_BASE (TZPC_BASE + 0x80C)
> +#define TZPCDECPROT_1_SET_BASE (TZPC_BASE + 0x810)
> +#define TZPCDECPROT_1_CLR_BASE (TZPC_BASE + 0x814)
> +#define TZPCDECPROT_2_STAT_BASE (TZPC_BASE + 0x818)
> +#define TZPCDECPROT_2_SET_BASE (TZPC_BASE + 0x81C)
> +#define TZPCDECPROT_2_CLR_BASE (TZPC_BASE + 0x820)
> +
> +#define SRDS_MAX_LANES 4
> +
> +#define CONFIG_SYS_FSL_OCRAM_BASE 0x18000000 /* initial
> RAM */
> +#define SYS_FSL_OCRAM_SPACE_SIZE 0x00200000 /* 2M */
> +#define CONFIG_SYS_FSL_OCRAM_SIZE 0x00040000 /* Real size 256K
> */
> +
> +/* Generic Interrupt Controller Definitions */
> +#define GICD_BASE 0x06000000
> +#define GICR_BASE 0x06040000
> +
> +/* SMMU Definitions */
> +#define SMMU_BASE 0x05000000 /* GR0 Base */
> +
> +/* DDR */
> +#define CONFIG_SYS_DDR_BLOCK1_SIZE ((phys_size_t)2 << 30)
> +#define CONFIG_MAX_MEM_MAPPED
> CONFIG_SYS_DDR_BLOCK1_SIZE
> +
> +#define CONFIG_SYS_FSL_CCSR_GUR_LE
> +#define CONFIG_SYS_FSL_CCSR_SCFG_LE
> +#define CONFIG_SYS_FSL_ESDHC_LE
> +#define CONFIG_SYS_FSL_PEX_LUT_LE
> +
> +#define CONFIG_SYS_MEMAC_LITTLE_ENDIAN
> +
> +/* SFP */
> +#define CONFIG_SYS_FSL_SFP_VER_3_4
> +#define CONFIG_SYS_FSL_SFP_LE
> +#define CONFIG_SYS_FSL_SRK_LE
> +
> +/* SEC */
> +#define CONFIG_SYS_FSL_MAX_NUM_OF_SEC 1
> +
> +/* Security Monitor */
> +#define CONFIG_SYS_FSL_SEC_MON_LE
> +
> +/* Secure Boot */
> +#define CONFIG_ESBC_HDR_LS
> +
> +/* DCFG - GUR */
> +#define CONFIG_SYS_FSL_CCSR_GUR_LE
> +
> #elif defined(CONFIG_FSL_LSCH2)
> #define CONFIG_SYS_FSL_OCRAM_BASE 0x10000000 /* initial
> RAM */
> #define SYS_FSL_OCRAM_SPACE_SIZE 0x00200000 /* 2M space */
> diff --git a/arch/arm/include/asm/arch-fsl-layerscape/fsl_serdes.h
> b/arch/arm/include/asm/arch-fsl-layerscape/fsl_serdes.h
> index 68354ff..59b224b 100644
> --- a/arch/arm/include/asm/arch-fsl-layerscape/fsl_serdes.h
> +++ b/arch/arm/include/asm/arch-fsl-layerscape/fsl_serdes.h
> @@ -64,6 +64,22 @@ enum srds_prtcl {
> QSGMII_B,
> QSGMII_C,
> QSGMII_D,
> + SGMII_T1,
> + SGMII_T2,
> + SGMII_T3,
> + SGMII_T4,
> + SGMII_S1,
> + SGMII_S2,
> + SGMII_S3,
> + SGMII_S4,
Can existing SGMII enum not be used?
> + SXGMII1,
> + SXGMII2,
> + SXGMII3,
> + SXGMII4,
> + QXGMII1,
> + QXGMII2,
> + QXGMII3,
> + QXGMII4,
> _25GE1,
> _25GE2,
> _25GE3,
> diff --git a/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h
> b/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h
> index 9fab88a..dbf3215 100644
> --- a/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h
> +++ b/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h
> @@ -171,6 +171,9 @@
> #define CONFIG_SYS_PCIE1_PHYS_ADDR 0x2000000000ULL
> #define CONFIG_SYS_PCIE2_PHYS_ADDR 0x2800000000ULL
> #define CONFIG_SYS_PCIE3_PHYS_ADDR 0x3000000000ULL
> +#elif CONFIG_ARCH_LS1028A
> +#define CONFIG_SYS_PCIE1_PHYS_ADDR 0x8000000000ULL
> +#define CONFIG_SYS_PCIE2_PHYS_ADDR 0x8800000000ULL
> #else
> #define CONFIG_SYS_PCIE1_PHYS_ADDR 0x1000000000ULL
> #define CONFIG_SYS_PCIE2_PHYS_ADDR 0x1200000000ULL
> @@ -375,6 +378,12 @@ struct ccsr_gur {
> #define FSL_CHASSIS3_SRDS2_PRTCL_SHIFT
> FSL_CHASSIS3_RCWSR30_SRDS2_PRTCL_SHIFT
> #define FSL_CHASSIS3_SRDS1_REGSR 29
> #define FSL_CHASSIS3_SRDS2_REGSR 30
> +#elif defined(CONFIG_ARCH_LS1028A)
> +#define FSL_CHASSIS3_RCWSR29_SRDS1_PRTCL_MASK 0xFFFF0000
> +#define FSL_CHASSIS3_RCWSR29_SRDS1_PRTCL_SHIFT 16
> +#define FSL_CHASSIS3_SRDS1_PRTCL_MASK
> FSL_CHASSIS3_RCWSR29_SRDS1_PRTCL_MASK
> +#define FSL_CHASSIS3_SRDS1_PRTCL_SHIFT
> FSL_CHASSIS3_RCWSR29_SRDS1_PRTCL_SHIFT
> +#define FSL_CHASSIS3_SRDS1_REGSR 29
> #endif
> #define RCW_SB_EN_REG_INDEX 9
> #define RCW_SB_EN_MASK 0x00000400
> diff --git a/arch/arm/include/asm/arch-fsl-layerscape/soc.h
> b/arch/arm/include/asm/arch-fsl-layerscape/soc.h
> index 7d95c4e..234440b 100644
> --- a/arch/arm/include/asm/arch-fsl-layerscape/soc.h
> +++ b/arch/arm/include/asm/arch-fsl-layerscape/soc.h
> @@ -83,6 +83,7 @@ enum boot_src get_boot_src(void);
> /* LS1043A/LS1023A 23x23 package silicon has different value of VAR_PER */
> #define SVR_LS1043A_P23 0x879202
> #define SVR_LS1023A_P23 0x87920A
> +#define SVR_LS1028A 0x870B00
> #define SVR_LS1046A 0x870700
> #define SVR_LS1026A 0x870708
> #define SVR_LS1048A 0x870320
> diff --git a/arch/arm/include/asm/arch-fsl-layerscape/stream_id_lsch3.h
> b/arch/arm/include/asm/arch-fsl-layerscape/stream_id_lsch3.h
> index e017d8b..c53cc57 100644
> --- a/arch/arm/include/asm/arch-fsl-layerscape/stream_id_lsch3.h
> +++ b/arch/arm/include/asm/arch-fsl-layerscape/stream_id_lsch3.h
> @@ -87,7 +87,7 @@
> #define FSL_PEX_STREAM_ID_NUM (0x100)
> #endif
>
> -#if defined(CONFIG_ARCH_LS2080A)
> +#if defined(CONFIG_ARCH_LS2080A) || defined(CONFIG_ARCH_LS1028A)
> #define FSL_PEX_STREAM_ID_END 22
> #elif defined(CONFIG_ARCH_LS1088A)
> #define FSL_PEX_STREAM_ID_END 18
> --
> 2.7.4
--pk
More information about the U-Boot
mailing list