All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH 1/3] armv8: ls1028a: Add NXP LS1028A SoC support
@ 2019-03-18  9:45 Bhaskar Upadhaya
  2019-03-18  9:45 ` [U-Boot] [PATCH 2/3] armv8: ls1028ardb: Add support for LS1028ARDB platform Bhaskar Upadhaya
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Bhaskar Upadhaya @ 2019-03-18  9:45 UTC (permalink / raw)
  To: u-boot

Overview
========
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

Frequency support:
        Core: 1300 MHz, DDR: 1600 MT/s, Platform: 400 MHz [default]
        Core: 800 MHz, DDR: 1300 MT/s, Platform: 400 MHz

SerDes protocol support:
        SerDes1: 0x85bb [default]
        SerDes2: 0x85be

Features Summary
================
Two 32/64-bit Arm® v8 Cortex®-A72 CPUs
        Arranged as a single cluster of two cores sharing a single 1 MB L2
        cache Up to 1.3 GHz operation
        Single-threaded cores with 32KB L1 data cache and 48KB L1 instruction
        cache, Support for cluster power-gating

Cache coherent interconnect fabric (CCI-400)
        Hardware managed data coherency
        Up to 400 MHz operation
32-bit DDR3L/DDR4 SDRAM memory controller with ECC support
        Up to 1.6 GT/s
        Supports 32-bit and 16-bit operation
        Accumulated mode ECC for 32-bit, 16-bit use
        Supports DDR4 Pseudo-Open Drain mode
        Support for x8 and x16 devices

LCD controller and DisplayPort/eDP interface
        Supports DisplayPort 1.3 and eDP 1.4
        Supports link transfer rate up to HBR2 (5.4 Gbit/s) and display
        resolution up to 4Kp60

Graphics processing unit
        Supports Geometry rate 100 Mtri/s and Pixel rate 650 Mpixel/s
        Supports OpenGL ES 3.0, 2.0, 1.1
        Supports OpenCL 1.2, 1.1

TSN-capable Ethernet Switch with four external ports

Ethernet Controller (ENETC) with TSN functionality
        One RGMII interface
        One 1G/2.5G SerDes-based interface with TSN support

Four SerDes lanes with two PLLs for high-speed peripheral interfaces
        Two PCI Express 3.0 controllers
        Serial ATA (SATA 6 Gbit/s) controller
        Up to four SGMII interfaces supporting 1000 Mbps
        Up to one QSGMII interface
        Supports 1000Base-KX
        Up to one 10G-SXGMII
        Up to one 10G-QXGMII

Additional peripheral interfaces
        Two high-speed USB 3.0 controllers with integrated PHY each supporting
        host or device modes
        Two enhanced secure digital host controllers (eSDHC) supporting SD 3.0,
         eMMC 4.4, eMMC 4.5, and eMMC 5.1
        Two controller area network (FlexCAN) modules, each optionally
        supporting flexible datarate (FD)
        Three serial peripheral interface (SPI) controllers
        Flexible SPI interface (FlexSPI) controller with two 8-bit interfaces
        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
        Service processor (SP) provides pre-boot initialization and secure-boot
        capabilities.256 KB On chip RAM for trusted accesses
        One WatchDog timer per A72 core and one TrustZone WatchDog timer

Queue direct memory access controller (qDMA)

Enhanced direct memory access controller (eDMA)

Global programmable interrupt controller (GIC)

Arm generic timer

Thermal Monitor Unit (TMU)

Multimedia and audio support:
        Resolution supported: 480p,720p,1080p, and 4K
        Support audio on serial interfaces with frame synchronization

Time Sensitive Network (TSN) support:
        TSN configuration tool (tsntool)
        ENETC 1588 two steps timestamping support
        ENETC TSN driver: Qbv, Qbu, Qci, Qav
        SWITCH TSN driver: Qbv, Qci, Qbu, Qav, 802.1CB support

Signed-off-by: Sudhanshu Gupta <sudhanshu.gupta@nxp.com>
Signed-off-by: Rai Harninder <harninder.rai@nxp.com>
Signed-off-by: Rajesh Bhagat <rajesh.bhagat@nxp.com>
Signed-off-by: Bhaskar Upadhaya <Bhaskar.Upadhaya@nxp.com>
---
 arch/arm/cpu/armv8/fsl-layerscape/Kconfig          |  39 ++-
 arch/arm/cpu/armv8/fsl-layerscape/Makefile         |   4 +
 arch/arm/cpu/armv8/fsl-layerscape/cpu.c            |   1 +
 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                      | 281 +++++++++++++++++++++
 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  |  11 +
 arch/arm/include/asm/arch-fsl-layerscape/soc.h     |   1 +
 .../asm/arch-fsl-layerscape/stream_id_lsch3.h      |   2 +-
 board/freescale/common/qixis.c                     |  38 +++
 board/freescale/common/qixis.h                     |   2 +
 13 files changed, 593 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..51e077c 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),
diff --git a/arch/arm/cpu/armv8/fsl-layerscape/doc/README.soc b/arch/arm/cpu/armv8/fsl-layerscape/doc/README.soc
index a0e2621..d82a96c 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..08deb22
--- /dev/null
+++ b/arch/arm/dts/fsl-ls1028a.dtsi
@@ -0,0 +1,281 @@
+// 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*/
+			/* <0x0 0x20000000 0x0 0x4000000>;*/ /*How to incoperate 512M here*/
+		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>;
+		clock-frequency = <0>;	/* Updated by bootloader */
+		interrupts = <0 32 0x1>; /* edge triggered */
+	};
+
+	serial1: serial at 21c0600 {
+		device_type = "serial";
+		compatible = "fsl,ns16550", "ns16550a";
+		reg = <0x0 0x21c0600 0x0 0x100>;
+		clock-frequency = <0>;	/* Updated by bootloader */
+		interrupts = <0 32 0x1>; /* edge triggered */
+	};
+
+	pcie at 3400000 {                  /* rcie_enetc   */
+	       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 */
+	};
+
+	enetc_pcie: pcie at 1f0000000 { /* rcie_enetc */
+		compatible = "fsl,ls-enetc-rcie";
+		reg= <0x01 0xf0000000 0x0 0x100000>;
+		#address-cells = <3>;
+		#size-cells = <2>;
+		device_type = "pci";
+		bus-range = <0x0 0x0>;
+		/* PF0-6 BAR0 - non-prefetchable memory */
+		ranges= <0x82000000 0x0 0x00000000 0x1 0xf8000000 0x0 0x160000>;
+	};
+
+	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>;
+	};
+
+	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>;
+	};
+
+	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>;
+	};
+
+	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>;
+	};
+
+	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>;
+	};
+
+	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>;
+	};
+
+	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>;
+	};
+
+	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>;
+	};
+
+	usb1: usb3 at 3100000 {
+		compatible = "fsl,layerscape-dwc3";
+		reg = <0x0 0x3100000 0x0 0x10000>;
+		interrupts = <0 80 0x4>;
+		dr_mode = "host";
+	};
+
+	usb2: usb3 at 3110000 {
+		compatible = "fsl,layerscape-dwc3";
+		reg = <0x0 0x3110000 0x0 0x10000>;
+		interrupts = <0 81 0x4>;
+		dr_mode = "host";
+	};
+
+	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>;
+	};
+
+	esdhc1: esdhc at 2150000 {
+		compatible = "fsl,esdhc";
+		reg = <0x0 0x2150000 0x0 0x10000>;
+		interrupts = <0 63 0x4>;
+		big-endian;
+		non-removable;
+		bus-width = <4>;
+	};
+
+	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,
+	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..2cd6bb4 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,11 @@
 #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
+#define CONFIG_SYS_PCIE3_PHYS_ADDR		0x1400000000ULL
+#define CONFIG_SYS_PCIE4_PHYS_ADDR		0x1600000000ULL
 #else
 #define CONFIG_SYS_PCIE1_PHYS_ADDR		0x1000000000ULL
 #define CONFIG_SYS_PCIE2_PHYS_ADDR		0x1200000000ULL
@@ -375,6 +380,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
diff --git a/board/freescale/common/qixis.c b/board/freescale/common/qixis.c
index f1b98bc..59337ef 100644
--- a/board/freescale/common/qixis.c
+++ b/board/freescale/common/qixis.c
@@ -50,6 +50,17 @@ void qixis_write(unsigned int reg, u8 value)
 }
 #endif
 
+bool qixis_read_released(void)
+{
+	bool released;
+
+	/* this data is in little endian */
+	QIXIS_WRITE(tagdata, 0xc);
+	released = QIXIS_READ(tagdata);
+
+	return released;
+}
+
 u16 qixis_read_minor(void)
 {
 	u16 minor;
@@ -63,6 +74,27 @@ u16 qixis_read_minor(void)
 	return minor;
 }
 
+char *qixis_read_date(char *buf)
+{
+	int i;
+	time_t time = 0;
+	struct tm t;
+	char *ptr = buf;
+
+	/* timestamp is in 32-bit big endian */
+	for (i = 8; i <= 11; i++) {
+		QIXIS_WRITE(tagdata, i);
+		time =  (time << 8) + QIXIS_READ(tagdata);
+	}
+
+	localtime_r(&time, &t);
+	sprintf(ptr, "%4d_%02d%02d_%02d%02d",
+		t.tm_year + 1900,
+		t.tm_mon + 1, t.tm_mday, t.tm_hour, t.tm_min);
+
+	return buf;
+}
+
 char *qixis_read_time(char *result)
 {
 	time_t time = 0;
@@ -142,11 +174,13 @@ static void qixis_reset(void)
 	QIXIS_WRITE(rst_ctl, QIXIS_RST_CTL_RESET);
 }
 
+#ifdef QIXIS_LBMAP_ALTBANK
 static void qixis_bank_reset(void)
 {
 	QIXIS_WRITE(rcfg_ctl, QIXIS_RCFG_CTL_RECONFIG_IDLE);
 	QIXIS_WRITE(rcfg_ctl, QIXIS_RCFG_CTL_RECONFIG_START);
 }
+#endif
 
 static void __maybe_unused set_lbmap(int lbmap)
 {
@@ -210,8 +244,12 @@ static int qixis_reset_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char * const ar
 		set_lbmap(QIXIS_LBMAP_DFLTBANK);
 		qixis_reset();
 	} else if (strcmp(argv[1], "altbank") == 0) {
+#ifdef QIXIS_LBMAP_ALTBANK
 		set_lbmap(QIXIS_LBMAP_ALTBANK);
 		qixis_bank_reset();
+#else
+		printf("No Altbank!\n");
+#endif
 	} else if (strcmp(argv[1], "nand") == 0) {
 #ifdef QIXIS_LBMAP_NAND
 		QIXIS_WRITE(rst_ctl, 0x30);
diff --git a/board/freescale/common/qixis.h b/board/freescale/common/qixis.h
index c11062e..feda0a8 100644
--- a/board/freescale/common/qixis.h
+++ b/board/freescale/common/qixis.h
@@ -90,7 +90,9 @@ struct qixis {
 
 u8 qixis_read(unsigned int reg);
 void qixis_write(unsigned int reg, u8 value);
+bool qixis_read_released(void);
 u16 qixis_read_minor(void);
+char *qixis_read_date(char *buf);
 char *qixis_read_time(char *result);
 char *qixis_read_tag(char *buf);
 const char *byte_to_binary_mask(u8 val, u8 mask, char *buf);
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [U-Boot] [PATCH 2/3] armv8: ls1028ardb: Add support for LS1028ARDB platform
  2019-03-18  9:45 [U-Boot] [PATCH 1/3] armv8: ls1028a: Add NXP LS1028A SoC support Bhaskar Upadhaya
@ 2019-03-18  9:45 ` Bhaskar Upadhaya
  2019-03-22 10:52   ` Prabhakar Kushwaha
  2019-03-18  9:45 ` [U-Boot] [PATCH 3/3] armv8: ls1028aqds: Add support of LS1028AQDS Bhaskar Upadhaya
  2019-03-22 10:32 ` [U-Boot] [PATCH 1/3] armv8: ls1028a: Add NXP LS1028A SoC support Prabhakar Kushwaha
  2 siblings, 1 reply; 6+ messages in thread
From: Bhaskar Upadhaya @ 2019-03-18  9:45 UTC (permalink / raw)
  To: u-boot

LS1028A is an ARMv8 implementation. LS1028ARDB is an evaluatoin
platform that supports the LS1028A family SoCs. This patch add basic
support of the platform.

Signed-off-by: Sudhanshu Gupta <sudhanshu.gupta@nxp.com>
Signed-off-by: Rai Harninder <harninder.rai@nxp.com>
Signed-off-by: Rajesh Bhagat <rajesh.bhagat@nxp.com>
Signed-off-by: Bhaskar Upadhaya <Bhaskar.Upadhaya@nxp.com>
---
 arch/arm/Kconfig                    |  12 ++
 arch/arm/cpu/armv8/Kconfig          |   1 +
 arch/arm/dts/fsl-ls1028a-rdb.dts    |  20 +++
 board/freescale/ls1028a/Kconfig     |  38 +++++
 board/freescale/ls1028a/MAINTAINERS |   9 ++
 board/freescale/ls1028a/Makefile    |   8 +
 board/freescale/ls1028a/README      |  85 +++++++++++
 board/freescale/ls1028a/ddr.c       | 284 ++++++++++++++++++++++++++++++++++
 board/freescale/ls1028a/ddr.h       |  46 ++++++
 board/freescale/ls1028a/ls1028a.c   | 251 ++++++++++++++++++++++++++++++
 configs/ls1028ardb_tfa_defconfig    |  61 ++++++++
 include/configs/ls1028a_common.h    | 295 ++++++++++++++++++++++++++++++++++++
 include/configs/ls1028ardb.h        |  98 ++++++++++++
 13 files changed, 1208 insertions(+)
 create mode 100644 arch/arm/dts/fsl-ls1028a-rdb.dts
 create mode 100644 board/freescale/ls1028a/Kconfig
 create mode 100644 board/freescale/ls1028a/MAINTAINERS
 create mode 100644 board/freescale/ls1028a/Makefile
 create mode 100644 board/freescale/ls1028a/README
 create mode 100644 board/freescale/ls1028a/ddr.c
 create mode 100644 board/freescale/ls1028a/ddr.h
 create mode 100644 board/freescale/ls1028a/ls1028a.c
 create mode 100644 configs/ls1028ardb_tfa_defconfig
 create mode 100644 include/configs/ls1028a_common.h
 create mode 100644 include/configs/ls1028ardb.h

diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index f42ecce..aaaf36a 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -1203,6 +1203,17 @@ config TARGET_LS1012AFRDM
 	  development platform that supports the QorIQ LS1012A
 	  Layerscape Architecture processor.
 
+config TARGET_LS1028ARDB
+	bool "Support ls1028ardb"
+	select ARCH_LS1028A
+	select ARM64
+	select ARMV8_MULTIENTRY
+	help
+	  Support for Freescale LS1028ARDB platform
+	  The LS1028A Development System (RDB) is a high-performance
+	  development platform that supports the QorIQ LS1028A
+	  Layerscape Architecture processor.
+
 config TARGET_LS1088ARDB
 	bool "Support ls1088ardb"
 	select ARCH_LS1088A
@@ -1585,6 +1596,7 @@ source "board/freescale/ls2080a/Kconfig"
 source "board/freescale/ls2080aqds/Kconfig"
 source "board/freescale/ls2080ardb/Kconfig"
 source "board/freescale/ls1088a/Kconfig"
+source "board/freescale/ls1028a/Kconfig"
 source "board/freescale/ls1021aqds/Kconfig"
 source "board/freescale/ls1043aqds/Kconfig"
 source "board/freescale/ls1021atwr/Kconfig"
diff --git a/arch/arm/cpu/armv8/Kconfig b/arch/arm/cpu/armv8/Kconfig
index f053603..a4fa63b 100644
--- a/arch/arm/cpu/armv8/Kconfig
+++ b/arch/arm/cpu/armv8/Kconfig
@@ -104,6 +104,7 @@ config PSCI_RESET
 		   !TARGET_LS1012ARDB && !TARGET_LS1012AFRDM && \
 		   !TARGET_LS1012A2G5RDB && !TARGET_LS1012AQDS && \
 		   !TARGET_LS1012AFRWY && \
+		   !TARGET_LS1028ARDB && \
 		   !TARGET_LS1043ARDB && !TARGET_LS1043AQDS && \
 		   !TARGET_LS1046ARDB && !TARGET_LS1046AQDS && \
 		   !TARGET_LS2081ARDB && !TARGET_LX2160ARDB && \
diff --git a/arch/arm/dts/fsl-ls1028a-rdb.dts b/arch/arm/dts/fsl-ls1028a-rdb.dts
new file mode 100644
index 0000000..b9adb61
--- /dev/null
+++ b/arch/arm/dts/fsl-ls1028a-rdb.dts
@@ -0,0 +1,20 @@
+// SPDX-License-Identifier: GPL-2.0+ OR X11
+/*
+ * NXP ls1028ARDB device tree source
+ *
+ * Copyright 2018-2019 NXP
+ *
+ */
+
+/dts-v1/;
+
+#include "fsl-ls1028a.dtsi"
+
+/ {
+	model = "NXP Layerscape 1028a RDB Board";
+	compatible = "fsl,ls1028a-rdb", "fsl,ls1028a";
+};
+
+&sata {
+	status = "okay";
+};
diff --git a/board/freescale/ls1028a/Kconfig b/board/freescale/ls1028a/Kconfig
new file mode 100644
index 0000000..f4733c2
--- /dev/null
+++ b/board/freescale/ls1028a/Kconfig
@@ -0,0 +1,38 @@
+if TARGET_LS1028ARDB
+
+config SYS_BOARD
+	default "ls1028a"
+
+config SYS_VENDOR
+	default "freescale"
+
+config SYS_SOC
+	default "fsl-layerscape"
+
+config SYS_CONFIG_NAME
+	default "ls1028ardb"
+
+config EMMC_BOOT
+	bool "Support for booting from EMMC"
+	default n
+
+config SYS_TEXT_BASE
+	default 0x96000000 if SD_BOOT || EMMC_BOOT
+	default 0x82000000 if TFABOOT
+	default 0x20100000
+
+if FSL_LS_PPA
+config SYS_LS_PPA_FW_ADDR
+	hex "PPA Firmware Addr"
+	default 0x20400000 if SYS_LS_PPA_FW_IN_XIP && ARCH_LS1028A
+	default 0x400000 if SYS_LS_PPA_FW_IN_MMC && ARCH_LS1028A
+if CHAIN_OF_TRUST
+config SYS_LS_PPA_ESBC_ADDR
+	hex "PPA header Addr"
+	default 0x20600000 if SYS_LS_PPA_FW_IN_XIP && ARCH_LS1028A
+endif
+endif
+
+source "board/freescale/common/Kconfig"
+
+endif
diff --git a/board/freescale/ls1028a/MAINTAINERS b/board/freescale/ls1028a/MAINTAINERS
new file mode 100644
index 0000000..f4990a2
--- /dev/null
+++ b/board/freescale/ls1028a/MAINTAINERS
@@ -0,0 +1,9 @@
+LS1028ARDB BOARD
+M:	Sudhanshu Gupta <sudhanshu.gupta@nxp.com>
+M:	Rai Harninder <harninder.rai@nxp.com>
+M:	Rajesh Bhagat <rajesh.bhagat@nxp.com>
+S:	Maintained
+F:	board/freescale/ls1028a/
+F:	include/configs/ls1028a_common.h
+F:	include/configs/ls1028ardb.h
+F:	configs/ls1028ardb_tfa_defconfig
diff --git a/board/freescale/ls1028a/Makefile b/board/freescale/ls1028a/Makefile
new file mode 100644
index 0000000..2d1e92f
--- /dev/null
+++ b/board/freescale/ls1028a/Makefile
@@ -0,0 +1,8 @@
+#
+# Copyright 2018 NXP
+#
+# SPDX-License-Identifier:	GPL-2.0+
+#
+
+obj-y += ls1028a.o
+obj-y += ddr.o
diff --git a/board/freescale/ls1028a/README b/board/freescale/ls1028a/README
new file mode 100644
index 0000000..a3ce859
--- /dev/null
+++ b/board/freescale/ls1028a/README
@@ -0,0 +1,85 @@
+Overview
+--------
+The LS1028A Reference Design (RDB) is a high-performance computing,
+evaluation, and development platform that supports ARM SoC LS1028A and its
+derivatives.
+
+LS1028A SoC Overview
+--------------------------------------
+Please refer arch/arm/cpu/armv8/fsl-layerscape/doc/README.soc
+
+RDB Default Switch Settings (1: ON; 0: OFF)
+-------------------------------------------
+For SD Boot
+SW2: 10001000
+SW3: 01110000
+SW5: 00100000
+
+For FlexSPI Boot
+SW2: 11111000
+SW3: 01110000
+SW5: 00100000
+
+LS1028ARDB board Overview
+-------------------------
+Processor
+ Two Arm Cortex- A72 processor cores:
+  - Based on 64-bit ARMv8 architecture
+  - Up to 1.3 GHz operation
+  - Single-threaded cores with 48 KB L1 instruction cache and 32 KB L1
+    data cache
+  - Arranged as a single cluster of two cores sharing a single 1 MB L2
+    cache
+DDR memory
+  - Five onboard 1G x8 discrete memory modules (Four data byte lanes
+    ECC)
+  - 32-bit data and 4-bit ECC
+  - One chip select
+  - Data transfer rates of up to 1.6 GT/s
+  - Single-bit error correction and double-bit error detection ECC (4-bit
+    check word across 32-bit data)
+High-speed serial ports(SerDes)
+ - Lane 0: Supports one 1 GbE RJ45 SGMII, connected through the
+   Qualcomm AR8033 PHY
+ - Lane 1: Supports four 1.25 GbE RJ45 QSGMII, each connected
+   through the NXP F104S8A PHY
+ - Lane 2: Connects to one PCIe M.2 Key-E slot to support PCIe Gen3
+   (8 Gbit/s) cards
+ - Lane 3: Connects to one PCIe M.2 Key-E slot or one SATA M.2 Key-B
+   slot through a register mux to support either PCIe Gen 3 (8 Gbit/s) or
+   SATA Gen 3 cards (6 Gbit/s) at a time
+eSDHC
+ - eSDHC1, eSDHC2
+SPI
+ - Connects to two mikroBUS sockets to support mikro-click modules,
+   such as Bluetooth 4.0, 2.4 GHz IEEE 802.15.4 radio transceiver, near
+   field communications (NFC) controller
+Octal SPI (XSPI)
+ - One 256 MB onboard XSPI serial NOR flash memory
+ - One 512 MB onboard XSPI serial NAND flash memory
+ - Supports a QSPI emulator for offboard QSPI emulation
+I2C
+ - All system devices are accessed via I2C1, which is multiplexed on
+   I2C multiplexer PCA9848 to isolate address conflicts and reduce
+   capacitive load
+ - I2C1 is used for EEPROMs, RTC, INA220 current-power sensor,
+   thermal monitor, PCIe/SATA M.2 connectors and mikro-click modules
+   1 and 2
+CAN
+ - The two CAN DB9 ports can support CAN FD fast phase at data rates of
+   up to 5 Mbit/s
+Serial audio interface(SAI)
+ - Audio codec SGTL5000 provides headphone and audio LINEOUT for
+   stereo speakers
+ - IEEE1588 interface to support audio on SAI4
+
+FlexSPI flash memory map valid for both QDS and RDB
+  Image                               Flash Offset
+ RCW+PBI                             0x00000000
+ Boot firmware (U-Boot)              0x00100000
+ Boot firmware Environment           0x00300000
+ PPA firmware                        0x00400000
+ DPAA2 MC                            0x00A00000
+ DPAA2 DPL                           0x00D00000
+ DPAA2 DPC                           0x00E00000
+ Kernel.itb                          0x01000000
diff --git a/board/freescale/ls1028a/ddr.c b/board/freescale/ls1028a/ddr.c
new file mode 100644
index 0000000..bb342dc
--- /dev/null
+++ b/board/freescale/ls1028a/ddr.c
@@ -0,0 +1,284 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright 2019 NXP
+ */
+
+#include <common.h>
+#include <fsl_ddr_sdram.h>
+#include <fsl_ddr_dimm_params.h>
+#include <asm/arch/soc.h>
+#include <asm/arch/clock.h>
+#include <asm/io.h>
+#include "ddr.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+void fsl_ddr_board_options(memctl_options_t *popts,
+			   dimm_params_t *pdimm,
+			   unsigned int ctrl_num)
+{
+	const struct board_specific_parameters *pbsp, *pbsp_highest = NULL;
+	ulong ddr_freq;
+
+	if (ctrl_num > 1) {
+		printf("Not supported controller number %d\n", ctrl_num);
+		return;
+	}
+	if (!pdimm->n_ranks)
+		return;
+
+	pbsp = udimms[0];
+
+	/* Get clk_adjust, wrlvl_start, wrlvl_ctl, according to the board ddr
+	 * freqency and n_banks specified in board_specific_parameters table.
+	 */
+	ddr_freq = get_ddr_freq(0) / 1000000;
+	while (pbsp->datarate_mhz_high) {
+		if (pbsp->n_ranks == pdimm->n_ranks) {
+			if (ddr_freq <= pbsp->datarate_mhz_high) {
+				popts->clk_adjust = pbsp->clk_adjust;
+				popts->wrlvl_start = pbsp->wrlvl_start;
+				popts->wrlvl_ctl_2 = pbsp->wrlvl_ctl_2;
+				popts->wrlvl_ctl_3 = pbsp->wrlvl_ctl_3;
+				popts->cpo_override = pbsp->cpo_override;
+				popts->write_data_delay =
+					pbsp->write_data_delay;
+				goto found;
+			}
+			pbsp_highest = pbsp;
+		}
+		pbsp++;
+	}
+
+	if (pbsp_highest) {
+		printf("Error: board specific timing not found for %lu MT/s\n",
+		       ddr_freq);
+		printf("Trying to use the highest speed (%u) parameters\n",
+		       pbsp_highest->datarate_mhz_high);
+		popts->clk_adjust = pbsp_highest->clk_adjust;
+		popts->wrlvl_start = pbsp_highest->wrlvl_start;
+		popts->wrlvl_ctl_2 = pbsp->wrlvl_ctl_2;
+		popts->wrlvl_ctl_3 = pbsp->wrlvl_ctl_3;
+	} else {
+		panic("DIMM is not supported by this board");
+	}
+found:
+	debug("Found timing match: n_ranks %d, data rate %d, rank_gb %d\n",
+	      pbsp->n_ranks, pbsp->datarate_mhz_high, pbsp->rank_gb);
+
+	/* force DDR bus width to 32 bits */
+	popts->data_bus_width = 1;
+	popts->otf_burst_chop_en = 0;
+	popts->burst_length = DDR_BL8;
+	popts->bstopre = 0;		/* enable auto precharge */
+
+	/*
+	 * Factors to consider for half-strength driver enable:
+	 *	- number of DIMMs installed
+	 */
+	popts->half_strength_driver_enable = 1;
+	/*
+	 * Write leveling override
+	 */
+	popts->wrlvl_override = 1;
+	popts->wrlvl_sample = 0xf;
+
+	/*
+	 * Rtt and Rtt_WR override
+	 */
+	popts->rtt_override = 0;
+
+	/* Enable ZQ calibration */
+	popts->zq_en = 1;
+
+#ifdef CONFIG_SYS_FSL_DDR4
+	popts->ddr_cdr1 = DDR_CDR1_DHC_EN | DDR_CDR1_ODT(DDR_CDR_ODT_80ohm);
+	popts->ddr_cdr2 = DDR_CDR2_ODT(DDR_CDR_ODT_80ohm) |
+			  DDR_CDR2_VREF_OVRD(70);	/* Vref = 70% */
+
+	/* optimize cpo for erratum A-009942 */
+	popts->cpo_sample = 0x46;
+#else
+	popts->cswl_override = DDR_CSWL_CS0;
+
+	/* DHC_EN =1, ODT = 75 Ohm */
+	popts->ddr_cdr1 = DDR_CDR1_DHC_EN | DDR_CDR1_ODT(DDR_CDR_ODT_75ohm);
+	popts->ddr_cdr2 = DDR_CDR2_ODT(DDR_CDR_ODT_75ohm);
+#endif
+}
+
+#ifdef CONFIG_TARGET_LS1028ARDB
+#ifdef CONFIG_SYS_DDR_RAW_TIMING
+/* MT40A1G8SA-075:E */
+dimm_params_t ddr_raw_timing = {
+	.n_ranks = 1,
+	.rank_density = 4294967296u,
+	.capacity = 4294967296u,
+	.primary_sdram_width = 32,
+	.ec_sdram_width = 4,
+	.registered_dimm = 0,
+	.mirrored_dimm = 0,
+	.n_row_addr = 16,
+	.n_col_addr = 10,
+	.bank_addr_bits = 0,
+	.bank_group_bits = 2,
+	.edc_config = 2,
+	.burst_lengths_bitmask = 0x0c,
+
+	.tckmin_x_ps = 750,
+	.tckmax_ps = 1900,
+	.caslat_x = 0x0001FFE00,
+	.taa_ps = 13500,
+	.trcd_ps = 13500,
+	.trp_ps = 13500,
+	.tras_ps = 32000,
+	.trc_ps = 45500,
+	.trfc1_ps = 350000,
+	.trfc2_ps = 260000,
+	.trfc4_ps = 160000,
+	.tfaw_ps = 21000,
+	.trrds_ps = 3000,
+	.trrdl_ps = 4900,
+	.tccdl_ps = 5000,
+	.refresh_rate_ps = 7800000,
+	.dq_mapping[0] = 0x16,
+	.dq_mapping[1] = 0x36,
+	.dq_mapping[2] = 0x16,
+	.dq_mapping[3] = 0x36,
+	.dq_mapping[4] = 0x16,
+	.dq_mapping[5] = 0x36,
+	.dq_mapping[6] = 0x16,
+	.dq_mapping[7] = 0x36,
+	.dq_mapping[8] = 0x16,
+	.dq_mapping[9] = 0x0,
+	.dq_mapping[10] = 0x0,
+	.dq_mapping[11] = 0x0,
+	.dq_mapping[12] = 0x0,
+	.dq_mapping[13] = 0x0,
+	.dq_mapping[14] = 0x0,
+	.dq_mapping[15] = 0x0,
+	.dq_mapping[16] = 0x0,
+	.dq_mapping[17] = 0x0,
+	.dq_mapping_ors = 0,
+};
+
+int fsl_ddr_get_dimm_params(dimm_params_t *pdimm,
+			    unsigned int controller_number,
+			    unsigned int dimm_number)
+{
+	static const char dimm_model[] = "Fixed DDR on board";
+
+	if ((controller_number == 0) && (dimm_number == 0)) {
+		memcpy(pdimm, &ddr_raw_timing, sizeof(dimm_params_t));
+		memset(pdimm->mpart, 0, sizeof(pdimm->mpart));
+		memcpy(pdimm->mpart, dimm_model, sizeof(dimm_model) - 1);
+	}
+
+	return 0;
+}
+#else
+static phys_size_t fixed_sdram(void)
+{
+	size_t ddr_size;
+
+#if defined(CONFIG_SPL_BUILD) || !defined(CONFIG_SPL)
+	fsl_ddr_cfg_regs_t ddr_cfg_regs = {
+		.cs[0].bnds		= 0x000000ff,
+		.cs[0].config		= 0x80040422,
+		.cs[0].config_2		= 0,
+		.cs[1].bnds		= 0,
+		.cs[1].config		= 0,
+		.cs[1].config_2		= 0,
+
+		.timing_cfg_3		= 0x01111000,
+		.timing_cfg_0		= 0xd0550018,
+		.timing_cfg_1		= 0xFAFC0C42,
+		.timing_cfg_2		= 0x0048c114,
+		.ddr_sdram_cfg		= 0xe50c000c,
+		.ddr_sdram_cfg_2	= 0x00401110,
+		.ddr_sdram_mode		= 0x01010230,
+		.ddr_sdram_mode_2	= 0x0,
+
+		.ddr_sdram_md_cntl	= 0x0600001f,
+		.ddr_sdram_interval	= 0x18600618,
+		.ddr_data_init		= 0xdeadbeef,
+
+		.ddr_sdram_clk_cntl	= 0x02000000,
+		.ddr_init_addr		= 0,
+		.ddr_init_ext_addr	= 0,
+
+		.timing_cfg_4		= 0x00000002,
+		.timing_cfg_5		= 0x07401400,
+		.timing_cfg_6		= 0x0,
+		.timing_cfg_7		= 0x23300000,
+
+		.ddr_zq_cntl		= 0x8A090705,
+		.ddr_wrlvl_cntl		= 0x86550607,
+		.ddr_sr_cntr		= 0,
+		.ddr_sdram_rcw_1	= 0,
+		.ddr_sdram_rcw_2	= 0,
+		.ddr_wrlvl_cntl_2	= 0x0708080A,
+		.ddr_wrlvl_cntl_3	= 0x0A0B0C09,
+
+		.ddr_sdram_mode_9	= 0x00000400,
+		.ddr_sdram_mode_10	= 0x04000000,
+
+		.timing_cfg_8		= 0x06115600,
+
+		.dq_map_0		= 0x5b65b658,
+		.dq_map_1		= 0xd96d8000,
+		.dq_map_2		= 0,
+		.dq_map_3		= 0x01600000,
+
+		.ddr_cdr1		= 0x80040000,
+		.ddr_cdr2		= 0x000000C1
+	};
+
+	fsl_ddr_set_memctl_regs(&ddr_cfg_regs, 0, 0);
+#endif
+	ddr_size = 1ULL << 32;
+
+	return ddr_size;
+}
+#endif	/* CONFIG_SYS_DDR_RAW_TIMING */
+#endif
+
+#ifdef CONFIG_TFABOOT
+int fsl_initdram(void)
+{
+	gd->ram_size = tfa_get_dram_size();
+
+	if (!gd->ram_size)
+#ifdef CONFIG_TARGET_LS1028ARDB
+		gd->ram_size = 1ULL << 32;
+#else
+		gd->ram_size = fsl_ddr_sdram_size();
+#endif
+	return 0;
+}
+#else
+int fsl_initdram(void)
+{
+#ifdef CONFIG_TARGET_LS1028ARDB
+#if defined(CONFIG_SPL) && !defined(CONFIG_SPL_BUILD)
+	gd->ram_size = 1ULL << 32;
+#else
+#ifdef CONFIG_SYS_DDR_RAW_TIMING
+	puts("Initializing DDR....\n");
+	gd->ram_size = fsl_ddr_sdram();
+#else
+	puts("Initializing DDR....using fixed timing\n");
+	gd->ram_size = fixed_sdram();
+#endif	/* CONFIG_SYS_DDR_RAW_TIMING */
+#endif
+#else
+#if defined(CONFIG_SPL) && !defined(CONFIG_SPL_BUILD)
+	gd->ram_size = fsl_ddr_sdram_size();
+#else
+	puts("Initializing DDR....using SPD\n");
+	gd->ram_size = fsl_ddr_sdram();
+#endif
+#endif /* !CONFIG_TARGET_LS1028ARDB */
+	return 0;
+}
+#endif	/* CONFIG_TFABOOT */
diff --git a/board/freescale/ls1028a/ddr.h b/board/freescale/ls1028a/ddr.h
new file mode 100644
index 0000000..aae54e7
--- /dev/null
+++ b/board/freescale/ls1028a/ddr.h
@@ -0,0 +1,46 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright 2019 NXP
+ */
+
+#ifndef __DDR_H__
+#define __DDR_H__
+
+struct board_specific_parameters {
+	u32 n_ranks;
+	u32 datarate_mhz_high;
+	u32 rank_gb;
+	u32 clk_adjust;
+	u32 wrlvl_start;
+	u32 wrlvl_ctl_2;
+	u32 wrlvl_ctl_3;
+	u32 cpo_override;
+	u32 write_data_delay;
+	u32 force_2t;
+};
+
+/*
+ * These tables contain all valid speeds we want to override with board
+ * specific parameters. datarate_mhz_high values need to be in ascending order
+ * for each n_ranks group.
+ */
+static const struct board_specific_parameters udimm0[] = {
+	/*
+	 * memory controller 0
+	 *   num|  hi| rank|  clk| wrlvl |   wrlvl   |  wrlvl | cpo  |wrdata|2T
+	 * ranks| mhz| GB  |adjst| start |   ctl2    |  ctl3  |      |delay |
+	 */
+#ifdef CONFIG_TARGET_LS1028ARDB
+	{1,  1666, 0,  8,     5, 0x06070700, 0x00000008,},
+#else
+	{2,  1666, 0,  8,     8, 0x090a0b00, 0x0000000c,},
+	{1,  1666, 0,  8,     8, 0x090a0b00, 0x0000000c,},
+#endif
+	{}
+};
+
+static const struct board_specific_parameters *udimms[] = {
+	udimm0,
+};
+
+#endif
diff --git a/board/freescale/ls1028a/ls1028a.c b/board/freescale/ls1028a/ls1028a.c
new file mode 100644
index 0000000..63f8b7f
--- /dev/null
+++ b/board/freescale/ls1028a/ls1028a.c
@@ -0,0 +1,251 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright 2019 NXP
+ */
+
+#include <common.h>
+#include <malloc.h>
+#include <errno.h>
+#include <fsl_ddr.h>
+#include <asm/io.h>
+#include <hwconfig.h>
+#include <fdt_support.h>
+#include <linux/libfdt.h>
+#include <environment.h>
+#include <asm/arch-fsl-layerscape/soc.h>
+#include <i2c.h>
+#include <asm/arch/soc.h>
+#ifdef CONFIG_FSL_LS_PPA
+#include <asm/arch/ppa.h>
+#endif
+#include <fsl_immap.h>
+#include <netdev.h>
+
+#include <fdtdec.h>
+#include <miiphy.h>
+#include "../common/qixis.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+int board_init(void)
+{
+#ifdef CONFIG_ENV_IS_NOWHERE
+	gd->env_addr = (ulong)&default_environment[0];
+#endif
+
+#ifdef CONFIG_FSL_LS_PPA
+	ppa_init();
+#endif
+
+#ifndef CONFIG_SYS_EARLY_PCI_INIT
+	/* run PCI init to kick off ENETC */
+	pci_init();
+#endif
+
+#if defined(CONFIG_TARGET_LS1028ARDB)
+	u8 val = I2C_MUX_CH_DEFAULT;
+
+	i2c_write(I2C_MUX_PCA_ADDR_PRI, 0x0b, 1, &val, 1);
+#endif
+	return 0;
+}
+
+int board_eth_init(bd_t *bis)
+{
+	return pci_eth_init(bis);
+}
+
+int board_early_init_f(void)
+{
+#ifdef CONFIG_SYS_I2C_EARLY_INIT
+	i2c_early_init_f();
+#endif
+
+	fsl_lsch3_early_init_f();
+	return 0;
+}
+
+void detail_board_ddr_info(void)
+{
+	puts("\nDDR    ");
+	print_size(gd->bd->bi_dram[0].size + gd->bd->bi_dram[1].size, "");
+	print_ddr_info(0);
+}
+
+#ifdef CONFIG_OF_BOARD_SETUP
+int ft_board_setup(void *blob, bd_t *bd)
+{
+	u64 base[CONFIG_NR_DRAM_BANKS];
+	u64 size[CONFIG_NR_DRAM_BANKS];
+
+	ft_cpu_setup(blob, bd);
+
+	/* fixup DT for the two GPP DDR banks */
+	base[0] = gd->bd->bi_dram[0].start;
+	size[0] = gd->bd->bi_dram[0].size;
+	base[1] = gd->bd->bi_dram[1].start;
+	size[1] = gd->bd->bi_dram[1].size;
+
+#ifdef CONFIG_RESV_RAM
+	/* reduce size if reserved memory is within this bank */
+	if (gd->arch.resv_ram >= base[0] &&
+	    gd->arch.resv_ram < base[0] + size[0])
+		size[0] = gd->arch.resv_ram - base[0];
+	else if (gd->arch.resv_ram >= base[1] &&
+		 gd->arch.resv_ram < base[1] + size[1])
+		size[1] = gd->arch.resv_ram - base[1];
+#endif
+
+	fdt_fixup_memory_banks(blob, base, size, 2);
+
+	return 0;
+}
+#endif
+
+#ifdef CONFIG_FSL_QIXIS
+int checkboard(void)
+{
+#ifdef CONFIG_TFABOOT
+	enum boot_src src = get_boot_src();
+#endif
+	u8 sw;
+
+	int clock;
+	char *board;
+	char buf[64] = {0};
+	static const char *freq[6] = {"100.00", "125.00", "156.25",
+					"161.13", "322.26", "100.00 SS"};
+
+	cpu_name(buf);
+	/* find the board details */
+	sw = QIXIS_READ(id);
+
+	switch (sw) {
+	case 0x46:
+		board = "QDS";
+		break;
+	case 0x47:
+		board = "RDB";
+		break;
+	case 0x49:
+		board = "HSSI";
+		break;
+	default:
+		board = "unknown";
+		break;
+	}
+
+	sw = QIXIS_READ(arch);
+	printf("Board: %s-%s, Version: %c, boot from ",
+	       buf, board, (sw & 0xf) + 'A' - 1);
+
+	sw = QIXIS_READ(brdcfg[0]);
+	sw = (sw & QIXIS_LBMAP_MASK) >> QIXIS_LBMAP_SHIFT;
+
+#ifdef CONFIG_TFABOOT
+	if (src == BOOT_SOURCE_SD_MMC)
+		puts("SD\n");
+	else if (src == BOOT_SOURCE_SD_MMC2)
+		puts("eMMC \n");
+	else {
+#endif
+#ifdef CONFIG_SD_BOOT
+		puts("SD \n");
+#elif defined(CONFIG_EMMC_BOOT)
+		puts("eMMC \n");
+#else
+		switch (sw) {
+		case 0:
+		case 4:
+			printf("NOR\n");
+			break;
+		case 1:
+			printf("NAND\n");
+			break;
+		default:
+			printf("invalid setting of SW%u\n", QIXIS_LBMAP_SWITCH);
+			break;
+		}
+#endif
+#ifdef CONFIG_TFABOOT
+	}
+#endif
+
+	printf("FPGA: v%d (%s: %s_%s)\n", QIXIS_READ(scver),
+	       !qixis_read_released()  ? "INTERIM" : "RELEASED",
+			board, qixis_read_date(buf));
+	puts("SERDES1 Reference : ");
+
+	sw = QIXIS_READ(brdcfg[2]);
+#ifdef CONFIG_TARGET_LS1028ARDB
+	clock = (sw >> 6) & 3;
+#else
+	clock = (sw >> 4) & 0xf;
+#endif
+
+	printf("Clock1 = %sMHz ", freq[clock]);
+#ifdef CONFIG_TARGET_LS1028ARDB
+	clock = (sw >> 4) & 3;
+#else
+	clock = sw & 0xf;
+#endif
+	printf("Clock2 = %sMHz\n", freq[clock]);
+
+	return 0;
+}
+#endif
+
+#ifdef CONFIG_TARGET_LS1028ARDB
+int checkboard1(void)
+{
+	static const char *freq[2] = {"100.00", "Reserved"};
+
+	char buf[64];
+	u8 sw;
+	int clock;
+
+	printf("Board: LS1028A-RDB, ");
+
+#ifdef CONFIG_FSL_QIXIS
+	sw = QIXIS_READ(arch);
+	printf("Board Arch: V%d, ", sw >> 4);
+	printf("Board version: %c, boot from ", (sw & 0xf) + 'A');
+
+	memset((u8 *)buf, 0x00, ARRAY_SIZE(buf));
+
+	sw = QIXIS_READ(brdcfg[0]);
+	sw = (sw & QIXIS_LBMAP_MASK) >> QIXIS_LBMAP_SHIFT;
+
+#ifdef CONFIG_SD_BOOT
+	puts("SD card\n");
+#else
+	switch (sw) {
+	case 0:
+	case 4:
+		printf("NOR\n");
+		break;
+	case 1:
+		printf("NAND\n");
+		break;
+	case 2:
+	case 3:
+		printf("EMU\n");
+		break;
+	default:
+		printf("invalid setting of SW%u\n", QIXIS_LBMAP_SWITCH);
+		break;
+	}
+#endif
+
+	printf("FPGA: v%d.%d\n", QIXIS_READ(scver), QIXIS_READ(tagdata));
+
+	puts("SERDES1 Reference : ");
+	sw = QIXIS_READ(brdcfg[2]);
+	clock = (sw >> 6) & 3;
+	printf("Clock1 = %sMHz ", freq[clock]);
+	clock = (sw >> 4) & 3;
+	printf("Clock2 = %sMHz\n", freq[clock]);
+#endif
+	return 0;
+}
+#endif
diff --git a/configs/ls1028ardb_tfa_defconfig b/configs/ls1028ardb_tfa_defconfig
new file mode 100644
index 0000000..7a6068d
--- /dev/null
+++ b/configs/ls1028ardb_tfa_defconfig
@@ -0,0 +1,61 @@
+CONFIG_ARM=y
+CONFIG_TARGET_LS1028ARDB=y
+CONFIG_SYS_FSL_SDHC_CLK_DIV=1
+CONFIG_TFABOOT=y
+CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT=y
+CONFIG_SEC_FIRMWARE_ARMV8_PSCI=y
+CONFIG_AHCI=y
+CONFIG_DISTRO_DEFAULTS=y
+CONFIG_NR_DRAM_BANKS=2
+# CONFIG_SYS_MALLOC_F is not set
+CONFIG_FIT_VERBOSE=y
+CONFIG_OF_BOARD_SETUP=y
+CONFIG_OF_STDOUT_VIA_ALIAS=y
+CONFIG_BOOTDELAY=10
+CONFIG_USE_BOOTARGS=y
+CONFIG_BOOTARGS="console=ttyS0,115200 root=/dev/ram0 earlycon=uart8250,mmio,0x21c0500 ramdisk_size=0x2000000 default_hugepagesz=2m hugepagesz=2m hugepages=256 video=1920x1080-32 at 60 cma=256M"
+CONFIG_CMD_GREPENV=y
+CONFIG_CMD_GPT=y
+CONFIG_CMD_I2C=y
+CONFIG_CMD_MMC=y
+CONFIG_CMD_PCI=y
+CONFIG_CMD_SF=y
+CONFIG_CMD_USB=y
+# CONFIG_CMD_SETEXPR is not set
+CONFIG_CMD_CACHE=y
+CONFIG_OF_CONTROL=y
+CONFIG_DEFAULT_DEVICE_TREE="fsl-ls1028a-rdb"
+CONFIG_ENV_IS_IN_MMC=y
+CONFIG_ENV_IS_IN_SPI_FLASH=y
+CONFIG_NET_RANDOM_ETHADDR=y
+CONFIG_NETCONSOLE=y
+CONFIG_DM=y
+CONFIG_SCSI_AHCI=y
+CONFIG_SATA_CEVA=y
+CONFIG_FSL_CAAM=y
+CONFIG_DM_MMC=y
+CONFIG_DM_SPI_FLASH=y
+CONFIG_SPI_FLASH=y
+CONFIG_SPI_FLASH_SPANSION=y
+CONFIG_SPI_FLASH_STMICRO=y
+# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
+CONFIG_PHYLIB=y
+CONFIG_PHY_ATHEROS=y
+CONFIG_DM_ETH=y
+CONFIG_PHY_GIGE=y
+CONFIG_E1000=y
+CONFIG_PCI=y
+CONFIG_DM_PCI=y
+CONFIG_DM_PCI_COMPAT=y
+CONFIG_PCIE_LAYERSCAPE=y
+CONFIG_SCSI=y
+CONFIG_DM_SCSI=y
+CONFIG_SYS_NS16550=y
+CONFIG_SPI=y
+CONFIG_DM_SPI=y
+CONFIG_FSL_DSPI=y
+CONFIG_USB=y
+CONFIG_DM_USB=y
+CONFIG_USB_XHCI_HCD=y
+CONFIG_USB_XHCI_DWC3=y
+CONFIG_EFI_LOADER_BOUNCE_BUFFER=y
diff --git a/include/configs/ls1028a_common.h b/include/configs/ls1028a_common.h
new file mode 100644
index 0000000..23823b4
--- /dev/null
+++ b/include/configs/ls1028a_common.h
@@ -0,0 +1,295 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright 2019 NXP
+ */
+
+#ifndef __L1028A_COMMON_H
+#define __L1028A_COMMON_H
+
+/* SPL build */
+#ifdef CONFIG_SPL_BUILD
+#define SPL_NO_FMAN
+#define SPL_NO_DSPI
+#define SPL_NO_PCIE
+#define SPL_NO_ENV
+#define SPL_NO_MISC
+#define SPL_NO_USB
+#define SPL_NO_SATA
+#define SPL_NO_QE
+#define SPL_NO_EEPROM
+#endif
+#if (defined(CONFIG_SPL_BUILD) && defined(CONFIG_NAND_BOOT))
+#define SPL_NO_MMC
+#endif
+#if (defined(CONFIG_SPL_BUILD) && defined(CONFIG_SD_BOOT_QSPI))
+#define SPL_NO_IFC
+#endif
+
+#define CONFIG_REMAKE_ELF
+#define CONFIG_FSL_LAYERSCAPE
+#define CONFIG_MP
+
+#include <asm/arch/stream_id_lsch3.h>
+#include <asm/arch/config.h>
+#include <asm/arch/soc.h>
+
+/* Link Definitions */
+#ifdef CONFIG_TFABOOT
+#define CONFIG_SYS_INIT_SP_ADDR		CONFIG_SYS_TEXT_BASE
+#else
+#define CONFIG_SYS_INIT_SP_ADDR		(CONFIG_SYS_FSL_OCRAM_BASE + 0xfff0)
+#endif
+
+#define CONFIG_SKIP_LOWLEVEL_INIT
+
+#define CONFIG_VERY_BIG_RAM
+#define CONFIG_SYS_DDR_SDRAM_BASE	0x80000000UL
+#define CONFIG_SYS_FSL_DDR_SDRAM_BASE_PHY	0
+#define CONFIG_SYS_SDRAM_BASE		CONFIG_SYS_DDR_SDRAM_BASE
+#define CONFIG_SYS_DDR_BLOCK2_BASE	0x2080000000ULL
+#define CONFIG_SYS_FSL_DDR_MAIN_NUM_CTRLS	1
+
+#define CONFIG_CMD_MEMTEST
+#define CONFIG_SYS_MEMTEST_START        0x80000000
+#define CONFIG_SYS_MEMTEST_END          0x9fffffff
+
+/*
+ * SMP Definitinos
+ */
+#define CPU_RELEASE_ADDR		secondary_boot_func
+
+/* Generic Timer Definitions */
+#define COUNTER_FREQUENCY		25000000	/* 25MHz */
+
+/* Size of malloc() pool */
+#define CONFIG_SYS_MALLOC_LEN		(CONFIG_ENV_SIZE + 2048 * 1024)
+
+/* I2C */
+#define CONFIG_SYS_I2C
+
+/* Serial Port */
+#define CONFIG_CONS_INDEX       1
+#define CONFIG_SYS_NS16550_SERIAL
+#define CONFIG_SYS_NS16550_REG_SIZE     1
+#define CONFIG_SYS_NS16550_CLK          (get_bus_freq(0) / 2)
+
+#define CONFIG_BAUDRATE			115200
+#define CONFIG_SYS_BAUDRATE_TABLE	{ 9600, 19200, 38400, 57600, 115200 }
+
+/* Miscellaneous configurable options */
+#define CONFIG_SYS_LOAD_ADDR	(CONFIG_SYS_DDR_SDRAM_BASE + 0x10000000)
+
+/* Physical Memory Map */
+#define CONFIG_CHIP_SELECTS_PER_CTRL	4
+
+#define CONFIG_HWCONFIG
+#define HWCONFIG_BUFFER_SIZE		128
+
+#ifndef SPL_NO_ENV
+/* Allow to overwrite serial and ethaddr */
+#define CONFIG_ENV_OVERWRITE
+
+#define BOOT_TARGET_DEVICES(func) \
+	func(MMC, mmc, 0) \
+	func(USB, usb, 0)
+#include <config_distro_bootcmd.h>
+
+/* Initial environment variables */
+#define CONFIG_EXTRA_ENV_SETTINGS		\
+	"board=ls1028ardb\0"			\
+	"hwconfig=fsl_ddr:bank_intlv=auto\0"	\
+	"ramdisk_addr=0x800000\0"		\
+	"ramdisk_size=0x2000000\0"		\
+	"fdt_high=0xffffffffffffffff\0"		\
+	"initrd_high=0xffffffffffffffff\0"	\
+	"fdt_addr=0x00f00000\0"                 \
+	"kernel_addr=0x01000000\0"              \
+	"scriptaddr=0x80000000\0"               \
+	"scripthdraddr=0x80080000\0"		\
+	"fdtheader_addr_r=0x80100000\0"         \
+	"kernelheader_addr_r=0x80200000\0"      \
+	"load_addr=0xa0000000\0"            \
+	"kernel_addr_r=0x81000000\0"            \
+	"fdt_addr_r=0x90000000\0"               \
+	"ramdisk_addr_r=0xa0000000\0"           \
+	"kernel_start=0x1000000\0"		\
+	"kernelheader_start=0x800000\0"		\
+	"kernel_load=0xa0000000\0"		\
+	"kernel_size=0x2800000\0"		\
+	"kernelheader_size=0x40000\0"		\
+	"kernel_addr_sd=0x8000\0"		\
+	"kernel_size_sd=0x14000\0"		\
+	"kernelhdr_addr_sd=0x4000\0"		\
+	"kernelhdr_size_sd=0x10\0"		\
+	"console=ttyS0,115200\0"                \
+	"mtdparts=" CONFIG_MTDPARTS_DEFAULT "\0"	\
+	BOOTENV					\
+	"boot_scripts=ls1028ardb_boot.scr\0"    \
+	"boot_script_hdr=hdr_ls1028ardb_bs.out\0"	\
+	"scan_dev_for_boot_part="               \
+		"part list ${devtype} ${devnum} devplist; "   \
+		"env exists devplist || setenv devplist 1; "  \
+		"for distro_bootpart in ${devplist}; do "     \
+		  "if fstype ${devtype} "                  \
+			"${devnum}:${distro_bootpart} "      \
+			"bootfstype; then "                  \
+			"run scan_dev_for_boot; "            \
+		  "fi; "                                   \
+		"done\0"                                   \
+	"scan_dev_for_boot="				  \
+		"echo Scanning ${devtype} "		  \
+				"${devnum}:${distro_bootpart}...; "  \
+		"for prefix in ${boot_prefixes}; do "	  \
+			"run scan_dev_for_scripts; "	  \
+		"done;"					  \
+		"\0"					  \
+	"boot_a_script="				  \
+		"load ${devtype} ${devnum}:${distro_bootpart} "  \
+			"${scriptaddr} ${prefix}${script}; "    \
+		"env exists secureboot && load ${devtype} "     \
+			"${devnum}:${distro_bootpart} "		\
+			"${scripthdraddr} ${prefix}${boot_script_hdr} " \
+			"&& esbc_validate ${scripthdraddr};"    \
+		"source ${scriptaddr}\0"	  \
+	"qspi_bootcmd=echo Trying load from flexspi..;"      \
+		"sf probe && sf read $load_addr "         \
+		"$kernel_start $kernel_size; env exists secureboot "	\
+		"&& sf read $kernelheader_addr_r $kernelheader_start "	\
+		"$kernelheader_size && esbc_validate ${kernelheader_addr_r}; " \
+		"bootm $load_addr#$board\0"		\
+	"qspi_hdploadcmd=echo Trying load HDP firmware from flexspi..;"      \
+		"hdp load 0x20900000 0x2000\0"		\
+	"sd_bootcmd=echo Trying load from SD ..;"	\
+		"mmcinfo; mmc read $load_addr "		\
+		"$kernel_addr_sd $kernel_size_sd && "	\
+		"env exists secureboot && mmc read $kernelheader_addr_r " \
+		"$kernelhdr_addr_sd $kernelhdr_size_sd "		\
+		" && esbc_validate ${kernelheader_addr_r};"	\
+		"bootm $load_addr#$board\0"		\
+	"sd_hdploadcmd=echo Trying load HDP firmware from SD..;"      \
+		"mmcinfo;mmc read $load_addr 0x4800 0x200 "		\
+		"&& hdp load $load_addr 0x2000\0"	\
+	"emmc_bootcmd=echo Trying load from EMMC ..;"	\
+		"mmcinfo; mmc dev 1; mmc read $load_addr "		\
+		"$kernel_addr_sd $kernel_size_sd && "	\
+		"env exists secureboot && mmc read $kernelheader_addr_r " \
+		"$kernelhdr_addr_sd $kernelhdr_size_sd "		\
+		" && esbc_validate ${kernelheader_addr_r};"	\
+		"bootm $load_addr#$board\0"			\
+	"emmc_hdploadcmd=echo Trying load HDP firmware from EMMC..;"      \
+		"mmc dev 1;mmcinfo;mmc read $load_addr 0x4800 0x200 "	\
+		"&& hdp load $load_addr 0x2000\0"
+
+#undef CONFIG_BOOTCOMMAND
+#ifdef CONFIG_TFABOOT
+#define XSPI_NOR_BOOTCOMMAND	"run qspi_hdploadcmd; run distro_bootcmd; run qspi_bootcmd; " \
+				"env exists secureboot && esbc_halt;;"
+#define SD_BOOTCOMMAND		"run sd_hdploadcmd; run distro_bootcmd;run sd_bootcmd; " \
+				"env exists secureboot && esbc_halt;"
+#define SD2_BOOTCOMMAND		"run emmc_hdploadcmd; run distro_bootcmd;run emmc_bootcmd; " \
+				"env exists secureboot && esbc_halt;"
+#else
+#if defined(CONFIG_SD_BOOT)
+#define CONFIG_BOOTCOMMAND "run sd_hdploadcmd; run distro_bootcmd;run sd_bootcmd; "	\
+			   "env exists secureboot && esbc_halt;"
+#elif defined(CONFIG_EMMC_BOOT)
+#define CONFIG_BOOTCOMMAND "run emmc_hdploadcmd; run distro_bootcmd;run emmc_bootcmd; "	\
+			   "env exists secureboot && esbc_halt;"
+#else
+#define CONFIG_BOOTCOMMAND "run qspi_hdploadcmd; run distro_bootcmd; run qspi_bootcmd; "	\
+			   "env exists secureboot && esbc_halt;"
+#endif
+#endif	/* CONFIG_TFABOOT */
+#endif
+
+/* Monitor Command Prompt */
+#define CONFIG_SYS_CBSIZE		512	/* Console I/O Buffer Size */
+#define CONFIG_SYS_PBSIZE		(CONFIG_SYS_CBSIZE + \
+					sizeof(CONFIG_SYS_PROMPT) + 16)
+#define CONFIG_SYS_BARGSIZE		CONFIG_SYS_CBSIZE /* Boot args buffer */
+
+#ifndef SPL_NO_MISC
+#ifndef CONFIG_CMDLINE_EDITING
+#define CONFIG_CMDLINE_EDITING		1
+#endif
+#endif
+
+#define CONFIG_SYS_MAXARGS		64	/* max command args */
+
+#define CONFIG_SYS_BOOTM_LEN   (64 << 20)      /* Increase max gunzip size */
+
+/*  MMC  */
+#ifndef SPL_NO_MMC
+#ifdef CONFIG_MMC
+#define CONFIG_FSL_ESDHC
+#define CONFIG_SYS_FSL_MMC_HAS_CAPBLT_VS33
+#endif
+#endif
+
+#ifdef CONFIG_SPL
+#define CONFIG_SPL_BSS_START_ADDR      0x80100000
+#define CONFIG_SPL_BSS_MAX_SIZE                0x00100000
+#define CONFIG_SPL_LDSCRIPT "arch/arm/cpu/armv8/u-boot-spl.lds"
+#define CONFIG_SPL_MAX_SIZE            0x16000
+#define CONFIG_SPL_STACK               (CONFIG_SYS_FSL_OCRAM_BASE + 0x9ff0)
+#define CONFIG_SPL_TARGET              "u-boot-with-spl.bin"
+#define CONFIG_SPL_TEXT_BASE           0x18010000
+
+#define CONFIG_SPL_I2C_SUPPORT
+
+#define CONFIG_SYS_SPL_MALLOC_SIZE     0x00100000
+#define CONFIG_SYS_SPL_MALLOC_START    0x80200000
+#define CONFIG_SYS_MONITOR_LEN         (768 * 1024)
+#endif
+
+#ifdef CONFIG_TFABOOT
+#define CONFIG_SYS_MMC_ENV_DEV         0
+#define OCRAM_NONSECURE_SIZE		0x00010000
+#define CONFIG_ENV_OFFSET              0x500000        /* 5MB */
+#define CONFIG_SYS_FSL_QSPI_BASE	0x20000000
+#define CONFIG_ENV_ADDR			CONFIG_SYS_FSL_QSPI_BASE + CONFIG_ENV_OFFSET
+#define CONFIG_ENV_SIZE			0x2000          /* 8KB */
+#define CONFIG_ENV_SECT_SIZE           0x40000
+#else
+#if defined(CONFIG_SD_BOOT) || defined(CONFIG_EMMC_BOOT)
+#define CONFIG_SYS_MMC_ENV_DEV         0
+#define CONFIG_ENV_OFFSET              0x300000        /* 3MB */
+#define CONFIG_ENV_SIZE			0x2000          /* 8KB */
+#define OCRAM_NONSECURE_SIZE		0x00010000
+#else
+#define CONFIG_ENV_OFFSET              0x300000        /* 3MB */
+#define CONFIG_SYS_FSL_QSPI_BASE	0x20000000
+#define CONFIG_ENV_ADDR			CONFIG_SYS_FSL_QSPI_BASE + CONFIG_ENV_OFFSET
+#define CONFIG_ENV_SIZE			0x2000          /* 8KB */
+#define CONFIG_ENV_SECT_SIZE           0x40000
+#endif
+#endif
+
+#ifdef CONFIG_SPL_BUILD
+#define CONFIG_SYS_MONITOR_BASE CONFIG_SPL_TEXT_BASE
+#else
+#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_TEXT_BASE
+#endif
+
+/*  MMC  */
+#ifndef SPL_NO_MMC
+#ifdef CONFIG_MMC
+#define CONFIG_FSL_ESDHC
+#define CONFIG_SYS_FSL_MMC_HAS_CAPBLT_VS33
+#endif
+#endif
+
+/* I2C bus multiplexer */
+#define I2C_MUX_PCA_ADDR_PRI            0x77 /* Primary Mux*/
+#define I2C_MUX_CH_DEFAULT              0x8
+
+/* EEPROM */
+#define CONFIG_ID_EEPROM
+#define CONFIG_SYS_I2C_EEPROM_NXID
+#define CONFIG_SYS_EEPROM_BUS_NUM		0
+#define CONFIG_SYS_I2C_EEPROM_ADDR		0x57
+#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN		1
+#define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS	3
+#define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS	5
+
+#endif /* __L1028A_COMMON_H */
diff --git a/include/configs/ls1028ardb.h b/include/configs/ls1028ardb.h
new file mode 100644
index 0000000..b9d966a
--- /dev/null
+++ b/include/configs/ls1028ardb.h
@@ -0,0 +1,98 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright 2019 NXP
+ */
+
+#ifndef __LS1028A_RDB_H
+#define __LS1028A_RDB_H
+
+#include "ls1028a_common.h"
+
+#define CONFIG_SYS_CLK_FREQ		100000000
+#define CONFIG_DDR_CLK_FREQ		100000000
+#define COUNTER_FREQUENCY_REAL		(CONFIG_SYS_CLK_FREQ / 4)
+
+#define CONFIG_SYS_RTC_BUS_NUM         0
+
+/* DDR */
+#define CONFIG_SYS_DDR_RAW_TIMING
+#define CONFIG_DDR_ECC
+#define CONFIG_ECC_INIT_VIA_DDRCONTROLLER
+#define CONFIG_MEM_INIT_VALUE		0xdeadbeef
+#define CONFIG_DIMM_SLOTS_PER_CTLR		1
+
+/* FlexSPI */
+#ifdef CONFIG_NXP_FSPI
+#define NXP_FSPI_FLASH_SIZE            SZ_256M
+#define NXP_FSPI_FLASH_NUM              1
+#endif
+
+/* Store environment@top of flash */
+#define CONFIG_ENV_SIZE			0x2000
+
+#ifdef CONFIG_SPL_BUILD
+#define CONFIG_SYS_MONITOR_BASE CONFIG_SPL_TEXT_BASE
+#else
+#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_TEXT_BASE
+#endif
+
+#define CONFIG_QIXIS_I2C_ACCESS
+#define CONFIG_SYS_I2C_EARLY_INIT
+
+/*
+ * QIXIS Definitions
+ */
+#define CONFIG_FSL_QIXIS
+
+#ifdef CONFIG_FSL_QIXIS
+#define QIXIS_BASE			0x7fb00000
+#define QIXIS_BASE_PHYS			QIXIS_BASE
+#define CONFIG_SYS_I2C_FPGA_ADDR	0x66
+#define QIXIS_LBMAP_SWITCH		2
+#define QIXIS_LBMAP_MASK		0xe0
+#define QIXIS_LBMAP_SHIFT		0x5
+#define QIXIS_LBMAP_DFLTBANK		0x00
+#define QIXIS_LBMAP_SD			0x00
+#define QIXIS_LBMAP_EMMC		0x00
+#define QIXIS_LBMAP_QSPI		0x00
+#define QIXIS_RCW_SRC_SD		0xf8
+#define QIXIS_RCW_SRC_EMMC		0xf9
+#define QIXIS_RCW_SRC_QSPI		0xff
+#define QIXIS_RST_CTL_RESET		0x31
+#define QIXIS_RCFG_CTL_RECONFIG_IDLE	0x10
+#define QIXIS_RCFG_CTL_RECONFIG_START	0x11
+#define QIXIS_RCFG_CTL_WATCHDOG_ENBLE	0x08
+#define QIXIS_RST_FORCE_MEM		0x01
+
+#define CONFIG_SYS_FPGA_CSPR_EXT	(0x0)
+#define CONFIG_SYS_FPGA_CSPR		(CSPR_PHYS_ADDR(QIXIS_BASE_PHYS) | \
+					CSPR_PORT_SIZE_8 | \
+					CSPR_MSEL_GPCM | \
+					CSPR_V)
+#define CONFIG_SYS_FPGA_AMASK		IFC_AMASK(64 * 1024)
+#define CONFIG_SYS_FPGA_CSOR		(CSOR_NOR_ADM_SHIFT(4) | \
+					CSOR_NOR_NOR_MODE_AVD_NOR | \
+					CSOR_NOR_TRHZ_80)
+#endif
+
+/* SATA */
+#ifndef SPL_NO_SATA
+#ifndef CONFIG_CMD_EXT2
+#define CONFIG_CMD_EXT2
+#endif
+#define CONFIG_SYS_SCSI_MAX_SCSI_ID		1
+#define CONFIG_SYS_SCSI_MAX_LUN			1
+#define CONFIG_SYS_SCSI_MAX_DEVICE		(CONFIG_SYS_SCSI_MAX_SCSI_ID * \
+						CONFIG_SYS_SCSI_MAX_LUN)
+#define SCSI_VEND_ID 0x1b4b
+#define SCSI_DEV_ID  0x9170
+#define CONFIG_SCSI_DEV_LIST {SCSI_VEND_ID, SCSI_DEV_ID}
+#define CONFIG_SCSI_AHCI_PLAT
+#define CONFIG_SYS_SATA1                        AHCI_BASE_ADDR1
+#endif
+
+#ifdef CONFIG_SECURE_BOOT
+#include <asm/fsl_secure_boot.h>
+#endif
+
+#endif /* __LS1028A_RDB_H */
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [U-Boot] [PATCH 3/3] armv8: ls1028aqds: Add support of LS1028AQDS
  2019-03-18  9:45 [U-Boot] [PATCH 1/3] armv8: ls1028a: Add NXP LS1028A SoC support Bhaskar Upadhaya
  2019-03-18  9:45 ` [U-Boot] [PATCH 2/3] armv8: ls1028ardb: Add support for LS1028ARDB platform Bhaskar Upadhaya
@ 2019-03-18  9:45 ` Bhaskar Upadhaya
  2019-03-22 10:56   ` Prabhakar Kushwaha
  2019-03-22 10:32 ` [U-Boot] [PATCH 1/3] armv8: ls1028a: Add NXP LS1028A SoC support Prabhakar Kushwaha
  2 siblings, 1 reply; 6+ messages in thread
From: Bhaskar Upadhaya @ 2019-03-18  9:45 UTC (permalink / raw)
  To: u-boot

LS1028A Development System (QDS) is a high-performance
computing, evaluation, and development platform that supports
LS1028A QorIQ Architecture processor.

Signed-off-by: Sudhanshu Gupta <sudhanshu.gupta@nxp.com>
Signed-off-by: Rai Harninder <harninder.rai@nxp.com>
Signed-off-by: Rajesh Bhagat <rajesh.bhagat@nxp.com>
Signed-off-by: Bhaskar Upadhaya <Bhaskar.Upadhaya@nxp.com>
---
 arch/arm/Kconfig                    |  11 ++
 arch/arm/cpu/armv8/Kconfig          |   2 +-
 arch/arm/dts/fsl-ls1028a-qds.dts    |  16 +++
 board/freescale/ls1028a/Kconfig     |  39 +++++++
 board/freescale/ls1028a/MAINTAINERS |  10 ++
 board/freescale/ls1028a/README      |  85 +++++++++++++++
 board/freescale/ls1028a/ls1028a.c   |  89 ++++++++++++++++
 configs/ls1028aqds_tfa_defconfig    |  61 +++++++++++
 include/configs/ls1028aqds.h        | 206 ++++++++++++++++++++++++++++++++++++
 9 files changed, 518 insertions(+), 1 deletion(-)
 create mode 100644 arch/arm/dts/fsl-ls1028a-qds.dts
 create mode 100644 configs/ls1028aqds_tfa_defconfig
 create mode 100644 include/configs/ls1028aqds.h

diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index aaaf36a..7741ea2 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -1203,6 +1203,17 @@ config TARGET_LS1012AFRDM
 	  development platform that supports the QorIQ LS1012A
 	  Layerscape Architecture processor.
 
+config TARGET_LS1028AQDS
+	bool "Support ls1028aqds"
+	select ARCH_LS1028A
+	select ARM64
+	select ARMV8_MULTIENTRY
+	help
+	  Support for Freescale LS1028AQDS platform
+	  The LS1028A Development System (QDS) is a high-performance
+	  development platform that supports the QorIQ LS1028A
+	  Layerscape Architecture processor.
+
 config TARGET_LS1028ARDB
 	bool "Support ls1028ardb"
 	select ARCH_LS1028A
diff --git a/arch/arm/cpu/armv8/Kconfig b/arch/arm/cpu/armv8/Kconfig
index a4fa63b..3e9d47a 100644
--- a/arch/arm/cpu/armv8/Kconfig
+++ b/arch/arm/cpu/armv8/Kconfig
@@ -104,7 +104,7 @@ config PSCI_RESET
 		   !TARGET_LS1012ARDB && !TARGET_LS1012AFRDM && \
 		   !TARGET_LS1012A2G5RDB && !TARGET_LS1012AQDS && \
 		   !TARGET_LS1012AFRWY && \
-		   !TARGET_LS1028ARDB && \
+		   !TARGET_LS1028ARDB && !TARGET_LS1028AQDS && \
 		   !TARGET_LS1043ARDB && !TARGET_LS1043AQDS && \
 		   !TARGET_LS1046ARDB && !TARGET_LS1046AQDS && \
 		   !TARGET_LS2081ARDB && !TARGET_LX2160ARDB && \
diff --git a/arch/arm/dts/fsl-ls1028a-qds.dts b/arch/arm/dts/fsl-ls1028a-qds.dts
new file mode 100644
index 0000000..131fbb7
--- /dev/null
+++ b/arch/arm/dts/fsl-ls1028a-qds.dts
@@ -0,0 +1,16 @@
+// SPDX-License-Identifier: GPL-2.0+ OR X11
+/*
+ * NXP ls1028AQDS device tree source
+ *
+ * Copyright 2018-2019 NXP
+ *
+ */
+
+/dts-v1/;
+
+#include "fsl-ls1028a.dtsi"
+
+/ {
+	model = "NXP Layerscape 1028a QDS Board";
+	compatible = "fsl,ls1028a-qds", "fsl,ls1028a";
+};
diff --git a/board/freescale/ls1028a/Kconfig b/board/freescale/ls1028a/Kconfig
index f4733c2..f8c2fe8 100644
--- a/board/freescale/ls1028a/Kconfig
+++ b/board/freescale/ls1028a/Kconfig
@@ -1,3 +1,42 @@
+if TARGET_LS1028AQDS
+
+config SYS_BOARD
+	default "ls1028a"
+
+config SYS_VENDOR
+	default "freescale"
+
+config SYS_SOC
+	default "fsl-layerscape"
+
+config SYS_CONFIG_NAME
+	default "ls1028aqds"
+
+config EMMC_BOOT
+	bool "Support for booting from EMMC"
+	default n
+
+config SYS_TEXT_BASE
+	default 0x96000000 if SD_BOOT || EMMC_BOOT
+	default 0x82000000 if TFABOOT
+	default 0x20100000
+
+if FSL_LS_PPA
+config SYS_LS_PPA_FW_ADDR
+	hex "PPA Firmware Addr"
+	default 0x20400000 if SYS_LS_PPA_FW_IN_XIP && ARCH_LS1028A
+	default 0x400000 if SYS_LS_PPA_FW_IN_MMC && ARCH_LS1028A
+if CHAIN_OF_TRUST
+config SYS_LS_PPA_ESBC_ADDR
+	hex "PPA header Addr"
+	default 0x20600000 if SYS_LS_PPA_FW_IN_XIP && ARCH_LS1028A
+endif
+endif
+
+source "board/freescale/common/Kconfig"
+
+endif
+
 if TARGET_LS1028ARDB
 
 config SYS_BOARD
diff --git a/board/freescale/ls1028a/MAINTAINERS b/board/freescale/ls1028a/MAINTAINERS
index f4990a2..8c01bbb 100644
--- a/board/freescale/ls1028a/MAINTAINERS
+++ b/board/freescale/ls1028a/MAINTAINERS
@@ -1,3 +1,13 @@
+LS1028AQDS BOARD
+M:	Sudhanshu Gupta <sudhanshu.gupta@nxp.com>
+M:	Rai Harninder <harninder.rai@nxp.com>
+M:	Rajesh Bhagat <rajesh.bhagat@nxp.com>
+S:	Maintained
+F:	board/freescale/ls1028a/
+F:	include/configs/ls1028a_common.h
+F:	include/configs/ls1028aqds.h
+F:	configs/ls1028aqds_tfa_defconfig
+
 LS1028ARDB BOARD
 M:	Sudhanshu Gupta <sudhanshu.gupta@nxp.com>
 M:	Rai Harninder <harninder.rai@nxp.com>
diff --git a/board/freescale/ls1028a/README b/board/freescale/ls1028a/README
index a3ce859..678b9b5 100644
--- a/board/freescale/ls1028a/README
+++ b/board/freescale/ls1028a/README
@@ -73,6 +73,91 @@ Serial audio interface(SAI)
    stereo speakers
  - IEEE1588 interface to support audio on SAI4
 
+QDS Default Switch Settings (1: ON; 0: OFF)
+-------------------------------------------
+For SD Boot
+SW1 : 10000000
+SW2 : 11100110
+SW3 : 00000010
+SW4 : 00000000
+SW5 : 00000000
+SW6 : 00000000
+SW7 : 11110011
+SW8 : 11100000
+SW9 : 10000001
+SW10: 11100000
+
+For FlexSPI Boot
+SW1 : 11110000
+SW2 : 00000110
+SW3 : 00000010
+SW4 : 00000000
+SW5 : 01100000
+SW6 : 01010000
+SW7 : 11110011
+SW8 : 11100000
+SW9 : 10000000
+SW10: 11100000
+
+LS1028AQDS board Overview
+-------------------------
+Processor
+ Two Arm Cortex- A72 processor cores:
+  - Based on 64-bit ARMv8 architecture
+  - Up to 1.3 GHz operation
+  - Single-threaded cores with 48 KB L1 instruction cache and 32 KB L1
+    data cache
+  - Arranged as a single cluster of two cores sharing a single 1 MB L2
+    cache
+DDR memory
+ - Supports data rates of up to 1.6 GT/s for both, DDR4 and DDR3L
+ - Supports a single- or dual-ranked SODIMM or UDIMM connector
+ - 32-bit data and 4-bit ECC
+ - Supports x8/x16 devices
+ - Supports ECC error detection and correction
+ - 1.35 V or 1.2 V DDR power supply, with automatic tracking of VTT, to
+   all devices in case of DDR3L or DDR4, respectively — Power can
+   switch to 1.35 V or 1.2 V, based on the switch settings for DDR3L or
+   DDR4 devices, respectively
+SerDes (Serializer/Deserializer)
+ - Four-lane (0-3) SerDes:
+ - Lane 0: supports PCIe Gen1/2/3 with x1, x2, and x4 operation, 10
+   Gbit SXGMII, 1 Gbit SGMII
+ - Lane 1: supports PCIe Gen1/2/3 with x1, x2, and x4 operation, 1 Gbit
+   SGMII, 10 Gbit QXGMII, 5 Gbit QSGMII, 1 Gbit SGMII
+ - Lane 2: supports PCIe Gen1/2/3 with x1, x2, and x4 operation, 1 Gbit
+   SGMII
+ - Lane 3: supports PCIe Gen1/2/3 with x1, x2, and x4 operation, 1 Gbit
+   SGMII, SATA 2.0/3.0
+ - Four slots on SerDes lanes support PCIe Gen1/2/3, 1 Gbit SGMII
+   add-in cards
+ - Lane 1 connects to a 2x10 connector with SFP+ through a retimer;
+   lane 2 (TX lines) connects to an SMA connector
+   Lane 3 connects to 1x7 header to support SATA devices
+eSDHC
+ - eSDHC1, eSDHC2
+SPI
+ - SPI1 and SPI2 support three onboard SPI flash memory devices:
+    512 Mbit high-speed flash (with speed of up to 108/54 MHz)
+    memory for storage
+    4 Mbit low-speed flash memory (with speed of up to 40 MHz)
+    64 Mbit high-speed flash memory (with speed of up to 104/80
+    MHz)
+ - SPI3 supports one onboard 64 Mbit SPI flash memory (with speed of
+   up to 104/80 MHz)
+ - All memories operate at 1.8 V
+ - A header is provided on SPI1 to test SPI slave mode
+I2C
+ - LS1028A supports eight I2C controllers
+Serial audio interface(SAI)
+ Two SAI ports with audio codec SGTL5000:
+  - Include stereo LINEIN with support for external analog input
+  - Provide headphone and line output
+Display
+ - DisplayPort connector to connect the DP data to a 4K display device
+   (computer monitor)
+ - eDP connector to connect the DP data to a 4K display panel
+
 FlexSPI flash memory map valid for both QDS and RDB
   Image                               Flash Offset
  RCW+PBI                             0x00000000
diff --git a/board/freescale/ls1028a/ls1028a.c b/board/freescale/ls1028a/ls1028a.c
index 63f8b7f..9d7251e 100644
--- a/board/freescale/ls1028a/ls1028a.c
+++ b/board/freescale/ls1028a/ls1028a.c
@@ -27,6 +27,39 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
+int config_board_mux(void)
+{
+#if defined(CONFIG_TARGET_LS1028AQDS) && defined(CONFIG_FSL_QIXIS)
+	u8 reg;
+
+	reg = QIXIS_READ(brdcfg[13]);
+	/* Field| Function
+	 * --------------------------------------------------------------
+	 * 7-6  | Controls I2C3 routing (net CFG_MUX_I2C3):
+	 * I2C3 | 10= Routes {SCL, SDA} to CAN1 transceiver as {TX, RX}.
+	 * --------------------------------------------------------------
+	 * 5-4  | Controls I2C4 routing (net CFG_MUX_I2C4):
+	 * I2C4 |11= Routes {SCL, SDA} to CAN2 transceiver as {TX, RX}.
+	 */
+	reg &= ~(0xf0);
+	reg |= 0xb0;
+	QIXIS_WRITE(brdcfg[13], reg);
+
+	reg = QIXIS_READ(brdcfg[15]);
+	/* Field| Function
+	 * --------------------------------------------------------------
+	 * 7    | Controls the CAN1 transceiver (net CFG_CAN1_STBY):
+	 * CAN1 | 0= CAN #1 transceiver enabled
+	 * --------------------------------------------------------------
+	 * 6    | Controls the CAN2 transceiver (net CFG_CAN2_STBY):
+	 * CAN2 | 0= CAN #2 transceiver enabled
+	 */
+	reg &= ~(0xc0);
+	QIXIS_WRITE(brdcfg[15], reg);
+#endif
+	return 0;
+}
+
 int board_init(void)
 {
 #ifdef CONFIG_ENV_IS_NOWHERE
@@ -55,6 +88,15 @@ int board_eth_init(bd_t *bis)
 	return pci_eth_init(bis);
 }
 
+#if defined(CONFIG_ARCH_MISC_INIT)
+int arch_misc_init(void)
+{
+	config_board_mux();
+
+	return 0;
+}
+#endif
+
 int board_early_init_f(void)
 {
 #ifdef CONFIG_SYS_I2C_EARLY_INIT
@@ -195,6 +237,53 @@ int checkboard(void)
 }
 #endif
 
+#ifdef CONFIG_TARGET_LS1028AQDS
+int checkboard1(void)
+{
+#ifdef CONFIG_FSL_QIXIS
+	char buf[64];
+#ifndef CONFIG_SD_BOOT
+	u8 sw;
+#endif
+#endif
+
+	puts("Board: LS1028AQDS, boot from ");
+
+#ifdef CONFIG_FSL_QIXIS
+#ifdef CONFIG_SD_BOOT
+	puts("SD\n");
+#else
+
+	sw = QIXIS_READ(brdcfg[0]);
+
+	switch (sw) {
+	case 0x00:
+		printf("Serial NOR flash\n");
+		break;
+	case 0x20:
+		printf("Serial NAND flash\n");
+		break;
+	case 0x60:
+		printf("QSPI Emulator\n");
+		break;
+	default:
+		printf("invalid setting of SW: 0x%x\n", sw);
+		break;
+	}
+#endif
+
+	printf("Sys ID: 0x%02x, Sys Ver: 0x%02x\n",
+	       QIXIS_READ(id), QIXIS_READ(arch));
+
+	printf("FPGA:  v%d (%s), build %d\n",
+	       (int)QIXIS_READ(scver), qixis_read_tag(buf),
+	       (int)qixis_read_minor());
+#endif
+
+	return 0;
+}
+#endif
+
 #ifdef CONFIG_TARGET_LS1028ARDB
 int checkboard1(void)
 {
diff --git a/configs/ls1028aqds_tfa_defconfig b/configs/ls1028aqds_tfa_defconfig
new file mode 100644
index 0000000..2a592a0
--- /dev/null
+++ b/configs/ls1028aqds_tfa_defconfig
@@ -0,0 +1,61 @@
+CONFIG_ARM=y
+CONFIG_TARGET_LS1028AQDS=y
+CONFIG_SYS_FSL_SDHC_CLK_DIV=1
+CONFIG_TFABOOT=y
+CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT=y
+CONFIG_SEC_FIRMWARE_ARMV8_PSCI=y
+CONFIG_AHCI=y
+CONFIG_DISTRO_DEFAULTS=y
+CONFIG_NR_DRAM_BANKS=2
+# CONFIG_SYS_MALLOC_F is not set
+CONFIG_FIT_VERBOSE=y
+CONFIG_OF_BOARD_SETUP=y
+CONFIG_OF_STDOUT_VIA_ALIAS=y
+CONFIG_BOOTDELAY=10
+CONFIG_USE_BOOTARGS=y
+CONFIG_BOOTARGS="console=ttyS0,115200 root=/dev/ram0 earlycon=uart8250,mmio,0x21c0500 ramdisk_size=0x2000000 default_hugepagesz=2m hugepagesz=2m hugepages=256 video=1920x1080-32 at 60 cma=256M"
+CONFIG_CMD_GREPENV=y
+CONFIG_CMD_GPT=y
+CONFIG_CMD_I2C=y
+CONFIG_CMD_MMC=y
+CONFIG_CMD_PCI=y
+CONFIG_CMD_SF=y
+CONFIG_CMD_USB=y
+# CONFIG_CMD_SETEXPR is not set
+CONFIG_CMD_CACHE=y
+CONFIG_OF_CONTROL=y
+CONFIG_DEFAULT_DEVICE_TREE="fsl-ls1028a-qds"
+CONFIG_ENV_IS_IN_MMC=y
+CONFIG_ENV_IS_IN_SPI_FLASH=y
+CONFIG_NET_RANDOM_ETHADDR=y
+CONFIG_NETCONSOLE=y
+CONFIG_DM=y
+CONFIG_SCSI_AHCI=y
+CONFIG_SATA_CEVA=y
+CONFIG_FSL_CAAM=y
+CONFIG_DM_MMC=y
+CONFIG_DM_SPI_FLASH=y
+CONFIG_SPI_FLASH=y
+CONFIG_SPI_FLASH_SPANSION=y
+CONFIG_SPI_FLASH_STMICRO=y
+# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
+CONFIG_PHYLIB=y
+CONFIG_PHY_ATHEROS=y
+CONFIG_DM_ETH=y
+CONFIG_PHY_GIGE=y
+CONFIG_E1000=y
+CONFIG_PCI=y
+CONFIG_DM_PCI=y
+CONFIG_DM_PCI_COMPAT=y
+CONFIG_PCIE_LAYERSCAPE=y
+CONFIG_SCSI=y
+CONFIG_DM_SCSI=y
+CONFIG_SYS_NS16550=y
+CONFIG_SPI=y
+CONFIG_DM_SPI=y
+CONFIG_FSL_DSPI=y
+CONFIG_USB=y
+CONFIG_DM_USB=y
+CONFIG_USB_XHCI_HCD=y
+CONFIG_USB_XHCI_DWC3=y
+CONFIG_EFI_LOADER_BOUNCE_BUFFER=y
diff --git a/include/configs/ls1028aqds.h b/include/configs/ls1028aqds.h
new file mode 100644
index 0000000..6e8862f
--- /dev/null
+++ b/include/configs/ls1028aqds.h
@@ -0,0 +1,206 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * Copyright 2019 NXP
+ */
+
+#ifndef __LS1028A_QDS_H
+#define __LS1028A_QDS_H
+
+#include "ls1028a_common.h"
+
+#define CONFIG_SYS_CLK_FREQ		100000000
+#define CONFIG_DDR_CLK_FREQ		100000000
+#define COUNTER_FREQUENCY_REAL		(CONFIG_SYS_CLK_FREQ/4)
+
+/* DDR */
+#define CONFIG_DDR_SPD
+#define CONFIG_DDR_ECC
+#define CONFIG_ECC_INIT_VIA_DDRCONTROLLER
+#define CONFIG_MEM_INIT_VALUE		0xdeadbeef
+#define SPD_EEPROM_ADDRESS1	0x51
+#define SPD_EEPROM_ADDRESS2	0x52
+#define CONFIG_SYS_SPD_BUS_NUM	0	/* SPD on I2C bus 0 */
+#define SPD_EEPROM_ADDRESS	SPD_EEPROM_ADDRESS1
+#define CONFIG_DIMM_SLOTS_PER_CTLR		2
+#define CONFIG_SYS_SDRAM_SIZE		0x80000000
+
+#define CONFIG_QIXIS_I2C_ACCESS
+#define CONFIG_SYS_I2C_EARLY_INIT
+
+/*
+ * QIXIS Definitions
+ */
+#define CONFIG_FSL_QIXIS
+
+#ifdef CONFIG_FSL_QIXIS
+#define QIXIS_BASE			0x7fb00000
+#define QIXIS_BASE_PHYS			QIXIS_BASE
+#define CONFIG_SYS_I2C_FPGA_ADDR	0x66
+#define QIXIS_LBMAP_SWITCH		1
+#define QIXIS_LBMAP_MASK		0x0f
+#define QIXIS_LBMAP_SHIFT		5
+#define QIXIS_LBMAP_DFLTBANK		0x00
+#define QIXIS_LBMAP_SD			0x00
+#define QIXIS_LBMAP_EMMC		0x00
+#define QIXIS_LBMAP_QSPI		0x00
+#define QIXIS_RCW_SRC_SD		0x8
+#define QIXIS_RCW_SRC_EMMC		0x9
+#define QIXIS_RCW_SRC_QSPI		0xf
+#define QIXIS_RST_CTL_RESET		0x31
+#define QIXIS_RCFG_CTL_RECONFIG_IDLE	0x20
+#define QIXIS_RCFG_CTL_RECONFIG_START	0x21
+#define QIXIS_RCFG_CTL_WATCHDOG_ENBLE	0x08
+#define QIXIS_RST_FORCE_MEM		0x01
+
+#define CONFIG_SYS_FPGA_CSPR_EXT	(0x0)
+#define CONFIG_SYS_FPGA_CSPR		(CSPR_PHYS_ADDR(QIXIS_BASE_PHYS) | \
+					CSPR_PORT_SIZE_8 | \
+					CSPR_MSEL_GPCM | \
+					CSPR_V)
+#define CONFIG_SYS_FPGA_AMASK		IFC_AMASK(64 * 1024)
+#define CONFIG_SYS_FPGA_CSOR		(CSOR_NOR_ADM_SHIFT(4) | \
+					CSOR_NOR_NOR_MODE_AVD_NOR | \
+					CSOR_NOR_TRHZ_80)
+
+/*
+ * QIXIS Timing parameters for IFC GPCM
+ */
+#define CONFIG_SYS_FPGA_FTIM0		(FTIM0_GPCM_TACSE(0xc) | \
+					FTIM0_GPCM_TEADC(0x20) | \
+					FTIM0_GPCM_TEAHC(0x10))
+#define CONFIG_SYS_FPGA_FTIM1		(FTIM1_GPCM_TACO(0x50) | \
+					FTIM1_GPCM_TRAD(0x1f))
+#define CONFIG_SYS_FPGA_FTIM2		(FTIM2_GPCM_TCS(0x8) | \
+					FTIM2_GPCM_TCH(0x8) | \
+					FTIM2_GPCM_TWP(0xf0))
+#define CONFIG_SYS_FPGA_FTIM3		0x0
+#endif
+
+/* RTC */
+#define CONFIG_SYS_RTC_BUS_NUM         1
+#define I2C_MUX_CH_RTC                 0xB
+
+/* FlexSPI */
+#ifdef CONFIG_NXP_FSPI
+#define NXP_FSPI_FLASH_SIZE            SZ_256M
+#define NXP_FSPI_FLASH_NUM              1
+#endif
+
+/* Store environment at top of flash */
+#define CONFIG_ENV_SIZE			0x2000
+
+#ifdef CONFIG_SPL_BUILD
+#define CONFIG_SYS_MONITOR_BASE CONFIG_SPL_TEXT_BASE
+#else
+#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_TEXT_BASE
+#endif
+
+/* SATA */
+#define CONFIG_SCSI_AHCI_PLAT
+
+#define CONFIG_SYS_SATA1			AHCI_BASE_ADDR1
+#ifndef CONFIG_CMD_EXT2
+#define CONFIG_CMD_EXT2
+#endif
+#define CONFIG_SYS_SCSI_MAX_SCSI_ID		1
+#define CONFIG_SYS_SCSI_MAX_LUN			1
+#define CONFIG_SYS_SCSI_MAX_DEVICE		(CONFIG_SYS_SCSI_MAX_SCSI_ID * \
+						CONFIG_SYS_SCSI_MAX_LUN)
+/* DSPI */
+#ifdef CONFIG_FSL_DSPI
+#define CONFIG_SPI_FLASH_SST
+#define CONFIG_SPI_FLASH_EON
+#endif
+
+#ifndef SPL_NO_ENV
+#undef CONFIG_EXTRA_ENV_SETTINGS
+#define CONFIG_EXTRA_ENV_SETTINGS		\
+	"board=ls1028aqds\0"			\
+	"hwconfig=fsl_ddr:bank_intlv=auto\0"	\
+	"ramdisk_addr=0x800000\0"		\
+	"ramdisk_size=0x2000000\0"		\
+	"fdt_high=0xffffffffffffffff\0"		\
+	"initrd_high=0xffffffffffffffff\0"	\
+	"fdt_addr=0x00f00000\0"                 \
+	"kernel_addr=0x01000000\0"              \
+	"scriptaddr=0x80000000\0"               \
+	"scripthdraddr=0x80080000\0"		\
+	"fdtheader_addr_r=0x80100000\0"         \
+	"kernelheader_addr_r=0x80200000\0"      \
+	"load_addr=0xa0000000\0"            \
+	"kernel_addr_r=0x81000000\0"            \
+	"fdt_addr_r=0x90000000\0"               \
+	"ramdisk_addr_r=0xa0000000\0"           \
+	"kernel_start=0x1000000\0"		\
+	"kernelheader_start=0x800000\0"		\
+	"kernel_load=0xa0000000\0"		\
+	"kernel_size=0x2800000\0"		\
+	"kernelheader_size=0x40000\0"		\
+	"kernel_addr_sd=0x8000\0"		\
+	"kernel_size_sd=0x14000\0"		\
+	"kernelhdr_addr_sd=0x4000\0"		\
+	"kernelhdr_size_sd=0x10\0"		\
+	"console=ttyS0,115200\0"                \
+	"mtdparts=" CONFIG_MTDPARTS_DEFAULT "\0"	\
+	BOOTENV					\
+	"boot_scripts=ls1028aqds_boot.scr\0"    \
+	"boot_script_hdr=hdr_ls1028aqds_bs.out\0"	\
+	"scan_dev_for_boot_part="               \
+		"part list ${devtype} ${devnum} devplist; "   \
+		"env exists devplist || setenv devplist 1; "  \
+		"for distro_bootpart in ${devplist}; do "     \
+		  "if fstype ${devtype} "                  \
+			"${devnum}:${distro_bootpart} "      \
+			"bootfstype; then "                  \
+			"run scan_dev_for_boot; "            \
+		  "fi; "                                   \
+		"done\0"                                   \
+	"scan_dev_for_boot="				  \
+		"echo Scanning ${devtype} "		  \
+				"${devnum}:${distro_bootpart}...; "  \
+		"for prefix in ${boot_prefixes}; do "	  \
+			"run scan_dev_for_scripts; "	  \
+		"done;"					  \
+		"\0"					  \
+	"boot_a_script="				  \
+		"load ${devtype} ${devnum}:${distro_bootpart} "  \
+			"${scriptaddr} ${prefix}${script}; "    \
+		"env exists secureboot && load ${devtype} "     \
+			"${devnum}:${distro_bootpart} "		\
+			"${scripthdraddr} ${prefix}${boot_script_hdr} " \
+			"&& esbc_validate ${scripthdraddr};"    \
+		"source ${scriptaddr}\0"	  \
+	"qspi_bootcmd=echo Trying load from flexspi..;"      \
+		"sf probe && sf read $load_addr "         \
+		"$kernel_start $kernel_size; env exists secureboot "	\
+		"&& sf read $kernelheader_addr_r $kernelheader_start "	\
+		"$kernelheader_size && esbc_validate ${kernelheader_addr_r}; " \
+		"bootm $load_addr#$board\0"		\
+	"qspi_hdploadcmd=echo Trying load HDP firmware from flexspi..;"      \
+		"hdp load 0x20900000 0x2000\0"		\
+	"sd_bootcmd=echo Trying load from SD ..;"	\
+		"mmcinfo; mmc read $load_addr "		\
+		"$kernel_addr_sd $kernel_size_sd && "	\
+		"env exists secureboot && mmc read $kernelheader_addr_r " \
+		"$kernelhdr_addr_sd $kernelhdr_size_sd "		\
+		" && esbc_validate ${kernelheader_addr_r};"	\
+		"bootm $load_addr#$board\0"		\
+	"sd_hdploadcmd=echo Trying load HDP firmware from SD..;"      \
+		"mmcinfo;mmc read $load_addr 0x4800 0x200 "		\
+		"&& hdp load $load_addr 0x2000\0"	\
+	"emmc_bootcmd=echo Trying load from EMMC ..;"	\
+		"mmcinfo; mmc dev 1; mmc read $load_addr "		\
+		"$kernel_addr_sd $kernel_size_sd && "	\
+		"env exists secureboot && mmc read $kernelheader_addr_r " \
+		"$kernelhdr_addr_sd $kernelhdr_size_sd "		\
+		" && esbc_validate ${kernelheader_addr_r};"	\
+		"bootm $load_addr#$board\0"			\
+	"emmc_hdploadcmd=echo Trying load HDP firmware from EMMC..;"      \
+		"mmc dev 1;mmcinfo;mmc read $load_addr 0x4800 0x200 "		\
+		"&& hdp load $load_addr 0x2000\0"
+#endif
+
+#ifdef CONFIG_SECURE_BOOT
+#include <asm/fsl_secure_boot.h>
+#endif
+#endif /* __LS1028A_QDS_H */
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [U-Boot] [PATCH 1/3] armv8: ls1028a: Add NXP LS1028A SoC support
  2019-03-18  9:45 [U-Boot] [PATCH 1/3] armv8: ls1028a: Add NXP LS1028A SoC support Bhaskar Upadhaya
  2019-03-18  9:45 ` [U-Boot] [PATCH 2/3] armv8: ls1028ardb: Add support for LS1028ARDB platform Bhaskar Upadhaya
  2019-03-18  9:45 ` [U-Boot] [PATCH 3/3] armv8: ls1028aqds: Add support of LS1028AQDS Bhaskar Upadhaya
@ 2019-03-22 10:32 ` Prabhakar Kushwaha
  2 siblings, 0 replies; 6+ messages in thread
From: Prabhakar Kushwaha @ 2019-03-22 10:32 UTC (permalink / raw)
  To: u-boot


> -----Original Message-----
> From: Bhaskar Upadhaya
> Sent: Monday, March 18, 2019 3:15 PM
> To: u-boot at lists.denx.de
> Cc: Prabhakar Kushwaha <prabhakar.kushwaha@nxp.com>; Sudhanshu
> Gupta <sudhanshu.gupta@nxp.com>; Harninder Rai
> <harninder.rai@nxp.com>; Rajesh Bhagat <rajesh.bhagat@nxp.com>
> Subject: [PATCH 1/3] armv8: ls1028a: Add NXP LS1028A SoC support
> 
> Overview
> ========
> 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
> 
> Frequency support:
>         Core: 1300 MHz, DDR: 1600 MT/s, Platform: 400 MHz [default]
>         Core: 800 MHz, DDR: 1300 MT/s, Platform: 400 MHz
> 
> SerDes protocol support:
>         SerDes1: 0x85bb [default]
>         SerDes2: 0x85be
> 
> Features Summary
> ================
> Two 32/64-bit Arm® v8 Cortex®-A72 CPUs
>         Arranged as a single cluster of two cores sharing a single 1 MB L2
>         cache Up to 1.3 GHz operation
>         Single-threaded cores with 32KB L1 data cache and 48KB L1 instruction
>         cache, Support for cluster power-gating
> 
> Cache coherent interconnect fabric (CCI-400)
>         Hardware managed data coherency
>         Up to 400 MHz operation
> 32-bit DDR3L/DDR4 SDRAM memory controller with ECC support
>         Up to 1.6 GT/s
>         Supports 32-bit and 16-bit operation
>         Accumulated mode ECC for 32-bit, 16-bit use
>         Supports DDR4 Pseudo-Open Drain mode
>         Support for x8 and x16 devices
> 
> LCD controller and DisplayPort/eDP interface
>         Supports DisplayPort 1.3 and eDP 1.4
>         Supports link transfer rate up to HBR2 (5.4 Gbit/s) and display
>         resolution up to 4Kp60
> 
> Graphics processing unit
>         Supports Geometry rate 100 Mtri/s and Pixel rate 650 Mpixel/s
>         Supports OpenGL ES 3.0, 2.0, 1.1
>         Supports OpenCL 1.2, 1.1
> 
> TSN-capable Ethernet Switch with four external ports
> 
> Ethernet Controller (ENETC) with TSN functionality
>         One RGMII interface
>         One 1G/2.5G SerDes-based interface with TSN support
> 
> Four SerDes lanes with two PLLs for high-speed peripheral interfaces
>         Two PCI Express 3.0 controllers
>         Serial ATA (SATA 6 Gbit/s) controller
>         Up to four SGMII interfaces supporting 1000 Mbps
>         Up to one QSGMII interface
>         Supports 1000Base-KX
>         Up to one 10G-SXGMII
>         Up to one 10G-QXGMII
> 
> Additional peripheral interfaces
>         Two high-speed USB 3.0 controllers with integrated PHY each supporting
>         host or device modes
>         Two enhanced secure digital host controllers (eSDHC) supporting SD 3.0,
>          eMMC 4.4, eMMC 4.5, and eMMC 5.1
>         Two controller area network (FlexCAN) modules, each optionally
>         supporting flexible datarate (FD)
>         Three serial peripheral interface (SPI) controllers
>         Flexible SPI interface (FlexSPI) controller with two 8-bit interfaces
>         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
>         Service processor (SP) provides pre-boot initialization and secure-boot
>         capabilities.256 KB On chip RAM for trusted accesses
>         One WatchDog timer per A72 core and one TrustZone WatchDog timer
> 
> Queue direct memory access controller (qDMA)
> 
> Enhanced direct memory access controller (eDMA)
> 
> Global programmable interrupt controller (GIC)
> 
> Arm generic timer
> 
> Thermal Monitor Unit (TMU)
> 
> Multimedia and audio support:
>         Resolution supported: 480p,720p,1080p, and 4K
>         Support audio on serial interfaces with frame synchronization
> 
> Time Sensitive Network (TSN) support:
>         TSN configuration tool (tsntool)
>         ENETC 1588 two steps timestamping support
>         ENETC TSN driver: Qbv, Qbu, Qci, Qav
>         SWITCH TSN driver: Qbv, Qci, Qbu, Qav, 802.1CB support
> 
> Signed-off-by: Sudhanshu Gupta <sudhanshu.gupta@nxp.com>
> Signed-off-by: Rai Harninder <harninder.rai@nxp.com>
> Signed-off-by: Rajesh Bhagat <rajesh.bhagat@nxp.com>
> Signed-off-by: Bhaskar Upadhaya <Bhaskar.Upadhaya@nxp.com>
> ---

Does this patch support all features as mentioned in description?
Description looks to be more marketing bulletin. 

Please add description based on supported features. 

>  arch/arm/cpu/armv8/fsl-layerscape/Kconfig          |  39 ++-
>  arch/arm/cpu/armv8/fsl-layerscape/Makefile         |   4 +
>  arch/arm/cpu/armv8/fsl-layerscape/cpu.c            |   1 +
>  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                      | 281 +++++++++++++++++++++
>  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  |  11 +
>  arch/arm/include/asm/arch-fsl-layerscape/soc.h     |   1 +
>  .../asm/arch-fsl-layerscape/stream_id_lsch3.h      |   2 +-
>  board/freescale/common/qixis.c                     |  38 +++
>  board/freescale/common/qixis.h                     |   2 +
>  13 files changed, 593 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..51e077c 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),
> diff --git a/arch/arm/cpu/armv8/fsl-layerscape/doc/README.soc
> b/arch/arm/cpu/armv8/fsl-layerscape/doc/README.soc
> index a0e2621..d82a96c 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..08deb22
> --- /dev/null
> +++ b/arch/arm/dts/fsl-ls1028a.dtsi
> @@ -0,0 +1,281 @@
> +// 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*/
> +			/* <0x0 0x20000000 0x0 0x4000000>;*/ /*How to
> incoperate 512M here*/

Please remove this comment if not valid?


> +		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>;
> +		clock-frequency = <0>;	/* Updated by bootloader */

This dts is to be consumed by boot loader. Either remove this entry or add frequency

> +		interrupts = <0 32 0x1>; /* edge triggered */
> +	};
> +
> +	serial1: serial at 21c0600 {
> +		device_type = "serial";
> +		compatible = "fsl,ns16550", "ns16550a";
> +		reg = <0x0 0x21c0600 0x0 0x100>;
> +		clock-frequency = <0>;	/* Updated by bootloader */
> +		interrupts = <0 32 0x1>; /* edge triggered */
> +	};


This dts is to be consumed by boot loader. Either remove this entry or add frequency

> +
> +	pcie at 3400000 {                  /* rcie_enetc   */
> +	       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 */
> +	};

This node is for enetc. Do we have enetc driver in upstream??

> +
> +	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 */
> +	};
> +
> +	enetc_pcie: pcie at 1f0000000 { /* rcie_enetc */
> +		compatible = "fsl,ls-enetc-rcie";
> +		reg= <0x01 0xf0000000 0x0 0x100000>;
> +		#address-cells = <3>;
> +		#size-cells = <2>;
> +		device_type = "pci";
> +		bus-range = <0x0 0x0>;
> +		/* PF0-6 BAR0 - non-prefetchable memory */
> +		ranges= <0x82000000 0x0 0x00000000 0x1 0xf8000000 0x0
> 0x160000>;
> +	};
> +

This node is for enetc. Do we have enetc driver in upstream??

> +	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>;
> +	};
> +
> +	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>;
> +	};
> +
> +	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>;
> +	};
> +
> +	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>;
> +	};
> +
> +	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>;
> +	};
> +
> +	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>;
> +	};
> +
> +	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>;
> +	};
> +
> +	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>;
> +	};
> +
> +	usb1: usb3 at 3100000 {
> +		compatible = "fsl,layerscape-dwc3";
> +		reg = <0x0 0x3100000 0x0 0x10000>;
> +		interrupts = <0 80 0x4>;
> +		dr_mode = "host";
> +	};
> +
> +	usb2: usb3 at 3110000 {
> +		compatible = "fsl,layerscape-dwc3";
> +		reg = <0x0 0x3110000 0x0 0x10000>;
> +		interrupts = <0 81 0x4>;
> +		dr_mode = "host";
> +	};
> +
> +	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>;
> +	};
> +
> +	esdhc1: esdhc at 2150000 {
> +		compatible = "fsl,esdhc";
> +		reg = <0x0 0x2150000 0x0 0x10000>;
> +		interrupts = <0 63 0x4>;
> +		big-endian;
> +		non-removable;
> +		bus-width = <4>;
> +	};
> +
> +	sata: sata at 3200000 {
> +		compatible = "fsl,ls1028a-ahci";
> +		reg = <0x0 0x3200000 0x0 0x10000>;
> +		interrupts = <0 133 4>;
> +		clocks = <&clockgen 4 1>;
> +		status = "disabled";
> +	      };
> +
> +};

Why some nodes are not having 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,


Why cannot existing SGMII number be used?

> +	SXGMII1,
> +	SXGMII2,
> +	SXGMII3,
> +	SXGMII4,
> +	QXGMII1,
> +	QXGMII2,
> +	QXGMII3,
> +	QXGMII4,
>  	_25GE1,
>  	_25GE2,
>  	_25GE3,

Please add some details of new enum value in message description.


> 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..2cd6bb4 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,11 @@
>  #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
> +#define CONFIG_SYS_PCIE3_PHYS_ADDR		0x1400000000ULL
> +#define CONFIG_SYS_PCIE4_PHYS_ADDR		0x1600000000ULL

LS1028A has 2 PCIe controller, Why you have added 4 entreies?


>  #else
>  #define CONFIG_SYS_PCIE1_PHYS_ADDR		0x1000000000ULL
>  #define CONFIG_SYS_PCIE2_PHYS_ADDR		0x1200000000ULL
> @@ -375,6 +380,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
> diff --git a/board/freescale/common/qixis.c
> b/board/freescale/common/qixis.c index f1b98bc..59337ef 100644
> --- a/board/freescale/common/qixis.c
> +++ b/board/freescale/common/qixis.c

> @@ -50,6 +50,17 @@ void qixis_write(unsigned int reg, u8 value)  }  #endif
> 
> +bool qixis_read_released(void)
> +{
> +	bool released;
> +
> +	/* this data is in little endian */
> +	QIXIS_WRITE(tagdata, 0xc);
> +	released = QIXIS_READ(tagdata);
> +
> +	return released;
> +}
> +
>  u16 qixis_read_minor(void)
>  {
>  	u16 minor;
> @@ -63,6 +74,27 @@ u16 qixis_read_minor(void)
>  	return minor;
>  }
> 
> +char *qixis_read_date(char *buf)
> +{
> +	int i;
> +	time_t time = 0;
> +	struct tm t;
> +	char *ptr = buf;
> +
> +	/* timestamp is in 32-bit big endian */
> +	for (i = 8; i <= 11; i++) {
> +		QIXIS_WRITE(tagdata, i);
> +		time =  (time << 8) + QIXIS_READ(tagdata);
> +	}
> +
> +	localtime_r(&time, &t);
> +	sprintf(ptr, "%4d_%02d%02d_%02d%02d",
> +		t.tm_year + 1900,
> +		t.tm_mon + 1, t.tm_mday, t.tm_hour, t.tm_min);
> +
> +	return buf;
> +}
> +
>  char *qixis_read_time(char *result)
>  {
>  	time_t time = 0;
> @@ -142,11 +174,13 @@ static void qixis_reset(void)
>  	QIXIS_WRITE(rst_ctl, QIXIS_RST_CTL_RESET);  }
> 
> +#ifdef QIXIS_LBMAP_ALTBANK
>  static void qixis_bank_reset(void)
>  {
>  	QIXIS_WRITE(rcfg_ctl, QIXIS_RCFG_CTL_RECONFIG_IDLE);
>  	QIXIS_WRITE(rcfg_ctl, QIXIS_RCFG_CTL_RECONFIG_START);  }
> +#endif
> 
>  static void __maybe_unused set_lbmap(int lbmap)  { @@ -210,8 +244,12
> @@ static int qixis_reset_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char *
> const ar
>  		set_lbmap(QIXIS_LBMAP_DFLTBANK);
>  		qixis_reset();
>  	} else if (strcmp(argv[1], "altbank") == 0) {
> +#ifdef QIXIS_LBMAP_ALTBANK
>  		set_lbmap(QIXIS_LBMAP_ALTBANK);
>  		qixis_bank_reset();
> +#else
> +		printf("No Altbank!\n");
> +#endif
>  	} else if (strcmp(argv[1], "nand") == 0) {  #ifdef QIXIS_LBMAP_NAND
>  		QIXIS_WRITE(rst_ctl, 0x30);

This change(qixic.c) should be out of SoC changes. It should be separate patch other than RDB and QDS.
Also there are mutiple changes are in one patch. Try to provide different patch

--pk

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [U-Boot] [PATCH 2/3] armv8: ls1028ardb: Add support for LS1028ARDB platform
  2019-03-18  9:45 ` [U-Boot] [PATCH 2/3] armv8: ls1028ardb: Add support for LS1028ARDB platform Bhaskar Upadhaya
@ 2019-03-22 10:52   ` Prabhakar Kushwaha
  0 siblings, 0 replies; 6+ messages in thread
From: Prabhakar Kushwaha @ 2019-03-22 10:52 UTC (permalink / raw)
  To: u-boot


> -----Original Message-----
> From: Bhaskar Upadhaya
> Sent: Monday, March 18, 2019 3:15 PM
> To: u-boot at lists.denx.de
> Cc: Prabhakar Kushwaha <prabhakar.kushwaha@nxp.com>; Sudhanshu
> Gupta <sudhanshu.gupta@nxp.com>; Harninder Rai
> <harninder.rai@nxp.com>; Rajesh Bhagat <rajesh.bhagat@nxp.com>
> Subject: [PATCH 2/3] armv8: ls1028ardb: Add support for LS1028ARDB
> platform
> 
> LS1028A is an ARMv8 implementation. LS1028ARDB is an evaluatoin platform
> that supports the LS1028A family SoCs. This patch add basic support of the
> platform.
> 
> Signed-off-by: Sudhanshu Gupta <sudhanshu.gupta@nxp.com>
> Signed-off-by: Rai Harninder <harninder.rai@nxp.com>
> Signed-off-by: Rajesh Bhagat <rajesh.bhagat@nxp.com>
> Signed-off-by: Bhaskar Upadhaya <Bhaskar.Upadhaya@nxp.com>
> ---
>  arch/arm/Kconfig                    |  12 ++
>  arch/arm/cpu/armv8/Kconfig          |   1 +
>  arch/arm/dts/fsl-ls1028a-rdb.dts    |  20 +++
>  board/freescale/ls1028a/Kconfig     |  38 +++++
>  board/freescale/ls1028a/MAINTAINERS |   9 ++
>  board/freescale/ls1028a/Makefile    |   8 +
>  board/freescale/ls1028a/README      |  85 +++++++++++
>  board/freescale/ls1028a/ddr.c       | 284
> ++++++++++++++++++++++++++++++++++
>  board/freescale/ls1028a/ddr.h       |  46 ++++++
>  board/freescale/ls1028a/ls1028a.c   | 251
> ++++++++++++++++++++++++++++++
>  configs/ls1028ardb_tfa_defconfig    |  61 ++++++++
>  include/configs/ls1028a_common.h    | 295
> ++++++++++++++++++++++++++++++++++++
>  include/configs/ls1028ardb.h        |  98 ++++++++++++
>  13 files changed, 1208 insertions(+)
>  create mode 100644 arch/arm/dts/fsl-ls1028a-rdb.dts  create mode 100644
> board/freescale/ls1028a/Kconfig  create mode 100644
> board/freescale/ls1028a/MAINTAINERS
>  create mode 100644 board/freescale/ls1028a/Makefile  create mode 100644
> board/freescale/ls1028a/README  create mode 100644
> board/freescale/ls1028a/ddr.c  create mode 100644
> board/freescale/ls1028a/ddr.h  create mode 100644
> board/freescale/ls1028a/ls1028a.c  create mode 100644
> configs/ls1028ardb_tfa_defconfig  create mode 100644
> include/configs/ls1028a_common.h  create mode 100644
> include/configs/ls1028ardb.h
> 
> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index f42ecce..aaaf36a
> 100644
> --- a/arch/arm/Kconfig
> +++ b/arch/arm/Kconfig
> @@ -1203,6 +1203,17 @@ config TARGET_LS1012AFRDM
>  	  development platform that supports the QorIQ LS1012A
>  	  Layerscape Architecture processor.
> 
> +config TARGET_LS1028ARDB
> +	bool "Support ls1028ardb"
> +	select ARCH_LS1028A
> +	select ARM64
> +	select ARMV8_MULTIENTRY
> +	help
> +	  Support for Freescale LS1028ARDB platform
> +	  The LS1028A Development System (RDB) is a high-performance
> +	  development platform that supports the QorIQ LS1028A
> +	  Layerscape Architecture processor.
> +
>  config TARGET_LS1088ARDB
>  	bool "Support ls1088ardb"
>  	select ARCH_LS1088A
> @@ -1585,6 +1596,7 @@ source "board/freescale/ls2080a/Kconfig"
>  source "board/freescale/ls2080aqds/Kconfig"
>  source "board/freescale/ls2080ardb/Kconfig"
>  source "board/freescale/ls1088a/Kconfig"
> +source "board/freescale/ls1028a/Kconfig"
>  source "board/freescale/ls1021aqds/Kconfig"
>  source "board/freescale/ls1043aqds/Kconfig"
>  source "board/freescale/ls1021atwr/Kconfig"
> diff --git a/arch/arm/cpu/armv8/Kconfig b/arch/arm/cpu/armv8/Kconfig
> index f053603..a4fa63b 100644
> --- a/arch/arm/cpu/armv8/Kconfig
> +++ b/arch/arm/cpu/armv8/Kconfig
> @@ -104,6 +104,7 @@ config PSCI_RESET
>  		   !TARGET_LS1012ARDB && !TARGET_LS1012AFRDM && \
>  		   !TARGET_LS1012A2G5RDB && !TARGET_LS1012AQDS && \
>  		   !TARGET_LS1012AFRWY && \
> +		   !TARGET_LS1028ARDB && \
>  		   !TARGET_LS1043ARDB && !TARGET_LS1043AQDS && \
>  		   !TARGET_LS1046ARDB && !TARGET_LS1046AQDS && \
>  		   !TARGET_LS2081ARDB && !TARGET_LX2160ARDB && \ diff -
> -git a/arch/arm/dts/fsl-ls1028a-rdb.dts b/arch/arm/dts/fsl-ls1028a-rdb.dts
> new file mode 100644
> index 0000000..b9adb61
> --- /dev/null
> +++ b/arch/arm/dts/fsl-ls1028a-rdb.dts
> @@ -0,0 +1,20 @@
> +// SPDX-License-Identifier: GPL-2.0+ OR X11
> +/*
> + * NXP ls1028ARDB device tree source
> + *
> + * Copyright 2018-2019 NXP

Strange, SoC dtsi is having 2019 copyright and board file having 2018-2019.

Please correct it. 

> + *
> + */
> +
> +/dts-v1/;
> +
> +#include "fsl-ls1028a.dtsi"
> +
> +/ {
> +	model = "NXP Layerscape 1028a RDB Board";
> +	compatible = "fsl,ls1028a-rdb", "fsl,ls1028a"; };
> +
> +&sata {
> +	status = "okay";
> +};

You may have to update this dts based on adding "status" filed in soc dtsi file. 


> diff --git a/board/freescale/ls1028a/Kconfig
> b/board/freescale/ls1028a/Kconfig new file mode 100644 index
> 0000000..f4733c2
> --- /dev/null
> +++ b/board/freescale/ls1028a/Kconfig
> @@ -0,0 +1,38 @@
> +if TARGET_LS1028ARDB
> +
> +config SYS_BOARD
> +	default "ls1028a"
> +
> +config SYS_VENDOR
> +	default "freescale"
> +
> +config SYS_SOC
> +	default "fsl-layerscape"
> +
> +config SYS_CONFIG_NAME
> +	default "ls1028ardb"
> +
> +config EMMC_BOOT
> +	bool "Support for booting from EMMC"
> +	default n
> +
> +config SYS_TEXT_BASE
> +	default 0x96000000 if SD_BOOT || EMMC_BOOT
> +	default 0x82000000 if TFABOOT
> +	default 0x20100000
> +
> +if FSL_LS_PPA
> +config SYS_LS_PPA_FW_ADDR
> +	hex "PPA Firmware Addr"
> +	default 0x20400000 if SYS_LS_PPA_FW_IN_XIP && ARCH_LS1028A
> +	default 0x400000 if SYS_LS_PPA_FW_IN_MMC && ARCH_LS1028A if
> +CHAIN_OF_TRUST config SYS_LS_PPA_ESBC_ADDR
> +	hex "PPA header Addr"
> +	default 0x20600000 if SYS_LS_PPA_FW_IN_XIP && ARCH_LS1028A
> endif endif
> +
> +source "board/freescale/common/Kconfig"
> +
> +endif
> diff --git a/board/freescale/ls1028a/MAINTAINERS
> b/board/freescale/ls1028a/MAINTAINERS
> new file mode 100644
> index 0000000..f4990a2
> --- /dev/null
> +++ b/board/freescale/ls1028a/MAINTAINERS
> @@ -0,0 +1,9 @@
> +LS1028ARDB BOARD
> +M:	Sudhanshu Gupta <sudhanshu.gupta@nxp.com>
> +M:	Rai Harninder <harninder.rai@nxp.com>
> +M:	Rajesh Bhagat <rajesh.bhagat@nxp.com>

Is patch sender not a maintainer??

> +S:	Maintained
> +F:	board/freescale/ls1028a/
> +F:	include/configs/ls1028a_common.h
> +F:	include/configs/ls1028ardb.h
> +F:	configs/ls1028ardb_tfa_defconfig
> diff --git a/board/freescale/ls1028a/Makefile
> b/board/freescale/ls1028a/Makefile
> new file mode 100644
> index 0000000..2d1e92f
> --- /dev/null
> +++ b/board/freescale/ls1028a/Makefile
> @@ -0,0 +1,8 @@
> +#
> +# Copyright 2018 NXP

Update copyright

> +#
> +# SPDX-License-Identifier:	GPL-2.0+
> +#
> +
> +obj-y += ls1028a.o
> +obj-y += ddr.o
> diff --git a/board/freescale/ls1028a/README
> b/board/freescale/ls1028a/README new file mode 100644 index
> 0000000..a3ce859
> --- /dev/null
> +++ b/board/freescale/ls1028a/README
> @@ -0,0 +1,85 @@
> +Overview
> +--------
> +The LS1028A Reference Design (RDB) is a high-performance computing,
> +evaluation, and development platform that supports ARM SoC LS1028A and
> +its derivatives.
> +
> +LS1028A SoC Overview
> +--------------------------------------
> +Please refer arch/arm/cpu/armv8/fsl-layerscape/doc/README.soc
> +
> +RDB Default Switch Settings (1: ON; 0: OFF)
> +-------------------------------------------
> +For SD Boot
> +SW2: 10001000
> +SW3: 01110000
> +SW5: 00100000
> +
> +For FlexSPI Boot
> +SW2: 11111000
> +SW3: 01110000
> +SW5: 00100000
> +

flexSPI driver is not upstream. This info should be removed. 


> +LS1028ARDB board Overview
> +-------------------------
> +Processor
> + Two Arm Cortex- A72 processor cores:
> +  - Based on 64-bit ARMv8 architecture
> +  - Up to 1.3 GHz operation
> +  - Single-threaded cores with 48 KB L1 instruction cache and 32 KB L1
> +    data cache
> +  - Arranged as a single cluster of two cores sharing a single 1 MB L2
> +    cache
> +DDR memory
> +  - Five onboard 1G x8 discrete memory modules (Four data byte lanes
> +    ECC)
> +  - 32-bit data and 4-bit ECC
> +  - One chip select
> +  - Data transfer rates of up to 1.6 GT/s
> +  - Single-bit error correction and double-bit error detection ECC (4-bit
> +    check word across 32-bit data)
> +High-speed serial ports(SerDes)
> + - Lane 0: Supports one 1 GbE RJ45 SGMII, connected through the
> +   Qualcomm AR8033 PHY
> + - Lane 1: Supports four 1.25 GbE RJ45 QSGMII, each connected
> +   through the NXP F104S8A PHY
> + - Lane 2: Connects to one PCIe M.2 Key-E slot to support PCIe Gen3
> +   (8 Gbit/s) cards
> + - Lane 3: Connects to one PCIe M.2 Key-E slot or one SATA M.2 Key-B
> +   slot through a register mux to support either PCIe Gen 3 (8 Gbit/s) or
> +   SATA Gen 3 cards (6 Gbit/s) at a time eSDHC
> + - eSDHC1, eSDHC2
> +SPI
> + - Connects to two mikroBUS sockets to support mikro-click modules,
> +   such as Bluetooth 4.0, 2.4 GHz IEEE 802.15.4 radio transceiver, near
> +   field communications (NFC) controller Octal SPI (XSPI)
> + - One 256 MB onboard XSPI serial NOR flash memory
> + - One 512 MB onboard XSPI serial NAND flash memory
> + - Supports a QSPI emulator for offboard QSPI emulation I2C
> + - All system devices are accessed via I2C1, which is multiplexed on
> +   I2C multiplexer PCA9848 to isolate address conflicts and reduce
> +   capacitive load
> + - I2C1 is used for EEPROMs, RTC, INA220 current-power sensor,
> +   thermal monitor, PCIe/SATA M.2 connectors and mikro-click modules
> +   1 and 2
> +CAN
> + - The two CAN DB9 ports can support CAN FD fast phase at data rates of
> +   up to 5 Mbit/s
> +Serial audio interface(SAI)
> + - Audio codec SGTL5000 provides headphone and audio LINEOUT for
> +   stereo speakers
> + - IEEE1588 interface to support audio on SAI4
> +
> +FlexSPI flash memory map valid for both QDS and RDB
> +  Image                               Flash Offset
> + RCW+PBI                             0x00000000
> + Boot firmware (U-Boot)              0x00100000
> + Boot firmware Environment           0x00300000
> + PPA firmware                        0x00400000
> + DPAA2 MC                            0x00A00000
> + DPAA2 DPL                           0x00D00000
> + DPAA2 DPC                           0x00E00000
> + Kernel.itb                          0x01000000

flexSPI memory map should not be there. There is no flexSPI driver

> diff --git a/board/freescale/ls1028a/ddr.c b/board/freescale/ls1028a/ddr.c
> new file mode 100644 index 0000000..bb342dc
> --- /dev/null
> +++ b/board/freescale/ls1028a/ddr.c
> @@ -0,0 +1,284 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +/*
> + * Copyright 2019 NXP
> + */
> +
> +#include <common.h>
> +#include <fsl_ddr_sdram.h>
> +#include <fsl_ddr_dimm_params.h>
> +#include <asm/arch/soc.h>
> +#include <asm/arch/clock.h>
> +#include <asm/io.h>
> +#include "ddr.h"
> +
> +DECLARE_GLOBAL_DATA_PTR;
> +
> +void fsl_ddr_board_options(memctl_options_t *popts,
> +			   dimm_params_t *pdimm,
> +			   unsigned int ctrl_num)
> +{
> +	const struct board_specific_parameters *pbsp, *pbsp_highest =
> NULL;
> +	ulong ddr_freq;
> +
> +	if (ctrl_num > 1) {
> +		printf("Not supported controller number %d\n", ctrl_num);
> +		return;
> +	}
> +	if (!pdimm->n_ranks)
> +		return;
> +
> +	pbsp = udimms[0];
> +
> +	/* Get clk_adjust, wrlvl_start, wrlvl_ctl, according to the board ddr
> +	 * freqency and n_banks specified in board_specific_parameters
> table.
> +	 */
> +	ddr_freq = get_ddr_freq(0) / 1000000;
> +	while (pbsp->datarate_mhz_high) {
> +		if (pbsp->n_ranks == pdimm->n_ranks) {
> +			if (ddr_freq <= pbsp->datarate_mhz_high) {
> +				popts->clk_adjust = pbsp->clk_adjust;
> +				popts->wrlvl_start = pbsp->wrlvl_start;
> +				popts->wrlvl_ctl_2 = pbsp->wrlvl_ctl_2;
> +				popts->wrlvl_ctl_3 = pbsp->wrlvl_ctl_3;
> +				popts->cpo_override = pbsp->cpo_override;
> +				popts->write_data_delay =
> +					pbsp->write_data_delay;
> +				goto found;
> +			}
> +			pbsp_highest = pbsp;
> +		}
> +		pbsp++;
> +	}
> +
> +	if (pbsp_highest) {
> +		printf("Error: board specific timing not found for %lu
> MT/s\n",
> +		       ddr_freq);
> +		printf("Trying to use the highest speed (%u) parameters\n",
> +		       pbsp_highest->datarate_mhz_high);
> +		popts->clk_adjust = pbsp_highest->clk_adjust;
> +		popts->wrlvl_start = pbsp_highest->wrlvl_start;
> +		popts->wrlvl_ctl_2 = pbsp->wrlvl_ctl_2;
> +		popts->wrlvl_ctl_3 = pbsp->wrlvl_ctl_3;
> +	} else {
> +		panic("DIMM is not supported by this board");
> +	}
> +found:
> +	debug("Found timing match: n_ranks %d, data rate %d, rank_gb
> %d\n",
> +	      pbsp->n_ranks, pbsp->datarate_mhz_high, pbsp->rank_gb);
> +
> +	/* force DDR bus width to 32 bits */
> +	popts->data_bus_width = 1;
> +	popts->otf_burst_chop_en = 0;
> +	popts->burst_length = DDR_BL8;
> +	popts->bstopre = 0;		/* enable auto precharge */
> +
> +	/*
> +	 * Factors to consider for half-strength driver enable:
> +	 *	- number of DIMMs installed
> +	 */
> +	popts->half_strength_driver_enable = 1;
> +	/*
> +	 * Write leveling override
> +	 */
> +	popts->wrlvl_override = 1;
> +	popts->wrlvl_sample = 0xf;
> +
> +	/*
> +	 * Rtt and Rtt_WR override
> +	 */
> +	popts->rtt_override = 0;
> +
> +	/* Enable ZQ calibration */
> +	popts->zq_en = 1;
> +
> +#ifdef CONFIG_SYS_FSL_DDR4
> +	popts->ddr_cdr1 = DDR_CDR1_DHC_EN |
> DDR_CDR1_ODT(DDR_CDR_ODT_80ohm);
> +	popts->ddr_cdr2 = DDR_CDR2_ODT(DDR_CDR_ODT_80ohm) |
> +			  DDR_CDR2_VREF_OVRD(70);	/* Vref = 70% */
> +
> +	/* optimize cpo for erratum A-009942 */
> +	popts->cpo_sample = 0x46;
> +#else
> +	popts->cswl_override = DDR_CSWL_CS0;
> +
> +	/* DHC_EN =1, ODT = 75 Ohm */
> +	popts->ddr_cdr1 = DDR_CDR1_DHC_EN |
> DDR_CDR1_ODT(DDR_CDR_ODT_75ohm);
> +	popts->ddr_cdr2 = DDR_CDR2_ODT(DDR_CDR_ODT_75ohm); #endif

Does this board support DDR3. If not remove else part


> }
> +
> +#ifdef CONFIG_TARGET_LS1028ARDB
> +#ifdef CONFIG_SYS_DDR_RAW_TIMING
> +/* MT40A1G8SA-075:E */
> +dimm_params_t ddr_raw_timing = {
> +	.n_ranks = 1,
> +	.rank_density = 4294967296u,
> +	.capacity = 4294967296u,
> +	.primary_sdram_width = 32,
> +	.ec_sdram_width = 4,
> +	.registered_dimm = 0,
> +	.mirrored_dimm = 0,
> +	.n_row_addr = 16,
> +	.n_col_addr = 10,
> +	.bank_addr_bits = 0,
> +	.bank_group_bits = 2,
> +	.edc_config = 2,
> +	.burst_lengths_bitmask = 0x0c,
> +
> +	.tckmin_x_ps = 750,
> +	.tckmax_ps = 1900,
> +	.caslat_x = 0x0001FFE00,
> +	.taa_ps = 13500,
> +	.trcd_ps = 13500,
> +	.trp_ps = 13500,
> +	.tras_ps = 32000,
> +	.trc_ps = 45500,
> +	.trfc1_ps = 350000,
> +	.trfc2_ps = 260000,
> +	.trfc4_ps = 160000,
> +	.tfaw_ps = 21000,
> +	.trrds_ps = 3000,
> +	.trrdl_ps = 4900,
> +	.tccdl_ps = 5000,
> +	.refresh_rate_ps = 7800000,
> +	.dq_mapping[0] = 0x16,
> +	.dq_mapping[1] = 0x36,
> +	.dq_mapping[2] = 0x16,
> +	.dq_mapping[3] = 0x36,
> +	.dq_mapping[4] = 0x16,
> +	.dq_mapping[5] = 0x36,
> +	.dq_mapping[6] = 0x16,
> +	.dq_mapping[7] = 0x36,
> +	.dq_mapping[8] = 0x16,
> +	.dq_mapping[9] = 0x0,
> +	.dq_mapping[10] = 0x0,
> +	.dq_mapping[11] = 0x0,
> +	.dq_mapping[12] = 0x0,
> +	.dq_mapping[13] = 0x0,
> +	.dq_mapping[14] = 0x0,
> +	.dq_mapping[15] = 0x0,
> +	.dq_mapping[16] = 0x0,
> +	.dq_mapping[17] = 0x0,
> +	.dq_mapping_ors = 0,
> +};
> +
> +int fsl_ddr_get_dimm_params(dimm_params_t *pdimm,
> +			    unsigned int controller_number,
> +			    unsigned int dimm_number)
> +{
> +	static const char dimm_model[] = "Fixed DDR on board";
> +
> +	if ((controller_number == 0) && (dimm_number == 0)) {
> +		memcpy(pdimm, &ddr_raw_timing,
> sizeof(dimm_params_t));
> +		memset(pdimm->mpart, 0, sizeof(pdimm->mpart));
> +		memcpy(pdimm->mpart, dimm_model,
> sizeof(dimm_model) - 1);
> +	}
> +
> +	return 0;
> +}
> +#else
> +static phys_size_t fixed_sdram(void)
> +{
> +	size_t ddr_size;
> +
> +#if defined(CONFIG_SPL_BUILD) || !defined(CONFIG_SPL)
> +	fsl_ddr_cfg_regs_t ddr_cfg_regs = {
> +		.cs[0].bnds		= 0x000000ff,
> +		.cs[0].config		= 0x80040422,
> +		.cs[0].config_2		= 0,
> +		.cs[1].bnds		= 0,
> +		.cs[1].config		= 0,
> +		.cs[1].config_2		= 0,
> +
> +		.timing_cfg_3		= 0x01111000,
> +		.timing_cfg_0		= 0xd0550018,
> +		.timing_cfg_1		= 0xFAFC0C42,
> +		.timing_cfg_2		= 0x0048c114,
> +		.ddr_sdram_cfg		= 0xe50c000c,
> +		.ddr_sdram_cfg_2	= 0x00401110,
> +		.ddr_sdram_mode		= 0x01010230,
> +		.ddr_sdram_mode_2	= 0x0,
> +
> +		.ddr_sdram_md_cntl	= 0x0600001f,
> +		.ddr_sdram_interval	= 0x18600618,
> +		.ddr_data_init		= 0xdeadbeef,
> +
> +		.ddr_sdram_clk_cntl	= 0x02000000,
> +		.ddr_init_addr		= 0,
> +		.ddr_init_ext_addr	= 0,
> +
> +		.timing_cfg_4		= 0x00000002,
> +		.timing_cfg_5		= 0x07401400,
> +		.timing_cfg_6		= 0x0,
> +		.timing_cfg_7		= 0x23300000,
> +
> +		.ddr_zq_cntl		= 0x8A090705,
> +		.ddr_wrlvl_cntl		= 0x86550607,
> +		.ddr_sr_cntr		= 0,
> +		.ddr_sdram_rcw_1	= 0,
> +		.ddr_sdram_rcw_2	= 0,
> +		.ddr_wrlvl_cntl_2	= 0x0708080A,
> +		.ddr_wrlvl_cntl_3	= 0x0A0B0C09,
> +
> +		.ddr_sdram_mode_9	= 0x00000400,
> +		.ddr_sdram_mode_10	= 0x04000000,
> +
> +		.timing_cfg_8		= 0x06115600,
> +
> +		.dq_map_0		= 0x5b65b658,
> +		.dq_map_1		= 0xd96d8000,
> +		.dq_map_2		= 0,
> +		.dq_map_3		= 0x01600000,
> +
> +		.ddr_cdr1		= 0x80040000,
> +		.ddr_cdr2		= 0x000000C1
> +	};
> +
> +	fsl_ddr_set_memctl_regs(&ddr_cfg_regs, 0, 0); #endif
> +	ddr_size = 1ULL << 32;
> +
> +	return ddr_size;
> +}

Can we remove above mentioned magic numbers. 


> +#endif	/* CONFIG_SYS_DDR_RAW_TIMING */
> +#endif
> +
> +#ifdef CONFIG_TFABOOT
> +int fsl_initdram(void)
> +{
> +	gd->ram_size = tfa_get_dram_size();
> +
> +	if (!gd->ram_size)
> +#ifdef CONFIG_TARGET_LS1028ARDB
> +		gd->ram_size = 1ULL << 32;

Why this is hardcoded for RDB?

> +#else
> +		gd->ram_size = fsl_ddr_sdram_size();
> +#endif
> +	return 0;
> +}
> +#else
> +int fsl_initdram(void)
> +{
> +#ifdef CONFIG_TARGET_LS1028ARDB
> +#if defined(CONFIG_SPL) && !defined(CONFIG_SPL_BUILD)
> +	gd->ram_size = 1ULL << 32;
> +#else
> +#ifdef CONFIG_SYS_DDR_RAW_TIMING
> +	puts("Initializing DDR....\n");
> +	gd->ram_size = fsl_ddr_sdram();
> +#else
> +	puts("Initializing DDR....using fixed timing\n");
> +	gd->ram_size = fixed_sdram();
> +#endif	/* CONFIG_SYS_DDR_RAW_TIMING */
> +#endif
> +#else
> +#if defined(CONFIG_SPL) && !defined(CONFIG_SPL_BUILD)
> +	gd->ram_size = fsl_ddr_sdram_size();
> +#else
> +	puts("Initializing DDR....using SPD\n");
> +	gd->ram_size = fsl_ddr_sdram();
> +#endif
> +#endif /* !CONFIG_TARGET_LS1028ARDB */
> +	return 0;
> +}
> +#endif	/* CONFIG_TFABOOT */

Lot of changes in one file to support QDS and RDB.
Suggest to split files as ddr_rdb.c and ddr_qds.c for clarity. 


> diff --git a/board/freescale/ls1028a/ddr.h b/board/freescale/ls1028a/ddr.h
> new file mode 100644 index 0000000..aae54e7
> --- /dev/null
> +++ b/board/freescale/ls1028a/ddr.h
> @@ -0,0 +1,46 @@
> +/* SPDX-License-Identifier: GPL-2.0+ */
> +/*
> + * Copyright 2019 NXP
> + */
> +
> +#ifndef __DDR_H__
> +#define __DDR_H__
> +
> +struct board_specific_parameters {
> +	u32 n_ranks;
> +	u32 datarate_mhz_high;
> +	u32 rank_gb;
> +	u32 clk_adjust;
> +	u32 wrlvl_start;
> +	u32 wrlvl_ctl_2;
> +	u32 wrlvl_ctl_3;
> +	u32 cpo_override;
> +	u32 write_data_delay;
> +	u32 force_2t;
> +};
> +
> +/*
> + * These tables contain all valid speeds we want to override with board
> + * specific parameters. datarate_mhz_high values need to be in
> +ascending order
> + * for each n_ranks group.
> + */
> +static const struct board_specific_parameters udimm0[] = {
> +	/*
> +	 * memory controller 0
> +	 *   num|  hi| rank|  clk| wrlvl |   wrlvl   |  wrlvl | cpo  |wrdata|2T
> +	 * ranks| mhz| GB  |adjst| start |   ctl2    |  ctl3  |      |delay |
> +	 */
> +#ifdef CONFIG_TARGET_LS1028ARDB
> +	{1,  1666, 0,  8,     5, 0x06070700, 0x00000008,},
> +#else
> +	{2,  1666, 0,  8,     8, 0x090a0b00, 0x0000000c,},
> +	{1,  1666, 0,  8,     8, 0x090a0b00, 0x0000000c,},
> +#endif
> +	{}
> +};
> +
> +static const struct board_specific_parameters *udimms[] = {
> +	udimm0,
> +};
> +
> +#endif
> diff --git a/board/freescale/ls1028a/ls1028a.c
> b/board/freescale/ls1028a/ls1028a.c
> new file mode 100644
> index 0000000..63f8b7f
> --- /dev/null
> +++ b/board/freescale/ls1028a/ls1028a.c
> @@ -0,0 +1,251 @@
> +/* SPDX-License-Identifier: GPL-2.0+ */
> +/*
> + * Copyright 2019 NXP
> + */
> +
> +#include <common.h>
> +#include <malloc.h>
> +#include <errno.h>
> +#include <fsl_ddr.h>
> +#include <asm/io.h>
> +#include <hwconfig.h>
> +#include <fdt_support.h>
> +#include <linux/libfdt.h>
> +#include <environment.h>
> +#include <asm/arch-fsl-layerscape/soc.h> #include <i2c.h> #include
> +<asm/arch/soc.h> #ifdef CONFIG_FSL_LS_PPA #include <asm/arch/ppa.h>
> +#endif #include <fsl_immap.h> #include <netdev.h>
> +
> +#include <fdtdec.h>
> +#include <miiphy.h>
> +#include "../common/qixis.h"
> +
> +DECLARE_GLOBAL_DATA_PTR;
> +
> +int board_init(void)
> +{
> +#ifdef CONFIG_ENV_IS_NOWHERE
> +	gd->env_addr = (ulong)&default_environment[0]; #endif
> +
> +#ifdef CONFIG_FSL_LS_PPA
> +	ppa_init();
> +#endif
> +
> +#ifndef CONFIG_SYS_EARLY_PCI_INIT
> +	/* run PCI init to kick off ENETC */
> +	pci_init();

Is this code valid from upstream point of view?

> +#endif
> +
> +#if defined(CONFIG_TARGET_LS1028ARDB)
> +	u8 val = I2C_MUX_CH_DEFAULT;
> +
> +	i2c_write(I2C_MUX_PCA_ADDR_PRI, 0x0b, 1, &val, 1); #endif
> +	return 0;
> +}
> +
> +int board_eth_init(bd_t *bis)
> +{
> +	return pci_eth_init(bis);
> +}
> +
> +int board_early_init_f(void)
> +{
> +#ifdef CONFIG_SYS_I2C_EARLY_INIT
> +	i2c_early_init_f();
> +#endif
> +
> +	fsl_lsch3_early_init_f();
> +	return 0;
> +}
> +
> +void detail_board_ddr_info(void)
> +{
> +	puts("\nDDR    ");
> +	print_size(gd->bd->bi_dram[0].size + gd->bd->bi_dram[1].size, "");
> +	print_ddr_info(0);
> +}
> +
> +#ifdef CONFIG_OF_BOARD_SETUP
> +int ft_board_setup(void *blob, bd_t *bd) {
> +	u64 base[CONFIG_NR_DRAM_BANKS];
> +	u64 size[CONFIG_NR_DRAM_BANKS];
> +
> +	ft_cpu_setup(blob, bd);
> +
> +	/* fixup DT for the two GPP DDR banks */
> +	base[0] = gd->bd->bi_dram[0].start;
> +	size[0] = gd->bd->bi_dram[0].size;
> +	base[1] = gd->bd->bi_dram[1].start;
> +	size[1] = gd->bd->bi_dram[1].size;
> +
> +#ifdef CONFIG_RESV_RAM
> +	/* reduce size if reserved memory is within this bank */
> +	if (gd->arch.resv_ram >= base[0] &&
> +	    gd->arch.resv_ram < base[0] + size[0])
> +		size[0] = gd->arch.resv_ram - base[0];
> +	else if (gd->arch.resv_ram >= base[1] &&
> +		 gd->arch.resv_ram < base[1] + size[1])
> +		size[1] = gd->arch.resv_ram - base[1]; #endif
> +
> +	fdt_fixup_memory_banks(blob, base, size, 2);
> +
> +	return 0;
> +}
> +#endif
> +
> +#ifdef CONFIG_FSL_QIXIS
> +int checkboard(void)
> +{
> +#ifdef CONFIG_TFABOOT
> +	enum boot_src src = get_boot_src();
> +#endif
> +	u8 sw;
> +
> +	int clock;
> +	char *board;
> +	char buf[64] = {0};
> +	static const char *freq[6] = {"100.00", "125.00", "156.25",
> +					"161.13", "322.26", "100.00 SS"};
> +
> +	cpu_name(buf);
> +	/* find the board details */
> +	sw = QIXIS_READ(id);
> +
> +	switch (sw) {
> +	case 0x46:
> +		board = "QDS";
> +		break;
> +	case 0x47:
> +		board = "RDB";
> +		break;
> +	case 0x49:
> +		board = "HSSI";
> +		break;
> +	default:
> +		board = "unknown";
> +		break;
> +	}
> +
> +	sw = QIXIS_READ(arch);
> +	printf("Board: %s-%s, Version: %c, boot from ",
> +	       buf, board, (sw & 0xf) + 'A' - 1);
> +
> +	sw = QIXIS_READ(brdcfg[0]);
> +	sw = (sw & QIXIS_LBMAP_MASK) >> QIXIS_LBMAP_SHIFT;
> +
> +#ifdef CONFIG_TFABOOT
> +	if (src == BOOT_SOURCE_SD_MMC)
> +		puts("SD\n");
> +	else if (src == BOOT_SOURCE_SD_MMC2)
> +		puts("eMMC \n");
> +	else {
> +#endif
> +#ifdef CONFIG_SD_BOOT
> +		puts("SD \n");
> +#elif defined(CONFIG_EMMC_BOOT)
> +		puts("eMMC \n");
> +#else
> +		switch (sw) {
> +		case 0:
> +		case 4:
> +			printf("NOR\n");
> +			break;
> +		case 1:
> +			printf("NAND\n");
> +			break;
> +		default:
> +			printf("invalid setting of SW%u\n",
> QIXIS_LBMAP_SWITCH);
> +			break;
> +		}
> +#endif
> +#ifdef CONFIG_TFABOOT
> +	}
> +#endif
> +
> +	printf("FPGA: v%d (%s: %s_%s)\n", QIXIS_READ(scver),
> +	       !qixis_read_released()  ? "INTERIM" : "RELEASED",
> +			board, qixis_read_date(buf));
> +	puts("SERDES1 Reference : ");
> +
> +	sw = QIXIS_READ(brdcfg[2]);
> +#ifdef CONFIG_TARGET_LS1028ARDB
> +	clock = (sw >> 6) & 3;
> +#else
> +	clock = (sw >> 4) & 0xf;
> +#endif
> +
> +	printf("Clock1 = %sMHz ", freq[clock]); #ifdef
> +CONFIG_TARGET_LS1028ARDB
> +	clock = (sw >> 4) & 3;
> +#else
> +	clock = sw & 0xf;
> +#endif
> +	printf("Clock2 = %sMHz\n", freq[clock]);
> +
> +	return 0;
> +}
> +#endif
> +
> +#ifdef CONFIG_TARGET_LS1028ARDB
> +int checkboard1(void)

Who is using this function?

> +{
> +	static const char *freq[2] = {"100.00", "Reserved"};
> +
> +	char buf[64];
> +	u8 sw;
> +	int clock;
> +
> +	printf("Board: LS1028A-RDB, ");
> +
> +#ifdef CONFIG_FSL_QIXIS
> +	sw = QIXIS_READ(arch);
> +	printf("Board Arch: V%d, ", sw >> 4);
> +	printf("Board version: %c, boot from ", (sw & 0xf) + 'A');
> +
> +	memset((u8 *)buf, 0x00, ARRAY_SIZE(buf));
> +
> +	sw = QIXIS_READ(brdcfg[0]);
> +	sw = (sw & QIXIS_LBMAP_MASK) >> QIXIS_LBMAP_SHIFT;
> +
> +#ifdef CONFIG_SD_BOOT
> +	puts("SD card\n");
> +#else
> +	switch (sw) {
> +	case 0:
> +	case 4:
> +		printf("NOR\n");
> +		break;
> +	case 1:
> +		printf("NAND\n");
> +		break;
> +	case 2:
> +	case 3:
> +		printf("EMU\n");
> +		break;
> +	default:
> +		printf("invalid setting of SW%u\n", QIXIS_LBMAP_SWITCH);
> +		break;
> +	}
> +#endif
> +
> +	printf("FPGA: v%d.%d\n", QIXIS_READ(scver),
> QIXIS_READ(tagdata));
> +
> +	puts("SERDES1 Reference : ");
> +	sw = QIXIS_READ(brdcfg[2]);
> +	clock = (sw >> 6) & 3;
> +	printf("Clock1 = %sMHz ", freq[clock]);
> +	clock = (sw >> 4) & 3;
> +	printf("Clock2 = %sMHz\n", freq[clock]); #endif
> +	return 0;
> +}
> +#endif
> diff --git a/configs/ls1028ardb_tfa_defconfig
> b/configs/ls1028ardb_tfa_defconfig
> new file mode 100644
> index 0000000..7a6068d
> --- /dev/null
> +++ b/configs/ls1028ardb_tfa_defconfig
> @@ -0,0 +1,61 @@

Regenerate this file using make savedefconfing

> +CONFIG_ARM=y
> +CONFIG_TARGET_LS1028ARDB=y
> +CONFIG_SYS_FSL_SDHC_CLK_DIV=1
> +CONFIG_TFABOOT=y
> +CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT=y
> +CONFIG_SEC_FIRMWARE_ARMV8_PSCI=y
> +CONFIG_AHCI=y
> +CONFIG_DISTRO_DEFAULTS=y
> +CONFIG_NR_DRAM_BANKS=2
> +# CONFIG_SYS_MALLOC_F is not set
> +CONFIG_FIT_VERBOSE=y
> +CONFIG_OF_BOARD_SETUP=y
> +CONFIG_OF_STDOUT_VIA_ALIAS=y
> +CONFIG_BOOTDELAY=10
> +CONFIG_USE_BOOTARGS=y
> +CONFIG_BOOTARGS="console=ttyS0,115200 root=/dev/ram0
> earlycon=uart8250,mmio,0x21c0500 ramdisk_size=0x2000000
> default_hugepagesz=2m hugepagesz=2m hugepages=256 video=1920x1080-
> 32 at 60 cma=256M"
> +CONFIG_CMD_GREPENV=y
> +CONFIG_CMD_GPT=y
> +CONFIG_CMD_I2C=y
> +CONFIG_CMD_MMC=y
> +CONFIG_CMD_PCI=y
> +CONFIG_CMD_SF=y
> +CONFIG_CMD_USB=y
> +# CONFIG_CMD_SETEXPR is not set
> +CONFIG_CMD_CACHE=y
> +CONFIG_OF_CONTROL=y
> +CONFIG_DEFAULT_DEVICE_TREE="fsl-ls1028a-rdb"
> +CONFIG_ENV_IS_IN_MMC=y
> +CONFIG_ENV_IS_IN_SPI_FLASH=y
> +CONFIG_NET_RANDOM_ETHADDR=y
> +CONFIG_NETCONSOLE=y
> +CONFIG_DM=y
> +CONFIG_SCSI_AHCI=y
> +CONFIG_SATA_CEVA=y
> +CONFIG_FSL_CAAM=y
> +CONFIG_DM_MMC=y
> +CONFIG_DM_SPI_FLASH=y
> +CONFIG_SPI_FLASH=y
> +CONFIG_SPI_FLASH_SPANSION=y
> +CONFIG_SPI_FLASH_STMICRO=y
> +# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set CONFIG_PHYLIB=y
> +CONFIG_PHY_ATHEROS=y CONFIG_DM_ETH=y CONFIG_PHY_GIGE=y
> CONFIG_E1000=y
> +CONFIG_PCI=y CONFIG_DM_PCI=y CONFIG_DM_PCI_COMPAT=y
> +CONFIG_PCIE_LAYERSCAPE=y CONFIG_SCSI=y CONFIG_DM_SCSI=y
> +CONFIG_SYS_NS16550=y CONFIG_SPI=y CONFIG_DM_SPI=y
> CONFIG_FSL_DSPI=y
> +CONFIG_USB=y CONFIG_DM_USB=y CONFIG_USB_XHCI_HCD=y
> +CONFIG_USB_XHCI_DWC3=y CONFIG_EFI_LOADER_BOUNCE_BUFFER=y
> diff --git a/include/configs/ls1028a_common.h
> b/include/configs/ls1028a_common.h
> new file mode 100644
> index 0000000..23823b4
> --- /dev/null
> +++ b/include/configs/ls1028a_common.h
> @@ -0,0 +1,295 @@
> +/* SPDX-License-Identifier: GPL-2.0+ */
> +/*
> + * Copyright 2019 NXP
> + */
> +
> +#ifndef __L1028A_COMMON_H
> +#define __L1028A_COMMON_H
> +
> +/* SPL build */
> +#ifdef CONFIG_SPL_BUILD

Considering it supports TFA boot. Do we still require SPL build defines?


> +#define SPL_NO_FMAN
Do we have FMAN ins LS1028

> +#define SPL_NO_DSPI
> +#define SPL_NO_PCIE
> +#define SPL_NO_ENV
> +#define SPL_NO_MISC
> +#define SPL_NO_USB
> +#define SPL_NO_SATA
> +#define SPL_NO_QE

Do you have QE in LS1028A

> +#define SPL_NO_EEPROM
> +#endif
> +#if (defined(CONFIG_SPL_BUILD) && defined(CONFIG_NAND_BOOT))
> #define
> +SPL_NO_MMC #endif #if (defined(CONFIG_SPL_BUILD) &&
> +defined(CONFIG_SD_BOOT_QSPI)) #define SPL_NO_IFC #endif
> +
> +#define CONFIG_REMAKE_ELF
> +#define CONFIG_FSL_LAYERSCAPE
> +#define CONFIG_MP
> +
> +#include <asm/arch/stream_id_lsch3.h>
> +#include <asm/arch/config.h>
> +#include <asm/arch/soc.h>
> +
> +/* Link Definitions */
> +#ifdef CONFIG_TFABOOT
> +#define CONFIG_SYS_INIT_SP_ADDR		CONFIG_SYS_TEXT_BASE
> +#else
> +#define CONFIG_SYS_INIT_SP_ADDR
> 	(CONFIG_SYS_FSL_OCRAM_BASE + 0xfff0)
> +#endif
> +
> +#define CONFIG_SKIP_LOWLEVEL_INIT
> +
> +#define CONFIG_VERY_BIG_RAM
> +#define CONFIG_SYS_DDR_SDRAM_BASE	0x80000000UL
> +#define CONFIG_SYS_FSL_DDR_SDRAM_BASE_PHY	0
> +#define CONFIG_SYS_SDRAM_BASE
> 	CONFIG_SYS_DDR_SDRAM_BASE
> +#define CONFIG_SYS_DDR_BLOCK2_BASE	0x2080000000ULL
> +#define CONFIG_SYS_FSL_DDR_MAIN_NUM_CTRLS	1
> +
> +#define CONFIG_CMD_MEMTEST
> +#define CONFIG_SYS_MEMTEST_START        0x80000000
> +#define CONFIG_SYS_MEMTEST_END          0x9fffffff
> +
> +/*
> + * SMP Definitinos
> + */
> +#define CPU_RELEASE_ADDR		secondary_boot_func
> +
> +/* Generic Timer Definitions */
> +#define COUNTER_FREQUENCY		25000000	/* 25MHz */
> +
> +/* Size of malloc() pool */
> +#define CONFIG_SYS_MALLOC_LEN		(CONFIG_ENV_SIZE + 2048 *
> 1024)
> +
> +/* I2C */
> +#define CONFIG_SYS_I2C
> +
> +/* Serial Port */
> +#define CONFIG_CONS_INDEX       1
> +#define CONFIG_SYS_NS16550_SERIAL
> +#define CONFIG_SYS_NS16550_REG_SIZE     1
> +#define CONFIG_SYS_NS16550_CLK          (get_bus_freq(0) / 2)
> +
> +#define CONFIG_BAUDRATE			115200
> +#define CONFIG_SYS_BAUDRATE_TABLE	{ 9600, 19200, 38400, 57600,
> 115200 }
> +
> +/* Miscellaneous configurable options */
> +#define CONFIG_SYS_LOAD_ADDR	(CONFIG_SYS_DDR_SDRAM_BASE +
> 0x10000000)
> +
> +/* Physical Memory Map */
> +#define CONFIG_CHIP_SELECTS_PER_CTRL	4
> +
> +#define CONFIG_HWCONFIG
> +#define HWCONFIG_BUFFER_SIZE		128
> +
> +#ifndef SPL_NO_ENV
> +/* Allow to overwrite serial and ethaddr */ #define
> +CONFIG_ENV_OVERWRITE
> +
> +#define BOOT_TARGET_DEVICES(func) \
> +	func(MMC, mmc, 0) \
> +	func(USB, usb, 0)
> +#include <config_distro_bootcmd.h>
> +
> +/* Initial environment variables */
> +#define CONFIG_EXTRA_ENV_SETTINGS		\
> +	"board=ls1028ardb\0"			\
> +	"hwconfig=fsl_ddr:bank_intlv=auto\0"	\
> +	"ramdisk_addr=0x800000\0"		\
> +	"ramdisk_size=0x2000000\0"		\
> +	"fdt_high=0xffffffffffffffff\0"		\
> +	"initrd_high=0xffffffffffffffff\0"	\
> +	"fdt_addr=0x00f00000\0"                 \
> +	"kernel_addr=0x01000000\0"              \
> +	"scriptaddr=0x80000000\0"               \
> +	"scripthdraddr=0x80080000\0"		\
> +	"fdtheader_addr_r=0x80100000\0"         \
> +	"kernelheader_addr_r=0x80200000\0"      \
> +	"load_addr=0xa0000000\0"            \
> +	"kernel_addr_r=0x81000000\0"            \
> +	"fdt_addr_r=0x90000000\0"               \
> +	"ramdisk_addr_r=0xa0000000\0"           \
> +	"kernel_start=0x1000000\0"		\
> +	"kernelheader_start=0x800000\0"		\
> +	"kernel_load=0xa0000000\0"		\
> +	"kernel_size=0x2800000\0"		\
> +	"kernelheader_size=0x40000\0"		\
> +	"kernel_addr_sd=0x8000\0"		\
> +	"kernel_size_sd=0x14000\0"		\
> +	"kernelhdr_addr_sd=0x4000\0"		\
> +	"kernelhdr_size_sd=0x10\0"		\
> +	"console=ttyS0,115200\0"                \
> +	"mtdparts=" CONFIG_MTDPARTS_DEFAULT "\0"	\
> +	BOOTENV					\
> +	"boot_scripts=ls1028ardb_boot.scr\0"    \
> +	"boot_script_hdr=hdr_ls1028ardb_bs.out\0"	\
> +	"scan_dev_for_boot_part="               \
> +		"part list ${devtype} ${devnum} devplist; "   \
> +		"env exists devplist || setenv devplist 1; "  \
> +		"for distro_bootpart in ${devplist}; do "     \
> +		  "if fstype ${devtype} "                  \
> +			"${devnum}:${distro_bootpart} "      \
> +			"bootfstype; then "                  \
> +			"run scan_dev_for_boot; "            \
> +		  "fi; "                                   \
> +		"done\0"                                   \
> +	"scan_dev_for_boot="				  \
> +		"echo Scanning ${devtype} "		  \
> +				"${devnum}:${distro_bootpart}...; "  \
> +		"for prefix in ${boot_prefixes}; do "	  \
> +			"run scan_dev_for_scripts; "	  \
> +		"done;"					  \
> +		"\0"					  \
> +	"boot_a_script="				  \
> +		"load ${devtype} ${devnum}:${distro_bootpart} "  \
> +			"${scriptaddr} ${prefix}${script}; "    \
> +		"env exists secureboot && load ${devtype} "     \
> +			"${devnum}:${distro_bootpart} "		\
> +			"${scripthdraddr} ${prefix}${boot_script_hdr} " \
> +			"&& esbc_validate ${scripthdraddr};"    \
> +		"source ${scriptaddr}\0"	  \
> +	"qspi_bootcmd=echo Trying load from flexspi..;"      \
> +		"sf probe && sf read $load_addr "         \
> +		"$kernel_start $kernel_size; env exists secureboot "	\
> +		"&& sf read $kernelheader_addr_r $kernelheader_start "
> 	\
> +		"$kernelheader_size && esbc_validate
> ${kernelheader_addr_r}; " \
> +		"bootm $load_addr#$board\0"		\
> +	"qspi_hdploadcmd=echo Trying load HDP firmware from flexspi..;"
> \
> +		"hdp load 0x20900000 0x2000\0"		\
> +	"sd_bootcmd=echo Trying load from SD ..;"	\
> +		"mmcinfo; mmc read $load_addr "		\
> +		"$kernel_addr_sd $kernel_size_sd && "	\
> +		"env exists secureboot && mmc read $kernelheader_addr_r
> " \
> +		"$kernelhdr_addr_sd $kernelhdr_size_sd "		\
> +		" && esbc_validate ${kernelheader_addr_r};"	\
> +		"bootm $load_addr#$board\0"		\
> +	"sd_hdploadcmd=echo Trying load HDP firmware from SD..;"      \
> +		"mmcinfo;mmc read $load_addr 0x4800 0x200 "
> 	\
> +		"&& hdp load $load_addr 0x2000\0"	\
> +	"emmc_bootcmd=echo Trying load from EMMC ..;"	\
> +		"mmcinfo; mmc dev 1; mmc read $load_addr "		\
> +		"$kernel_addr_sd $kernel_size_sd && "	\
> +		"env exists secureboot && mmc read $kernelheader_addr_r
> " \
> +		"$kernelhdr_addr_sd $kernelhdr_size_sd "		\
> +		" && esbc_validate ${kernelheader_addr_r};"	\
> +		"bootm $load_addr#$board\0"			\
> +	"emmc_hdploadcmd=echo Trying load HDP firmware from EMMC..;"
> \
> +		"mmc dev 1;mmcinfo;mmc read $load_addr 0x4800 0x200 "
> 	\
> +		"&& hdp load $load_addr 0x2000\0"
> +

Remove flexspi or qspi related stuff. 


> +#undef CONFIG_BOOTCOMMAND
> +#ifdef CONFIG_TFABOOT
> +#define XSPI_NOR_BOOTCOMMAND	"run qspi_hdploadcmd; run

Remove as there is no FSPI?

> distro_bootcmd; run qspi_bootcmd; " \
> +				"env exists secureboot && esbc_halt;;"
> +#define SD_BOOTCOMMAND		"run sd_hdploadcmd; run
> distro_bootcmd;run sd_bootcmd; " \
> +				"env exists secureboot && esbc_halt;"
> +#define SD2_BOOTCOMMAND		"run emmc_hdploadcmd; run

When and where SD2_BOOTCOMMAND is being used?

> distro_bootcmd;run emmc_bootcmd; " \
> +				"env exists secureboot && esbc_halt;"
> +#else
> +#if defined(CONFIG_SD_BOOT)
> +#define CONFIG_BOOTCOMMAND "run sd_hdploadcmd; run
> distro_bootcmd;run sd_bootcmd; "	\
> +			   "env exists secureboot && esbc_halt;"
> +#elif defined(CONFIG_EMMC_BOOT)
> +#define CONFIG_BOOTCOMMAND "run emmc_hdploadcmd; run
> distro_bootcmd;run emmc_bootcmd; "	\
> +			   "env exists secureboot && esbc_halt;"
> +#else
> +#define CONFIG_BOOTCOMMAND "run qspi_hdploadcmd; run
> distro_bootcmd; run qspi_bootcmd; "	\
> +			   "env exists secureboot && esbc_halt;"
> +#endif
> +#endif	/* CONFIG_TFABOOT */
> +#endif
> +
> +/* Monitor Command Prompt */
> +#define CONFIG_SYS_CBSIZE		512	/* Console I/O Buffer Size */
> +#define CONFIG_SYS_PBSIZE		(CONFIG_SYS_CBSIZE + \
> +					sizeof(CONFIG_SYS_PROMPT) + 16)
> +#define CONFIG_SYS_BARGSIZE		CONFIG_SYS_CBSIZE /* Boot
> args buffer */
> +
> +#ifndef SPL_NO_MISC
> +#ifndef CONFIG_CMDLINE_EDITING
> +#define CONFIG_CMDLINE_EDITING		1
> +#endif
> +#endif
> +
> +#define CONFIG_SYS_MAXARGS		64	/* max command
> args */
> +
> +#define CONFIG_SYS_BOOTM_LEN   (64 << 20)      /* Increase max gunzip
> size */
> +
> +/*  MMC  */
> +#ifndef SPL_NO_MMC
> +#ifdef CONFIG_MMC
> +#define CONFIG_FSL_ESDHC
> +#define CONFIG_SYS_FSL_MMC_HAS_CAPBLT_VS33
> +#endif
> +#endif
> +
> +#ifdef CONFIG_SPL
> +#define CONFIG_SPL_BSS_START_ADDR      0x80100000
> +#define CONFIG_SPL_BSS_MAX_SIZE                0x00100000
> +#define CONFIG_SPL_LDSCRIPT "arch/arm/cpu/armv8/u-boot-spl.lds"
> +#define CONFIG_SPL_MAX_SIZE            0x16000
> +#define CONFIG_SPL_STACK               (CONFIG_SYS_FSL_OCRAM_BASE +
> 0x9ff0)
> +#define CONFIG_SPL_TARGET              "u-boot-with-spl.bin"

Considering tfa boot is default boot target.
Do we still required spl builds?


> +#define CONFIG_SPL_TEXT_BASE           0x18010000
> +
> +#define CONFIG_SPL_I2C_SUPPORT
> +
> +#define CONFIG_SYS_SPL_MALLOC_SIZE     0x00100000
> +#define CONFIG_SYS_SPL_MALLOC_START    0x80200000
> +#define CONFIG_SYS_MONITOR_LEN         (768 * 1024)
> +#endif
> +
> +#ifdef CONFIG_TFABOOT
> +#define CONFIG_SYS_MMC_ENV_DEV         0
> +#define OCRAM_NONSECURE_SIZE		0x00010000
> +#define CONFIG_ENV_OFFSET              0x500000        /* 5MB */
> +#define CONFIG_SYS_FSL_QSPI_BASE	0x20000000
> +#define CONFIG_ENV_ADDR			CONFIG_SYS_FSL_QSPI_BASE
> + CONFIG_ENV_OFFSET
> +#define CONFIG_ENV_SIZE			0x2000          /* 8KB */
> +#define CONFIG_ENV_SECT_SIZE           0x40000
> +#else
> +#if defined(CONFIG_SD_BOOT) || defined(CONFIG_EMMC_BOOT)
> +#define CONFIG_SYS_MMC_ENV_DEV         0
> +#define CONFIG_ENV_OFFSET              0x300000        /* 3MB */
> +#define CONFIG_ENV_SIZE			0x2000          /* 8KB */
> +#define OCRAM_NONSECURE_SIZE		0x00010000
> +#else
> +#define CONFIG_ENV_OFFSET              0x300000        /* 3MB */
> +#define CONFIG_SYS_FSL_QSPI_BASE	0x20000000
> +#define CONFIG_ENV_ADDR			CONFIG_SYS_FSL_QSPI_BASE
> + CONFIG_ENV_OFFSET
> +#define CONFIG_ENV_SIZE			0x2000          /* 8KB */
> +#define CONFIG_ENV_SECT_SIZE           0x40000
> +#endif
> +#endif
> +
> +#ifdef CONFIG_SPL_BUILD
> +#define CONFIG_SYS_MONITOR_BASE CONFIG_SPL_TEXT_BASE #else
> #define
> +CONFIG_SYS_MONITOR_BASE CONFIG_SYS_TEXT_BASE #endif
> +
> +/*  MMC  */
> +#ifndef SPL_NO_MMC
> +#ifdef CONFIG_MMC
> +#define CONFIG_FSL_ESDHC
> +#define CONFIG_SYS_FSL_MMC_HAS_CAPBLT_VS33
> +#endif
> +#endif
> +
> +/* I2C bus multiplexer */
> +#define I2C_MUX_PCA_ADDR_PRI            0x77 /* Primary Mux*/
> +#define I2C_MUX_CH_DEFAULT              0x8
> +
> +/* EEPROM */
> +#define CONFIG_ID_EEPROM
> +#define CONFIG_SYS_I2C_EEPROM_NXID
> +#define CONFIG_SYS_EEPROM_BUS_NUM		0
> +#define CONFIG_SYS_I2C_EEPROM_ADDR		0x57
> +#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN		1
> +#define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS	3
> +#define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS	5
> +
> +#endif /* __L1028A_COMMON_H */
> diff --git a/include/configs/ls1028ardb.h b/include/configs/ls1028ardb.h new
> file mode 100644 index 0000000..b9d966a
> --- /dev/null
> +++ b/include/configs/ls1028ardb.h
> @@ -0,0 +1,98 @@
> +/* SPDX-License-Identifier: GPL-2.0+ */
> +/*
> + * Copyright 2019 NXP
> + */
> +
> +#ifndef __LS1028A_RDB_H
> +#define __LS1028A_RDB_H
> +
> +#include "ls1028a_common.h"
> +
> +#define CONFIG_SYS_CLK_FREQ		100000000
> +#define CONFIG_DDR_CLK_FREQ		100000000
> +#define COUNTER_FREQUENCY_REAL
> 	(CONFIG_SYS_CLK_FREQ / 4)
> +
> +#define CONFIG_SYS_RTC_BUS_NUM         0
> +
> +/* DDR */
> +#define CONFIG_SYS_DDR_RAW_TIMING
> +#define CONFIG_DDR_ECC
> +#define CONFIG_ECC_INIT_VIA_DDRCONTROLLER
> +#define CONFIG_MEM_INIT_VALUE		0xdeadbeef
> +#define CONFIG_DIMM_SLOTS_PER_CTLR		1
> +
> +/* FlexSPI */
> +#ifdef CONFIG_NXP_FSPI
> +#define NXP_FSPI_FLASH_SIZE            SZ_256M
> +#define NXP_FSPI_FLASH_NUM              1
> +#endif

Why flexSPI? Do you have driver for this ?


> +
> +/* Store environment at top of flash */
> +#define CONFIG_ENV_SIZE			0x2000
> +
> +#ifdef CONFIG_SPL_BUILD
> +#define CONFIG_SYS_MONITOR_BASE CONFIG_SPL_TEXT_BASE #else
> #define
> +CONFIG_SYS_MONITOR_BASE CONFIG_SYS_TEXT_BASE #endif
> +
> +#define CONFIG_QIXIS_I2C_ACCESS
> +#define CONFIG_SYS_I2C_EARLY_INIT
> +
> +/*
> + * QIXIS Definitions
> + */
> +#define CONFIG_FSL_QIXIS
> +
> +#ifdef CONFIG_FSL_QIXIS
> +#define QIXIS_BASE			0x7fb00000
> +#define QIXIS_BASE_PHYS			QIXIS_BASE
> +#define CONFIG_SYS_I2C_FPGA_ADDR	0x66
> +#define QIXIS_LBMAP_SWITCH		2
> +#define QIXIS_LBMAP_MASK		0xe0
> +#define QIXIS_LBMAP_SHIFT		0x5
> +#define QIXIS_LBMAP_DFLTBANK		0x00
> +#define QIXIS_LBMAP_SD			0x00
> +#define QIXIS_LBMAP_EMMC		0x00
> +#define QIXIS_LBMAP_QSPI		0x00
> +#define QIXIS_RCW_SRC_SD		0xf8
> +#define QIXIS_RCW_SRC_EMMC		0xf9
> +#define QIXIS_RCW_SRC_QSPI		0xff
> +#define QIXIS_RST_CTL_RESET		0x31
> +#define QIXIS_RCFG_CTL_RECONFIG_IDLE	0x10
> +#define QIXIS_RCFG_CTL_RECONFIG_START	0x11
> +#define QIXIS_RCFG_CTL_WATCHDOG_ENBLE	0x08
> +#define QIXIS_RST_FORCE_MEM		0x01
> +
> +#define CONFIG_SYS_FPGA_CSPR_EXT	(0x0)
> +#define CONFIG_SYS_FPGA_CSPR
> 	(CSPR_PHYS_ADDR(QIXIS_BASE_PHYS) | \
> +					CSPR_PORT_SIZE_8 | \
> +					CSPR_MSEL_GPCM | \
> +					CSPR_V)
> +#define CONFIG_SYS_FPGA_AMASK		IFC_AMASK(64 * 1024)
> +#define CONFIG_SYS_FPGA_CSOR		(CSOR_NOR_ADM_SHIFT(4) |
> \
> +					CSOR_NOR_NOR_MODE_AVD_NOR
> | \
> +					CSOR_NOR_TRHZ_80)
> +#endif
> +

IFC??

Is there IFC in LS1028


> +/* SATA */
> +#ifndef SPL_NO_SATA
> +#ifndef CONFIG_CMD_EXT2
> +#define CONFIG_CMD_EXT2
> +#endif
> +#define CONFIG_SYS_SCSI_MAX_SCSI_ID		1
> +#define CONFIG_SYS_SCSI_MAX_LUN			1
> +#define CONFIG_SYS_SCSI_MAX_DEVICE
> 	(CONFIG_SYS_SCSI_MAX_SCSI_ID * \
> +
> 	CONFIG_SYS_SCSI_MAX_LUN)
> +#define SCSI_VEND_ID 0x1b4b
> +#define SCSI_DEV_ID  0x9170
> +#define CONFIG_SCSI_DEV_LIST {SCSI_VEND_ID, SCSI_DEV_ID} #define
> +CONFIG_SCSI_AHCI_PLAT
> +#define CONFIG_SYS_SATA1                        AHCI_BASE_ADDR1
> +#endif
> +
> +#ifdef CONFIG_SECURE_BOOT
> +#include <asm/fsl_secure_boot.h>
> +#endif

Code has support of secure_boot but I am not finding defconfig for the same.
Either add defconfig or remove code related to secure boot.

--pk

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [U-Boot] [PATCH 3/3] armv8: ls1028aqds: Add support of LS1028AQDS
  2019-03-18  9:45 ` [U-Boot] [PATCH 3/3] armv8: ls1028aqds: Add support of LS1028AQDS Bhaskar Upadhaya
@ 2019-03-22 10:56   ` Prabhakar Kushwaha
  0 siblings, 0 replies; 6+ messages in thread
From: Prabhakar Kushwaha @ 2019-03-22 10:56 UTC (permalink / raw)
  To: u-boot


> -----Original Message-----
> From: Bhaskar Upadhaya
> Sent: Monday, March 18, 2019 3:15 PM
> To: u-boot at lists.denx.de
> Cc: Prabhakar Kushwaha <prabhakar.kushwaha@nxp.com>; Sudhanshu
> Gupta <sudhanshu.gupta@nxp.com>; Harninder Rai
> <harninder.rai@nxp.com>; Rajesh Bhagat <rajesh.bhagat@nxp.com>
> Subject: [PATCH 3/3] armv8: ls1028aqds: Add support of LS1028AQDS
> 
> LS1028A Development System (QDS) is a high-performance computing,
> evaluation, and development platform that supports LS1028A QorIQ
> Architecture processor.
> 
> Signed-off-by: Sudhanshu Gupta <sudhanshu.gupta@nxp.com>
> Signed-off-by: Rai Harninder <harninder.rai@nxp.com>
> Signed-off-by: Rajesh Bhagat <rajesh.bhagat@nxp.com>
> Signed-off-by: Bhaskar Upadhaya <Bhaskar.Upadhaya@nxp.com>
> ---
>  arch/arm/Kconfig                    |  11 ++
>  arch/arm/cpu/armv8/Kconfig          |   2 +-
>  arch/arm/dts/fsl-ls1028a-qds.dts    |  16 +++
>  board/freescale/ls1028a/Kconfig     |  39 +++++++
>  board/freescale/ls1028a/MAINTAINERS |  10 ++
>  board/freescale/ls1028a/README      |  85 +++++++++++++++
>  board/freescale/ls1028a/ls1028a.c   |  89 ++++++++++++++++
>  configs/ls1028aqds_tfa_defconfig    |  61 +++++++++++
>  include/configs/ls1028aqds.h        | 206
> ++++++++++++++++++++++++++++++++++++
>  9 files changed, 518 insertions(+), 1 deletion(-)  create mode 100644
> arch/arm/dts/fsl-ls1028a-qds.dts  create mode 100644
> configs/ls1028aqds_tfa_defconfig  create mode 100644
> include/configs/ls1028aqds.h
> 
> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index aaaf36a..7741ea2
> 100644
> --- a/arch/arm/Kconfig
> +++ b/arch/arm/Kconfig
> @@ -1203,6 +1203,17 @@ config TARGET_LS1012AFRDM
>  	  development platform that supports the QorIQ LS1012A
>  	  Layerscape Architecture processor.
> 
> +config TARGET_LS1028AQDS
> +	bool "Support ls1028aqds"
> +	select ARCH_LS1028A
> +	select ARM64
> +	select ARMV8_MULTIENTRY
> +	help
> +	  Support for Freescale LS1028AQDS platform
> +	  The LS1028A Development System (QDS) is a high-performance
> +	  development platform that supports the QorIQ LS1028A
> +	  Layerscape Architecture processor.
> +
>  config TARGET_LS1028ARDB
>  	bool "Support ls1028ardb"
>  	select ARCH_LS1028A
> diff --git a/arch/arm/cpu/armv8/Kconfig b/arch/arm/cpu/armv8/Kconfig
> index a4fa63b..3e9d47a 100644
> --- a/arch/arm/cpu/armv8/Kconfig
> +++ b/arch/arm/cpu/armv8/Kconfig
> @@ -104,7 +104,7 @@ config PSCI_RESET
>  		   !TARGET_LS1012ARDB && !TARGET_LS1012AFRDM && \
>  		   !TARGET_LS1012A2G5RDB && !TARGET_LS1012AQDS && \
>  		   !TARGET_LS1012AFRWY && \
> -		   !TARGET_LS1028ARDB && \
> +		   !TARGET_LS1028ARDB && !TARGET_LS1028AQDS && \
>  		   !TARGET_LS1043ARDB && !TARGET_LS1043AQDS && \
>  		   !TARGET_LS1046ARDB && !TARGET_LS1046AQDS && \
>  		   !TARGET_LS2081ARDB && !TARGET_LX2160ARDB && \ diff -
> -git a/arch/arm/dts/fsl-ls1028a-qds.dts b/arch/arm/dts/fsl-ls1028a-qds.dts
> new file mode 100644
> index 0000000..131fbb7
> --- /dev/null
> +++ b/arch/arm/dts/fsl-ls1028a-qds.dts
> @@ -0,0 +1,16 @@
> +// SPDX-License-Identifier: GPL-2.0+ OR X11
> +/*
> + * NXP ls1028AQDS device tree source
> + *
> + * Copyright 2018-2019 NXP
> + *
> + */

Make is 2019


> +
> +/dts-v1/;
> +
> +#include "fsl-ls1028a.dtsi"
> +
> +/ {
> +	model = "NXP Layerscape 1028a QDS Board";
> +	compatible = "fsl,ls1028a-qds", "fsl,ls1028a"; };
> diff --git a/board/freescale/ls1028a/Kconfig
> b/board/freescale/ls1028a/Kconfig index f4733c2..f8c2fe8 100644
> --- a/board/freescale/ls1028a/Kconfig
> +++ b/board/freescale/ls1028a/Kconfig
> @@ -1,3 +1,42 @@
> +if TARGET_LS1028AQDS
> +
> +config SYS_BOARD
> +	default "ls1028a"
> +
> +config SYS_VENDOR
> +	default "freescale"
> +
> +config SYS_SOC
> +	default "fsl-layerscape"
> +
> +config SYS_CONFIG_NAME
> +	default "ls1028aqds"
> +
> +config EMMC_BOOT
> +	bool "Support for booting from EMMC"
> +	default n
> +
> +config SYS_TEXT_BASE
> +	default 0x96000000 if SD_BOOT || EMMC_BOOT
> +	default 0x82000000 if TFABOOT
> +	default 0x20100000
> +
> +if FSL_LS_PPA
> +config SYS_LS_PPA_FW_ADDR
> +	hex "PPA Firmware Addr"
> +	default 0x20400000 if SYS_LS_PPA_FW_IN_XIP && ARCH_LS1028A
> +	default 0x400000 if SYS_LS_PPA_FW_IN_MMC && ARCH_LS1028A if
> +CHAIN_OF_TRUST config SYS_LS_PPA_ESBC_ADDR
> +	hex "PPA header Addr"
> +	default 0x20600000 if SYS_LS_PPA_FW_IN_XIP && ARCH_LS1028A
> endif endif
> +
> +source "board/freescale/common/Kconfig"
> +
> +endif
> +
>  if TARGET_LS1028ARDB
> 
>  config SYS_BOARD
> diff --git a/board/freescale/ls1028a/MAINTAINERS
> b/board/freescale/ls1028a/MAINTAINERS
> index f4990a2..8c01bbb 100644
> --- a/board/freescale/ls1028a/MAINTAINERS
> +++ b/board/freescale/ls1028a/MAINTAINERS
> @@ -1,3 +1,13 @@
> +LS1028AQDS BOARD
> +M:	Sudhanshu Gupta <sudhanshu.gupta@nxp.com>
> +M:	Rai Harninder <harninder.rai@nxp.com>
> +M:	Rajesh Bhagat <rajesh.bhagat@nxp.com>

Is submitter is not board maintainer??

> +S:	Maintained
> +F:	board/freescale/ls1028a/
> +F:	include/configs/ls1028a_common.h
> +F:	include/configs/ls1028aqds.h
> +F:	configs/ls1028aqds_tfa_defconfig
> +
>  LS1028ARDB BOARD
>  M:	Sudhanshu Gupta <sudhanshu.gupta@nxp.com>
>  M:	Rai Harninder <harninder.rai@nxp.com>
> diff --git a/board/freescale/ls1028a/README
> b/board/freescale/ls1028a/README index a3ce859..678b9b5 100644
> --- a/board/freescale/ls1028a/README
> +++ b/board/freescale/ls1028a/README
> @@ -73,6 +73,91 @@ Serial audio interface(SAI)
>     stereo speakers
>   - IEEE1588 interface to support audio on SAI4
> 
> +QDS Default Switch Settings (1: ON; 0: OFF)
> +-------------------------------------------
> +For SD Boot
> +SW1 : 10000000
> +SW2 : 11100110
> +SW3 : 00000010
> +SW4 : 00000000
> +SW5 : 00000000
> +SW6 : 00000000
> +SW7 : 11110011
> +SW8 : 11100000
> +SW9 : 10000001
> +SW10: 11100000
> +
> +For FlexSPI Boot
> +SW1 : 11110000
> +SW2 : 00000110
> +SW3 : 00000010
> +SW4 : 00000000
> +SW5 : 01100000
> +SW6 : 01010000
> +SW7 : 11110011
> +SW8 : 11100000
> +SW9 : 10000000
> +SW10: 11100000
> +

Remove flexSPI boot settings

> +LS1028AQDS board Overview
> +-------------------------
> +Processor
> + Two Arm Cortex- A72 processor cores:
> +  - Based on 64-bit ARMv8 architecture
> +  - Up to 1.3 GHz operation
> +  - Single-threaded cores with 48 KB L1 instruction cache and 32 KB L1
> +    data cache
> +  - Arranged as a single cluster of two cores sharing a single 1 MB L2
> +    cache
> +DDR memory
> + - Supports data rates of up to 1.6 GT/s for both, DDR4 and DDR3L
> + - Supports a single- or dual-ranked SODIMM or UDIMM connector
> + - 32-bit data and 4-bit ECC
> + - Supports x8/x16 devices
> + - Supports ECC error detection and correction
> + - 1.35 V or 1.2 V DDR power supply, with automatic tracking of VTT, to
> +   all devices in case of DDR3L or DDR4, respectively — Power can
> +   switch to 1.35 V or 1.2 V, based on the switch settings for DDR3L or
> +   DDR4 devices, respectively
> +SerDes (Serializer/Deserializer)
> + - Four-lane (0-3) SerDes:
> + - Lane 0: supports PCIe Gen1/2/3 with x1, x2, and x4 operation, 10
> +   Gbit SXGMII, 1 Gbit SGMII
> + - Lane 1: supports PCIe Gen1/2/3 with x1, x2, and x4 operation, 1 Gbit
> +   SGMII, 10 Gbit QXGMII, 5 Gbit QSGMII, 1 Gbit SGMII
> + - Lane 2: supports PCIe Gen1/2/3 with x1, x2, and x4 operation, 1 Gbit
> +   SGMII
> + - Lane 3: supports PCIe Gen1/2/3 with x1, x2, and x4 operation, 1 Gbit
> +   SGMII, SATA 2.0/3.0
> + - Four slots on SerDes lanes support PCIe Gen1/2/3, 1 Gbit SGMII
> +   add-in cards
> + - Lane 1 connects to a 2x10 connector with SFP+ through a retimer;
> +   lane 2 (TX lines) connects to an SMA connector
> +   Lane 3 connects to 1x7 header to support SATA devices eSDHC
> + - eSDHC1, eSDHC2
> +SPI
> + - SPI1 and SPI2 support three onboard SPI flash memory devices:
> +    512 Mbit high-speed flash (with speed of up to 108/54 MHz)
> +    memory for storage
> +    4 Mbit low-speed flash memory (with speed of up to 40 MHz)
> +    64 Mbit high-speed flash memory (with speed of up to 104/80
> +    MHz)
> + - SPI3 supports one onboard 64 Mbit SPI flash memory (with speed of
> +   up to 104/80 MHz)
> + - All memories operate at 1.8 V
> + - A header is provided on SPI1 to test SPI slave mode I2C
> + - LS1028A supports eight I2C controllers Serial audio interface(SAI)
> +Two SAI ports with audio codec SGTL5000:
> +  - Include stereo LINEIN with support for external analog input
> +  - Provide headphone and line output
> +Display
> + - DisplayPort connector to connect the DP data to a 4K display device
> +   (computer monitor)
> + - eDP connector to connect the DP data to a 4K display panel
> +
>  FlexSPI flash memory map valid for both QDS and RDB
>    Image                               Flash Offset
>   RCW+PBI                             0x00000000
> diff --git a/board/freescale/ls1028a/ls1028a.c
> b/board/freescale/ls1028a/ls1028a.c
> index 63f8b7f..9d7251e 100644
> --- a/board/freescale/ls1028a/ls1028a.c
> +++ b/board/freescale/ls1028a/ls1028a.c
> @@ -27,6 +27,39 @@
> 
>  DECLARE_GLOBAL_DATA_PTR;
> 
> +int config_board_mux(void)
> +{
> +#if defined(CONFIG_TARGET_LS1028AQDS) &&
> defined(CONFIG_FSL_QIXIS)
> +	u8 reg;
> +
> +	reg = QIXIS_READ(brdcfg[13]);
> +	/* Field| Function
> +	 * --------------------------------------------------------------
> +	 * 7-6  | Controls I2C3 routing (net CFG_MUX_I2C3):
> +	 * I2C3 | 10= Routes {SCL, SDA} to CAN1 transceiver as {TX, RX}.
> +	 * --------------------------------------------------------------
> +	 * 5-4  | Controls I2C4 routing (net CFG_MUX_I2C4):
> +	 * I2C4 |11= Routes {SCL, SDA} to CAN2 transceiver as {TX, RX}.
> +	 */
> +	reg &= ~(0xf0);
> +	reg |= 0xb0;
> +	QIXIS_WRITE(brdcfg[13], reg);
> +
> +	reg = QIXIS_READ(brdcfg[15]);
> +	/* Field| Function
> +	 * --------------------------------------------------------------
> +	 * 7    | Controls the CAN1 transceiver (net CFG_CAN1_STBY):
> +	 * CAN1 | 0= CAN #1 transceiver enabled
> +	 * --------------------------------------------------------------

Remove "-----" for all comments 

> +	 * 6    | Controls the CAN2 transceiver (net CFG_CAN2_STBY):
> +	 * CAN2 | 0= CAN #2 transceiver enabled
> +	 */
> +	reg &= ~(0xc0);
> +	QIXIS_WRITE(brdcfg[15], reg);
> +#endif
> +	return 0;
> +}
> +
>  int board_init(void)
>  {
>  #ifdef CONFIG_ENV_IS_NOWHERE
> @@ -55,6 +88,15 @@ int board_eth_init(bd_t *bis)
>  	return pci_eth_init(bis);
>  }
> 
> +#if defined(CONFIG_ARCH_MISC_INIT)
> +int arch_misc_init(void)
> +{
> +	config_board_mux();
> +
> +	return 0;
> +}
> +#endif
> +
>  int board_early_init_f(void)
>  {
>  #ifdef CONFIG_SYS_I2C_EARLY_INIT
> @@ -195,6 +237,53 @@ int checkboard(void)  }  #endif
> 
> +#ifdef CONFIG_TARGET_LS1028AQDS
> +int checkboard1(void)

Where checkboard1 is being used?

> +{
> +#ifdef CONFIG_FSL_QIXIS
> +	char buf[64];
> +#ifndef CONFIG_SD_BOOT
> +	u8 sw;
> +#endif
> +#endif
> +
> +	puts("Board: LS1028AQDS, boot from ");
> +
> +#ifdef CONFIG_FSL_QIXIS
> +#ifdef CONFIG_SD_BOOT
> +	puts("SD\n");
> +#else
> +
> +	sw = QIXIS_READ(brdcfg[0]);
> +
> +	switch (sw) {
> +	case 0x00:
> +		printf("Serial NOR flash\n");
> +		break;
> +	case 0x20:
> +		printf("Serial NAND flash\n");
> +		break;
> +	case 0x60:
> +		printf("QSPI Emulator\n");
> +		break;
> +	default:
> +		printf("invalid setting of SW: 0x%x\n", sw);
> +		break;
> +	}
> +#endif
> +
> +	printf("Sys ID: 0x%02x, Sys Ver: 0x%02x\n",
> +	       QIXIS_READ(id), QIXIS_READ(arch));
> +
> +	printf("FPGA:  v%d (%s), build %d\n",
> +	       (int)QIXIS_READ(scver), qixis_read_tag(buf),
> +	       (int)qixis_read_minor());
> +#endif
> +
> +	return 0;
> +}
> +#endif
> +
>  #ifdef CONFIG_TARGET_LS1028ARDB
>  int checkboard1(void)
>  {
> diff --git a/configs/ls1028aqds_tfa_defconfig
> b/configs/ls1028aqds_tfa_defconfig

Re-generate using make savedefconfig

> new file mode 100644
> index 0000000..2a592a0
> --- /dev/null
> +++ b/configs/ls1028aqds_tfa_defconfig
> @@ -0,0 +1,61 @@
> +CONFIG_ARM=y
> +CONFIG_TARGET_LS1028AQDS=y
> +CONFIG_SYS_FSL_SDHC_CLK_DIV=1
> +CONFIG_TFABOOT=y
> +CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT=y
> +CONFIG_SEC_FIRMWARE_ARMV8_PSCI=y
> +CONFIG_AHCI=y
> +CONFIG_DISTRO_DEFAULTS=y
> +CONFIG_NR_DRAM_BANKS=2
> +# CONFIG_SYS_MALLOC_F is not set
> +CONFIG_FIT_VERBOSE=y
> +CONFIG_OF_BOARD_SETUP=y
> +CONFIG_OF_STDOUT_VIA_ALIAS=y
> +CONFIG_BOOTDELAY=10
> +CONFIG_USE_BOOTARGS=y
> +CONFIG_BOOTARGS="console=ttyS0,115200 root=/dev/ram0
> earlycon=uart8250,mmio,0x21c0500 ramdisk_size=0x2000000
> default_hugepagesz=2m hugepagesz=2m hugepages=256 video=1920x1080-
> 32 at 60 cma=256M"
> +CONFIG_CMD_GREPENV=y
> +CONFIG_CMD_GPT=y
> +CONFIG_CMD_I2C=y
> +CONFIG_CMD_MMC=y
> +CONFIG_CMD_PCI=y
> +CONFIG_CMD_SF=y
> +CONFIG_CMD_USB=y
> +# CONFIG_CMD_SETEXPR is not set
> +CONFIG_CMD_CACHE=y
> +CONFIG_OF_CONTROL=y
> +CONFIG_DEFAULT_DEVICE_TREE="fsl-ls1028a-qds"
> +CONFIG_ENV_IS_IN_MMC=y
> +CONFIG_ENV_IS_IN_SPI_FLASH=y
> +CONFIG_NET_RANDOM_ETHADDR=y
> +CONFIG_NETCONSOLE=y
> +CONFIG_DM=y
> +CONFIG_SCSI_AHCI=y
> +CONFIG_SATA_CEVA=y
> +CONFIG_FSL_CAAM=y
> +CONFIG_DM_MMC=y
> +CONFIG_DM_SPI_FLASH=y
> +CONFIG_SPI_FLASH=y
> +CONFIG_SPI_FLASH_SPANSION=y
> +CONFIG_SPI_FLASH_STMICRO=y
> +# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set CONFIG_PHYLIB=y
> +CONFIG_PHY_ATHEROS=y CONFIG_DM_ETH=y CONFIG_PHY_GIGE=y
> CONFIG_E1000=y
> +CONFIG_PCI=y CONFIG_DM_PCI=y CONFIG_DM_PCI_COMPAT=y
> +CONFIG_PCIE_LAYERSCAPE=y CONFIG_SCSI=y CONFIG_DM_SCSI=y
> +CONFIG_SYS_NS16550=y CONFIG_SPI=y CONFIG_DM_SPI=y
> CONFIG_FSL_DSPI=y
> +CONFIG_USB=y CONFIG_DM_USB=y CONFIG_USB_XHCI_HCD=y
> +CONFIG_USB_XHCI_DWC3=y CONFIG_EFI_LOADER_BOUNCE_BUFFER=y
> diff --git a/include/configs/ls1028aqds.h b/include/configs/ls1028aqds.h new
> file mode 100644 index 0000000..6e8862f
> --- /dev/null
> +++ b/include/configs/ls1028aqds.h
> @@ -0,0 +1,206 @@
> +/* SPDX-License-Identifier: GPL-2.0+ */
> +/*
> + * Copyright 2019 NXP
> + */
> +
> +#ifndef __LS1028A_QDS_H
> +#define __LS1028A_QDS_H
> +
> +#include "ls1028a_common.h"
> +
> +#define CONFIG_SYS_CLK_FREQ		100000000
> +#define CONFIG_DDR_CLK_FREQ		100000000
> +#define COUNTER_FREQUENCY_REAL
> 	(CONFIG_SYS_CLK_FREQ/4)
> +
> +/* DDR */
> +#define CONFIG_DDR_SPD
> +#define CONFIG_DDR_ECC
> +#define CONFIG_ECC_INIT_VIA_DDRCONTROLLER
> +#define CONFIG_MEM_INIT_VALUE		0xdeadbeef
> +#define SPD_EEPROM_ADDRESS1	0x51
> +#define SPD_EEPROM_ADDRESS2	0x52
> +#define CONFIG_SYS_SPD_BUS_NUM	0	/* SPD on I2C bus 0 */
> +#define SPD_EEPROM_ADDRESS	SPD_EEPROM_ADDRESS1
> +#define CONFIG_DIMM_SLOTS_PER_CTLR		2
> +#define CONFIG_SYS_SDRAM_SIZE		0x80000000
> +
> +#define CONFIG_QIXIS_I2C_ACCESS
> +#define CONFIG_SYS_I2C_EARLY_INIT
> +
> +/*
> + * QIXIS Definitions
> + */
> +#define CONFIG_FSL_QIXIS
> +
> +#ifdef CONFIG_FSL_QIXIS
> +#define QIXIS_BASE			0x7fb00000
> +#define QIXIS_BASE_PHYS			QIXIS_BASE
> +#define CONFIG_SYS_I2C_FPGA_ADDR	0x66
> +#define QIXIS_LBMAP_SWITCH		1
> +#define QIXIS_LBMAP_MASK		0x0f
> +#define QIXIS_LBMAP_SHIFT		5
> +#define QIXIS_LBMAP_DFLTBANK		0x00
> +#define QIXIS_LBMAP_SD			0x00
> +#define QIXIS_LBMAP_EMMC		0x00
> +#define QIXIS_LBMAP_QSPI		0x00
> +#define QIXIS_RCW_SRC_SD		0x8
> +#define QIXIS_RCW_SRC_EMMC		0x9
> +#define QIXIS_RCW_SRC_QSPI		0xf
> +#define QIXIS_RST_CTL_RESET		0x31
> +#define QIXIS_RCFG_CTL_RECONFIG_IDLE	0x20
> +#define QIXIS_RCFG_CTL_RECONFIG_START	0x21
> +#define QIXIS_RCFG_CTL_WATCHDOG_ENBLE	0x08
> +#define QIXIS_RST_FORCE_MEM		0x01
> +
> +#define CONFIG_SYS_FPGA_CSPR_EXT	(0x0)
> +#define CONFIG_SYS_FPGA_CSPR
> 	(CSPR_PHYS_ADDR(QIXIS_BASE_PHYS) | \
> +					CSPR_PORT_SIZE_8 | \
> +					CSPR_MSEL_GPCM | \
> +					CSPR_V)
> +#define CONFIG_SYS_FPGA_AMASK		IFC_AMASK(64 * 1024)
> +#define CONFIG_SYS_FPGA_CSOR		(CSOR_NOR_ADM_SHIFT(4) |
> \
> +					CSOR_NOR_NOR_MODE_AVD_NOR
> | \
> +					CSOR_NOR_TRHZ_80)
> +
> +/*
> + * QIXIS Timing parameters for IFC GPCM  */
> +#define CONFIG_SYS_FPGA_FTIM0		(FTIM0_GPCM_TACSE(0xc) |
> \
> +					FTIM0_GPCM_TEADC(0x20) | \
> +					FTIM0_GPCM_TEAHC(0x10))
> +#define CONFIG_SYS_FPGA_FTIM1		(FTIM1_GPCM_TACO(0x50) |
> \
> +					FTIM1_GPCM_TRAD(0x1f))
> +#define CONFIG_SYS_FPGA_FTIM2		(FTIM2_GPCM_TCS(0x8) | \
> +					FTIM2_GPCM_TCH(0x8) | \
> +					FTIM2_GPCM_TWP(0xf0))
> +#define CONFIG_SYS_FPGA_FTIM3		0x0
> +#endif
> +

Ifc??


> +/* RTC */
> +#define CONFIG_SYS_RTC_BUS_NUM         1
> +#define I2C_MUX_CH_RTC                 0xB
> +
> +/* FlexSPI */
> +#ifdef CONFIG_NXP_FSPI
> +#define NXP_FSPI_FLASH_SIZE            SZ_256M
> +#define NXP_FSPI_FLASH_NUM              1
> +#endif
> +

Remove FlexSPI

> +/* Store environment at top of flash */
> +#define CONFIG_ENV_SIZE			0x2000
> +
> +#ifdef CONFIG_SPL_BUILD
> +#define CONFIG_SYS_MONITOR_BASE CONFIG_SPL_TEXT_BASE #else
> #define
> +CONFIG_SYS_MONITOR_BASE CONFIG_SYS_TEXT_BASE #endif
> +
> +/* SATA */
> +#define CONFIG_SCSI_AHCI_PLAT
> +
> +#define CONFIG_SYS_SATA1			AHCI_BASE_ADDR1
> +#ifndef CONFIG_CMD_EXT2
> +#define CONFIG_CMD_EXT2
> +#endif
> +#define CONFIG_SYS_SCSI_MAX_SCSI_ID		1
> +#define CONFIG_SYS_SCSI_MAX_LUN			1
> +#define CONFIG_SYS_SCSI_MAX_DEVICE
> 	(CONFIG_SYS_SCSI_MAX_SCSI_ID * \
> +
> 	CONFIG_SYS_SCSI_MAX_LUN)
> +/* DSPI */
> +#ifdef CONFIG_FSL_DSPI
> +#define CONFIG_SPI_FLASH_SST
> +#define CONFIG_SPI_FLASH_EON
> +#endif
> +
> +#ifndef SPL_NO_ENV
> +#undef CONFIG_EXTRA_ENV_SETTINGS
> +#define CONFIG_EXTRA_ENV_SETTINGS		\
> +	"board=ls1028aqds\0"			\
> +	"hwconfig=fsl_ddr:bank_intlv=auto\0"	\
> +	"ramdisk_addr=0x800000\0"		\
> +	"ramdisk_size=0x2000000\0"		\
> +	"fdt_high=0xffffffffffffffff\0"		\
> +	"initrd_high=0xffffffffffffffff\0"	\
> +	"fdt_addr=0x00f00000\0"                 \
> +	"kernel_addr=0x01000000\0"              \
> +	"scriptaddr=0x80000000\0"               \
> +	"scripthdraddr=0x80080000\0"		\
> +	"fdtheader_addr_r=0x80100000\0"         \
> +	"kernelheader_addr_r=0x80200000\0"      \
> +	"load_addr=0xa0000000\0"            \
> +	"kernel_addr_r=0x81000000\0"            \
> +	"fdt_addr_r=0x90000000\0"               \
> +	"ramdisk_addr_r=0xa0000000\0"           \
> +	"kernel_start=0x1000000\0"		\
> +	"kernelheader_start=0x800000\0"		\
> +	"kernel_load=0xa0000000\0"		\
> +	"kernel_size=0x2800000\0"		\
> +	"kernelheader_size=0x40000\0"		\
> +	"kernel_addr_sd=0x8000\0"		\
> +	"kernel_size_sd=0x14000\0"		\
> +	"kernelhdr_addr_sd=0x4000\0"		\
> +	"kernelhdr_size_sd=0x10\0"		\
> +	"console=ttyS0,115200\0"                \
> +	"mtdparts=" CONFIG_MTDPARTS_DEFAULT "\0"	\
> +	BOOTENV					\
> +	"boot_scripts=ls1028aqds_boot.scr\0"    \
> +	"boot_script_hdr=hdr_ls1028aqds_bs.out\0"	\
> +	"scan_dev_for_boot_part="               \
> +		"part list ${devtype} ${devnum} devplist; "   \
> +		"env exists devplist || setenv devplist 1; "  \
> +		"for distro_bootpart in ${devplist}; do "     \
> +		  "if fstype ${devtype} "                  \
> +			"${devnum}:${distro_bootpart} "      \
> +			"bootfstype; then "                  \
> +			"run scan_dev_for_boot; "            \
> +		  "fi; "                                   \
> +		"done\0"                                   \
> +	"scan_dev_for_boot="				  \
> +		"echo Scanning ${devtype} "		  \
> +				"${devnum}:${distro_bootpart}...; "  \
> +		"for prefix in ${boot_prefixes}; do "	  \
> +			"run scan_dev_for_scripts; "	  \
> +		"done;"					  \
> +		"\0"					  \
> +	"boot_a_script="				  \
> +		"load ${devtype} ${devnum}:${distro_bootpart} "  \
> +			"${scriptaddr} ${prefix}${script}; "    \
> +		"env exists secureboot && load ${devtype} "     \
> +			"${devnum}:${distro_bootpart} "		\
> +			"${scripthdraddr} ${prefix}${boot_script_hdr} " \
> +			"&& esbc_validate ${scripthdraddr};"    \
> +		"source ${scriptaddr}\0"	  \
> +	"qspi_bootcmd=echo Trying load from flexspi..;"      \
> +		"sf probe && sf read $load_addr "         \
> +		"$kernel_start $kernel_size; env exists secureboot "	\
> +		"&& sf read $kernelheader_addr_r $kernelheader_start "
> 	\
> +		"$kernelheader_size && esbc_validate
> ${kernelheader_addr_r}; " \
> +		"bootm $load_addr#$board\0"		\
> +	"qspi_hdploadcmd=echo Trying load HDP firmware from flexspi..;"
> \
> +		"hdp load 0x20900000 0x2000\0"		\
> +	"sd_bootcmd=echo Trying load from SD ..;"	\
> +		"mmcinfo; mmc read $load_addr "		\
> +		"$kernel_addr_sd $kernel_size_sd && "	\
> +		"env exists secureboot && mmc read $kernelheader_addr_r
> " \
> +		"$kernelhdr_addr_sd $kernelhdr_size_sd "		\
> +		" && esbc_validate ${kernelheader_addr_r};"	\
> +		"bootm $load_addr#$board\0"		\
> +	"sd_hdploadcmd=echo Trying load HDP firmware from SD..;"      \
> +		"mmcinfo;mmc read $load_addr 0x4800 0x200 "
> 	\
> +		"&& hdp load $load_addr 0x2000\0"	\
> +	"emmc_bootcmd=echo Trying load from EMMC ..;"	\
> +		"mmcinfo; mmc dev 1; mmc read $load_addr "		\
> +		"$kernel_addr_sd $kernel_size_sd && "	\
> +		"env exists secureboot && mmc read $kernelheader_addr_r
> " \
> +		"$kernelhdr_addr_sd $kernelhdr_size_sd "		\
> +		" && esbc_validate ${kernelheader_addr_r};"	\
> +		"bootm $load_addr#$board\0"			\
> +	"emmc_hdploadcmd=echo Trying load HDP firmware from EMMC..;"
> \
> +		"mmc dev 1;mmcinfo;mmc read $load_addr 0x4800 0x200 "
> 		\
> +		"&& hdp load $load_addr 0x2000\0"
> +#endif

Remove qspi and flexspi

> +
> +#ifdef CONFIG_SECURE_BOOT
> +#include <asm/fsl_secure_boot.h>
> +#endif
> +#endif /* __LS1028A_QDS_H */
> --

You are adding support of secure boot.  But not defconfig for the same
Either add defconfig or remove support of secure boot.

--pk

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2019-03-22 10:56 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-03-18  9:45 [U-Boot] [PATCH 1/3] armv8: ls1028a: Add NXP LS1028A SoC support Bhaskar Upadhaya
2019-03-18  9:45 ` [U-Boot] [PATCH 2/3] armv8: ls1028ardb: Add support for LS1028ARDB platform Bhaskar Upadhaya
2019-03-22 10:52   ` Prabhakar Kushwaha
2019-03-18  9:45 ` [U-Boot] [PATCH 3/3] armv8: ls1028aqds: Add support of LS1028AQDS Bhaskar Upadhaya
2019-03-22 10:56   ` Prabhakar Kushwaha
2019-03-22 10:32 ` [U-Boot] [PATCH 1/3] armv8: ls1028a: Add NXP LS1028A SoC support Prabhakar Kushwaha

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.