]> git.sur5r.net Git - u-boot/commitdiff
Merge git://git.denx.de/u-boot-fsl-qoriq
authorTom Rini <trini@konsulko.com>
Mon, 26 Sep 2016 17:24:46 +0000 (13:24 -0400)
committerTom Rini <trini@konsulko.com>
Mon, 26 Sep 2016 21:10:56 +0000 (17:10 -0400)
trini: Drop local memset() from
examples/standalone/mem_to_mem_idma2intr.c

Signed-off-by: Tom Rini <trini@konsulko.com>
130 files changed:
Makefile
README
arch/arm/Kconfig
arch/arm/cpu/armv7/ls102xa/Kconfig [new file with mode: 0644]
arch/arm/cpu/armv7/ls102xa/Makefile
arch/arm/cpu/armv7/ls102xa/fsl_epu.c
arch/arm/cpu/armv7/ls102xa/fsl_epu.h
arch/arm/cpu/armv7/ls102xa/fsl_ls1_serdes.c
arch/arm/cpu/armv7/ls102xa/ls102xa_psci.c [new file with mode: 0644]
arch/arm/cpu/armv7/ls102xa/psci.S
arch/arm/cpu/armv7/ls102xa/soc.c
arch/arm/cpu/armv7/psci.S
arch/arm/cpu/armv8/fsl-layerscape/Kconfig [new file with mode: 0644]
arch/arm/cpu/armv8/fsl-layerscape/Makefile
arch/arm/cpu/armv8/fsl-layerscape/cpu.c
arch/arm/cpu/armv8/fsl-layerscape/fsl_lsch2_serdes.c
arch/arm/cpu/armv8/fsl-layerscape/fsl_lsch2_speed.c
arch/arm/cpu/armv8/fsl-layerscape/fsl_lsch3_serdes.c
arch/arm/cpu/armv8/fsl-layerscape/lowlevel.S
arch/arm/cpu/armv8/fsl-layerscape/ppa.c
arch/arm/cpu/armv8/fsl-layerscape/soc.c
arch/arm/cpu/armv8/fsl-layerscape/spl.c
arch/arm/dts/Makefile
arch/arm/dts/fsl-ls1046a-qds-duart.dts [new file with mode: 0644]
arch/arm/dts/fsl-ls1046a-qds.dtsi [new file with mode: 0644]
arch/arm/dts/fsl-ls1046a-rdb.dts [new file with mode: 0644]
arch/arm/dts/fsl-ls1046a.dtsi [new file with mode: 0644]
arch/arm/include/asm/arch-fsl-layerscape/config.h
arch/arm/include/asm/arch-fsl-layerscape/fsl_serdes.h
arch/arm/include/asm/arch-fsl-layerscape/immap_lsch2.h
arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h
arch/arm/include/asm/arch-fsl-layerscape/ns_access.h
arch/arm/include/asm/arch-fsl-layerscape/soc.h
arch/arm/include/asm/arch-ls102xa/config.h
arch/arm/include/asm/arch-ls102xa/fsl_serdes.h
arch/arm/include/asm/arch-ls102xa/immap_ls102xa.h
arch/arm/include/asm/arch-ls102xa/ls102xa_soc.h
arch/arm/include/asm/fsl_secure_boot.h
arch/arm/include/asm/psci.h
arch/powerpc/cpu/mpc85xx/bsc9132_serdes.c
arch/powerpc/cpu/mpc85xx/c29x_serdes.c
arch/powerpc/cpu/mpc85xx/fsl_corenet2_serdes.c
arch/powerpc/cpu/mpc85xx/fsl_corenet_serdes.c
arch/powerpc/cpu/mpc85xx/mpc8536_serdes.c
arch/powerpc/cpu/mpc85xx/mpc8544_serdes.c
arch/powerpc/cpu/mpc85xx/mpc8548_serdes.c
arch/powerpc/cpu/mpc85xx/mpc8568_serdes.c
arch/powerpc/cpu/mpc85xx/mpc8569_serdes.c
arch/powerpc/cpu/mpc85xx/mpc8572_serdes.c
arch/powerpc/cpu/mpc85xx/p1010_serdes.c
arch/powerpc/cpu/mpc85xx/p1021_serdes.c
arch/powerpc/cpu/mpc85xx/p1022_serdes.c
arch/powerpc/cpu/mpc85xx/p1023_serdes.c
arch/powerpc/cpu/mpc85xx/p2020_serdes.c
arch/powerpc/cpu/mpc86xx/mpc8610_serdes.c
arch/powerpc/cpu/mpc86xx/mpc8641_serdes.c
arch/powerpc/include/asm/fsl_serdes.h
board/freescale/common/arm_sleep.c
board/freescale/common/ns_access.c
board/freescale/common/vid.c
board/freescale/ls1012afrdm/ls1012afrdm.c
board/freescale/ls1012aqds/ls1012aqds.c
board/freescale/ls1012ardb/ls1012ardb.c
board/freescale/ls1021aqds/ls1021aqds.c
board/freescale/ls1021atwr/ls1021atwr.c
board/freescale/ls1043aqds/ls1043aqds.c
board/freescale/ls1043ardb/ls1043ardb.c
board/freescale/ls1046aqds/Kconfig [new file with mode: 0644]
board/freescale/ls1046aqds/MAINTAINERS [new file with mode: 0644]
board/freescale/ls1046aqds/Makefile [new file with mode: 0644]
board/freescale/ls1046aqds/README [new file with mode: 0644]
board/freescale/ls1046aqds/ddr.c [new file with mode: 0644]
board/freescale/ls1046aqds/ddr.h [new file with mode: 0644]
board/freescale/ls1046aqds/eth.c [new file with mode: 0644]
board/freescale/ls1046aqds/ls1046aqds.c [new file with mode: 0644]
board/freescale/ls1046aqds/ls1046aqds_pbi.cfg [new file with mode: 0644]
board/freescale/ls1046aqds/ls1046aqds_qixis.h [new file with mode: 0644]
board/freescale/ls1046aqds/ls1046aqds_rcw_nand.cfg [new file with mode: 0644]
board/freescale/ls1046aqds/ls1046aqds_rcw_sd_ifc.cfg [new file with mode: 0644]
board/freescale/ls1046aqds/ls1046aqds_rcw_sd_qspi.cfg [new file with mode: 0644]
board/freescale/ls1046ardb/Kconfig [new file with mode: 0644]
board/freescale/ls1046ardb/MAINTAINERS [new file with mode: 0644]
board/freescale/ls1046ardb/Makefile [new file with mode: 0644]
board/freescale/ls1046ardb/README [new file with mode: 0644]
board/freescale/ls1046ardb/cpld.c [new file with mode: 0644]
board/freescale/ls1046ardb/cpld.h [new file with mode: 0644]
board/freescale/ls1046ardb/ddr.c [new file with mode: 0644]
board/freescale/ls1046ardb/ddr.h [new file with mode: 0644]
board/freescale/ls1046ardb/eth.c [new file with mode: 0644]
board/freescale/ls1046ardb/ls1046ardb.c [new file with mode: 0644]
board/freescale/ls1046ardb/ls1046ardb_pbi.cfg [new file with mode: 0644]
board/freescale/ls1046ardb/ls1046ardb_rcw_emmc.cfg [new file with mode: 0644]
board/freescale/ls1046ardb/ls1046ardb_rcw_sd.cfg [new file with mode: 0644]
board/freescale/ls2080a/ls2080a.c
board/freescale/ls2080aqds/ls2080aqds.c
board/freescale/ls2080ardb/ls2080ardb.c
configs/ls1046aqds_defconfig [new file with mode: 0644]
configs/ls1046aqds_nand_defconfig [new file with mode: 0644]
configs/ls1046aqds_qspi_defconfig [new file with mode: 0644]
configs/ls1046aqds_sdcard_ifc_defconfig [new file with mode: 0644]
configs/ls1046aqds_sdcard_qspi_defconfig [new file with mode: 0644]
configs/ls1046ardb_emmc_defconfig [new file with mode: 0644]
configs/ls1046ardb_qspi_defconfig [new file with mode: 0644]
configs/ls1046ardb_sdcard_defconfig [new file with mode: 0644]
drivers/ddr/fsl/Makefile
drivers/ddr/fsl/fsl_ddr_gen4.c
drivers/ddr/fsl/fsl_mmdc.c [new file with mode: 0644]
drivers/ddr/fsl/interactive.c
drivers/misc/Makefile
drivers/misc/fsl_debug_server.c [deleted file]
drivers/net/fm/Makefile
drivers/net/fm/fm.c
examples/standalone/mem_to_mem_idma2intr.c
include/_exports.h
include/configs/ls1012a_common.h
include/configs/ls1012afrdm.h
include/configs/ls1012aqds.h
include/configs/ls1012ardb.h
include/configs/ls1021aqds.h
include/configs/ls1046a_common.h [new file with mode: 0644]
include/configs/ls1046aqds.h [new file with mode: 0644]
include/configs/ls1046ardb.h [new file with mode: 0644]
include/configs/ls2080a_common.h
include/exports.h
include/fsl_csu.h
include/fsl_ddr_sdram.h
include/fsl_debug_server.h [deleted file]
include/fsl_immap.h
include/fsl_mmdc.h
include/linux/usb/xhci-fsl.h

index c30f90af8cff5a1490b36fd4132f229f25895e69..27d425e346cc716ddc579b3742d78a4e1724acc7 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -655,6 +655,7 @@ libs-y += drivers/power/ \
 libs-y += drivers/spi/
 libs-$(CONFIG_FMAN_ENET) += drivers/net/fm/
 libs-$(CONFIG_SYS_FSL_DDR) += drivers/ddr/fsl/
+libs-$(CONFIG_SYS_FSL_MMDC) += drivers/ddr/fsl/
 libs-$(CONFIG_ALTERA_SDRAM) += drivers/ddr/altera/
 libs-y += drivers/serial/
 libs-y += drivers/usb/dwc3/
diff --git a/README b/README
index d916ee77f59486fc65a6ef515aaeab33b498cf73..bc626dc7a83d9f2712c523ee0722eca7a0fa4739 100644 (file)
--- a/README
+++ b/README
@@ -4898,12 +4898,6 @@ The Freescale Layerscape Debug Server Support supports the loading of
 "Debug Server firmware" and triggering SP boot-rom.
 This firmware often needs to be loaded during U-Boot booting.
 
-- CONFIG_FSL_DEBUG_SERVER
-       Enable the Debug Server for Layerscape SoCs.
-
-- CONFIG_SYS_DEBUG_SERVER_DRAM_BLOCK_MIN_SIZE
-       Define minimum DDR size required for debug server image
-
 - CONFIG_SYS_MC_RSV_MEM_ALIGN
        Define alignment of reserved memory MC requires
 
index 0083bf9ef001d67c5faf0256755532a748141afa..38ad59058f56d7f9a758d554350a60803ef8f576 100644 (file)
@@ -788,6 +788,7 @@ config TARGET_HIKEY
 
 config TARGET_LS1012AQDS
        bool "Support ls1012aqds"
+       select ARCH_LS1012A
        select ARM64
        help
          Support for Freescale LS1012AQDS platform.
@@ -797,6 +798,7 @@ config TARGET_LS1012AQDS
 
 config TARGET_LS1012ARDB
        bool "Support ls1012ardb"
+       select ARCH_LS1012A
        select ARM64
        help
          Support for Freescale LS1012ARDB platform.
@@ -806,6 +808,7 @@ config TARGET_LS1012ARDB
 
 config TARGET_LS1012AFRDM
        bool "Support ls1012afrdm"
+       select ARCH_LS1012A
        select ARM64
        help
          Support for Freescale LS1012AFRDM platform.
@@ -817,16 +820,21 @@ config TARGET_LS1021AQDS
        bool "Support ls1021aqds"
        select CPU_V7
        select SUPPORT_SPL
+       select ARCH_LS1021A
        select ARCH_SUPPORT_PSCI
+       select LS1_DEEP_SLEEP
 
 config TARGET_LS1021ATWR
        bool "Support ls1021atwr"
        select CPU_V7
        select SUPPORT_SPL
+       select ARCH_LS1021A
        select ARCH_SUPPORT_PSCI
+       select LS1_DEEP_SLEEP
 
 config TARGET_LS1043AQDS
        bool "Support ls1043aqds"
+       select ARCH_LS1043A
        select ARM64
        select ARMV8_MULTIENTRY
        select SUPPORT_SPL
@@ -835,12 +843,39 @@ config TARGET_LS1043AQDS
 
 config TARGET_LS1043ARDB
        bool "Support ls1043ardb"
+       select ARCH_LS1043A
        select ARM64
        select ARMV8_MULTIENTRY
        select SUPPORT_SPL
        help
          Support for Freescale LS1043ARDB platform.
 
+config TARGET_LS1046AQDS
+       bool "Support ls1046aqds"
+       select ARCH_LS1046A
+       select ARM64
+       select ARMV8_MULTIENTRY
+       select SUPPORT_SPL
+       select DM_SPI_FLASH if DM_SPI
+       help
+         Support for Freescale LS1046AQDS platform.
+         The LS1046A Development System (QDS) is a high-performance
+         development platform that supports the QorIQ LS1046A
+         Layerscape Architecture processor.
+
+config TARGET_LS1046ARDB
+       bool "Support ls1046ardb"
+       select ARCH_LS1046A
+       select ARM64
+       select ARMV8_MULTIENTRY
+       select SUPPORT_SPL
+       select DM_SPI_FLASH if DM_SPI
+       help
+         Support for Freescale LS1046ARDB platform.
+         The LS1046A Reference Design Board (RDB) is a high-performance
+         development platform that supports the QorIQ LS1046A
+         Layerscape Architecture processor.
+
 config TARGET_H2200
        bool "Support h2200"
        select CPU_PXA
@@ -926,6 +961,8 @@ source "arch/arm/mach-kirkwood/Kconfig"
 
 source "arch/arm/mach-mvebu/Kconfig"
 
+source "arch/arm/cpu/armv7/ls102xa/Kconfig"
+
 source "arch/arm/cpu/armv7/mx7/Kconfig"
 
 source "arch/arm/cpu/armv7/mx6/Kconfig"
@@ -934,6 +971,8 @@ source "arch/arm/cpu/armv7/mx5/Kconfig"
 
 source "arch/arm/cpu/armv7/omap-common/Kconfig"
 
+source "arch/arm/cpu/armv8/fsl-layerscape/Kconfig"
+
 source "arch/arm/mach-orion5x/Kconfig"
 
 source "arch/arm/mach-rmobile/Kconfig"
@@ -991,7 +1030,9 @@ source "board/freescale/ls2080ardb/Kconfig"
 source "board/freescale/ls1021aqds/Kconfig"
 source "board/freescale/ls1043aqds/Kconfig"
 source "board/freescale/ls1021atwr/Kconfig"
+source "board/freescale/ls1046aqds/Kconfig"
 source "board/freescale/ls1043ardb/Kconfig"
+source "board/freescale/ls1046ardb/Kconfig"
 source "board/freescale/ls1012aqds/Kconfig"
 source "board/freescale/ls1012ardb/Kconfig"
 source "board/freescale/ls1012afrdm/Kconfig"
diff --git a/arch/arm/cpu/armv7/ls102xa/Kconfig b/arch/arm/cpu/armv7/ls102xa/Kconfig
new file mode 100644 (file)
index 0000000..920eb4a
--- /dev/null
@@ -0,0 +1,6 @@
+config ARCH_LS1021A
+       bool "Freescale Layerscape LS1021A SoC"
+       select SYS_FSL_ERRATUM_A010315
+
+config LS1_DEEP_SLEEP
+       bool "Freescale Layerscape 1 deep sleep"
index 02283009abd06cfd8fcdaa9c470ef69a21465b37..f8300c777544e5464937f091acdc06cd7d35fb29 100644 (file)
@@ -16,5 +16,5 @@ obj-$(CONFIG_SYS_HAS_SERDES) += fsl_ls1_serdes.o ls102xa_serdes.o
 obj-$(CONFIG_SPL) += spl.o
 
 ifdef CONFIG_ARMV7_PSCI
-obj-y  += psci.o
+obj-y  += psci.o ls102xa_psci.o
 endif
index 6212640d1444daae48ae84073695aeddaaae5403..b4de523ee4d00f3a2b11ffc32687e0a4c925a9e5 100644 (file)
@@ -9,6 +9,163 @@
 
 #include "fsl_epu.h"
 
+struct fsm_reg_vals epu_default_val[] = {
+       /* EPGCR (Event Processor Global Control Register) */
+       {EPGCR, 0},
+       /* EPECR (Event Processor Event Control Registers) */
+       {EPECR0 + EPECR_STRIDE * 0, 0},
+       {EPECR0 + EPECR_STRIDE * 1, 0},
+       {EPECR0 + EPECR_STRIDE * 2, 0xF0004004},
+       {EPECR0 + EPECR_STRIDE * 3, 0x80000084},
+       {EPECR0 + EPECR_STRIDE * 4, 0x20000084},
+       {EPECR0 + EPECR_STRIDE * 5, 0x08000004},
+       {EPECR0 + EPECR_STRIDE * 6, 0x80000084},
+       {EPECR0 + EPECR_STRIDE * 7, 0x80000084},
+       {EPECR0 + EPECR_STRIDE * 8, 0x60000084},
+       {EPECR0 + EPECR_STRIDE * 9, 0x08000084},
+       {EPECR0 + EPECR_STRIDE * 10, 0x42000084},
+       {EPECR0 + EPECR_STRIDE * 11, 0x90000084},
+       {EPECR0 + EPECR_STRIDE * 12, 0x80000084},
+       {EPECR0 + EPECR_STRIDE * 13, 0x08000084},
+       {EPECR0 + EPECR_STRIDE * 14, 0x02000084},
+       {EPECR0 + EPECR_STRIDE * 15, 0x00000004},
+       /*
+        * EPEVTCR (Event Processor EVT Pin Control Registers)
+        * SCU8 triger EVT2, and SCU11 triger EVT9
+        */
+       {EPEVTCR0 + EPEVTCR_STRIDE * 0, 0},
+       {EPEVTCR0 + EPEVTCR_STRIDE * 1, 0},
+       {EPEVTCR0 + EPEVTCR_STRIDE * 2, 0x80000001},
+       {EPEVTCR0 + EPEVTCR_STRIDE * 3, 0},
+       {EPEVTCR0 + EPEVTCR_STRIDE * 4, 0},
+       {EPEVTCR0 + EPEVTCR_STRIDE * 5, 0},
+       {EPEVTCR0 + EPEVTCR_STRIDE * 6, 0},
+       {EPEVTCR0 + EPEVTCR_STRIDE * 7, 0},
+       {EPEVTCR0 + EPEVTCR_STRIDE * 8, 0},
+       {EPEVTCR0 + EPEVTCR_STRIDE * 9, 0xB0000001},
+       /* EPCMPR (Event Processor Counter Compare Registers) */
+       {EPCMPR0 + EPCMPR_STRIDE * 0, 0},
+       {EPCMPR0 + EPCMPR_STRIDE * 1, 0},
+       {EPCMPR0 + EPCMPR_STRIDE * 2, 0x000000FF},
+       {EPCMPR0 + EPCMPR_STRIDE * 3, 0},
+       {EPCMPR0 + EPCMPR_STRIDE * 4, 0x000000FF},
+       {EPCMPR0 + EPCMPR_STRIDE * 5, 0x00000020},
+       {EPCMPR0 + EPCMPR_STRIDE * 6, 0},
+       {EPCMPR0 + EPCMPR_STRIDE * 7, 0},
+       {EPCMPR0 + EPCMPR_STRIDE * 8, 0x000000FF},
+       {EPCMPR0 + EPCMPR_STRIDE * 9, 0x000000FF},
+       {EPCMPR0 + EPCMPR_STRIDE * 10, 0x000000FF},
+       {EPCMPR0 + EPCMPR_STRIDE * 11, 0x000000FF},
+       {EPCMPR0 + EPCMPR_STRIDE * 12, 0x000000FF},
+       {EPCMPR0 + EPCMPR_STRIDE * 13, 0},
+       {EPCMPR0 + EPCMPR_STRIDE * 14, 0x000000FF},
+       {EPCMPR0 + EPCMPR_STRIDE * 15, 0x000000FF},
+       /* EPCCR (Event Processor Counter Control Registers) */
+       {EPCCR0 + EPCCR_STRIDE * 0, 0},
+       {EPCCR0 + EPCCR_STRIDE * 1, 0},
+       {EPCCR0 + EPCCR_STRIDE * 2, 0x92840000},
+       {EPCCR0 + EPCCR_STRIDE * 3, 0},
+       {EPCCR0 + EPCCR_STRIDE * 4, 0x92840000},
+       {EPCCR0 + EPCCR_STRIDE * 5, 0x92840000},
+       {EPCCR0 + EPCCR_STRIDE * 6, 0},
+       {EPCCR0 + EPCCR_STRIDE * 7, 0},
+       {EPCCR0 + EPCCR_STRIDE * 8, 0x92840000},
+       {EPCCR0 + EPCCR_STRIDE * 9, 0x92840000},
+       {EPCCR0 + EPCCR_STRIDE * 10, 0x92840000},
+       {EPCCR0 + EPCCR_STRIDE * 11, 0x92840000},
+       {EPCCR0 + EPCCR_STRIDE * 12, 0x92840000},
+       {EPCCR0 + EPCCR_STRIDE * 13, 0},
+       {EPCCR0 + EPCCR_STRIDE * 14, 0x92840000},
+       {EPCCR0 + EPCCR_STRIDE * 15, 0x92840000},
+       /* EPSMCR (Event Processor SCU Mux Control Registers) */
+       {EPSMCR0 + EPSMCR_STRIDE * 0, 0},
+       {EPSMCR0 + EPSMCR_STRIDE * 1, 0},
+       {EPSMCR0 + EPSMCR_STRIDE * 2, 0x6C700000},
+       {EPSMCR0 + EPSMCR_STRIDE * 3, 0x2F000000},
+       {EPSMCR0 + EPSMCR_STRIDE * 4, 0x002F0000},
+       {EPSMCR0 + EPSMCR_STRIDE * 5, 0x00002E00},
+       {EPSMCR0 + EPSMCR_STRIDE * 6, 0x7C000000},
+       {EPSMCR0 + EPSMCR_STRIDE * 7, 0x30000000},
+       {EPSMCR0 + EPSMCR_STRIDE * 8, 0x64300000},
+       {EPSMCR0 + EPSMCR_STRIDE * 9, 0x00003000},
+       {EPSMCR0 + EPSMCR_STRIDE * 10, 0x65000030},
+       {EPSMCR0 + EPSMCR_STRIDE * 11, 0x31740000},
+       {EPSMCR0 + EPSMCR_STRIDE * 12, 0x7F000000},
+       {EPSMCR0 + EPSMCR_STRIDE * 13, 0x00003100},
+       {EPSMCR0 + EPSMCR_STRIDE * 14, 0x00000031},
+       {EPSMCR0 + EPSMCR_STRIDE * 15, 0x76000000},
+       /* EPACR (Event Processor Action Control Registers) */
+       {EPACR0 + EPACR_STRIDE * 0, 0},
+       {EPACR0 + EPACR_STRIDE * 1, 0},
+       {EPACR0 + EPACR_STRIDE * 2, 0},
+       {EPACR0 + EPACR_STRIDE * 3, 0x00000080},
+       {EPACR0 + EPACR_STRIDE * 4, 0},
+       {EPACR0 + EPACR_STRIDE * 5, 0x00000040},
+       {EPACR0 + EPACR_STRIDE * 6, 0},
+       {EPACR0 + EPACR_STRIDE * 7, 0},
+       {EPACR0 + EPACR_STRIDE * 8, 0},
+       {EPACR0 + EPACR_STRIDE * 9, 0x0000001C},
+       {EPACR0 + EPACR_STRIDE * 10, 0x00000020},
+       {EPACR0 + EPACR_STRIDE * 11, 0},
+       {EPACR0 + EPACR_STRIDE * 12, 0x00000003},
+       {EPACR0 + EPACR_STRIDE * 13, 0x06000000},
+       {EPACR0 + EPACR_STRIDE * 14, 0x04000000},
+       {EPACR0 + EPACR_STRIDE * 15, 0x02000000},
+       /* EPIMCR (Event Processor Input Mux Control Registers) */
+       {EPIMCR0 + EPIMCR_STRIDE * 0, 0},
+       {EPIMCR0 + EPIMCR_STRIDE * 1, 0},
+       {EPIMCR0 + EPIMCR_STRIDE * 2, 0},
+       {EPIMCR0 + EPIMCR_STRIDE * 3, 0},
+       {EPIMCR0 + EPIMCR_STRIDE * 4, 0x44000000},
+       {EPIMCR0 + EPIMCR_STRIDE * 5, 0x40000000},
+       {EPIMCR0 + EPIMCR_STRIDE * 6, 0},
+       {EPIMCR0 + EPIMCR_STRIDE * 7, 0},
+       {EPIMCR0 + EPIMCR_STRIDE * 8, 0},
+       {EPIMCR0 + EPIMCR_STRIDE * 9, 0},
+       {EPIMCR0 + EPIMCR_STRIDE * 10, 0},
+       {EPIMCR0 + EPIMCR_STRIDE * 11, 0},
+       {EPIMCR0 + EPIMCR_STRIDE * 12, 0x44000000},
+       {EPIMCR0 + EPIMCR_STRIDE * 13, 0},
+       {EPIMCR0 + EPIMCR_STRIDE * 14, 0},
+       {EPIMCR0 + EPIMCR_STRIDE * 15, 0},
+       {EPIMCR0 + EPIMCR_STRIDE * 16, 0x6A000000},
+       {EPIMCR0 + EPIMCR_STRIDE * 17, 0},
+       {EPIMCR0 + EPIMCR_STRIDE * 18, 0},
+       {EPIMCR0 + EPIMCR_STRIDE * 19, 0},
+       {EPIMCR0 + EPIMCR_STRIDE * 20, 0x48000000},
+       {EPIMCR0 + EPIMCR_STRIDE * 21, 0},
+       {EPIMCR0 + EPIMCR_STRIDE * 22, 0x6C000000},
+       {EPIMCR0 + EPIMCR_STRIDE * 23, 0},
+       {EPIMCR0 + EPIMCR_STRIDE * 24, 0},
+       {EPIMCR0 + EPIMCR_STRIDE * 25, 0},
+       {EPIMCR0 + EPIMCR_STRIDE * 26, 0},
+       {EPIMCR0 + EPIMCR_STRIDE * 27, 0},
+       {EPIMCR0 + EPIMCR_STRIDE * 28, 0x76000000},
+       {EPIMCR0 + EPIMCR_STRIDE * 29, 0},
+       {EPIMCR0 + EPIMCR_STRIDE * 30, 0},
+       {EPIMCR0 + EPIMCR_STRIDE * 31, 0x76000000},
+       /* EPXTRIGCR (Event Processor Crosstrigger Control Register) */
+       {EPXTRIGCR, 0x0000FFDF},
+       /* end */
+       {FSM_END_FLAG, 0},
+};
+
+/**
+ * fsl_epu_setup - Setup EPU registers to default values
+ */
+void fsl_epu_setup(void *epu_base)
+{
+       struct fsm_reg_vals *data = epu_default_val;
+
+       if (!epu_base || !data)
+               return;
+
+       while (data->offset != FSM_END_FLAG) {
+               out_be32(epu_base + data->offset, data->value);
+               data++;
+       }
+}
+
 /**
  * fsl_epu_clean - Clear EPU registers
  */
index d658aad2ea6bc32369e71c92498f8297957f358b..d6f731054d591572832640f96c96d6c93cddbeb3 100644 (file)
 #define EPCTR31                0xA7C
 #define EPCTR_STRIDE   FSL_STRIDE_4B
 
+#define FSM_END_FLAG   0xFFFFFFFFUL
+
+struct fsm_reg_vals {
+       u32 offset;
+       u32 value;
+};
+
+void fsl_epu_setup(void *epu_base);
 void fsl_epu_clean(void *epu_base);
 
 #endif
index 46fac513410c401567859b0f1b59ef2d3245bfe4..8e247ee60bcac039ef67f1f875335780ded7be25 100644 (file)
@@ -23,9 +23,15 @@ int is_serdes_configured(enum srds_prtcl device)
        u64 ret = 0;
 
 #ifdef CONFIG_SYS_FSL_SRDS_1
+       if (!(serdes1_prtcl_map & (1ULL << NONE)))
+               fsl_serdes_init();
+
        ret |= (1ULL << device) & serdes1_prtcl_map;
 #endif
 #ifdef CONFIG_SYS_FSL_SRDS_2
+       if (!(serdes2_prtcl_map & (1ULL << NONE)))
+               fsl_serdes_init();
+
        ret |= (1ULL << device) & serdes2_prtcl_map;
 #endif
 
@@ -87,19 +93,24 @@ u64 serdes_init(u32 sd, u32 sd_addr, u32 sd_prctl_mask, u32 sd_prctl_shift)
                serdes_prtcl_map |= (1ULL << lane_prtcl);
        }
 
+       /* Set the first bit to indicate serdes has been initialized */
+       serdes_prtcl_map |= (1ULL << NONE);
+
        return serdes_prtcl_map;
 }
 
 void fsl_serdes_init(void)
 {
 #ifdef CONFIG_SYS_FSL_SRDS_1
-       serdes1_prtcl_map = serdes_init(FSL_SRDS_1,
+       if (!(serdes1_prtcl_map & (1ULL << NONE)))
+               serdes1_prtcl_map = serdes_init(FSL_SRDS_1,
                                        CONFIG_SYS_FSL_SERDES_ADDR,
                                        RCWSR4_SRDS1_PRTCL_MASK,
                                        RCWSR4_SRDS1_PRTCL_SHIFT);
 #endif
 #ifdef CONFIG_SYS_FSL_SRDS_2
-       serdes2_prtcl_map = serdes_init(FSL_SRDS_2,
+       if (!(serdes2_prtcl_map & (1ULL << NONE)))
+               serdes2_prtcl_map = serdes_init(FSL_SRDS_2,
                                        CONFIG_SYS_FSL_SERDES_ADDR +
                                        FSL_SRDS_2 * 0x1000,
                                        RCWSR4_SRDS2_PRTCL_MASK,
diff --git a/arch/arm/cpu/armv7/ls102xa/ls102xa_psci.c b/arch/arm/cpu/armv7/ls102xa/ls102xa_psci.c
new file mode 100644 (file)
index 0000000..1cbe93c
--- /dev/null
@@ -0,0 +1,236 @@
+/*
+ * Copyright 2016 Freescale Semiconductor, Inc.
+ * Author: Hongbo Zhang <hongbo.zhang@nxp.com>
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ * This file implements LS102X platform PSCI SYSTEM-SUSPEND function
+ */
+
+#include <config.h>
+#include <asm/io.h>
+#include <asm/psci.h>
+#include <asm/arch/immap_ls102xa.h>
+#include <fsl_immap.h>
+#include "fsl_epu.h"
+
+#define __secure __attribute__((section("._secure.text")))
+
+#define CCSR_GICD_CTLR                 0x1000
+#define CCSR_GICC_CTLR                 0x2000
+#define DCSR_RCPM_CG1CR0               0x31c
+#define DCSR_RCPM_CSTTACR0             0xb00
+#define DCFG_CRSTSR_WDRFR              0x8
+#define DDR_RESV_LEN                   128
+
+#ifdef CONFIG_LS1_DEEP_SLEEP
+/*
+ * DDR controller initialization training breaks the first 128 bytes of DDR,
+ * save them so that the bootloader can restore them while resuming.
+ */
+static void __secure ls1_save_ddr_head(void)
+{
+       const char *src = (const char *)CONFIG_SYS_SDRAM_BASE;
+       char *dest = (char *)(OCRAM_BASE_S_ADDR + OCRAM_S_SIZE - DDR_RESV_LEN);
+       struct ccsr_scfg __iomem *scfg = (void *)CONFIG_SYS_FSL_SCFG_ADDR;
+       int i;
+
+       out_le32(&scfg->sparecr[2], dest);
+
+       for (i = 0; i < DDR_RESV_LEN; i++)
+               *dest++ = *src++;
+}
+
+static void __secure ls1_fsm_setup(void)
+{
+       void *dcsr_epu_base = (void *)(CONFIG_SYS_DCSRBAR + EPU_BLOCK_OFFSET);
+       void *dcsr_rcpm_base = (void *)SYS_FSL_DCSR_RCPM_ADDR;
+
+       out_be32(dcsr_rcpm_base + DCSR_RCPM_CSTTACR0, 0x00001001);
+       out_be32(dcsr_rcpm_base + DCSR_RCPM_CG1CR0, 0x00000001);
+
+       fsl_epu_setup((void *)dcsr_epu_base);
+
+       /* Pull MCKE signal low before enabling deep sleep signal in FPGA */
+       out_be32(dcsr_epu_base + EPECR0, 0x5);
+       out_be32(dcsr_epu_base + EPSMCR15, 0x76300000);
+}
+
+static void __secure ls1_deepsleep_irq_cfg(void)
+{
+       struct ccsr_scfg __iomem *scfg = (void *)CONFIG_SYS_FSL_SCFG_ADDR;
+       struct ccsr_rcpm __iomem *rcpm = (void *)CONFIG_SYS_FSL_RCPM_ADDR;
+       u32 ippdexpcr0, ippdexpcr1, pmcintecr = 0;
+
+       /* Mask interrupts from GIC */
+       out_be32(&rcpm->nfiqoutr, 0x0ffffffff);
+       out_be32(&rcpm->nirqoutr, 0x0ffffffff);
+       /* Mask deep sleep wake-up interrupts while entering deep sleep */
+       out_be32(&rcpm->dsimskr, 0x0ffffffff);
+
+       ippdexpcr0 = in_be32(&rcpm->ippdexpcr0);
+       /*
+        * Workaround: There is bug of register ippdexpcr1, when read it always
+        * returns zero, so its value is saved to a scrachpad register to be
+        * read, that is why we don't read it from register ippdexpcr1 itself.
+        */
+       ippdexpcr1 = in_le32(&scfg->sparecr[7]);
+
+       if (ippdexpcr0 & RCPM_IPPDEXPCR0_ETSEC)
+               pmcintecr |= SCFG_PMCINTECR_ETSECRXG0 |
+                            SCFG_PMCINTECR_ETSECRXG1 |
+                            SCFG_PMCINTECR_ETSECERRG0 |
+                            SCFG_PMCINTECR_ETSECERRG1;
+
+       if (ippdexpcr0 & RCPM_IPPDEXPCR0_GPIO)
+               pmcintecr |= SCFG_PMCINTECR_GPIO;
+
+       if (ippdexpcr1 & RCPM_IPPDEXPCR1_LPUART)
+               pmcintecr |= SCFG_PMCINTECR_LPUART;
+
+       if (ippdexpcr1 & RCPM_IPPDEXPCR1_FLEXTIMER)
+               pmcintecr |= SCFG_PMCINTECR_FTM;
+
+       /* Always set external IRQ pins as wakeup source */
+       pmcintecr |= SCFG_PMCINTECR_IRQ0 | SCFG_PMCINTECR_IRQ1;
+
+       out_be32(&scfg->pmcintlecr, 0);
+       /* Clear PMC interrupt status */
+       out_be32(&scfg->pmcintsr, 0xffffffff);
+       /* Enable wakeup interrupt during deep sleep */
+       out_be32(&scfg->pmcintecr, pmcintecr);
+}
+
+static void __secure ls1_delay(unsigned int loop)
+{
+       while (loop--) {
+               int i = 1000;
+               while (i--)
+                       ;
+       }
+}
+
+static void __secure ls1_start_fsm(void)
+{
+       void *dcsr_epu_base = (void *)(CONFIG_SYS_DCSRBAR + EPU_BLOCK_OFFSET);
+       void *ccsr_gic_base = (void *)SYS_FSL_GIC_ADDR;
+       struct ccsr_scfg __iomem *scfg = (void *)CONFIG_SYS_FSL_SCFG_ADDR;
+       struct ccsr_ddr __iomem *ddr = (void *)CONFIG_SYS_FSL_DDR_ADDR;
+
+       /* Set HRSTCR */
+       setbits_be32(&scfg->hrstcr, 0x80000000);
+
+       /* Place DDR controller in self refresh mode */
+       setbits_be32(&ddr->sdram_cfg_2, 0x80000000);
+
+       ls1_delay(2000);
+
+       /* Set EVT4_B to lock the signal MCKE down */
+       out_be32(dcsr_epu_base + EPECR0, 0x0);
+
+       ls1_delay(2000);
+
+       out_be32(ccsr_gic_base + CCSR_GICD_CTLR, 0x0);
+       out_be32(ccsr_gic_base + CCSR_GICC_CTLR, 0x0);
+
+       /* Enable all EPU Counters */
+       setbits_be32(dcsr_epu_base + EPGCR, 0x80000000);
+
+       /* Enable SCU15 */
+       setbits_be32(dcsr_epu_base + EPECR15, 0x90000004);
+
+       /* Enter WFI mode, and EPU FSM will start */
+       __asm__ __volatile__ ("wfi" : : : "memory");
+
+       /* NEVER ENTER HERE */
+       while (1)
+               ;
+}
+
+static void __secure ls1_deep_sleep(u32 entry_point)
+{
+       struct ccsr_scfg __iomem *scfg = (void *)CONFIG_SYS_FSL_SCFG_ADDR;
+       struct ccsr_gur __iomem *gur = (void *)CONFIG_SYS_FSL_GUTS_ADDR;
+       struct ccsr_rcpm __iomem *rcpm = (void *)CONFIG_SYS_FSL_RCPM_ADDR;
+#ifdef QIXIS_BASE
+       u32 tmp;
+       void *qixis_base = (void *)QIXIS_BASE;
+#endif
+
+       /* Enable cluster to enter the PCL10 state */
+       out_be32(&scfg->clusterpmcr, SCFG_CLUSTERPMCR_WFIL2EN);
+
+       /* Save the first 128 bytes of DDR data */
+       ls1_save_ddr_head();
+
+       /* Save the kernel resume entry */
+       out_le32(&scfg->sparecr[3], entry_point);
+
+       /* Request to put cluster 0 in PCL10 state */
+       setbits_be32(&rcpm->clpcl10setr, RCPM_CLPCL10SETR_C0);
+
+       /* Setup the registers of the EPU FSM for deep sleep */
+       ls1_fsm_setup();
+
+#ifdef QIXIS_BASE
+       /* Connect the EVENT button to IRQ in FPGA */
+       tmp = in_8(qixis_base + QIXIS_CTL_SYS);
+       tmp &= ~QIXIS_CTL_SYS_EVTSW_MASK;
+       tmp |= QIXIS_CTL_SYS_EVTSW_IRQ;
+       out_8(qixis_base + QIXIS_CTL_SYS, tmp);
+
+       /* Enable deep sleep signals in FPGA */
+       tmp = in_8(qixis_base + QIXIS_PWR_CTL2);
+       tmp |= QIXIS_PWR_CTL2_PCTL;
+       out_8(qixis_base + QIXIS_PWR_CTL2, tmp);
+
+       /* Pull down PCIe RST# */
+       tmp = in_8(qixis_base + QIXIS_RST_FORCE_3);
+       tmp |= QIXIS_RST_FORCE_3_PCIESLOT1;
+       out_8(qixis_base + QIXIS_RST_FORCE_3, tmp);
+#endif
+
+       /* Enable Warm Device Reset */
+       setbits_be32(&scfg->dpslpcr, SCFG_DPSLPCR_WDRR_EN);
+       setbits_be32(&gur->crstsr, DCFG_CRSTSR_WDRFR);
+
+       ls1_deepsleep_irq_cfg();
+
+       psci_v7_flush_dcache_all();
+
+       ls1_start_fsm();
+}
+
+#else
+static void __secure ls1_sleep(void)
+{
+       struct ccsr_scfg __iomem *scfg = (void *)CONFIG_SYS_FSL_SCFG_ADDR;
+       struct ccsr_rcpm __iomem *rcpm = (void *)CONFIG_SYS_FSL_RCPM_ADDR;
+
+#ifdef QIXIS_BASE
+       u32 tmp;
+       void *qixis_base = (void *)QIXIS_BASE;
+
+       /* Connect the EVENT button to IRQ in FPGA */
+       tmp = in_8(qixis_base + QIXIS_CTL_SYS);
+       tmp &= ~QIXIS_CTL_SYS_EVTSW_MASK;
+       tmp |= QIXIS_CTL_SYS_EVTSW_IRQ;
+       out_8(qixis_base + QIXIS_CTL_SYS, tmp);
+#endif
+
+       /* Enable cluster to enter the PCL10 state */
+       out_be32(&scfg->clusterpmcr, SCFG_CLUSTERPMCR_WFIL2EN);
+
+       setbits_be32(&rcpm->powmgtcsr, RCPM_POWMGTCSR_LPM20_REQ);
+
+       __asm__ __volatile__ ("wfi" : : : "memory");
+}
+#endif
+
+void __secure ls1_system_suspend(u32 fn, u32 entry_point, u32 context_id)
+{
+#ifdef CONFIG_LS1_DEEP_SLEEP
+       ls1_deep_sleep(entry_point);
+#else
+       ls1_sleep();
+#endif
+}
index 8f386800f6c2e74e26f83ef85ed96dfd0acea02a..3d41d37a6438b1aad05e12b8aa3ef2f8987027f3 100644 (file)
@@ -29,6 +29,7 @@
 #define PSCI_FN_AFFINITY_INFO_FEATURE_MASK     0x0
 #define PSCI_FN_SYSTEM_OFF_FEATURE_MASK                0x0
 #define PSCI_FN_SYSTEM_RESET_FEATURE_MASK      0x0
+#define PSCI_FN_SYSTEM_SUSPEND_FEATURE_MASK    0x0
 
        .pushsection ._secure.text, "ax"
 
@@ -61,6 +62,8 @@ _ls102x_psci_supported_table:
        .word   PSCI_FN_SYSTEM_OFF_FEATURE_MASK
        .word   ARM_PSCI_0_2_FN_SYSTEM_RESET
        .word   PSCI_FN_SYSTEM_RESET_FEATURE_MASK
+       .word   ARM_PSCI_1_0_FN_SYSTEM_SUSPEND
+       .word   PSCI_FN_SYSTEM_SUSPEND_FEATURE_MASK
        .word   0
        .word   ARM_PSCI_RET_NI
 
@@ -243,4 +246,12 @@ psci_system_reset:
 1:     wfi
        b       1b
 
+.globl psci_system_suspend
+psci_system_suspend:
+       push    {lr}
+
+       bl      ls1_system_suspend
+
+       pop     {pc}
+
        .popsection
index b1b0c710ae6fbe84c643bbe8e2dac7a0d7511827..31f00cbd69296401de7de69e54890707d29a1589 100644 (file)
@@ -7,9 +7,11 @@
 #include <common.h>
 #include <asm/arch/clock.h>
 #include <asm/io.h>
+#include <asm/arch/fsl_serdes.h>
 #include <asm/arch/immap_ls102xa.h>
 #include <asm/arch/ls102xa_soc.h>
 #include <asm/arch/ls102xa_stream_id.h>
+#include <fsl_csu.h>
 
 struct liodn_id_table sec_liodn_tbl[] = {
        SET_SEC_JR_LIODN_ENTRY(0, 0x10, 0x10),
@@ -58,12 +60,29 @@ unsigned int get_soc_major_rev(void)
        return major;
 }
 
+#ifdef CONFIG_SYS_FSL_ERRATUM_A010315
+void erratum_a010315(void)
+{
+       int i;
+
+       for (i = PCIE1; i <= PCIE2; i++)
+               if (!is_serdes_configured(i)) {
+                       debug("PCIe%d: disabled all R/W permission!\n", i);
+                       set_pcie_ns_access(i, 0);
+               }
+}
+#endif
+
 int arch_soc_init(void)
 {
        struct ccsr_scfg *scfg = (struct ccsr_scfg *)CONFIG_SYS_FSL_SCFG_ADDR;
        struct ccsr_cci400 *cci = (struct ccsr_cci400 *)CONFIG_SYS_CCI400_ADDR;
        unsigned int major;
 
+#ifdef CONFIG_LAYERSCAPE_NS_ACCESS
+       enable_layerscape_ns_access();
+#endif
+
 #ifdef CONFIG_FSL_QSPI
        out_be32(&scfg->qspi_cfg, SCFG_QSPI_CLKSEL);
 #endif
index f80f6e20d1ecee25edf17a7a12f59081f997d198..6a362085a6e3914888a519211cb7685f4401f652 100644 (file)
@@ -187,7 +187,7 @@ ENDPROC(psci_get_cpu_id)
 .weak psci_get_cpu_id
 
 /* Imported from Linux kernel */
-LENTRY(v7_flush_dcache_all)
+ENTRY(psci_v7_flush_dcache_all)
        stmfd   sp!, {r4-r5, r7, r9-r11, lr}
        dmb                                     @ ensure ordering with previous memory accesses
        mrc     p15, 1, r0, c0, c0, 1           @ read clidr
@@ -234,7 +234,7 @@ finished:
        isb
        ldmfd   sp!, {r4-r5, r7, r9-r11, lr}
        bx      lr
-ENDPROC(v7_flush_dcache_all)
+ENDPROC(psci_v7_flush_dcache_all)
 
 ENTRY(psci_disable_smp)
        mrc     p15, 0, r0, c1, c0, 1           @ ACTLR
@@ -264,7 +264,7 @@ ENTRY(psci_cpu_off_common)
        isb
        dsb
 
-       bl      v7_flush_dcache_all
+       bl      psci_v7_flush_dcache_all
 
        clrex                                   @ Why???
 
diff --git a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig
new file mode 100644 (file)
index 0000000..f8057ba
--- /dev/null
@@ -0,0 +1,17 @@
+config ARCH_LS1012A
+       bool "Freescale Layerscape LS1012A SoC"
+       select SYS_FSL_MMDC
+       select SYS_FSL_ERRATUM_A010315
+
+config ARCH_LS1043A
+       bool "Freescale Layerscape LS1043A SoC"
+       select SYS_FSL_ERRATUM_A010315
+
+config ARCH_LS1046A
+       bool "Freescale Layerscape LS1046A SoC"
+
+config SYS_FSL_MMDC
+       bool "Freescale Multi Mode DDR Controller"
+
+config SYS_FSL_ERRATUM_A010315
+       bool "Workaround for PCIe erratum A010315"
index 8c1317faea26931c64370cf0ff710ec88f0dd23a..51c1ceeb838e9e8bc7cd334fe0fd6b231078b508 100644 (file)
@@ -30,10 +30,10 @@ ifneq ($(CONFIG_LS1043A),)
 obj-$(CONFIG_SYS_HAS_SERDES) += ls1043a_serdes.o
 endif
 
-ifneq ($(CONFIG_LS1012A),)
+ifneq ($(CONFIG_ARCH_LS1012A),)
 obj-$(CONFIG_SYS_HAS_SERDES) += ls1012a_serdes.o
 endif
 
-ifneq ($(CONFIG_LS1046A),)
+ifneq ($(CONFIG_ARCH_LS1046A),)
 obj-$(CONFIG_SYS_HAS_SERDES) += ls1046a_serdes.o
 endif
index 20be32308426170e63a838534242139a603a2884..f865373df39a928e327d6bbe22bec7e7afff2e04 100644 (file)
@@ -18,7 +18,6 @@
 #include <asm/arch/mp.h>
 #endif
 #include <fm_eth.h>
-#include <fsl_debug_server.h>
 #include <fsl-mc/fsl_mc.h>
 #ifdef CONFIG_FSL_ESDHC
 #include <fsl_esdhc.h>
@@ -457,10 +456,6 @@ phys_size_t board_reserve_ram_top(phys_size_t ram_size)
 #ifdef CONFIG_SYS_MEM_TOP_HIDE
 #error CONFIG_SYS_MEM_TOP_HIDE not to be used together with this function
 #endif
-/* Carve the Debug Server private DRAM block from the end of DRAM */
-#ifdef CONFIG_FSL_DEBUG_SERVER
-       ram_top -= debug_server_get_dram_block_size();
-#endif
 
 /* Carve the MC private DRAM block from the end of DRAM */
 #ifdef CONFIG_FSL_MC_ENET
index db2771ab404097f8529e64d3bcc5490904f6fa36..e06b0637404e28b7176453a0ddc29bbe985e2e02 100644 (file)
@@ -22,9 +22,15 @@ int is_serdes_configured(enum srds_prtcl device)
        int ret = 0;
 
 #ifdef CONFIG_SYS_FSL_SRDS_1
+       if (!serdes1_prtcl_map[NONE])
+               fsl_serdes_init();
+
        ret |= serdes1_prtcl_map[device];
 #endif
 #ifdef CONFIG_SYS_FSL_SRDS_2
+       if (!serdes2_prtcl_map[NONE])
+               fsl_serdes_init();
+
        ret |= serdes2_prtcl_map[device];
 #endif
 
@@ -98,6 +104,9 @@ void serdes_init(u32 sd, u32 sd_addr, u32 sd_prctl_mask, u32 sd_prctl_shift,
        u32 cfg;
        int lane;
 
+       if (serdes_prtcl_map[NONE])
+               return;
+
        memset(serdes_prtcl_map, 0, sizeof(u8) * SERDES_PRCTL_COUNT);
 
        cfg = gur_in32(&gur->rcwsr[4]) & sd_prctl_mask;
@@ -115,6 +124,9 @@ void serdes_init(u32 sd, u32 sd_addr, u32 sd_prctl_mask, u32 sd_prctl_shift,
                else
                        serdes_prtcl_map[lane_prtcl] = 1;
        }
+
+       /* Set the first element to indicate serdes has been initialized */
+       serdes_prtcl_map[NONE] = 1;
 }
 
 void fsl_serdes_init(void)
index 8922197d439666676371f4591bca5076527baf56..55005f042049b56c8b9c044717d56bb019d77bff 100644 (file)
@@ -60,7 +60,7 @@ void get_sys_info(struct sys_info *sys_info)
        sys_info->freq_ddrbus = sysclk;
 #endif
 
-#ifdef CONFIG_LS1012A
+#ifdef CONFIG_ARCH_LS1012A
        sys_info->freq_ddrbus *= (gur_in32(&gur->rcwsr[0]) >>
                        FSL_CHASSIS2_RCWSR0_SYS_PLL_RAT_SHIFT) &
                        FSL_CHASSIS2_RCWSR0_SYS_PLL_RAT_MASK;
@@ -91,7 +91,7 @@ void get_sys_info(struct sys_info *sys_info)
                        freq_c_pll[cplx_pll] / core_cplx_pll_div[c_pll_sel];
        }
 
-#ifdef CONFIG_LS1012A
+#ifdef CONFIG_ARCH_LS1012A
        sys_info->freq_systembus = sys_info->freq_ddrbus / 2;
        sys_info->freq_ddrbus *= 2;
 #endif
index d5f29ee9702e95b0b3e5022215771ac2775eb2d3..7faa86c3fdf41587052d19a2a3d957004cc3df50 100644 (file)
@@ -28,9 +28,15 @@ int is_serdes_configured(enum srds_prtcl device)
        int ret = 0;
 
 #ifdef CONFIG_SYS_FSL_SRDS_1
+       if (!serdes1_prtcl_map[NONE])
+               fsl_serdes_init();
+
        ret |= serdes1_prtcl_map[device];
 #endif
 #ifdef CONFIG_SYS_FSL_SRDS_2
+       if (!serdes2_prtcl_map[NONE])
+               fsl_serdes_init();
+
        ret |= serdes2_prtcl_map[device];
 #endif
 
@@ -79,6 +85,9 @@ void serdes_init(u32 sd, u32 sd_addr, u32 sd_prctl_mask, u32 sd_prctl_shift,
        u32 cfg;
        int lane;
 
+       if (serdes_prtcl_map[NONE])
+               return;
+
        memset(serdes_prtcl_map, 0, sizeof(u8) * SERDES_PRCTL_COUNT);
 
        cfg = gur_in32(&gur->rcwsr[28]) & sd_prctl_mask;
@@ -136,6 +145,9 @@ void serdes_init(u32 sd, u32 sd_addr, u32 sd_prctl_mask, u32 sd_prctl_shift,
 #endif
                }
        }
+
+       /* Set the first element to indicate serdes has been initialized */
+       serdes_prtcl_map[NONE] = 1;
 }
 
 void fsl_serdes_init(void)
index 5af6b73bc9e8dab0bb32edff6b9653ac49b8e1c0..5d0b7a45c354d6c12fe25b2e04c923437b6c6af7 100644 (file)
@@ -179,6 +179,21 @@ ENTRY(lowlevel_init)
        isb
        dsb     sy
 #endif
+
+#ifdef CONFIG_ARCH_LS1046A
+       /* Initialize the L2 RAM latency */
+       mrs   x1, S3_1_c11_c0_2
+       mov   x0, #0x1C7
+       /* Clear L2 Tag RAM latency and L2 Data RAM latency */
+       bic   x1, x1, x0
+       /* Set L2 data ram latency bits [2:0] */
+       orr   x1, x1, #0x2
+       /* set L2 tag ram latency bits [8:6] */
+       orr   x1,  x1, #0x80
+       msr   S3_1_c11_c0_2, x1
+       isb
+#endif
+
        mov     lr, x29                 /* Restore LR */
        ret
 ENDPROC(lowlevel_init)
index f54ac3f431e58f0ee293fbe59a7c2415e5e820ff..b68e87d657176308662440cdf56a3e5d31cf62c4 100644 (file)
@@ -17,6 +17,9 @@
 #ifdef CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT
 #include <asm/armv8/sec_firmware.h>
 #endif
+#ifdef CONFIG_CHAIN_OF_TRUST
+#include <fsl_validate.h>
+#endif
 
 int ppa_init(void)
 {
@@ -24,12 +27,30 @@ int ppa_init(void)
        u32 *boot_loc_ptr_l, *boot_loc_ptr_h;
        int ret;
 
+#ifdef CONFIG_CHAIN_OF_TRUST
+       uintptr_t ppa_esbc_hdr = CONFIG_SYS_LS_PPA_ESBC_ADDR;
+       uintptr_t ppa_img_addr = 0;
+#endif
+
 #ifdef CONFIG_SYS_LS_PPA_FW_IN_XIP
        ppa_fit_addr = (void *)CONFIG_SYS_LS_PPA_FW_ADDR;
 #else
 #error "No CONFIG_SYS_LS_PPA_FW_IN_xxx defined"
 #endif
 
+#ifdef CONFIG_CHAIN_OF_TRUST
+       ppa_img_addr = (uintptr_t)ppa_fit_addr;
+       if (fsl_check_boot_mode_secure() != 0) {
+               ret = fsl_secboot_validate(ppa_esbc_hdr,
+                                          CONFIG_PPA_KEY_HASH,
+                                          &ppa_img_addr);
+               if (ret != 0)
+                       printf("PPA validation failed\n");
+               else
+                       printf("PPA validation Successful\n");
+       }
+#endif
+
 #ifdef CONFIG_FSL_LSCH3
        struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR);
        boot_loc_ptr_l = &gur->bootlocptrl;
index f62b78d1021c9c783c389bf1400272118d2f564d..463d1e30d2c3966b1b858c28af43f7d9535a25d3 100644 (file)
@@ -8,10 +8,14 @@
 #include <fsl_ifc.h>
 #include <ahci.h>
 #include <scsi.h>
+#include <asm/arch/fsl_serdes.h>
 #include <asm/arch/soc.h>
 #include <asm/io.h>
 #include <asm/global_data.h>
 #include <asm/arch-fsl-layerscape/config.h>
+#ifdef CONFIG_LAYERSCAPE_NS_ACCESS
+#include <fsl_csu.h>
+#endif
 #ifdef CONFIG_SYS_FSL_DDR
 #include <fsl_ddr_sdram.h>
 #include <fsl_ddr.h>
@@ -58,11 +62,13 @@ static void erratum_a008336(void)
 #ifdef CONFIG_SYS_FSL_ERRATUM_A008336
 #ifdef CONFIG_SYS_FSL_DCSR_DDR_ADDR
        eddrtqcr1 = (void *)CONFIG_SYS_FSL_DCSR_DDR_ADDR + 0x800;
-       out_le32(eddrtqcr1, 0x63b30002);
+       if (fsl_ddr_get_version(0) == 0x50200)
+               out_le32(eddrtqcr1, 0x63b30002);
 #endif
 #ifdef CONFIG_SYS_FSL_DCSR_DDR2_ADDR
        eddrtqcr1 = (void *)CONFIG_SYS_FSL_DCSR_DDR2_ADDR + 0x800;
-       out_le32(eddrtqcr1, 0x63b30002);
+       if (fsl_ddr_get_version(0) == 0x50200)
+               out_le32(eddrtqcr1, 0x63b30002);
 #endif
 #endif
 }
@@ -222,6 +228,10 @@ int sata_init(void)
 {
        struct ccsr_ahci __iomem *ccsr_ahci = (void *)CONFIG_SYS_SATA;
 
+#ifdef CONFIG_ARCH_LS1046A
+       /* Disable SATA ECC */
+       out_le32((void *)CONFIG_SYS_DCSR_DCFG_ADDR + 0x520, 0x80000000);
+#endif
        out_le32(&ccsr_ahci->ppcfg, AHCI_PORT_PHY_1_CFG);
        out_le32(&ccsr_ahci->pp2c, AHCI_PORT_PHY_2_CFG);
        out_le32(&ccsr_ahci->pp3c, AHCI_PORT_PHY_3_CFG);
@@ -298,11 +308,28 @@ void erratum_a008850_post(void)
 #endif
 }
 
+#ifdef CONFIG_SYS_FSL_ERRATUM_A010315
+void erratum_a010315(void)
+{
+       int i;
+
+       for (i = PCIE1; i <= PCIE4; i++)
+               if (!is_serdes_configured(i)) {
+                       debug("PCIe%d: disabled all R/W permission!\n", i);
+                       set_pcie_ns_access(i, 0);
+               }
+}
+#endif
+
 void fsl_lsch2_early_init_f(void)
 {
        struct ccsr_cci400 *cci = (struct ccsr_cci400 *)CONFIG_SYS_CCI400_ADDR;
        struct ccsr_scfg *scfg = (struct ccsr_scfg *)CONFIG_SYS_FSL_SCFG_ADDR;
 
+#ifdef CONFIG_LAYERSCAPE_NS_ACCESS
+       enable_layerscape_ns_access();
+#endif
+
 #ifdef CONFIG_FSL_IFC
        init_early_memctl_regs();       /* tighten IFC timing */
 #endif
index 19e34fade28f15eef3c6cba81a4e1b52a0e530dc..1dabdbb3058165dbc6bdde5a883a0fc5618e97ad 100644 (file)
@@ -8,7 +8,6 @@
 #include <spl.h>
 #include <asm/io.h>
 #include <fsl_ifc.h>
-#include <fsl_csu.h>
 #include <i2c.h>
 
 DECLARE_GLOBAL_DATA_PTR;
@@ -62,13 +61,5 @@ void board_init_f(ulong dummy)
        i2c_init_all();
 #endif
        dram_init();
-
-       /* Clear the BSS */
-       memset(__bss_start, 0, __bss_end - __bss_start);
-
-#ifdef CONFIG_LAYERSCAPE_NS_ACCESS
-       enable_layerscape_ns_access();
-#endif
-       board_init_r(NULL, 0);
 }
 #endif
index df572880767fd10872720dfbc777bad508c08a32..e89b6e80743a8d0e588bd9f08df2b486d16ee570 100644 (file)
@@ -144,6 +144,8 @@ dtb-$(CONFIG_FSL_LSCH3) += fsl-ls2080a-qds.dtb \
 dtb-$(CONFIG_FSL_LSCH2) += fsl-ls1043a-qds-duart.dtb \
        fsl-ls1043a-qds-lpuart.dtb \
        fsl-ls1043a-rdb.dtb \
+       fsl-ls1046a-qds-duart.dtb \
+       fsl-ls1046a-rdb.dtb \
        fsl-ls1012a-qds.dtb \
        fsl-ls1012a-rdb.dtb \
        fsl-ls1012a-frdm.dtb
diff --git a/arch/arm/dts/fsl-ls1046a-qds-duart.dts b/arch/arm/dts/fsl-ls1046a-qds-duart.dts
new file mode 100644 (file)
index 0000000..10a95ea
--- /dev/null
@@ -0,0 +1,16 @@
+/*
+ * Device Tree file for Freescale Layerscape-1046A family SoC.
+ *
+ * Copyright (C) 2016, Freescale Semiconductor
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+/dts-v1/;
+#include "fsl-ls1046a-qds.dtsi"
+
+/ {
+       chosen {
+               stdout-path = &duart0;
+       };
+};
diff --git a/arch/arm/dts/fsl-ls1046a-qds.dtsi b/arch/arm/dts/fsl-ls1046a-qds.dtsi
new file mode 100644 (file)
index 0000000..c512293
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+ * Device Tree Include file for Freescale Layerscape-1046A family SoC.
+ *
+ * Copyright (C) 2016, Freescale Semiconductor
+ *
+ * Mingkai Hu <Mingkai.hu@nxp.com>
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+/include/ "fsl-ls1046a.dtsi"
+
+/ {
+       model = "LS1046A QDS Board";
+       aliases {
+               spi0 = &qspi;
+               spi1 = &dspi0;
+       };
+};
+
+&dspi0 {
+       bus-num = <0>;
+       status = "okay";
+
+       dflash0: n25q128a {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "spi-flash";
+               spi-max-frequency = <1000000>; /* input clock */
+               spi-cpol;
+               spi-cpha;
+               reg = <0>;
+       };
+
+       dflash1: sst25wf040b {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "spi-flash";
+               spi-max-frequency = <3500000>;
+               spi-cpol;
+               spi-cpha;
+               reg = <1>;
+       };
+
+       dflash2: en25s64 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "spi-flash";
+               spi-max-frequency = <3500000>;
+               spi-cpol;
+               spi-cpha;
+               reg = <2>;
+       };
+};
+
+&qspi {
+       bus-num = <0>;
+       status = "okay";
+
+       qflash0: s25fl128s@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "spi-flash";
+               spi-max-frequency = <20000000>;
+               reg = <0>;
+       };
+};
+
+&duart0 {
+       status = "okay";
+};
+
+&duart1 {
+       status = "okay";
+};
diff --git a/arch/arm/dts/fsl-ls1046a-rdb.dts b/arch/arm/dts/fsl-ls1046a-rdb.dts
new file mode 100644 (file)
index 0000000..4902454
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Device Tree Include file for Freescale Layerscape-1046A family SoC.
+ *
+ * Copyright 2016, Freescale Semiconductor
+ *
+ * Mingkai Hu <Mingkai.hu@freescale.com>
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+/dts-v1/;
+/include/ "fsl-ls1046a.dtsi"
+
+/ {
+       model = "LS1046A RDB Board";
+
+       aliases {
+               spi0 = &qspi;
+       };
+
+};
+
+&qspi {
+       bus-num = <0>;
+       status = "okay";
+
+       qflash0: s25fs512s@0 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "spi-flash";
+               spi-max-frequency = <50000000>;
+               reg = <0>;
+       };
+
+       qflash1: s25fs512s@1 {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "spi-flash";
+               spi-max-frequency = <50000000>;
+               reg = <1>;
+        };
+};
diff --git a/arch/arm/dts/fsl-ls1046a.dtsi b/arch/arm/dts/fsl-ls1046a.dtsi
new file mode 100644 (file)
index 0000000..87dd997
--- /dev/null
@@ -0,0 +1,166 @@
+/*
+ * Device Tree Include file for Freescale Layerscape-1046A family SoC.
+ *
+ * Copyright (C) 2016, Freescale Semiconductor
+ *
+ * Mingkai Hu <mingkai.hu@nxp.com>
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+/include/ "skeleton64.dtsi"
+
+/ {
+       compatible = "fsl,ls1046a";
+       interrupt-parent = <&gic>;
+
+       sysclk: sysclk {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <100000000>;
+               clock-output-names = "sysclk";
+       };
+
+       gic: interrupt-controller@1400000 {
+               compatible = "arm,gic-400";
+               #interrupt-cells = <3>;
+               interrupt-controller;
+               reg = <0x0 0x1410000 0 0x10000>, /* GICD */
+                     <0x0 0x1420000 0 0x10000>, /* GICC */
+                     <0x0 0x1440000 0 0x20000>, /* GICH */
+                     <0x0 0x1460000 0 0x20000>; /* GICV */
+               interrupts = <1 9 0xf08>;
+       };
+
+       soc {
+               compatible = "simple-bus";
+               #address-cells = <2>;
+               #size-cells = <2>;
+               ranges;
+
+               clockgen: clocking@1ee1000 {
+                       compatible = "fsl,ls1046a-clockgen";
+                       reg = <0x0 0x1ee1000 0x0 0x1000>;
+                       #clock-cells = <2>;
+                       clocks = <&sysclk>;
+               };
+
+               dspi0: dspi@2100000 {
+                       compatible = "fsl,vf610-dspi";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <0x0 0x2100000 0x0 0x10000>;
+                       interrupts = <0 64 0x4>;
+                       clock-names = "dspi";
+                       clocks = <&clockgen 4 0>;
+                       num-cs = <6>;
+                       big-endian;
+                       status = "disabled";
+               };
+
+               dspi1: dspi@2110000 {
+                       compatible = "fsl,vf610-dspi";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <0x0 0x2110000 0x0 0x10000>;
+                       interrupts = <0 65 0x4>;
+                       clock-names = "dspi";
+                       clocks = <&clockgen 4 0>;
+                       num-cs = <6>;
+                       big-endian;
+                       status = "disabled";
+               };
+
+               ifc: ifc@1530000 {
+                       compatible = "fsl,ifc", "simple-bus";
+                       reg = <0x0 0x1530000 0x0 0x10000>;
+                       interrupts = <0 43 0x4>;
+               };
+
+               i2c0: i2c@2180000 {
+                       compatible = "fsl,vf610-i2c";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <0x0 0x2180000 0x0 0x10000>;
+                       interrupts = <0 56 0x4>;
+                       clock-names = "i2c";
+                       clocks = <&clockgen 4 0>;
+                       status = "disabled";
+               };
+
+               i2c1: i2c@2190000 {
+                       compatible = "fsl,vf610-i2c";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <0x0 0x2190000 0x0 0x10000>;
+                       interrupts = <0 57 0x4>;
+                       clock-names = "i2c";
+                       clocks = <&clockgen 4 0>;
+                       status = "disabled";
+               };
+
+               i2c2: i2c@21a0000 {
+                       compatible = "fsl,vf610-i2c";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <0x0 0x21a0000 0x0 0x10000>;
+                       interrupts = <0 58 0x4>;
+                       clock-names = "i2c";
+                       clocks = <&clockgen 4 0>;
+                       status = "disabled";
+               };
+
+               i2c3: i2c@21b0000 {
+                       compatible = "fsl,vf610-i2c";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <0x0 0x21b0000 0x0 0x10000>;
+                       interrupts = <0 59 0x4>;
+                       clock-names = "i2c";
+                       clocks = <&clockgen 4 0>;
+                       status = "disabled";
+               };
+
+               duart0: serial@21c0500 {
+                       compatible = "fsl,ns16550", "ns16550a";
+                       reg = <0x00 0x21c0500 0x0 0x100>;
+                       interrupts = <0 54 0x4>;
+                       clocks = <&clockgen 4 0>;
+               };
+
+               duart1: serial@21c0600 {
+                       compatible = "fsl,ns16550", "ns16550a";
+                       reg = <0x00 0x21c0600 0x0 0x100>;
+                       interrupts = <0 54 0x4>;
+                       clocks = <&clockgen 4 0>;
+               };
+
+               duart2: serial@21d0500 {
+                       compatible = "fsl,ns16550", "ns16550a";
+                       reg = <0x0 0x21d0500 0x0 0x100>;
+                       interrupts = <0 55 0x4>;
+                       clocks = <&clockgen 4 0>;
+               };
+
+               duart3: serial@21d0600 {
+                       compatible = "fsl,ns16550", "ns16550a";
+                       reg = <0x0 0x21d0600 0x0 0x100>;
+                       interrupts = <0 55 0x4>;
+                       clocks = <&clockgen 4 0>;
+               };
+
+               qspi: quadspi@1550000 {
+                       compatible = "fsl,vf610-qspi";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       reg = <0x0 0x1550000 0x0 0x10000>,
+                               <0x0 0x40000000 0x0 0x10000000>;
+                       reg-names = "QuadSPI", "QuadSPI-memory";
+                       num-cs = <4>;
+                       big-endian;
+                       status = "disabled";
+               };
+       };
+};
index 527998111f318509e44909a83506c2a146deb8e5..a5c6c4cd267d758004f281ec5323957b7b97949f 100644 (file)
@@ -7,15 +7,18 @@
 #ifndef _ASM_ARMV8_FSL_LAYERSCAPE_CONFIG_H_
 #define _ASM_ARMV8_FSL_LAYERSCAPE_CONFIG_H_
 
+#include <linux/kconfig.h>
 #include <fsl_ddrc_version.h>
 
+#define CONFIG_STANDALONE_LOAD_ADDR    0x80300000
+
 #ifdef CONFIG_SYS_FSL_DDR4
 #define CONFIG_SYS_FSL_DDRC_GEN4
 #else
 #define CONFIG_SYS_FSL_DDRC_ARM_GEN3   /* Enable Freescale ARM DDR3 driver */
 #endif
 
-#ifndef CONFIG_LS1012A
+#ifndef CONFIG_ARCH_LS1012A
 #define CONFIG_SYS_FSL_DDR             /* Freescale DDR driver */
 #define CONFIG_SYS_FSL_DDR_VER         FSL_DDR_VER_5_0
 #endif
 #define CONFIG_SYS_FSL_SEC_BE
 
 #define CONFIG_SYS_FSL_SRDS_1
+
 /* SoC related */
 #ifdef CONFIG_LS1043A
 #define CONFIG_MAX_CPUS                                4
 #define CONFIG_SYS_FSL_ERRATUM_A009942
 #define CONFIG_SYS_FSL_ERRATUM_A009660
 #define CONFIG_SYS_FSL_MAX_NUM_OF_SEC          1
-#elif defined(CONFIG_LS1012A)
+#elif defined(CONFIG_ARCH_LS1012A)
 #define CONFIG_MAX_CPUS                         1
 #undef CONFIG_SYS_FSL_DDRC_ARM_GEN3
 
 #define GICD_BASE              0x01401000
 #define GICC_BASE              0x01402000
-#elif defined(CONFIG_LS1046A)
+#elif defined(CONFIG_ARCH_LS1046A)
 #define CONFIG_MAX_CPUS                                4
 #define CONFIG_SYS_FMAN_V3
 #define CONFIG_SYS_NUM_FMAN                    1
 #define GICC_BASE              0x01420000
 
 #define CONFIG_SYS_FSL_MAX_NUM_OF_SEC          1
+
+#define CONFIG_SYS_FSL_ERRATUM_A008511
+#define CONFIG_SYS_FSL_ERRATUM_A009801
+#define CONFIG_SYS_FSL_ERRATUM_A009803
+#define CONFIG_SYS_FSL_ERRATUM_A009942
+#define CONFIG_SYS_FSL_ERRATUM_A010165
 #else
 #error SoC not defined
 #endif
index e1b3f44d853956d684709b1b9e88c93127109620..9f94b4505e0489bfddc880b2cb14a916392f2f11 100644 (file)
 
 #ifdef CONFIG_LS2080A
 enum srds_prtcl {
+       /*
+        * Nobody will check whether the device 'NONE' has been configured,
+        * So use it to indicate if the serdes_prtcl_map has been initialized.
+        */
        NONE = 0,
        PCIE1,
        PCIE2,
@@ -57,6 +61,10 @@ enum srds {
 };
 #elif defined(CONFIG_FSL_LSCH2)
 enum srds_prtcl {
+       /*
+        * Nobody will check whether the device 'NONE' has been configured,
+        * So use it to indicate if the serdes_prtcl_map has been initialized.
+        */
        NONE = 0,
        PCIE1,
        PCIE2,
index 95a42935cac9c20b29f9c2e21802b1d264562b2c..df5187195df32bb19f5bb72a1e56b904db76d37a 100644 (file)
@@ -60,7 +60,7 @@
 #define CONFIG_SYS_PCIE2_PHYS_ADDR             0x4800000000ULL
 #define CONFIG_SYS_PCIE3_PHYS_ADDR             0x5000000000ULL
 /* LUT registers */
-#ifdef CONFIG_LS1012A
+#ifdef CONFIG_ARCH_LS1012A
 #define PCIE_LUT_BASE                          0xC0000
 #else
 #define PCIE_LUT_BASE                          0x10000
index 93e26c1d7f489c684a2f2978204bdb642945c016..7acba2730aac21e861161f14de9904c522fd759d 100644 (file)
 #define CONFIG_SYS_FSL_WRIOP1_MDIO2    (CONFIG_SYS_FSL_WRIOP1_ADDR + 0x17000)
 #define CONFIG_SYS_FSL_LSCH3_SERDES_ADDR       (CONFIG_SYS_IMMR + 0xEA0000)
 
-/* SP (Cortex-A5) related */
-#define CONFIG_SYS_FSL_SP_ADDR                 (CONFIG_SYS_IMMR + 0x00F00000)
-#define CONFIG_SYS_FSL_SP_VSG_GIC_ADDR         (CONFIG_SYS_FSL_SP_ADDR)
-#define CONFIG_SYS_FSL_SP_VSG_GIC_VIGR1                (CONFIG_SYS_FSL_SP_ADDR)
-#define CONFIG_SYS_FSL_SP_VSG_GIC_VIGR2                \
-                                       (CONFIG_SYS_FSL_SP_ADDR + 0x0008)
-#define CONFIG_SYS_FSL_SP_LOOPBACK_DUART       \
-                                       (CONFIG_SYS_FSL_SP_ADDR + 0x1000)
-
 #define CONFIG_SYS_FSL_DCSR_DDR_ADDR           0x70012c000ULL
 #define CONFIG_SYS_FSL_DCSR_DDR2_ADDR          0x70012d000ULL
 #define CONFIG_SYS_FSL_DCSR_DDR3_ADDR          0x700132000ULL
index db76066c8078f1aef342b46399a5a8e97129bfca..f46f1d866abf0974bf541fb3acd10e4f317a5aa7 100644 (file)
@@ -6,6 +6,7 @@
 
 #ifndef __FSL_NS_ACCESS_H_
 #define __FSL_NS_ACCESS_H_
+#include <fsl_csu.h>
 
 enum csu_cslx_ind {
        CSU_CSLX_PCIE2_IO = 0,
index 8d4a7adb1d574aca4a9e3e13a8918dc0a9fc9c69..4512732f79908a24752f85f13784f619dc1b3aaf 100644 (file)
@@ -100,6 +100,10 @@ void cpu_name(char *name);
 void erratum_a009635(void);
 #endif
 
+#ifdef CONFIG_SYS_FSL_ERRATUM_A010315
+void erratum_a010315(void);
+#endif
+
 bool soc_has_dp_ddr(void);
 bool soc_has_aiop(void);
 #endif /* _ASM_ARMV8_FSL_LAYERSCAPE_SOC_H_ */
index 56d8f3247f54a16707a591583e8d7e645c7aeabf..fab87740285c89f48271f01d2c37f1361ac2d39e 100644 (file)
@@ -16,7 +16,9 @@
 #define CONFIG_SYS_DCSRBAR                     0x20000000
 
 #define CONFIG_SYS_DCSR_DCFG_ADDR      (CONFIG_SYS_DCSRBAR + 0x00220000)
+#define SYS_FSL_DCSR_RCPM_ADDR (CONFIG_SYS_DCSRBAR + 0x00222000)
 
+#define SYS_FSL_GIC_ADDR                       (CONFIG_SYS_IMMR + 0x00400000)
 #define CONFIG_SYS_FSL_DDR_ADDR                        (CONFIG_SYS_IMMR + 0x00080000)
 #define CONFIG_SYS_CCI400_ADDR                 (CONFIG_SYS_IMMR + 0x00180000)
 #define CONFIG_SYS_FSL_CSU_ADDR                 (CONFIG_SYS_IMMR + 0x00510000)
 #define CONFIG_USB_MAX_CONTROLLER_COUNT                1
 #define CONFIG_SYS_FSL_ERRATUM_A008378
 #define CONFIG_SYS_FSL_ERRATUM_A009663
+#define CONFIG_SYS_FSL_ERRATUM_A009942
 #define CONFIG_SYS_FSL_MAX_NUM_OF_SEC          1
 #else
 #error SoC not defined
index 3a92f5a7b47e2ca5067e3b1a536d562eefeca9e4..fafc44b1a2cd7f77817a4df3de7a3f4dcdd307f1 100644 (file)
 #include <config.h>
 
 enum srds_prtcl {
+       /*
+        * Nobody will check whether the device 'NONE' has been configured,
+        * So use it to indicate if the serdes_prtcl_map has been initialized.
+        */
        NONE = 0,
        PCIE1,
        PCIE2,
index 0a80772b51108ef883635fa98fa0a50b0d407f9b..c34fd63e66b01308c8ca05adca042b9d8da0ad4a 100644 (file)
@@ -161,6 +161,17 @@ struct ccsr_gur {
 #define SCFG_SNPCNFGCR_DBG_RD_WR       0x000c0000
 #define SCFG_SNPCNFGCR_EDMA_SNP                0x00020000
 #define SCFG_ENDIANCR_LE               0x80000000
+#define SCFG_DPSLPCR_WDRR_EN           0x00000001
+#define SCFG_PMCINTECR_LPUART          0x40000000
+#define SCFG_PMCINTECR_FTM             0x20000000
+#define SCFG_PMCINTECR_GPIO            0x10000000
+#define SCFG_PMCINTECR_IRQ0            0x08000000
+#define SCFG_PMCINTECR_IRQ1            0x04000000
+#define SCFG_PMCINTECR_ETSECRXG0       0x00800000
+#define SCFG_PMCINTECR_ETSECRXG1       0x00400000
+#define SCFG_PMCINTECR_ETSECERRG0      0x00080000
+#define SCFG_PMCINTECR_ETSECERRG1      0x00040000
+#define SCFG_CLUSTERPMCR_WFIL2EN       0x80000000
 
 /* Supplemental Configuration Unit */
 struct ccsr_scfg {
@@ -226,7 +237,7 @@ struct ccsr_scfg {
        u32 debug_streamid;
        u32 resv10[5];
        u32 snpcnfgcr;
-       u32 resv11[1];
+       u32 hrstcr;
        u32 intpcr;
        u32 resv12[20];
        u32 scfgrevcr;
@@ -243,6 +254,9 @@ struct ccsr_scfg {
        u32 sdhciovserlcr;
        u32 resv14[61];
        u32 sparecr[8];
+       u32 resv15[248];
+       u32 core0sftrstsr;
+       u32 clusterpmcr;
 };
 
 /* Clocking */
@@ -433,6 +447,42 @@ struct ccsr_ahci {
        u32 cmds;       /* port 0/1 CMD status error */
 };
 
+#define RCPM_POWMGTCSR                 0x130
+#define RCPM_POWMGTCSR_SERDES_PW       0x80000000
+#define RCPM_POWMGTCSR_LPM20_REQ       0x00100000
+#define RCPM_POWMGTCSR_LPM20_ST                0x00000200
+#define RCPM_POWMGTCSR_P_LPM20_ST      0x00000100
+#define RCPM_IPPDEXPCR0                        0x140
+#define RCPM_IPPDEXPCR0_ETSEC          0x80000000
+#define RCPM_IPPDEXPCR0_GPIO           0x00000040
+#define RCPM_IPPDEXPCR1                        0x144
+#define RCPM_IPPDEXPCR1_LPUART         0x40000000
+#define RCPM_IPPDEXPCR1_FLEXTIMER      0x20000000
+#define RCPM_IPPDEXPCR1_OCRAM1         0x10000000
+#define RCPM_NFIQOUTR                  0x15c
+#define RCPM_NIRQOUTR                  0x16c
+#define RCPM_DSIMSKR                   0x18c
+#define RCPM_CLPCL10SETR               0x1c4
+#define RCPM_CLPCL10SETR_C0            0x00000001
+
+struct ccsr_rcpm {
+       u8 rev1[0x4c];
+       u32 twaitsr;
+       u8 rev2[0xe0];
+       u32 powmgtcsr;
+       u8 rev3[0xc];
+       u32 ippdexpcr0;
+       u32 ippdexpcr1;
+       u8 rev4[0x14];
+       u32 nfiqoutr;
+       u8 rev5[0xc];
+       u32 nirqoutr;
+       u8 rev6[0x1c];
+       u32 dsimskr;
+       u8 rev7[0x34];
+       u32 clpcl10setr;
+};
+
 uint get_svr(void);
 
 #endif /* __ASM_ARCH_LS102XA_IMMAP_H_ */
index a354684bccf624301b2f51ca2f96087e2e634ed6..9c9135448ea236f705568fc3d3585465cb540c73 100644 (file)
@@ -11,4 +11,8 @@ unsigned int get_soc_major_rev(void);
 int arch_soc_init(void);
 int ls102xa_smmu_stream_id_init(void);
 
+#ifdef CONFIG_SYS_FSL_ERRATUM_A010315
+void erratum_a010315(void);
+#endif
+
 #endif /* __FSL_LS102XA_SOC_H */
index 051e8aeaf3792e1f461c778eccc062396e68e6ac..4525287f664a08290d9b97cf27fbebefbcbb8228 100644 (file)
 /* BOOTSCRIPT_ADDR is not required */
 #endif
 
+#ifdef CONFIG_FSL_LS_PPA
+#ifdef CONFIG_SYS_LS_PPA_FW_IN_XIP
+#ifdef CONFIG_LS1043A
+#define CONFIG_SYS_LS_PPA_ESBC_ADDR    0x600c0000
+#endif
+#else
+#error "No CONFIG_SYS_LS_PPA_FW_IN_xxx defined"
+#endif /* ifdef CONFIG_SYS_LS_PPA_FW_IN_XIP */
+
+/* Define the key hash here if SRK used for signing PPA image is
+ * different from SRK hash put in SFP used for U-Boot.
+ * Example
+ * #define CONFIG_PPA_KEY_HASH \
+ *     "41066b564c6ffcef40ccbc1e0a5d0d519604000c785d97bbefd25e4d288d1c8b"
+ */
+#define CONFIG_PPA_KEY_HASH            NULL
+#endif /* ifdef CONFIG_FSL_LS_PPA */
+
 #include <config_fsl_chain_trust.h>
 #endif /* #ifndef CONFIG_SPL_BUILD */
 #endif /* #ifdef CONFIG_CHAIN_OF_TRUST */
index 5b8ce4d31bddf22fa724fb4b22f2edaff8dca205..9f1f779868381b91f14606b1f56c51f8d8348e96 100644 (file)
@@ -89,6 +89,8 @@ void psci_cpu_off_common(void);
 int psci_update_dt(void *fdt);
 void psci_board_init(void);
 int fdt_psci(void *fdt);
+
+void psci_v7_flush_dcache_all(void);
 #endif /* ! __ASSEMBLY__ */
 
 #endif /* __ARM_PSCI_H__ */
index 399b20889b1e4ee697bed92b894dd65c6d13d8bf..4b5cd9933211878db2e15cb7a4026f2532824e09 100644 (file)
@@ -68,6 +68,9 @@ static u8 serdes1_cfg_tbl[][SRDS1_MAX_LANES] = {
 
 int is_serdes_configured(enum srds_prtcl prtcl)
 {
+       if (!(serdes1_prtcl_map & (1 << NONE)))
+               fsl_serdes_init();
+
        return (1 << prtcl) & serdes1_prtcl_map;
 }
 
@@ -79,6 +82,9 @@ void fsl_serdes_init(void)
                                MPC85xx_PORDEVSR_IO_SEL_SHIFT;
        int lane;
 
+       if (serdes1_prtcl_map & (1 << NONE))
+               return;
+
        debug("PORDEVSR[IO_SEL_SRDS] = %x\n", srds_cfg);
 
        if (srds_cfg >= ARRAY_SIZE(serdes1_cfg_tbl)) {
@@ -90,4 +96,7 @@ void fsl_serdes_init(void)
                enum srds_prtcl lane_prtcl = serdes1_cfg_tbl[srds_cfg][lane];
                serdes1_prtcl_map |= (1 << lane_prtcl);
        }
+
+       /* Set the first bit to indicate serdes has been initialized */
+       serdes1_prtcl_map |= (1 << NONE);
 }
index 51972cb7cb3f6d833ebc19b71959cf7166fef689..74d27b9a63ffeb75a0404595f4057dedd033c951 100644 (file)
@@ -32,6 +32,9 @@ static const struct serdes_config serdes1_cfg_tbl[] = {
 
 int is_serdes_configured(enum srds_prtcl device)
 {
+       if (!(serdes1_prtcl_map & (1 << NONE)))
+               fsl_serdes_init();
+
        return (1 << device) & serdes1_prtcl_map;
 }
 
@@ -44,6 +47,9 @@ void fsl_serdes_init(void)
        const struct serdes_config *ptr;
        int lane;
 
+       if (serdes1_prtcl_map & (1 << NONE))
+               return;
+
        debug("PORDEVSR[IO_SEL_SRDS] = %x\n", srds_cfg);
 
        if (srds_cfg > ARRAY_SIZE(serdes1_cfg_tbl)) {
@@ -59,4 +65,7 @@ void fsl_serdes_init(void)
                enum srds_prtcl lane_prtcl = ptr->lanes[lane];
                serdes1_prtcl_map |= (1 << lane_prtcl);
        }
+
+       /* Set the first bit to indicate serdes has been initialized */
+       serdes1_prtcl_map |= (1 << NONE);
 }
index b2bce0d2d676eb1b94e55ddbaec44c73a8e5f1db..810ddb08676496ff84d5da67de8536bde6ba2f27 100644 (file)
@@ -92,15 +92,27 @@ int is_serdes_configured(enum srds_prtcl device)
        int ret = 0;
 
 #ifdef CONFIG_SYS_FSL_SRDS_1
+       if (!serdes1_prtcl_map[NONE])
+               fsl_serdes_init();
+
        ret |= serdes1_prtcl_map[device];
 #endif
 #ifdef CONFIG_SYS_FSL_SRDS_2
+       if (!serdes2_prtcl_map[NONE])
+               fsl_serdes_init();
+
        ret |= serdes2_prtcl_map[device];
 #endif
 #ifdef CONFIG_SYS_FSL_SRDS_3
+       if (!serdes3_prtcl_map[NONE])
+               fsl_serdes_init();
+
        ret |= serdes3_prtcl_map[device];
 #endif
 #ifdef CONFIG_SYS_FSL_SRDS_4
+       if (!serdes4_prtcl_map[NONE])
+               fsl_serdes_init();
+
        ret |= serdes4_prtcl_map[device];
 #endif
 
@@ -184,6 +196,9 @@ void serdes_init(u32 sd, u32 sd_addr, u32 sd_prctl_mask, u32 sd_prctl_shift,
        u32 cfg;
        int lane;
 
+       if (serdes_prtcl_map[NONE])
+               return;
+
        memset(serdes_prtcl_map, 0, sizeof(u8) * SERDES_PRCTL_COUNT);
 #ifdef CONFIG_SYS_FSL_ERRATUM_A007186
        struct ccsr_sfp_regs  __iomem *sfp_regs =
@@ -325,6 +340,9 @@ void serdes_init(u32 sd, u32 sd_addr, u32 sd_prctl_mask, u32 sd_prctl_shift,
                else
                        serdes_prtcl_map[lane_prtcl] = 1;
        }
+
+       /* Set the first element to indicate serdes has been initialized */
+       serdes_prtcl_map[NONE] = 1;
 }
 
 void fsl_serdes_init(void)
index ee60bfaa7d402e37903bafd525036a164e82e016..72d5e3007d9d20fc7f6b9205976988f17b82597d 100644 (file)
@@ -136,6 +136,9 @@ int is_serdes_configured(enum srds_prtcl device)
        if (!(in_be32(&gur->rcwsr[5]) & FSL_CORENET_RCWSR5_SRDS_EN))
                return 0;
 
+       if (!(serdes_prtcl_map & (1 << NONE)))
+               fsl_serdes_init();
+
        return (1 << device) & serdes_prtcl_map;
 }
 
@@ -514,6 +517,8 @@ void fsl_serdes_init(void)
        if (getenv_f("hwconfig", buffer, sizeof(buffer)) > 0)
                buf = buffer;
 #endif
+       if (serdes_prtcl_map & (1 << NONE))
+               return;
 
        /* Is serdes enabled at all? */
        if (!(in_be32(&gur->rcwsr[5]) & FSL_CORENET_RCWSR5_SRDS_EN))
@@ -857,6 +862,9 @@ void fsl_serdes_init(void)
                             SRDS_RSTCTL_SDPD);
        }
 #endif
+
+       /* Set the first bit to indicate serdes has been initialized */
+       serdes_prtcl_map |= (1 << NONE);
 }
 
 const char *serdes_clock_to_string(u32 clock)
index baf52d549f6b288caa9c5fb0e95613d7b31eb8a7..8c075f1e52451d9e18944fb1a16c87cd88165775 100644 (file)
@@ -71,11 +71,19 @@ static u8 serdes2_cfg_tbl[][SRDS2_MAX_LANES] = {
 
 int is_serdes_configured(enum srds_prtcl device)
 {
-       int ret = (1 << device) & serdes1_prtcl_map;
+       int ret;
+
+       if (!(serdes1_prtcl_map & (1 << NONE)))
+               fsl_serdes_init();
+
+       ret = (1 << device) & serdes1_prtcl_map;
 
        if (ret)
                return ret;
 
+       if (!(serdes2_prtcl_map & (1 << NONE)))
+               fsl_serdes_init();
+
        return (1 << device) & serdes2_prtcl_map;
 }
 
@@ -88,6 +96,10 @@ void fsl_serdes_init(void)
        u32 tmp;
        int lane;
 
+       if (serdes1_prtcl_map & (1 << NONE) &&
+           serdes2_prtcl_map & (1 << NONE))
+               return;
+
        srds1_io_sel = (pordevsr & MPC85xx_PORDEVSR_IO_SEL) >>
                                MPC85xx_PORDEVSR_IO_SEL_SHIFT;
 
@@ -221,6 +233,9 @@ void fsl_serdes_init(void)
                serdes1_prtcl_map |= (1 << lane_prtcl);
        }
 
+       /* Set the first bit to indicate serdes has been initialized */
+       serdes1_prtcl_map |= (1 << NONE);
+
        if (srds2_io_sel >= ARRAY_SIZE(serdes2_cfg_tbl)) {
                printf("Invalid PORDEVSR[SRDS2_IO_SEL] = %d\n", srds2_io_sel);
                return;
@@ -230,4 +245,7 @@ void fsl_serdes_init(void)
                enum srds_prtcl lane_prtcl = serdes2_cfg_tbl[srds2_io_sel][lane];
                serdes2_prtcl_map |= (1 << lane_prtcl);
        }
+
+       /* Set the first bit to indicate serdes has been initialized */
+       serdes2_prtcl_map |= (1 << NONE);
 }
index ed78a66f5df549387f594584491cafe95ddbd400..b27763ed7b19ea1cdce08a2d83de313698099fed 100644 (file)
@@ -34,11 +34,19 @@ static u8 serdes2_cfg_tbl[][SRDS2_MAX_LANES] = {
 
 int is_serdes_configured(enum srds_prtcl device)
 {
-       int ret = (1 << device) & serdes1_prtcl_map;
+       int ret;
+
+       if (!(serdes1_prtcl_map & (1 << NONE)))
+               fsl_serdes_init();
+
+       ret = (1 << device) & serdes1_prtcl_map;
 
        if (ret)
                return ret;
 
+       if (!(serdes2_prtcl_map & (1 << NONE)))
+               fsl_serdes_init();
+
        return (1 << device) & serdes2_prtcl_map;
 }
 
@@ -50,6 +58,10 @@ void fsl_serdes_init(void)
                                MPC85xx_PORDEVSR_IO_SEL_SHIFT;
        int lane;
 
+       if (serdes1_prtcl_map & (1 << NONE) &&
+           serdes2_prtcl_map & (1 << NONE))
+               return;
+
        debug("PORDEVSR[IO_SEL_SRDS] = %x\n", srds_cfg);
 
        if (srds_cfg >= ARRAY_SIZE(serdes1_cfg_tbl)) {
@@ -61,6 +73,9 @@ void fsl_serdes_init(void)
                serdes1_prtcl_map |= (1 << lane_prtcl);
        }
 
+       /* Set the first bit to indicate serdes has been initialized */
+       serdes1_prtcl_map |= (1 << NONE);
+
        if (srds_cfg >= ARRAY_SIZE(serdes2_cfg_tbl)) {
                printf("Invalid PORDEVSR[IO_SEL_SRDS] = %d\n", srds_cfg);
                return;
@@ -76,4 +91,7 @@ void fsl_serdes_init(void)
 
        if (pordevsr & MPC85xx_PORDEVSR_SGMII3_DIS)
                serdes2_prtcl_map &= ~(1 << SGMII_TSEC3);
+
+       /* Set the first bit to indicate serdes has been initialized */
+       serdes2_prtcl_map |= (1 << NONE);
 }
index d14695506a0b27b1740798e0cde6bc13c4ee46b6..f1042d5b586bd5c59042d2456e56a36eecaa6d04 100644 (file)
@@ -24,6 +24,9 @@ static u8 serdes1_cfg_tbl[][SRDS1_MAX_LANES] = {
 
 int is_serdes_configured(enum srds_prtcl prtcl)
 {
+       if (!(serdes1_prtcl_map & (1 << NONE)))
+               fsl_serdes_init();
+
        return (1 << prtcl) & serdes1_prtcl_map;
 }
 
@@ -35,6 +38,9 @@ void fsl_serdes_init(void)
                                MPC85xx_PORDEVSR_IO_SEL_SHIFT;
        int lane;
 
+       if (serdes1_prtcl_map & (1 << NONE))
+               return;
+
        debug("PORDEVSR[IO_SEL] = %x\n", srds1_cfg);
 
        if (srds1_cfg >= ARRAY_SIZE(serdes1_cfg_tbl)) {
@@ -46,4 +52,7 @@ void fsl_serdes_init(void)
                enum srds_prtcl lane_prtcl = serdes1_cfg_tbl[srds1_cfg][lane];
                serdes1_prtcl_map |= (1 << lane_prtcl);
        }
+
+       /* Set the first bit to indicate serdes has been initialized */
+       serdes1_prtcl_map |= (1 << NONE);
 }
index 9199f01b9bb2904b6daae770391f38f6d640bc33..7c287a0ddd0aedecc6ff9111cc9b2ebf2ffad397 100644 (file)
@@ -24,6 +24,9 @@ static u8 serdes1_cfg_tbl[][SRDS1_MAX_LANES] = {
 
 int is_serdes_configured(enum srds_prtcl prtcl)
 {
+       if (!(serdes1_prtcl_map & (1 << NONE)))
+               fsl_serdes_init();
+
        return (1 << prtcl) & serdes1_prtcl_map;
 }
 
@@ -35,6 +38,9 @@ void fsl_serdes_init(void)
                                MPC85xx_PORDEVSR_IO_SEL_SHIFT;
        int lane;
 
+       if (serdes1_prtcl_map & (1 << NONE))
+               return;
+
        debug("PORDEVSR[IO_SEL_SRDS] = %x\n", srds_cfg);
 
        if (srds_cfg >= ARRAY_SIZE(serdes1_cfg_tbl)) {
@@ -46,4 +52,7 @@ void fsl_serdes_init(void)
                enum srds_prtcl lane_prtcl = serdes1_cfg_tbl[srds_cfg][lane];
                serdes1_prtcl_map |= (1 << lane_prtcl);
        }
+
+       /* Set the first bit to indicate serdes has been initialized */
+       serdes1_prtcl_map |= (1 << NONE);
 }
index 6c80b5e4b0a18ed5b664efe4e5b71d1b0b9df8a9..cc8ddb2aa22a109f7d377b8b4d2b2ad17a7724fe 100644 (file)
@@ -33,6 +33,9 @@ static u8 serdes1_cfg_tbl[][SRDS1_MAX_LANES] = {
 
 int is_serdes_configured(enum srds_prtcl prtcl)
 {
+       if (!(serdes1_prtcl_map & (1 << NONE)))
+               fsl_serdes_init();
+
        return (1 << prtcl) & serdes1_prtcl_map;
 }
 
@@ -44,6 +47,9 @@ void fsl_serdes_init(void)
                                MPC85xx_PORDEVSR_IO_SEL_SHIFT;
        int lane;
 
+       if (serdes1_prtcl_map & (1 << NONE))
+               return;
+
        debug("PORDEVSR[IO_SEL_SRDS] = %x\n", srds_cfg);
 
        if (srds_cfg >= ARRAY_SIZE(serdes1_cfg_tbl)) {
@@ -55,4 +61,7 @@ void fsl_serdes_init(void)
                enum srds_prtcl lane_prtcl = serdes1_cfg_tbl[srds_cfg][lane];
                serdes1_prtcl_map |= (1 << lane_prtcl);
        }
+
+       /* Set the first bit to indicate serdes has been initialized */
+       serdes1_prtcl_map |= (1 << NONE);
 }
index 3632eb557e4e7385ac7bce20a0f10a4f5b8629e9..1f0f4743f9ccfc9f3826809340762eb9cdd2b096 100644 (file)
@@ -28,6 +28,9 @@ static u8 serdes1_cfg_tbl[][SRDS1_MAX_LANES] = {
 
 int is_serdes_configured(enum srds_prtcl prtcl)
 {
+       if (!(serdes1_prtcl_map & (1 << NONE)))
+               fsl_serdes_init();
+
        return (1 << prtcl) & serdes1_prtcl_map;
 }
 
@@ -39,6 +42,9 @@ void fsl_serdes_init(void)
                                MPC85xx_PORDEVSR_IO_SEL_SHIFT;
        int lane;
 
+       if (serdes1_prtcl_map & (1 << NONE))
+               return;
+
        debug("PORDEVSR[IO_SEL_SRDS] = %x\n", srds_cfg);
 
        if (srds_cfg >= ARRAY_SIZE(serdes1_cfg_tbl)) {
@@ -62,4 +68,7 @@ void fsl_serdes_init(void)
 
        if (!(pordevsr & MPC85xx_PORDEVSR_SGMII4_DIS))
                serdes1_prtcl_map |= (1 << SGMII_TSEC4);
+
+       /* Set the first bit to indicate serdes has been initialized */
+       serdes1_prtcl_map |= (1 << NONE);
 }
index 4b965f7a0ea68ab25db65caab550e98112b32add..d8c0b62fe729ae81cd4eee3e041a8ceea784108c 100644 (file)
@@ -33,11 +33,19 @@ static const u8 serdes2_cfg_tbl[][SRDS2_MAX_LANES] = {
 
 int is_serdes_configured(enum srds_prtcl device)
 {
-       int ret = (1 << device) & serdes1_prtcl_map;
+       int ret;
+
+       if (!(serdes1_prtcl_map & (1 << NONE)))
+               fsl_serdes_init();
+
+       ret = (1 << device) & serdes1_prtcl_map;
 
        if (ret)
                return ret;
 
+       if (!(serdes2_prtcl_map & (1 << NONE)))
+               fsl_serdes_init();
+
        return (1 << device) & serdes2_prtcl_map;
 }
 
@@ -49,6 +57,10 @@ void fsl_serdes_init(void)
                                MPC85xx_PORDEVSR_IO_SEL_SHIFT;
        int lane;
 
+       if (serdes1_prtcl_map & (1 << NONE) &&
+           serdes2_prtcl_map & (1 << NONE))
+               return;
+
        debug("PORDEVSR[IO_SEL_SRDS] = %x\n", srds_cfg);
 
        if (srds_cfg >= ARRAY_SIZE(serdes1_cfg_tbl)) {
@@ -60,6 +72,9 @@ void fsl_serdes_init(void)
                serdes1_prtcl_map |= (1 << lane_prtcl);
        }
 
+       /* Set the first bit to indicate serdes has been initialized */
+       serdes1_prtcl_map |= (1 << NONE);
+
        if (srds_cfg >= ARRAY_SIZE(serdes2_cfg_tbl)) {
                printf("Invalid PORDEVSR[IO_SEL_SRDS] = %d\n", srds_cfg);
                return;
@@ -69,4 +84,7 @@ void fsl_serdes_init(void)
                enum srds_prtcl lane_prtcl = serdes2_cfg_tbl[srds_cfg][lane];
                serdes2_prtcl_map |= (1 << lane_prtcl);
        }
+
+       /* Set the first bit to indicate serdes has been initialized */
+       serdes2_prtcl_map |= (1 << NONE);
 }
index 99a77bd2b63ed4188c35349b5e290f635fc3e636..77b94399ba17d56e8be1e1d45e67aa0eaf4a5cb7 100644 (file)
@@ -41,6 +41,9 @@ static u8 serdes1_cfg_tbl[][SRDS1_MAX_LANES] = {
 
 int is_serdes_configured(enum srds_prtcl prtcl)
 {
+       if (!(serdes1_prtcl_map & (1 << NONE)))
+               fsl_serdes_init();
+
        return (1 << prtcl) & serdes1_prtcl_map;
 }
 
@@ -55,6 +58,9 @@ void fsl_serdes_init(void)
        int lane;
        u32 mask, val;
 
+       if (serdes1_prtcl_map & (1 << NONE))
+               return;
+
        debug("PORDEVSR[IO_SEL_SRDS] = %x\n", srds_cfg);
 
        if (srds_cfg >= ARRAY_SIZE(serdes1_cfg_tbl)) {
@@ -67,6 +73,9 @@ void fsl_serdes_init(void)
                serdes1_prtcl_map |= (1 << lane_prtcl);
        }
 
+       /* Set the first bit to indicate serdes has been initialized */
+       serdes1_prtcl_map |= (1 << NONE);
+
        /* Init SERDES Receiver electrical idle detection control for PCIe */
 
        /* Lane 0 is always PCIe 1 */
index 14d17eb51b81a51c134c8842e9175d383c3ee57f..88013d41c9cbb28d6841dc9477697471dd49b860 100644 (file)
@@ -72,11 +72,19 @@ static const u8 serdes2_cfg_tbl[][SRDS2_MAX_LANES] = {
 
 int is_serdes_configured(enum srds_prtcl device)
 {
-       int ret = (1 << device) & serdes1_prtcl_map;
+       int ret;
+
+       if (!(serdes1_prtcl_map & (1 << NONE)))
+               fsl_serdes_init();
+
+       ret = (1 << device) & serdes1_prtcl_map;
 
        if (ret)
                return ret;
 
+       if (!(serdes2_prtcl_map & (1 << NONE)))
+               fsl_serdes_init();
+
        return (1 << device) & serdes2_prtcl_map;
 }
 
@@ -88,6 +96,10 @@ void fsl_serdes_init(void)
                                MPC85xx_PORDEVSR_IO_SEL_SHIFT;
        int lane;
 
+       if (serdes1_prtcl_map & (1 << NONE) &&
+           serdes2_prtcl_map & (1 << NONE))
+               return;
+
        debug("PORDEVSR[IO_SEL_SRDS] = %x\n", srds_cfg);
 
        if (srds_cfg >= ARRAY_SIZE(serdes1_cfg_tbl)) {
@@ -99,6 +111,9 @@ void fsl_serdes_init(void)
                serdes1_prtcl_map |= (1 << lane_prtcl);
        }
 
+       /* Set the first bit to indicate serdes has been initialized */
+       serdes1_prtcl_map |= (1 << NONE);
+
        if (srds_cfg >= ARRAY_SIZE(serdes2_cfg_tbl)) {
                printf("Invalid PORDEVSR[IO_SEL_SRDS] = %d\n", srds_cfg);
                return;
@@ -108,4 +123,7 @@ void fsl_serdes_init(void)
                enum srds_prtcl lane_prtcl = serdes2_cfg_tbl[srds_cfg][lane];
                serdes2_prtcl_map |= (1 << lane_prtcl);
        }
+
+       /* Set the first bit to indicate serdes has been initialized */
+       serdes2_prtcl_map |= (1 << NONE);
 }
index e83b0a3359834d42aae1e807e16725ff3930e3fb..b2b9f95ca95b027036c002f08cb1dddef114dacc 100644 (file)
@@ -24,7 +24,12 @@ static const u8 serdes1_cfg_tbl[][SRDS1_MAX_LANES] = {
 
 int is_serdes_configured(enum srds_prtcl device)
 {
-       int ret = (1 << device) & serdes1_prtcl_map;
+       int ret;
+
+       if (!(serdes1_prtcl_map & (1 << NONE)))
+               fsl_serdes_init();
+
+       ret = (1 << device) & serdes1_prtcl_map;
        return ret;
 }
 
@@ -36,6 +41,9 @@ void fsl_serdes_init(void)
                                MPC85xx_PORDEVSR_IO_SEL_SHIFT;
        int lane;
 
+       if (serdes1_prtcl_map & (1 << NONE))
+               return;
+
        debug("PORDEVSR[IO_SEL_SRDS] = %x\n", srds_cfg);
 
        if (srds_cfg >= ARRAY_SIZE(serdes1_cfg_tbl)) {
@@ -47,4 +55,6 @@ void fsl_serdes_init(void)
                serdes1_prtcl_map |= (1 << lane_prtcl);
        }
 
+       /* Set the first bit to indicate serdes has been initialized */
+       serdes1_prtcl_map |= (1 << NONE);
 }
index 59d402c9682ae6a0e87ba078c4a85e76a119b664..0890eaa56565fae11758559c4fba932e30aa3c17 100644 (file)
@@ -32,6 +32,9 @@ static u8 serdes1_cfg_tbl[][SRDS1_MAX_LANES] = {
 
 int is_serdes_configured(enum srds_prtcl prtcl)
 {
+       if (!(serdes1_prtcl_map & (1 << NONE)))
+               fsl_serdes_init();
+
        return (1 << prtcl) & serdes1_prtcl_map;
 }
 
@@ -43,6 +46,9 @@ void fsl_serdes_init(void)
                                MPC85xx_PORDEVSR_IO_SEL_SHIFT;
        int lane;
 
+       if (serdes1_prtcl_map & (1 << NONE))
+               return;
+
        debug("PORDEVSR[IO_SEL_SRDS] = %x\n", srds_cfg);
 
        if (srds_cfg >= ARRAY_SIZE(serdes1_cfg_tbl)) {
@@ -54,4 +60,7 @@ void fsl_serdes_init(void)
                enum srds_prtcl lane_prtcl = serdes1_cfg_tbl[srds_cfg][lane];
                serdes1_prtcl_map |= (1 << lane_prtcl);
        }
+
+       /* Set the first bit to indicate serdes has been initialized */
+       serdes1_prtcl_map |= (1 << NONE);
 }
index 2a7e3bff82625da9cb0ed909b5045a85d6554b95..ea4f4c81861d2f95efc13bb4954450f60ba54cdc 100644 (file)
@@ -29,11 +29,19 @@ static u8 serdes2_cfg_tbl[][SRDS2_MAX_LANES] = {
 
 int is_serdes_configured(enum srds_prtcl device)
 {
-       int ret = (1 << device) & serdes1_prtcl_map;
+       int ret;
+
+       if (!(serdes1_prtcl_map & (1 << NONE)))
+               fsl_serdes_init();
+
+       ret = (1 << device) & serdes1_prtcl_map;
 
        if (ret)
                return ret;
 
+       if (!(serdes2_prtcl_map & (1 << NONE)))
+               fsl_serdes_init();
+
        return (1 << device) & serdes2_prtcl_map;
 }
 
@@ -46,6 +54,10 @@ void fsl_serdes_init(void)
                                MPC8610_PORDEVSR_IO_SEL_SHIFT;
        int lane;
 
+       if (serdes1_prtcl_map & (1 << NONE) &&
+           serdes2_prtcl_map & (1 << NONE))
+               return;
+
        debug("PORDEVSR[IO_SEL_SRDS] = %x\n", srds_cfg);
 
        if (srds_cfg >= ARRAY_SIZE(serdes1_cfg_tbl)) {
@@ -57,6 +69,9 @@ void fsl_serdes_init(void)
                serdes1_prtcl_map |= (1 << lane_prtcl);
        }
 
+       /* Set the first bit to indicate serdes has been initialized */
+       serdes1_prtcl_map |= (1 << NONE);
+
        if (srds_cfg >= ARRAY_SIZE(serdes2_cfg_tbl)) {
                printf("Invalid PORDEVSR[IO_SEL_SRDS] = %d\n", srds_cfg);
                return;
@@ -66,4 +81,7 @@ void fsl_serdes_init(void)
                enum srds_prtcl lane_prtcl = serdes2_cfg_tbl[srds_cfg][lane];
                serdes2_prtcl_map |= (1 << lane_prtcl);
        }
+
+       /* Set the first bit to indicate serdes has been initialized */
+       serdes2_prtcl_map |= (1 << NONE);
 }
index cc0f8e90c0c8876b895a8cd009f65607fa193a70..5b12cbdfffe8df49e18c754dbd65a69ef53b50b6 100644 (file)
@@ -38,11 +38,19 @@ static u8 serdes2_cfg_tbl[][SRDS2_MAX_LANES] = {
 
 int is_serdes_configured(enum srds_prtcl device)
 {
-       int ret = (1 << device) & serdes1_prtcl_map;
+       int ret;
+
+       if (!(serdes1_prtcl_map & (1 << NONE)))
+               fsl_serdes_init();
+
+       ret = (1 << device) & serdes1_prtcl_map;
 
        if (ret)
                return ret;
 
+       if (!(serdes2_prtcl_map & (1 << NONE)))
+               fsl_serdes_init();
+
        return (1 << device) & serdes2_prtcl_map;
 }
 
@@ -55,6 +63,10 @@ void fsl_serdes_init(void)
                                MPC8641_PORDEVSR_IO_SEL_SHIFT;
        int lane;
 
+       if (serdes1_prtcl_map & (1 << NONE) &&
+           serdes2_prtcl_map & (1 << NONE))
+               return;
+
        debug("PORDEVSR[IO_SEL_SRDS] = %x\n", srds_cfg);
 
        if (srds_cfg >= ARRAY_SIZE(serdes1_cfg_tbl)) {
@@ -66,6 +78,9 @@ void fsl_serdes_init(void)
                serdes1_prtcl_map |= (1 << lane_prtcl);
        }
 
+       /* Set the first bit to indicate serdes has been initialized */
+       serdes1_prtcl_map |= (1 << NONE);
+
        if (srds_cfg >= ARRAY_SIZE(serdes2_cfg_tbl)) {
                printf("Invalid PORDEVSR[IO_SEL_SRDS] = %d\n", srds_cfg);
                return;
@@ -75,4 +90,7 @@ void fsl_serdes_init(void)
                enum srds_prtcl lane_prtcl = serdes2_cfg_tbl[srds_cfg][lane];
                serdes2_prtcl_map |= (1 << lane_prtcl);
        }
+
+       /* Set the first bit to indicate serdes has been initialized */
+       serdes2_prtcl_map |= (1 << NONE);
 }
index 45e248eba18e4713d1454ab99159339463ce18e1..cb259cce017bcb49585299774f20330ddef96671 100644 (file)
 #include <config.h>
 
 enum srds_prtcl {
+       /*
+        * Nobody will check whether the device 'NONE' has been configured,
+        * So use it to indicate if the serdes_prtcl_map has been initialized.
+        */
        NONE = 0,
        PCIE1,
        PCIE2,
index 71ed15e6a6de491ac8b10b2f8802c9946f4c1c34..16fd445306ec90d396e55ebd239d15ca365361ab 100644 (file)
@@ -66,6 +66,36 @@ static void dp_ddr_restore(void)
                *dst++ = *src++;
 }
 
+#if defined(CONFIG_ARMV7_PSCI) && defined(CONFIG_LS102XA)
+void ls1_psci_resume_fixup(void)
+{
+       u32 tmp;
+       struct ccsr_scfg __iomem *scfg = (void *)CONFIG_SYS_FSL_SCFG_ADDR;
+
+#ifdef QIXIS_BASE
+       void *qixis_base = (void *)QIXIS_BASE;
+
+       /* Pull on PCIe RST# */
+       out_8(qixis_base + QIXIS_RST_FORCE_3, 0);
+
+       /* disable deep sleep signals in FPGA */
+       tmp = in_8(qixis_base + QIXIS_PWR_CTL2);
+       tmp &= ~QIXIS_PWR_CTL2_PCTL;
+       out_8(qixis_base + QIXIS_PWR_CTL2, tmp);
+#endif
+
+       /* Disable wakeup interrupt during deep sleep */
+       out_be32(&scfg->pmcintecr, 0);
+       /* Clear PMC interrupt status */
+       out_be32(&scfg->pmcintsr, 0xffffffff);
+
+       /* Disable Warm Device Reset */
+       tmp = in_be32(&scfg->dpslpcr);
+       tmp &= ~SCFG_DPSLPCR_WDRR_EN;
+       out_be32(&scfg->dpslpcr, tmp);
+}
+#endif
+
 static void dp_resume_prepare(void)
 {
        dp_ddr_restore();
@@ -74,6 +104,9 @@ static void dp_resume_prepare(void)
 #ifdef CONFIG_U_QE
        u_qe_resume();
 #endif
+#if defined(CONFIG_ARMV7_PSCI) && defined(CONFIG_LS102XA)
+       ls1_psci_resume_fixup();
+#endif
 }
 
 int fsl_dp_resume(void)
@@ -88,7 +121,7 @@ int fsl_dp_resume(void)
        dp_resume_prepare();
 
        /* Get the entry address and jump to kernel */
-       start_addr = in_le32(&scfg->sparecr[1]);
+       start_addr = in_le32(&scfg->sparecr[3]);
        debug("Entry address is 0x%08x\n", start_addr);
        kernel_resume = (void (*)(void))start_addr;
        secure_ram_addr(_do_nonsec_entry)(kernel_resume, 0, 0, 0);
index d8d16c520f8234468c8a8f3c7dbe1638c6f70743..81c921122e8f65053e7e581426fc8083a62b44e1 100644 (file)
@@ -8,29 +8,63 @@
 #include <asm/io.h>
 #include <fsl_csu.h>
 #include <asm/arch/ns_access.h>
+#include <asm/arch/fsl_serdes.h>
 
-static void enable_devices_ns_access(struct csu_ns_dev *ns_dev, uint32_t num)
+void set_devices_ns_access(struct csu_ns_dev *ns_dev, u16 val)
 {
        u32 *base = (u32 *)CONFIG_SYS_FSL_CSU_ADDR;
        u32 *reg;
-       uint32_t val;
-       int i;
+       uint32_t tmp;
 
-       for (i = 0; i < num; i++) {
-               reg = base + ns_dev[i].ind / 2;
-               val = in_be32(reg);
-               if (ns_dev[i].ind % 2 == 0) {
-                       val &= 0x0000ffff;
-                       val |= ns_dev[i].val << 16;
-               } else {
-                       val &= 0xffff0000;
-                       val |= ns_dev[i].val;
-               }
-               out_be32(reg, val);
+       reg = base + ns_dev->ind / 2;
+       tmp = in_be32(reg);
+       if (ns_dev->ind % 2 == 0) {
+               tmp &= 0x0000ffff;
+               tmp |= val << 16;
+       } else {
+               tmp &= 0xffff0000;
+               tmp |= val;
        }
+
+       out_be32(reg, tmp);
+}
+
+static void enable_devices_ns_access(struct csu_ns_dev *ns_dev, uint32_t num)
+{
+       int i;
+
+       for (i = 0; i < num; i++)
+               set_devices_ns_access(ns_dev + i, ns_dev[i].val);
 }
 
 void enable_layerscape_ns_access(void)
 {
        enable_devices_ns_access(ns_dev, ARRAY_SIZE(ns_dev));
 }
+
+void set_pcie_ns_access(int pcie, u16 val)
+{
+       switch (pcie) {
+#ifdef CONFIG_PCIE1
+       case PCIE1:
+               set_devices_ns_access(&ns_dev[CSU_CSLX_PCIE1], val);
+               set_devices_ns_access(&ns_dev[CSU_CSLX_PCIE1_IO], val);
+               return;
+#endif
+#ifdef CONFIG_PCIE2
+       case PCIE2:
+               set_devices_ns_access(&ns_dev[CSU_CSLX_PCIE2], val);
+               set_devices_ns_access(&ns_dev[CSU_CSLX_PCIE2_IO], val);
+               return;
+#endif
+#ifdef CONFIG_PCIE3
+       case PCIE3:
+               set_devices_ns_access(&ns_dev[CSU_CSLX_PCIE3], val);
+               set_devices_ns_access(&ns_dev[CSU_CSLX_PCIE3_IO], val);
+               return;
+#endif
+       default:
+               debug("The PCIE%d doesn't exist!\n", pcie);
+               return;
+       }
+}
index 2f297951373d6f7b647eb04e1ca903b784955e8f..1a503042f0405645b3fa2cef04b7b35110d22602 100644 (file)
@@ -8,7 +8,7 @@
 #include <command.h>
 #include <i2c.h>
 #include <asm/io.h>
-#ifdef CONFIG_LS1043A
+#ifdef CONFIG_FSL_LSCH2
 #include <asm/arch/immap_lsch2.h>
 #elif defined(CONFIG_FSL_LSCH3)
 #include <asm/arch/immap_lsch3.h>
@@ -247,7 +247,7 @@ static int set_voltage_to_IR(int i2caddress, int vdd)
         * SoC before converting into an IR VID value
         */
        vdd += board_vdd_drop_compensation();
-#ifdef CONFIG_LS1043A
+#ifdef CONFIG_FSL_LSCH2
        vid = DIV_ROUND_UP(vdd - 265, 5);
 #else
        vid = DIV_ROUND_UP(vdd - 245, 5);
@@ -287,7 +287,7 @@ static int set_voltage(int i2caddress, int vdd)
 int adjust_vdd(ulong vdd_override)
 {
        int re_enable = disable_interrupts();
-#if defined(CONFIG_LS1043A) || defined(CONFIG_FSL_LSCH3)
+#if defined(CONFIG_FSL_LSCH2) || defined(CONFIG_FSL_LSCH3)
        struct ccsr_gur *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR);
 #else
        ccsr_gur_t __iomem *gur =
@@ -386,7 +386,7 @@ int adjust_vdd(ulong vdd_override)
         * | T |          |         |                 |         |
         * ------------------------------------------------------
         */
-#ifdef CONFIG_LS1043A
+#ifdef CONFIG_FSL_LSCH2
        vid = (fusesr >> FSL_CHASSIS2_DCFG_FUSESR_ALTVID_SHIFT) &
                FSL_CHASSIS2_DCFG_FUSESR_ALTVID_MASK;
        if ((vid == 0) || (vid == FSL_CHASSIS2_DCFG_FUSESR_ALTVID_MASK)) {
index a94a458f53d8f6e184c82c2f041c8d3f5c5ab4f9..b03bdb82c67c903856277a9ae58c80c8dd6448f2 100644 (file)
 #include <asm/arch/fsl_serdes.h>
 #include <asm/arch/soc.h>
 #include <hwconfig.h>
-#include <fsl_csu.h>
 #include <environment.h>
 #include <fsl_mmdc.h>
 #include <netdev.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
-static void set_wait_for_bits_clear(void *ptr, u32 value, u32 bits)
-{
-       int timeout = 1000;
-
-       out_be32(ptr, value);
-
-       while (in_be32(ptr) & bits) {
-               udelay(100);
-               timeout--;
-       }
-       if (timeout <= 0)
-               puts("Error: wait for clear timeout.\n");
-}
-
 int checkboard(void)
 {
        puts("Board: LS1012AFRDM ");
@@ -39,111 +24,25 @@ int checkboard(void)
        return 0;
 }
 
-void mmdc_init(void)
-{
-       struct mmdc_p_regs *mmdc =
-               (struct mmdc_p_regs *)CONFIG_SYS_FSL_DDR_ADDR;
-
-       out_be32(&mmdc->mdscr, CONFIGURATION_REQ);
-
-       /* configure timing parms */
-       out_be32(&mmdc->mdotc,  CONFIG_SYS_MMDC_CORE_ODT_TIMING);
-       out_be32(&mmdc->mdcfg0, CONFIG_SYS_MMDC_CORE_TIMING_CFG_0);
-       out_be32(&mmdc->mdcfg1, CONFIG_SYS_MMDC_CORE_TIMING_CFG_1);
-       out_be32(&mmdc->mdcfg2, CONFIG_SYS_MMDC_CORE_TIMING_CFG_2);
-
-       /* other parms  */
-       out_be32(&mmdc->mdmisc,    CONFIG_SYS_MMDC_CORE_MISC);
-       out_be32(&mmdc->mpmur0,    CONFIG_SYS_MMDC_PHY_MEASURE_UNIT);
-       out_be32(&mmdc->mdrwd,     CONFIG_SYS_MMDC_CORE_RDWR_CMD_DELAY);
-       out_be32(&mmdc->mpodtctrl, CONFIG_SYS_MMDC_PHY_ODT_CTRL);
-
-       /* out of reset delays */
-       out_be32(&mmdc->mdor,  CONFIG_SYS_MMDC_CORE_OUT_OF_RESET_DELAY);
-
-       /* physical parms */
-       out_be32(&mmdc->mdctl, CONFIG_SYS_MMDC_CORE_CONTROL_1);
-       out_be32(&mmdc->mdasp, CONFIG_SYS_MMDC_CORE_ADDR_PARTITION);
-
-       /* Enable MMDC */
-       out_be32(&mmdc->mdctl, CONFIG_SYS_MMDC_CORE_CONTROL_2);
-
-       /* dram init sequence: update MRs */
-       out_be32(&mmdc->mdscr, (CMD_ADDR_LSB_MR_ADDR(0x8) | CONFIGURATION_REQ |
-                               CMD_LOAD_MODE_REG | CMD_BANK_ADDR_2));
-       out_be32(&mmdc->mdscr, (CONFIGURATION_REQ | CMD_LOAD_MODE_REG |
-                               CMD_BANK_ADDR_3));
-       out_be32(&mmdc->mdscr, (CMD_ADDR_LSB_MR_ADDR(0x4) | CONFIGURATION_REQ |
-                               CMD_LOAD_MODE_REG | CMD_BANK_ADDR_1));
-       out_be32(&mmdc->mdscr, (CMD_ADDR_MSB_MR_OP(0x19) |
-                               CMD_ADDR_LSB_MR_ADDR(0x30) | CONFIGURATION_REQ |
-                               CMD_LOAD_MODE_REG | CMD_BANK_ADDR_0));
-
-       /* dram init sequence: ZQCL */
-       out_be32(&mmdc->mdscr, (CMD_ADDR_MSB_MR_OP(0x4) | CONFIGURATION_REQ |
-                               CMD_ZQ_CALIBRATION | CMD_BANK_ADDR_0));
-       set_wait_for_bits_clear(&mmdc->mpzqhwctrl,
-                               CONFIG_SYS_MMDC_PHY_ZQ_HW_CTRL,
-                               FORCE_ZQ_AUTO_CALIBRATION);
-
-       /* Calibrations now: wr lvl */
-       out_be32(&mmdc->mdscr, (CMD_ADDR_LSB_MR_ADDR(0x84) |
-                               CONFIGURATION_REQ | CMD_LOAD_MODE_REG |
-                               CMD_BANK_ADDR_1));
-       out_be32(&mmdc->mdscr, (CONFIGURATION_REQ | WL_EN | CMD_NORMAL));
-       set_wait_for_bits_clear(&mmdc->mpwlgcr, WR_LVL_HW_EN, WR_LVL_HW_EN);
-
-       mdelay(1);
-
-       out_be32(&mmdc->mdscr, (CMD_ADDR_LSB_MR_ADDR(0x4) | CONFIGURATION_REQ |
-                               CMD_LOAD_MODE_REG | CMD_BANK_ADDR_1));
-       out_be32(&mmdc->mdscr, CONFIGURATION_REQ);
-
-       mdelay(1);
-
-       /* Calibrations now: Read DQS gating calibration */
-       out_be32(&mmdc->mdscr, (CMD_ADDR_MSB_MR_OP(0x4) | CONFIGURATION_REQ |
-                               CMD_PRECHARGE_BANK_OPEN | CMD_BANK_ADDR_0));
-       out_be32(&mmdc->mdscr, (CMD_ADDR_LSB_MR_ADDR(0x4) | CONFIGURATION_REQ |
-                               CMD_LOAD_MODE_REG | CMD_BANK_ADDR_3));
-       out_be32(&mmdc->mppdcmpr2, MPR_COMPARE_EN);
-       out_be32(&mmdc->mprddlctl, CONFIG_SYS_MMDC_PHY_RD_DLY_LINES_CFG);
-       set_wait_for_bits_clear(&mmdc->mpdgctrl0,
-                               AUTO_RD_DQS_GATING_CALIBRATION_EN,
-                               AUTO_RD_DQS_GATING_CALIBRATION_EN);
-
-       out_be32(&mmdc->mdscr, (CONFIGURATION_REQ | CMD_LOAD_MODE_REG |
-                               CMD_BANK_ADDR_3));
-
-       /* Calibrations now: Read calibration */
-       out_be32(&mmdc->mdscr, (CMD_ADDR_MSB_MR_OP(0x4) | CONFIGURATION_REQ |
-                               CMD_PRECHARGE_BANK_OPEN | CMD_BANK_ADDR_0));
-       out_be32(&mmdc->mdscr, (CMD_ADDR_LSB_MR_ADDR(0x4) | CONFIGURATION_REQ |
-                               CMD_LOAD_MODE_REG | CMD_BANK_ADDR_3));
-       out_be32(&mmdc->mppdcmpr2,  MPR_COMPARE_EN);
-       set_wait_for_bits_clear(&mmdc->mprddlhwctl,
-                               AUTO_RD_CALIBRATION_EN,
-                               AUTO_RD_CALIBRATION_EN);
-
-       out_be32(&mmdc->mdscr, (CONFIGURATION_REQ | CMD_LOAD_MODE_REG |
-                               CMD_BANK_ADDR_3));
-
-       /* PD, SR */
-       out_be32(&mmdc->mdpdc, CONFIG_SYS_MMDC_CORE_PWR_DOWN_CTRL);
-       out_be32(&mmdc->mapsr, CONFIG_SYS_MMDC_CORE_PWR_SAV_CTRL_STAT);
-
-       /* refresh scheme */
-       set_wait_for_bits_clear(&mmdc->mdref,
-                               CONFIG_SYS_MMDC_CORE_REFRESH_CTL,
-                               START_REFRESH);
-
-       /* disable CON_REQ */
-       out_be32(&mmdc->mdscr, DISABLE_CFG_REQ);
-}
-
 int dram_init(void)
 {
-       mmdc_init();
+       static const struct fsl_mmdc_info mparam = {
+               0x04180000,     /* mdctl */
+               0x00030035,     /* mdpdc */
+               0x12554000,     /* mdotc */
+               0xbabf7954,     /* mdcfg0 */
+               0xdb328f64,     /* mdcfg1 */
+               0x01ff00db,     /* mdcfg2 */
+               0x00001680,     /* mdmisc */
+               0x0f3c8000,     /* mdref */
+               0x00002000,     /* mdrwd */
+               0x00bf1023,     /* mdor */
+               0x0000003f,     /* mdasp */
+               0x0000022a,     /* mpodtctrl */
+               0xa1390003,     /* mpzqhwctrl */
+       };
+
+       mmdc_init(&mparam);
 
        gd->ram_size = CONFIG_SYS_SDRAM_SIZE;
 
@@ -175,10 +74,6 @@ int board_init(void)
        gd->env_addr = (ulong)&default_environment[0];
 #endif
 
-#ifdef CONFIG_LAYERSCAPE_NS_ACCESS
-       enable_layerscape_ns_access();
-#endif
-
        return 0;
 }
 
index 71eea82a0358a487d5077fd12d3363ce48c82fb1..94440b3c8091050c05d857c60a60ea2fabca80e5 100644 (file)
@@ -17,7 +17,6 @@
 #include <mmc.h>
 #include <scsi.h>
 #include <fm_eth.h>
-#include <fsl_csu.h>
 #include <fsl_esdhc.h>
 #include <fsl_mmdc.h>
 #include <spl.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
-static void set_wait_for_bits_clear(void *ptr, u32 value, u32 bits)
-{
-       int timeout = 1000;
-
-       out_be32(ptr, value);
-
-       while (in_be32(ptr) & bits) {
-               udelay(100);
-               timeout--;
-       }
-       if (timeout <= 0)
-               puts("Error: wait for clear timeout.\n");
-}
-
 int checkboard(void)
 {
        char buf[64];
@@ -67,111 +52,25 @@ int checkboard(void)
        return 0;
 }
 
-void mmdc_init(void)
-{
-       struct mmdc_p_regs *mmdc =
-               (struct mmdc_p_regs *)CONFIG_SYS_FSL_DDR_ADDR;
-
-       out_be32(&mmdc->mdscr, CONFIGURATION_REQ);
-
-       /* configure timing parms */
-       out_be32(&mmdc->mdotc,  CONFIG_SYS_MMDC_CORE_ODT_TIMING);
-       out_be32(&mmdc->mdcfg0, CONFIG_SYS_MMDC_CORE_TIMING_CFG_0);
-       out_be32(&mmdc->mdcfg1, CONFIG_SYS_MMDC_CORE_TIMING_CFG_1);
-       out_be32(&mmdc->mdcfg2, CONFIG_SYS_MMDC_CORE_TIMING_CFG_2);
-
-       /* other parms  */
-       out_be32(&mmdc->mdmisc,    CONFIG_SYS_MMDC_CORE_MISC);
-       out_be32(&mmdc->mpmur0,    CONFIG_SYS_MMDC_PHY_MEASURE_UNIT);
-       out_be32(&mmdc->mdrwd,     CONFIG_SYS_MMDC_CORE_RDWR_CMD_DELAY);
-       out_be32(&mmdc->mpodtctrl, CONFIG_SYS_MMDC_PHY_ODT_CTRL);
-
-       /* out of reset delays */
-       out_be32(&mmdc->mdor,  CONFIG_SYS_MMDC_CORE_OUT_OF_RESET_DELAY);
-
-       /* physical parms */
-       out_be32(&mmdc->mdctl, CONFIG_SYS_MMDC_CORE_CONTROL_1);
-       out_be32(&mmdc->mdasp, CONFIG_SYS_MMDC_CORE_ADDR_PARTITION);
-
-       /* Enable MMDC */
-       out_be32(&mmdc->mdctl, CONFIG_SYS_MMDC_CORE_CONTROL_2);
-
-       /* dram init sequence: update MRs */
-       out_be32(&mmdc->mdscr, (CMD_ADDR_LSB_MR_ADDR(0x8) | CONFIGURATION_REQ |
-                               CMD_LOAD_MODE_REG | CMD_BANK_ADDR_2));
-       out_be32(&mmdc->mdscr, (CONFIGURATION_REQ | CMD_LOAD_MODE_REG |
-                               CMD_BANK_ADDR_3));
-       out_be32(&mmdc->mdscr, (CMD_ADDR_LSB_MR_ADDR(0x4) | CONFIGURATION_REQ |
-                               CMD_LOAD_MODE_REG | CMD_BANK_ADDR_1));
-       out_be32(&mmdc->mdscr, (CMD_ADDR_MSB_MR_OP(0x19) |
-                               CMD_ADDR_LSB_MR_ADDR(0x30) | CONFIGURATION_REQ |
-                               CMD_LOAD_MODE_REG | CMD_BANK_ADDR_0));
-
-       /* dram init sequence: ZQCL */
-       out_be32(&mmdc->mdscr, (CMD_ADDR_MSB_MR_OP(0x4) | CONFIGURATION_REQ |
-                               CMD_ZQ_CALIBRATION | CMD_BANK_ADDR_0));
-       set_wait_for_bits_clear(&mmdc->mpzqhwctrl,
-                               CONFIG_SYS_MMDC_PHY_ZQ_HW_CTRL,
-                               FORCE_ZQ_AUTO_CALIBRATION);
-
-       /* Calibrations now: wr lvl */
-       out_be32(&mmdc->mdscr, (CMD_ADDR_LSB_MR_ADDR(0x84) |
-                               CONFIGURATION_REQ | CMD_LOAD_MODE_REG |
-                               CMD_BANK_ADDR_1));
-       out_be32(&mmdc->mdscr, (CONFIGURATION_REQ | WL_EN | CMD_NORMAL));
-       set_wait_for_bits_clear(&mmdc->mpwlgcr, WR_LVL_HW_EN, WR_LVL_HW_EN);
-
-       mdelay(1);
-
-       out_be32(&mmdc->mdscr, (CMD_ADDR_LSB_MR_ADDR(0x4) | CONFIGURATION_REQ |
-                               CMD_LOAD_MODE_REG | CMD_BANK_ADDR_1));
-       out_be32(&mmdc->mdscr, CONFIGURATION_REQ);
-
-       mdelay(1);
-
-       /* Calibrations now: Read DQS gating calibration */
-       out_be32(&mmdc->mdscr, (CMD_ADDR_MSB_MR_OP(0x4) | CONFIGURATION_REQ |
-                               CMD_PRECHARGE_BANK_OPEN | CMD_BANK_ADDR_0));
-       out_be32(&mmdc->mdscr, (CMD_ADDR_LSB_MR_ADDR(0x4) | CONFIGURATION_REQ |
-                               CMD_LOAD_MODE_REG | CMD_BANK_ADDR_3));
-       out_be32(&mmdc->mppdcmpr2, MPR_COMPARE_EN);
-       out_be32(&mmdc->mprddlctl, CONFIG_SYS_MMDC_PHY_RD_DLY_LINES_CFG);
-       set_wait_for_bits_clear(&mmdc->mpdgctrl0,
-                               AUTO_RD_DQS_GATING_CALIBRATION_EN,
-                               AUTO_RD_DQS_GATING_CALIBRATION_EN);
-
-       out_be32(&mmdc->mdscr, (CONFIGURATION_REQ | CMD_LOAD_MODE_REG |
-                               CMD_BANK_ADDR_3));
-
-       /* Calibrations now: Read calibration */
-       out_be32(&mmdc->mdscr, (CMD_ADDR_MSB_MR_OP(0x4) | CONFIGURATION_REQ |
-                               CMD_PRECHARGE_BANK_OPEN | CMD_BANK_ADDR_0));
-       out_be32(&mmdc->mdscr, (CMD_ADDR_LSB_MR_ADDR(0x4) | CONFIGURATION_REQ |
-                               CMD_LOAD_MODE_REG | CMD_BANK_ADDR_3));
-       out_be32(&mmdc->mppdcmpr2,  MPR_COMPARE_EN);
-       set_wait_for_bits_clear(&mmdc->mprddlhwctl,
-                               AUTO_RD_CALIBRATION_EN,
-                               AUTO_RD_CALIBRATION_EN);
-
-       out_be32(&mmdc->mdscr, (CONFIGURATION_REQ | CMD_LOAD_MODE_REG |
-                               CMD_BANK_ADDR_3));
-
-       /* PD, SR */
-       out_be32(&mmdc->mdpdc, CONFIG_SYS_MMDC_CORE_PWR_DOWN_CTRL);
-       out_be32(&mmdc->mapsr, CONFIG_SYS_MMDC_CORE_PWR_SAV_CTRL_STAT);
-
-       /* refresh scheme */
-       set_wait_for_bits_clear(&mmdc->mdref,
-                               CONFIG_SYS_MMDC_CORE_REFRESH_CTL,
-                               START_REFRESH);
-
-       /* disable CON_REQ */
-       out_be32(&mmdc->mdscr, DISABLE_CFG_REQ);
-}
-
 int dram_init(void)
 {
-       mmdc_init();
+       static const struct fsl_mmdc_info mparam = {
+               0x05180000,     /* mdctl */
+               0x00030035,     /* mdpdc */
+               0x12554000,     /* mdotc */
+               0xbabf7954,     /* mdcfg0 */
+               0xdb328f64,     /* mdcfg1 */
+               0x01ff00db,     /* mdcfg2 */
+               0x00001680,     /* mdmisc */
+               0x0f3c8000,     /* mdref */
+               0x00002000,     /* mdrwd */
+               0x00bf1023,     /* mdor */
+               0x0000003f,     /* mdasp */
+               0x0000022a,     /* mpodtctrl */
+               0xa1390003,     /* mpzqhwctrl */
+       };
+
+       mmdc_init(&mparam);
 
        gd->ram_size = CONFIG_SYS_SDRAM_SIZE;
 
@@ -207,8 +106,8 @@ int board_init(void)
        out_le32(&cci->ctrl_ord,
                 CCI400_CTRLORD_EN_BARRIER);
 
-#ifdef CONFIG_LAYERSCAPE_NS_ACCESS
-       enable_layerscape_ns_access();
+#ifdef CONFIG_SYS_FSL_ERRATUM_A010315
+       erratum_a010315();
 #endif
 
 #ifdef CONFIG_ENV_IS_NOWHERE
index f69768d24e98f7848655d20332077b05614cfbdd..778434d6843fadd97c549f6702b39b792bd493c1 100644 (file)
@@ -14,7 +14,6 @@
 #include <ahci.h>
 #include <mmc.h>
 #include <scsi.h>
-#include <fsl_csu.h>
 #include <fsl_esdhc.h>
 #include <environment.h>
 #include <fsl_mmdc.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
-static void set_wait_for_bits_clear(void *ptr, u32 value, u32 bits)
-{
-       int timeout = 1000;
-
-       out_be32(ptr, value);
-
-       while (in_be32(ptr) & bits) {
-               udelay(100);
-               timeout--;
-       }
-       if (timeout <= 0)
-               puts("Error: wait for clear timeout.\n");
-}
-
 int checkboard(void)
 {
        u8 in1;
@@ -71,111 +56,25 @@ int checkboard(void)
        return 0;
 }
 
-void mmdc_init(void)
-{
-       struct mmdc_p_regs *mmdc =
-               (struct mmdc_p_regs *)CONFIG_SYS_FSL_DDR_ADDR;
-
-       out_be32(&mmdc->mdscr, CONFIGURATION_REQ);
-
-       /* configure timing parms */
-       out_be32(&mmdc->mdotc,  CONFIG_SYS_MMDC_CORE_ODT_TIMING);
-       out_be32(&mmdc->mdcfg0, CONFIG_SYS_MMDC_CORE_TIMING_CFG_0);
-       out_be32(&mmdc->mdcfg1, CONFIG_SYS_MMDC_CORE_TIMING_CFG_1);
-       out_be32(&mmdc->mdcfg2, CONFIG_SYS_MMDC_CORE_TIMING_CFG_2);
-
-       /* other parms  */
-       out_be32(&mmdc->mdmisc,    CONFIG_SYS_MMDC_CORE_MISC);
-       out_be32(&mmdc->mpmur0,    CONFIG_SYS_MMDC_PHY_MEASURE_UNIT);
-       out_be32(&mmdc->mdrwd,     CONFIG_SYS_MMDC_CORE_RDWR_CMD_DELAY);
-       out_be32(&mmdc->mpodtctrl, CONFIG_SYS_MMDC_PHY_ODT_CTRL);
-
-       /* out of reset delays */
-       out_be32(&mmdc->mdor,  CONFIG_SYS_MMDC_CORE_OUT_OF_RESET_DELAY);
-
-       /* physical parms */
-       out_be32(&mmdc->mdctl, CONFIG_SYS_MMDC_CORE_CONTROL_1);
-       out_be32(&mmdc->mdasp, CONFIG_SYS_MMDC_CORE_ADDR_PARTITION);
-
-       /* Enable MMDC */
-       out_be32(&mmdc->mdctl, CONFIG_SYS_MMDC_CORE_CONTROL_2);
-
-       /* dram init sequence: update MRs */
-       out_be32(&mmdc->mdscr, (CMD_ADDR_LSB_MR_ADDR(0x8) | CONFIGURATION_REQ |
-                               CMD_LOAD_MODE_REG | CMD_BANK_ADDR_2));
-       out_be32(&mmdc->mdscr, (CONFIGURATION_REQ | CMD_LOAD_MODE_REG |
-                               CMD_BANK_ADDR_3));
-       out_be32(&mmdc->mdscr, (CMD_ADDR_LSB_MR_ADDR(0x4) | CONFIGURATION_REQ |
-                               CMD_LOAD_MODE_REG | CMD_BANK_ADDR_1));
-       out_be32(&mmdc->mdscr, (CMD_ADDR_MSB_MR_OP(0x19) |
-                               CMD_ADDR_LSB_MR_ADDR(0x30) | CONFIGURATION_REQ |
-                               CMD_LOAD_MODE_REG | CMD_BANK_ADDR_0));
-
-       /* dram init sequence: ZQCL */
-       out_be32(&mmdc->mdscr, (CMD_ADDR_MSB_MR_OP(0x4) | CONFIGURATION_REQ |
-                               CMD_ZQ_CALIBRATION | CMD_BANK_ADDR_0));
-       set_wait_for_bits_clear(&mmdc->mpzqhwctrl,
-                               CONFIG_SYS_MMDC_PHY_ZQ_HW_CTRL,
-                               FORCE_ZQ_AUTO_CALIBRATION);
-
-       /* Calibrations now: wr lvl */
-       out_be32(&mmdc->mdscr, (CMD_ADDR_LSB_MR_ADDR(0x84) |
-                               CONFIGURATION_REQ | CMD_LOAD_MODE_REG |
-                               CMD_BANK_ADDR_1));
-       out_be32(&mmdc->mdscr, (CONFIGURATION_REQ | WL_EN | CMD_NORMAL));
-       set_wait_for_bits_clear(&mmdc->mpwlgcr, WR_LVL_HW_EN, WR_LVL_HW_EN);
-
-       mdelay(1);
-
-       out_be32(&mmdc->mdscr, (CMD_ADDR_LSB_MR_ADDR(0x4) | CONFIGURATION_REQ |
-                               CMD_LOAD_MODE_REG | CMD_BANK_ADDR_1));
-       out_be32(&mmdc->mdscr, CONFIGURATION_REQ);
-
-       mdelay(1);
-
-       /* Calibrations now: Read DQS gating calibration */
-       out_be32(&mmdc->mdscr, (CMD_ADDR_MSB_MR_OP(0x4) | CONFIGURATION_REQ |
-                               CMD_PRECHARGE_BANK_OPEN | CMD_BANK_ADDR_0));
-       out_be32(&mmdc->mdscr, (CMD_ADDR_LSB_MR_ADDR(0x4) | CONFIGURATION_REQ |
-                               CMD_LOAD_MODE_REG | CMD_BANK_ADDR_3));
-       out_be32(&mmdc->mppdcmpr2, MPR_COMPARE_EN);
-       out_be32(&mmdc->mprddlctl, CONFIG_SYS_MMDC_PHY_RD_DLY_LINES_CFG);
-       set_wait_for_bits_clear(&mmdc->mpdgctrl0,
-                               AUTO_RD_DQS_GATING_CALIBRATION_EN,
-                               AUTO_RD_DQS_GATING_CALIBRATION_EN);
-
-       out_be32(&mmdc->mdscr, (CONFIGURATION_REQ | CMD_LOAD_MODE_REG |
-                               CMD_BANK_ADDR_3));
-
-       /* Calibrations now: Read calibration */
-       out_be32(&mmdc->mdscr, (CMD_ADDR_MSB_MR_OP(0x4) | CONFIGURATION_REQ |
-                               CMD_PRECHARGE_BANK_OPEN | CMD_BANK_ADDR_0));
-       out_be32(&mmdc->mdscr, (CMD_ADDR_LSB_MR_ADDR(0x4) | CONFIGURATION_REQ |
-                               CMD_LOAD_MODE_REG | CMD_BANK_ADDR_3));
-       out_be32(&mmdc->mppdcmpr2,  MPR_COMPARE_EN);
-       set_wait_for_bits_clear(&mmdc->mprddlhwctl,
-                               AUTO_RD_CALIBRATION_EN,
-                               AUTO_RD_CALIBRATION_EN);
-
-       out_be32(&mmdc->mdscr, (CONFIGURATION_REQ | CMD_LOAD_MODE_REG |
-                               CMD_BANK_ADDR_3));
-
-       /* PD, SR */
-       out_be32(&mmdc->mdpdc, CONFIG_SYS_MMDC_CORE_PWR_DOWN_CTRL);
-       out_be32(&mmdc->mapsr, CONFIG_SYS_MMDC_CORE_PWR_SAV_CTRL_STAT);
-
-       /* refresh scheme */
-       set_wait_for_bits_clear(&mmdc->mdref,
-                               CONFIG_SYS_MMDC_CORE_REFRESH_CTL,
-                               START_REFRESH);
-
-       /* disable CON_REQ */
-       out_be32(&mmdc->mdscr, DISABLE_CFG_REQ);
-}
-
 int dram_init(void)
 {
-       mmdc_init();
+       static const struct fsl_mmdc_info mparam = {
+               0x05180000,     /* mdctl */
+               0x00030035,     /* mdpdc */
+               0x12554000,     /* mdotc */
+               0xbabf7954,     /* mdcfg0 */
+               0xdb328f64,     /* mdcfg1 */
+               0x01ff00db,     /* mdcfg2 */
+               0x00001680,     /* mdmisc */
+               0x0f3c8000,     /* mdref */
+               0x00002000,     /* mdrwd */
+               0x00bf1023,     /* mdor */
+               0x0000003f,     /* mdasp */
+               0x0000022a,     /* mpodtctrl */
+               0xa1390003,     /* mpzqhwctrl */
+       };
+
+       mmdc_init(&mparam);
 
        gd->ram_size = CONFIG_SYS_SDRAM_SIZE;
 
@@ -203,12 +102,12 @@ int board_init(void)
         */
        out_le32(&cci->ctrl_ord, CCI400_CTRLORD_EN_BARRIER);
 
-#ifdef CONFIG_ENV_IS_NOWHERE
-       gd->env_addr = (ulong)&default_environment[0];
+#ifdef CONFIG_SYS_FSL_ERRATUM_A010315
+       erratum_a010315();
 #endif
 
-#ifdef CONFIG_LAYERSCAPE_NS_ACCESS
-       enable_layerscape_ns_access();
+#ifdef CONFIG_ENV_IS_NOWHERE
+       gd->env_addr = (ulong)&default_environment[0];
 #endif
 
        return 0;
index dbea0bff2692ac7692a87311a40e11ab7e93a6e1..4eb38a73c901050761cced88c6498e4b2260d88e 100644 (file)
@@ -430,6 +430,10 @@ int board_init(void)
        struct ccsr_cci400 *cci = (struct ccsr_cci400 *)CONFIG_SYS_CCI400_ADDR;
        unsigned int major;
 
+#ifdef CONFIG_SYS_FSL_ERRATUM_A010315
+       erratum_a010315();
+#endif
+
        major = get_soc_major_rev();
        if (major == SOC_MAJOR_VER_1_0) {
                /* Set CCI-400 control override register to
@@ -446,10 +450,6 @@ int board_init(void)
 
        ls102xa_smmu_stream_id_init();
 
-#ifdef CONFIG_LAYERSCAPE_NS_ACCESS
-       enable_layerscape_ns_access();
-#endif
-
 #ifdef CONFIG_U_QE
        u_qe_init();
 #endif
index 77482a947bf445b52ae19764b067c9e7bc274b50..d96fd774d36b3d7e5c8950fa298e053f1c8780df 100644 (file)
@@ -142,7 +142,7 @@ int checkboard(void)
 void ddrmc_init(void)
 {
        struct ccsr_ddr *ddr = (struct ccsr_ddr *)CONFIG_SYS_FSL_DDR_ADDR;
-       u32 temp_sdram_cfg;
+       u32 temp_sdram_cfg, tmp;
 
        out_be32(&ddr->sdram_cfg, DDR_SDRAM_CFG);
 
@@ -189,6 +189,11 @@ void ddrmc_init(void)
        out_be32(&ddr->ddr_zq_cntl, DDR_DDR_ZQ_CNTL);
 
        out_be32(&ddr->cs0_config_2, DDR_CS0_CONFIG_2);
+
+       /* DDR erratum A-009942 */
+       tmp = in_be32(&ddr->debug[28]);
+       out_be32(&ddr->debug[28], tmp | 0x0070006f);
+
        udelay(1);
 
 #ifdef CONFIG_DEEP_SLEEP
@@ -480,6 +485,10 @@ void ls1twr_program_regulator(void)
 
 int board_init(void)
 {
+#ifdef CONFIG_SYS_FSL_ERRATUM_A010315
+       erratum_a010315();
+#endif
+
 #ifndef CONFIG_SYS_FSL_NO_SERDES
        fsl_serdes_init();
 #if !defined(CONFIG_QSPI_BOOT) && !defined(CONFIG_SD_BOOT_QSPI)
@@ -489,10 +498,6 @@ int board_init(void)
 
        ls102xa_smmu_stream_id_init();
 
-#ifdef CONFIG_LAYERSCAPE_NS_ACCESS
-       enable_layerscape_ns_access();
-#endif
-
 #ifdef CONFIG_U_QE
        u_qe_init();
 #endif
index 941dfbc447ebe9f1b3ed29c1d8e7bc1710dee264..8835a49bb508193a66559aa9412e36fb9f0198e8 100644 (file)
@@ -17,7 +17,6 @@
 #include <mmc.h>
 #include <scsi.h>
 #include <fm_eth.h>
-#include <fsl_csu.h>
 #include <fsl_esdhc.h>
 #include <fsl_ifc.h>
 #include <spl.h>
@@ -309,6 +308,10 @@ int misc_init_r(void)
 
 int board_init(void)
 {
+#ifdef CONFIG_SYS_FSL_ERRATUM_A010315
+       erratum_a010315();
+#endif
+
        select_i2c_ch_pca9547(I2C_MUX_CH_DEFAULT);
        board_retimer_init();
 
@@ -316,9 +319,6 @@ int board_init(void)
        config_serdes_mux();
 #endif
 
-#ifdef CONFIG_LAYERSCAPE_NS_ACCESS
-       enable_layerscape_ns_access();
-#endif
        return 0;
 }
 
index d3e37b4996a0a87adc389b6451df0ee4cbfb34cf..e213128c1b9c270c96080f138d9d634fc27bd10f 100644 (file)
@@ -16,7 +16,6 @@
 #include <mmc.h>
 #include <scsi.h>
 #include <fm_eth.h>
-#include <fsl_csu.h>
 #include <fsl_esdhc.h>
 #include <fsl_ifc.h>
 #include <fsl_sec.h>
@@ -86,12 +85,29 @@ int board_init(void)
 {
        struct ccsr_scfg *scfg = (struct ccsr_scfg *)CONFIG_SYS_FSL_SCFG_ADDR;
 
+#ifdef CONFIG_SYS_FSL_ERRATUM_A010315
+       erratum_a010315();
+#endif
+
 #ifdef CONFIG_FSL_IFC
        init_final_memctl_regs();
 #endif
 
-#ifdef CONFIG_LAYERSCAPE_NS_ACCESS
-       enable_layerscape_ns_access();
+#ifdef CONFIG_SECURE_BOOT
+       /* In case of Secure Boot, the IBR configures the SMMU
+        * to allow only Secure transactions.
+        * SMMU must be reset in bypass mode.
+        * Set the ClientPD bit and Clear the USFCFG Bit
+        */
+       u32 val;
+       val = (in_le32(SMMU_SCR0) | SCR0_CLIENTPD_MASK) & ~(SCR0_USFCFG_MASK);
+       out_le32(SMMU_SCR0, val);
+       val = (in_le32(SMMU_NSCR0) | SCR0_CLIENTPD_MASK) & ~(SCR0_USFCFG_MASK);
+       out_le32(SMMU_NSCR0, val);
+#endif
+
+#ifdef CONFIG_FSL_CAAM
+       sec_init();
 #endif
 
 #ifdef CONFIG_FSL_LS_PPA
@@ -137,21 +153,6 @@ int config_board_mux(void)
 int misc_init_r(void)
 {
        config_board_mux();
-#ifdef CONFIG_SECURE_BOOT
-       /* In case of Secure Boot, the IBR configures the SMMU
-        * to allow only Secure transactions.
-        * SMMU must be reset in bypass mode.
-        * Set the ClientPD bit and Clear the USFCFG Bit
-        */
-       u32 val;
-       val = (in_le32(SMMU_SCR0) | SCR0_CLIENTPD_MASK) & ~(SCR0_USFCFG_MASK);
-       out_le32(SMMU_SCR0, val);
-       val = (in_le32(SMMU_NSCR0) | SCR0_CLIENTPD_MASK) & ~(SCR0_USFCFG_MASK);
-       out_le32(SMMU_NSCR0, val);
-#endif
-#ifdef CONFIG_FSL_CAAM
-       return sec_init();
-#endif
        return 0;
 }
 #endif
diff --git a/board/freescale/ls1046aqds/Kconfig b/board/freescale/ls1046aqds/Kconfig
new file mode 100644 (file)
index 0000000..723f4ba
--- /dev/null
@@ -0,0 +1,15 @@
+if TARGET_LS1046AQDS
+
+config SYS_BOARD
+       default "ls1046aqds"
+
+config SYS_VENDOR
+       default "freescale"
+
+config SYS_SOC
+       default "fsl-layerscape"
+
+config SYS_CONFIG_NAME
+       default "ls1046aqds"
+
+endif
diff --git a/board/freescale/ls1046aqds/MAINTAINERS b/board/freescale/ls1046aqds/MAINTAINERS
new file mode 100644 (file)
index 0000000..b4549ae
--- /dev/null
@@ -0,0 +1,10 @@
+LS1046AQDS BOARD
+M:     Mingkai Hu <Mingkai.Hu@nxp.com>
+S:     Maintained
+F:     board/freescale/ls1046aqds/
+F:     include/configs/ls1046aqds.h
+F:     configs/ls1046aqds_defconfig
+F:     configs/ls1046aqds_nand_defconfig
+F:     configs/ls1046aqds_sdcard_ifc_defconfig
+F:     configs/ls1046aqds_sdcard_qspi_defconfig
+F:     configs/ls1046aqds_qspi_defconfig
diff --git a/board/freescale/ls1046aqds/Makefile b/board/freescale/ls1046aqds/Makefile
new file mode 100644 (file)
index 0000000..df6e546
--- /dev/null
@@ -0,0 +1,9 @@
+#
+# Copyright 2016 Freescale Semiconductor, Inc.
+#
+# SPDX-License-Identifier:      GPL-2.0+
+#
+
+obj-y += ddr.o
+obj-y += eth.o
+obj-y += ls1046aqds.o
diff --git a/board/freescale/ls1046aqds/README b/board/freescale/ls1046aqds/README
new file mode 100644 (file)
index 0000000..b8fa326
--- /dev/null
@@ -0,0 +1,70 @@
+Overview
+--------
+The LS1046A Development System (QDS) is a high-performance computing,
+evaluation, and development platform that supports the QorIQ LS1046A
+LayerScape Architecture processor. The LS1046AQDS provides SW development
+platform for the Freescale LS1046A processor series, with a complete
+debugging environment.
+
+LS1046A SoC Overview
+--------------------
+Please refer arch/arm/cpu/armv8/fsl-layerscape/doc/README.soc for LS1046A
+SoC overview.
+
+ LS1046AQDS board Overview
+ -----------------------
+ - SERDES Connections, 8 lanes supporting:
+      - PCI Express - 3.0
+      - SGMII, SGMII 2.5
+      - QSGMII
+      - SATA 3.0
+      - XFI
+ - DDR Controller
+     - 8GB 64bits DDR4 SDRAM. Support rates of up to 2133MT/s
+ -IFC/Local Bus
+    - One in-socket 128 MB NOR flash 16-bit data bus
+    - One 512 MB NAND flash with ECC support
+    - PromJet Port
+    - FPGA connection
+ - USB 3.0
+    - Three high speed USB 3.0 ports
+    - First USB 3.0 port configured as Host with Type-A connector
+    - The other two USB 3.0 ports configured as OTG with micro-AB connector
+ - SDHC port connects directly to an adapter card slot, featuring:
+    - Optional clock feedback paths, and optional high-speed voltage translation assistance
+    - SD slots for SD, SDHC (1x, 4x, 8x), and/or MMC
+    - eMMC memory devices
+ - DSPI: Onboard support for three SPI flash memory devices
+ - 4 I2C controllers
+ - One SATA onboard connectors
+ - UART
+   - Two 4-pin serial ports at up to 115.2 Kbit/s
+   - Two DB9 D-Type connectors supporting one Serial port each
+ - ARM JTAG support
+
+Memory map from core's view
+----------------------------
+Start Address    End Address     Description           Size
+0x00_0000_0000 - 0x00_000F_FFFF  Secure Boot ROM       1MB
+0x00_0100_0000 - 0x00_0FFF_FFFF  CCSRBAR               240MB
+0x00_1000_0000 - 0x00_1000_FFFF  OCRAM0                64KB
+0x00_1001_0000 - 0x00_1001_FFFF  OCRAM1                64KB
+0x00_2000_0000 - 0x00_20FF_FFFF  DCSR                  16MB
+0x00_6000_0000 - 0x00_67FF_FFFF  IFC - NOR Flash       128MB
+0x00_7E80_0000 - 0x00_7E80_FFFF  IFC - NAND Flash      64KB
+0x00_7FB0_0000 - 0x00_7FB0_0FFF  IFC - FPGA            4KB
+0x00_8000_0000 - 0x00_FFFF_FFFF  DRAM1                 2GB
+0x05_0000_0000 - 0x05_07FF_FFFF  QMAN S/W Portal       128M
+0x05_0800_0000 - 0x05_0FFF_FFFF  BMAN S/W Portal       128M
+0x08_8000_0000 - 0x09_FFFF_FFFF  DRAM2                 6GB
+0x40_0000_0000 - 0x47_FFFF_FFFF  PCI Express1          32G
+0x48_0000_0000 - 0x4F_FFFF_FFFF  PCI Express2          32G
+0x50_0000_0000 - 0x57_FFFF_FFFF  PCI Express3          32G
+
+Booting Options
+---------------
+a) Promjet Boot
+b) NOR boot
+c) NAND boot
+d) SD boot
+e) QSPI boot
diff --git a/board/freescale/ls1046aqds/ddr.c b/board/freescale/ls1046aqds/ddr.c
new file mode 100644 (file)
index 0000000..d813965
--- /dev/null
@@ -0,0 +1,140 @@
+/*
+ * Copyright 2016 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <common.h>
+#include <fsl_ddr_sdram.h>
+#include <fsl_ddr_dimm_params.h>
+#ifdef CONFIG_FSL_DEEP_SLEEP
+#include <fsl_sleep.h>
+#endif
+#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 > 3) {
+               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;
+                               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);
+
+       popts->data_bus_width = 0;      /* 64b data bus */
+       popts->otf_burst_chop_en = 0;
+       popts->burst_length = DDR_BL8;
+       popts->bstopre = 0;             /* enable auto precharge */
+
+       popts->half_strength_driver_enable = 0;
+       /*
+        * 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;
+
+       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_TRAIN_EN | DDR_CDR2_VREF_RANGE_2;
+}
+
+phys_size_t initdram(int board_type)
+{
+       phys_size_t dram_size;
+
+#if defined(CONFIG_SPL) && !defined(CONFIG_SPL_BUILD)
+       return fsl_ddr_sdram_size();
+#else
+       puts("Initializing DDR....using SPD\n");
+
+       dram_size = fsl_ddr_sdram();
+#endif
+
+#ifdef CONFIG_FSL_DEEP_SLEEP
+       fsl_dp_ddr_restore();
+#endif
+
+       erratum_a008850_post();
+
+       return dram_size;
+}
+
+void dram_init_banksize(void)
+{
+       /*
+        * gd->arch.secure_ram tracks the location of secure memory.
+        * It was set as if the memory starts from 0.
+        * The address needs to add the offset of its bank.
+        */
+       gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE;
+       if (gd->ram_size > CONFIG_SYS_DDR_BLOCK1_SIZE) {
+               gd->bd->bi_dram[0].size = CONFIG_SYS_DDR_BLOCK1_SIZE;
+               gd->bd->bi_dram[1].start = CONFIG_SYS_DDR_BLOCK2_BASE;
+               gd->bd->bi_dram[1].size = gd->ram_size -
+                                         CONFIG_SYS_DDR_BLOCK1_SIZE;
+#ifdef CONFIG_SYS_MEM_RESERVE_SECURE
+               gd->arch.secure_ram = gd->bd->bi_dram[1].start +
+                                gd->arch.secure_ram -
+                                CONFIG_SYS_DDR_BLOCK1_SIZE;
+               gd->arch.secure_ram |= MEM_RESERVE_SECURE_MAINTAINED;
+#endif
+       } else {
+               gd->bd->bi_dram[0].size = gd->ram_size;
+#ifdef CONFIG_SYS_MEM_RESERVE_SECURE
+               gd->arch.secure_ram = gd->bd->bi_dram[0].start +
+                                gd->arch.secure_ram;
+               gd->arch.secure_ram |= MEM_RESERVE_SECURE_MAINTAINED;
+#endif
+       }
+}
diff --git a/board/freescale/ls1046aqds/ddr.h b/board/freescale/ls1046aqds/ddr.h
new file mode 100644 (file)
index 0000000..b594032
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2016 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#ifndef __DDR_H__
+#define __DDR_H__
+
+void erratum_a008850_post(void);
+
+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;
+};
+
+/*
+ * 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 |
+        * ranks| mhz| GB  |adjst| start |   ctl2    |  ctl3  |
+        */
+       {2,  1350, 0, 8,     6, 0x0708090B, 0x0C0D0E09,},
+       {2,  1666, 0, 8,     7, 0x08090A0C, 0x0D0F100B,},
+       {2,  1900, 0, 8,     7, 0x09090B0D, 0x0E10120B,},
+       {2,  2300, 0, 8,     9, 0x0A0C0D11, 0x1214150E,},
+       {}
+};
+
+static const struct board_specific_parameters *udimms[] = {
+       udimm0,
+};
+
+#endif
diff --git a/board/freescale/ls1046aqds/eth.c b/board/freescale/ls1046aqds/eth.c
new file mode 100644 (file)
index 0000000..046db11
--- /dev/null
@@ -0,0 +1,415 @@
+/*
+ * Copyright 2016 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <common.h>
+#include <asm/io.h>
+#include <netdev.h>
+#include <fdt_support.h>
+#include <fm_eth.h>
+#include <fsl_mdio.h>
+#include <fsl_dtsec.h>
+#include <malloc.h>
+#include <asm/arch/fsl_serdes.h>
+
+#include "../common/qixis.h"
+#include "../common/fman.h"
+#include "ls1046aqds_qixis.h"
+
+#define EMI_NONE       0xFF
+#define EMI1_RGMII1    0
+#define EMI1_RGMII2    1
+#define EMI1_SLOT1     2
+#define EMI1_SLOT2     3
+#define EMI1_SLOT4     4
+
+static int mdio_mux[NUM_FM_PORTS];
+
+static const char * const mdio_names[] = {
+       "LS1046AQDS_MDIO_RGMII1",
+       "LS1046AQDS_MDIO_RGMII2",
+       "LS1046AQDS_MDIO_SLOT1",
+       "LS1046AQDS_MDIO_SLOT2",
+       "LS1046AQDS_MDIO_SLOT4",
+       "NULL",
+};
+
+/* Map SerDes 1 & 2 lanes to default slot. */
+static u8 lane_to_slot[] = {1, 1, 1, 1, 0, 4, 0 , 0};
+
+static const char *ls1046aqds_mdio_name_for_muxval(u8 muxval)
+{
+       return mdio_names[muxval];
+}
+
+struct mii_dev *mii_dev_for_muxval(u8 muxval)
+{
+       struct mii_dev *bus;
+       const char *name;
+
+       if (muxval > EMI1_SLOT4)
+               return NULL;
+
+       name = ls1046aqds_mdio_name_for_muxval(muxval);
+
+       if (!name) {
+               printf("No bus for muxval %x\n", muxval);
+               return NULL;
+       }
+
+       bus = miiphy_get_dev_by_name(name);
+
+       if (!bus) {
+               printf("No bus by name %s\n", name);
+               return NULL;
+       }
+
+       return bus;
+}
+
+struct ls1046aqds_mdio {
+       u8 muxval;
+       struct mii_dev *realbus;
+};
+
+static void ls1046aqds_mux_mdio(u8 muxval)
+{
+       u8 brdcfg4;
+
+       if (muxval < 7) {
+               brdcfg4 = QIXIS_READ(brdcfg[4]);
+               brdcfg4 &= ~BRDCFG4_EMISEL_MASK;
+               brdcfg4 |= (muxval << BRDCFG4_EMISEL_SHIFT);
+               QIXIS_WRITE(brdcfg[4], brdcfg4);
+       }
+}
+
+static int ls1046aqds_mdio_read(struct mii_dev *bus, int addr, int devad,
+                             int regnum)
+{
+       struct ls1046aqds_mdio *priv = bus->priv;
+
+       ls1046aqds_mux_mdio(priv->muxval);
+
+       return priv->realbus->read(priv->realbus, addr, devad, regnum);
+}
+
+static int ls1046aqds_mdio_write(struct mii_dev *bus, int addr, int devad,
+                              int regnum, u16 value)
+{
+       struct ls1046aqds_mdio *priv = bus->priv;
+
+       ls1046aqds_mux_mdio(priv->muxval);
+
+       return priv->realbus->write(priv->realbus, addr, devad,
+                                   regnum, value);
+}
+
+static int ls1046aqds_mdio_reset(struct mii_dev *bus)
+{
+       struct ls1046aqds_mdio *priv = bus->priv;
+
+       return priv->realbus->reset(priv->realbus);
+}
+
+static int ls1046aqds_mdio_init(char *realbusname, u8 muxval)
+{
+       struct ls1046aqds_mdio *pmdio;
+       struct mii_dev *bus = mdio_alloc();
+
+       if (!bus) {
+               printf("Failed to allocate ls1046aqds MDIO bus\n");
+               return -1;
+       }
+
+       pmdio = malloc(sizeof(*pmdio));
+       if (!pmdio) {
+               printf("Failed to allocate ls1046aqds private data\n");
+               free(bus);
+               return -1;
+       }
+
+       bus->read = ls1046aqds_mdio_read;
+       bus->write = ls1046aqds_mdio_write;
+       bus->reset = ls1046aqds_mdio_reset;
+       sprintf(bus->name, ls1046aqds_mdio_name_for_muxval(muxval));
+
+       pmdio->realbus = miiphy_get_dev_by_name(realbusname);
+
+       if (!pmdio->realbus) {
+               printf("No bus with name %s\n", realbusname);
+               free(bus);
+               free(pmdio);
+               return -1;
+       }
+
+       pmdio->muxval = muxval;
+       bus->priv = pmdio;
+       return mdio_register(bus);
+}
+
+void board_ft_fman_fixup_port(void *fdt, char *compat, phys_addr_t addr,
+                             enum fm_port port, int offset)
+{
+       struct fixed_link f_link;
+
+       if (fm_info_get_enet_if(port) == PHY_INTERFACE_MODE_SGMII) {
+               switch (port) {
+               case FM1_DTSEC9:
+                       fdt_set_phy_handle(fdt, compat, addr, "sgmii_s1_p1");
+                       break;
+               case FM1_DTSEC10:
+                       fdt_set_phy_handle(fdt, compat, addr, "sgmii_s1_p2");
+                       break;
+               case FM1_DTSEC5:
+                       fdt_set_phy_handle(fdt, compat, addr, "sgmii_s1_p3");
+                       break;
+               case FM1_DTSEC6:
+                       fdt_set_phy_handle(fdt, compat, addr, "sgmii_s1_p4");
+                       break;
+               case FM1_DTSEC2:
+                       fdt_set_phy_handle(fdt, compat, addr, "sgmii_s4_p1");
+                       break;
+               default:
+                       break;
+               }
+       } else if (fm_info_get_enet_if(port) == PHY_INTERFACE_MODE_SGMII_2500) {
+               /* 2.5G SGMII interface */
+               f_link.phy_id = cpu_to_fdt32(port);
+               f_link.duplex = cpu_to_fdt32(1);
+               f_link.link_speed = cpu_to_fdt32(1000);
+               f_link.pause = 0;
+               f_link.asym_pause = 0;
+               /* no PHY for 2.5G SGMII on QDS */
+               fdt_delprop(fdt, offset, "phy-handle");
+               fdt_setprop(fdt, offset, "fixed-link", &f_link, sizeof(f_link));
+               fdt_setprop_string(fdt, offset, "phy-connection-type",
+                                  "sgmii-2500");
+       } else if (fm_info_get_enet_if(port) == PHY_INTERFACE_MODE_QSGMII) {
+               switch (port) {
+               case FM1_DTSEC1:
+                       fdt_set_phy_handle(fdt, compat, addr, "qsgmii_s2_p4");
+                       break;
+               case FM1_DTSEC5:
+                       fdt_set_phy_handle(fdt, compat, addr, "qsgmii_s2_p2");
+                       break;
+               case FM1_DTSEC6:
+                       fdt_set_phy_handle(fdt, compat, addr, "qsgmii_s2_p1");
+                       break;
+               case FM1_DTSEC10:
+                       fdt_set_phy_handle(fdt, compat, addr, "qsgmii_s2_p3");
+                       break;
+               default:
+                       break;
+               }
+               fdt_delprop(fdt, offset, "phy-connection-type");
+               fdt_setprop_string(fdt, offset, "phy-connection-type",
+                                  "qsgmii");
+       } else if (fm_info_get_enet_if(port) == PHY_INTERFACE_MODE_XGMII &&
+                  (port == FM1_10GEC1 || port == FM1_10GEC2)) {
+               /* XFI interface */
+               f_link.phy_id = cpu_to_fdt32(port);
+               f_link.duplex = cpu_to_fdt32(1);
+               f_link.link_speed = cpu_to_fdt32(10000);
+               f_link.pause = 0;
+               f_link.asym_pause = 0;
+               /* no PHY for XFI */
+               fdt_delprop(fdt, offset, "phy-handle");
+               fdt_setprop(fdt, offset, "fixed-link", &f_link, sizeof(f_link));
+               fdt_setprop_string(fdt, offset, "phy-connection-type", "xgmii");
+       }
+}
+
+void fdt_fixup_board_enet(void *fdt)
+{
+       int i;
+
+       for (i = FM1_DTSEC1; i < NUM_FM_PORTS; i++) {
+               switch (fm_info_get_enet_if(i)) {
+               case PHY_INTERFACE_MODE_SGMII:
+               case PHY_INTERFACE_MODE_QSGMII:
+                       switch (mdio_mux[i]) {
+                       case EMI1_SLOT1:
+                               fdt_status_okay_by_alias(fdt, "emi1_slot1");
+                               break;
+                       case EMI1_SLOT2:
+                               fdt_status_okay_by_alias(fdt, "emi1_slot2");
+                               break;
+                       case EMI1_SLOT4:
+                               fdt_status_okay_by_alias(fdt, "emi1_slot4");
+                               break;
+                       default:
+                               break;
+                       }
+                       break;
+               default:
+                       break;
+               }
+       }
+}
+
+int board_eth_init(bd_t *bis)
+{
+#ifdef CONFIG_FMAN_ENET
+       int i, idx, lane, slot, interface;
+       struct memac_mdio_info dtsec_mdio_info;
+       struct ccsr_gur *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR);
+       u32 srds_s1, srds_s2;
+       u8 brdcfg12;
+
+       srds_s1 = in_be32(&gur->rcwsr[4]) &
+                       FSL_CHASSIS2_RCWSR4_SRDS1_PRTCL_MASK;
+       srds_s1 >>= FSL_CHASSIS2_RCWSR4_SRDS1_PRTCL_SHIFT;
+
+       srds_s2 = in_be32(&gur->rcwsr[4]) &
+                       FSL_CHASSIS2_RCWSR4_SRDS2_PRTCL_MASK;
+       srds_s2 >>= FSL_CHASSIS2_RCWSR4_SRDS2_PRTCL_SHIFT;
+
+       /* Initialize the mdio_mux array so we can recognize empty elements */
+       for (i = 0; i < NUM_FM_PORTS; i++)
+               mdio_mux[i] = EMI_NONE;
+
+       dtsec_mdio_info.regs =
+               (struct memac_mdio_controller *)CONFIG_SYS_FM1_DTSEC_MDIO_ADDR;
+
+       dtsec_mdio_info.name = DEFAULT_FM_MDIO_NAME;
+
+       /* Register the 1G MDIO bus */
+       fm_memac_mdio_init(bis, &dtsec_mdio_info);
+
+       /* Register the muxing front-ends to the MDIO buses */
+       ls1046aqds_mdio_init(DEFAULT_FM_MDIO_NAME, EMI1_RGMII1);
+       ls1046aqds_mdio_init(DEFAULT_FM_MDIO_NAME, EMI1_RGMII2);
+       ls1046aqds_mdio_init(DEFAULT_FM_MDIO_NAME, EMI1_SLOT1);
+       ls1046aqds_mdio_init(DEFAULT_FM_MDIO_NAME, EMI1_SLOT2);
+       ls1046aqds_mdio_init(DEFAULT_FM_MDIO_NAME, EMI1_SLOT4);
+
+       /* Set the two on-board RGMII PHY address */
+       fm_info_set_phy_address(FM1_DTSEC3, RGMII_PHY1_ADDR);
+       fm_info_set_phy_address(FM1_DTSEC4, RGMII_PHY2_ADDR);
+
+       switch (srds_s1) {
+       case 0x3333:
+               /* SGMII on slot 1, MAC 9 */
+               fm_info_set_phy_address(FM1_DTSEC9, SGMII_CARD_PORT1_PHY_ADDR);
+       case 0x1333:
+       case 0x2333:
+               /* SGMII on slot 1, MAC 10 */
+               fm_info_set_phy_address(FM1_DTSEC10, SGMII_CARD_PORT2_PHY_ADDR);
+       case 0x1133:
+       case 0x2233:
+               /* SGMII on slot 1, MAC 5/6 */
+               fm_info_set_phy_address(FM1_DTSEC5, SGMII_CARD_PORT3_PHY_ADDR);
+               fm_info_set_phy_address(FM1_DTSEC6, SGMII_CARD_PORT4_PHY_ADDR);
+               break;
+       case 0x1040:
+       case 0x2040:
+               /* QSGMII on lane B, MAC 6/5/10/1 */
+               fm_info_set_phy_address(FM1_DTSEC6,
+                                       QSGMII_CARD_PORT1_PHY_ADDR_S2);
+               fm_info_set_phy_address(FM1_DTSEC5,
+                                       QSGMII_CARD_PORT2_PHY_ADDR_S2);
+               fm_info_set_phy_address(FM1_DTSEC10,
+                                       QSGMII_CARD_PORT3_PHY_ADDR_S2);
+               fm_info_set_phy_address(FM1_DTSEC1,
+                                       QSGMII_CARD_PORT4_PHY_ADDR_S2);
+               break;
+       case 0x3363:
+               /* SGMII on slot 1, MAC 9/10 */
+               fm_info_set_phy_address(FM1_DTSEC9, SGMII_CARD_PORT1_PHY_ADDR);
+               fm_info_set_phy_address(FM1_DTSEC10, SGMII_CARD_PORT2_PHY_ADDR);
+       case 0x1163:
+       case 0x2263:
+       case 0x2223:
+               /* SGMII on slot 1, MAC 6 */
+               fm_info_set_phy_address(FM1_DTSEC6, SGMII_CARD_PORT4_PHY_ADDR);
+               break;
+       default:
+               printf("Invalid SerDes protocol 0x%x for LS1046AQDS\n",
+                      srds_s1);
+               break;
+       }
+
+       if (srds_s2 == 0x5a59 || srds_s2 == 0x5a06)
+               /* SGMII on slot 4, MAC 2 */
+               fm_info_set_phy_address(FM1_DTSEC2, SGMII_CARD_PORT1_PHY_ADDR);
+
+       for (i = FM1_DTSEC1; i < FM1_DTSEC1 + CONFIG_SYS_NUM_FM1_DTSEC; i++) {
+               idx = i - FM1_DTSEC1;
+               interface = fm_info_get_enet_if(i);
+               switch (interface) {
+               case PHY_INTERFACE_MODE_SGMII:
+               case PHY_INTERFACE_MODE_QSGMII:
+                       if (interface == PHY_INTERFACE_MODE_SGMII) {
+                               if (i == FM1_DTSEC5) {
+                                       /* route lane 2 to slot1 so to have
+                                        * one sgmii riser card supports
+                                        * MAC5 and MAC6.
+                                        */
+                                       brdcfg12 = QIXIS_READ(brdcfg[12]);
+                                       QIXIS_WRITE(brdcfg[12],
+                                                   brdcfg12 | 0x80);
+                               }
+                               lane = serdes_get_first_lane(FSL_SRDS_1,
+                                               SGMII_FM1_DTSEC1 + idx);
+                       } else {
+                               /* clear the bit 7 to route lane B on slot2. */
+                               brdcfg12 = QIXIS_READ(brdcfg[12]);
+                               QIXIS_WRITE(brdcfg[12], brdcfg12 & 0x7f);
+
+                               lane = serdes_get_first_lane(FSL_SRDS_1,
+                                               QSGMII_FM1_A);
+                               lane_to_slot[lane] = 2;
+                       }
+
+                       if (i == FM1_DTSEC2)
+                               lane = 5;
+
+                       if (lane < 0)
+                               break;
+
+                       slot = lane_to_slot[lane];
+                       debug("FM1@DTSEC%u expects SGMII in slot %u\n",
+                             idx + 1, slot);
+                       if (QIXIS_READ(present2) & (1 << (slot - 1)))
+                               fm_disable_port(i);
+
+                       switch (slot) {
+                       case 1:
+                               mdio_mux[i] = EMI1_SLOT1;
+                               fm_info_set_mdio(i, mii_dev_for_muxval(
+                                                mdio_mux[i]));
+                               break;
+                       case 2:
+                               mdio_mux[i] = EMI1_SLOT2;
+                               fm_info_set_mdio(i, mii_dev_for_muxval(
+                                                mdio_mux[i]));
+                               break;
+                       case 4:
+                               mdio_mux[i] = EMI1_SLOT4;
+                               fm_info_set_mdio(i, mii_dev_for_muxval(
+                                                mdio_mux[i]));
+                               break;
+                       default:
+                               break;
+                       }
+                       break;
+               case PHY_INTERFACE_MODE_RGMII:
+                       if (i == FM1_DTSEC3)
+                               mdio_mux[i] = EMI1_RGMII1;
+                       else if (i == FM1_DTSEC4)
+                               mdio_mux[i] = EMI1_RGMII2;
+                       fm_info_set_mdio(i, mii_dev_for_muxval(mdio_mux[i]));
+                       break;
+               default:
+                       break;
+               }
+       }
+
+       cpu_eth_init(bis);
+#endif /* CONFIG_FMAN_ENET */
+
+       return pci_eth_init(bis);
+}
diff --git a/board/freescale/ls1046aqds/ls1046aqds.c b/board/freescale/ls1046aqds/ls1046aqds.c
new file mode 100644 (file)
index 0000000..8c18538
--- /dev/null
@@ -0,0 +1,298 @@
+/*
+ * Copyright 2016 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <common.h>
+#include <i2c.h>
+#include <fdt_support.h>
+#include <asm/io.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/fsl_serdes.h>
+#include <asm/arch/fdt.h>
+#include <asm/arch/soc.h>
+#include <ahci.h>
+#include <hwconfig.h>
+#include <mmc.h>
+#include <scsi.h>
+#include <fm_eth.h>
+#include <fsl_csu.h>
+#include <fsl_esdhc.h>
+#include <fsl_ifc.h>
+#include <spl.h>
+
+#include "../common/vid.h"
+#include "../common/qixis.h"
+#include "ls1046aqds_qixis.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+enum {
+       MUX_TYPE_GPIO,
+};
+
+int checkboard(void)
+{
+       char buf[64];
+#ifndef CONFIG_SD_BOOT
+       u8 sw;
+#endif
+
+       puts("Board: LS1046AQDS, boot from ");
+
+#ifdef CONFIG_SD_BOOT
+       puts("SD\n");
+#else
+       sw = QIXIS_READ(brdcfg[0]);
+       sw = (sw & QIXIS_LBMAP_MASK) >> QIXIS_LBMAP_SHIFT;
+
+       if (sw < 0x8)
+               printf("vBank: %d\n", sw);
+       else if (sw == 0x8)
+               puts("PromJet\n");
+       else if (sw == 0x9)
+               puts("NAND\n");
+       else if (sw == 0xF)
+               printf("QSPI\n");
+       else
+               printf("invalid setting of SW%u\n", QIXIS_LBMAP_SWITCH);
+#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());
+
+       return 0;
+}
+
+bool if_board_diff_clk(void)
+{
+       u8 diff_conf = QIXIS_READ(brdcfg[11]);
+
+       return diff_conf & 0x40;
+}
+
+unsigned long get_board_sys_clk(void)
+{
+       u8 sysclk_conf = QIXIS_READ(brdcfg[1]);
+
+       switch (sysclk_conf & 0x0f) {
+       case QIXIS_SYSCLK_64:
+               return 64000000;
+       case QIXIS_SYSCLK_83:
+               return 83333333;
+       case QIXIS_SYSCLK_100:
+               return 100000000;
+       case QIXIS_SYSCLK_125:
+               return 125000000;
+       case QIXIS_SYSCLK_133:
+               return 133333333;
+       case QIXIS_SYSCLK_150:
+               return 150000000;
+       case QIXIS_SYSCLK_160:
+               return 160000000;
+       case QIXIS_SYSCLK_166:
+               return 166666666;
+       }
+
+       return 66666666;
+}
+
+unsigned long get_board_ddr_clk(void)
+{
+       u8 ddrclk_conf = QIXIS_READ(brdcfg[1]);
+
+       if (if_board_diff_clk())
+               return get_board_sys_clk();
+       switch ((ddrclk_conf & 0x30) >> 4) {
+       case QIXIS_DDRCLK_100:
+               return 100000000;
+       case QIXIS_DDRCLK_125:
+               return 125000000;
+       case QIXIS_DDRCLK_133:
+               return 133333333;
+       }
+
+       return 66666666;
+}
+
+int select_i2c_ch_pca9547(u8 ch)
+{
+       int ret;
+
+       ret = i2c_write(I2C_MUX_PCA_ADDR_PRI, 0, 1, &ch, 1);
+       if (ret) {
+               puts("PCA: failed to select proper channel\n");
+               return ret;
+       }
+
+       return 0;
+}
+
+int dram_init(void)
+{
+       /*
+        * When resuming from deep sleep, the I2C channel may not be
+        * in the default channel. So, switch to the default channel
+        * before accessing DDR SPD.
+        */
+       select_i2c_ch_pca9547(I2C_MUX_CH_DEFAULT);
+       gd->ram_size = initdram(0);
+
+       return 0;
+}
+
+int i2c_multiplexer_select_vid_channel(u8 channel)
+{
+       return select_i2c_ch_pca9547(channel);
+}
+
+int board_early_init_f(void)
+{
+#ifdef CONFIG_HAS_FSL_XHCI_USB
+       struct ccsr_scfg *scfg = (struct ccsr_scfg *)CONFIG_SYS_FSL_SCFG_ADDR;
+       u32 usb_pwrfault;
+#endif
+
+#ifdef CONFIG_SYS_I2C_EARLY_INIT
+       i2c_early_init_f();
+#endif
+       fsl_lsch2_early_init_f();
+
+#ifdef CONFIG_HAS_FSL_XHCI_USB
+       out_be32(&scfg->rcwpmuxcr0, 0x3333);
+       out_be32(&scfg->usbdrvvbus_selcr, SCFG_USBDRVVBUS_SELCR_USB1);
+       usb_pwrfault = (SCFG_USBPWRFAULT_DEDICATED <<
+                       SCFG_USBPWRFAULT_USB3_SHIFT) |
+                       (SCFG_USBPWRFAULT_DEDICATED <<
+                       SCFG_USBPWRFAULT_USB2_SHIFT) |
+                       (SCFG_USBPWRFAULT_SHARED <<
+                       SCFG_USBPWRFAULT_USB1_SHIFT);
+       out_be32(&scfg->usbpwrfault_selcr, usb_pwrfault);
+#endif
+
+       return 0;
+}
+
+#ifdef CONFIG_FSL_DEEP_SLEEP
+/* determine if it is a warm boot */
+bool is_warm_boot(void)
+{
+#define DCFG_CCSR_CRSTSR_WDRFR (1 << 3)
+       struct ccsr_gur __iomem *gur = (void *)CONFIG_SYS_FSL_GUTS_ADDR;
+
+       if (in_be32(&gur->crstsr) & DCFG_CCSR_CRSTSR_WDRFR)
+               return 1;
+
+       return 0;
+}
+#endif
+
+int config_board_mux(int ctrl_type)
+{
+       u8 reg14;
+
+       reg14 = QIXIS_READ(brdcfg[14]);
+
+       switch (ctrl_type) {
+       case MUX_TYPE_GPIO:
+               reg14 = (reg14 & (~0x6)) | 0x2;
+               break;
+       default:
+               puts("Unsupported mux interface type\n");
+               return -1;
+       }
+
+       QIXIS_WRITE(brdcfg[14], reg14);
+
+       return 0;
+}
+
+int config_serdes_mux(void)
+{
+       return 0;
+}
+
+#ifdef CONFIG_MISC_INIT_R
+int misc_init_r(void)
+{
+       if (hwconfig("gpio"))
+               config_board_mux(MUX_TYPE_GPIO);
+
+       return 0;
+}
+#endif
+
+int board_init(void)
+{
+       select_i2c_ch_pca9547(I2C_MUX_CH_DEFAULT);
+
+#ifdef CONFIG_SYS_FSL_SERDES
+       config_serdes_mux();
+#endif
+
+#ifdef CONFIG_LAYERSCAPE_NS_ACCESS
+       enable_layerscape_ns_access();
+#endif
+
+       if (adjust_vdd(0))
+               printf("Warning: Adjusting core voltage failed.\n");
+
+       return 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];
+       u8 reg;
+
+       /* fixup DT for the two 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;
+
+       fdt_fixup_memory_banks(blob, base, size, 2);
+       ft_cpu_setup(blob, bd);
+
+#ifdef CONFIG_SYS_DPAA_FMAN
+       fdt_fixup_fman_ethernet(blob);
+       fdt_fixup_board_enet(blob);
+#endif
+
+       reg = QIXIS_READ(brdcfg[0]);
+       reg = (reg & QIXIS_LBMAP_MASK) >> QIXIS_LBMAP_SHIFT;
+
+       /* Disable IFC if QSPI is enabled */
+       if (reg == 0xF)
+               do_fixup_by_compat(blob, "fsl,ifc",
+                                  "status", "disabled", 8 + 1, 1);
+
+       return 0;
+}
+#endif
+
+u8 flash_read8(void *addr)
+{
+       return __raw_readb(addr + 1);
+}
+
+void flash_write16(u16 val, void *addr)
+{
+       u16 shftval = (((val >> 8) & 0xff) | ((val << 8) & 0xff00));
+
+       __raw_writew(shftval, addr);
+}
+
+u16 flash_read16(void *addr)
+{
+       u16 val = __raw_readw(addr);
+
+       return (((val) >> 8) & 0x00ff) | (((val) << 8) & 0xff00);
+}
diff --git a/board/freescale/ls1046aqds/ls1046aqds_pbi.cfg b/board/freescale/ls1046aqds/ls1046aqds_pbi.cfg
new file mode 100644 (file)
index 0000000..5a6b7b8
--- /dev/null
@@ -0,0 +1,17 @@
+#Configure Scratch register
+09570600 00000000
+09570604 10000000
+#Alt base register
+09570158 00001000
+#Disable CCI barrier tranaction
+09570178 0000e010
+09180000 00000008
+#USB PHY frequency sel
+09570418 0000009e
+0957041c 0000009e
+09570420 0000009e
+#Serdes SATA
+09eb1300 80104e20
+09eb08dc 00502880
+#flush PBI data
+096100c0 000fffff
diff --git a/board/freescale/ls1046aqds/ls1046aqds_qixis.h b/board/freescale/ls1046aqds/ls1046aqds_qixis.h
new file mode 100644 (file)
index 0000000..58ab132
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2016 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#ifndef __LS1046AQDS_QIXIS_H__
+#define __LS1046AQDS_QIXIS_H__
+
+/* Definitions of QIXIS Registers for LS1046AQDS */
+
+/* BRDCFG4[4:7] select EC1 and EC2 as a pair */
+#define BRDCFG4_EMISEL_MASK            0xe0
+#define BRDCFG4_EMISEL_SHIFT           5
+
+/* SYSCLK */
+#define QIXIS_SYSCLK_66                        0x0
+#define QIXIS_SYSCLK_83                        0x1
+#define QIXIS_SYSCLK_100               0x2
+#define QIXIS_SYSCLK_125               0x3
+#define QIXIS_SYSCLK_133               0x4
+#define QIXIS_SYSCLK_150               0x5
+#define QIXIS_SYSCLK_160               0x6
+#define QIXIS_SYSCLK_166               0x7
+#define QIXIS_SYSCLK_64                        0x8
+
+/* DDRCLK */
+#define QIXIS_DDRCLK_66                        0x0
+#define QIXIS_DDRCLK_100               0x1
+#define QIXIS_DDRCLK_125               0x2
+#define QIXIS_DDRCLK_133               0x3
+
+/* BRDCFG2 - SD clock*/
+#define QIXIS_SDCLK1_100               0x0
+#define QIXIS_SDCLK1_125               0x1
+#define QIXIS_SDCLK1_165               0x2
+#define QIXIS_SDCLK1_100_SP            0x3
+
+#endif
diff --git a/board/freescale/ls1046aqds/ls1046aqds_rcw_nand.cfg b/board/freescale/ls1046aqds/ls1046aqds_rcw_nand.cfg
new file mode 100644 (file)
index 0000000..b5fc08c
--- /dev/null
@@ -0,0 +1,7 @@
+#PBL preamble and RCW header
+aa55aa55 01ee0100
+# serdes protocol
+0c150010 0e000000 00000000 00000000
+11335559 40005012 e0116000 c1000000
+00000000 00000000 00000000 00038800
+00000000 01001101 00000096 00000001
diff --git a/board/freescale/ls1046aqds/ls1046aqds_rcw_sd_ifc.cfg b/board/freescale/ls1046aqds/ls1046aqds_rcw_sd_ifc.cfg
new file mode 100644 (file)
index 0000000..59d24d6
--- /dev/null
@@ -0,0 +1,8 @@
+#PBL preamble and RCW header
+aa55aa55 01ee0100
+# RCW
+# Enable IFC; disable QSPI
+0c150010 0e000000 00000000 00000000
+11335559 40005012 60040000 c1000000
+00000000 00000000 00000000 00038800
+00000000 01001101 00000096 00000001
diff --git a/board/freescale/ls1046aqds/ls1046aqds_rcw_sd_qspi.cfg b/board/freescale/ls1046aqds/ls1046aqds_rcw_sd_qspi.cfg
new file mode 100644 (file)
index 0000000..9401a6f
--- /dev/null
@@ -0,0 +1,8 @@
+#PBL preamble and RCW header
+aa55aa55 01ee0100
+# RCW
+# Enable QSPI; disable IFC
+0c150010 0e000000 00000000 00000000
+11335559 40005012 60040000 c1000000
+00000000 00000000 00000000 00038800
+20124000 01001101 00000096 00000001
diff --git a/board/freescale/ls1046ardb/Kconfig b/board/freescale/ls1046ardb/Kconfig
new file mode 100644 (file)
index 0000000..a62255c
--- /dev/null
@@ -0,0 +1,16 @@
+
+if TARGET_LS1046ARDB
+
+config SYS_BOARD
+       default "ls1046ardb"
+
+config SYS_VENDOR
+       default "freescale"
+
+config SYS_SOC
+       default "fsl-layerscape"
+
+config SYS_CONFIG_NAME
+       default "ls1046ardb"
+
+endif
diff --git a/board/freescale/ls1046ardb/MAINTAINERS b/board/freescale/ls1046ardb/MAINTAINERS
new file mode 100644 (file)
index 0000000..ff42bef
--- /dev/null
@@ -0,0 +1,9 @@
+LS1046A BOARD
+M:     Mingkai Hu <mingkai.hu@nxp.com>
+S:     Maintained
+F:     board/freescale/ls1046ardb/
+F:     board/freescale/ls1046ardb/ls1046ardb.c
+F:     include/configs/ls1046ardb.h
+F:     configs/ls1046ardb_qspi_defconfig
+F:     configs/ls1046ardb_sdcard_defconfig
+F:     configs/ls1046ardb_emmc_defconfig
diff --git a/board/freescale/ls1046ardb/Makefile b/board/freescale/ls1046ardb/Makefile
new file mode 100644 (file)
index 0000000..348eb76
--- /dev/null
@@ -0,0 +1,10 @@
+#
+# Copyright 2016 Freescale Semiconductor
+#
+# SPDX-License-Identifier:     GPL-2.0+
+#
+
+obj-y += cpld.o
+obj-y += ddr.o
+obj-y += ls1046ardb.o
+obj-$(CONFIG_SYS_DPAA_FMAN) += eth.o
diff --git a/board/freescale/ls1046ardb/README b/board/freescale/ls1046ardb/README
new file mode 100644 (file)
index 0000000..1ef7d47
--- /dev/null
@@ -0,0 +1,76 @@
+Overview
+--------
+The LS1046A Reference Design Board (RDB) is a high-performance computing,
+evaluation, and development platform that supports the QorIQ LS1046A
+LayerScape Architecture processor. The LS1046ARDB provides SW development
+platform for the Freescale LS1046A processor series, with a complete
+debugging environment. The LS1046A RDB is lead-free and RoHS-compliant.
+
+LS1046A SoC Overview
+--------------------
+Please refer arch/arm/cpu/armv8/fsl-layerscape/doc/README.soc for LS1046A
+SoC overview.
+
+ LS1046ARDB board Overview
+ -----------------------
+ - SERDES1 Connections, 4 lanes supporting:
+      - Lane0: XFI with x1 RJ45 connector
+      - Lane1: XFI Cage
+      - Lane2: SGMII.5
+      - Lane3: SGMII.6
+ - SERDES2 Connections, 4 lanes supporting:
+      - Lane0: PCIe1 with miniPCIe slot
+      - Lane1: PCIe2 with PCIe x2 slot
+      - Lane2: PCIe3 with PCIe x4 slot
+      - Lane3: SATA
+ - DDR Controller
+     - 8GB 64bits DDR4 SDRAM. Support rates of up to 2133MT/s
+ -IFC/Local Bus
+    - One 512 MB NAND flash with ECC support
+    - CPLD connection
+ - USB 3.0
+    - one Type A port, one Micro-AB port
+ - SDHC: connects directly to a full SD/MMC slot
+ - DSPI: 64 MB high-speed flash Memory for boot code and storage (up to 108MHz)
+ - 4 I2C controllers
+ - UART
+   - Two 4-pin serial ports at up to 115.2 Kbit/s
+   - Two DB9 D-Type connectors supporting one Serial port each
+ - ARM JTAG support
+
+Memory map from core's view
+----------------------------
+Start Address   End Address     Description            Size
+0x00_0000_0000 - 0x00_000F_FFFF  Secure Boot ROM       1MB
+0x00_0100_0000 - 0x00_0FFF_FFFF  CCSRBAR               240MB
+0x00_1000_0000 - 0x00_1000_FFFF  OCRAM0                64KB
+0x00_1001_0000 - 0x00_1001_FFFF  OCRAM1                64KB
+0x00_2000_0000 - 0x00_20FF_FFFF  DCSR                  16MB
+0x00_7E80_0000 - 0x00_7E80_FFFF  IFC - NAND Flash      64KB
+0x00_7FB0_0000 - 0x00_7FB0_0FFF  IFC - CPLD            4KB
+0x00_8000_0000 - 0x00_FFFF_FFFF  DRAM1                 2GB
+0x05_0000_0000 - 0x05_07FF_FFFF  QMAN S/W Portal       128M
+0x05_0800_0000 - 0x05_0FFF_FFFF  BMAN S/W Portal       128M
+0x08_8000_0000 - 0x09_FFFF_FFFF  DRAM2                 6GB
+0x40_0000_0000 - 0x47_FFFF_FFFF  PCI Express1          32G
+0x48_0000_0000 - 0x4F_FFFF_FFFF  PCI Express2          32G
+0x50_0000_0000 - 0x57_FFFF_FFFF  PCI Express3          32G
+
+QSPI flash map:
+Start Address    End Address     Description           Size
+0x00_4000_0000 - 0x00_400F_FFFF  RCW + PBI             1MB
+0x00_4010_0000 - 0x00_401F_FFFF  U-Boot                1MB
+0x00_4020_0000 - 0x00_402F_FFFF  U-Boot Env            1MB
+0x00_4030_0000 - 0x00_403F_FFFF  FMan ucode            1MB
+0x00_4040_0000 - 0x00_404F_FFFF  UEFI                  1MB
+0x00_4050_0000 - 0x00_406F_FFFF  PPA                   2MB
+0x00_4070_0000 - 0x00_408F_FFFF  Secure boot header
+                                + bootscript           2MB
+0x00_4090_0000 - 0x00_40FF_FFFF  Reserved              7MB
+0x00_4100_0000 - 0x00_43FF_FFFF  FIT Image             48MB
+
+Booting Options
+---------------
+a) QSPI boot
+b) SD boot
+c) eMMC boot
diff --git a/board/freescale/ls1046ardb/cpld.c b/board/freescale/ls1046ardb/cpld.c
new file mode 100644 (file)
index 0000000..81a646e
--- /dev/null
@@ -0,0 +1,158 @@
+/*
+ * Copyright 2016 Freescale Semiconductor
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ *
+ * Freescale LS1046ARDB board-specific CPLD controlling supports.
+ */
+
+#include <common.h>
+#include <command.h>
+#include <asm/io.h>
+#include "cpld.h"
+
+u8 cpld_read(unsigned int reg)
+{
+       void *p = (void *)CONFIG_SYS_CPLD_BASE;
+
+       return in_8(p + reg);
+}
+
+void cpld_write(unsigned int reg, u8 value)
+{
+       void *p = (void *)CONFIG_SYS_CPLD_BASE;
+
+       out_8(p + reg, value);
+}
+
+/* Set the boot bank to the alternate bank */
+void cpld_set_altbank(void)
+{
+       u16 reg = CPLD_CFG_RCW_SRC_QSPI;
+       u8 reg4 = CPLD_READ(soft_mux_on);
+       u8 reg5 = (u8)(reg >> 1);
+       u8 reg6 = (u8)(reg & 1);
+       u8 reg7 = CPLD_READ(vbank);
+
+       cpld_rev_bit(&reg5);
+
+       CPLD_WRITE(soft_mux_on, reg4 | CPLD_SW_MUX_BANK_SEL | 1);
+
+       CPLD_WRITE(cfg_rcw_src1, reg5);
+       CPLD_WRITE(cfg_rcw_src2, reg6);
+
+       reg7 = (reg7 & ~CPLD_BANK_SEL_MASK) | CPLD_BANK_SEL_ALTBANK;
+       CPLD_WRITE(vbank, reg7);
+
+       CPLD_WRITE(system_rst, 1);
+}
+
+/* Set the boot bank to the default bank */
+void cpld_set_defbank(void)
+{
+       u16 reg = CPLD_CFG_RCW_SRC_QSPI;
+       u8 reg4 = CPLD_READ(soft_mux_on);
+       u8 reg5 = (u8)(reg >> 1);
+       u8 reg6 = (u8)(reg & 1);
+
+       cpld_rev_bit(&reg5);
+
+       CPLD_WRITE(soft_mux_on, reg4 | CPLD_SW_MUX_BANK_SEL | 1);
+
+       CPLD_WRITE(cfg_rcw_src1, reg5);
+       CPLD_WRITE(cfg_rcw_src2, reg6);
+
+       CPLD_WRITE(vbank, 0);
+
+       CPLD_WRITE(system_rst, 1);
+}
+
+void cpld_set_sd(void)
+{
+       u16 reg = CPLD_CFG_RCW_SRC_SD;
+       u8 reg5 = (u8)(reg >> 1);
+       u8 reg6 = (u8)(reg & 1);
+
+       cpld_rev_bit(&reg5);
+
+       CPLD_WRITE(soft_mux_on, 1);
+
+       CPLD_WRITE(cfg_rcw_src1, reg5);
+       CPLD_WRITE(cfg_rcw_src2, reg6);
+
+       CPLD_WRITE(system_rst, 1);
+}
+#ifdef DEBUG
+static void cpld_dump_regs(void)
+{
+       printf("cpld_ver        = %x\n", CPLD_READ(cpld_ver));
+       printf("cpld_ver_sub    = %x\n", CPLD_READ(cpld_ver_sub));
+       printf("pcba_ver        = %x\n", CPLD_READ(pcba_ver));
+       printf("soft_mux_on     = %x\n", CPLD_READ(soft_mux_on));
+       printf("cfg_rcw_src1    = %x\n", CPLD_READ(cfg_rcw_src1));
+       printf("cfg_rcw_src2    = %x\n", CPLD_READ(cfg_rcw_src2));
+       printf("vbank           = %x\n", CPLD_READ(vbank));
+       printf("sysclk_sel      = %x\n", CPLD_READ(sysclk_sel));
+       printf("uart_sel        = %x\n", CPLD_READ(uart_sel));
+       printf("sd1refclk_sel   = %x\n", CPLD_READ(sd1refclk_sel));
+       printf("rgmii_1588_sel  = %x\n", CPLD_READ(rgmii_1588_sel));
+       printf("1588_clk_sel    = %x\n", CPLD_READ(reg_1588_clk_sel));
+       printf("status_led      = %x\n", CPLD_READ(status_led));
+       printf("sd_emmc         = %x\n", CPLD_READ(sd_emmc));
+       printf("vdd_en          = %x\n", CPLD_READ(vdd_en));
+       printf("vdd_sel         = %x\n", CPLD_READ(vdd_sel));
+       putc('\n');
+}
+#endif
+
+void cpld_rev_bit(unsigned char *value)
+{
+       u8 rev_val, val;
+       int i;
+
+       val = *value;
+       rev_val = val & 1;
+       for (i = 1; i <= 7; i++) {
+               val >>= 1;
+               rev_val <<= 1;
+               rev_val |= val & 1;
+       }
+
+       *value = rev_val;
+}
+
+int do_cpld(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+       int rc = 0;
+
+       if (argc <= 1)
+               return cmd_usage(cmdtp);
+
+       if (strcmp(argv[1], "reset") == 0) {
+               if (strcmp(argv[2], "altbank") == 0)
+                       cpld_set_altbank();
+               else if (strcmp(argv[2], "sd") == 0)
+                       cpld_set_sd();
+               else
+                       cpld_set_defbank();
+#ifdef DEBUG
+       } else if (strcmp(argv[1], "dump") == 0) {
+               cpld_dump_regs();
+#endif
+       } else {
+               rc = cmd_usage(cmdtp);
+       }
+
+       return rc;
+}
+
+U_BOOT_CMD(
+       cpld, CONFIG_SYS_MAXARGS, 1, do_cpld,
+       "Reset the board or alternate bank",
+       "reset: reset to default bank\n"
+       "cpld reset altbank: reset to alternate bank\n"
+       "cpld reset sd: reset to boot from SD card\n"
+#ifdef DEBUG
+       "cpld dump - display the CPLD registers\n"
+#endif
+);
diff --git a/board/freescale/ls1046ardb/cpld.h b/board/freescale/ls1046ardb/cpld.h
new file mode 100644 (file)
index 0000000..458da7e
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2016 Freescale Semiconductor
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#ifndef __CPLD_H__
+#define __CPLD_H__
+
+/*
+ * CPLD register set of LS1046ARDB board-specific.
+ * CPLD Revision:  V2.1
+ */
+struct cpld_data {
+       u8 cpld_ver;            /* 0x0 - CPLD Major Revision Register */
+       u8 cpld_ver_sub;        /* 0x1 - CPLD Minor Revision Register */
+       u8 pcba_ver;            /* 0x2 - PCBA Revision Register */
+       u8 system_rst;          /* 0x3 - system reset register */
+       u8 soft_mux_on;         /* 0x4 - Switch Control Enable Register */
+       u8 cfg_rcw_src1;        /* 0x5 - RCW Source Location POR Regsiter 1 */
+       u8 cfg_rcw_src2;        /* 0x6 - RCW Source Location POR Regsiter 2 */
+       u8 vbank;               /* 0x7 - QSPI Flash Bank Setting Register */
+       u8 sysclk_sel;          /* 0x8 - System clock POR Register */
+       u8 uart_sel;            /* 0x9 - UART1 Connection Control Register */
+       u8 sd1refclk_sel;       /* 0xA - */
+       u8 rgmii_1588_sel;      /* 0xB - */
+       u8 reg_1588_clk_sel;    /* 0xC - */
+       u8 status_led;          /* 0xD - */
+       u8 global_rst;          /* 0xE - */
+       u8 sd_emmc;             /* 0xF - SD/EMMC Interface Control Regsiter */
+       u8 vdd_en;              /* 0x10 - VDD Voltage Control Enable Register */
+       u8 vdd_sel;             /* 0x11 - VDD Voltage Control Register */
+};
+
+u8 cpld_read(unsigned int reg);
+void cpld_write(unsigned int reg, u8 value);
+void cpld_rev_bit(unsigned char *value);
+
+#define CPLD_READ(reg) cpld_read(offsetof(struct cpld_data, reg))
+#define CPLD_WRITE(reg, value)  \
+       cpld_write(offsetof(struct cpld_data, reg), value)
+
+/* CPLD on IFC */
+#define CPLD_SW_MUX_BANK_SEL   0x40
+#define CPLD_BANK_SEL_MASK     0x07
+#define CPLD_BANK_SEL_ALTBANK  0x04
+#define CPLD_CFG_RCW_SRC_QSPI  0x044
+#define CPLD_CFG_RCW_SRC_SD    0x040
+#endif
diff --git a/board/freescale/ls1046ardb/ddr.c b/board/freescale/ls1046ardb/ddr.c
new file mode 100644 (file)
index 0000000..a9b7dbd
--- /dev/null
@@ -0,0 +1,140 @@
+/*
+ * Copyright 2016 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <common.h>
+#include <fsl_ddr_sdram.h>
+#include <fsl_ddr_dimm_params.h>
+#include "ddr.h"
+#ifdef CONFIG_FSL_DEEP_SLEEP
+#include <fsl_sleep.h>
+#endif
+
+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;
+                               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);
+
+       popts->data_bus_width = 0;      /* 64-bit data bus */
+       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 = 0;
+       /*
+        * 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;
+
+       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_TRAIN_EN | DDR_CDR2_VREF_RANGE_2;
+}
+
+phys_size_t initdram(int board_type)
+{
+       phys_size_t dram_size;
+
+#if defined(CONFIG_SPL) && !defined(CONFIG_SPL_BUILD)
+       return fsl_ddr_sdram_size();
+#else
+       puts("Initializing DDR....using SPD\n");
+
+       dram_size = fsl_ddr_sdram();
+#endif
+
+       erratum_a008850_post();
+
+       return dram_size;
+}
+
+void dram_init_banksize(void)
+{
+       /*
+        * gd->arch.secure_ram tracks the location of secure memory.
+        * It was set as if the memory starts from 0.
+        * The address needs to add the offset of its bank.
+        */
+       gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE;
+       if (gd->ram_size > CONFIG_SYS_DDR_BLOCK1_SIZE) {
+               gd->bd->bi_dram[0].size = CONFIG_SYS_DDR_BLOCK1_SIZE;
+               gd->bd->bi_dram[1].start = CONFIG_SYS_DDR_BLOCK2_BASE;
+               gd->bd->bi_dram[1].size = gd->ram_size -
+                                         CONFIG_SYS_DDR_BLOCK1_SIZE;
+#ifdef CONFIG_SYS_MEM_RESERVE_SECURE
+               gd->arch.secure_ram = gd->bd->bi_dram[1].start +
+                                gd->arch.secure_ram -
+                                CONFIG_SYS_DDR_BLOCK1_SIZE;
+               gd->arch.secure_ram |= MEM_RESERVE_SECURE_MAINTAINED;
+#endif
+       } else {
+               gd->bd->bi_dram[0].size = gd->ram_size;
+#ifdef CONFIG_SYS_MEM_RESERVE_SECURE
+               gd->arch.secure_ram = gd->bd->bi_dram[0].start +
+                                gd->arch.secure_ram;
+               gd->arch.secure_ram |= MEM_RESERVE_SECURE_MAINTAINED;
+#endif
+       }
+}
diff --git a/board/freescale/ls1046ardb/ddr.h b/board/freescale/ls1046ardb/ddr.h
new file mode 100644 (file)
index 0000000..9e440f6
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2016 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#ifndef __DDR_H__
+#define __DDR_H__
+
+void erratum_a008850_post(void);
+
+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;
+};
+
+/*
+ * 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
+        * ranks| mhz| GB  |adjst| start |   ctl2    |  ctl3
+        */
+       {2,  1350, 0, 8,     6, 0x0708090B, 0x0C0D0E09,},
+       {2,  1666, 0, 8,     7, 0x08090A0C, 0x0D0F100B,},
+       {2,  1900, 0, 8,     7, 0x09090B0D, 0x0E10120B,},
+       {2,  2300, 0, 8,     9, 0x0A0B0C10, 0x1213140E,},
+       {}
+};
+
+static const struct board_specific_parameters *udimms[] = {
+       udimm0,
+};
+
+#endif
diff --git a/board/freescale/ls1046ardb/eth.c b/board/freescale/ls1046ardb/eth.c
new file mode 100644 (file)
index 0000000..ac8bbec
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+ * Copyright 2016 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+#include <common.h>
+#include <asm/io.h>
+#include <netdev.h>
+#include <fm_eth.h>
+#include <fsl_dtsec.h>
+#include <fsl_mdio.h>
+#include <malloc.h>
+
+#include "../common/fman.h"
+
+int board_eth_init(bd_t *bis)
+{
+#ifdef CONFIG_FMAN_ENET
+       int i;
+       struct memac_mdio_info dtsec_mdio_info;
+       struct memac_mdio_info tgec_mdio_info;
+       struct mii_dev *dev;
+       u32 srds_s1;
+       struct ccsr_gur *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR);
+
+       srds_s1 = in_be32(&gur->rcwsr[4]) &
+                       FSL_CHASSIS2_RCWSR4_SRDS1_PRTCL_MASK;
+       srds_s1 >>= FSL_CHASSIS2_RCWSR4_SRDS1_PRTCL_SHIFT;
+
+       dtsec_mdio_info.regs =
+               (struct memac_mdio_controller *)CONFIG_SYS_FM1_DTSEC_MDIO_ADDR;
+
+       dtsec_mdio_info.name = DEFAULT_FM_MDIO_NAME;
+
+       /* Register the 1G MDIO bus */
+       fm_memac_mdio_init(bis, &dtsec_mdio_info);
+
+       tgec_mdio_info.regs =
+               (struct memac_mdio_controller *)CONFIG_SYS_FM1_TGEC_MDIO_ADDR;
+       tgec_mdio_info.name = DEFAULT_FM_TGEC_MDIO_NAME;
+
+       /* Register the 10G MDIO bus */
+       fm_memac_mdio_init(bis, &tgec_mdio_info);
+
+       /* Set the two on-board RGMII PHY address */
+       fm_info_set_phy_address(FM1_DTSEC3, RGMII_PHY1_ADDR);
+       fm_info_set_phy_address(FM1_DTSEC4, RGMII_PHY2_ADDR);
+
+       /* Set the two on-board SGMII PHY address */
+       fm_info_set_phy_address(FM1_DTSEC5, SGMII_PHY1_ADDR);
+       fm_info_set_phy_address(FM1_DTSEC6, SGMII_PHY2_ADDR);
+
+       /* Set the on-board AQ PHY address */
+       fm_info_set_phy_address(FM1_10GEC1, FM1_10GEC1_PHY_ADDR);
+
+       switch (srds_s1) {
+       case 0x1133:
+               break;
+       default:
+               printf("Invalid SerDes protocol 0x%x for LS1046ARDB\n",
+                      srds_s1);
+               break;
+       }
+
+       dev = miiphy_get_dev_by_name(DEFAULT_FM_MDIO_NAME);
+       for (i = FM1_DTSEC1; i < FM1_DTSEC1 + CONFIG_SYS_NUM_FM1_DTSEC; i++)
+               fm_info_set_mdio(i, dev);
+
+       /* XFI on lane A, MAC 9 */
+       dev = miiphy_get_dev_by_name(DEFAULT_FM_TGEC_MDIO_NAME);
+       fm_info_set_mdio(FM1_10GEC1, dev);
+
+       cpu_eth_init(bis);
+#endif
+
+       return pci_eth_init(bis);
+}
diff --git a/board/freescale/ls1046ardb/ls1046ardb.c b/board/freescale/ls1046ardb/ls1046ardb.c
new file mode 100644 (file)
index 0000000..585c807
--- /dev/null
@@ -0,0 +1,136 @@
+/*
+ * Copyright 2016 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <common.h>
+#include <i2c.h>
+#include <fdt_support.h>
+#include <asm/io.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/fsl_serdes.h>
+#include <asm/arch/ppa.h>
+#include <asm/arch/soc.h>
+#include <hwconfig.h>
+#include <ahci.h>
+#include <mmc.h>
+#include <scsi.h>
+#include <fm_eth.h>
+#include <fsl_csu.h>
+#include <fsl_esdhc.h>
+#include "cpld.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+int checkboard(void)
+{
+       static const char *freq[2] = {"100.00MHZ", "156.25MHZ"};
+       u8 cfg_rcw_src1, cfg_rcw_src2;
+       u16 cfg_rcw_src;
+       u8 sd1refclk_sel;
+
+       puts("Board: LS1046ARDB, boot from ");
+
+       cfg_rcw_src1 = CPLD_READ(cfg_rcw_src1);
+       cfg_rcw_src2 = CPLD_READ(cfg_rcw_src2);
+       cpld_rev_bit(&cfg_rcw_src1);
+       cfg_rcw_src = cfg_rcw_src1;
+       cfg_rcw_src = (cfg_rcw_src << 1) | cfg_rcw_src2;
+
+       if (cfg_rcw_src == 0x44)
+               printf("QSPI vBank %d\n", CPLD_READ(vbank));
+       else if (cfg_rcw_src == 0x40)
+               puts("SD\n");
+       else
+               puts("Invalid setting of SW5\n");
+
+       printf("CPLD:  V%x.%x\nPCBA:  V%x.0\n", CPLD_READ(cpld_ver),
+              CPLD_READ(cpld_ver_sub), CPLD_READ(pcba_ver));
+
+       puts("SERDES Reference Clocks:\n");
+       sd1refclk_sel = CPLD_READ(sd1refclk_sel);
+       printf("SD1_CLK1 = %s, SD1_CLK2 = %s\n", freq[sd1refclk_sel], freq[0]);
+
+       return 0;
+}
+
+int dram_init(void)
+{
+       gd->ram_size = initdram(0);
+
+       return 0;
+}
+
+int board_early_init_f(void)
+{
+       fsl_lsch2_early_init_f();
+
+       return 0;
+}
+
+int board_init(void)
+{
+       struct ccsr_scfg *scfg = (struct ccsr_scfg *)CONFIG_SYS_FSL_SCFG_ADDR;
+
+#ifdef CONFIG_LAYERSCAPE_NS_ACCESS
+       enable_layerscape_ns_access();
+#endif
+
+#ifdef CONFIG_FSL_LS_PPA
+       ppa_init();
+#endif
+
+       /* invert AQR105 IRQ pins polarity */
+       out_be32(&scfg->intpcr, AQR105_IRQ_MASK);
+
+       return 0;
+}
+
+void config_board_mux(void)
+{
+#ifdef CONFIG_HAS_FSL_XHCI_USB
+       struct ccsr_scfg *scfg = (struct ccsr_scfg *)CONFIG_SYS_FSL_SCFG_ADDR;
+       u32 usb_pwrfault;
+
+       /* USB3 is not used, configure mux to IIC4_SCL/IIC4_SDA */
+       out_be32(&scfg->rcwpmuxcr0, 0x3300);
+       out_be32(&scfg->usbdrvvbus_selcr, SCFG_USBDRVVBUS_SELCR_USB1);
+       usb_pwrfault = (SCFG_USBPWRFAULT_DEDICATED <<
+                       SCFG_USBPWRFAULT_USB3_SHIFT) |
+                       (SCFG_USBPWRFAULT_DEDICATED <<
+                       SCFG_USBPWRFAULT_USB2_SHIFT) |
+                       (SCFG_USBPWRFAULT_SHARED <<
+                       SCFG_USBPWRFAULT_USB1_SHIFT);
+       out_be32(&scfg->usbpwrfault_selcr, usb_pwrfault);
+#endif
+}
+
+#ifdef CONFIG_MISC_INIT_R
+int misc_init_r(void)
+{
+       config_board_mux();
+       return 0;
+}
+#endif
+
+int ft_board_setup(void *blob, bd_t *bd)
+{
+       u64 base[CONFIG_NR_DRAM_BANKS];
+       u64 size[CONFIG_NR_DRAM_BANKS];
+
+       /* fixup DT for the two 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;
+
+       fdt_fixup_memory_banks(blob, base, size, 2);
+       ft_cpu_setup(blob, bd);
+
+#ifdef CONFIG_SYS_DPAA_FMAN
+       fdt_fixup_fman_ethernet(blob);
+#endif
+
+       return 0;
+}
diff --git a/board/freescale/ls1046ardb/ls1046ardb_pbi.cfg b/board/freescale/ls1046ardb/ls1046ardb_pbi.cfg
new file mode 100644 (file)
index 0000000..5478217
--- /dev/null
@@ -0,0 +1,22 @@
+#Configure Scratch register
+09570600 00000000
+09570604 10000000
+#Disable CCI barrier tranaction
+09570178 0000e010
+09180000 00000008
+#USB PHY frequency sel
+09570418 0000009e
+0957041c 0000009e
+09570420 0000009e
+#Serdes SATA
+09eb1300 80104e20
+09eb08dc 00502880
+#PEX gen3 link
+09570158 00000300
+89400890 01048000
+89500890 01048000
+89600890 01048000
+#Alt base register
+09570158 00001000
+#flush PBI data
+096100c0 000fffff
diff --git a/board/freescale/ls1046ardb/ls1046ardb_rcw_emmc.cfg b/board/freescale/ls1046ardb/ls1046ardb_rcw_emmc.cfg
new file mode 100644 (file)
index 0000000..6a5076e
--- /dev/null
@@ -0,0 +1,7 @@
+#PBL preamble and RCW header
+aa55aa55 01ee0100
+# RCW
+0c150010 0e000000 00000000 00000000
+11335559 40000012 60040000 c1000000
+00000000 00000000 00000000 00238800
+20124000 00003000 00000096 00000001
diff --git a/board/freescale/ls1046ardb/ls1046ardb_rcw_sd.cfg b/board/freescale/ls1046ardb/ls1046ardb_rcw_sd.cfg
new file mode 100644 (file)
index 0000000..d5265b8
--- /dev/null
@@ -0,0 +1,7 @@
+#PBL preamble and RCW header
+aa55aa55 01ee0100
+# RCW
+0c150010 0e000000 00000000 00000000
+11335559 40005012 60040000 c1000000
+00000000 00000000 00000000 00238800
+20124000 00003101 00000096 00000001
index 00337d7091ccea032b16abad48f2ff34673d3685..d0a88d4ef9d1dbd41bd5943443767e78e03d288e 100644 (file)
@@ -12,7 +12,6 @@
 #include <asm/io.h>
 #include <fdt_support.h>
 #include <libfdt.h>
-#include <fsl_debug_server.h>
 #include <fsl-mc/fsl_mc.h>
 #include <environment.h>
 #include <asm/arch/soc.h>
@@ -60,10 +59,6 @@ int dram_init(void)
 #if defined(CONFIG_ARCH_MISC_INIT)
 int arch_misc_init(void)
 {
-#ifdef CONFIG_FSL_DEBUG_SERVER
-       debug_server_init();
-#endif
-
        return 0;
 }
 #endif
index 7d95debcaafd4ca13bdfe357ff1728a3acd5c4c9..ca4a2e5cb7e3cc46727eee32af4bea666b56409c 100644 (file)
@@ -12,7 +12,6 @@
 #include <asm/io.h>
 #include <fdt_support.h>
 #include <libfdt.h>
-#include <fsl_debug_server.h>
 #include <fsl-mc/fsl_mc.h>
 #include <environment.h>
 #include <i2c.h>
@@ -265,9 +264,6 @@ int dram_init(void)
 #if defined(CONFIG_ARCH_MISC_INIT)
 int arch_misc_init(void)
 {
-#ifdef CONFIG_FSL_DEBUG_SERVER
-       debug_server_init();
-#endif
 #ifdef CONFIG_FSL_CAAM
        sec_init();
 #endif
index a65cd4ab8053d9ac2f5ff35be6516015ca772f8c..7d8a7115dce29f85e455f5606d85b8cd451a3e21 100644 (file)
@@ -13,7 +13,6 @@
 #include <hwconfig.h>
 #include <fdt_support.h>
 #include <libfdt.h>
-#include <fsl_debug_server.h>
 #include <fsl-mc/fsl_mc.h>
 #include <environment.h>
 #include <i2c.h>
@@ -229,9 +228,6 @@ int dram_init(void)
 #if defined(CONFIG_ARCH_MISC_INIT)
 int arch_misc_init(void)
 {
-#ifdef CONFIG_FSL_DEBUG_SERVER
-       debug_server_init();
-#endif
 #ifdef CONFIG_FSL_CAAM
        sec_init();
 #endif
diff --git a/configs/ls1046aqds_defconfig b/configs/ls1046aqds_defconfig
new file mode 100644 (file)
index 0000000..71c3b95
--- /dev/null
@@ -0,0 +1,28 @@
+CONFIG_ARM=y
+CONFIG_TARGET_LS1046AQDS=y
+CONFIG_DM_SPI=y
+CONFIG_DEFAULT_DEVICE_TREE="fsl-ls1046a-qds-duart"
+CONFIG_FIT=y
+CONFIG_FIT_VERBOSE=y
+CONFIG_OF_BOARD_SETUP=y
+CONFIG_SYS_EXTRA_OPTIONS="SYS_FSL_DDR4"
+CONFIG_BOOTDELAY=10
+CONFIG_HUSH_PARSER=y
+CONFIG_CMD_BOOTZ=y
+CONFIG_CMD_GREPENV=y
+CONFIG_CMD_MEMTEST=y
+CONFIG_CMD_MEMINFO=y
+CONFIG_CMD_MMC=y
+CONFIG_CMD_SF=y
+CONFIG_CMD_I2C=y
+CONFIG_CMD_DHCP=y
+CONFIG_CMD_MII=y
+CONFIG_CMD_PING=y
+CONFIG_CMD_CACHE=y
+CONFIG_CMD_EXT2=y
+CONFIG_CMD_FAT=y
+CONFIG_OF_CONTROL=y
+CONFIG_DM=y
+CONFIG_SPI_FLASH=y
+CONFIG_SYS_NS16550=y
+CONFIG_FSL_DSPI=y
diff --git a/configs/ls1046aqds_nand_defconfig b/configs/ls1046aqds_nand_defconfig
new file mode 100644 (file)
index 0000000..b29796d
--- /dev/null
@@ -0,0 +1,30 @@
+CONFIG_ARM=y
+CONFIG_TARGET_LS1046AQDS=y
+CONFIG_DM_SPI=y
+CONFIG_DEFAULT_DEVICE_TREE="fsl-ls1046a-qds-duart"
+CONFIG_SPL=y
+CONFIG_FIT=y
+CONFIG_FIT_VERBOSE=y
+CONFIG_OF_BOARD_SETUP=y
+CONFIG_SYS_EXTRA_OPTIONS="SYS_FSL_DDR4,RAMBOOT_PBL,SPL_FSL_PBL"
+CONFIG_NAND_BOOT=y
+CONFIG_BOOTDELAY=10
+CONFIG_HUSH_PARSER=y
+CONFIG_CMD_BOOTZ=y
+CONFIG_CMD_GREPENV=y
+CONFIG_CMD_MEMTEST=y
+CONFIG_CMD_MEMINFO=y
+CONFIG_CMD_MMC=y
+CONFIG_CMD_SF=y
+CONFIG_CMD_I2C=y
+CONFIG_CMD_DHCP=y
+CONFIG_CMD_MII=y
+CONFIG_CMD_PING=y
+CONFIG_CMD_CACHE=y
+CONFIG_CMD_EXT2=y
+CONFIG_CMD_FAT=y
+CONFIG_OF_CONTROL=y
+CONFIG_DM=y
+CONFIG_SPI_FLASH=y
+CONFIG_SYS_NS16550=y
+CONFIG_FSL_DSPI=y
diff --git a/configs/ls1046aqds_qspi_defconfig b/configs/ls1046aqds_qspi_defconfig
new file mode 100644 (file)
index 0000000..bdcb2d1
--- /dev/null
@@ -0,0 +1,31 @@
+CONFIG_ARM=y
+CONFIG_TARGET_LS1046AQDS=y
+CONFIG_DM_SPI=y
+CONFIG_DEFAULT_DEVICE_TREE="fsl-ls1046a-qds-duart"
+CONFIG_FIT=y
+CONFIG_FIT_VERBOSE=y
+CONFIG_OF_BOARD_SETUP=y
+CONFIG_SYS_EXTRA_OPTIONS="SYS_FSL_DDR4"
+CONFIG_QSPI_BOOT=y
+CONFIG_BOOTDELAY=10
+CONFIG_HUSH_PARSER=y
+CONFIG_CMD_BOOTZ=y
+# CONFIG_CMD_IMLS is not set
+CONFIG_CMD_GREPENV=y
+CONFIG_CMD_MEMTEST=y
+CONFIG_CMD_MEMINFO=y
+CONFIG_CMD_MMC=y
+CONFIG_CMD_SF=y
+CONFIG_CMD_I2C=y
+CONFIG_CMD_DHCP=y
+CONFIG_CMD_MII=y
+CONFIG_CMD_PING=y
+CONFIG_CMD_CACHE=y
+CONFIG_CMD_EXT2=y
+CONFIG_CMD_FAT=y
+CONFIG_OF_CONTROL=y
+CONFIG_DM=y
+CONFIG_SPI_FLASH=y
+CONFIG_SYS_NS16550=y
+CONFIG_FSL_DSPI=y
+CONFIG_FSL_QSPI=y
diff --git a/configs/ls1046aqds_sdcard_ifc_defconfig b/configs/ls1046aqds_sdcard_ifc_defconfig
new file mode 100644 (file)
index 0000000..044bd6e
--- /dev/null
@@ -0,0 +1,30 @@
+CONFIG_ARM=y
+CONFIG_TARGET_LS1046AQDS=y
+CONFIG_DM_SPI=y
+CONFIG_DEFAULT_DEVICE_TREE="fsl-ls1046a-qds-duart"
+CONFIG_SPL=y
+CONFIG_FIT=y
+CONFIG_FIT_VERBOSE=y
+CONFIG_OF_BOARD_SETUP=y
+CONFIG_SYS_EXTRA_OPTIONS="SYS_FSL_DDR4,RAMBOOT_PBL,SPL_FSL_PBL"
+CONFIG_SD_BOOT=y
+CONFIG_BOOTDELAY=10
+CONFIG_HUSH_PARSER=y
+CONFIG_CMD_BOOTZ=y
+CONFIG_CMD_GREPENV=y
+CONFIG_CMD_MEMTEST=y
+CONFIG_CMD_MEMINFO=y
+CONFIG_CMD_MMC=y
+CONFIG_CMD_SF=y
+CONFIG_CMD_I2C=y
+CONFIG_CMD_DHCP=y
+CONFIG_CMD_MII=y
+CONFIG_CMD_PING=y
+CONFIG_CMD_CACHE=y
+CONFIG_CMD_EXT2=y
+CONFIG_CMD_FAT=y
+CONFIG_OF_CONTROL=y
+CONFIG_DM=y
+CONFIG_SPI_FLASH=y
+CONFIG_SYS_NS16550=y
+CONFIG_FSL_DSPI=y
diff --git a/configs/ls1046aqds_sdcard_qspi_defconfig b/configs/ls1046aqds_sdcard_qspi_defconfig
new file mode 100644 (file)
index 0000000..cb8e635
--- /dev/null
@@ -0,0 +1,32 @@
+CONFIG_ARM=y
+CONFIG_TARGET_LS1046AQDS=y
+CONFIG_DM_SPI=y
+CONFIG_DEFAULT_DEVICE_TREE="fsl-ls1046a-qds-duart"
+CONFIG_SPL=y
+CONFIG_FIT=y
+CONFIG_FIT_VERBOSE=y
+CONFIG_OF_BOARD_SETUP=y
+CONFIG_SYS_EXTRA_OPTIONS="SYS_FSL_DDR4,RAMBOOT_PBL,SPL_FSL_PBL,SD_BOOT_QSPI"
+CONFIG_SD_BOOT=y
+CONFIG_BOOTDELAY=10
+CONFIG_HUSH_PARSER=y
+CONFIG_CMD_BOOTZ=y
+# CONFIG_CMD_IMLS is not set
+CONFIG_CMD_GREPENV=y
+CONFIG_CMD_MEMTEST=y
+CONFIG_CMD_MEMINFO=y
+CONFIG_CMD_MMC=y
+CONFIG_CMD_SF=y
+CONFIG_CMD_I2C=y
+CONFIG_CMD_DHCP=y
+CONFIG_CMD_MII=y
+CONFIG_CMD_PING=y
+CONFIG_CMD_CACHE=y
+CONFIG_CMD_EXT2=y
+CONFIG_CMD_FAT=y
+CONFIG_OF_CONTROL=y
+CONFIG_DM=y
+CONFIG_SPI_FLASH=y
+CONFIG_SYS_NS16550=y
+CONFIG_FSL_DSPI=y
+CONFIG_FSL_QSPI=y
diff --git a/configs/ls1046ardb_emmc_defconfig b/configs/ls1046ardb_emmc_defconfig
new file mode 100644 (file)
index 0000000..a1ee1ab
--- /dev/null
@@ -0,0 +1,27 @@
+CONFIG_ARM=y
+CONFIG_TARGET_LS1046ARDB=y
+CONFIG_DM_SPI=y
+CONFIG_DEFAULT_DEVICE_TREE="fsl-ls1046a-rdb"
+CONFIG_SPL=y
+CONFIG_FIT=y
+CONFIG_FIT_VERBOSE=y
+CONFIG_OF_BOARD_SETUP=y
+CONFIG_SYS_EXTRA_OPTIONS="RAMBOOT_PBL,SPL_FSL_PBL,SYS_FSL_DDR4,EMMC_BOOT"
+CONFIG_SD_BOOT=y
+CONFIG_BOOTDELAY=10
+CONFIG_HUSH_PARSER=y
+# CONFIG_CMD_IMLS is not set
+CONFIG_CMD_MMC=y
+CONFIG_CMD_SF=y
+CONFIG_CMD_I2C=y
+CONFIG_CMD_DHCP=y
+CONFIG_CMD_MII=y
+CONFIG_CMD_PING=y
+CONFIG_CMD_CACHE=y
+CONFIG_CMD_EXT2=y
+CONFIG_CMD_FAT=y
+CONFIG_OF_CONTROL=y
+CONFIG_DM=y
+CONFIG_SPI_FLASH=y
+CONFIG_SYS_NS16550=y
+CONFIG_FSL_QSPI=y
diff --git a/configs/ls1046ardb_qspi_defconfig b/configs/ls1046ardb_qspi_defconfig
new file mode 100644 (file)
index 0000000..67ef3ce
--- /dev/null
@@ -0,0 +1,26 @@
+CONFIG_ARM=y
+CONFIG_TARGET_LS1046ARDB=y
+CONFIG_DM_SPI=y
+CONFIG_DEFAULT_DEVICE_TREE="fsl-ls1046a-rdb"
+CONFIG_FIT=y
+CONFIG_FIT_VERBOSE=y
+CONFIG_OF_BOARD_SETUP=y
+CONFIG_SYS_EXTRA_OPTIONS="SYS_FSL_DDR4"
+CONFIG_QSPI_BOOT=y
+CONFIG_BOOTDELAY=10
+CONFIG_HUSH_PARSER=y
+# CONFIG_CMD_IMLS is not set
+CONFIG_CMD_MMC=y
+CONFIG_CMD_SF=y
+CONFIG_CMD_I2C=y
+CONFIG_CMD_DHCP=y
+CONFIG_CMD_MII=y
+CONFIG_CMD_PING=y
+CONFIG_CMD_CACHE=y
+CONFIG_CMD_EXT2=y
+CONFIG_CMD_FAT=y
+CONFIG_OF_CONTROL=y
+CONFIG_DM=y
+CONFIG_SPI_FLASH=y
+CONFIG_SYS_NS16550=y
+CONFIG_FSL_QSPI=y
diff --git a/configs/ls1046ardb_sdcard_defconfig b/configs/ls1046ardb_sdcard_defconfig
new file mode 100644 (file)
index 0000000..6272d75
--- /dev/null
@@ -0,0 +1,27 @@
+CONFIG_ARM=y
+CONFIG_TARGET_LS1046ARDB=y
+CONFIG_DM_SPI=y
+CONFIG_DEFAULT_DEVICE_TREE="fsl-ls1046a-rdb"
+CONFIG_SPL=y
+CONFIG_FIT=y
+CONFIG_FIT_VERBOSE=y
+CONFIG_OF_BOARD_SETUP=y
+CONFIG_SYS_EXTRA_OPTIONS="RAMBOOT_PBL,SPL_FSL_PBL,SYS_FSL_DDR4"
+CONFIG_SD_BOOT=y
+CONFIG_BOOTDELAY=10
+CONFIG_HUSH_PARSER=y
+# CONFIG_CMD_IMLS is not set
+CONFIG_CMD_MMC=y
+CONFIG_CMD_SF=y
+CONFIG_CMD_I2C=y
+CONFIG_CMD_DHCP=y
+CONFIG_CMD_MII=y
+CONFIG_CMD_PING=y
+CONFIG_CMD_CACHE=y
+CONFIG_CMD_EXT2=y
+CONFIG_CMD_FAT=y
+CONFIG_OF_CONTROL=y
+CONFIG_DM=y
+CONFIG_SPI_FLASH=y
+CONFIG_SYS_NS16550=y
+CONFIG_FSL_QSPI=y
index 01ea86217c0ecfcee9b9c597ad1a79c411147a2c..00dea428e3a9fd15495cf6589a2c8425f7823b67 100644 (file)
@@ -33,3 +33,4 @@ obj-$(CONFIG_SYS_FSL_DDRC_GEN3)       += mpc85xx_ddr_gen3.o
 obj-$(CONFIG_SYS_FSL_DDR_86XX)         += mpc86xx_ddr.o
 obj-$(CONFIG_SYS_FSL_DDRC_ARM_GEN3)    += arm_ddr_gen3.o
 obj-$(CONFIG_SYS_FSL_DDRC_GEN4) += fsl_ddr_gen4.o
+obj-$(CONFIG_SYS_FSL_MMDC) += fsl_mmdc.o
index d37e2474c91d0b8a2a02fb041865f5f52e14f525..042af09770f4623f0bd3abd271c9cdf3a968db94 100644 (file)
@@ -50,8 +50,13 @@ void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,
        u32 temp_sdram_cfg;
        u32 total_gb_size_per_controller;
        int timeout;
+#if defined(CONFIG_SYS_FSL_ERRATUM_A008511) || \
+       defined(CONFIG_SYS_FSL_ERRATUM_A009801)
+       u32 temp32;
+#endif
+
 #ifdef CONFIG_SYS_FSL_ERRATUM_A008511
-       u32 temp32, mr6;
+       u32 mr6;
        u32 vref_seq1[3] = {0x80, 0x96, 0x16};  /* for range 1 */
        u32 vref_seq2[3] = {0xc0, 0xf0, 0x70};  /* for range 2 */
        u32 *vref_seq = vref_seq1;
@@ -218,7 +223,7 @@ void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,
        ddr_out32(&ddr->err_disable, regs->err_disable);
 #endif
        ddr_out32(&ddr->err_int_en, regs->err_int_en);
-       for (i = 0; i < 32; i++) {
+       for (i = 0; i < 64; i++) {
                if (regs->debug[i]) {
                        debug("Write to debug_%d as %08x\n",
                              i+1, regs->debug[i]);
@@ -238,7 +243,6 @@ void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,
 
 #ifdef CONFIG_SYS_FSL_ERRATUM_A008511
        /* Part 1 of 2 */
-       /* This erraum only applies to verion 5.2.0 */
        if (fsl_ddr_get_version(ctrl_num) == 0x50200) {
                /* Disable DRAM VRef training */
                ddr_out32(&ddr->ddr_cdr2,
@@ -247,13 +251,25 @@ void fsl_ddr_set_memctl_regs(const fsl_ddr_cfg_regs_t *regs,
                temp32 = ddr_in32(&ddr->debug[28]);
                temp32 |= DDR_TX_BD_DIS;
                ddr_out32(&ddr->debug[28], temp32);
-               /* Disable D_INIT */
-               ddr_out32(&ddr->sdram_cfg_2,
-                         regs->ddr_sdram_cfg_2 & ~SDRAM_CFG2_D_INIT);
                ddr_out32(&ddr->debug[25], 0x9000);
+       } else if (fsl_ddr_get_version(ctrl_num) == 0x50201) {
+               /* Output enable forced off */
+               ddr_out32(&ddr->debug[37], 1 << 31);
+               /* Enable Vref training */
+               ddr_out32(&ddr->ddr_cdr2,
+                         regs->ddr_cdr2 | DDR_CDR2_VREF_TRAIN_EN);
+       } else {
+               debug("Erratum A008511 doesn't apply.\n");
        }
 #endif
 
+#if defined(CONFIG_SYS_FSL_ERRATUM_A009803) || \
+       defined(CONFIG_SYS_FSL_ERRATUM_A008511)
+       /* Disable D_INIT */
+       ddr_out32(&ddr->sdram_cfg_2,
+                 regs->ddr_sdram_cfg_2 & ~SDRAM_CFG2_D_INIT);
+#endif
+
 #ifdef CONFIG_SYS_FSL_ERRATUM_A009801
        temp32 = ddr_in32(&ddr->debug[25]);
        temp32 &= ~DDR_CAS_TO_PRE_SUB_MASK;
@@ -331,21 +347,21 @@ step2:
 #if defined(CONFIG_SYS_FSL_ERRATUM_A008511) || \
        defined(CONFIG_SYS_FSL_ERRATUM_A009803)
        /* Part 2 of 2 */
-       /* This erraum only applies to verion 5.2.0 */
-       if (fsl_ddr_get_version(ctrl_num) == 0x50200) {
-               /* Wait for idle */
-               timeout = 40;
-               while (!(ddr_in32(&ddr->debug[1]) & 0x2) &&
-                      (timeout > 0)) {
-                       udelay(1000);
-                       timeout--;
-               }
-               if (timeout <= 0) {
-                       printf("Controler %d timeout, debug_2 = %x\n",
-                              ctrl_num, ddr_in32(&ddr->debug[1]));
-               }
+       timeout = 40;
+       /* Wait for idle. D_INIT needs to be cleared earlier, or timeout */
+       while (!(ddr_in32(&ddr->debug[1]) & 0x2) &&
+              (timeout > 0)) {
+               udelay(1000);
+               timeout--;
+       }
+       if (timeout <= 0) {
+               printf("Controler %d timeout, debug_2 = %x\n",
+                      ctrl_num, ddr_in32(&ddr->debug[1]));
+       }
 
 #ifdef CONFIG_SYS_FSL_ERRATUM_A008511
+       /* This erraum only applies to verion 5.2.0 */
+       if (fsl_ddr_get_version(ctrl_num) == 0x50200) {
                /* The vref setting sequence is different for range 2 */
                if (regs->ddr_cdr2 & DDR_CDR2_VREF_RANGE_2)
                        vref_seq = vref_seq2;
@@ -392,32 +408,32 @@ step2:
                        printf("Controler %d timeout, debug_2 = %x\n",
                               ctrl_num, ddr_in32(&ddr->debug[1]));
                }
-               /* Restore D_INIT */
-               ddr_out32(&ddr->sdram_cfg_2, regs->ddr_sdram_cfg_2);
+       }
 #endif /* CONFIG_SYS_FSL_ERRATUM_A008511 */
 
 #ifdef CONFIG_SYS_FSL_ERRATUM_A009803
-               if (regs->ddr_sdram_cfg_2 & SDRAM_CFG2_AP_EN) {
-                       /* if it's RDIMM */
-                       if (regs->ddr_sdram_cfg & SDRAM_CFG_RD_EN) {
-                               for (i = 0; i < CONFIG_CHIP_SELECTS_PER_CTRL; i++) {
-                                       if (!(regs->cs[i].config & SDRAM_CS_CONFIG_EN))
-                                               continue;
-                                       set_wait_for_bits_clear(&ddr->sdram_md_cntl,
-                                                               MD_CNTL_MD_EN |
-                                                               MD_CNTL_CS_SEL(i) |
-                                                               0x070000ed,
-                                                               MD_CNTL_MD_EN);
-                                       udelay(1);
-                               }
+       if (regs->ddr_sdram_cfg_2 & SDRAM_CFG2_AP_EN) {
+               /* if it's RDIMM */
+               if (regs->ddr_sdram_cfg & SDRAM_CFG_RD_EN) {
+                       for (i = 0; i < CONFIG_CHIP_SELECTS_PER_CTRL; i++) {
+                               if (!(regs->cs[i].config & SDRAM_CS_CONFIG_EN))
+                                       continue;
+                               set_wait_for_bits_clear(&ddr->sdram_md_cntl,
+                                                       MD_CNTL_MD_EN |
+                                                       MD_CNTL_CS_SEL(i) |
+                                                       0x070000ed,
+                                                       MD_CNTL_MD_EN);
+                               udelay(1);
                        }
-
-                       ddr_out32(&ddr->err_disable,
-                                 regs->err_disable & ~DDR_ERR_DISABLE_APED);
                }
-#endif
+
+               ddr_out32(&ddr->err_disable,
+                         regs->err_disable & ~DDR_ERR_DISABLE_APED);
        }
 #endif
+       /* Restore D_INIT */
+       ddr_out32(&ddr->sdram_cfg_2, regs->ddr_sdram_cfg_2);
+#endif
 
        total_gb_size_per_controller = 0;
        for (i = 0; i < CONFIG_CHIP_SELECTS_PER_CTRL; i++) {
diff --git a/drivers/ddr/fsl/fsl_mmdc.c b/drivers/ddr/fsl/fsl_mmdc.c
new file mode 100644 (file)
index 0000000..52eec0f
--- /dev/null
@@ -0,0 +1,156 @@
+/*
+ * Copyright 2016 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:     GPL-2.0+
+ */
+
+/*
+ * Generic driver for Freescale MMDC(Multi Mode DDR Controller).
+ */
+
+#include <common.h>
+#include <fsl_mmdc.h>
+#include <asm/io.h>
+
+static void set_wait_for_bits_clear(void *ptr, u32 value, u32 bits)
+{
+       int timeout = 1000;
+
+       out_be32(ptr, value);
+
+       while (in_be32(ptr) & bits) {
+               udelay(100);
+               timeout--;
+       }
+       if (timeout <= 0)
+               printf("Error: %p wait for clear timeout.\n", ptr);
+}
+
+void mmdc_init(const struct fsl_mmdc_info *priv)
+{
+       struct mmdc_regs *mmdc = (struct mmdc_regs *)CONFIG_SYS_FSL_DDR_ADDR;
+       unsigned int tmp;
+
+       /* 1. set configuration request */
+       out_be32(&mmdc->mdscr, MDSCR_ENABLE_CON_REQ);
+
+       /* 2. configure the desired timing parameters */
+       out_be32(&mmdc->mdotc, priv->mdotc);
+       out_be32(&mmdc->mdcfg0, priv->mdcfg0);
+       out_be32(&mmdc->mdcfg1, priv->mdcfg1);
+       out_be32(&mmdc->mdcfg2, priv->mdcfg2);
+
+       /* 3. configure DDR type and other miscellaneous parameters */
+       out_be32(&mmdc->mdmisc, priv->mdmisc);
+       out_be32(&mmdc->mpmur0, MMDC_MPMUR0_FRC_MSR);
+       out_be32(&mmdc->mdrwd, priv->mdrwd);
+       out_be32(&mmdc->mpodtctrl, priv->mpodtctrl);
+
+       /* 4. configure the required delay while leaving reset */
+       out_be32(&mmdc->mdor, priv->mdor);
+
+       /* 5. configure DDR physical parameters */
+       /* set row/column address width, burst length, data bus width */
+       tmp = priv->mdctl & ~(MDCTL_SDE0 | MDCTL_SDE1);
+       out_be32(&mmdc->mdctl, tmp);
+       /* configure address space partition */
+       out_be32(&mmdc->mdasp, priv->mdasp);
+
+       /* 6. perform a ZQ calibration - not needed here, doing in #8b */
+
+       /* 7. enable MMDC with the desired chip select */
+#if (CONFIG_CHIP_SELECTS_PER_CTRL == 1)
+               out_be32(&mmdc->mdctl, tmp | MDCTL_SDE0);
+#elif (CONFIG_CHIP_SELECTS_PER_CTRL == 2)
+               out_be32(&mmdc->mdctl, tmp | MDCTL_SDE0 | MDCTL_SDE1);
+#endif
+
+       /* 8a. dram init sequence: update MRs for ZQ, ODT, PRE, etc */
+       out_be32(&mmdc->mdscr,  CMD_ADDR_LSB_MR_ADDR(8) | MDSCR_ENABLE_CON_REQ |
+                               CMD_LOAD_MODE_REG | CMD_BANK_ADDR_2);
+
+       out_be32(&mmdc->mdscr,  CMD_ADDR_LSB_MR_ADDR(0) | MDSCR_ENABLE_CON_REQ |
+                               CMD_LOAD_MODE_REG | CMD_BANK_ADDR_3);
+
+       out_be32(&mmdc->mdscr,  CMD_ADDR_LSB_MR_ADDR(4) | MDSCR_ENABLE_CON_REQ |
+                               CMD_LOAD_MODE_REG | CMD_BANK_ADDR_1);
+
+       out_be32(&mmdc->mdscr,  CMD_ADDR_MSB_MR_OP(0x19) |
+                               CMD_ADDR_LSB_MR_ADDR(0x30) |
+                               MDSCR_ENABLE_CON_REQ |
+                               CMD_LOAD_MODE_REG | CMD_BANK_ADDR_0);
+
+       /* 8b. ZQ calibration */
+       out_be32(&mmdc->mdscr,  CMD_ADDR_MSB_MR_OP(0x4) | MDSCR_ENABLE_CON_REQ |
+                               CMD_ZQ_CALIBRATION | CMD_BANK_ADDR_0);
+
+       set_wait_for_bits_clear(&mmdc->mpzqhwctrl, priv->mpzqhwctrl,
+                               MPZQHWCTRL_ZQ_HW_FORCE);
+
+       /* 9a. calibrations now, wr lvl */
+       out_be32(&mmdc->mdscr,  CMD_ADDR_LSB_MR_ADDR(0x84) |
+                               MDSCR_ENABLE_CON_REQ |
+                               CMD_LOAD_MODE_REG | CMD_BANK_ADDR_1);
+
+       out_be32(&mmdc->mdscr,  MDSCR_ENABLE_CON_REQ | MDSCR_WL_EN |
+                               CMD_NORMAL);
+
+       set_wait_for_bits_clear(&mmdc->mpwlgcr, MPWLGCR_HW_WL_EN,
+                               MPWLGCR_HW_WL_EN);
+
+       mdelay(1);
+
+       out_be32(&mmdc->mdscr,  CMD_ADDR_LSB_MR_ADDR(4) | MDSCR_ENABLE_CON_REQ |
+                               CMD_LOAD_MODE_REG | CMD_BANK_ADDR_1);
+       out_be32(&mmdc->mdscr, MDSCR_ENABLE_CON_REQ);
+
+       mdelay(1);
+
+       /* 9b. read DQS gating calibration */
+       out_be32(&mmdc->mdscr,  CMD_ADDR_MSB_MR_OP(4) | MDSCR_ENABLE_CON_REQ |
+                               CMD_PRECHARGE_BANK_OPEN | CMD_BANK_ADDR_0);
+
+       out_be32(&mmdc->mdscr,  CMD_ADDR_LSB_MR_ADDR(4) | MDSCR_ENABLE_CON_REQ |
+                               CMD_LOAD_MODE_REG | CMD_BANK_ADDR_3);
+
+       out_be32(&mmdc->mppdcmpr2, MPPDCMPR2_MPR_COMPARE_EN);
+
+       /* set absolute read delay offset */
+       if (priv->mprddlctl)
+               out_be32(&mmdc->mprddlctl, priv->mprddlctl);
+       else
+               out_be32(&mmdc->mprddlctl, MMDC_MPRDDLCTL_DEFAULT_DELAY);
+
+       set_wait_for_bits_clear(&mmdc->mpdgctrl0,
+                               AUTO_RD_DQS_GATING_CALIBRATION_EN,
+                               AUTO_RD_DQS_GATING_CALIBRATION_EN);
+
+       out_be32(&mmdc->mdscr,  MDSCR_ENABLE_CON_REQ | CMD_LOAD_MODE_REG |
+                               CMD_BANK_ADDR_3);
+
+       /* 9c. read calibration */
+       out_be32(&mmdc->mdscr,  CMD_ADDR_MSB_MR_OP(4) | MDSCR_ENABLE_CON_REQ |
+                               CMD_PRECHARGE_BANK_OPEN | CMD_BANK_ADDR_0);
+       out_be32(&mmdc->mdscr,  CMD_ADDR_LSB_MR_ADDR(4) | MDSCR_ENABLE_CON_REQ |
+                               CMD_LOAD_MODE_REG | CMD_BANK_ADDR_3);
+       out_be32(&mmdc->mppdcmpr2,  MPPDCMPR2_MPR_COMPARE_EN);
+       set_wait_for_bits_clear(&mmdc->mprddlhwctl,
+                               MPRDDLHWCTL_AUTO_RD_CALIBRATION_EN,
+                               MPRDDLHWCTL_AUTO_RD_CALIBRATION_EN);
+
+       out_be32(&mmdc->mdscr,  MDSCR_ENABLE_CON_REQ | CMD_LOAD_MODE_REG |
+                               CMD_BANK_ADDR_3);
+
+       /* 10. configure power-down, self-refresh entry, exit parameters */
+       out_be32(&mmdc->mdpdc, priv->mdpdc);
+       out_be32(&mmdc->mapsr, MMDC_MAPSR_PWR_SAV_CTRL_STAT);
+
+       /* 11. ZQ config again? do nothing here */
+
+       /* 12. refresh scheme */
+       set_wait_for_bits_clear(&mmdc->mdref, priv->mdref,
+                               MDREF_START_REFRESH);
+
+       /* 13. disable CON_REQ */
+       out_be32(&mmdc->mdscr, MDSCR_DISABLE_CFG_REQ);
+}
index d23e6e5b977e9cc25d74203f5b9fe91a02a2000a..49352b30fb72070c1b15713a05b6f2cec0d37424 100644 (file)
@@ -670,7 +670,7 @@ static void print_fsl_memctl_config_regs(const fsl_ddr_cfg_regs_t *ddr)
 
        print_option_table(options, n_opts, ddr);
 
-       for (i = 0; i < 32; i++)
+       for (i = 0; i < 64; i++)
                printf("debug_%02d = 0x%08X\n", i+1, ddr->debug[i]);
 }
 
@@ -771,7 +771,7 @@ static void fsl_ddr_regs_edit(fsl_ddr_info_t *pinfo,
        if (handle_option_table(options, n_opts, ddr, regname, value_str))
                return;
 
-       for (i = 0; i < 32; i++) {
+       for (i = 0; i < 64; i++) {
                unsigned int value = simple_strtoul(value_str, NULL, 0);
                sprintf(buf, "debug_%u", i + 1);
                if (strcmp(buf, regname) == 0) {
index c0e5f03f8cbdca2405aba326a0f5458e05e5ae83..e4f246465a39fdcd0240eb0b432d639235170a03 100644 (file)
@@ -16,7 +16,6 @@ obj-$(CONFIG_CROS_EC_LPC) += cros_ec_lpc.o
 obj-$(CONFIG_CROS_EC_I2C) += cros_ec_i2c.o
 obj-$(CONFIG_CROS_EC_SANDBOX) += cros_ec_sandbox.o
 obj-$(CONFIG_CROS_EC_SPI) += cros_ec_spi.o
-obj-$(CONFIG_FSL_DEBUG_SERVER) += fsl_debug_server.o
 endif
 obj-$(CONFIG_FSL_IIM) += fsl_iim.o
 obj-$(CONFIG_GPIO_LED) += gpio_led.o
diff --git a/drivers/misc/fsl_debug_server.c b/drivers/misc/fsl_debug_server.c
deleted file mode 100644 (file)
index 98d9fbe..0000000
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- * Copyright (C) 2014 Freescale Semiconductor
- *
- * SPDX-License-Identifier:    GPL-2.0+
- */
-
-#include <common.h>
-#include <errno.h>
-#include <asm/io.h>
-#include <asm/system.h>
-
-#include <fsl-mc/fsl_mc.h>
-#include <fsl_debug_server.h>
-
-DECLARE_GLOBAL_DATA_PTR;
-static int debug_server_ver_info_maj, debug_server_ver_info_min;
-
-/**
- * Copying Debug Server firmware to DDR
- */
-static int debug_server_copy_image(const char *title, u64 image_addr,
-                                  u32 image_size, u64 debug_server_ram_addr)
-{
-       debug("%s copied to address %p\n", title,
-             (void *)debug_server_ram_addr);
-       memcpy((void *)debug_server_ram_addr, (void *)image_addr, image_size);
-
-       return 0;
-}
-
-/**
- * Debug Server FIT image parser checks if the image is in FIT
- * format, verifies integrity of the image and calculates
- * raw image address and size values.
- *
- * Returns 0 if success and -1 if any of the above mentioned
- * task fail.
- **/
-int debug_server_parse_firmware_fit_image(const void **raw_image_addr,
-                                         size_t *raw_image_size)
-{
-       int format;
-       void *fit_hdr;
-       int node_offset;
-       const void *data;
-       size_t size;
-       const char *uname = "firmware";
-       char *desc;
-       char *debug_server_ver_info;
-       char *debug_server_ver_info_major, *debug_server_ver_info_minor;
-
-       /* Check if the image is in NOR flash */
-#ifdef CONFIG_SYS_DEBUG_SERVER_FW_IN_NOR
-       fit_hdr = (void *)CONFIG_SYS_DEBUG_SERVER_FW_ADDR;
-#else
-#error "CONFIG_SYS_DEBUG_SERVER_FW_IN_NOR not defined"
-#endif
-
-       /* Check if Image is in FIT format */
-       format = genimg_get_format(fit_hdr);
-       if (format != IMAGE_FORMAT_FIT) {
-               printf("Debug Server FW: Not a FIT image\n");
-               goto out_error;
-       }
-
-       if (!fit_check_format(fit_hdr)) {
-               printf("Debug Server FW: Bad FIT image format\n");
-               goto out_error;
-       }
-
-       node_offset = fit_image_get_node(fit_hdr, uname);
-       if (node_offset < 0) {
-               printf("Debug Server FW:Can not find %s subimage\n", uname);
-               goto out_error;
-       }
-
-       /* Verify Debug Server firmware image */
-       if (!fit_image_verify(fit_hdr, node_offset)) {
-               printf("Debug Server FW: Bad Debug Server firmware hash");
-               goto out_error;
-       }
-
-       if (fit_get_desc(fit_hdr, node_offset, &desc) < 0) {
-               printf("Debug Server FW: Failed to get FW description");
-               goto out_error;
-       }
-
-       debug_server_ver_info = strstr(desc, "Version");
-       debug_server_ver_info_major = strtok(debug_server_ver_info, ".");
-       debug_server_ver_info_minor = strtok(NULL, ".");
-
-       debug_server_ver_info_maj =
-                       simple_strtoul(debug_server_ver_info_major, NULL, 10);
-       debug_server_ver_info_min =
-                       simple_strtoul(debug_server_ver_info_minor, NULL, 10);
-
-       /* Debug server version checking */
-       if ((debug_server_ver_info_maj < DEBUG_SERVER_VER_MAJOR) ||
-           (debug_server_ver_info_min < DEBUG_SERVER_VER_MINOR)) {
-               printf("Debug server FW mismatches the min version required\n");
-               printf("Expected:%d.%d, Got %d.%d\n",
-                      DEBUG_SERVER_VER_MAJOR, DEBUG_SERVER_VER_MINOR,
-                      debug_server_ver_info_maj,
-                      debug_server_ver_info_min);
-               goto out_error;
-       }
-
-       /* Get address and size of raw image */
-       fit_image_get_data(fit_hdr, node_offset, &data, &size);
-
-       *raw_image_addr = data;
-       *raw_image_size = size;
-
-       return 0;
-
-out_error:
-       return -1;
-}
-
-/**
- * Return the actual size of the Debug Server private DRAM block.
- *
- * NOTE: For now this function always returns the minimum required size,
- * However, in the future, the actual size may be obtained from an environment
- * variable.
- */
-unsigned long debug_server_get_dram_block_size(void)
-{
-       return CONFIG_SYS_DEBUG_SERVER_DRAM_BLOCK_MIN_SIZE;
-}
-
-int debug_server_init(void)
-{
-       struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR);
-       int error, timeout = CONFIG_SYS_DEBUG_SERVER_TIMEOUT;
-       int debug_server_boot_status;
-       u64 debug_server_ram_addr, debug_server_ram_size;
-       const void *raw_image_addr;
-       size_t raw_image_size = 0;
-
-       debug("debug_server_init called\n");
-       /*
-        * The Debug Server private DRAM block was already carved at the end of
-        * DRAM by board_init_f() using CONFIG_SYS_MEM_TOP_HIDE:
-        */
-       debug_server_ram_size = debug_server_get_dram_block_size();
-       if (gd->bd->bi_dram[1].start)
-               debug_server_ram_addr =
-                       gd->bd->bi_dram[1].start + gd->bd->bi_dram[1].size;
-       else
-               debug_server_ram_addr =
-                       gd->bd->bi_dram[0].start + gd->bd->bi_dram[0].size;
-
-#ifdef CONFIG_FSL_MC_ENET
-       debug_server_ram_addr += mc_get_dram_block_size();
-#endif
-
-       error = debug_server_parse_firmware_fit_image(&raw_image_addr,
-                                                       &raw_image_size);
-       if (error != 0)
-               goto out;
-
-       debug("debug server (ram addr = 0x%llx, ram size = 0x%llx)\n",
-             debug_server_ram_addr, debug_server_ram_size);
-       /*
-        * Load the Debug Server FW at the beginning of the Debug Server
-        * private DRAM block:
-        */
-       debug_server_copy_image("Debug Server Firmware",
-                               (u64)raw_image_addr, raw_image_size,
-                               debug_server_ram_addr);
-
-       /* flush dcache */
-       flush_dcache_range((unsigned long)debug_server_ram_addr,
-                          (unsigned long)debug_server_ram_addr +
-                          (unsigned long)debug_server_ram_size);
-
-       /*
-        * Tell SP that the Debug Server FW is about to be launched. Before that
-        * populate the following:
-        * 1. Write the size allocated to SP Memory region into Bits {31:16} of
-        *    SCRATCHRW5.
-        * 2. Write the start address of the SP memory regions into
-        *    SCRATCHRW5 (Bits {15:0}, contain most significant bits, Bits
-        *    {47:32} of the SP Memory Region physical start address
-        *    (SoC address)) and SCRATCHRW6 (Bits {31:0}).
-        * 3. To know the Debug Server FW boot status, set bit 0 of SCRATCHRW11
-        *    to 1. The Debug Server sets this to 0 to indicate a
-        *    successul boot.
-        * 4. Wakeup SP by writing 0x1F to VSG GIC reg VIGR2.
-        */
-
-       /* 512 MB */
-       out_le32(&gur->scratchrw[5 - 1],
-                (u32)((u64)debug_server_ram_addr >> 32) | (0x000D << 16));
-       out_le32(&gur->scratchrw[6 - 1],
-                ((u32)debug_server_ram_addr) & 0xFFFFFFFF);
-
-       out_le32(&gur->scratchrw[11 - 1], DEBUG_SERVER_INIT_STATUS);
-       /* Allow the changes to reflect in GUR block */
-       mb();
-
-       /*
-        * Program VGIC to raise an interrupt to SP
-        */
-       out_le32(CONFIG_SYS_FSL_SP_VSG_GIC_VIGR2, 0x1F);
-       /* Allow the changes to reflect in VIGR2 */
-       mb();
-
-       dmb();
-       debug("Polling for Debug server to launch ...\n");
-
-       while (1) {
-               debug_server_boot_status = in_le32(&gur->scratchrw[11 - 1]);
-               if (!(debug_server_boot_status & DEBUG_SERVER_INIT_STATUS_MASK))
-                       break;
-
-               udelay(1);      /* throttle polling */
-               if (timeout-- <= 0)
-                       break;
-       }
-
-       if (timeout <= 0) {
-               printf("Debug Server FW timed out (boot status: 0x%x)\n",
-                      debug_server_boot_status);
-               error = -ETIMEDOUT;
-               goto out;
-       }
-
-       if (debug_server_boot_status & DEBUG_SERVER_INIT_STATUS_MASK) {
-               printf("Debug server FW error'ed out (boot status: 0x%x)\n",
-                      debug_server_boot_status);
-               error = -ENODEV;
-               goto out;
-       }
-
-       printf("Debug server booted\n");
-       printf("Detected firmware %d.%d, (boot status: 0x0%x)\n",
-              debug_server_ver_info_maj, debug_server_ver_info_min,
-              debug_server_boot_status);
-
-out:
-       if (error != 0)
-               debug_server_boot_status = -error;
-       else
-               debug_server_boot_status = 0;
-
-       return debug_server_boot_status;
-}
-
index 344fbe20a566ce5c3de39c4dc3937a8750160efa..316fef485dac6e1e8ffa46ee99acdd6dda0df293 100644 (file)
@@ -39,4 +39,4 @@ obj-$(CONFIG_PPC_T4080) += t4240.o
 obj-$(CONFIG_PPC_B4420) += b4860.o
 obj-$(CONFIG_PPC_B4860) += b4860.o
 obj-$(CONFIG_LS1043A)  += ls1043.o
-obj-$(CONFIG_LS1046A)  += ls1046.o
+obj-$(CONFIG_ARCH_LS1046A)     += ls1046.o
index ce4a30731f984c0154d8573b272cd84240f694d3..89f0d6a14e3a9d7d2e0f56991b745bf04902713d 100644 (file)
@@ -368,8 +368,18 @@ int fm_init_common(int index, struct ccsr_fman *reg)
        void *addr = malloc(CONFIG_SYS_QE_FMAN_FW_LENGTH);
        int ret = 0;
 
+#ifdef CONFIG_DM_SPI_FLASH
+       struct udevice *new;
+
+       /* speed and mode will be read from DT */
+       ret = spi_flash_probe_bus_cs(CONFIG_ENV_SPI_BUS, CONFIG_ENV_SPI_CS,
+                                    0, 0, &new);
+
+       ucode_flash = dev_get_uclass_priv(new);
+#else
        ucode_flash = spi_flash_probe(CONFIG_ENV_SPI_BUS, CONFIG_ENV_SPI_CS,
                        CONFIG_ENV_SPI_MAX_HZ, CONFIG_ENV_SPI_MODE);
+#endif
        if (!ucode_flash)
                printf("SF: probe for ucode failed\n");
        else {
index 17da8db9b91fd36218d708e5718a86657ffcfe90..ce6e6c4a1071aa6b68c4dee7a9b323aefb30c42b 100644 (file)
@@ -186,13 +186,6 @@ int ctrlc (void)
        }
        return 0;
 }
-void * memset(void * s,int c,size_t count)
-{
-       char *xs = (char *) s;
-       while (count--)
-               *xs++ = c;
-       return s;
-}
 int memcmp(const void * cs,const void * ct,size_t count)
 {
        const unsigned char *su1, *su2;
index 11beeb24f18327f87e5c73a30e24c4bb5c7bf1cb..158470532903cead95df93c8b26df36e3bcf8a56 100644 (file)
@@ -75,6 +75,7 @@
                    const char *, char **, unsigned int)
        EXPORT_FUNC(strcpy, char *, strcpy, char *dest, const char *src)
        EXPORT_FUNC(mdelay, void, mdelay, unsigned long msec)
+       EXPORT_FUNC(memset, void *, memset, void *, int, size_t)
 #ifdef CONFIG_PHY_AQUANTIA
        EXPORT_FUNC(mdio_get_current_dev, struct mii_dev *,
                    mdio_get_current_dev, void)
index fba2facfbde14a14b0b26fbd0b2d594ca7fdffea..5fb6c477b409f116d37fcf2e73f62fed1ba6c2dd 100644 (file)
@@ -9,7 +9,6 @@
 
 #define CONFIG_FSL_LAYERSCAPE
 #define CONFIG_FSL_LSCH2
-#define CONFIG_LS1012A
 #define CONFIG_GICV2
 
 #define        CONFIG_SYS_HAS_SERDES
index 19ad1948caacdcb2b86e917b68ecaf5e61582a4b..612f243eecacf59c8830a0f5e1bcebee67ddd066 100644 (file)
@@ -9,14 +9,12 @@
 
 #include "ls1012a_common.h"
 
+/* DDR */
 #define CONFIG_DIMM_SLOTS_PER_CTLR     1
 #define CONFIG_CHIP_SELECTS_PER_CTRL   1
 #define CONFIG_NR_DRAM_BANKS           2
 #define CONFIG_SYS_SDRAM_SIZE          0x20000000
-
-#define CONFIG_SYS_MMDC_CORE_CONTROL_1         0x04180000
-#define CONFIG_SYS_MMDC_CORE_CONTROL_2         0x84180000
-
+#define CONFIG_CHIP_SELECTS_PER_CTRL   1
 #define CONFIG_CMD_MEMINFO
 #define CONFIG_CMD_MEMTEST
 #define CONFIG_SYS_MEMTEST_START       0x80000000
index 75b60fa3a3915fb63bc6906ad13166b972873c27..54abf300e70a98bc7d277f5f828038ee9ed78a3c 100644 (file)
@@ -9,14 +9,15 @@
 
 #include "ls1012a_common.h"
 
-
+/* DDR */
 #define CONFIG_DIMM_SLOTS_PER_CTLR     1
 #define CONFIG_CHIP_SELECTS_PER_CTRL   1
 #define CONFIG_NR_DRAM_BANKS           2
 #define CONFIG_SYS_SDRAM_SIZE          0x40000000
-
-#define CONFIG_SYS_MMDC_CORE_CONTROL_1         0x05180000
-#define CONFIG_SYS_MMDC_CORE_CONTROL_2         0x85180000
+#define CONFIG_CMD_MEMINFO
+#define CONFIG_CMD_MEMTEST
+#define CONFIG_SYS_MEMTEST_START       0x80000000
+#define CONFIG_SYS_MEMTEST_END         0x9fffffff
 
 /*
  * QIXIS Definitions
index d3117e78e20a30ea8e1a9eb9ba08fc2fff652ce2..0c13ddeff597956ceeedc573a3e737717775cb83 100644 (file)
@@ -9,15 +9,11 @@
 
 #include "ls1012a_common.h"
 
-
+/* DDR */
 #define CONFIG_DIMM_SLOTS_PER_CTLR     1
 #define CONFIG_CHIP_SELECTS_PER_CTRL   1
 #define CONFIG_NR_DRAM_BANKS           2
 #define CONFIG_SYS_SDRAM_SIZE          0x40000000
-
-#define CONFIG_SYS_MMDC_CORE_CONTROL_1         0x05180000
-#define CONFIG_SYS_MMDC_CORE_CONTROL_2         0x85180000
-
 #define CONFIG_CMD_MEMINFO
 #define CONFIG_CMD_MEMTEST
 #define CONFIG_SYS_MEMTEST_START       0x80000000
index 554c13cbc41f75a2023a617d393830e5a60c6618..0d72e6993d5a189c8c5e952c7906bdf860792d83 100644 (file)
@@ -269,6 +269,13 @@ unsigned long get_board_ddr_clk(void);
 #define QIXIS_RCFG_CTL_RECONFIG_IDLE   0x20
 #define QIXIS_RCFG_CTL_RECONFIG_START  0x21
 #define QIXIS_RCFG_CTL_WATCHDOG_ENBLE  0x08
+#define QIXIS_CTL_SYS                  0x5
+#define QIXIS_CTL_SYS_EVTSW_MASK       0x0c
+#define QIXIS_CTL_SYS_EVTSW_IRQ                0x04
+#define QIXIS_RST_FORCE_3              0x45
+#define QIXIS_RST_FORCE_3_PCIESLOT1    0x80
+#define QIXIS_PWR_CTL2                 0x21
+#define QIXIS_PWR_CTL2_PCTL            0x2
 
 #define CONFIG_SYS_FPGA_CSPR_EXT       (0x0)
 #define CONFIG_SYS_FPGA_CSPR           (CSPR_PHYS_ADDR(QIXIS_BASE_PHYS) | \
diff --git a/include/configs/ls1046a_common.h b/include/configs/ls1046a_common.h
new file mode 100644 (file)
index 0000000..7c5e635
--- /dev/null
@@ -0,0 +1,210 @@
+/*
+ * Copyright 2016 Freescale Semiconductor
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#ifndef __LS1046A_COMMON_H
+#define __LS1046A_COMMON_H
+
+#define CONFIG_REMAKE_ELF
+#define CONFIG_FSL_LAYERSCAPE
+#define CONFIG_FSL_LSCH2
+#define CONFIG_MP
+#define CONFIG_SYS_FSL_CLK
+#define CONFIG_GICV2
+
+#include <asm/arch/config.h>
+#ifdef CONFIG_SYS_FSL_SRDS_1
+#define        CONFIG_SYS_HAS_SERDES
+#endif
+
+/* Link Definitions */
+#define CONFIG_SYS_INIT_SP_ADDR                (CONFIG_SYS_FSL_OCRAM_BASE + 0xfff0)
+
+#define CONFIG_SUPPORT_RAW_INITRD
+
+#define CONFIG_SKIP_LOWLEVEL_INIT
+#define CONFIG_BOARD_EARLY_INIT_F      1
+
+#define CONFIG_VERY_BIG_RAM
+#define CONFIG_SYS_DDR_SDRAM_BASE      0x80000000
+#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      0x880000000ULL
+
+#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 + 1024 * 1024)
+
+/* 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 }
+
+/* SD boot SPL */
+#ifdef CONFIG_SD_BOOT
+#define CONFIG_SPL_FRAMEWORK
+#define CONFIG_SPL_LDSCRIPT            "arch/arm/cpu/armv8/u-boot-spl.lds"
+#define CONFIG_SPL_TARGET              "u-boot-with-spl.bin"
+#define CONFIG_SPL_LIBCOMMON_SUPPORT
+#define CONFIG_SPL_LIBGENERIC_SUPPORT
+#define CONFIG_SPL_ENV_SUPPORT
+#define CONFIG_SPL_MPC8XXX_INIT_DDR_SUPPORT
+#define CONFIG_SPL_WATCHDOG_SUPPORT
+#define CONFIG_SPL_I2C_SUPPORT
+#define CONFIG_SPL_SERIAL_SUPPORT
+#define CONFIG_SPL_DRIVERS_MISC_SUPPORT
+
+#define CONFIG_SPL_MMC_SUPPORT
+#define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR                0x110
+#define CONFIG_SYS_U_BOOT_MAX_SIZE_SECTORS             0x500
+#define CONFIG_SPL_TEXT_BASE           0x10000000
+#define CONFIG_SPL_MAX_SIZE            0x1f000         /* 124 KiB */
+#define CONFIG_SPL_STACK               0x10020000
+#define CONFIG_SPL_PAD_TO              0x21000         /* 132 KiB */
+#define CONFIG_SPL_BSS_START_ADDR      0x8f000000
+#define CONFIG_SPL_BSS_MAX_SIZE                0x80000
+#define CONFIG_SYS_SPL_MALLOC_START    (CONFIG_SPL_BSS_START_ADDR + \
+                                       CONFIG_SPL_BSS_MAX_SIZE)
+#define CONFIG_SYS_SPL_MALLOC_SIZE     0x100000
+#define CONFIG_SYS_MONITOR_LEN         0xa0000
+#endif
+
+/* NAND SPL */
+#ifdef CONFIG_NAND_BOOT
+#define CONFIG_SPL_PBL_PAD
+#define CONFIG_SPL_FRAMEWORK
+#define CONFIG_SPL_LDSCRIPT            "arch/arm/cpu/armv8/u-boot-spl.lds"
+#define CONFIG_SPL_TARGET              "u-boot-with-spl.bin"
+#define CONFIG_SPL_LIBCOMMON_SUPPORT
+#define CONFIG_SPL_LIBGENERIC_SUPPORT
+#define CONFIG_SPL_ENV_SUPPORT
+#define CONFIG_SPL_WATCHDOG_SUPPORT
+#define CONFIG_SPL_I2C_SUPPORT
+#define CONFIG_SPL_SERIAL_SUPPORT
+#define CONFIG_SPL_MPC8XXX_INIT_DDR_SUPPORT
+
+#define CONFIG_SPL_NAND_SUPPORT
+#define CONFIG_SPL_DRIVERS_MISC_SUPPORT
+#define CONFIG_SPL_TEXT_BASE           0x10000000
+#define CONFIG_SPL_MAX_SIZE            0x1d000         /* 116 KiB */
+#define CONFIG_SPL_STACK               0x1001f000
+#define CONFIG_SYS_NAND_U_BOOT_DST     CONFIG_SYS_TEXT_BASE
+#define CONFIG_SYS_NAND_U_BOOT_START   CONFIG_SYS_TEXT_BASE
+
+#define CONFIG_SPL_BSS_START_ADDR      0x8f000000
+#define CONFIG_SPL_BSS_MAX_SIZE                0x80000
+#define CONFIG_SYS_SPL_MALLOC_START    (CONFIG_SPL_BSS_START_ADDR + \
+                                       CONFIG_SPL_BSS_MAX_SIZE)
+#define CONFIG_SYS_SPL_MALLOC_SIZE     0x100000
+#define CONFIG_SYS_MONITOR_LEN         0xa0000
+#endif
+
+/* I2C */
+#define CONFIG_SYS_I2C
+#define CONFIG_SYS_I2C_MXC
+#define CONFIG_SYS_I2C_MXC_I2C1
+#define CONFIG_SYS_I2C_MXC_I2C2
+#define CONFIG_SYS_I2C_MXC_I2C3
+#define CONFIG_SYS_I2C_MXC_I2C4
+
+/* Command line configuration */
+#define CONFIG_CMD_ENV
+
+/* MMC */
+#define CONFIG_MMC
+#ifdef CONFIG_MMC
+#define CONFIG_FSL_ESDHC
+#define CONFIG_SYS_FSL_MMC_HAS_CAPBLT_VS33
+#define CONFIG_GENERIC_MMC
+#define CONFIG_DOS_PARTITION
+#endif
+
+#define CONFIG_FSL_CAAM                        /* Enable SEC/CAAM */
+
+#define CONFIG_SYS_DPAA_QBMAN          /* Support Q/Bman */
+
+/* FMan ucode */
+#define CONFIG_SYS_DPAA_FMAN
+#ifdef CONFIG_SYS_DPAA_FMAN
+#define CONFIG_SYS_FM_MURAM_SIZE       0x60000
+
+#ifdef CONFIG_SD_BOOT
+/*
+ * PBL SD boot image should stored at 0x1000(8 blocks), the size of the image is
+ * about 1MB (2048 blocks), Env is stored after the image, and the env size is
+ * 0x2000 (16 blocks), 8 + 2048 + 16 = 2072, enlarge it to 2080(0x820).
+ */
+#define CONFIG_SYS_QE_FMAN_FW_IN_MMC
+#define CONFIG_SYS_FMAN_FW_ADDR                (512 * 0x820)
+#elif defined(CONFIG_QSPI_BOOT)
+#define CONFIG_SYS_QE_FW_IN_SPIFLASH
+#define CONFIG_SYS_FMAN_FW_ADDR                0x40300000
+#define CONFIG_ENV_SPI_BUS             0
+#define CONFIG_ENV_SPI_CS              0
+#define CONFIG_ENV_SPI_MAX_HZ          1000000
+#define CONFIG_ENV_SPI_MODE            0x03
+#elif defined(CONFIG_NAND_BOOT)
+#define CONFIG_SYS_QE_FMAN_FW_IN_NAND
+#define CONFIG_SYS_FMAN_FW_ADDR                (6 * CONFIG_SYS_NAND_BLOCK_SIZE)
+#else
+#define CONFIG_SYS_QE_FMAN_FW_IN_NOR
+#define CONFIG_SYS_FMAN_FW_ADDR                0x60300000
+#endif
+#define CONFIG_SYS_QE_FMAN_FW_LENGTH   0x10000
+#define CONFIG_SYS_FDT_PAD             (0x3000 + CONFIG_SYS_QE_FMAN_FW_LENGTH)
+#endif
+
+/* Miscellaneous configurable options */
+#define CONFIG_SYS_LOAD_ADDR   (CONFIG_SYS_DDR_SDRAM_BASE + 0x10000000)
+#define CONFIG_ARCH_EARLY_INIT_R
+#define CONFIG_BOARD_LATE_INIT
+
+#define CONFIG_HWCONFIG
+#define HWCONFIG_BUFFER_SIZE           128
+
+/* Initial environment variables */
+#define CONFIG_EXTRA_ENV_SETTINGS              \
+       "hwconfig=fsl_ddr:bank_intlv=auto\0"    \
+       "loadaddr=0x80100000\0"                 \
+       "ramdisk_addr=0x800000\0"               \
+       "ramdisk_size=0x2000000\0"              \
+       "fdt_high=0xffffffffffffffff\0"         \
+       "initrd_high=0xffffffffffffffff\0"      \
+       "kernel_start=0x1000000\0"              \
+       "kernel_load=0xa0000000\0"              \
+       "kernel_size=0x2800000\0"               \
+       "console=ttyS0,115200\0"                \
+               MTDPARTS_DEFAULT "\0"
+
+#define CONFIG_BOOTARGS                        "console=ttyS0,115200 root=/dev/ram0 " \
+                                       "earlycon=uart8250,mmio,0x21c0500 " \
+                                       MTDPARTS_DEFAULT
+/* 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 */
+#define CONFIG_SYS_LONGHELP
+#define CONFIG_CMDLINE_EDITING         1
+#define CONFIG_AUTO_COMPLETE
+#define CONFIG_SYS_MAXARGS             64      /* max command args */
+
+#define CONFIG_SYS_BOOTM_LEN   (64 << 20)      /* Increase max gunzip size */
+
+/* Hash command with SHA acceleration supported in hardware */
+#ifdef CONFIG_FSL_CAAM
+#define CONFIG_CMD_HASH
+#define CONFIG_SHA_HW_ACCEL
+#endif
+
+#endif /* __LS1046A_COMMON_H */
diff --git a/include/configs/ls1046aqds.h b/include/configs/ls1046aqds.h
new file mode 100644 (file)
index 0000000..2e5c2f1
--- /dev/null
@@ -0,0 +1,487 @@
+/*
+ * Copyright 2016 Freescale Semiconductor, Inc.
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#ifndef __LS1046AQDS_H__
+#define __LS1046AQDS_H__
+
+#include "ls1046a_common.h"
+
+#define CONFIG_DISPLAY_CPUINFO
+#define CONFIG_DISPLAY_BOARDINFO
+
+#if defined(CONFIG_NAND_BOOT) || defined(CONFIG_SD_BOOT)
+#define CONFIG_SYS_TEXT_BASE           0x82000000
+#elif defined(CONFIG_QSPI_BOOT)
+#define CONFIG_SYS_TEXT_BASE           0x40010000
+#else
+#define CONFIG_SYS_TEXT_BASE           0x60100000
+#endif
+
+#ifndef __ASSEMBLY__
+unsigned long get_board_sys_clk(void);
+unsigned long get_board_ddr_clk(void);
+#endif
+
+#define CONFIG_SYS_CLK_FREQ            get_board_sys_clk()
+#define CONFIG_DDR_CLK_FREQ            get_board_ddr_clk()
+
+#define CONFIG_SKIP_LOWLEVEL_INIT
+
+#define CONFIG_LAYERSCAPE_NS_ACCESS
+
+#define CONFIG_DIMM_SLOTS_PER_CTLR     1
+/* Physical Memory Map */
+#define CONFIG_CHIP_SELECTS_PER_CTRL   4
+#define CONFIG_NR_DRAM_BANKS           2
+
+#define CONFIG_DDR_SPD
+#define SPD_EEPROM_ADDRESS             0x51
+#define CONFIG_SYS_SPD_BUS_NUM         0
+
+#define CONFIG_FSL_DDR_INTERACTIVE     /* Interactive debugging */
+
+#define CONFIG_DDR_ECC
+#ifdef CONFIG_DDR_ECC
+#define CONFIG_ECC_INIT_VIA_DDRCONTROLLER
+#define CONFIG_MEM_INIT_VALUE           0xdeadbeef
+#endif
+
+#define CONFIG_SYS_HAS_SERDES
+
+/* DSPI */
+#ifdef CONFIG_FSL_DSPI
+#define CONFIG_SPI_FLASH_STMICRO       /* cs0 */
+#define CONFIG_SPI_FLASH_SST           /* cs1 */
+#define CONFIG_SPI_FLASH_EON           /* cs2 */
+#if !defined(CONFIG_QSPI_BOOT) && !defined(CONFIG_SD_BOOT_QSPI)
+#define CONFIG_SF_DEFAULT_BUS          1
+#define CONFIG_SF_DEFAULT_CS           0
+#endif
+#endif
+
+/* QSPI */
+#if defined(CONFIG_QSPI_BOOT) || defined(CONFIG_SD_BOOT_QSPI)
+#ifdef CONFIG_FSL_QSPI
+#define CONFIG_SPI_FLASH_SPANSION
+#define FSL_QSPI_FLASH_SIZE            (1 << 24)
+#define FSL_QSPI_FLASH_NUM             2
+#endif
+#endif
+
+#ifdef CONFIG_SYS_DPAA_FMAN
+#define CONFIG_FMAN_ENET
+#define CONFIG_PHYLIB
+#define CONFIG_PHY_VITESSE
+#define CONFIG_PHY_REALTEK
+#define CONFIG_PHYLIB_10G
+#define RGMII_PHY1_ADDR                0x1
+#define RGMII_PHY2_ADDR                0x2
+#define SGMII_CARD_PORT1_PHY_ADDR 0x1C
+#define SGMII_CARD_PORT2_PHY_ADDR 0x1D
+#define SGMII_CARD_PORT3_PHY_ADDR 0x1E
+#define SGMII_CARD_PORT4_PHY_ADDR 0x1F
+/* PHY address on QSGMII riser card on slot 2 */
+#define QSGMII_CARD_PORT1_PHY_ADDR_S2 0x8
+#define QSGMII_CARD_PORT2_PHY_ADDR_S2 0x9
+#define QSGMII_CARD_PORT3_PHY_ADDR_S2 0xA
+#define QSGMII_CARD_PORT4_PHY_ADDR_S2 0xB
+#endif
+
+#ifdef CONFIG_RAMBOOT_PBL
+#define CONFIG_SYS_FSL_PBL_PBI \
+       board/freescale/ls1046aqds/ls1046aqds_pbi.cfg
+#endif
+
+#ifdef CONFIG_NAND_BOOT
+#define CONFIG_SYS_FSL_PBL_RCW \
+       board/freescale/ls1046aqds/ls1046aqds_rcw_nand.cfg
+#endif
+
+#ifdef CONFIG_SD_BOOT
+#ifdef CONFIG_SD_BOOT_QSPI
+#define CONFIG_SYS_FSL_PBL_RCW \
+       board/freescale/ls1046aqds/ls1046aqds_rcw_sd_qspi.cfg
+#else
+#define CONFIG_SYS_FSL_PBL_RCW \
+       board/freescale/ls1046aqds/ls1046aqds_rcw_sd_ifc.cfg
+#endif
+#endif
+
+/* IFC */
+#if !defined(CONFIG_QSPI_BOOT) && !defined(CONFIG_SD_BOOT_QSPI)
+#define        CONFIG_FSL_IFC
+/*
+ * CONFIG_SYS_FLASH_BASE has the final address (core view)
+ * CONFIG_SYS_FLASH_BASE_PHYS has the final address (IFC view)
+ * CONFIG_SYS_FLASH_BASE_PHYS_EARLY has the temporary IFC address
+ * CONFIG_SYS_TEXT_BASE is linked to 0x60000000 for booting
+ */
+#define CONFIG_SYS_FLASH_BASE                  0x60000000
+#define CONFIG_SYS_FLASH_BASE_PHYS             CONFIG_SYS_FLASH_BASE
+#define CONFIG_SYS_FLASH_BASE_PHYS_EARLY       0x00000000
+
+#ifndef CONFIG_SYS_NO_FLASH
+#define CONFIG_FLASH_CFI_DRIVER
+#define CONFIG_SYS_FLASH_CFI
+#define CONFIG_SYS_FLASH_USE_BUFFER_WRITE
+#define CONFIG_SYS_FLASH_QUIET_TEST
+#define CONFIG_FLASH_SHOW_PROGRESS     45      /* count down from 45/5: 9..1 */
+#endif
+#endif
+
+/* SATA */
+#define CONFIG_LIBATA
+#define CONFIG_SCSI_AHCI
+#define CONFIG_SCSI_AHCI_PLAT
+#define CONFIG_SCSI
+#define CONFIG_DOS_PARTITION
+#define CONFIG_BOARD_LATE_INIT
+
+/* 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
+
+#define CONFIG_SYS_SATA                                AHCI_BASE_ADDR
+
+#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)
+
+/*
+ * IFC Definitions
+ */
+#if !defined(CONFIG_QSPI_BOOT) && !defined(CONFIG_SD_BOOT_QSPI)
+#define CONFIG_SYS_NOR0_CSPR_EXT       (0x0)
+#define CONFIG_SYS_NOR0_CSPR   (CSPR_PHYS_ADDR(CONFIG_SYS_FLASH_BASE_PHYS) | \
+                               CSPR_PORT_SIZE_16 | \
+                               CSPR_MSEL_NOR | \
+                               CSPR_V)
+#define CONFIG_SYS_NOR1_CSPR_EXT       (0x0)
+#define CONFIG_SYS_NOR1_CSPR   (CSPR_PHYS_ADDR(CONFIG_SYS_FLASH_BASE_PHYS \
+                               + 0x8000000) | \
+                               CSPR_PORT_SIZE_16 | \
+                               CSPR_MSEL_NOR | \
+                               CSPR_V)
+#define CONFIG_SYS_NOR_AMASK           IFC_AMASK(128 * 1024 * 1024)
+
+#define CONFIG_SYS_NOR_CSOR            (CSOR_NOR_ADM_SHIFT(4) | \
+                                       CSOR_NOR_TRHZ_80)
+#define CONFIG_SYS_NOR_FTIM0           (FTIM0_NOR_TACSE(0x4) | \
+                                       FTIM0_NOR_TEADC(0x5) | \
+                                       FTIM0_NOR_TEAHC(0x5))
+#define CONFIG_SYS_NOR_FTIM1           (FTIM1_NOR_TACO(0x35) | \
+                                       FTIM1_NOR_TRAD_NOR(0x1a) | \
+                                       FTIM1_NOR_TSEQRAD_NOR(0x13))
+#define CONFIG_SYS_NOR_FTIM2           (FTIM2_NOR_TCS(0x4) | \
+                                       FTIM2_NOR_TCH(0x4) | \
+                                       FTIM2_NOR_TWPH(0xe) | \
+                                       FTIM2_NOR_TWP(0x1c))
+#define CONFIG_SYS_NOR_FTIM3           0
+
+#define CONFIG_SYS_MAX_FLASH_BANKS     2       /* number of banks */
+#define CONFIG_SYS_MAX_FLASH_SECT      1024    /* sectors per device */
+#define CONFIG_SYS_FLASH_ERASE_TOUT    60000   /* Flash Erase Timeout (ms) */
+#define CONFIG_SYS_FLASH_WRITE_TOUT    500     /* Flash Write Timeout (ms) */
+
+#define CONFIG_SYS_FLASH_EMPTY_INFO
+#define CONFIG_SYS_FLASH_BANKS_LIST    {CONFIG_SYS_FLASH_BASE_PHYS, \
+                                       CONFIG_SYS_FLASH_BASE_PHYS + 0x8000000}
+
+#define CONFIG_CFI_FLASH_USE_WEAK_ACCESSORS
+#define CONFIG_SYS_WRITE_SWAPPED_DATA
+
+/*
+ * NAND Flash Definitions
+ */
+#define CONFIG_NAND_FSL_IFC
+
+#define CONFIG_SYS_NAND_BASE           0x7e800000
+#define CONFIG_SYS_NAND_BASE_PHYS      CONFIG_SYS_NAND_BASE
+
+#define CONFIG_SYS_NAND_CSPR_EXT       (0x0)
+
+#define CONFIG_SYS_NAND_CSPR   (CSPR_PHYS_ADDR(CONFIG_SYS_NAND_BASE_PHYS) \
+                               | CSPR_PORT_SIZE_8      \
+                               | CSPR_MSEL_NAND        \
+                               | CSPR_V)
+#define CONFIG_SYS_NAND_AMASK  IFC_AMASK(64*1024)
+#define CONFIG_SYS_NAND_CSOR   (CSOR_NAND_ECC_ENC_EN   /* ECC on encode */ \
+                               | CSOR_NAND_ECC_DEC_EN  /* ECC on decode */ \
+                               | CSOR_NAND_ECC_MODE_8  /* 8-bit ECC */ \
+                               | CSOR_NAND_RAL_3       /* RAL = 3 Bytes */ \
+                               | CSOR_NAND_PGS_4K      /* Page Size = 4K */ \
+                               | CSOR_NAND_SPRZ_224    /* Spare size = 224 */ \
+                               | CSOR_NAND_PB(64))     /* 64 Pages Per Block */
+
+#define CONFIG_SYS_NAND_ONFI_DETECTION
+
+#define CONFIG_SYS_NAND_FTIM0          (FTIM0_NAND_TCCST(0x7) | \
+                                       FTIM0_NAND_TWP(0x18)   | \
+                                       FTIM0_NAND_TWCHT(0x7) | \
+                                       FTIM0_NAND_TWH(0xa))
+#define CONFIG_SYS_NAND_FTIM1          (FTIM1_NAND_TADLE(0x32) | \
+                                       FTIM1_NAND_TWBE(0x39)  | \
+                                       FTIM1_NAND_TRR(0xe)   | \
+                                       FTIM1_NAND_TRP(0x18))
+#define CONFIG_SYS_NAND_FTIM2          (FTIM2_NAND_TRAD(0xf) | \
+                                       FTIM2_NAND_TREH(0xa) | \
+                                       FTIM2_NAND_TWHRE(0x1e))
+#define CONFIG_SYS_NAND_FTIM3           0x0
+
+#define CONFIG_SYS_NAND_BASE_LIST      { CONFIG_SYS_NAND_BASE }
+#define CONFIG_SYS_MAX_NAND_DEVICE     1
+#define CONFIG_MTD_NAND_VERIFY_WRITE
+#define CONFIG_CMD_NAND
+
+#define CONFIG_SYS_NAND_BLOCK_SIZE     (256 * 1024)
+#endif
+
+#ifdef CONFIG_NAND_BOOT
+#define CONFIG_SPL_PAD_TO              0x40000         /* block aligned */
+#define CONFIG_SYS_NAND_U_BOOT_OFFS    CONFIG_SPL_PAD_TO
+#define CONFIG_SYS_NAND_U_BOOT_SIZE    (768 << 10)
+#endif
+
+#if defined(CONFIG_QSPI_BOOT) || defined(CONFIG_SD_BOOT_QSPI)
+#define CONFIG_QIXIS_I2C_ACCESS
+#define CONFIG_SYS_I2C_EARLY_INIT
+#define CONFIG_SYS_NO_FLASH
+#endif
+
+/*
+ * 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             6
+#define QIXIS_LBMAP_MASK               0x0f
+#define QIXIS_LBMAP_SHIFT              0
+#define QIXIS_LBMAP_DFLTBANK           0x00
+#define QIXIS_LBMAP_ALTBANK            0x04
+#define QIXIS_LBMAP_NAND               0x09
+#define QIXIS_LBMAP_SD                 0x00
+#define QIXIS_LBMAP_SD_QSPI            0xff
+#define QIXIS_LBMAP_QSPI               0xff
+#define QIXIS_RCW_SRC_NAND             0x110
+#define QIXIS_RCW_SRC_SD               0x040
+#define QIXIS_RCW_SRC_QSPI             0x045
+#define QIXIS_RST_CTL_RESET            0x41
+#define QIXIS_RCFG_CTL_RECONFIG_IDLE   0x20
+#define QIXIS_RCFG_CTL_RECONFIG_START  0x21
+#define QIXIS_RCFG_CTL_WATCHDOG_ENBLE  0x08
+
+#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
+
+#ifdef CONFIG_NAND_BOOT
+#define CONFIG_SYS_CSPR0_EXT           CONFIG_SYS_NAND_CSPR_EXT
+#define CONFIG_SYS_CSPR0               CONFIG_SYS_NAND_CSPR
+#define CONFIG_SYS_AMASK0              CONFIG_SYS_NAND_AMASK
+#define CONFIG_SYS_CSOR0               CONFIG_SYS_NAND_CSOR
+#define CONFIG_SYS_CS0_FTIM0           CONFIG_SYS_NAND_FTIM0
+#define CONFIG_SYS_CS0_FTIM1           CONFIG_SYS_NAND_FTIM1
+#define CONFIG_SYS_CS0_FTIM2           CONFIG_SYS_NAND_FTIM2
+#define CONFIG_SYS_CS0_FTIM3           CONFIG_SYS_NAND_FTIM3
+#define CONFIG_SYS_CSPR1_EXT           CONFIG_SYS_NOR0_CSPR_EXT
+#define CONFIG_SYS_CSPR1               CONFIG_SYS_NOR0_CSPR
+#define CONFIG_SYS_AMASK1              CONFIG_SYS_NOR_AMASK
+#define CONFIG_SYS_CSOR1               CONFIG_SYS_NOR_CSOR
+#define CONFIG_SYS_CS1_FTIM0           CONFIG_SYS_NOR_FTIM0
+#define CONFIG_SYS_CS1_FTIM1           CONFIG_SYS_NOR_FTIM1
+#define CONFIG_SYS_CS1_FTIM2           CONFIG_SYS_NOR_FTIM2
+#define CONFIG_SYS_CS1_FTIM3           CONFIG_SYS_NOR_FTIM3
+#define CONFIG_SYS_CSPR2_EXT           CONFIG_SYS_NOR1_CSPR_EXT
+#define CONFIG_SYS_CSPR2               CONFIG_SYS_NOR1_CSPR
+#define CONFIG_SYS_AMASK2              CONFIG_SYS_NOR_AMASK
+#define CONFIG_SYS_CSOR2               CONFIG_SYS_NOR_CSOR
+#define CONFIG_SYS_CS2_FTIM0           CONFIG_SYS_NOR_FTIM0
+#define CONFIG_SYS_CS2_FTIM1           CONFIG_SYS_NOR_FTIM1
+#define CONFIG_SYS_CS2_FTIM2           CONFIG_SYS_NOR_FTIM2
+#define CONFIG_SYS_CS2_FTIM3           CONFIG_SYS_NOR_FTIM3
+#define CONFIG_SYS_CSPR3_EXT           CONFIG_SYS_FPGA_CSPR_EXT
+#define CONFIG_SYS_CSPR3               CONFIG_SYS_FPGA_CSPR
+#define CONFIG_SYS_AMASK3              CONFIG_SYS_FPGA_AMASK
+#define CONFIG_SYS_CSOR3               CONFIG_SYS_FPGA_CSOR
+#define CONFIG_SYS_CS3_FTIM0           CONFIG_SYS_FPGA_FTIM0
+#define CONFIG_SYS_CS3_FTIM1           CONFIG_SYS_FPGA_FTIM1
+#define CONFIG_SYS_CS3_FTIM2           CONFIG_SYS_FPGA_FTIM2
+#define CONFIG_SYS_CS3_FTIM3           CONFIG_SYS_FPGA_FTIM3
+#else
+#define CONFIG_SYS_CSPR0_EXT           CONFIG_SYS_NOR0_CSPR_EXT
+#define CONFIG_SYS_CSPR0               CONFIG_SYS_NOR0_CSPR
+#define CONFIG_SYS_AMASK0              CONFIG_SYS_NOR_AMASK
+#define CONFIG_SYS_CSOR0               CONFIG_SYS_NOR_CSOR
+#define CONFIG_SYS_CS0_FTIM0           CONFIG_SYS_NOR_FTIM0
+#define CONFIG_SYS_CS0_FTIM1           CONFIG_SYS_NOR_FTIM1
+#define CONFIG_SYS_CS0_FTIM2           CONFIG_SYS_NOR_FTIM2
+#define CONFIG_SYS_CS0_FTIM3           CONFIG_SYS_NOR_FTIM3
+#define CONFIG_SYS_CSPR1_EXT           CONFIG_SYS_NOR1_CSPR_EXT
+#define CONFIG_SYS_CSPR1               CONFIG_SYS_NOR1_CSPR
+#define CONFIG_SYS_AMASK1              CONFIG_SYS_NOR_AMASK
+#define CONFIG_SYS_CSOR1               CONFIG_SYS_NOR_CSOR
+#define CONFIG_SYS_CS1_FTIM0           CONFIG_SYS_NOR_FTIM0
+#define CONFIG_SYS_CS1_FTIM1           CONFIG_SYS_NOR_FTIM1
+#define CONFIG_SYS_CS1_FTIM2           CONFIG_SYS_NOR_FTIM2
+#define CONFIG_SYS_CS1_FTIM3           CONFIG_SYS_NOR_FTIM3
+#define CONFIG_SYS_CSPR2_EXT           CONFIG_SYS_NAND_CSPR_EXT
+#define CONFIG_SYS_CSPR2               CONFIG_SYS_NAND_CSPR
+#define CONFIG_SYS_AMASK2              CONFIG_SYS_NAND_AMASK
+#define CONFIG_SYS_CSOR2               CONFIG_SYS_NAND_CSOR
+#define CONFIG_SYS_CS2_FTIM0           CONFIG_SYS_NAND_FTIM0
+#define CONFIG_SYS_CS2_FTIM1           CONFIG_SYS_NAND_FTIM1
+#define CONFIG_SYS_CS2_FTIM2           CONFIG_SYS_NAND_FTIM2
+#define CONFIG_SYS_CS2_FTIM3           CONFIG_SYS_NAND_FTIM3
+#define CONFIG_SYS_CSPR3_EXT           CONFIG_SYS_FPGA_CSPR_EXT
+#define CONFIG_SYS_CSPR3               CONFIG_SYS_FPGA_CSPR
+#define CONFIG_SYS_AMASK3              CONFIG_SYS_FPGA_AMASK
+#define CONFIG_SYS_CSOR3               CONFIG_SYS_FPGA_CSOR
+#define CONFIG_SYS_CS3_FTIM0           CONFIG_SYS_FPGA_FTIM0
+#define CONFIG_SYS_CS3_FTIM1           CONFIG_SYS_FPGA_FTIM1
+#define CONFIG_SYS_CS3_FTIM2           CONFIG_SYS_FPGA_FTIM2
+#define CONFIG_SYS_CS3_FTIM3           CONFIG_SYS_FPGA_FTIM3
+#endif
+
+/*
+ * I2C bus multiplexer
+ */
+#define I2C_MUX_PCA_ADDR_PRI           0x77
+#define I2C_MUX_PCA_ADDR_SEC           0x76 /* Secondary multiplexer */
+#define I2C_RETIMER_ADDR               0x18
+#define I2C_MUX_CH_DEFAULT             0x8
+#define I2C_MUX_CH_CH7301              0xC
+#define I2C_MUX_CH5                    0xD
+#define I2C_MUX_CH6                    0xE
+#define I2C_MUX_CH7                    0xF
+
+#define I2C_MUX_CH_VOL_MONITOR 0xa
+
+/* Voltage monitor on channel 2*/
+#define I2C_VOL_MONITOR_ADDR           0x40
+#define I2C_VOL_MONITOR_BUS_V_OFFSET   0x2
+#define I2C_VOL_MONITOR_BUS_V_OVF      0x1
+#define I2C_VOL_MONITOR_BUS_V_SHIFT    3
+
+#define CONFIG_VID_FLS_ENV             "ls1046aqds_vdd_mv"
+#ifndef CONFIG_SPL_BUILD
+#define CONFIG_VID
+#endif
+#define CONFIG_VOL_MONITOR_IR36021_SET
+#define CONFIG_VOL_MONITOR_INA220
+/* The lowest and highest voltage allowed for LS1046AQDS */
+#define VDD_MV_MIN                     819
+#define VDD_MV_MAX                     1212
+
+/*
+ * Miscellaneous configurable options
+ */
+#define CONFIG_MISC_INIT_R
+#define CONFIG_SYS_LONGHELP            /* undef to save memory */
+#define CONFIG_AUTO_COMPLETE
+#define CONFIG_SYS_PBSIZE              \
+               (CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + 16)
+#define CONFIG_SYS_BARGSIZE            CONFIG_SYS_CBSIZE
+
+#define CONFIG_SYS_MEMTEST_START       0x80000000
+#define CONFIG_SYS_MEMTEST_END         0x9fffffff
+
+#define CONFIG_SYS_HZ                  1000
+
+/*
+ * Stack sizes
+ * The stack sizes are set up in start.S using the settings below
+ */
+#define CONFIG_STACKSIZE               (30 * 1024)
+
+#define CONFIG_SYS_INIT_SP_OFFSET \
+       (CONFIG_SYS_INIT_RAM_SIZE - GENERATED_GBL_DATA_SIZE)
+
+#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_TEXT_BASE    /* start of monitor */
+
+/*
+ * Environment
+ */
+#define CONFIG_ENV_OVERWRITE
+
+#ifdef CONFIG_NAND_BOOT
+#define CONFIG_ENV_IS_IN_NAND
+#define CONFIG_ENV_SIZE                        0x2000
+#define CONFIG_ENV_OFFSET              (5 * CONFIG_SYS_NAND_BLOCK_SIZE)
+#elif defined(CONFIG_SD_BOOT)
+#define CONFIG_ENV_OFFSET              (1024 * 1024)
+#define CONFIG_ENV_IS_IN_MMC
+#define CONFIG_SYS_MMC_ENV_DEV         0
+#define CONFIG_ENV_SIZE                        0x2000
+#elif defined(CONFIG_QSPI_BOOT)
+#define CONFIG_ENV_IS_IN_SPI_FLASH
+#define CONFIG_ENV_SIZE                        0x2000          /* 8KB */
+#define CONFIG_ENV_OFFSET              0x100000        /* 1MB */
+#define CONFIG_ENV_SECT_SIZE           0x10000
+#else
+#define CONFIG_ENV_IS_IN_FLASH
+#define CONFIG_ENV_ADDR                        (CONFIG_SYS_FLASH_BASE + 0x200000)
+#define CONFIG_ENV_SECT_SIZE           0x20000
+#define CONFIG_ENV_SIZE                        0x20000
+#endif
+
+#define CONFIG_CMDLINE_TAG
+
+#if defined(CONFIG_QSPI_BOOT) || defined(CONFIG_SD_BOOT_QSPI)
+#define CONFIG_BOOTCOMMAND             "sf probe && sf read $kernel_load "    \
+                                       "e0000 f00000 && bootm $kernel_load"
+#else
+#define CONFIG_BOOTCOMMAND             "cp.b $kernel_start $kernel_load "     \
+                                       "$kernel_size && bootm $kernel_load"
+#endif
+
+#if defined(CONFIG_QSPI_BOOT) || defined(CONFIG_SD_BOOT_QSPI)
+#define MTDPARTS_DEFAULT "mtdparts=1550000.quadspi:2m(uboot)," \
+                       "14m(free)"
+#else
+#define MTDPARTS_DEFAULT "mtdparts=60000000.nor:1m(nor_bank0_rcw)," \
+                       "1m(nor_bank0_uboot),1m(nor_bank0_uboot_env)," \
+                       "1m(nor_bank0_fman_uconde),40m(nor_bank0_fit)," \
+                       "1m(nor_bank4_rcw),1m(nor_bank4_uboot)," \
+                       "1m(nor_bank4_uboot_env),1m(nor_bank4_fman_ucode)," \
+                       "40m(nor_bank4_fit);7e800000.flash:" \
+                       "4m(nand_uboot),36m(nand_kernel)," \
+                       "472m(nand_free);spi0.0:2m(uboot)," \
+                       "14m(free)"
+#endif
+
+#include <asm/fsl_secure_boot.h>
+
+#endif /* __LS1046AQDS_H__ */
diff --git a/include/configs/ls1046ardb.h b/include/configs/ls1046ardb.h
new file mode 100644 (file)
index 0000000..693cc8d
--- /dev/null
@@ -0,0 +1,240 @@
+/*
+ * Copyright 2016 Freescale Semiconductor
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#ifndef __LS1046ARDB_H__
+#define __LS1046ARDB_H__
+
+#include "ls1046a_common.h"
+
+#if defined(CONFIG_FSL_LS_PPA)
+#define CONFIG_ARMV8_PSCI
+#define CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT
+#define CONFIG_SYS_LS_PPA_DRAM_BLOCK_MIN_SIZE          (1UL * 1024 * 1024)
+
+#define CONFIG_SYS_LS_PPA_FW_IN_XIP
+#ifdef CONFIG_SYS_LS_PPA_FW_IN_XIP
+#define        CONFIG_SYS_LS_PPA_FW_ADDR       0x40500000
+#endif
+#endif
+
+#define CONFIG_DISPLAY_CPUINFO
+#define CONFIG_DISPLAY_BOARDINFO
+
+#ifdef CONFIG_SD_BOOT
+#define CONFIG_SYS_TEXT_BASE           0x82000000
+#else
+#define CONFIG_SYS_TEXT_BASE           0x40100000
+#endif
+
+#define CONFIG_SYS_CLK_FREQ            100000000
+#define CONFIG_DDR_CLK_FREQ            100000000
+
+#define CONFIG_LAYERSCAPE_NS_ACCESS
+#define CONFIG_MISC_INIT_R
+
+#define CONFIG_DIMM_SLOTS_PER_CTLR     1
+/* Physical Memory Map */
+#define CONFIG_CHIP_SELECTS_PER_CTRL   4
+#define CONFIG_NR_DRAM_BANKS           2
+
+#define CONFIG_DDR_SPD
+#define SPD_EEPROM_ADDRESS             0x51
+#define CONFIG_SYS_SPD_BUS_NUM         0
+
+#define CONFIG_DDR_ECC
+#define CONFIG_ECC_INIT_VIA_DDRCONTROLLER
+#define CONFIG_MEM_INIT_VALUE           0xdeadbeef
+#define CONFIG_FSL_DDR_BIST    /* enable built-in memory test */
+#define CONFIG_FSL_DDR_INTERACTIVE     /* Interactive debugging */
+
+#ifdef CONFIG_RAMBOOT_PBL
+#define CONFIG_SYS_FSL_PBL_PBI board/freescale/ls1046ardb/ls1046ardb_pbi.cfg
+#endif
+
+#ifdef CONFIG_SD_BOOT
+#ifdef CONFIG_EMMC_BOOT
+#define CONFIG_SYS_FSL_PBL_RCW \
+       board/freescale/ls1046ardb/ls1046ardb_rcw_emmc.cfg
+#else
+#define CONFIG_SYS_FSL_PBL_RCW board/freescale/ls1046ardb/ls1046ardb_rcw_sd.cfg
+#endif
+#endif
+
+/* No NOR flash */
+#define CONFIG_SYS_NO_FLASH
+
+/* IFC */
+#define CONFIG_FSL_IFC
+
+/*
+ * NAND Flash Definitions
+ */
+#define CONFIG_NAND_FSL_IFC
+
+#define CONFIG_SYS_NAND_BASE           0x7e800000
+#define CONFIG_SYS_NAND_BASE_PHYS      CONFIG_SYS_NAND_BASE
+
+#define CONFIG_SYS_NAND_CSPR_EXT       (0x0)
+#define CONFIG_SYS_NAND_CSPR   (CSPR_PHYS_ADDR(CONFIG_SYS_NAND_BASE_PHYS) \
+                               | CSPR_PORT_SIZE_8      \
+                               | CSPR_MSEL_NAND        \
+                               | CSPR_V)
+#define CONFIG_SYS_NAND_AMASK  IFC_AMASK(64 * 1024)
+#define CONFIG_SYS_NAND_CSOR   (CSOR_NAND_ECC_ENC_EN   /* ECC on encode */ \
+                               | CSOR_NAND_ECC_DEC_EN  /* ECC on decode */ \
+                               | CSOR_NAND_ECC_MODE_8  /* 8-bit ECC */ \
+                               | CSOR_NAND_RAL_3       /* RAL = 3 Bytes */ \
+                               | CSOR_NAND_PGS_4K      /* Page Size = 4K */ \
+                               | CSOR_NAND_SPRZ_224    /* Spare size = 224 */ \
+                               | CSOR_NAND_PB(64))     /* 64 Pages Per Block */
+
+#define CONFIG_SYS_NAND_ONFI_DETECTION
+
+#define CONFIG_SYS_NAND_FTIM0          (FTIM0_NAND_TCCST(0x7) | \
+                                       FTIM0_NAND_TWP(0x18)   | \
+                                       FTIM0_NAND_TWCHT(0x7) | \
+                                       FTIM0_NAND_TWH(0xa))
+#define CONFIG_SYS_NAND_FTIM1          (FTIM1_NAND_TADLE(0x32) | \
+                                       FTIM1_NAND_TWBE(0x39)  | \
+                                       FTIM1_NAND_TRR(0xe)   | \
+                                       FTIM1_NAND_TRP(0x18))
+#define CONFIG_SYS_NAND_FTIM2          (FTIM2_NAND_TRAD(0xf) | \
+                                       FTIM2_NAND_TREH(0xa) | \
+                                       FTIM2_NAND_TWHRE(0x1e))
+#define CONFIG_SYS_NAND_FTIM3          0x0
+
+#define CONFIG_SYS_NAND_BASE_LIST      { CONFIG_SYS_NAND_BASE }
+#define CONFIG_SYS_MAX_NAND_DEVICE     1
+#define CONFIG_MTD_NAND_VERIFY_WRITE
+#define CONFIG_CMD_NAND
+
+#define CONFIG_SYS_NAND_BLOCK_SIZE     (128 * 1024)
+
+/*
+ * CPLD
+ */
+#define CONFIG_SYS_CPLD_BASE           0x7fb00000
+#define CPLD_BASE_PHYS                 CONFIG_SYS_CPLD_BASE
+
+#define CONFIG_SYS_CPLD_CSPR_EXT       (0x0)
+#define CONFIG_SYS_CPLD_CSPR           (CSPR_PHYS_ADDR(CPLD_BASE_PHYS) | \
+                                       CSPR_PORT_SIZE_8 | \
+                                       CSPR_MSEL_GPCM | \
+                                       CSPR_V)
+#define CONFIG_SYS_CPLD_AMASK          IFC_AMASK(64 * 1024)
+#define CONFIG_SYS_CPLD_CSOR           CSOR_NOR_ADM_SHIFT(16)
+
+/* CPLD Timing parameters for IFC GPCM */
+#define CONFIG_SYS_CPLD_FTIM0          (FTIM0_GPCM_TACSE(0x0e) | \
+                                       FTIM0_GPCM_TEADC(0x0e) | \
+                                       FTIM0_GPCM_TEAHC(0x0e))
+#define CONFIG_SYS_CPLD_FTIM1          (FTIM1_GPCM_TACO(0xff) | \
+                                       FTIM1_GPCM_TRAD(0x3f))
+#define CONFIG_SYS_CPLD_FTIM2          (FTIM2_GPCM_TCS(0xf) | \
+                                       FTIM2_GPCM_TCH(0xf) | \
+                                       FTIM2_GPCM_TWP(0x3E))
+#define CONFIG_SYS_CPLD_FTIM3          0x0
+
+/* IFC Timing Params */
+#define CONFIG_SYS_CSPR0_EXT           CONFIG_SYS_NAND_CSPR_EXT
+#define CONFIG_SYS_CSPR0               CONFIG_SYS_NAND_CSPR
+#define CONFIG_SYS_AMASK0              CONFIG_SYS_NAND_AMASK
+#define CONFIG_SYS_CSOR0               CONFIG_SYS_NAND_CSOR
+#define CONFIG_SYS_CS0_FTIM0           CONFIG_SYS_NAND_FTIM0
+#define CONFIG_SYS_CS0_FTIM1           CONFIG_SYS_NAND_FTIM1
+#define CONFIG_SYS_CS0_FTIM2           CONFIG_SYS_NAND_FTIM2
+#define CONFIG_SYS_CS0_FTIM3           CONFIG_SYS_NAND_FTIM3
+
+#define CONFIG_SYS_CSPR2_EXT           CONFIG_SYS_CPLD_CSPR_EXT
+#define CONFIG_SYS_CSPR2               CONFIG_SYS_CPLD_CSPR
+#define CONFIG_SYS_AMASK2              CONFIG_SYS_CPLD_AMASK
+#define CONFIG_SYS_CSOR2               CONFIG_SYS_CPLD_CSOR
+#define CONFIG_SYS_CS2_FTIM0           CONFIG_SYS_CPLD_FTIM0
+#define CONFIG_SYS_CS2_FTIM1           CONFIG_SYS_CPLD_FTIM1
+#define CONFIG_SYS_CS2_FTIM2           CONFIG_SYS_CPLD_FTIM2
+#define CONFIG_SYS_CS2_FTIM3           CONFIG_SYS_CPLD_FTIM3
+
+/* EEPROM */
+#define CONFIG_ID_EEPROM
+#define CONFIG_SYS_I2C_EEPROM_NXID
+#define CONFIG_SYS_EEPROM_BUS_NUM              0
+#define CONFIG_SYS_I2C_EEPROM_ADDR             0x53
+#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
+#define I2C_RETIMER_ADDR                       0x18
+
+/*
+ * Environment
+ */
+#define CONFIG_ENV_OVERWRITE
+
+#if defined(CONFIG_SD_BOOT)
+#define CONFIG_ENV_IS_IN_MMC
+#define CONFIG_SYS_MMC_ENV_DEV         0
+#define CONFIG_ENV_OFFSET              (1024 * 1024)
+#define CONFIG_ENV_SIZE                        0x2000
+#else
+#define CONFIG_ENV_IS_IN_SPI_FLASH
+#define CONFIG_ENV_SIZE                        0x2000          /* 8KB */
+#define CONFIG_ENV_OFFSET              0x200000        /* 2MB */
+#define CONFIG_ENV_SECT_SIZE           0x40000         /* 256KB */
+#endif
+
+/* FMan */
+#ifdef CONFIG_SYS_DPAA_FMAN
+#define CONFIG_FMAN_ENET
+#define CONFIG_PHYLIB
+#define CONFIG_PHYLIB_10G
+#define CONFIG_PHY_GIGE                /* Include GbE speed/duplex detection */
+
+#define CONFIG_PHY_REALTEK
+#define CONFIG_PHY_AQUANTIA
+#define AQR105_IRQ_MASK                        0x80000000
+
+#define RGMII_PHY1_ADDR                        0x1
+#define RGMII_PHY2_ADDR                        0x2
+
+#define SGMII_PHY1_ADDR                        0x3
+#define SGMII_PHY2_ADDR                        0x4
+
+#define FM1_10GEC1_PHY_ADDR            0x0
+
+#define CONFIG_ETHPRIME                        "FM1@DTSEC3"
+#endif
+
+/* QSPI device */
+#ifdef CONFIG_FSL_QSPI
+#define CONFIG_SPI_FLASH_SPANSION
+#define FSL_QSPI_FLASH_SIZE            (1 << 26)
+#define FSL_QSPI_FLASH_NUM             2
+#define CONFIG_SPI_FLASH_BAR
+#endif
+
+/* SATA */
+#define CONFIG_LIBATA
+#define CONFIG_SCSI_AHCI
+#define CONFIG_SCSI_AHCI_PLAT
+#define CONFIG_SCSI
+#define CONFIG_DOS_PARTITION
+#define CONFIG_BOARD_LATE_INIT
+
+#define CONFIG_SYS_SATA                                AHCI_BASE_ADDR
+
+#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 CONFIG_BOOTCOMMAND             "sf probe 0:0;sf read $kernel_load" \
+                                       "$kernel_start $kernel_size;" \
+                                       "bootm $kernel_load"
+
+#define MTDPARTS_DEFAULT "mtdparts=1550000.quadspi:1m(rcw)," \
+                       "15m(u-boot),48m(kernel.itb);" \
+                       "7e800000.flash:16m(nand_uboot)," \
+                       "48m(nand_kernel),448m(nand_free)"
+
+#endif /* __LS1046ARDB_H__ */
index 92de604fdc7dba2f26a9dece60217dd919b1e219..42d02986ee92abe641b92cdc0ebe97876958a462 100644 (file)
@@ -153,11 +153,6 @@ unsigned long long get_qixis_addr(void);
 #define CONFIG_SYS_NAND_BASE                   0x530000000ULL
 #define CONFIG_SYS_NAND_BASE_PHYS              0x30000000
 
-/* Debug Server firmware */
-#define CONFIG_FSL_DEBUG_SERVER
-/* 2 sec timeout */
-#define CONFIG_SYS_DEBUG_SERVER_TIMEOUT                        (2 * 1000 * 1000)
-
 /* MC firmware */
 #define CONFIG_FSL_MC_ENET
 /* TODO Actual DPL max length needs to be confirmed with the MC FW team */
@@ -175,8 +170,7 @@ unsigned long long get_qixis_addr(void);
  * It will be used by MC and Debug Server. The MC region must be
  * 512MB aligned, so the min size to hide is 512MB.
  */
-#if defined(CONFIG_FSL_MC_ENET) || defined(CONFIG_FSL_DEBUG_SERVER)
-#define CONFIG_SYS_DEBUG_SERVER_DRAM_BLOCK_MIN_SIZE    (254UL * 1024 * 1024)
+#ifdef CONFIG_FSL_MC_ENET
 #define CONFIG_SYS_LS_MC_DRAM_BLOCK_MIN_SIZE           (512UL * 1024 * 1024)
 #define CONFIG_SYS_MC_RSV_MEM_ALIGN                    (512UL * 1024 * 1024)
 #endif
index deef8fbec8cccf0ac0382b496829f05a58fd7b8d..1d81bc4b289815707a98a0d5b4baf4e1474bfa8e 100644 (file)
@@ -57,7 +57,7 @@ struct jt_funcs {
 };
 
 
-#define XF_VERSION     8
+#define XF_VERSION     9
 
 #if defined(CONFIG_X86)
 extern gd_t *global_data;
index f4d97fb6054e08a872ec30b3df02d3b8d6cd2c60..8582ac0774117a07f8fd023efe78964c363850ca 100644 (file)
@@ -30,5 +30,7 @@ struct csu_ns_dev {
 };
 
 void enable_layerscape_ns_access(void);
+void set_devices_ns_access(struct csu_ns_dev *ns_dev, u16 val);
+void set_pcie_ns_access(int pcie, u16 val);
 
 #endif
index 486e47e508d0741a29600220bb1b45b2770cbc1c..36bd9d7c934a7a299a147a5c0c0d29bb15d8aa60 100644 (file)
@@ -299,7 +299,7 @@ typedef struct fsl_ddr_cfg_regs_s {
        unsigned int ddr_cdr2;
        unsigned int err_disable;
        unsigned int err_int_en;
-       unsigned int debug[32];
+       unsigned int debug[64];
 } fsl_ddr_cfg_regs_t;
 
 typedef struct memctl_options_partial_s {
diff --git a/include/fsl_debug_server.h b/include/fsl_debug_server.h
deleted file mode 100644 (file)
index 28d8adb..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2014 Freescale Semiconductor
- *
- * SPDX-License-Identifier:    GPL-2.0+
- */
-
-#ifndef __FSL_DBG_SERVER_H__
-#define __FSL_DBG_SERVER_H__
-
-#include <asm/io.h>
-#include <common.h>
-
-/*
- * Define Debug Server firmware version information
- */
-
-/* Major version number: incremented on API compatibility changes */
-#define DEBUG_SERVER_VER_MAJOR 0
-
-/* Minor version number: incremented on API additions (backward
- * compatible); reset when major version is incremented.
- */
-#define DEBUG_SERVER_VER_MINOR 1
-
-#define DEBUG_SERVER_INIT_STATUS       (1 << 0)
-#define DEBUG_SERVER_INIT_STATUS_MASK  (0x00000001)
-
-int debug_server_init(void);
-unsigned long debug_server_get_dram_block_size(void);
-
-#endif /* __FSL_DBG_SERVER_H__ */
-
index e4addada13045a714abe1de18643c1b02b183560..b1c4fe7969a951a43fc89da932fb3beee65d1ca4 100644 (file)
@@ -131,7 +131,6 @@ struct ccsr_ddr {
        u32     capture_ext_address;    /* Error Extended Addr Capture */
        u32     err_sbe;                /* Single-Bit ECC Error Management */
        u8      res_e5c[164];
-       u32     debug[32];              /* debug_1 to debug_32 */
-       u8      res_f80[128];
+       u32     debug[64];              /* debug_1 to debug_64 */
 };
 #endif /* __FSL_IMMAP_H */
index a939d89d6bc0d3436d126f13d53b5951a081b370..d5c4f8d59a7c66bb298c08db44a1424fb64d191e 100644 (file)
@@ -7,63 +7,39 @@
 #ifndef FSL_MMDC_H
 #define FSL_MMDC_H
 
-#define CONFIG_SYS_MMDC_CORE_ODT_TIMING                0x12554000
-#define CONFIG_SYS_MMDC_CORE_TIMING_CFG_0      0xbabf7954
-#define CONFIG_SYS_MMDC_CORE_TIMING_CFG_1      0xff328f64
-#define CONFIG_SYS_MMDC_CORE_TIMING_CFG_2      0x01ff00db
-
-#define CONFIG_SYS_MMDC_CORE_MISC              0x00001680
-#define CONFIG_SYS_MMDC_PHY_MEASURE_UNIT       0x00000800
-#define CONFIG_SYS_MMDC_CORE_RDWR_CMD_DELAY    0x00002000
-#define CONFIG_SYS_MMDC_PHY_ODT_CTRL           0x0000022a
-
-#define CONFIG_SYS_MMDC_CORE_OUT_OF_RESET_DELAY        0x00bf1023
-
-#define CONFIG_SYS_MMDC_CORE_ADDR_PARTITION    0x0000007f
-
-#define CONFIG_SYS_MMDC_PHY_ZQ_HW_CTRL         0xa1390003
-
-#define        FORCE_ZQ_AUTO_CALIBRATION               (0x1 << 16)
-
-/* PHY Write Leveling Configuration and Error Status (MPWLGCR) */
-#define WR_LVL_HW_EN                           0x00000001
+/* PHY Write Leveling Configuration and Error Status Register (MPWLGCR) */
+#define MPWLGCR_HW_WL_EN               (1 << 0)
 
 /* PHY Pre-defined Compare and CA delay-line Configuration (MPPDCMPR2) */
-#define MPR_COMPARE_EN                         0x00000001
+#define MPPDCMPR2_MPR_COMPARE_EN       (1 << 0)
 
-#define CONFIG_SYS_MMDC_PHY_RD_DLY_LINES_CFG   0x40404040
 
 /* MMDC PHY Read DQS gating control register 0 (MPDGCTRL0) */
-#define AUTO_RD_DQS_GATING_CALIBRATION_EN      0x10000000
+#define AUTO_RD_DQS_GATING_CALIBRATION_EN      (1 << 28)
 
 /* MMDC PHY Read Delay HW Calibration Control Register (MPRDDLHWCTL) */
-#define AUTO_RD_CALIBRATION_EN                 0x00000010
-
-#define CONFIG_SYS_MMDC_CORE_PWR_DOWN_CTRL     0x00030035
+#define MPRDDLHWCTL_AUTO_RD_CALIBRATION_EN     (1 << 4)
 
-#define CONFIG_SYS_MMDC_CORE_PWR_SAV_CTRL_STAT 0x00001067
+/* MMDC Core Power Saving Control and Status Register (MMDC_MAPSR) */
+#define MMDC_MAPSR_PWR_SAV_CTRL_STAT   0x00001067
 
-#define CONFIG_SYS_MMDC_CORE_REFRESH_CTL       0x0f3c8000
-
-#define START_REFRESH                          0x00000001
+/* MMDC Core Refresh Control Register (MMDC_MDREF) */
+#define MDREF_START_REFRESH    (1 << 0)
 
 /* MMDC Core Special Command Register (MDSCR) */
-#define CMD_ADDR_MSB_MR_OP(x)   (x << 24)
-
-#define  CMD_ADDR_LSB_MR_ADDR(x)    (x << 16)
-
-#define DISABLE_CFG_REQ                0x0
-#define CONFIGURATION_REQ      (0x1  << 15)
-#define WL_EN                  (0x1  << 9)
-
-#define        CMD_NORMAL              (0x0 << 4)
-#define        CMD_PRECHARGE           (0x1 << 4)
-#define        CMD_AUTO_REFRESH        (0x2 << 4)
-#define        CMD_LOAD_MODE_REG       (0x3 << 4)
-#define        CMD_ZQ_CALIBRATION      (0x4 << 4)
-#define        CMD_PRECHARGE_BANK_OPEN (0x5 << 4)
-#define        CMD_MRR                 (0x6 << 4)
-
+#define CMD_ADDR_MSB_MR_OP(x)  (x << 24)
+#define CMD_ADDR_LSB_MR_ADDR(x) (x << 16)
+#define MDSCR_DISABLE_CFG_REQ   (0 << 15)
+#define MDSCR_ENABLE_CON_REQ   (1 << 15)
+#define MDSCR_CON_ACK          (1 << 14)
+#define MDSCR_WL_EN            (1 << 9)
+#define        CMD_NORMAL              (0 << 4)
+#define        CMD_PRECHARGE           (1 << 4)
+#define        CMD_AUTO_REFRESH        (2 << 4)
+#define        CMD_LOAD_MODE_REG       (3 << 4)
+#define        CMD_ZQ_CALIBRATION      (4 << 4)
+#define        CMD_PRECHARGE_BANK_OPEN (5 << 4)
+#define        CMD_MRR                 (6 << 4)
 #define CMD_BANK_ADDR_0                0x0
 #define CMD_BANK_ADDR_1                0x1
 #define CMD_BANK_ADDR_2                0x2
 #define CMD_BANK_ADDR_6                0x6
 #define CMD_BANK_ADDR_7                0x7
 
+/* MMDC Core Control Register (MDCTL) */
+#define MDCTL_SDE0             (1 << 31)
+#define MDCTL_SDE1             (1 << 30)
+
+/* MMDC PHY ZQ HW control register (MMDC_MPZQHWCTRL) */
+#define MPZQHWCTRL_ZQ_HW_FORCE (1 << 16)
+
+/* MMDC PHY Measure Unit Register (MMDC_MPMUR0) */
+#define MMDC_MPMUR0_FRC_MSR    (1 << 11)
+
+/* MMDC PHY Read delay-lines Configuration Register (MMDC_MPRDDLCTL) */
+/* default 64 for a quarter cycle delay */
+#define MMDC_MPRDDLCTL_DEFAULT_DELAY   0x40404040
+
 /* MMDC Registers */
-struct mmdc_p_regs {
+struct mmdc_regs {
        u32 mdctl;
        u32 mdpdc;
        u32 mdotc;
@@ -120,7 +110,10 @@ struct mmdc_p_regs {
        u32 mprddqby1dl;
        u32 mprddqby2dl;
        u32 mprddqby3dl;
-       u32 res5[4];
+       u32 mpwrdqby0dl;
+       u32 mpwrdqby1dl;
+       u32 mpwrdqby2dl;
+       u32 mpwrdqby3dl;
        u32 mpdgctrl0;
        u32 mpdgctrl1;
        u32 mpdgdlst0;
@@ -157,4 +150,23 @@ struct mmdc_p_regs {
        u32 mpdccr;
 };
 
+struct fsl_mmdc_info {
+       u32 mdctl;
+       u32 mdpdc;
+       u32 mdotc;
+       u32 mdcfg0;
+       u32 mdcfg1;
+       u32 mdcfg2;
+       u32 mdmisc;
+       u32 mdref;
+       u32 mdrwd;
+       u32 mdor;
+       u32 mdasp;
+       u32 mpodtctrl;
+       u32 mpzqhwctrl;
+       u32 mprddlctl;
+};
+
+void mmdc_init(const struct fsl_mmdc_info *);
+
 #endif /* FSL_MMDC_H */
index 199f3667eb4f4371d9813ba2a68defc7354f2c3c..d04e3cc95a57b00d5d4efd3d29afad63310e695f 100644 (file)
@@ -51,7 +51,7 @@ struct fsl_xhci {
        struct dwc3 *dwc3_reg;
 };
 
-#if defined(CONFIG_LS102XA) || defined(CONFIG_LS1012A)
+#if defined(CONFIG_LS102XA) || defined(CONFIG_ARCH_LS1012A)
 #define CONFIG_SYS_FSL_XHCI_USB1_ADDR CONFIG_SYS_XHCI_USB1_ADDR
 #define CONFIG_SYS_FSL_XHCI_USB2_ADDR 0
 #define CONFIG_SYS_FSL_XHCI_USB3_ADDR 0