mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-11 15:37:23 +00:00
Merge git://git.denx.de/u-boot-fsl-qoriq
Changes from rc2 tag - Support PCIe Gen4 driver of the Mobiveil IP - NXP LS1028A SoC and platform support - Few SPI related config updates - Distinguish the ecc val by chassis version and move the ecc addr to dts - sp805 watchdog support
This commit is contained in:
commit
7e090b466c
86 changed files with 3308 additions and 65 deletions
|
@ -519,6 +519,7 @@ FREESCALE QORIQ
|
|||
M: Prabhakar Kushwaha <prabhakar.kushwaha@nxp.com>
|
||||
S: Maintained
|
||||
T: git git://git.denx.de/u-boot-fsl-qoriq.git
|
||||
F: drivers/watchdog/sp805_wdt.c
|
||||
|
||||
I2C
|
||||
M: Heiko Schocher <hs@denx.de>
|
||||
|
|
|
@ -1262,6 +1262,28 @@ config TARGET_LS1012AFRDM
|
|||
development platform that supports the QorIQ LS1012A
|
||||
Layerscape Architecture processor.
|
||||
|
||||
config TARGET_LS1028AQDS
|
||||
bool "Support ls1028aqds"
|
||||
select ARCH_LS1028A
|
||||
select ARM64
|
||||
select ARMV8_MULTIENTRY
|
||||
help
|
||||
Support for Freescale LS1028AQDS platform
|
||||
The LS1028A Development System (QDS) is a high-performance
|
||||
development platform that supports the QorIQ LS1028A
|
||||
Layerscape Architecture processor.
|
||||
|
||||
config TARGET_LS1028ARDB
|
||||
bool "Support ls1028ardb"
|
||||
select ARCH_LS1028A
|
||||
select ARM64
|
||||
select ARMV8_MULTIENTRY
|
||||
help
|
||||
Support for Freescale LS1028ARDB platform
|
||||
The LS1028A Development System (RDB) is a high-performance
|
||||
development platform that supports the QorIQ LS1028A
|
||||
Layerscape Architecture processor.
|
||||
|
||||
config TARGET_LS1088ARDB
|
||||
bool "Support ls1088ardb"
|
||||
select ARCH_LS1088A
|
||||
|
@ -1666,6 +1688,7 @@ source "board/freescale/ls2080a/Kconfig"
|
|||
source "board/freescale/ls2080aqds/Kconfig"
|
||||
source "board/freescale/ls2080ardb/Kconfig"
|
||||
source "board/freescale/ls1088a/Kconfig"
|
||||
source "board/freescale/ls1028a/Kconfig"
|
||||
source "board/freescale/ls1021aqds/Kconfig"
|
||||
source "board/freescale/ls1043aqds/Kconfig"
|
||||
source "board/freescale/ls1021atwr/Kconfig"
|
||||
|
|
|
@ -104,6 +104,7 @@ config PSCI_RESET
|
|||
!TARGET_LS1012ARDB && !TARGET_LS1012AFRDM && \
|
||||
!TARGET_LS1012A2G5RDB && !TARGET_LS1012AQDS && \
|
||||
!TARGET_LS1012AFRWY && \
|
||||
!TARGET_LS1028ARDB && !TARGET_LS1028AQDS && \
|
||||
!TARGET_LS1043ARDB && !TARGET_LS1043AQDS && \
|
||||
!TARGET_LS1046ARDB && !TARGET_LS1046AQDS && \
|
||||
!TARGET_LS2081ARDB && !TARGET_LX2160ARDB && \
|
||||
|
|
|
@ -20,6 +20,40 @@ config ARCH_LS1012A
|
|||
select SYS_I2C_MXC_I2C2
|
||||
imply PANIC_HANG
|
||||
|
||||
config ARCH_LS1028A
|
||||
bool
|
||||
select ARMV8_SET_SMPEN
|
||||
select FSL_LSCH3
|
||||
select NXP_LSCH3_2
|
||||
select SYS_FSL_HAS_CCI400
|
||||
select SYS_FSL_SRDS_1
|
||||
select SYS_HAS_SERDES
|
||||
select SYS_FSL_DDR
|
||||
select SYS_FSL_DDR_LE
|
||||
select SYS_FSL_DDR_VER_50
|
||||
select SYS_FSL_HAS_DDR3
|
||||
select SYS_FSL_HAS_DDR4
|
||||
select SYS_FSL_HAS_SEC
|
||||
select SYS_FSL_SEC_COMPAT_5
|
||||
select SYS_FSL_SEC_LE
|
||||
select FSL_TZASC_1
|
||||
select ARCH_EARLY_INIT_R
|
||||
select BOARD_EARLY_INIT_F
|
||||
select SYS_I2C_MXC
|
||||
select SYS_I2C_MXC_I2C1
|
||||
select SYS_I2C_MXC_I2C2
|
||||
select SYS_I2C_MXC_I2C3
|
||||
select SYS_I2C_MXC_I2C4
|
||||
select SYS_I2C_MXC_I2C5
|
||||
select SYS_I2C_MXC_I2C6
|
||||
select SYS_I2C_MXC_I2C7
|
||||
select SYS_I2C_MXC_I2C8
|
||||
select SYS_FSL_ERRATUM_A009007
|
||||
select SYS_FSL_ERRATUM_A008514 if !TFABOOT
|
||||
select SYS_FSL_ERRATUM_A009663 if !TFABOOT
|
||||
select SYS_FSL_ERRATUM_A009942 if !TFABOOT
|
||||
imply PANIC_HANG
|
||||
|
||||
config ARCH_LS1043A
|
||||
bool
|
||||
select ARMV8_SET_SMPEN
|
||||
|
@ -242,8 +276,9 @@ config FSL_LAYERSCAPE
|
|||
|
||||
config FSL_PCIE_COMPAT
|
||||
string "PCIe compatible of Kernel DT"
|
||||
depends on PCIE_LAYERSCAPE
|
||||
depends on PCIE_LAYERSCAPE || PCIE_LAYERSCAPE_GEN4
|
||||
default "fsl,ls1012a-pcie" if ARCH_LS1012A
|
||||
default "fsl,ls1028a-pcie" if ARCH_LS1028A
|
||||
default "fsl,ls1043a-pcie" if ARCH_LS1043A
|
||||
default "fsl,ls1046a-pcie" if ARCH_LS1046A
|
||||
default "fsl,ls2080a-pcie" if ARCH_LS2080A
|
||||
|
@ -343,6 +378,7 @@ config SYS_FSL_ERRATUM_A010539
|
|||
|
||||
config MAX_CPUS
|
||||
int "Maximum number of CPUs permitted for Layerscape"
|
||||
default 2 if ARCH_LS1028A
|
||||
default 4 if ARCH_LS1043A
|
||||
default 4 if ARCH_LS1046A
|
||||
default 16 if ARCH_LS2080A
|
||||
|
@ -377,7 +413,7 @@ config QSPI_AHB_INIT
|
|||
config SYS_CCI400_OFFSET
|
||||
hex "Offset for CCI400 base"
|
||||
depends on SYS_FSL_HAS_CCI400
|
||||
default 0x3090000 if ARCH_LS1088A
|
||||
default 0x3090000 if ARCH_LS1088A || ARCH_LS1028A
|
||||
default 0x180000 if FSL_LSCH2
|
||||
help
|
||||
Offset for CCI400 base
|
||||
|
@ -446,6 +482,7 @@ config CLUSTER_CLK_FREQ
|
|||
|
||||
config SYS_FSL_PCLK_DIV
|
||||
int "Platform clock divider"
|
||||
default 1 if ARCH_LS1028A
|
||||
default 1 if ARCH_LS1043A
|
||||
default 1 if ARCH_LS1046A
|
||||
default 1 if ARCH_LS1088A
|
||||
|
|
|
@ -48,3 +48,7 @@ endif
|
|||
ifneq ($(CONFIG_ARCH_LS1088A),)
|
||||
obj-$(CONFIG_SYS_HAS_SERDES) += ls1088a_serdes.o
|
||||
endif
|
||||
|
||||
ifneq ($(CONFIG_ARCH_LS1028A),)
|
||||
obj-$(CONFIG_SYS_HAS_SERDES) += ls1028a_serdes.o
|
||||
endif
|
||||
|
|
|
@ -58,6 +58,7 @@ static struct cpu_type cpu_type_list[] = {
|
|||
CPU_TYPE_ENTRY(LS1026A, LS1026A, 2),
|
||||
CPU_TYPE_ENTRY(LS2040A, LS2040A, 4),
|
||||
CPU_TYPE_ENTRY(LS1012A, LS1012A, 1),
|
||||
CPU_TYPE_ENTRY(LS1028A, LS1028A, 2),
|
||||
CPU_TYPE_ENTRY(LS1088A, LS1088A, 8),
|
||||
CPU_TYPE_ENTRY(LS1084A, LS1084A, 8),
|
||||
CPU_TYPE_ENTRY(LS1048A, LS1048A, 4),
|
||||
|
@ -246,17 +247,33 @@ static struct mm_region final_map[] = {
|
|||
PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
|
||||
PTE_BLOCK_NON_SHARE | PTE_BLOCK_PXN | PTE_BLOCK_UXN
|
||||
},
|
||||
#ifdef CONFIG_SYS_PCIE3_PHYS_ADDR
|
||||
{ CONFIG_SYS_PCIE3_PHYS_ADDR, CONFIG_SYS_PCIE3_PHYS_ADDR,
|
||||
CONFIG_SYS_PCIE3_PHYS_SIZE,
|
||||
PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
|
||||
PTE_BLOCK_NON_SHARE | PTE_BLOCK_PXN | PTE_BLOCK_UXN
|
||||
},
|
||||
#if defined(CONFIG_ARCH_LS2080A) || defined(CONFIG_ARCH_LX2160A)
|
||||
#endif
|
||||
#ifdef CONFIG_SYS_PCIE4_PHYS_ADDR
|
||||
{ CONFIG_SYS_PCIE4_PHYS_ADDR, CONFIG_SYS_PCIE4_PHYS_ADDR,
|
||||
CONFIG_SYS_PCIE4_PHYS_SIZE,
|
||||
PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
|
||||
PTE_BLOCK_NON_SHARE | PTE_BLOCK_PXN | PTE_BLOCK_UXN
|
||||
},
|
||||
#endif
|
||||
#ifdef SYS_PCIE5_PHYS_ADDR
|
||||
{ SYS_PCIE5_PHYS_ADDR, SYS_PCIE5_PHYS_ADDR,
|
||||
SYS_PCIE5_PHYS_SIZE,
|
||||
PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
|
||||
PTE_BLOCK_NON_SHARE | PTE_BLOCK_PXN | PTE_BLOCK_UXN
|
||||
},
|
||||
#endif
|
||||
#ifdef SYS_PCIE6_PHYS_ADDR
|
||||
{ SYS_PCIE6_PHYS_ADDR, SYS_PCIE6_PHYS_ADDR,
|
||||
SYS_PCIE6_PHYS_SIZE,
|
||||
PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
|
||||
PTE_BLOCK_NON_SHARE | PTE_BLOCK_PXN | PTE_BLOCK_UXN
|
||||
},
|
||||
#endif
|
||||
{ CONFIG_SYS_FSL_WRIOP1_BASE, CONFIG_SYS_FSL_WRIOP1_BASE,
|
||||
CONFIG_SYS_FSL_WRIOP1_SIZE,
|
||||
|
@ -341,11 +358,13 @@ static struct mm_region final_map[] = {
|
|||
PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
|
||||
PTE_BLOCK_NON_SHARE | PTE_BLOCK_PXN | PTE_BLOCK_UXN
|
||||
},
|
||||
#ifdef CONFIG_SYS_PCIE3_PHYS_ADDR
|
||||
{ CONFIG_SYS_PCIE3_PHYS_ADDR, CONFIG_SYS_PCIE3_PHYS_ADDR,
|
||||
CONFIG_SYS_PCIE3_PHYS_SIZE,
|
||||
PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
|
||||
PTE_BLOCK_NON_SHARE | PTE_BLOCK_PXN | PTE_BLOCK_UXN
|
||||
},
|
||||
#endif
|
||||
{ CONFIG_SYS_FSL_DRAM_BASE3, CONFIG_SYS_FSL_DRAM_BASE3,
|
||||
CONFIG_SYS_FSL_DRAM_SIZE3,
|
||||
PTE_BLOCK_MEMTYPE(MT_NORMAL) |
|
||||
|
@ -448,16 +467,20 @@ static void fix_pcie_mmu_map(void)
|
|||
final_map[i].virt = 0x2800000000ULL;
|
||||
final_map[i].size = 0x800000000ULL;
|
||||
break;
|
||||
#ifdef CONFIG_SYS_PCIE3_PHYS_ADDR
|
||||
case CONFIG_SYS_PCIE3_PHYS_ADDR:
|
||||
final_map[i].phys = 0x3000000000ULL;
|
||||
final_map[i].virt = 0x3000000000ULL;
|
||||
final_map[i].size = 0x800000000ULL;
|
||||
break;
|
||||
#endif
|
||||
#ifdef CONFIG_SYS_PCIE4_PHYS_ADDR
|
||||
case CONFIG_SYS_PCIE4_PHYS_ADDR:
|
||||
final_map[i].phys = 0x3800000000ULL;
|
||||
final_map[i].virt = 0x3800000000ULL;
|
||||
final_map[i].size = 0x800000000ULL;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -785,12 +808,8 @@ enum env_location env_get_location(enum env_operation op, int prio)
|
|||
if (prio)
|
||||
return ENVL_UNKNOWN;
|
||||
|
||||
#ifdef CONFIG_CHAIN_OF_TRUST
|
||||
/* Check Boot Mode
|
||||
* If Boot Mode is Secure, return ENVL_NOWHERE
|
||||
*/
|
||||
if (fsl_check_boot_mode_secure() == 1)
|
||||
goto done;
|
||||
#ifdef CONFIG_ENV_IS_NOWHERE
|
||||
return env_loc;
|
||||
#endif
|
||||
|
||||
switch (src) {
|
||||
|
@ -820,9 +839,6 @@ enum env_location env_get_location(enum env_operation op, int prio)
|
|||
break;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_CHAIN_OF_TRUST
|
||||
done:
|
||||
#endif
|
||||
return env_loc;
|
||||
}
|
||||
#endif /* CONFIG_TFABOOT */
|
||||
|
|
|
@ -8,6 +8,7 @@ SoC overview
|
|||
6. LS2088A
|
||||
7. LS2081A
|
||||
8. LX2160A
|
||||
9. LS1028A
|
||||
|
||||
LS1043A
|
||||
---------
|
||||
|
@ -328,3 +329,53 @@ LX2160A SoC has 2 more similar SoC personalities
|
|||
|
||||
2)LX2080A, few difference w.r.t. LX2160A:
|
||||
a) Eight 64-bit ARM v8 Cortex-A72 CPUs
|
||||
|
||||
|
||||
LS1028A
|
||||
--------
|
||||
The QorIQ LS1028A processor integrates two 64-bit Arm Cortex-A72 cores with
|
||||
a GPU and LCD controller, as well as two TSN-enabled Ethernet controllers and
|
||||
a TSNenabled 4-port switch.
|
||||
|
||||
The high performance Cortex-A72 cores, performing above 16,000 CoreMarks,
|
||||
combined with 2.5 Gbit Ethernet, PCI express Gen 3.0, SATA 3.0, USB 3.0 and
|
||||
Octal/Quad SPI interfaces provide capabilities for a number of industrial and
|
||||
embedded applications. The device provides excellent integration with the
|
||||
new Time-Sensitive Networking standard, and enables a number of
|
||||
TSN applications.
|
||||
|
||||
The LS1028A SoC includes the following function and features:
|
||||
- Two 64-bit ARM v8 A72 CPUs
|
||||
- Cache Coherent interconnect (CCI-400)
|
||||
- One 32-bit DDR3L/DDR4 SDRAM memory controller with ECC
|
||||
- eDP/Displayport interface
|
||||
- Graphics processing unit
|
||||
- One Configurable x4 SerDes
|
||||
- Ethernet interfaces
|
||||
- Non-switched: One Ethernet MAC supporting 2.5G, 1G, 100M, 10M, one
|
||||
ethernet MAC supporting 1G, 100M, 10M.
|
||||
- Switched: TSN IP to support four 2.5/1G interfaces.
|
||||
- None of the MACs support MACSEC
|
||||
- Support for RGMII, SGMII (and 1000Base-KX), SGMII 2.5x, QSGMII
|
||||
- Support for 10G-SXGMII and 10G-QXGMII.
|
||||
- Energy efficient Ethernet support (802.3az)
|
||||
- IEEE 1588 support
|
||||
- High-speed peripheral interfaces
|
||||
- Two PCIe 3.0 controllers, one supporting x4 operation
|
||||
- One serial ATA (SATA 3.0) controller
|
||||
- Additional peripheral interfaces
|
||||
- Two high-speed USB 2.0/3.0 controllers with integrated PHY each
|
||||
supporting host or device modes
|
||||
- Two Enhanced secure digital host controllers (SD/SDIO/eMMC)
|
||||
- Two Serial peripheral interface (SPI) controllers
|
||||
- Eight I2C controllers
|
||||
- Two UART controllers
|
||||
- Additional six Industrual UARTs (LPUART).
|
||||
- One FlexSPI controller
|
||||
- General Purpose IO (GPIO)
|
||||
- Two CAN-FD interfaces
|
||||
- Eight Flextimers with PWM I/O
|
||||
- Support for hardware virtualization and partitioning enforcement
|
||||
- Layerscape Trust Architecture
|
||||
- Service Processor (SP) provides pre-boot initialization and secure-boot
|
||||
capabilities
|
||||
|
|
73
arch/arm/cpu/armv8/fsl-layerscape/ls1028a_serdes.c
Normal file
73
arch/arm/cpu/armv8/fsl-layerscape/ls1028a_serdes.c
Normal file
|
@ -0,0 +1,73 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+
|
||||
/*
|
||||
* Copyright 2019 NXP
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <asm/arch/fsl_serdes.h>
|
||||
|
||||
struct serdes_config {
|
||||
u32 protocol;
|
||||
u8 lanes[SRDS_MAX_LANES];
|
||||
u8 rcw_lanes[SRDS_MAX_LANES];
|
||||
};
|
||||
|
||||
static struct serdes_config serdes1_cfg_tbl[] = {
|
||||
/* SerDes 1 */
|
||||
{0xCC5B, {PCIE1, QSGMII_B, PCIE2, PCIE2} },
|
||||
{0xEB99, {SGMII1, SGMII1, PCIE2, SATA1} },
|
||||
{0xCC99, {SGMII1, SGMII1, PCIE2, PCIE2} },
|
||||
{0xBB99, {SGMII1, SGMII1, PCIE2, PCIE1} },
|
||||
{0x9999, {SGMII1, SGMII2, SGMII3, SGMII4} },
|
||||
{0xEBCC, {PCIE1, PCIE1, PCIE2, SATA1} },
|
||||
{0xCCCC, {PCIE1, PCIE1, PCIE2, PCIE2} },
|
||||
{0xDDDD, {PCIE1, PCIE1, PCIE1, PCIE1} },
|
||||
{}
|
||||
};
|
||||
|
||||
static struct serdes_config *serdes_cfg_tbl[] = {
|
||||
serdes1_cfg_tbl,
|
||||
};
|
||||
|
||||
enum srds_prtcl serdes_get_prtcl(int serdes, int cfg, int lane)
|
||||
{
|
||||
struct serdes_config *ptr;
|
||||
|
||||
if (serdes >= ARRAY_SIZE(serdes_cfg_tbl))
|
||||
return 0;
|
||||
|
||||
ptr = serdes_cfg_tbl[serdes];
|
||||
while (ptr->protocol) {
|
||||
if (ptr->protocol == cfg)
|
||||
return ptr->lanes[lane];
|
||||
ptr++;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int is_serdes_prtcl_valid(int serdes, u32 prtcl)
|
||||
{
|
||||
int i;
|
||||
struct serdes_config *ptr;
|
||||
|
||||
if (serdes >= ARRAY_SIZE(serdes_cfg_tbl))
|
||||
return 0;
|
||||
|
||||
ptr = serdes_cfg_tbl[serdes];
|
||||
while (ptr->protocol) {
|
||||
if (ptr->protocol == prtcl)
|
||||
break;
|
||||
ptr++;
|
||||
}
|
||||
|
||||
if (!ptr->protocol)
|
||||
return 0;
|
||||
|
||||
for (i = 0; i < SRDS_MAX_LANES; i++) {
|
||||
if (ptr->lanes[i] != NONE)
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -329,6 +329,8 @@ dtb-$(CONFIG_FSL_LSCH3) += fsl-ls2080a-qds.dtb \
|
|||
fsl-ls2088a-rdb-qspi.dtb \
|
||||
fsl-ls1088a-rdb.dtb \
|
||||
fsl-ls1088a-qds.dtb \
|
||||
fsl-ls1028a-rdb.dtb \
|
||||
fsl-ls1028a-qds.dtb \
|
||||
fsl-lx2160a-rdb.dtb \
|
||||
fsl-lx2160a-qds.dtb
|
||||
dtb-$(CONFIG_FSL_LSCH2) += fsl-ls1043a-qds-duart.dtb \
|
||||
|
|
|
@ -136,7 +136,9 @@
|
|||
|
||||
sata: sata@3200000 {
|
||||
compatible = "fsl,ls1012a-ahci";
|
||||
reg = <0x0 0x3200000 0x0 0x10000>;
|
||||
reg = <0x0 0x3200000 0x0 0x10000 /* ccsr sata base */
|
||||
0x0 0x20140520 0x0 0x4>; /* ecc sata addr */
|
||||
reg-names = "sata-base", "ecc-addr";
|
||||
interrupts = <0 69 4>;
|
||||
clocks = <&clockgen 4 0>;
|
||||
status = "disabled";
|
||||
|
|
88
arch/arm/dts/fsl-ls1028a-qds.dts
Normal file
88
arch/arm/dts/fsl-ls1028a-qds.dts
Normal file
|
@ -0,0 +1,88 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+ OR X11
|
||||
/*
|
||||
* NXP ls1028AQDS device tree source
|
||||
*
|
||||
* Copyright 2019 NXP
|
||||
*
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
|
||||
#include "fsl-ls1028a.dtsi"
|
||||
|
||||
/ {
|
||||
model = "NXP Layerscape 1028a QDS Board";
|
||||
compatible = "fsl,ls1028a-qds", "fsl,ls1028a";
|
||||
};
|
||||
|
||||
&dspi0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&dspi1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&dspi2 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&esdhc0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&esdhc1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c2 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c3 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c4 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c5 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c6 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c7 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&sata {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&serial0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&serial1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb2 {
|
||||
status = "okay";
|
||||
};
|
88
arch/arm/dts/fsl-ls1028a-rdb.dts
Normal file
88
arch/arm/dts/fsl-ls1028a-rdb.dts
Normal file
|
@ -0,0 +1,88 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+ OR X11
|
||||
/*
|
||||
* NXP ls1028ARDB device tree source
|
||||
*
|
||||
* Copyright 2019 NXP
|
||||
*
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
|
||||
#include "fsl-ls1028a.dtsi"
|
||||
|
||||
/ {
|
||||
model = "NXP Layerscape 1028a RDB Board";
|
||||
compatible = "fsl,ls1028a-rdb", "fsl,ls1028a";
|
||||
};
|
||||
|
||||
&dspi0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&dspi1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&dspi2 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&esdhc0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&esdhc1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c2 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c3 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c4 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c5 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c6 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&i2c7 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&sata {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&serial0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&serial1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&usb2 {
|
||||
status = "okay";
|
||||
};
|
285
arch/arm/dts/fsl-ls1028a.dtsi
Normal file
285
arch/arm/dts/fsl-ls1028a.dtsi
Normal file
|
@ -0,0 +1,285 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+ OR X11
|
||||
/*
|
||||
* NXP ls1028a SOC common device tree source
|
||||
*
|
||||
* Copyright 2019 NXP
|
||||
*
|
||||
*/
|
||||
|
||||
/ {
|
||||
compatible = "fsl,ls1028a";
|
||||
interrupt-parent = <&gic>;
|
||||
#address-cells = <2>;
|
||||
#size-cells = <2>;
|
||||
|
||||
sysclk: sysclk {
|
||||
compatible = "fixed-clock";
|
||||
#clock-cells = <0>;
|
||||
clock-frequency = <100000000>;
|
||||
clock-output-names = "sysclk";
|
||||
};
|
||||
|
||||
clockgen: clocking@1300000 {
|
||||
compatible = "fsl,ls1028a-clockgen";
|
||||
reg = <0x0 0x1300000 0x0 0xa0000>;
|
||||
#clock-cells = <2>;
|
||||
clocks = <&sysclk>;
|
||||
};
|
||||
|
||||
memory@01080000 {
|
||||
device_type = "memory";
|
||||
reg = <0x00000000 0x01080000 0 0x80000000>;
|
||||
/* DRAM space - 1, size : 2 GB DRAM */
|
||||
};
|
||||
|
||||
gic: interrupt-controller@6000000 {
|
||||
compatible = "arm,gic-v3";
|
||||
reg = <0x0 0x06000000 0 0x10000>, /* GIC Dist */
|
||||
<0x0 0x06040000 0 0x40000>;
|
||||
#interrupt-cells = <3>;
|
||||
interrupt-controller;
|
||||
interrupts = <1 9 0x4>;
|
||||
};
|
||||
|
||||
timer {
|
||||
compatible = "arm,armv8-timer";
|
||||
interrupts = <1 13 0x8>, /* Physical Secure PPI, active-low */
|
||||
<1 14 0x8>, /* Physical Non-Secure PPI, active-low */
|
||||
<1 11 0x8>, /* Virtual PPI, active-low */
|
||||
<1 10 0x8>; /* Hypervisor PPI, active-low */
|
||||
};
|
||||
|
||||
fspi: flexspi@20C0000 {
|
||||
compatible = "nxp,dn-fspi";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <0x0 0x20C0000 0x0 0x10000>,
|
||||
<0x0 0x20000000 0x0 0x10000000>; /*64MB flash*/
|
||||
reg-names = "FSPI", "FSPI-memory";
|
||||
num-cs = <1>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
serial0: serial@21c0500 {
|
||||
device_type = "serial";
|
||||
compatible = "fsl,ns16550", "ns16550a";
|
||||
reg = <0x0 0x21c0500 0x0 0x100>;
|
||||
interrupts = <0 32 0x1>; /* edge triggered */
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
serial1: serial@21c0600 {
|
||||
device_type = "serial";
|
||||
compatible = "fsl,ns16550", "ns16550a";
|
||||
reg = <0x0 0x21c0600 0x0 0x100>;
|
||||
interrupts = <0 32 0x1>; /* edge triggered */
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
pcie@3400000 {
|
||||
compatible = "fsl,ls-pcie", "fsl,ls1028-pcie", "snps,dw-pcie";
|
||||
reg = <0x00 0x03400000 0x0 0x80000
|
||||
0x00 0x03480000 0x0 0x40000 /* lut registers */
|
||||
0x00 0x034c0000 0x0 0x40000 /* pf controls registers */
|
||||
0x80 0x00000000 0x0 0x20000>; /* configuration space */
|
||||
reg-names = "dbi", "lut", "ctrl", "config";
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
device_type = "pci";
|
||||
num-lanes = <4>;
|
||||
bus-range = <0x0 0xff>;
|
||||
ranges = <0x81000000 0x0 0x00000000 0x80 0x00020000 0x0 0x00010000 /* downstream I/O */
|
||||
0x82000000 0x0 0x40000000 0x80 0x40000000 0x0 0x40000000>; /* non-prefetchable memory */
|
||||
};
|
||||
|
||||
pcie@3500000 {
|
||||
compatible = "fsl,ls-pcie", "fsl,ls1028-pcie", "snps,dw-pcie";
|
||||
reg = <0x00 0x03500000 0x0 0x80000
|
||||
0x00 0x03580000 0x0 0x40000 /* lut registers */
|
||||
0x00 0x035c0000 0x0 0x40000 /* pf controls registers */
|
||||
0x88 0x00000000 0x0 0x20000>; /* configuration space */
|
||||
reg-names = "dbi", "lut", "ctrl", "config";
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
device_type = "pci";
|
||||
num-lanes = <4>;
|
||||
bus-range = <0x0 0xff>;
|
||||
ranges = <0x81000000 0x0 0x00000000 0x88 0x00020000 0x0 0x00010000 /* downstream I/O */
|
||||
0x82000000 0x0 0x40000000 0x88 0x40000000 0x0 0x40000000>; /* non-prefetchable memory */
|
||||
};
|
||||
|
||||
i2c0: i2c@2000000 {
|
||||
compatible = "fsl,vf610-i2c";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <0x0 0x2000000 0x0 0x10000>;
|
||||
interrupts = <0 34 0x4>;
|
||||
clock-names = "i2c";
|
||||
clocks = <&clockgen 4 0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c1: i2c@2010000 {
|
||||
compatible = "fsl,vf610-i2c";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <0x0 0x2010000 0x0 0x10000>;
|
||||
interrupts = <0 34 0x4>;
|
||||
clock-names = "i2c";
|
||||
clocks = <&clockgen 4 0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c2: i2c@2020000 {
|
||||
compatible = "fsl,vf610-i2c";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <0x0 0x2020000 0x0 0x10000>;
|
||||
interrupts = <0 35 0x4>;
|
||||
clock-names = "i2c";
|
||||
clocks = <&clockgen 4 0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c3: i2c@2030000 {
|
||||
compatible = "fsl,vf610-i2c";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <0x0 0x2030000 0x0 0x10000>;
|
||||
interrupts = <0 35 0x4>;
|
||||
clock-names = "i2c";
|
||||
clocks = <&clockgen 4 0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c4: i2c@2040000 {
|
||||
compatible = "fsl,vf610-i2c";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <0x0 0x2040000 0x0 0x10000>;
|
||||
interrupts = <0 74 0x4>;
|
||||
clock-names = "i2c";
|
||||
clocks = <&clockgen 4 0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c5: i2c@2050000 {
|
||||
compatible = "fsl,vf610-i2c";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <0x0 0x2050000 0x0 0x10000>;
|
||||
interrupts = <0 74 0x4>;
|
||||
clock-names = "i2c";
|
||||
clocks = <&clockgen 4 0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c6: i2c@2060000 {
|
||||
compatible = "fsl,vf610-i2c";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <0x0 0x2060000 0x0 0x10000>;
|
||||
interrupts = <0 75 0x4>;
|
||||
clock-names = "i2c";
|
||||
clocks = <&clockgen 4 0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
i2c7: i2c@2070000 {
|
||||
compatible = "fsl,vf610-i2c";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <0x0 0x2070000 0x0 0x10000>;
|
||||
interrupts = <0 75 0x4>;
|
||||
clock-names = "i2c";
|
||||
clocks = <&clockgen 4 0>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usb1: usb3@3100000 {
|
||||
compatible = "fsl,layerscape-dwc3";
|
||||
reg = <0x0 0x3100000 0x0 0x10000>;
|
||||
interrupts = <0 80 0x4>;
|
||||
dr_mode = "host";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
usb2: usb3@3110000 {
|
||||
compatible = "fsl,layerscape-dwc3";
|
||||
reg = <0x0 0x3110000 0x0 0x10000>;
|
||||
interrupts = <0 81 0x4>;
|
||||
dr_mode = "host";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
dspi0: dspi@2100000 {
|
||||
compatible = "fsl,vf610-dspi";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <0x0 0x2100000 0x0 0x10000>;
|
||||
interrupts = <0 26 0x4>;
|
||||
clock-names = "dspi";
|
||||
clocks = <&clockgen 4 0>;
|
||||
num-cs = <5>;
|
||||
litte-endian;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
dspi1: dspi@2110000 {
|
||||
compatible = "fsl,vf610-dspi";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <0x0 0x2110000 0x0 0x10000>;
|
||||
interrupts = <0 26 0x4>;
|
||||
clock-names = "dspi";
|
||||
clocks = <&clockgen 4 0>;
|
||||
num-cs = <5>;
|
||||
little-endian;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
dspi2: dspi@2120000 {
|
||||
compatible = "fsl,vf610-dspi";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
reg = <0x0 0x2120000 0x0 0x10000>;
|
||||
interrupts = <0 26 0x4>;
|
||||
clock-names = "dspi";
|
||||
clocks = <&clockgen 4 0>;
|
||||
num-cs = <5>;
|
||||
little-endian;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
esdhc0: esdhc@2140000 {
|
||||
compatible = "fsl,esdhc";
|
||||
reg = <0x0 0x2140000 0x0 0x10000>;
|
||||
interrupts = <0 28 0x4>;
|
||||
big-endian;
|
||||
bus-width = <4>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
esdhc1: esdhc@2150000 {
|
||||
compatible = "fsl,esdhc";
|
||||
reg = <0x0 0x2150000 0x0 0x10000>;
|
||||
interrupts = <0 63 0x4>;
|
||||
big-endian;
|
||||
non-removable;
|
||||
bus-width = <4>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
sata: sata@3200000 {
|
||||
compatible = "fsl,ls1028a-ahci";
|
||||
reg = <0x0 0x3200000 0x0 0x10000>;
|
||||
interrupts = <0 133 4>;
|
||||
clocks = <&clockgen 4 1>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
cluster1_core0_watchdog: wdt@c000000 {
|
||||
compatible = "arm,sp805-wdt";
|
||||
reg = <0x0 0xc000000 0x0 0x1000>;
|
||||
};
|
||||
};
|
|
@ -290,7 +290,9 @@
|
|||
|
||||
sata: sata@3200000 {
|
||||
compatible = "fsl,ls1043a-ahci";
|
||||
reg = <0x0 0x3200000 0x0 0x10000>;
|
||||
reg = <0x0 0x3200000 0x0 0x10000 /* ccsr sata base */
|
||||
0x0 0x20140520 0x0 0x4>; /* ecc sata addr*/
|
||||
reg-names = "sata-base", "ecc-addr";
|
||||
interrupts = <0 69 4>;
|
||||
clocks = <&clockgen 4 0>;
|
||||
status = "disabled";
|
||||
|
|
|
@ -294,7 +294,9 @@
|
|||
|
||||
sata: sata@3200000 {
|
||||
compatible = "fsl,ls1046a-ahci";
|
||||
reg = <0x0 0x3200000 0x0 0x10000>;
|
||||
reg = <0x0 0x3200000 0x0 0x10000 /* ccsr sata base */
|
||||
0x0 0x20140520 0x0 0x4>; /* ecc sata addr*/
|
||||
reg-names = "sata-base", "ecc-addr";
|
||||
interrupts = <0 69 4>;
|
||||
clocks = <&clockgen 4 1>;
|
||||
status = "disabled";
|
||||
|
|
|
@ -153,7 +153,9 @@
|
|||
|
||||
sata: sata@3200000 {
|
||||
compatible = "fsl,ls1088a-ahci";
|
||||
reg = <0x0 0x3200000 0x0 0x10000>;
|
||||
reg = <0x0 0x3200000 0x0 0x10000 /* ccsr sata base */
|
||||
0x7 0x100520 0x0 0x4>; /* ecc sata addr*/
|
||||
reg-names = "sata-base", "ecc-addr";
|
||||
interrupts = <0 133 4>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
|
|
@ -176,4 +176,89 @@
|
|||
status = "disabled";
|
||||
|
||||
};
|
||||
|
||||
pcie@3400000 {
|
||||
compatible = "fsl,lx2160a-pcie";
|
||||
reg = <0x00 0x03400000 0x0 0x80000 /* PAB registers */
|
||||
0x00 0x03480000 0x0 0x40000 /* LUT registers */
|
||||
0x00 0x034c0000 0x0 0x40000 /* PF control registers */
|
||||
0x80 0x00000000 0x0 0x1000>; /* configuration space */
|
||||
reg-names = "ccsr", "lut", "pf_ctrl", "config";
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
device_type = "pci";
|
||||
bus-range = <0x0 0xff>;
|
||||
ranges = <0x82000000 0x0 0x40000000 0x80 0x40000000 0x0 0x40000000>;
|
||||
};
|
||||
|
||||
pcie@3500000 {
|
||||
compatible = "fsl,lx2160a-pcie";
|
||||
reg = <0x00 0x03500000 0x0 0x80000 /* PAB registers */
|
||||
0x00 0x03580000 0x0 0x40000 /* LUT registers */
|
||||
0x00 0x035c0000 0x0 0x40000 /* PF control registers */
|
||||
0x88 0x00000000 0x0 0x1000>; /* configuration space */
|
||||
reg-names = "ccsr", "lut", "pf_ctrl", "config";
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
device_type = "pci";
|
||||
num-lanes = <2>;
|
||||
bus-range = <0x0 0xff>;
|
||||
ranges = <0x82000000 0x0 0x40000000 0x88 0x40000000 0x0 0x40000000>;
|
||||
};
|
||||
|
||||
pcie@3600000 {
|
||||
compatible = "fsl,lx2160a-pcie";
|
||||
reg = <0x00 0x03600000 0x0 0x80000 /* PAB registers */
|
||||
0x00 0x03680000 0x0 0x40000 /* LUT registers */
|
||||
0x00 0x036c0000 0x0 0x40000 /* PF control registers */
|
||||
0x90 0x00000000 0x0 0x1000>; /* configuration space */
|
||||
reg-names = "ccsr", "lut", "pf_ctrl", "config";
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
device_type = "pci";
|
||||
bus-range = <0x0 0xff>;
|
||||
ranges = <0x82000000 0x0 0x40000000 0x90 0x40000000 0x0 0x40000000>;
|
||||
};
|
||||
|
||||
pcie@3700000 {
|
||||
compatible = "fsl,lx2160a-pcie";
|
||||
reg = <0x00 0x03700000 0x0 0x80000 /* PAB registers */
|
||||
0x00 0x03780000 0x0 0x40000 /* LUT registers */
|
||||
0x00 0x037c0000 0x0 0x40000 /* PF control registers */
|
||||
0x98 0x00000000 0x0 0x1000>; /* configuration space */
|
||||
reg-names = "ccsr", "lut", "pf_ctrl", "config";
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
device_type = "pci";
|
||||
bus-range = <0x0 0xff>;
|
||||
ranges = <0x82000000 0x0 0x40000000 0x98 0x40000000 0x0 0x40000000>;
|
||||
};
|
||||
|
||||
pcie@3800000 {
|
||||
compatible = "fsl,lx2160a-pcie";
|
||||
reg = <0x00 0x03800000 0x0 0x80000 /* PAB registers */
|
||||
0x00 0x03880000 0x0 0x40000 /* LUT registers */
|
||||
0x00 0x038c0000 0x0 0x40000 /* PF control registers */
|
||||
0xa0 0x00000000 0x0 0x1000>; /* configuration space */
|
||||
reg-names = "ccsr", "lut", "pf_ctrl", "config";
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
device_type = "pci";
|
||||
bus-range = <0x0 0xff>;
|
||||
ranges = <0x82000000 0x0 0x40000000 0xa0 0x40000000 0x0 0x40000000>;
|
||||
};
|
||||
|
||||
pcie@3900000 {
|
||||
compatible = "fsl,lx2160a-pcie";
|
||||
reg = <0x00 0x03900000 0x0 0x80000 /* PAB registers */
|
||||
0x00 0x03980000 0x0 0x40000 /* LUT registers */
|
||||
0x00 0x039c0000 0x0 0x40000 /* PF control registers */
|
||||
0xa8 0x00000000 0x0 0x1000>; /* configuration space */
|
||||
reg-names = "ccsr", "lut", "pf_ctrl", "config";
|
||||
#address-cells = <3>;
|
||||
#size-cells = <2>;
|
||||
device_type = "pci";
|
||||
bus-range = <0x0 0xff>;
|
||||
ranges = <0x82000000 0x0 0x40000000 0xa8 0x40000000 0x0 0x40000000>;
|
||||
};
|
||||
};
|
||||
|
|
|
@ -406,7 +406,9 @@
|
|||
|
||||
sata: sata@3200000 {
|
||||
compatible = "fsl,ls1021a-ahci";
|
||||
reg = <0x3200000 0x10000>;
|
||||
reg = <0x0 0x3200000 0x0 0x10000 /* ccsr sata base */
|
||||
0x0 0x20220520 0x0 0x4>; /* ecc sata addr*/
|
||||
reg-names = "sata-base", "ecc-addr";
|
||||
interrupts = <0 101 4>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
|
|
@ -229,6 +229,67 @@
|
|||
|
||||
#define CONFIG_SYS_FSL_MAX_NUM_OF_SEC 1
|
||||
|
||||
#elif defined(CONFIG_ARCH_LS1028A)
|
||||
#define CONFIG_SYS_FSL_NUM_CC_PLLS 3
|
||||
#define CONFIG_SYS_FSL_CLUSTER_CLOCKS { 1, 1 }
|
||||
#define CONFIG_GICV3
|
||||
#define CONFIG_FSL_TZPC_BP147
|
||||
#define CONFIG_FSL_TZASC_400
|
||||
|
||||
/* TZ Protection Controller Definitions */
|
||||
#define TZPC_BASE 0x02200000
|
||||
#define TZPCR0SIZE_BASE (TZPC_BASE)
|
||||
#define TZPCDECPROT_0_STAT_BASE (TZPC_BASE + 0x800)
|
||||
#define TZPCDECPROT_0_SET_BASE (TZPC_BASE + 0x804)
|
||||
#define TZPCDECPROT_0_CLR_BASE (TZPC_BASE + 0x808)
|
||||
#define TZPCDECPROT_1_STAT_BASE (TZPC_BASE + 0x80C)
|
||||
#define TZPCDECPROT_1_SET_BASE (TZPC_BASE + 0x810)
|
||||
#define TZPCDECPROT_1_CLR_BASE (TZPC_BASE + 0x814)
|
||||
#define TZPCDECPROT_2_STAT_BASE (TZPC_BASE + 0x818)
|
||||
#define TZPCDECPROT_2_SET_BASE (TZPC_BASE + 0x81C)
|
||||
#define TZPCDECPROT_2_CLR_BASE (TZPC_BASE + 0x820)
|
||||
|
||||
#define SRDS_MAX_LANES 4
|
||||
|
||||
#define CONFIG_SYS_FSL_OCRAM_BASE 0x18000000 /* initial RAM */
|
||||
#define SYS_FSL_OCRAM_SPACE_SIZE 0x00200000 /* 2M */
|
||||
#define CONFIG_SYS_FSL_OCRAM_SIZE 0x00040000 /* Real size 256K */
|
||||
|
||||
/* Generic Interrupt Controller Definitions */
|
||||
#define GICD_BASE 0x06000000
|
||||
#define GICR_BASE 0x06040000
|
||||
|
||||
/* SMMU Definitions */
|
||||
#define SMMU_BASE 0x05000000 /* GR0 Base */
|
||||
|
||||
/* DDR */
|
||||
#define CONFIG_SYS_DDR_BLOCK1_SIZE ((phys_size_t)2 << 30)
|
||||
#define CONFIG_MAX_MEM_MAPPED CONFIG_SYS_DDR_BLOCK1_SIZE
|
||||
|
||||
#define CONFIG_SYS_FSL_CCSR_GUR_LE
|
||||
#define CONFIG_SYS_FSL_CCSR_SCFG_LE
|
||||
#define CONFIG_SYS_FSL_ESDHC_LE
|
||||
#define CONFIG_SYS_FSL_PEX_LUT_LE
|
||||
|
||||
#define CONFIG_SYS_MEMAC_LITTLE_ENDIAN
|
||||
|
||||
/* SFP */
|
||||
#define CONFIG_SYS_FSL_SFP_VER_3_4
|
||||
#define CONFIG_SYS_FSL_SFP_LE
|
||||
#define CONFIG_SYS_FSL_SRK_LE
|
||||
|
||||
/* SEC */
|
||||
#define CONFIG_SYS_FSL_MAX_NUM_OF_SEC 1
|
||||
|
||||
/* Security Monitor */
|
||||
#define CONFIG_SYS_FSL_SEC_MON_LE
|
||||
|
||||
/* Secure Boot */
|
||||
#define CONFIG_ESBC_HDR_LS
|
||||
|
||||
/* DCFG - GUR */
|
||||
#define CONFIG_SYS_FSL_CCSR_GUR_LE
|
||||
|
||||
#elif defined(CONFIG_FSL_LSCH2)
|
||||
#define CONFIG_SYS_FSL_OCRAM_BASE 0x10000000 /* initial RAM */
|
||||
#define SYS_FSL_OCRAM_SPACE_SIZE 0x00200000 /* 2M space */
|
||||
|
|
|
@ -34,10 +34,19 @@
|
|||
#define CONFIG_SYS_FSL_QBMAN_BASE 0x818000000
|
||||
#define CONFIG_SYS_FSL_QBMAN_SIZE 0x8000000
|
||||
#define CONFIG_SYS_FSL_QBMAN_SIZE_1 0x4000000
|
||||
#ifdef CONFIG_ARCH_LS2080A
|
||||
#define CONFIG_SYS_PCIE1_PHYS_SIZE 0x200000000
|
||||
#define CONFIG_SYS_PCIE2_PHYS_SIZE 0x200000000
|
||||
#define CONFIG_SYS_PCIE3_PHYS_SIZE 0x200000000
|
||||
#define CONFIG_SYS_PCIE4_PHYS_SIZE 0x200000000
|
||||
#else
|
||||
#define CONFIG_SYS_PCIE1_PHYS_SIZE 0x800000000
|
||||
#define CONFIG_SYS_PCIE2_PHYS_SIZE 0x800000000
|
||||
#define CONFIG_SYS_PCIE3_PHYS_SIZE 0x800000000
|
||||
#define CONFIG_SYS_PCIE4_PHYS_SIZE 0x800000000
|
||||
#define SYS_PCIE5_PHYS_SIZE 0x800000000
|
||||
#define SYS_PCIE6_PHYS_SIZE 0x800000000
|
||||
#endif
|
||||
#define CONFIG_SYS_FSL_WRIOP1_BASE 0x4300000000
|
||||
#define CONFIG_SYS_FSL_WRIOP1_SIZE 0x100000000
|
||||
#define CONFIG_SYS_FSL_AIOP1_BASE 0x4b00000000
|
||||
|
|
|
@ -167,10 +167,25 @@
|
|||
#define CONFIG_SYS_PCIE2_ADDR (CONFIG_SYS_IMMR + 0x2500000)
|
||||
#define CONFIG_SYS_PCIE3_ADDR (CONFIG_SYS_IMMR + 0x2600000)
|
||||
#define CONFIG_SYS_PCIE4_ADDR (CONFIG_SYS_IMMR + 0x2700000)
|
||||
#ifdef CONFIG_ARCH_LS1088A
|
||||
#ifdef CONFIG_ARCH_LX2160A
|
||||
#define SYS_PCIE5_ADDR (CONFIG_SYS_IMMR + 0x2800000)
|
||||
#define SYS_PCIE6_ADDR (CONFIG_SYS_IMMR + 0x2900000)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARCH_LX2160A
|
||||
#define CONFIG_SYS_PCIE1_PHYS_ADDR 0x8000000000ULL
|
||||
#define CONFIG_SYS_PCIE2_PHYS_ADDR 0x8800000000ULL
|
||||
#define CONFIG_SYS_PCIE3_PHYS_ADDR 0x9000000000ULL
|
||||
#define CONFIG_SYS_PCIE4_PHYS_ADDR 0x9800000000ULL
|
||||
#define SYS_PCIE5_PHYS_ADDR 0xa000000000ULL
|
||||
#define SYS_PCIE6_PHYS_ADDR 0xa800000000ULL
|
||||
#elif CONFIG_ARCH_LS1088A
|
||||
#define CONFIG_SYS_PCIE1_PHYS_ADDR 0x2000000000ULL
|
||||
#define CONFIG_SYS_PCIE2_PHYS_ADDR 0x2800000000ULL
|
||||
#define CONFIG_SYS_PCIE3_PHYS_ADDR 0x3000000000ULL
|
||||
#elif CONFIG_ARCH_LS1028A
|
||||
#define CONFIG_SYS_PCIE1_PHYS_ADDR 0x8000000000ULL
|
||||
#define CONFIG_SYS_PCIE2_PHYS_ADDR 0x8800000000ULL
|
||||
#else
|
||||
#define CONFIG_SYS_PCIE1_PHYS_ADDR 0x1000000000ULL
|
||||
#define CONFIG_SYS_PCIE2_PHYS_ADDR 0x1200000000ULL
|
||||
|
@ -375,6 +390,12 @@ struct ccsr_gur {
|
|||
#define FSL_CHASSIS3_SRDS2_PRTCL_SHIFT FSL_CHASSIS3_RCWSR30_SRDS2_PRTCL_SHIFT
|
||||
#define FSL_CHASSIS3_SRDS1_REGSR 29
|
||||
#define FSL_CHASSIS3_SRDS2_REGSR 30
|
||||
#elif defined(CONFIG_ARCH_LS1028A)
|
||||
#define FSL_CHASSIS3_RCWSR29_SRDS1_PRTCL_MASK 0xFFFF0000
|
||||
#define FSL_CHASSIS3_RCWSR29_SRDS1_PRTCL_SHIFT 16
|
||||
#define FSL_CHASSIS3_SRDS1_PRTCL_MASK FSL_CHASSIS3_RCWSR29_SRDS1_PRTCL_MASK
|
||||
#define FSL_CHASSIS3_SRDS1_PRTCL_SHIFT FSL_CHASSIS3_RCWSR29_SRDS1_PRTCL_SHIFT
|
||||
#define FSL_CHASSIS3_SRDS1_REGSR 29
|
||||
#endif
|
||||
#define RCW_SB_EN_REG_INDEX 9
|
||||
#define RCW_SB_EN_MASK 0x00000400
|
||||
|
|
|
@ -83,6 +83,7 @@ enum boot_src get_boot_src(void);
|
|||
/* LS1043A/LS1023A 23x23 package silicon has different value of VAR_PER */
|
||||
#define SVR_LS1043A_P23 0x879202
|
||||
#define SVR_LS1023A_P23 0x87920A
|
||||
#define SVR_LS1028A 0x870B00
|
||||
#define SVR_LS1046A 0x870700
|
||||
#define SVR_LS1026A 0x870708
|
||||
#define SVR_LS1048A 0x870320
|
||||
|
|
|
@ -87,7 +87,7 @@
|
|||
#define FSL_PEX_STREAM_ID_NUM (0x100)
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_ARCH_LS2080A)
|
||||
#if defined(CONFIG_ARCH_LS2080A) || defined(CONFIG_ARCH_LS1028A)
|
||||
#define FSL_PEX_STREAM_ID_END 22
|
||||
#elif defined(CONFIG_ARCH_LS1088A)
|
||||
#define FSL_PEX_STREAM_ID_END 18
|
||||
|
|
65
board/freescale/ls1028a/Kconfig
Normal file
65
board/freescale/ls1028a/Kconfig
Normal file
|
@ -0,0 +1,65 @@
|
|||
if TARGET_LS1028AQDS
|
||||
|
||||
config SYS_BOARD
|
||||
default "ls1028a"
|
||||
|
||||
config SYS_VENDOR
|
||||
default "freescale"
|
||||
|
||||
config SYS_SOC
|
||||
default "fsl-layerscape"
|
||||
|
||||
config SYS_CONFIG_NAME
|
||||
default "ls1028aqds"
|
||||
|
||||
config EMMC_BOOT
|
||||
bool "Support for booting from EMMC"
|
||||
default n
|
||||
|
||||
config SYS_TEXT_BASE
|
||||
default 0x96000000 if SD_BOOT || EMMC_BOOT
|
||||
default 0x82000000 if TFABOOT
|
||||
default 0x20100000
|
||||
|
||||
if FSL_LS_PPA
|
||||
config SYS_LS_PPA_FW_ADDR
|
||||
hex "PPA Firmware Addr"
|
||||
default 0x20400000 if SYS_LS_PPA_FW_IN_XIP && ARCH_LS1028A
|
||||
default 0x400000 if SYS_LS_PPA_FW_IN_MMC && ARCH_LS1028A
|
||||
if CHAIN_OF_TRUST
|
||||
config SYS_LS_PPA_ESBC_ADDR
|
||||
hex "PPA header Addr"
|
||||
default 0x20600000 if SYS_LS_PPA_FW_IN_XIP && ARCH_LS1028A
|
||||
endif
|
||||
endif
|
||||
|
||||
source "board/freescale/common/Kconfig"
|
||||
|
||||
endif
|
||||
|
||||
if TARGET_LS1028ARDB
|
||||
|
||||
config SYS_BOARD
|
||||
default "ls1028a"
|
||||
|
||||
config SYS_VENDOR
|
||||
default "freescale"
|
||||
|
||||
config SYS_SOC
|
||||
default "fsl-layerscape"
|
||||
|
||||
config SYS_CONFIG_NAME
|
||||
default "ls1028ardb"
|
||||
|
||||
config EMMC_BOOT
|
||||
bool "Support for booting from EMMC"
|
||||
default n
|
||||
|
||||
config SYS_TEXT_BASE
|
||||
default 0x96000000 if SD_BOOT || EMMC_BOOT
|
||||
default 0x82000000 if TFABOOT
|
||||
default 0x20100000
|
||||
|
||||
source "board/freescale/common/Kconfig"
|
||||
|
||||
endif
|
21
board/freescale/ls1028a/MAINTAINERS
Normal file
21
board/freescale/ls1028a/MAINTAINERS
Normal file
|
@ -0,0 +1,21 @@
|
|||
LS1028AQDS BOARD
|
||||
M: Sudhanshu Gupta <sudhanshu.gupta@nxp.com>
|
||||
M: Rai Harninder <harninder.rai@nxp.com>
|
||||
M: Rajesh Bhagat <rajesh.bhagat@nxp.com>
|
||||
M: Tang Yuantian <andy.tang@nxp.com>
|
||||
S: Maintained
|
||||
F: board/freescale/ls1028a/
|
||||
F: include/configs/ls1028a_common.h
|
||||
F: include/configs/ls1028aqds.h
|
||||
F: configs/ls1028aqds_tfa_defconfig
|
||||
|
||||
LS1028ARDB BOARD
|
||||
M: Sudhanshu Gupta <sudhanshu.gupta@nxp.com>
|
||||
M: Rai Harninder <harninder.rai@nxp.com>
|
||||
M: Rajesh Bhagat <rajesh.bhagat@nxp.com>
|
||||
M: Tang Yuantian <andy.tang@nxp.com>
|
||||
S: Maintained
|
||||
F: board/freescale/ls1028a/
|
||||
F: include/configs/ls1028a_common.h
|
||||
F: include/configs/ls1028ardb.h
|
||||
F: configs/ls1028ardb_tfa_defconfig
|
8
board/freescale/ls1028a/Makefile
Normal file
8
board/freescale/ls1028a/Makefile
Normal file
|
@ -0,0 +1,8 @@
|
|||
#
|
||||
# Copyright 2019 NXP
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
obj-y += ls1028a.o
|
||||
obj-y += ddr.o
|
164
board/freescale/ls1028a/README
Normal file
164
board/freescale/ls1028a/README
Normal file
|
@ -0,0 +1,164 @@
|
|||
Overview
|
||||
--------
|
||||
The LS1028A Reference Design (RDB) is a high-performance computing,
|
||||
evaluation, and development platform that supports ARM SoC LS1028A and its
|
||||
derivatives.
|
||||
|
||||
LS1028A SoC Overview
|
||||
--------------------------------------
|
||||
Please refer arch/arm/cpu/armv8/fsl-layerscape/doc/README.soc
|
||||
|
||||
RDB Default Switch Settings (1: ON; 0: OFF)
|
||||
-------------------------------------------
|
||||
For XSPI NOR boot (default)
|
||||
SW2: 1111_1000
|
||||
SW3: 1111_0000
|
||||
SW5: 0011_1001
|
||||
|
||||
For SD Boot
|
||||
SW2: 1000_1000
|
||||
SW3: 1111_0000
|
||||
SW5: 0011_1001
|
||||
|
||||
For eMMC Boot
|
||||
SW2: 1001_1000
|
||||
SW3: 1111_0000
|
||||
SW5: 0011_1001
|
||||
|
||||
LS1028ARDB board Overview
|
||||
-------------------------
|
||||
Processor
|
||||
Two Arm Cortex- A72 processor cores:
|
||||
- Based on 64-bit ARMv8 architecture
|
||||
- Up to 1.3 GHz operation
|
||||
- Single-threaded cores with 48 KB L1 instruction cache and 32 KB L1
|
||||
data cache
|
||||
- Arranged as a single cluster of two cores sharing a single 1 MB L2
|
||||
cache
|
||||
DDR memory
|
||||
- Five onboard 1G x8 discrete memory modules (Four data byte lanes
|
||||
ECC)
|
||||
- 32-bit data and 4-bit ECC
|
||||
- One chip select
|
||||
- Data transfer rates of up to 1.6 GT/s
|
||||
- Single-bit error correction and double-bit error detection ECC (4-bit
|
||||
check word across 32-bit data)
|
||||
High-speed serial ports(SerDes)
|
||||
- Lane 0: Supports one 1 GbE RJ45 SGMII, connected through the
|
||||
Qualcomm AR8033 PHY
|
||||
- Lane 1: Supports four 1.25 GbE RJ45 QSGMII, each connected
|
||||
through the NXP F104S8A PHY
|
||||
- Lane 2: Connects to one PCIe M.2 Key-E slot to support PCIe Gen3
|
||||
(8 Gbit/s) cards
|
||||
- Lane 3: Connects to one PCIe M.2 Key-E slot or one SATA M.2 Key-B
|
||||
slot through a register mux to support either PCIe Gen 3 (8 Gbit/s) or
|
||||
SATA Gen 3 cards (6 Gbit/s) at a time
|
||||
eSDHC
|
||||
- eSDHC1, eSDHC2
|
||||
SPI
|
||||
- Connects to two mikroBUS sockets to support mikro-click modules,
|
||||
such as Bluetooth 4.0, 2.4 GHz IEEE 802.15.4 radio transceiver, near
|
||||
field communications (NFC) controller
|
||||
Octal SPI (XSPI)
|
||||
- One 256 MB onboard XSPI serial NOR flash memory
|
||||
- One 512 MB onboard XSPI serial NAND flash memory
|
||||
- Supports a QSPI emulator for offboard QSPI emulation
|
||||
I2C
|
||||
- All system devices are accessed via I2C1, which is multiplexed on
|
||||
I2C multiplexer PCA9848 to isolate address conflicts and reduce
|
||||
capacitive load
|
||||
- I2C1 is used for EEPROMs, RTC, INA220 current-power sensor,
|
||||
thermal monitor, PCIe/SATA M.2 connectors and mikro-click modules
|
||||
1 and 2
|
||||
CAN
|
||||
- The two CAN DB9 ports can support CAN FD fast phase at data rates of
|
||||
up to 5 Mbit/s
|
||||
Serial audio interface(SAI)
|
||||
- Audio codec SGTL5000 provides headphone and audio LINEOUT for
|
||||
stereo speakers
|
||||
- IEEE1588 interface to support audio on SAI4
|
||||
|
||||
QDS Default Switch Settings (1: ON; 0: OFF)
|
||||
-------------------------------------------
|
||||
For SD Boot
|
||||
SW1 : 1000_0000
|
||||
SW2 : 1110_0110
|
||||
SW3 : 0000_0010
|
||||
SW4 : 0000_0000
|
||||
SW5 : 0000_0000
|
||||
SW6 : 0000_0000
|
||||
SW7 : 1111_0011
|
||||
SW8 : 1110_0000
|
||||
SW9 : 1000_0001
|
||||
SW10: 1110_0000
|
||||
|
||||
For XSPI Boot
|
||||
SW1 : 1111_0000
|
||||
SW2 : 0000_0110
|
||||
SW3 : 0000_0010
|
||||
SW4 : 0000_0000
|
||||
SW5 : 0110_0000
|
||||
SW6 : 0101_0000
|
||||
SW7 : 1111_0011
|
||||
SW8 : 1110_0000
|
||||
SW9 : 1000_0000
|
||||
SW10: 1110_0000
|
||||
|
||||
LS1028AQDS board Overview
|
||||
-------------------------
|
||||
Processor
|
||||
Two Arm Cortex- A72 processor cores:
|
||||
- Based on 64-bit ARMv8 architecture
|
||||
- Up to 1.3 GHz operation
|
||||
- Single-threaded cores with 48 KB L1 instruction cache and 32 KB L1
|
||||
data cache
|
||||
- Arranged as a single cluster of two cores sharing a single 1 MB L2
|
||||
cache
|
||||
DDR memory
|
||||
- Supports data rates of up to 1.6 GT/s for both, DDR4 and DDR3L
|
||||
- Supports a single- or dual-ranked SODIMM or UDIMM connector
|
||||
- 32-bit data and 4-bit ECC
|
||||
- Supports x8/x16 devices
|
||||
- Supports ECC error detection and correction
|
||||
- 1.35 V or 1.2 V DDR power supply, with automatic tracking of VTT, to
|
||||
all devices in case of DDR3L or DDR4, respectively. Power can
|
||||
switch to 1.35 V or 1.2 V, based on the switch settings for DDR3L or
|
||||
DDR4 devices, respectively
|
||||
SerDes (Serializer/Deserializer)
|
||||
- Four-lane (0-3) SerDes:
|
||||
- Lane 0: supports PCIe Gen1/2/3 with x1, x2, and x4 operation, 10
|
||||
Gbit SXGMII, 1 Gbit SGMII
|
||||
- Lane 1: supports PCIe Gen1/2/3 with x1, x2, and x4 operation, 1 Gbit
|
||||
SGMII, 10 Gbit QXGMII, 5 Gbit QSGMII, 1 Gbit SGMII
|
||||
- Lane 2: supports PCIe Gen1/2/3 with x1, x2, and x4 operation, 1 Gbit
|
||||
SGMII
|
||||
- Lane 3: supports PCIe Gen1/2/3 with x1, x2, and x4 operation, 1 Gbit
|
||||
SGMII, SATA 2.0/3.0
|
||||
- Four slots on SerDes lanes support PCIe Gen1/2/3, 1 Gbit SGMII
|
||||
add-in cards
|
||||
- Lane 1 connects to a 2x10 connector with SFP+ through a retimer;
|
||||
lane 2 (TX lines) connects to an SMA connector
|
||||
Lane 3 connects to 1x7 header to support SATA devices
|
||||
eSDHC
|
||||
- eSDHC1, eSDHC2
|
||||
SPI
|
||||
- SPI1 and SPI2 support three onboard SPI flash memory devices:
|
||||
512 Mbit high-speed flash (with speed of up to 108/54 MHz)
|
||||
memory for storage
|
||||
4 Mbit low-speed flash memory (with speed of up to 40 MHz)
|
||||
64 Mbit high-speed flash memory (with speed of up to 104/80
|
||||
MHz)
|
||||
- SPI3 supports one onboard 64 Mbit SPI flash memory (with speed of
|
||||
up to 104/80 MHz)
|
||||
- All memories operate at 1.8 V
|
||||
- A header is provided on SPI1 to test SPI slave mode
|
||||
I2C
|
||||
- LS1028A supports eight I2C controllers
|
||||
Serial audio interface(SAI)
|
||||
Two SAI ports with audio codec SGTL5000:
|
||||
- Include stereo LINEIN with support for external analog input
|
||||
- Provide headphone and line output
|
||||
Display
|
||||
- DisplayPort connector to connect the DP data to a 4K display device
|
||||
(computer monitor)
|
||||
- eDP connector to connect the DP data to a 4K display panel
|
20
board/freescale/ls1028a/ddr.c
Normal file
20
board/freescale/ls1028a/ddr.c
Normal file
|
@ -0,0 +1,20 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+
|
||||
/*
|
||||
* Copyright 2019 NXP
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <fsl_ddr_sdram.h>
|
||||
#include <fsl_ddr_dimm_params.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
int fsl_initdram(void)
|
||||
{
|
||||
gd->ram_size = tfa_get_dram_size();
|
||||
|
||||
if (!gd->ram_size)
|
||||
gd->ram_size = fsl_ddr_sdram_size();
|
||||
|
||||
return 0;
|
||||
}
|
231
board/freescale/ls1028a/ls1028a.c
Normal file
231
board/freescale/ls1028a/ls1028a.c
Normal file
|
@ -0,0 +1,231 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+
|
||||
/*
|
||||
* Copyright 2019 NXP
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <malloc.h>
|
||||
#include <errno.h>
|
||||
#include <fsl_ddr.h>
|
||||
#include <asm/io.h>
|
||||
#include <hwconfig.h>
|
||||
#include <fdt_support.h>
|
||||
#include <linux/libfdt.h>
|
||||
#include <environment.h>
|
||||
#include <asm/arch-fsl-layerscape/soc.h>
|
||||
#include <i2c.h>
|
||||
#include <asm/arch/soc.h>
|
||||
#ifdef CONFIG_FSL_LS_PPA
|
||||
#include <asm/arch/ppa.h>
|
||||
#endif
|
||||
#include <fsl_immap.h>
|
||||
#include <netdev.h>
|
||||
|
||||
#include <fdtdec.h>
|
||||
#include <miiphy.h>
|
||||
#include "../common/qixis.h"
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
int config_board_mux(void)
|
||||
{
|
||||
#if defined(CONFIG_TARGET_LS1028AQDS) && defined(CONFIG_FSL_QIXIS)
|
||||
u8 reg;
|
||||
|
||||
reg = QIXIS_READ(brdcfg[13]);
|
||||
/* Field| Function
|
||||
* 7-6 | Controls I2C3 routing (net CFG_MUX_I2C3):
|
||||
* I2C3 | 10= Routes {SCL, SDA} to CAN1 transceiver as {TX, RX}.
|
||||
* 5-4 | Controls I2C4 routing (net CFG_MUX_I2C4):
|
||||
* I2C4 |11= Routes {SCL, SDA} to CAN2 transceiver as {TX, RX}.
|
||||
*/
|
||||
reg &= ~(0xf0);
|
||||
reg |= 0xb0;
|
||||
QIXIS_WRITE(brdcfg[13], reg);
|
||||
|
||||
reg = QIXIS_READ(brdcfg[15]);
|
||||
/* Field| Function
|
||||
* 7 | Controls the CAN1 transceiver (net CFG_CAN1_STBY):
|
||||
* CAN1 | 0= CAN #1 transceiver enabled
|
||||
* 6 | Controls the CAN2 transceiver (net CFG_CAN2_STBY):
|
||||
* CAN2 | 0= CAN #2 transceiver enabled
|
||||
*/
|
||||
reg &= ~(0xc0);
|
||||
QIXIS_WRITE(brdcfg[15], reg);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
int board_init(void)
|
||||
{
|
||||
#ifdef CONFIG_ENV_IS_NOWHERE
|
||||
gd->env_addr = (ulong)&default_environment[0];
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_FSL_LS_PPA
|
||||
ppa_init();
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_SYS_EARLY_PCI_INIT
|
||||
pci_init();
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_TARGET_LS1028ARDB)
|
||||
u8 val = I2C_MUX_CH_DEFAULT;
|
||||
|
||||
i2c_write(I2C_MUX_PCA_ADDR_PRI, 0x0b, 1, &val, 1);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
int board_eth_init(bd_t *bis)
|
||||
{
|
||||
return pci_eth_init(bis);
|
||||
}
|
||||
|
||||
#if defined(CONFIG_ARCH_MISC_INIT)
|
||||
int arch_misc_init(void)
|
||||
{
|
||||
config_board_mux();
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
int board_early_init_f(void)
|
||||
{
|
||||
#ifdef CONFIG_SYS_I2C_EARLY_INIT
|
||||
i2c_early_init_f();
|
||||
#endif
|
||||
|
||||
fsl_lsch3_early_init_f();
|
||||
return 0;
|
||||
}
|
||||
|
||||
void detail_board_ddr_info(void)
|
||||
{
|
||||
puts("\nDDR ");
|
||||
print_size(gd->bd->bi_dram[0].size + gd->bd->bi_dram[1].size, "");
|
||||
print_ddr_info(0);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_OF_BOARD_SETUP
|
||||
int ft_board_setup(void *blob, bd_t *bd)
|
||||
{
|
||||
u64 base[CONFIG_NR_DRAM_BANKS];
|
||||
u64 size[CONFIG_NR_DRAM_BANKS];
|
||||
|
||||
ft_cpu_setup(blob, bd);
|
||||
|
||||
/* fixup DT for the two GPP DDR banks */
|
||||
base[0] = gd->bd->bi_dram[0].start;
|
||||
size[0] = gd->bd->bi_dram[0].size;
|
||||
base[1] = gd->bd->bi_dram[1].start;
|
||||
size[1] = gd->bd->bi_dram[1].size;
|
||||
|
||||
#ifdef CONFIG_RESV_RAM
|
||||
/* reduce size if reserved memory is within this bank */
|
||||
if (gd->arch.resv_ram >= base[0] &&
|
||||
gd->arch.resv_ram < base[0] + size[0])
|
||||
size[0] = gd->arch.resv_ram - base[0];
|
||||
else if (gd->arch.resv_ram >= base[1] &&
|
||||
gd->arch.resv_ram < base[1] + size[1])
|
||||
size[1] = gd->arch.resv_ram - base[1];
|
||||
#endif
|
||||
|
||||
fdt_fixup_memory_banks(blob, base, size, 2);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_FSL_QIXIS
|
||||
int checkboard(void)
|
||||
{
|
||||
#ifdef CONFIG_TFABOOT
|
||||
enum boot_src src = get_boot_src();
|
||||
#endif
|
||||
u8 sw;
|
||||
|
||||
int clock;
|
||||
char *board;
|
||||
char buf[64] = {0};
|
||||
static const char *freq[6] = {"100.00", "125.00", "156.25",
|
||||
"161.13", "322.26", "100.00 SS"};
|
||||
|
||||
cpu_name(buf);
|
||||
/* find the board details */
|
||||
sw = QIXIS_READ(id);
|
||||
|
||||
switch (sw) {
|
||||
case 0x46:
|
||||
board = "QDS";
|
||||
break;
|
||||
case 0x47:
|
||||
board = "RDB";
|
||||
break;
|
||||
case 0x49:
|
||||
board = "HSSI";
|
||||
break;
|
||||
default:
|
||||
board = "unknown";
|
||||
break;
|
||||
}
|
||||
|
||||
sw = QIXIS_READ(arch);
|
||||
printf("Board: %s-%s, Version: %c, boot from ",
|
||||
buf, board, (sw & 0xf) + 'A' - 1);
|
||||
|
||||
sw = QIXIS_READ(brdcfg[0]);
|
||||
sw = (sw & QIXIS_LBMAP_MASK) >> QIXIS_LBMAP_SHIFT;
|
||||
|
||||
#ifdef CONFIG_TFABOOT
|
||||
if (src == BOOT_SOURCE_SD_MMC) {
|
||||
puts("SD\n");
|
||||
} else if (src == BOOT_SOURCE_SD_MMC2) {
|
||||
puts("eMMC\n");
|
||||
} else {
|
||||
#endif
|
||||
#ifdef CONFIG_SD_BOOT
|
||||
puts("SD\n");
|
||||
#elif defined(CONFIG_EMMC_BOOT)
|
||||
puts("eMMC\n");
|
||||
#else
|
||||
switch (sw) {
|
||||
case 0:
|
||||
case 4:
|
||||
printf("NOR\n");
|
||||
break;
|
||||
case 1:
|
||||
printf("NAND\n");
|
||||
break;
|
||||
default:
|
||||
printf("invalid setting of SW%u\n", QIXIS_LBMAP_SWITCH);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
#ifdef CONFIG_TFABOOT
|
||||
}
|
||||
#endif
|
||||
|
||||
printf("FPGA: v%d (%s)\n", QIXIS_READ(scver), board);
|
||||
puts("SERDES1 Reference : ");
|
||||
|
||||
sw = QIXIS_READ(brdcfg[2]);
|
||||
#ifdef CONFIG_TARGET_LS1028ARDB
|
||||
clock = (sw >> 6) & 3;
|
||||
#else
|
||||
clock = (sw >> 4) & 0xf;
|
||||
#endif
|
||||
|
||||
printf("Clock1 = %sMHz ", freq[clock]);
|
||||
#ifdef CONFIG_TARGET_LS1028ARDB
|
||||
clock = (sw >> 4) & 3;
|
||||
#else
|
||||
clock = sw & 0xf;
|
||||
#endif
|
||||
printf("Clock2 = %sMHz\n", freq[clock]);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
|
@ -449,12 +449,20 @@ unsigned long get_board_ddr_clk(void)
|
|||
|
||||
int board_init(void)
|
||||
{
|
||||
#if defined(CONFIG_FSL_MC_ENET) && defined(CONFIG_TARGET_LX2160ARDB)
|
||||
u32 __iomem *irq_ccsr = (u32 __iomem *)ISC_BASE;
|
||||
#endif
|
||||
#ifdef CONFIG_ENV_IS_NOWHERE
|
||||
gd->env_addr = (ulong)&default_environment[0];
|
||||
#endif
|
||||
|
||||
select_i2c_ch_pca9547(I2C_MUX_CH_DEFAULT);
|
||||
|
||||
#if defined(CONFIG_FSL_MC_ENET) && defined(CONFIG_TARGET_LX2160ARDB)
|
||||
/* invert AQR107 IRQ pins polarity */
|
||||
out_le32(irq_ccsr + IRQCR_OFFSET / 4, AQR107_IRQ_MASK);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_FSL_CAAM
|
||||
sec_init();
|
||||
#endif
|
||||
|
|
64
configs/ls1028aqds_tfa_defconfig
Normal file
64
configs/ls1028aqds_tfa_defconfig
Normal file
|
@ -0,0 +1,64 @@
|
|||
CONFIG_ARM=y
|
||||
CONFIG_TARGET_LS1028AQDS=y
|
||||
CONFIG_SYS_FSL_SDHC_CLK_DIV=1
|
||||
CONFIG_TFABOOT=y
|
||||
CONFIG_NR_DRAM_BANKS=2
|
||||
CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT=y
|
||||
CONFIG_SEC_FIRMWARE_ARMV8_PSCI=y
|
||||
CONFIG_AHCI=y
|
||||
CONFIG_DISTRO_DEFAULTS=y
|
||||
# CONFIG_SYS_MALLOC_F is not set
|
||||
CONFIG_FIT_VERBOSE=y
|
||||
CONFIG_OF_BOARD_SETUP=y
|
||||
CONFIG_OF_STDOUT_VIA_ALIAS=y
|
||||
CONFIG_BOOTDELAY=10
|
||||
CONFIG_USE_BOOTARGS=y
|
||||
CONFIG_BOOTARGS="console=ttyS0,115200 root=/dev/ram0 earlycon=uart8250,mmio,0x21c0500 ramdisk_size=0x2000000 default_hugepagesz=2m hugepagesz=2m hugepages=256 video=1920x1080-32@60 cma=256M"
|
||||
CONFIG_CMD_GREPENV=y
|
||||
CONFIG_CMD_GPT=y
|
||||
CONFIG_CMD_I2C=y
|
||||
CONFIG_CMD_MMC=y
|
||||
CONFIG_CMD_PCI=y
|
||||
CONFIG_CMD_SF=y
|
||||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_WDT=y
|
||||
# CONFIG_CMD_SETEXPR is not set
|
||||
CONFIG_CMD_CACHE=y
|
||||
CONFIG_OF_CONTROL=y
|
||||
CONFIG_DEFAULT_DEVICE_TREE="fsl-ls1028a-qds"
|
||||
CONFIG_ENV_IS_IN_MMC=y
|
||||
CONFIG_ENV_IS_IN_SPI_FLASH=y
|
||||
CONFIG_NET_RANDOM_ETHADDR=y
|
||||
CONFIG_NETCONSOLE=y
|
||||
CONFIG_DM=y
|
||||
CONFIG_SCSI_AHCI=y
|
||||
CONFIG_SATA_CEVA=y
|
||||
CONFIG_FSL_CAAM=y
|
||||
CONFIG_DM_MMC=y
|
||||
CONFIG_DM_SPI_FLASH=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
CONFIG_SPI_FLASH_SPANSION=y
|
||||
CONFIG_SPI_FLASH_STMICRO=y
|
||||
# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
|
||||
CONFIG_PHYLIB=y
|
||||
CONFIG_PHY_ATHEROS=y
|
||||
CONFIG_DM_ETH=y
|
||||
CONFIG_PHY_GIGE=y
|
||||
CONFIG_E1000=y
|
||||
CONFIG_PCI=y
|
||||
CONFIG_DM_PCI=y
|
||||
CONFIG_DM_PCI_COMPAT=y
|
||||
CONFIG_PCIE_LAYERSCAPE=y
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_DM_SCSI=y
|
||||
CONFIG_SYS_NS16550=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_DM_SPI=y
|
||||
CONFIG_FSL_DSPI=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_DM_USB=y
|
||||
CONFIG_USB_XHCI_HCD=y
|
||||
CONFIG_USB_XHCI_DWC3=y
|
||||
CONFIG_WDT=y
|
||||
CONFIG_WDT_SP805=y
|
||||
CONFIG_EFI_LOADER_BOUNCE_BUFFER=y
|
64
configs/ls1028ardb_tfa_defconfig
Normal file
64
configs/ls1028ardb_tfa_defconfig
Normal file
|
@ -0,0 +1,64 @@
|
|||
CONFIG_ARM=y
|
||||
CONFIG_TARGET_LS1028ARDB=y
|
||||
CONFIG_SYS_FSL_SDHC_CLK_DIV=1
|
||||
CONFIG_TFABOOT=y
|
||||
CONFIG_NR_DRAM_BANKS=2
|
||||
CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT=y
|
||||
CONFIG_SEC_FIRMWARE_ARMV8_PSCI=y
|
||||
CONFIG_AHCI=y
|
||||
CONFIG_DISTRO_DEFAULTS=y
|
||||
# CONFIG_SYS_MALLOC_F is not set
|
||||
CONFIG_FIT_VERBOSE=y
|
||||
CONFIG_OF_BOARD_SETUP=y
|
||||
CONFIG_OF_STDOUT_VIA_ALIAS=y
|
||||
CONFIG_BOOTDELAY=10
|
||||
CONFIG_USE_BOOTARGS=y
|
||||
CONFIG_BOOTARGS="console=ttyS0,115200 root=/dev/ram0 earlycon=uart8250,mmio,0x21c0500 ramdisk_size=0x2000000 default_hugepagesz=2m hugepagesz=2m hugepages=256 video=1920x1080-32@60 cma=256M"
|
||||
CONFIG_CMD_GREPENV=y
|
||||
CONFIG_CMD_GPT=y
|
||||
CONFIG_CMD_I2C=y
|
||||
CONFIG_CMD_MMC=y
|
||||
CONFIG_CMD_PCI=y
|
||||
CONFIG_CMD_SF=y
|
||||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_WDT=y
|
||||
# CONFIG_CMD_SETEXPR is not set
|
||||
CONFIG_CMD_CACHE=y
|
||||
CONFIG_OF_CONTROL=y
|
||||
CONFIG_DEFAULT_DEVICE_TREE="fsl-ls1028a-rdb"
|
||||
CONFIG_ENV_IS_IN_MMC=y
|
||||
CONFIG_ENV_IS_IN_SPI_FLASH=y
|
||||
CONFIG_NET_RANDOM_ETHADDR=y
|
||||
CONFIG_NETCONSOLE=y
|
||||
CONFIG_DM=y
|
||||
CONFIG_SCSI_AHCI=y
|
||||
CONFIG_SATA_CEVA=y
|
||||
CONFIG_FSL_CAAM=y
|
||||
CONFIG_DM_MMC=y
|
||||
CONFIG_DM_SPI_FLASH=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
CONFIG_SPI_FLASH_SPANSION=y
|
||||
CONFIG_SPI_FLASH_STMICRO=y
|
||||
# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
|
||||
CONFIG_PHYLIB=y
|
||||
CONFIG_PHY_ATHEROS=y
|
||||
CONFIG_DM_ETH=y
|
||||
CONFIG_PHY_GIGE=y
|
||||
CONFIG_E1000=y
|
||||
CONFIG_PCI=y
|
||||
CONFIG_DM_PCI=y
|
||||
CONFIG_DM_PCI_COMPAT=y
|
||||
CONFIG_PCIE_LAYERSCAPE=y
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_DM_SCSI=y
|
||||
CONFIG_SYS_NS16550=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_DM_SPI=y
|
||||
CONFIG_FSL_DSPI=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_DM_USB=y
|
||||
CONFIG_USB_XHCI_HCD=y
|
||||
CONFIG_USB_XHCI_DWC3=y
|
||||
CONFIG_WDT=y
|
||||
CONFIG_WDT_SP805=y
|
||||
CONFIG_EFI_LOADER_BOUNCE_BUFFER=y
|
|
@ -10,7 +10,7 @@ CONFIG_OF_BOARD_SETUP=y
|
|||
CONFIG_QSPI_BOOT=y
|
||||
CONFIG_BOOTDELAY=10
|
||||
CONFIG_USE_BOOTARGS=y
|
||||
CONFIG_BOOTARGS="console=ttyS0,115200 root=/dev/ram0 earlycon=uart8250,mmio,0x21c0500 mtdparts=1550000.quadspi:2m(uboot),14m(free)"
|
||||
CONFIG_BOOTARGS="console=ttyS0,115200 root=/dev/ram0 earlycon=uart8250,mmio,0x21c0500 mtdparts=1550000.spi-0:2m(uboot),14m(free)"
|
||||
# CONFIG_USE_BOOTCOMMAND is not set
|
||||
CONFIG_MISC_INIT_R=y
|
||||
CONFIG_CMD_BOOTZ=y
|
||||
|
@ -25,7 +25,7 @@ CONFIG_CMD_SF=y
|
|||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_CACHE=y
|
||||
CONFIG_MP=y
|
||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=1550000.quadspi:2m(uboot),14m(free)"
|
||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=1550000.spi-0:2m(uboot),14m(free)"
|
||||
CONFIG_OF_CONTROL=y
|
||||
CONFIG_DEFAULT_DEVICE_TREE="fsl-ls1046a-qds-duart"
|
||||
CONFIG_ENV_IS_IN_SPI_FLASH=y
|
||||
|
@ -35,6 +35,7 @@ CONFIG_FSL_CAAM=y
|
|||
CONFIG_DM_MMC=y
|
||||
CONFIG_FSL_ESDHC=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
# CONFIG_SPI_FLASH_BAR is not set
|
||||
# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
|
||||
CONFIG_PHYLIB=y
|
||||
CONFIG_E1000=y
|
||||
|
|
|
@ -17,7 +17,7 @@ CONFIG_SYS_EXTRA_OPTIONS="RAMBOOT_PBL,SPL_FSL_PBL,SD_BOOT_QSPI"
|
|||
CONFIG_SD_BOOT=y
|
||||
CONFIG_BOOTDELAY=10
|
||||
CONFIG_USE_BOOTARGS=y
|
||||
CONFIG_BOOTARGS="console=ttyS0,115200 root=/dev/ram0 earlycon=uart8250,mmio,0x21c0500 mtdparts=1550000.quadspi:2m(uboot),14m(free)"
|
||||
CONFIG_BOOTARGS="console=ttyS0,115200 root=/dev/ram0 earlycon=uart8250,mmio,0x21c0500 mtdparts=1550000.spi-0:2m(uboot),14m(free)"
|
||||
# CONFIG_USE_BOOTCOMMAND is not set
|
||||
CONFIG_MISC_INIT_R=y
|
||||
CONFIG_SPL_TEXT_BASE=0x10000000
|
||||
|
@ -40,7 +40,7 @@ CONFIG_CMD_SF=y
|
|||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_CACHE=y
|
||||
CONFIG_MP=y
|
||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=1550000.quadspi:2m(uboot),14m(free)"
|
||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=1550000.spi-0:2m(uboot),14m(free)"
|
||||
# CONFIG_SPL_EFI_PARTITION is not set
|
||||
CONFIG_OF_CONTROL=y
|
||||
CONFIG_DEFAULT_DEVICE_TREE="fsl-ls1046a-qds-duart"
|
||||
|
@ -51,6 +51,7 @@ CONFIG_FSL_CAAM=y
|
|||
CONFIG_DM_MMC=y
|
||||
CONFIG_FSL_ESDHC=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
# CONFIG_SPI_FLASH_BAR is not set
|
||||
# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
|
||||
CONFIG_PHYLIB=y
|
||||
CONFIG_E1000=y
|
||||
|
|
|
@ -48,6 +48,7 @@ CONFIG_SYS_FLASH_USE_BUFFER_WRITE=y
|
|||
CONFIG_SYS_FLASH_CFI=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
CONFIG_SF_DEFAULT_BUS=1
|
||||
# CONFIG_SPI_FLASH_BAR is not set
|
||||
CONFIG_PHYLIB=y
|
||||
CONFIG_E1000=y
|
||||
CONFIG_PCI=y
|
||||
|
|
|
@ -17,7 +17,7 @@ CONFIG_SYS_EXTRA_OPTIONS="RAMBOOT_PBL,SPL_FSL_PBL,EMMC_BOOT"
|
|||
CONFIG_SD_BOOT=y
|
||||
CONFIG_BOOTDELAY=10
|
||||
CONFIG_USE_BOOTARGS=y
|
||||
CONFIG_BOOTARGS="console=ttyS0,115200 root=/dev/ram0 earlycon=uart8250,mmio,0x21c0500 mtdparts=1550000.quadspi:1m(rcw),15m(u-boot),48m(kernel.itb);7e800000.flash:16m(nand_uboot),48m(nand_kernel),448m(nand_free)"
|
||||
CONFIG_BOOTARGS="console=ttyS0,115200 root=/dev/ram0 earlycon=uart8250,mmio,0x21c0500 mtdparts=1550000.spi-0:1m(rcw),15m(u-boot),48m(kernel.itb);7e800000.flash:16m(nand_uboot),48m(nand_kernel),448m(nand_free)"
|
||||
# CONFIG_USE_BOOTCOMMAND is not set
|
||||
CONFIG_MISC_INIT_R=y
|
||||
CONFIG_SPL_TEXT_BASE=0x10000000
|
||||
|
@ -37,7 +37,7 @@ CONFIG_CMD_SF=y
|
|||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_CACHE=y
|
||||
CONFIG_MP=y
|
||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=1550000.quadspi:1m(rcw),15m(u-boot),48m(kernel.itb);7e800000.flash:16m(nand_uboot),48m(nand_kernel),448m(nand_free)"
|
||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=1550000.spi-0:1m(rcw),15m(u-boot),48m(kernel.itb);7e800000.flash:16m(nand_uboot),48m(nand_kernel),448m(nand_free)"
|
||||
# CONFIG_SPL_EFI_PARTITION is not set
|
||||
CONFIG_OF_CONTROL=y
|
||||
CONFIG_DEFAULT_DEVICE_TREE="fsl-ls1046a-rdb"
|
||||
|
@ -48,6 +48,7 @@ CONFIG_FSL_CAAM=y
|
|||
CONFIG_DM_MMC=y
|
||||
CONFIG_FSL_ESDHC=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
# CONFIG_SPI_FLASH_BAR is not set
|
||||
CONFIG_PHYLIB=y
|
||||
CONFIG_PHY_AQUANTIA=y
|
||||
CONFIG_E1000=y
|
||||
|
|
|
@ -12,7 +12,7 @@ CONFIG_OF_BOARD_SETUP=y
|
|||
CONFIG_QSPI_BOOT=y
|
||||
CONFIG_BOOTDELAY=10
|
||||
CONFIG_USE_BOOTARGS=y
|
||||
CONFIG_BOOTARGS="console=ttyS0,115200 root=/dev/ram0 earlycon=uart8250,mmio,0x21c0500 mtdparts=1550000.quadspi:1m(rcw),15m(u-boot),48m(kernel.itb);7e800000.flash:16m(nand_uboot),48m(nand_kernel),448m(nand_free)"
|
||||
CONFIG_BOOTARGS="console=ttyS0,115200 root=/dev/ram0 earlycon=uart8250,mmio,0x21c0500 mtdparts=1550000.spi-0:1m(rcw),15m(u-boot),48m(kernel.itb);7e800000.flash:16m(nand_uboot),48m(nand_kernel),448m(nand_free)"
|
||||
CONFIG_MISC_INIT_R=y
|
||||
CONFIG_CMD_GPT=y
|
||||
CONFIG_CMD_I2C=y
|
||||
|
@ -23,7 +23,7 @@ CONFIG_CMD_SF=y
|
|||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_CACHE=y
|
||||
CONFIG_MP=y
|
||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=1550000.quadspi:1m(rcw),15m(u-boot),48m(kernel.itb);7e800000.flash:16m(nand_uboot),48m(nand_kernel),448m(nand_free)"
|
||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=1550000.spi-0:1m(rcw),15m(u-boot),48m(kernel.itb);7e800000.flash:16m(nand_uboot),48m(nand_kernel),448m(nand_free)"
|
||||
CONFIG_OF_CONTROL=y
|
||||
CONFIG_DEFAULT_DEVICE_TREE="fsl-ls1046a-rdb"
|
||||
CONFIG_DM=y
|
||||
|
@ -31,6 +31,7 @@ CONFIG_SATA_CEVA=y
|
|||
CONFIG_DM_MMC=y
|
||||
CONFIG_FSL_ESDHC=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
# CONFIG_SPI_FLASH_BAR is not set
|
||||
# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
|
||||
CONFIG_PHYLIB=y
|
||||
CONFIG_PHY_AQUANTIA=y
|
||||
|
|
|
@ -11,7 +11,7 @@ CONFIG_OF_BOARD_SETUP=y
|
|||
CONFIG_QSPI_BOOT=y
|
||||
CONFIG_BOOTDELAY=10
|
||||
CONFIG_USE_BOOTARGS=y
|
||||
CONFIG_BOOTARGS="console=ttyS0,115200 root=/dev/ram0 earlycon=uart8250,mmio,0x21c0500 mtdparts=1550000.quadspi:1m(rcw),15m(u-boot),48m(kernel.itb);7e800000.flash:16m(nand_uboot),48m(nand_kernel),448m(nand_free)"
|
||||
CONFIG_BOOTARGS="console=ttyS0,115200 root=/dev/ram0 earlycon=uart8250,mmio,0x21c0500 mtdparts=1550000.spi-0:1m(rcw),15m(u-boot),48m(kernel.itb);7e800000.flash:16m(nand_uboot),48m(nand_kernel),448m(nand_free)"
|
||||
CONFIG_MISC_INIT_R=y
|
||||
CONFIG_CMD_GPT=y
|
||||
CONFIG_CMD_I2C=y
|
||||
|
@ -22,7 +22,7 @@ CONFIG_CMD_SF=y
|
|||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_CACHE=y
|
||||
CONFIG_MP=y
|
||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=1550000.quadspi:1m(rcw),15m(u-boot),48m(kernel.itb);7e800000.flash:16m(nand_uboot),48m(nand_kernel),448m(nand_free)"
|
||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=1550000.spi-0:1m(rcw),15m(u-boot),48m(kernel.itb);7e800000.flash:16m(nand_uboot),48m(nand_kernel),448m(nand_free)"
|
||||
CONFIG_OF_CONTROL=y
|
||||
CONFIG_DEFAULT_DEVICE_TREE="fsl-ls1046a-rdb"
|
||||
CONFIG_ENV_IS_IN_SPI_FLASH=y
|
||||
|
@ -32,6 +32,7 @@ CONFIG_FSL_CAAM=y
|
|||
CONFIG_DM_MMC=y
|
||||
CONFIG_FSL_ESDHC=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
# CONFIG_SPI_FLASH_BAR is not set
|
||||
# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
|
||||
CONFIG_PHYLIB=y
|
||||
CONFIG_PHY_AQUANTIA=y
|
||||
|
|
|
@ -18,7 +18,7 @@ CONFIG_OF_BOARD_SETUP=y
|
|||
CONFIG_QSPI_BOOT=y
|
||||
CONFIG_BOOTDELAY=10
|
||||
CONFIG_USE_BOOTARGS=y
|
||||
CONFIG_BOOTARGS="console=ttyS0,115200 root=/dev/ram0 earlycon=uart8250,mmio,0x21c0500 mtdparts=1550000.quadspi:1m(rcw),15m(u-boot),48m(kernel.itb);7e800000.flash:16m(nand_uboot),48m(nand_kernel),448m(nand_free)"
|
||||
CONFIG_BOOTARGS="console=ttyS0,115200 root=/dev/ram0 earlycon=uart8250,mmio,0x21c0500 mtdparts=1550000.spi-0:1m(rcw),15m(u-boot),48m(kernel.itb);7e800000.flash:16m(nand_uboot),48m(nand_kernel),448m(nand_free)"
|
||||
CONFIG_MISC_INIT_R=y
|
||||
CONFIG_SPL_TEXT_BASE=0x10000000
|
||||
CONFIG_SPL_BOARD_INIT=y
|
||||
|
@ -39,7 +39,7 @@ CONFIG_CMD_SF=y
|
|||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_CACHE=y
|
||||
CONFIG_MP=y
|
||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=1550000.quadspi:1m(rcw),15m(u-boot),48m(kernel.itb);7e800000.flash:16m(nand_uboot),48m(nand_kernel),448m(nand_free)"
|
||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=1550000.spi-0:1m(rcw),15m(u-boot),48m(kernel.itb);7e800000.flash:16m(nand_uboot),48m(nand_kernel),448m(nand_free)"
|
||||
# CONFIG_SPL_EFI_PARTITION is not set
|
||||
CONFIG_OF_CONTROL=y
|
||||
CONFIG_DEFAULT_DEVICE_TREE="fsl-ls1046a-rdb"
|
||||
|
@ -51,6 +51,7 @@ CONFIG_FSL_CAAM=y
|
|||
CONFIG_DM_MMC=y
|
||||
CONFIG_FSL_ESDHC=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
# CONFIG_SPI_FLASH_BAR is not set
|
||||
CONFIG_PHYLIB=y
|
||||
CONFIG_PHY_GIGE=y
|
||||
CONFIG_E1000=y
|
||||
|
|
|
@ -17,7 +17,7 @@ CONFIG_SYS_EXTRA_OPTIONS="RAMBOOT_PBL,SPL_FSL_PBL"
|
|||
CONFIG_SD_BOOT=y
|
||||
CONFIG_BOOTDELAY=10
|
||||
CONFIG_USE_BOOTARGS=y
|
||||
CONFIG_BOOTARGS="console=ttyS0,115200 root=/dev/ram0 earlycon=uart8250,mmio,0x21c0500 mtdparts=1550000.quadspi:1m(rcw),15m(u-boot),48m(kernel.itb);7e800000.flash:16m(nand_uboot),48m(nand_kernel),448m(nand_free)"
|
||||
CONFIG_BOOTARGS="console=ttyS0,115200 root=/dev/ram0 earlycon=uart8250,mmio,0x21c0500 mtdparts=1550000.spi-0:1m(rcw),15m(u-boot),48m(kernel.itb);7e800000.flash:16m(nand_uboot),48m(nand_kernel),448m(nand_free)"
|
||||
CONFIG_MISC_INIT_R=y
|
||||
CONFIG_SPL_TEXT_BASE=0x10000000
|
||||
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR=y
|
||||
|
@ -37,7 +37,7 @@ CONFIG_CMD_SF=y
|
|||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_CACHE=y
|
||||
CONFIG_MP=y
|
||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=1550000.quadspi:1m(rcw),15m(u-boot),48m(kernel.itb);7e800000.flash:16m(nand_uboot),48m(nand_kernel),448m(nand_free)"
|
||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=1550000.spi-0:1m(rcw),15m(u-boot),48m(kernel.itb);7e800000.flash:16m(nand_uboot),48m(nand_kernel),448m(nand_free)"
|
||||
# CONFIG_SPL_EFI_PARTITION is not set
|
||||
CONFIG_OF_CONTROL=y
|
||||
CONFIG_DEFAULT_DEVICE_TREE="fsl-ls1046a-rdb"
|
||||
|
@ -45,6 +45,7 @@ CONFIG_DM=y
|
|||
CONFIG_SPL_DM=y
|
||||
CONFIG_FSL_ESDHC=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
# CONFIG_SPI_FLASH_BAR is not set
|
||||
CONFIG_PHYLIB=y
|
||||
CONFIG_PHY_AQUANTIA=y
|
||||
CONFIG_E1000=y
|
||||
|
|
|
@ -17,7 +17,7 @@ CONFIG_SYS_EXTRA_OPTIONS="RAMBOOT_PBL,SPL_FSL_PBL"
|
|||
CONFIG_SD_BOOT=y
|
||||
CONFIG_BOOTDELAY=10
|
||||
CONFIG_USE_BOOTARGS=y
|
||||
CONFIG_BOOTARGS="console=ttyS0,115200 root=/dev/ram0 earlycon=uart8250,mmio,0x21c0500 mtdparts=1550000.quadspi:1m(rcw),15m(u-boot),48m(kernel.itb);7e800000.flash:16m(nand_uboot),48m(nand_kernel),448m(nand_free)"
|
||||
CONFIG_BOOTARGS="console=ttyS0,115200 root=/dev/ram0 earlycon=uart8250,mmio,0x21c0500 mtdparts=1550000.spi-0:1m(rcw),15m(u-boot),48m(kernel.itb);7e800000.flash:16m(nand_uboot),48m(nand_kernel),448m(nand_free)"
|
||||
CONFIG_MISC_INIT_R=y
|
||||
CONFIG_SPL_TEXT_BASE=0x10000000
|
||||
CONFIG_SPL_BOARD_INIT=y
|
||||
|
@ -36,7 +36,7 @@ CONFIG_CMD_SF=y
|
|||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_CACHE=y
|
||||
CONFIG_MP=y
|
||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=1550000.quadspi:1m(rcw),15m(u-boot),48m(kernel.itb);7e800000.flash:16m(nand_uboot),48m(nand_kernel),448m(nand_free)"
|
||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=1550000.spi-0:1m(rcw),15m(u-boot),48m(kernel.itb);7e800000.flash:16m(nand_uboot),48m(nand_kernel),448m(nand_free)"
|
||||
# CONFIG_SPL_EFI_PARTITION is not set
|
||||
CONFIG_OF_CONTROL=y
|
||||
CONFIG_DEFAULT_DEVICE_TREE="fsl-ls1046a-rdb"
|
||||
|
@ -47,6 +47,7 @@ CONFIG_FSL_CAAM=y
|
|||
CONFIG_DM_MMC=y
|
||||
CONFIG_FSL_ESDHC=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
# CONFIG_SPI_FLASH_BAR is not set
|
||||
CONFIG_PHYLIB=y
|
||||
CONFIG_PHY_AQUANTIA=y
|
||||
CONFIG_E1000=y
|
||||
|
|
|
@ -13,7 +13,7 @@ CONFIG_FIT_VERBOSE=y
|
|||
CONFIG_OF_BOARD_SETUP=y
|
||||
CONFIG_BOOTDELAY=10
|
||||
CONFIG_USE_BOOTARGS=y
|
||||
CONFIG_BOOTARGS="console=ttyS0,115200 root=/dev/ram0 earlycon=uart8250,mmio,0x21c0500 mtdparts=1550000.quadspi:1m(rcw),15m(u-boot),48m(kernel.itb);7e800000.flash:16m(nand_uboot),48m(nand_kernel),448m(nand_free)"
|
||||
CONFIG_BOOTARGS="console=ttyS0,115200 root=/dev/ram0 earlycon=uart8250,mmio,0x21c0500 mtdparts=1550000.spi-0:1m(rcw),15m(u-boot),48m(kernel.itb);7e800000.flash:16m(nand_uboot),48m(nand_kernel),448m(nand_free)"
|
||||
CONFIG_MISC_INIT_R=y
|
||||
CONFIG_CMD_GPT=y
|
||||
CONFIG_CMD_I2C=y
|
||||
|
@ -24,7 +24,7 @@ CONFIG_CMD_SF=y
|
|||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_CACHE=y
|
||||
CONFIG_MP=y
|
||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=1550000.quadspi:1m(rcw),15m(u-boot),48m(kernel.itb);7e800000.flash:16m(nand_uboot),48m(nand_kernel),448m(nand_free)"
|
||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=1550000.spi-0:1m(rcw),15m(u-boot),48m(kernel.itb);7e800000.flash:16m(nand_uboot),48m(nand_kernel),448m(nand_free)"
|
||||
CONFIG_OF_CONTROL=y
|
||||
CONFIG_DEFAULT_DEVICE_TREE="fsl-ls1046a-rdb"
|
||||
CONFIG_DM=y
|
||||
|
@ -32,6 +32,7 @@ CONFIG_SATA_CEVA=y
|
|||
CONFIG_DM_MMC=y
|
||||
CONFIG_FSL_ESDHC=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
# CONFIG_SPI_FLASH_BAR is not set
|
||||
# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
|
||||
CONFIG_PHYLIB=y
|
||||
CONFIG_PHY_AQUANTIA=y
|
||||
|
|
|
@ -12,7 +12,7 @@ CONFIG_FIT_VERBOSE=y
|
|||
CONFIG_OF_BOARD_SETUP=y
|
||||
CONFIG_BOOTDELAY=10
|
||||
CONFIG_USE_BOOTARGS=y
|
||||
CONFIG_BOOTARGS="console=ttyS0,115200 root=/dev/ram0 earlycon=uart8250,mmio,0x21c0500 mtdparts=1550000.quadspi:1m(rcw),15m(u-boot),48m(kernel.itb);7e800000.flash:16m(nand_uboot),48m(nand_kernel),448m(nand_free)"
|
||||
CONFIG_BOOTARGS="console=ttyS0,115200 root=/dev/ram0 earlycon=uart8250,mmio,0x21c0500 mtdparts=1550000.spi-0:1m(rcw),15m(u-boot),48m(kernel.itb);7e800000.flash:16m(nand_uboot),48m(nand_kernel),448m(nand_free)"
|
||||
CONFIG_MISC_INIT_R=y
|
||||
CONFIG_CMD_GPT=y
|
||||
CONFIG_CMD_I2C=y
|
||||
|
@ -23,7 +23,7 @@ CONFIG_CMD_SF=y
|
|||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_CACHE=y
|
||||
CONFIG_MP=y
|
||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=1550000.quadspi:1m(rcw),15m(u-boot),48m(kernel.itb);7e800000.flash:16m(nand_uboot),48m(nand_kernel),448m(nand_free)"
|
||||
CONFIG_MTDPARTS_DEFAULT="mtdparts=1550000.spi-0:1m(rcw),15m(u-boot),48m(kernel.itb);7e800000.flash:16m(nand_uboot),48m(nand_kernel),448m(nand_free)"
|
||||
CONFIG_OF_CONTROL=y
|
||||
CONFIG_DEFAULT_DEVICE_TREE="fsl-ls1046a-rdb"
|
||||
CONFIG_ENV_IS_IN_MMC=y
|
||||
|
@ -34,6 +34,7 @@ CONFIG_FSL_CAAM=y
|
|||
CONFIG_DM_MMC=y
|
||||
CONFIG_FSL_ESDHC=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
# CONFIG_SPI_FLASH_BAR is not set
|
||||
# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
|
||||
CONFIG_PHYLIB=y
|
||||
CONFIG_PHY_AQUANTIA=y
|
||||
|
|
|
@ -35,6 +35,7 @@ CONFIG_DM_MMC=y
|
|||
CONFIG_FSL_ESDHC=y
|
||||
CONFIG_DM_SPI_FLASH=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
# CONFIG_SPI_FLASH_BAR is not set
|
||||
CONFIG_SPI_FLASH_SPANSION=y
|
||||
# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
|
||||
CONFIG_E1000=y
|
||||
|
|
|
@ -35,6 +35,7 @@ CONFIG_DM_MMC=y
|
|||
CONFIG_FSL_ESDHC=y
|
||||
CONFIG_DM_SPI_FLASH=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
# CONFIG_SPI_FLASH_BAR is not set
|
||||
CONFIG_SPI_FLASH_SPANSION=y
|
||||
# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
|
||||
CONFIG_E1000=y
|
||||
|
|
|
@ -46,6 +46,7 @@ CONFIG_DM_MMC=y
|
|||
CONFIG_FSL_ESDHC=y
|
||||
CONFIG_DM_SPI_FLASH=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
# CONFIG_SPI_FLASH_BAR is not set
|
||||
CONFIG_SPI_FLASH_SPANSION=y
|
||||
# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
|
||||
CONFIG_E1000=y
|
||||
|
|
|
@ -44,6 +44,7 @@ CONFIG_SYS_FLASH_USE_BUFFER_WRITE=y
|
|||
CONFIG_SYS_FLASH_CFI=y
|
||||
CONFIG_DM_SPI_FLASH=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
# CONFIG_SPI_FLASH_BAR is not set
|
||||
CONFIG_SPI_FLASH_SPANSION=y
|
||||
# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
|
||||
CONFIG_E1000=y
|
||||
|
|
|
@ -36,6 +36,7 @@ CONFIG_DM_MMC=y
|
|||
CONFIG_FSL_ESDHC=y
|
||||
CONFIG_DM_SPI_FLASH=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
# CONFIG_SPI_FLASH_BAR is not set
|
||||
CONFIG_SPI_FLASH_SPANSION=y
|
||||
# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
|
||||
CONFIG_E1000=y
|
||||
|
|
|
@ -36,6 +36,7 @@ CONFIG_DM_MMC=y
|
|||
CONFIG_FSL_ESDHC=y
|
||||
CONFIG_DM_SPI_FLASH=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
# CONFIG_SPI_FLASH_BAR is not set
|
||||
CONFIG_SPI_FLASH_SPANSION=y
|
||||
# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
|
||||
CONFIG_E1000=y
|
||||
|
|
|
@ -47,6 +47,7 @@ CONFIG_SCSI_AHCI=y
|
|||
CONFIG_FSL_ESDHC=y
|
||||
CONFIG_DM_SPI_FLASH=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
# CONFIG_SPI_FLASH_BAR is not set
|
||||
CONFIG_SPI_FLASH_SPANSION=y
|
||||
# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
|
||||
CONFIG_E1000=y
|
||||
|
|
|
@ -47,6 +47,7 @@ CONFIG_DM_MMC=y
|
|||
CONFIG_FSL_ESDHC=y
|
||||
CONFIG_DM_SPI_FLASH=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
# CONFIG_SPI_FLASH_BAR is not set
|
||||
CONFIG_SPI_FLASH_SPANSION=y
|
||||
# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
|
||||
CONFIG_E1000=y
|
||||
|
|
|
@ -38,6 +38,7 @@ CONFIG_DM_MMC=y
|
|||
CONFIG_FSL_ESDHC=y
|
||||
CONFIG_DM_SPI_FLASH=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
# CONFIG_SPI_FLASH_BAR is not set
|
||||
CONFIG_SPI_FLASH_SPANSION=y
|
||||
# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
|
||||
CONFIG_E1000=y
|
||||
|
|
|
@ -39,6 +39,7 @@ CONFIG_DM_MMC=y
|
|||
CONFIG_FSL_ESDHC=y
|
||||
CONFIG_DM_SPI_FLASH=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
# CONFIG_SPI_FLASH_BAR is not set
|
||||
CONFIG_SPI_FLASH_SPANSION=y
|
||||
# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
|
||||
CONFIG_E1000=y
|
||||
|
|
|
@ -49,6 +49,7 @@ CONFIG_DM_MMC=y
|
|||
CONFIG_FSL_ESDHC=y
|
||||
CONFIG_DM_SPI_FLASH=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
# CONFIG_SPI_FLASH_BAR is not set
|
||||
CONFIG_PHYLIB=y
|
||||
CONFIG_PHY_GIGE=y
|
||||
CONFIG_E1000=y
|
||||
|
|
|
@ -39,6 +39,7 @@ CONFIG_DM_MMC=y
|
|||
CONFIG_FSL_ESDHC=y
|
||||
CONFIG_DM_SPI_FLASH=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
# CONFIG_SPI_FLASH_BAR is not set
|
||||
CONFIG_PHYLIB=y
|
||||
CONFIG_PHY_GIGE=y
|
||||
CONFIG_E1000=y
|
||||
|
|
|
@ -47,6 +47,7 @@ CONFIG_DM_MMC=y
|
|||
CONFIG_FSL_ESDHC=y
|
||||
CONFIG_DM_SPI_FLASH=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
# CONFIG_SPI_FLASH_BAR is not set
|
||||
CONFIG_PHYLIB=y
|
||||
CONFIG_PHY_GIGE=y
|
||||
CONFIG_E1000=y
|
||||
|
|
|
@ -41,6 +41,7 @@ CONFIG_FLASH_CFI_DRIVER=y
|
|||
CONFIG_SYS_FLASH_USE_BUFFER_WRITE=y
|
||||
CONFIG_SYS_FLASH_CFI=y
|
||||
CONFIG_DM_SPI_FLASH=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
CONFIG_PHYLIB=y
|
||||
CONFIG_PHY_AQUANTIA=y
|
||||
CONFIG_E1000=y
|
||||
|
|
|
@ -32,6 +32,7 @@ CONFIG_DM_MMC=y
|
|||
CONFIG_FSL_ESDHC=y
|
||||
CONFIG_DM_SPI_FLASH=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
# CONFIG_SPI_FLASH_BAR is not set
|
||||
CONFIG_SPI_FLASH_SPANSION=y
|
||||
# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
|
||||
CONFIG_PHYLIB=y
|
||||
|
|
|
@ -36,6 +36,7 @@ CONFIG_DM_MMC=y
|
|||
CONFIG_FSL_ESDHC=y
|
||||
CONFIG_DM_SPI_FLASH=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
# CONFIG_SPI_FLASH_BAR is not set
|
||||
CONFIG_SPI_FLASH_SPANSION=y
|
||||
# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
|
||||
CONFIG_PHYLIB=y
|
||||
|
|
|
@ -44,6 +44,7 @@ CONFIG_SYS_FLASH_USE_BUFFER_WRITE=y
|
|||
CONFIG_SYS_FLASH_CFI=y
|
||||
CONFIG_DM_SPI_FLASH=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
# CONFIG_SPI_FLASH_BAR is not set
|
||||
CONFIG_SPI_FLASH_SPANSION=y
|
||||
CONFIG_PHYLIB=y
|
||||
CONFIG_PHY_AQUANTIA=y
|
||||
|
|
|
@ -47,6 +47,7 @@ CONFIG_SYS_FLASH_USE_BUFFER_WRITE=y
|
|||
CONFIG_SYS_FLASH_CFI=y
|
||||
CONFIG_DM_SPI_FLASH=y
|
||||
CONFIG_SPI_FLASH=y
|
||||
# CONFIG_SPI_FLASH_BAR is not set
|
||||
CONFIG_SPI_FLASH_SPANSION=y
|
||||
# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set
|
||||
CONFIG_PHYLIB=y
|
||||
|
|
|
@ -19,6 +19,7 @@ CONFIG_CMD_EEPROM=y
|
|||
CONFIG_CMD_GPT=y
|
||||
CONFIG_CMD_I2C=y
|
||||
CONFIG_CMD_MMC=y
|
||||
CONFIG_CMD_PCI=y
|
||||
CONFIG_CMD_SF=y
|
||||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_CACHE=y
|
||||
|
@ -43,6 +44,10 @@ CONFIG_PHY_CORTINA=y
|
|||
CONFIG_PHY_REALTEK=y
|
||||
CONFIG_PHY_VITESSE=y
|
||||
CONFIG_E1000=y
|
||||
CONFIG_PCI=y
|
||||
CONFIG_DM_PCI=y
|
||||
CONFIG_DM_PCI_COMPAT=y
|
||||
CONFIG_PCIE_LAYERSCAPE_GEN4=y
|
||||
CONFIG_DM_SCSI=y
|
||||
CONFIG_DM_SERIAL=y
|
||||
CONFIG_SPI=y
|
||||
|
|
|
@ -19,6 +19,7 @@ CONFIG_CMD_EEPROM=y
|
|||
CONFIG_CMD_GPT=y
|
||||
CONFIG_CMD_I2C=y
|
||||
CONFIG_CMD_MMC=y
|
||||
CONFIG_CMD_PCI=y
|
||||
CONFIG_CMD_SF=y
|
||||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_CACHE=y
|
||||
|
@ -42,6 +43,11 @@ CONFIG_PHY_AQUANTIA=y
|
|||
CONFIG_PHY_CORTINA=y
|
||||
CONFIG_PHY_REALTEK=y
|
||||
CONFIG_PHY_VITESSE=y
|
||||
CONFIG_E1000=y
|
||||
CONFIG_PCI=y
|
||||
CONFIG_DM_PCI=y
|
||||
CONFIG_DM_PCI_COMPAT=y
|
||||
CONFIG_PCIE_LAYERSCAPE_GEN4=y
|
||||
CONFIG_DM_SCSI=y
|
||||
CONFIG_DM_SERIAL=y
|
||||
CONFIG_SPI=y
|
||||
|
|
|
@ -20,6 +20,7 @@ CONFIG_CMD_EEPROM=y
|
|||
CONFIG_CMD_GPT=y
|
||||
CONFIG_CMD_I2C=y
|
||||
CONFIG_CMD_MMC=y
|
||||
CONFIG_CMD_PCI=y
|
||||
CONFIG_CMD_SF=y
|
||||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_CACHE=y
|
||||
|
@ -41,6 +42,10 @@ CONFIG_PHY_AQUANTIA=y
|
|||
CONFIG_PHY_ATHEROS=y
|
||||
CONFIG_PHY_CORTINA=y
|
||||
CONFIG_E1000=y
|
||||
CONFIG_PCI=y
|
||||
CONFIG_DM_PCI=y
|
||||
CONFIG_DM_PCI_COMPAT=y
|
||||
CONFIG_PCIE_LAYERSCAPE_GEN4=y
|
||||
CONFIG_DM_SCSI=y
|
||||
CONFIG_DM_SERIAL=y
|
||||
CONFIG_SPI=y
|
||||
|
|
|
@ -20,6 +20,7 @@ CONFIG_CMD_EEPROM=y
|
|||
CONFIG_CMD_GPT=y
|
||||
CONFIG_CMD_I2C=y
|
||||
CONFIG_CMD_MMC=y
|
||||
CONFIG_CMD_PCI=y
|
||||
CONFIG_CMD_SF=y
|
||||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_CACHE=y
|
||||
|
@ -42,6 +43,11 @@ CONFIG_PHYLIB=y
|
|||
CONFIG_PHY_AQUANTIA=y
|
||||
CONFIG_PHY_ATHEROS=y
|
||||
CONFIG_PHY_CORTINA=y
|
||||
CONFIG_E1000=y
|
||||
CONFIG_PCI=y
|
||||
CONFIG_DM_PCI=y
|
||||
CONFIG_DM_PCI_COMPAT=y
|
||||
CONFIG_PCIE_LAYERSCAPE_GEN4=y
|
||||
CONFIG_DM_SCSI=y
|
||||
CONFIG_DM_SERIAL=y
|
||||
CONFIG_SPI=y
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#include <ahci.h>
|
||||
#include <scsi.h>
|
||||
#include <asm/io.h>
|
||||
#include <linux/ioport.h>
|
||||
|
||||
/* Vendor Specific Register Offsets */
|
||||
#define AHCI_VEND_PCFG 0xA4
|
||||
|
@ -88,20 +89,16 @@
|
|||
#define LS1021_CEVA_PHY4_CFG 0x064a080b
|
||||
#define LS1021_CEVA_PHY5_CFG 0x2aa86470
|
||||
|
||||
/* for ls1088a */
|
||||
#define LS1088_ECC_DIS_ADDR_CH2 0x100520
|
||||
#define LS1088_ECC_DIS_VAL_CH2 0x40000000
|
||||
|
||||
/* ecc addr-val pair */
|
||||
#define ECC_DIS_ADDR_CH2 0x20140520
|
||||
/* ecc val pair */
|
||||
#define ECC_DIS_VAL_CH1 0x00020000
|
||||
#define ECC_DIS_VAL_CH2 0x80000000
|
||||
#define SATA_ECC_REG_ADDR 0x20220520
|
||||
#define SATA_ECC_DISABLE 0x00020000
|
||||
#define ECC_DIS_VAL_CH3 0x40000000
|
||||
|
||||
enum ceva_soc {
|
||||
CEVA_1V84,
|
||||
CEVA_LS1012A,
|
||||
CEVA_LS1021A,
|
||||
CEVA_LS1028A,
|
||||
CEVA_LS1043A,
|
||||
CEVA_LS1046A,
|
||||
CEVA_LS1088A,
|
||||
|
@ -110,12 +107,14 @@ enum ceva_soc {
|
|||
|
||||
struct ceva_sata_priv {
|
||||
ulong base;
|
||||
ulong ecc_base;
|
||||
enum ceva_soc soc;
|
||||
ulong flag;
|
||||
};
|
||||
|
||||
static int ceva_init_sata(struct ceva_sata_priv *priv)
|
||||
{
|
||||
ulong ecc_addr = priv->ecc_base;
|
||||
ulong base = priv->base;
|
||||
ulong tmp;
|
||||
|
||||
|
@ -132,38 +131,42 @@ static int ceva_init_sata(struct ceva_sata_priv *priv)
|
|||
break;
|
||||
|
||||
case CEVA_LS1021A:
|
||||
writel(SATA_ECC_DISABLE, SATA_ECC_REG_ADDR);
|
||||
if (!ecc_addr)
|
||||
return -EINVAL;
|
||||
writel(ECC_DIS_VAL_CH1, ecc_addr);
|
||||
writel(CEVA_PHY1_CFG, base + AHCI_VEND_PPCFG);
|
||||
writel(LS1021_CEVA_PHY2_CFG, base + AHCI_VEND_PP2C);
|
||||
writel(LS1021_CEVA_PHY3_CFG, base + AHCI_VEND_PP3C);
|
||||
writel(LS1021_CEVA_PHY4_CFG, base + AHCI_VEND_PP4C);
|
||||
writel(LS1021_CEVA_PHY5_CFG, base + AHCI_VEND_PP5C);
|
||||
writel(CEVA_TRANS_CFG, base + AHCI_VEND_PTC);
|
||||
if (priv->flag & FLAG_COHERENT)
|
||||
writel(CEVA_AXICC_CFG, base + LS1021_AHCI_VEND_AXICC);
|
||||
break;
|
||||
|
||||
case CEVA_LS1012A:
|
||||
case CEVA_LS1043A:
|
||||
case CEVA_LS1046A:
|
||||
writel(ECC_DIS_VAL_CH2, ECC_DIS_ADDR_CH2);
|
||||
if (!ecc_addr)
|
||||
return -EINVAL;
|
||||
writel(ECC_DIS_VAL_CH2, ecc_addr);
|
||||
/* fallthrough */
|
||||
case CEVA_LS2080A:
|
||||
writel(CEVA_PHY1_CFG, base + AHCI_VEND_PPCFG);
|
||||
writel(CEVA_TRANS_CFG, base + AHCI_VEND_PTC);
|
||||
if (priv->flag & FLAG_COHERENT)
|
||||
writel(CEVA_AXICC_CFG, base + AHCI_VEND_AXICC);
|
||||
break;
|
||||
|
||||
case CEVA_LS1028A:
|
||||
case CEVA_LS1088A:
|
||||
writel(LS1088_ECC_DIS_VAL_CH2, LS1088_ECC_DIS_ADDR_CH2);
|
||||
if (!ecc_addr)
|
||||
return -EINVAL;
|
||||
writel(ECC_DIS_VAL_CH3, ecc_addr);
|
||||
writel(CEVA_PHY1_CFG, base + AHCI_VEND_PPCFG);
|
||||
writel(CEVA_TRANS_CFG, base + AHCI_VEND_PTC);
|
||||
if (priv->flag & FLAG_COHERENT)
|
||||
writel(CEVA_AXICC_CFG, base + AHCI_VEND_AXICC);
|
||||
break;
|
||||
}
|
||||
|
||||
if (priv->flag & FLAG_COHERENT)
|
||||
writel(CEVA_AXICC_CFG, base + AHCI_VEND_AXICC);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -187,6 +190,7 @@ static const struct udevice_id sata_ceva_ids[] = {
|
|||
{ .compatible = "ceva,ahci-1v84", .data = CEVA_1V84 },
|
||||
{ .compatible = "fsl,ls1012a-ahci", .data = CEVA_LS1012A },
|
||||
{ .compatible = "fsl,ls1021a-ahci", .data = CEVA_LS1021A },
|
||||
{ .compatible = "fsl,ls1028a-ahci", .data = CEVA_LS1028A },
|
||||
{ .compatible = "fsl,ls1043a-ahci", .data = CEVA_LS1043A },
|
||||
{ .compatible = "fsl,ls1046a-ahci", .data = CEVA_LS1046A },
|
||||
{ .compatible = "fsl,ls1088a-ahci", .data = CEVA_LS1088A },
|
||||
|
@ -197,6 +201,8 @@ static const struct udevice_id sata_ceva_ids[] = {
|
|||
static int sata_ceva_ofdata_to_platdata(struct udevice *dev)
|
||||
{
|
||||
struct ceva_sata_priv *priv = dev_get_priv(dev);
|
||||
struct resource res_regs;
|
||||
int ret;
|
||||
|
||||
if (dev_read_bool(dev, "dma-coherent"))
|
||||
priv->flag |= FLAG_COHERENT;
|
||||
|
@ -205,8 +211,18 @@ static int sata_ceva_ofdata_to_platdata(struct udevice *dev)
|
|||
if (priv->base == FDT_ADDR_T_NONE)
|
||||
return -EINVAL;
|
||||
|
||||
ret = dev_read_resource_byname(dev, "ecc-addr", &res_regs);
|
||||
if (ret)
|
||||
priv->ecc_base = 0;
|
||||
else
|
||||
priv->ecc_base = res_regs.start;
|
||||
|
||||
priv->soc = dev_get_driver_data(dev);
|
||||
|
||||
debug("ccsr-sata-base %lx\t ecc-base %lx\n",
|
||||
priv->base,
|
||||
priv->ecc_base);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -105,6 +105,14 @@ config PCIE_LAYERSCAPE
|
|||
PCIe controllers. The PCIe may works in RC or EP mode according to
|
||||
RCW[HOST_AGT_PEX] setting.
|
||||
|
||||
config PCIE_LAYERSCAPE_GEN4
|
||||
bool "Layerscape Gen4 PCIe support"
|
||||
depends on DM_PCI
|
||||
help
|
||||
Support PCIe Gen4 on NXP Layerscape SoCs, which may have one or
|
||||
several PCIe controllers. The PCIe controller can work in RC or
|
||||
EP mode according to RCW[HOST_AGT_PEX] setting.
|
||||
|
||||
config PCIE_INTEL_FPGA
|
||||
bool "Intel FPGA PCIe support"
|
||||
depends on DM_PCI
|
||||
|
|
|
@ -32,5 +32,7 @@ obj-$(CONFIG_PCI_AARDVARK) += pci-aardvark.o
|
|||
obj-$(CONFIG_PCIE_DW_MVEBU) += pcie_dw_mvebu.o
|
||||
obj-$(CONFIG_PCIE_LAYERSCAPE) += pcie_layerscape.o
|
||||
obj-$(CONFIG_PCIE_LAYERSCAPE) += pcie_layerscape_fixup.o
|
||||
obj-$(CONFIG_PCIE_LAYERSCAPE_GEN4) += pcie_layerscape_gen4.o \
|
||||
pcie_layerscape_gen4_fixup.o
|
||||
obj-$(CONFIG_PCI_XILINX) += pcie_xilinx.o
|
||||
obj-$(CONFIG_PCIE_INTEL_FPGA) += pcie_intel_fpga.o
|
||||
|
|
572
drivers/pci/pcie_layerscape_gen4.c
Normal file
572
drivers/pci/pcie_layerscape_gen4.c
Normal file
|
@ -0,0 +1,572 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+ OR X11
|
||||
/*
|
||||
* Copyright 2018-2019 NXP
|
||||
*
|
||||
* PCIe Gen4 driver for NXP Layerscape SoCs
|
||||
* Author: Hou Zhiqiang <Minder.Hou@gmail.com>
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <asm/arch/fsl_serdes.h>
|
||||
#include <pci.h>
|
||||
#include <asm/io.h>
|
||||
#include <errno.h>
|
||||
#include <malloc.h>
|
||||
#include <dm.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
#include "pcie_layerscape_gen4.h"
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
LIST_HEAD(ls_pcie_g4_list);
|
||||
|
||||
static u64 bar_size[4] = {
|
||||
PCIE_BAR0_SIZE,
|
||||
PCIE_BAR1_SIZE,
|
||||
PCIE_BAR2_SIZE,
|
||||
PCIE_BAR4_SIZE
|
||||
};
|
||||
|
||||
static int ls_pcie_g4_ltssm(struct ls_pcie_g4 *pcie)
|
||||
{
|
||||
u32 state;
|
||||
|
||||
state = pf_ctrl_readl(pcie, PCIE_LTSSM_STA) & LTSSM_STATE_MASK;
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
static int ls_pcie_g4_link_up(struct ls_pcie_g4 *pcie)
|
||||
{
|
||||
int ltssm;
|
||||
|
||||
ltssm = ls_pcie_g4_ltssm(pcie);
|
||||
if (ltssm != LTSSM_PCIE_L0)
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void ls_pcie_g4_ep_enable_cfg(struct ls_pcie_g4 *pcie)
|
||||
{
|
||||
ccsr_writel(pcie, GPEX_CFG_READY, PCIE_CONFIG_READY);
|
||||
}
|
||||
|
||||
static void ls_pcie_g4_cfg_set_target(struct ls_pcie_g4 *pcie, u32 target)
|
||||
{
|
||||
ccsr_writel(pcie, PAB_AXI_AMAP_PEX_WIN_L(0), target);
|
||||
ccsr_writel(pcie, PAB_AXI_AMAP_PEX_WIN_H(0), 0);
|
||||
}
|
||||
|
||||
static int ls_pcie_g4_outbound_win_set(struct ls_pcie_g4 *pcie, int idx,
|
||||
int type, u64 phys, u64 bus_addr,
|
||||
pci_size_t size)
|
||||
{
|
||||
u32 val;
|
||||
u32 size_h, size_l;
|
||||
|
||||
if (idx >= PAB_WINS_NUM)
|
||||
return -EINVAL;
|
||||
|
||||
size_h = upper_32_bits(~(size - 1));
|
||||
size_l = lower_32_bits(~(size - 1));
|
||||
|
||||
val = ccsr_readl(pcie, PAB_AXI_AMAP_CTRL(idx));
|
||||
val &= ~((AXI_AMAP_CTRL_TYPE_MASK << AXI_AMAP_CTRL_TYPE_SHIFT) |
|
||||
(AXI_AMAP_CTRL_SIZE_MASK << AXI_AMAP_CTRL_SIZE_SHIFT) |
|
||||
AXI_AMAP_CTRL_EN);
|
||||
val |= ((type & AXI_AMAP_CTRL_TYPE_MASK) << AXI_AMAP_CTRL_TYPE_SHIFT) |
|
||||
((size_l >> AXI_AMAP_CTRL_SIZE_SHIFT) <<
|
||||
AXI_AMAP_CTRL_SIZE_SHIFT) | AXI_AMAP_CTRL_EN;
|
||||
|
||||
ccsr_writel(pcie, PAB_AXI_AMAP_CTRL(idx), val);
|
||||
|
||||
ccsr_writel(pcie, PAB_AXI_AMAP_AXI_WIN(idx), lower_32_bits(phys));
|
||||
ccsr_writel(pcie, PAB_EXT_AXI_AMAP_AXI_WIN(idx), upper_32_bits(phys));
|
||||
ccsr_writel(pcie, PAB_AXI_AMAP_PEX_WIN_L(idx), lower_32_bits(bus_addr));
|
||||
ccsr_writel(pcie, PAB_AXI_AMAP_PEX_WIN_H(idx), upper_32_bits(bus_addr));
|
||||
ccsr_writel(pcie, PAB_EXT_AXI_AMAP_SIZE(idx), size_h);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ls_pcie_g4_rc_inbound_win_set(struct ls_pcie_g4 *pcie, int idx,
|
||||
int type, u64 phys, u64 bus_addr,
|
||||
pci_size_t size)
|
||||
{
|
||||
u32 val;
|
||||
pci_size_t win_size = ~(size - 1);
|
||||
|
||||
val = ccsr_readl(pcie, PAB_PEX_AMAP_CTRL(idx));
|
||||
|
||||
val &= ~(PEX_AMAP_CTRL_TYPE_MASK << PEX_AMAP_CTRL_TYPE_SHIFT);
|
||||
val &= ~(PEX_AMAP_CTRL_EN_MASK << PEX_AMAP_CTRL_EN_SHIFT);
|
||||
val = (val | (type << PEX_AMAP_CTRL_TYPE_SHIFT));
|
||||
val = (val | (1 << PEX_AMAP_CTRL_EN_SHIFT));
|
||||
|
||||
ccsr_writel(pcie, PAB_PEX_AMAP_CTRL(idx),
|
||||
val | lower_32_bits(win_size));
|
||||
|
||||
ccsr_writel(pcie, PAB_EXT_PEX_AMAP_SIZE(idx), upper_32_bits(win_size));
|
||||
ccsr_writel(pcie, PAB_PEX_AMAP_AXI_WIN(idx), lower_32_bits(phys));
|
||||
ccsr_writel(pcie, PAB_EXT_PEX_AMAP_AXI_WIN(idx), upper_32_bits(phys));
|
||||
ccsr_writel(pcie, PAB_PEX_AMAP_PEX_WIN_L(idx), lower_32_bits(bus_addr));
|
||||
ccsr_writel(pcie, PAB_PEX_AMAP_PEX_WIN_H(idx), upper_32_bits(bus_addr));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void ls_pcie_g4_dump_wins(struct ls_pcie_g4 *pcie, int wins)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < wins; i++) {
|
||||
debug("APIO Win%d:\n", i);
|
||||
debug("\tLOWER PHYS: 0x%08x\n",
|
||||
ccsr_readl(pcie, PAB_AXI_AMAP_AXI_WIN(i)));
|
||||
debug("\tUPPER PHYS: 0x%08x\n",
|
||||
ccsr_readl(pcie, PAB_EXT_AXI_AMAP_AXI_WIN(i)));
|
||||
debug("\tLOWER BUS: 0x%08x\n",
|
||||
ccsr_readl(pcie, PAB_AXI_AMAP_PEX_WIN_L(i)));
|
||||
debug("\tUPPER BUS: 0x%08x\n",
|
||||
ccsr_readl(pcie, PAB_AXI_AMAP_PEX_WIN_H(i)));
|
||||
debug("\tSIZE: 0x%08x\n",
|
||||
ccsr_readl(pcie, PAB_AXI_AMAP_CTRL(i)) &
|
||||
(AXI_AMAP_CTRL_SIZE_MASK << AXI_AMAP_CTRL_SIZE_SHIFT));
|
||||
debug("\tEXT_SIZE: 0x%08x\n",
|
||||
ccsr_readl(pcie, PAB_EXT_AXI_AMAP_SIZE(i)));
|
||||
debug("\tPARAM: 0x%08x\n",
|
||||
ccsr_readl(pcie, PAB_AXI_AMAP_PCI_HDR_PARAM(i)));
|
||||
debug("\tCTRL: 0x%08x\n",
|
||||
ccsr_readl(pcie, PAB_AXI_AMAP_CTRL(i)));
|
||||
}
|
||||
}
|
||||
|
||||
static void ls_pcie_g4_setup_wins(struct ls_pcie_g4 *pcie)
|
||||
{
|
||||
struct pci_region *io, *mem, *pref;
|
||||
int idx = 1;
|
||||
|
||||
/* INBOUND WIN */
|
||||
ls_pcie_g4_rc_inbound_win_set(pcie, 0, IB_TYPE_MEM_F, 0, 0, SIZE_1T);
|
||||
|
||||
/* OUTBOUND WIN 0: CFG */
|
||||
ls_pcie_g4_outbound_win_set(pcie, 0, PAB_AXI_TYPE_CFG,
|
||||
pcie->cfg_res.start, 0,
|
||||
fdt_resource_size(&pcie->cfg_res));
|
||||
|
||||
pci_get_regions(pcie->bus, &io, &mem, &pref);
|
||||
|
||||
if (io)
|
||||
/* OUTBOUND WIN: IO */
|
||||
ls_pcie_g4_outbound_win_set(pcie, idx++, PAB_AXI_TYPE_IO,
|
||||
io->phys_start, io->bus_start,
|
||||
io->size);
|
||||
|
||||
if (mem)
|
||||
/* OUTBOUND WIN: MEM */
|
||||
ls_pcie_g4_outbound_win_set(pcie, idx++, PAB_AXI_TYPE_MEM,
|
||||
mem->phys_start, mem->bus_start,
|
||||
mem->size);
|
||||
|
||||
if (pref)
|
||||
/* OUTBOUND WIN: perf MEM */
|
||||
ls_pcie_g4_outbound_win_set(pcie, idx++, PAB_AXI_TYPE_MEM,
|
||||
pref->phys_start, pref->bus_start,
|
||||
pref->size);
|
||||
|
||||
ls_pcie_g4_dump_wins(pcie, idx);
|
||||
}
|
||||
|
||||
/* Return 0 if the address is valid, -errno if not valid */
|
||||
static int ls_pcie_g4_addr_valid(struct ls_pcie_g4 *pcie, pci_dev_t bdf)
|
||||
{
|
||||
struct udevice *bus = pcie->bus;
|
||||
|
||||
if (pcie->mode == PCI_HEADER_TYPE_NORMAL)
|
||||
return -ENODEV;
|
||||
|
||||
if (!pcie->enabled)
|
||||
return -ENXIO;
|
||||
|
||||
if (PCI_BUS(bdf) < bus->seq)
|
||||
return -EINVAL;
|
||||
|
||||
if ((PCI_BUS(bdf) > bus->seq) && (!ls_pcie_g4_link_up(pcie)))
|
||||
return -EINVAL;
|
||||
|
||||
if (PCI_BUS(bdf) <= (bus->seq + 1) && (PCI_DEV(bdf) > 0))
|
||||
return -EINVAL;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void *ls_pcie_g4_conf_address(struct ls_pcie_g4 *pcie, pci_dev_t bdf,
|
||||
int offset)
|
||||
{
|
||||
struct udevice *bus = pcie->bus;
|
||||
u32 target;
|
||||
|
||||
if (PCI_BUS(bdf) == bus->seq) {
|
||||
if (offset < INDIRECT_ADDR_BNDRY) {
|
||||
ccsr_set_page(pcie, 0);
|
||||
return pcie->ccsr + offset;
|
||||
}
|
||||
|
||||
ccsr_set_page(pcie, OFFSET_TO_PAGE_IDX(offset));
|
||||
return pcie->ccsr + OFFSET_TO_PAGE_ADDR(offset);
|
||||
}
|
||||
|
||||
target = PAB_TARGET_BUS(PCI_BUS(bdf) - bus->seq) |
|
||||
PAB_TARGET_DEV(PCI_DEV(bdf)) |
|
||||
PAB_TARGET_FUNC(PCI_FUNC(bdf));
|
||||
|
||||
ls_pcie_g4_cfg_set_target(pcie, target);
|
||||
|
||||
return pcie->cfg + offset;
|
||||
}
|
||||
|
||||
static int ls_pcie_g4_read_config(struct udevice *bus, pci_dev_t bdf,
|
||||
uint offset, ulong *valuep,
|
||||
enum pci_size_t size)
|
||||
{
|
||||
struct ls_pcie_g4 *pcie = dev_get_priv(bus);
|
||||
void *address;
|
||||
int ret = 0;
|
||||
|
||||
if (ls_pcie_g4_addr_valid(pcie, bdf)) {
|
||||
*valuep = pci_get_ff(size);
|
||||
return 0;
|
||||
}
|
||||
|
||||
address = ls_pcie_g4_conf_address(pcie, bdf, offset);
|
||||
|
||||
switch (size) {
|
||||
case PCI_SIZE_8:
|
||||
*valuep = readb(address);
|
||||
break;
|
||||
case PCI_SIZE_16:
|
||||
*valuep = readw(address);
|
||||
break;
|
||||
case PCI_SIZE_32:
|
||||
*valuep = readl(address);
|
||||
break;
|
||||
default:
|
||||
ret = -EINVAL;
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int ls_pcie_g4_write_config(struct udevice *bus, pci_dev_t bdf,
|
||||
uint offset, ulong value,
|
||||
enum pci_size_t size)
|
||||
{
|
||||
struct ls_pcie_g4 *pcie = dev_get_priv(bus);
|
||||
void *address;
|
||||
|
||||
if (ls_pcie_g4_addr_valid(pcie, bdf))
|
||||
return 0;
|
||||
|
||||
address = ls_pcie_g4_conf_address(pcie, bdf, offset);
|
||||
|
||||
switch (size) {
|
||||
case PCI_SIZE_8:
|
||||
writeb(value, address);
|
||||
return 0;
|
||||
case PCI_SIZE_16:
|
||||
writew(value, address);
|
||||
return 0;
|
||||
case PCI_SIZE_32:
|
||||
writel(value, address);
|
||||
return 0;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
static void ls_pcie_g4_setup_ctrl(struct ls_pcie_g4 *pcie)
|
||||
{
|
||||
u32 val;
|
||||
|
||||
/* Fix class code */
|
||||
val = ccsr_readl(pcie, GPEX_CLASSCODE);
|
||||
val &= ~(GPEX_CLASSCODE_MASK << GPEX_CLASSCODE_SHIFT);
|
||||
val |= PCI_CLASS_BRIDGE_PCI << GPEX_CLASSCODE_SHIFT;
|
||||
ccsr_writel(pcie, GPEX_CLASSCODE, val);
|
||||
|
||||
/* Enable APIO and Memory/IO/CFG Wins */
|
||||
val = ccsr_readl(pcie, PAB_AXI_PIO_CTRL(0));
|
||||
val |= APIO_EN | MEM_WIN_EN | IO_WIN_EN | CFG_WIN_EN;
|
||||
ccsr_writel(pcie, PAB_AXI_PIO_CTRL(0), val);
|
||||
|
||||
ls_pcie_g4_setup_wins(pcie);
|
||||
|
||||
pcie->stream_id_cur = 0;
|
||||
}
|
||||
|
||||
static void ls_pcie_g4_ep_inbound_win_set(struct ls_pcie_g4 *pcie, int pf,
|
||||
int bar, u64 phys)
|
||||
{
|
||||
u32 val;
|
||||
|
||||
/* PF BAR1 is for MSI-X and only need to enable */
|
||||
if (bar == 1) {
|
||||
ccsr_writel(pcie, PAB_PEX_BAR_AMAP(pf, bar), BAR_AMAP_EN);
|
||||
return;
|
||||
}
|
||||
|
||||
val = upper_32_bits(phys);
|
||||
ccsr_writel(pcie, PAB_EXT_PEX_BAR_AMAP(pf, bar), val);
|
||||
val = lower_32_bits(phys) | BAR_AMAP_EN;
|
||||
ccsr_writel(pcie, PAB_PEX_BAR_AMAP(pf, bar), val);
|
||||
}
|
||||
|
||||
static void ls_pcie_g4_ep_setup_wins(struct ls_pcie_g4 *pcie, int pf)
|
||||
{
|
||||
u64 phys;
|
||||
int bar;
|
||||
u32 val;
|
||||
|
||||
if ((!pcie->sriov_support && pf > LS_G4_PF0) || pf > LS_G4_PF1)
|
||||
return;
|
||||
|
||||
phys = CONFIG_SYS_PCI_EP_MEMORY_BASE + PCIE_BAR_SIZE * 4 * pf;
|
||||
for (bar = 0; bar < PF_BAR_NUM; bar++) {
|
||||
ls_pcie_g4_ep_inbound_win_set(pcie, pf, bar, phys);
|
||||
phys += PCIE_BAR_SIZE;
|
||||
}
|
||||
|
||||
/* OUTBOUND: map MEM */
|
||||
ls_pcie_g4_outbound_win_set(pcie, pf, PAB_AXI_TYPE_MEM,
|
||||
pcie->cfg_res.start +
|
||||
CONFIG_SYS_PCI_MEMORY_SIZE * pf, 0x0,
|
||||
CONFIG_SYS_PCI_MEMORY_SIZE);
|
||||
|
||||
val = ccsr_readl(pcie, PAB_AXI_AMAP_PCI_HDR_PARAM(pf));
|
||||
val &= ~FUNC_NUM_PCIE_MASK;
|
||||
val |= pf;
|
||||
ccsr_writel(pcie, PAB_AXI_AMAP_PCI_HDR_PARAM(pf), val);
|
||||
}
|
||||
|
||||
static void ls_pcie_g4_ep_enable_bar(struct ls_pcie_g4 *pcie, int pf,
|
||||
int bar, bool vf_bar, bool enable)
|
||||
{
|
||||
u32 val;
|
||||
u32 bar_pos = BAR_POS(bar, pf, vf_bar);
|
||||
|
||||
val = ccsr_readl(pcie, GPEX_BAR_ENABLE);
|
||||
if (enable)
|
||||
val |= 1 << bar_pos;
|
||||
else
|
||||
val &= ~(1 << bar_pos);
|
||||
ccsr_writel(pcie, GPEX_BAR_ENABLE, val);
|
||||
}
|
||||
|
||||
static void ls_pcie_g4_ep_set_bar_size(struct ls_pcie_g4 *pcie, int pf,
|
||||
int bar, bool vf_bar, u64 size)
|
||||
{
|
||||
u32 bar_pos = BAR_POS(bar, pf, vf_bar);
|
||||
u32 mask_l = lower_32_bits(~(size - 1));
|
||||
u32 mask_h = upper_32_bits(~(size - 1));
|
||||
|
||||
ccsr_writel(pcie, GPEX_BAR_SELECT, bar_pos);
|
||||
ccsr_writel(pcie, GPEX_BAR_SIZE_LDW, mask_l);
|
||||
ccsr_writel(pcie, GPEX_BAR_SIZE_UDW, mask_h);
|
||||
}
|
||||
|
||||
static void ls_pcie_g4_ep_setup_bar(struct ls_pcie_g4 *pcie, int pf,
|
||||
int bar, bool vf_bar, u64 size)
|
||||
{
|
||||
bool en = size ? true : false;
|
||||
|
||||
ls_pcie_g4_ep_enable_bar(pcie, pf, bar, vf_bar, en);
|
||||
ls_pcie_g4_ep_set_bar_size(pcie, pf, bar, vf_bar, size);
|
||||
}
|
||||
|
||||
static void ls_pcie_g4_ep_setup_bars(struct ls_pcie_g4 *pcie, int pf)
|
||||
{
|
||||
int bar;
|
||||
|
||||
/* Setup PF BARs */
|
||||
for (bar = 0; bar < PF_BAR_NUM; bar++)
|
||||
ls_pcie_g4_ep_setup_bar(pcie, pf, bar, false, bar_size[bar]);
|
||||
|
||||
if (!pcie->sriov_support)
|
||||
return;
|
||||
|
||||
/* Setup VF BARs */
|
||||
for (bar = 0; bar < VF_BAR_NUM; bar++)
|
||||
ls_pcie_g4_ep_setup_bar(pcie, pf, bar, true, bar_size[bar]);
|
||||
}
|
||||
|
||||
static void ls_pcie_g4_set_sriov(struct ls_pcie_g4 *pcie, int pf)
|
||||
{
|
||||
unsigned int val;
|
||||
|
||||
val = ccsr_readl(pcie, GPEX_SRIOV_INIT_VFS_TOTAL_VF(pf));
|
||||
val &= ~(TTL_VF_MASK << TTL_VF_SHIFT);
|
||||
val |= PCIE_VF_NUM << TTL_VF_SHIFT;
|
||||
val &= ~(INI_VF_MASK << INI_VF_SHIFT);
|
||||
val |= PCIE_VF_NUM << INI_VF_SHIFT;
|
||||
ccsr_writel(pcie, GPEX_SRIOV_INIT_VFS_TOTAL_VF(pf), val);
|
||||
|
||||
val = ccsr_readl(pcie, PCIE_SRIOV_VF_OFFSET_STRIDE);
|
||||
val += PCIE_VF_NUM * pf - pf;
|
||||
ccsr_writel(pcie, GPEX_SRIOV_VF_OFFSET_STRIDE(pf), val);
|
||||
}
|
||||
|
||||
static void ls_pcie_g4_setup_ep(struct ls_pcie_g4 *pcie)
|
||||
{
|
||||
u32 pf, sriov;
|
||||
u32 val;
|
||||
int i;
|
||||
|
||||
/* Enable APIO and Memory Win */
|
||||
val = ccsr_readl(pcie, PAB_AXI_PIO_CTRL(0));
|
||||
val |= APIO_EN | MEM_WIN_EN;
|
||||
ccsr_writel(pcie, PAB_AXI_PIO_CTRL(0), val);
|
||||
|
||||
sriov = ccsr_readl(pcie, PCIE_SRIOV_CAPABILITY);
|
||||
if (PCI_EXT_CAP_ID(sriov) == PCI_EXT_CAP_ID_SRIOV)
|
||||
pcie->sriov_support = 1;
|
||||
|
||||
pf = pcie->sriov_support ? PCIE_PF_NUM : 1;
|
||||
|
||||
for (i = 0; i < pf; i++) {
|
||||
ls_pcie_g4_ep_setup_bars(pcie, i);
|
||||
ls_pcie_g4_ep_setup_wins(pcie, i);
|
||||
if (pcie->sriov_support)
|
||||
ls_pcie_g4_set_sriov(pcie, i);
|
||||
}
|
||||
|
||||
ls_pcie_g4_ep_enable_cfg(pcie);
|
||||
ls_pcie_g4_dump_wins(pcie, pf);
|
||||
}
|
||||
|
||||
static int ls_pcie_g4_probe(struct udevice *dev)
|
||||
{
|
||||
struct ls_pcie_g4 *pcie = dev_get_priv(dev);
|
||||
const void *fdt = gd->fdt_blob;
|
||||
int node = dev_of_offset(dev);
|
||||
u32 link_ctrl_sta;
|
||||
u32 val;
|
||||
int ret;
|
||||
|
||||
pcie->bus = dev;
|
||||
|
||||
ret = fdt_get_named_resource(fdt, node, "reg", "reg-names",
|
||||
"ccsr", &pcie->ccsr_res);
|
||||
if (ret) {
|
||||
printf("ls-pcie-g4: resource \"ccsr\" not found\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
pcie->idx = (pcie->ccsr_res.start - PCIE_SYS_BASE_ADDR) /
|
||||
PCIE_CCSR_SIZE;
|
||||
|
||||
list_add(&pcie->list, &ls_pcie_g4_list);
|
||||
|
||||
pcie->enabled = is_serdes_configured(PCIE_SRDS_PRTCL(pcie->idx));
|
||||
if (!pcie->enabled) {
|
||||
printf("PCIe%d: %s disabled\n", pcie->idx, dev->name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
pcie->ccsr = map_physmem(pcie->ccsr_res.start,
|
||||
fdt_resource_size(&pcie->ccsr_res),
|
||||
MAP_NOCACHE);
|
||||
|
||||
ret = fdt_get_named_resource(fdt, node, "reg", "reg-names",
|
||||
"config", &pcie->cfg_res);
|
||||
if (ret) {
|
||||
printf("%s: resource \"config\" not found\n", dev->name);
|
||||
return ret;
|
||||
}
|
||||
|
||||
pcie->cfg = map_physmem(pcie->cfg_res.start,
|
||||
fdt_resource_size(&pcie->cfg_res),
|
||||
MAP_NOCACHE);
|
||||
|
||||
ret = fdt_get_named_resource(fdt, node, "reg", "reg-names",
|
||||
"lut", &pcie->lut_res);
|
||||
if (ret) {
|
||||
printf("ls-pcie-g4: resource \"lut\" not found\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
pcie->lut = map_physmem(pcie->lut_res.start,
|
||||
fdt_resource_size(&pcie->lut_res),
|
||||
MAP_NOCACHE);
|
||||
|
||||
ret = fdt_get_named_resource(fdt, node, "reg", "reg-names",
|
||||
"pf_ctrl", &pcie->pf_ctrl_res);
|
||||
if (ret) {
|
||||
printf("ls-pcie-g4: resource \"pf_ctrl\" not found\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
pcie->pf_ctrl = map_physmem(pcie->pf_ctrl_res.start,
|
||||
fdt_resource_size(&pcie->pf_ctrl_res),
|
||||
MAP_NOCACHE);
|
||||
|
||||
pcie->big_endian = fdtdec_get_bool(fdt, node, "big-endian");
|
||||
|
||||
debug("%s ccsr:%lx, cfg:0x%lx, big-endian:%d\n",
|
||||
dev->name, (unsigned long)pcie->ccsr, (unsigned long)pcie->cfg,
|
||||
pcie->big_endian);
|
||||
|
||||
pcie->mode = readb(pcie->ccsr + PCI_HEADER_TYPE) & 0x7f;
|
||||
|
||||
if (pcie->mode == PCI_HEADER_TYPE_NORMAL) {
|
||||
printf("PCIe%u: %s %s", pcie->idx, dev->name, "Endpoint");
|
||||
ls_pcie_g4_setup_ep(pcie);
|
||||
} else {
|
||||
printf("PCIe%u: %s %s", pcie->idx, dev->name, "Root Complex");
|
||||
ls_pcie_g4_setup_ctrl(pcie);
|
||||
}
|
||||
|
||||
/* Enable Amba & PEX PIO */
|
||||
val = ccsr_readl(pcie, PAB_CTRL);
|
||||
val |= PAB_CTRL_APIO_EN | PAB_CTRL_PPIO_EN;
|
||||
ccsr_writel(pcie, PAB_CTRL, val);
|
||||
|
||||
val = ccsr_readl(pcie, PAB_PEX_PIO_CTRL(0));
|
||||
val |= PPIO_EN;
|
||||
ccsr_writel(pcie, PAB_PEX_PIO_CTRL(0), val);
|
||||
|
||||
if (!ls_pcie_g4_link_up(pcie)) {
|
||||
/* Let the user know there's no PCIe link */
|
||||
printf(": no link\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Print the negotiated PCIe link width */
|
||||
link_ctrl_sta = ccsr_readl(pcie, PCIE_LINK_CTRL_STA);
|
||||
printf(": x%d gen%d\n",
|
||||
(link_ctrl_sta >> PCIE_LINK_WIDTH_SHIFT & PCIE_LINK_WIDTH_MASK),
|
||||
(link_ctrl_sta >> PCIE_LINK_SPEED_SHIFT) & PCIE_LINK_SPEED_MASK);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct dm_pci_ops ls_pcie_g4_ops = {
|
||||
.read_config = ls_pcie_g4_read_config,
|
||||
.write_config = ls_pcie_g4_write_config,
|
||||
};
|
||||
|
||||
static const struct udevice_id ls_pcie_g4_ids[] = {
|
||||
{ .compatible = "fsl,lx2160a-pcie" },
|
||||
{ }
|
||||
};
|
||||
|
||||
U_BOOT_DRIVER(pcie_layerscape_gen4) = {
|
||||
.name = "pcie_layerscape_gen4",
|
||||
.id = UCLASS_PCI,
|
||||
.of_match = ls_pcie_g4_ids,
|
||||
.ops = &ls_pcie_g4_ops,
|
||||
.probe = ls_pcie_g4_probe,
|
||||
.priv_auto_alloc_size = sizeof(struct ls_pcie_g4),
|
||||
};
|
264
drivers/pci/pcie_layerscape_gen4.h
Normal file
264
drivers/pci/pcie_layerscape_gen4.h
Normal file
|
@ -0,0 +1,264 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||
/*
|
||||
* Copyright 2018-2019 NXP
|
||||
*
|
||||
* PCIe Gen4 driver for NXP Layerscape SoCs
|
||||
* Author: Hou Zhiqiang <Minder.Hou@gmail.com>
|
||||
*/
|
||||
|
||||
#ifndef _PCIE_LAYERSCAPE_GEN4_H_
|
||||
#define _PCIE_LAYERSCAPE_GEN4_H_
|
||||
#include <pci.h>
|
||||
#include <dm.h>
|
||||
|
||||
#ifndef CONFIG_SYS_PCI_MEMORY_SIZE
|
||||
#define CONFIG_SYS_PCI_MEMORY_SIZE (4 * 1024 * 1024 * 1024ULL)
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_SYS_PCI_EP_MEMORY_BASE
|
||||
#define CONFIG_SYS_PCI_EP_MEMORY_BASE CONFIG_SYS_LOAD_ADDR
|
||||
#endif
|
||||
|
||||
#define PCIE_PF_NUM 2
|
||||
#define PCIE_VF_NUM 32
|
||||
|
||||
#define LS_G4_PF0 0
|
||||
#define LS_G4_PF1 1
|
||||
#define PF_BAR_NUM 4
|
||||
#define VF_BAR_NUM 4
|
||||
#define PCIE_BAR_SIZE (8 * 1024) /* 8K */
|
||||
#define PCIE_BAR0_SIZE PCIE_BAR_SIZE
|
||||
#define PCIE_BAR1_SIZE PCIE_BAR_SIZE
|
||||
#define PCIE_BAR2_SIZE PCIE_BAR_SIZE
|
||||
#define PCIE_BAR4_SIZE PCIE_BAR_SIZE
|
||||
#define SIZE_1T (1024 * 1024 * 1024 * 1024ULL)
|
||||
|
||||
/* GPEX CSR */
|
||||
#define GPEX_CLASSCODE 0x474
|
||||
#define GPEX_CLASSCODE_SHIFT 16
|
||||
#define GPEX_CLASSCODE_MASK 0xffff
|
||||
|
||||
#define GPEX_CFG_READY 0x4b0
|
||||
#define PCIE_CONFIG_READY BIT(0)
|
||||
|
||||
#define GPEX_BAR_ENABLE 0x4d4
|
||||
#define GPEX_BAR_SIZE_LDW 0x4d8
|
||||
#define GPEX_BAR_SIZE_UDW 0x4dC
|
||||
#define GPEX_BAR_SELECT 0x4e0
|
||||
|
||||
#define BAR_POS(bar, pf, vf_bar) \
|
||||
((bar) + (pf) * PF_BAR_NUM + (vf_bar) * PCIE_PF_NUM * PF_BAR_NUM)
|
||||
|
||||
#define GPEX_SRIOV_INIT_VFS_TOTAL_VF(pf) (0x644 + (pf) * 4)
|
||||
#define TTL_VF_MASK 0xffff
|
||||
#define TTL_VF_SHIFT 16
|
||||
#define INI_VF_MASK 0xffff
|
||||
#define INI_VF_SHIFT 0
|
||||
#define GPEX_SRIOV_VF_OFFSET_STRIDE(pf) (0x704 + (pf) * 4)
|
||||
|
||||
/* PAB CSR */
|
||||
#define PAB_CTRL 0x808
|
||||
#define PAB_CTRL_APIO_EN BIT(0)
|
||||
#define PAB_CTRL_PPIO_EN BIT(1)
|
||||
#define PAB_CTRL_MAX_BRST_LEN_SHIFT 4
|
||||
#define PAB_CTRL_MAX_BRST_LEN_MASK 0x3
|
||||
#define PAB_CTRL_PAGE_SEL_SHIFT 13
|
||||
#define PAB_CTRL_PAGE_SEL_MASK 0x3f
|
||||
#define PAB_CTRL_FUNC_SEL_SHIFT 19
|
||||
#define PAB_CTRL_FUNC_SEL_MASK 0x1ff
|
||||
|
||||
#define PAB_RST_CTRL 0x820
|
||||
#define PAB_BR_STAT 0x80c
|
||||
|
||||
/* AXI PIO Engines */
|
||||
#define PAB_AXI_PIO_CTRL(idx) (0x840 + 0x10 * (idx))
|
||||
#define APIO_EN BIT(0)
|
||||
#define MEM_WIN_EN BIT(1)
|
||||
#define IO_WIN_EN BIT(2)
|
||||
#define CFG_WIN_EN BIT(3)
|
||||
#define PAB_AXI_PIO_STAT(idx) (0x844 + 0x10 * (idx))
|
||||
#define PAB_AXI_PIO_SL_CMD_STAT(idx) (0x848 + 0x10 * (idx))
|
||||
#define PAB_AXI_PIO_SL_ADDR_STAT(idx) (0x84c + 0x10 * (idx))
|
||||
#define PAB_AXI_PIO_SL_EXT_ADDR_STAT(idx) (0xb8a0 + 0x4 * (idx))
|
||||
|
||||
/* PEX PIO Engines */
|
||||
#define PAB_PEX_PIO_CTRL(idx) (0x8c0 + 0x10 * (idx))
|
||||
#define PPIO_EN BIT(0)
|
||||
#define PAB_PEX_PIO_STAT(idx) (0x8c4 + 0x10 * (idx))
|
||||
#define PAB_PEX_PIO_MT_STAT(idx) (0x8c8 + 0x10 * (idx))
|
||||
|
||||
#define INDIRECT_ADDR_BNDRY 0xc00
|
||||
#define PAGE_IDX_SHIFT 10
|
||||
#define PAGE_ADDR_MASK 0x3ff
|
||||
|
||||
#define OFFSET_TO_PAGE_IDX(off) \
|
||||
(((off) >> PAGE_IDX_SHIFT) & PAB_CTRL_PAGE_SEL_MASK)
|
||||
|
||||
#define OFFSET_TO_PAGE_ADDR(off) \
|
||||
(((off) & PAGE_ADDR_MASK) | INDIRECT_ADDR_BNDRY)
|
||||
|
||||
/* APIO WINs */
|
||||
#define PAB_AXI_AMAP_CTRL(idx) (0xba0 + 0x10 * (idx))
|
||||
#define PAB_EXT_AXI_AMAP_SIZE(idx) (0xbaf0 + 0x4 * (idx))
|
||||
#define PAB_AXI_AMAP_AXI_WIN(idx) (0xba4 + 0x10 * (idx))
|
||||
#define PAB_EXT_AXI_AMAP_AXI_WIN(idx) (0x80a0 + 0x4 * (idx))
|
||||
#define PAB_AXI_AMAP_PEX_WIN_L(idx) (0xba8 + 0x10 * (idx))
|
||||
#define PAB_AXI_AMAP_PEX_WIN_H(idx) (0xbac + 0x10 * (idx))
|
||||
#define PAB_AXI_AMAP_PCI_HDR_PARAM(idx) (0x5ba0 + 0x4 * (idx))
|
||||
#define FUNC_NUM_PCIE_MASK GENMASK(7, 0)
|
||||
|
||||
#define AXI_AMAP_CTRL_EN BIT(0)
|
||||
#define AXI_AMAP_CTRL_TYPE_SHIFT 1
|
||||
#define AXI_AMAP_CTRL_TYPE_MASK 0x3
|
||||
#define AXI_AMAP_CTRL_SIZE_SHIFT 10
|
||||
#define AXI_AMAP_CTRL_SIZE_MASK 0x3fffff
|
||||
|
||||
#define PAB_TARGET_BUS(x) (((x) & 0xff) << 24)
|
||||
#define PAB_TARGET_DEV(x) (((x) & 0x1f) << 19)
|
||||
#define PAB_TARGET_FUNC(x) (((x) & 0x7) << 16)
|
||||
|
||||
#define PAB_AXI_TYPE_CFG 0x00
|
||||
#define PAB_AXI_TYPE_IO 0x01
|
||||
#define PAB_AXI_TYPE_MEM 0x02
|
||||
#define PAB_AXI_TYPE_ATOM 0x03
|
||||
|
||||
#define PAB_WINS_NUM 256
|
||||
|
||||
/* PPIO WINs RC mode */
|
||||
#define PAB_PEX_AMAP_CTRL(idx) (0x4ba0 + 0x10 * (idx))
|
||||
#define PAB_EXT_PEX_AMAP_SIZE(idx) (0xbef0 + 0x04 * (idx))
|
||||
#define PAB_PEX_AMAP_AXI_WIN(idx) (0x4ba4 + 0x10 * (idx))
|
||||
#define PAB_EXT_PEX_AMAP_AXI_WIN(idx) (0xb4a0 + 0x04 * (idx))
|
||||
#define PAB_PEX_AMAP_PEX_WIN_L(idx) (0x4ba8 + 0x10 * (idx))
|
||||
#define PAB_PEX_AMAP_PEX_WIN_H(idx) (0x4bac + 0x10 * (idx))
|
||||
|
||||
#define IB_TYPE_MEM_F 0x2
|
||||
#define IB_TYPE_MEM_NF 0x3
|
||||
|
||||
#define PEX_AMAP_CTRL_TYPE_SHIFT 0x1
|
||||
#define PEX_AMAP_CTRL_EN_SHIFT 0x0
|
||||
#define PEX_AMAP_CTRL_TYPE_MASK 0x3
|
||||
#define PEX_AMAP_CTRL_EN_MASK 0x1
|
||||
|
||||
/* PPIO WINs EP mode */
|
||||
#define PAB_PEX_BAR_AMAP(pf, bar) \
|
||||
(0x1ba0 + 0x20 * (pf) + 4 * (bar))
|
||||
#define BAR_AMAP_EN BIT(0)
|
||||
#define PAB_EXT_PEX_BAR_AMAP(pf, bar) \
|
||||
(0x84a0 + 0x20 * (pf) + 4 * (bar))
|
||||
|
||||
/* CCSR registers */
|
||||
#define PCIE_LINK_CTRL_STA 0x5c
|
||||
#define PCIE_LINK_SPEED_SHIFT 16
|
||||
#define PCIE_LINK_SPEED_MASK 0x0f
|
||||
#define PCIE_LINK_WIDTH_SHIFT 20
|
||||
#define PCIE_LINK_WIDTH_MASK 0x3f
|
||||
#define PCIE_SRIOV_CAPABILITY 0x2a0
|
||||
#define PCIE_SRIOV_VF_OFFSET_STRIDE 0x2b4
|
||||
|
||||
/* LUT registers */
|
||||
#define PCIE_LUT_UDR(n) (0x800 + (n) * 8)
|
||||
#define PCIE_LUT_LDR(n) (0x804 + (n) * 8)
|
||||
#define PCIE_LUT_ENABLE BIT(31)
|
||||
#define PCIE_LUT_ENTRY_COUNT 32
|
||||
|
||||
/* PF control registers */
|
||||
#define PCIE_LTSSM_STA 0x7fc
|
||||
#define LTSSM_STATE_MASK 0x7f
|
||||
#define LTSSM_PCIE_L0 0x2d /* L0 state */
|
||||
|
||||
#define PCIE_SRDS_PRTCL(idx) (PCIE1 + (idx))
|
||||
#define PCIE_SYS_BASE_ADDR 0x3400000
|
||||
#define PCIE_CCSR_SIZE 0x0100000
|
||||
|
||||
struct ls_pcie_g4 {
|
||||
int idx;
|
||||
struct list_head list;
|
||||
struct udevice *bus;
|
||||
struct fdt_resource ccsr_res;
|
||||
struct fdt_resource cfg_res;
|
||||
struct fdt_resource lut_res;
|
||||
struct fdt_resource pf_ctrl_res;
|
||||
void __iomem *ccsr;
|
||||
void __iomem *cfg;
|
||||
void __iomem *lut;
|
||||
void __iomem *pf_ctrl;
|
||||
bool big_endian;
|
||||
bool enabled;
|
||||
int next_lut_index;
|
||||
struct pci_controller hose;
|
||||
int stream_id_cur;
|
||||
int mode;
|
||||
int sriov_support;
|
||||
};
|
||||
|
||||
extern struct list_head ls_pcie_g4_list;
|
||||
|
||||
static inline void lut_writel(struct ls_pcie_g4 *pcie, unsigned int value,
|
||||
unsigned int offset)
|
||||
{
|
||||
if (pcie->big_endian)
|
||||
out_be32(pcie->lut + offset, value);
|
||||
else
|
||||
out_le32(pcie->lut + offset, value);
|
||||
}
|
||||
|
||||
static inline u32 lut_readl(struct ls_pcie_g4 *pcie, unsigned int offset)
|
||||
{
|
||||
if (pcie->big_endian)
|
||||
return in_be32(pcie->lut + offset);
|
||||
else
|
||||
return in_le32(pcie->lut + offset);
|
||||
}
|
||||
|
||||
static inline void ccsr_set_page(struct ls_pcie_g4 *pcie, u8 pg_idx)
|
||||
{
|
||||
u32 val;
|
||||
|
||||
val = in_le32(pcie->ccsr + PAB_CTRL);
|
||||
val &= ~(PAB_CTRL_PAGE_SEL_MASK << PAB_CTRL_PAGE_SEL_SHIFT);
|
||||
val |= (pg_idx & PAB_CTRL_PAGE_SEL_MASK) << PAB_CTRL_PAGE_SEL_SHIFT;
|
||||
|
||||
out_le32(pcie->ccsr + PAB_CTRL, val);
|
||||
}
|
||||
|
||||
static inline unsigned int ccsr_readl(struct ls_pcie_g4 *pcie, u32 offset)
|
||||
{
|
||||
if (offset < INDIRECT_ADDR_BNDRY) {
|
||||
ccsr_set_page(pcie, 0);
|
||||
return in_le32(pcie->ccsr + offset);
|
||||
}
|
||||
|
||||
ccsr_set_page(pcie, OFFSET_TO_PAGE_IDX(offset));
|
||||
return in_le32(pcie->ccsr + OFFSET_TO_PAGE_ADDR(offset));
|
||||
}
|
||||
|
||||
static inline void ccsr_writel(struct ls_pcie_g4 *pcie, u32 offset, u32 value)
|
||||
{
|
||||
if (offset < INDIRECT_ADDR_BNDRY) {
|
||||
ccsr_set_page(pcie, 0);
|
||||
out_le32(pcie->ccsr + offset, value);
|
||||
} else {
|
||||
ccsr_set_page(pcie, OFFSET_TO_PAGE_IDX(offset));
|
||||
out_le32(pcie->ccsr + OFFSET_TO_PAGE_ADDR(offset), value);
|
||||
}
|
||||
}
|
||||
|
||||
static inline unsigned int pf_ctrl_readl(struct ls_pcie_g4 *pcie, u32 offset)
|
||||
{
|
||||
if (pcie->big_endian)
|
||||
return in_be32(pcie->pf_ctrl + offset);
|
||||
else
|
||||
return in_le32(pcie->pf_ctrl + offset);
|
||||
}
|
||||
|
||||
static inline void pf_ctrl_writel(struct ls_pcie_g4 *pcie, u32 offset,
|
||||
u32 value)
|
||||
{
|
||||
if (pcie->big_endian)
|
||||
out_be32(pcie->pf_ctrl + offset, value);
|
||||
else
|
||||
out_le32(pcie->pf_ctrl + offset, value);
|
||||
}
|
||||
|
||||
#endif /* _PCIE_LAYERSCAPE_GEN4_H_ */
|
249
drivers/pci/pcie_layerscape_gen4_fixup.c
Normal file
249
drivers/pci/pcie_layerscape_gen4_fixup.c
Normal file
|
@ -0,0 +1,249 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+ OR X11
|
||||
/*
|
||||
* Copyright 2018-2019 NXP
|
||||
*
|
||||
* PCIe Gen4 driver for NXP Layerscape SoCs
|
||||
* Author: Hou Zhiqiang <Minder.Hou@gmail.com>
|
||||
*
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <pci.h>
|
||||
#include <asm/arch/fsl_serdes.h>
|
||||
#include <asm/io.h>
|
||||
#include <errno.h>
|
||||
#ifdef CONFIG_OF_BOARD_SETUP
|
||||
#include <linux/libfdt.h>
|
||||
#include <fdt_support.h>
|
||||
#ifdef CONFIG_ARM
|
||||
#include <asm/arch/clock.h>
|
||||
#endif
|
||||
#include "pcie_layerscape_gen4.h"
|
||||
|
||||
#if defined(CONFIG_FSL_LSCH3) || defined(CONFIG_FSL_LSCH2)
|
||||
/*
|
||||
* Return next available LUT index.
|
||||
*/
|
||||
static int ls_pcie_g4_next_lut_index(struct ls_pcie_g4 *pcie)
|
||||
{
|
||||
if (pcie->next_lut_index < PCIE_LUT_ENTRY_COUNT)
|
||||
return pcie->next_lut_index++;
|
||||
|
||||
return -ENOSPC; /* LUT is full */
|
||||
}
|
||||
|
||||
/* returns the next available streamid for pcie, -errno if failed */
|
||||
static int ls_pcie_g4_next_streamid(struct ls_pcie_g4 *pcie)
|
||||
{
|
||||
int stream_id = pcie->stream_id_cur;
|
||||
|
||||
if (stream_id > FSL_PEX_STREAM_ID_NUM)
|
||||
return -EINVAL;
|
||||
|
||||
pcie->stream_id_cur++;
|
||||
|
||||
return stream_id | ((pcie->idx + 1) << 11);
|
||||
}
|
||||
|
||||
/*
|
||||
* Program a single LUT entry
|
||||
*/
|
||||
static void ls_pcie_g4_lut_set_mapping(struct ls_pcie_g4 *pcie, int index,
|
||||
u32 devid, u32 streamid)
|
||||
{
|
||||
/* leave mask as all zeroes, want to match all bits */
|
||||
lut_writel(pcie, devid << 16, PCIE_LUT_UDR(index));
|
||||
lut_writel(pcie, streamid | PCIE_LUT_ENABLE, PCIE_LUT_LDR(index));
|
||||
}
|
||||
|
||||
/*
|
||||
* An msi-map is a property to be added to the pci controller
|
||||
* node. It is a table, where each entry consists of 4 fields
|
||||
* e.g.:
|
||||
*
|
||||
* msi-map = <[devid] [phandle-to-msi-ctrl] [stream-id] [count]
|
||||
* [devid] [phandle-to-msi-ctrl] [stream-id] [count]>;
|
||||
*/
|
||||
static void fdt_pcie_set_msi_map_entry(void *blob, struct ls_pcie_g4 *pcie,
|
||||
u32 devid, u32 streamid)
|
||||
{
|
||||
u32 *prop;
|
||||
u32 phandle;
|
||||
int nodeoff;
|
||||
|
||||
#ifdef CONFIG_FSL_PCIE_COMPAT
|
||||
nodeoff = fdt_node_offset_by_compat_reg(blob, CONFIG_FSL_PCIE_COMPAT,
|
||||
pcie->ccsr_res.start);
|
||||
#else
|
||||
#error "No CONFIG_FSL_PCIE_COMPAT defined"
|
||||
#endif
|
||||
if (nodeoff < 0) {
|
||||
debug("%s: ERROR: failed to find pcie compatiable\n", __func__);
|
||||
return;
|
||||
}
|
||||
|
||||
/* get phandle to MSI controller */
|
||||
prop = (u32 *)fdt_getprop(blob, nodeoff, "msi-parent", 0);
|
||||
if (!prop) {
|
||||
debug("\n%s: ERROR: missing msi-parent: PCIe%d\n",
|
||||
__func__, pcie->idx);
|
||||
return;
|
||||
}
|
||||
phandle = fdt32_to_cpu(*prop);
|
||||
|
||||
/* set one msi-map row */
|
||||
fdt_appendprop_u32(blob, nodeoff, "msi-map", devid);
|
||||
fdt_appendprop_u32(blob, nodeoff, "msi-map", phandle);
|
||||
fdt_appendprop_u32(blob, nodeoff, "msi-map", streamid);
|
||||
fdt_appendprop_u32(blob, nodeoff, "msi-map", 1);
|
||||
}
|
||||
|
||||
/*
|
||||
* An iommu-map is a property to be added to the pci controller
|
||||
* node. It is a table, where each entry consists of 4 fields
|
||||
* e.g.:
|
||||
*
|
||||
* iommu-map = <[devid] [phandle-to-iommu-ctrl] [stream-id] [count]
|
||||
* [devid] [phandle-to-iommu-ctrl] [stream-id] [count]>;
|
||||
*/
|
||||
static void fdt_pcie_set_iommu_map_entry(void *blob, struct ls_pcie_g4 *pcie,
|
||||
u32 devid, u32 streamid)
|
||||
{
|
||||
u32 *prop;
|
||||
u32 iommu_map[4];
|
||||
int nodeoff;
|
||||
int lenp;
|
||||
|
||||
#ifdef CONFIG_FSL_PCIE_COMPAT
|
||||
nodeoff = fdt_node_offset_by_compat_reg(blob, CONFIG_FSL_PCIE_COMPAT,
|
||||
pcie->ccsr_res.start);
|
||||
#else
|
||||
#error "No CONFIG_FSL_PCIE_COMPAT defined"
|
||||
#endif
|
||||
if (nodeoff < 0) {
|
||||
debug("%s: ERROR: failed to find pcie compatiable\n", __func__);
|
||||
return;
|
||||
}
|
||||
|
||||
/* get phandle to iommu controller */
|
||||
prop = fdt_getprop_w(blob, nodeoff, "iommu-map", &lenp);
|
||||
if (!prop) {
|
||||
debug("\n%s: ERROR: missing iommu-map: PCIe%d\n",
|
||||
__func__, pcie->idx);
|
||||
return;
|
||||
}
|
||||
|
||||
/* set iommu-map row */
|
||||
iommu_map[0] = cpu_to_fdt32(devid);
|
||||
iommu_map[1] = *++prop;
|
||||
iommu_map[2] = cpu_to_fdt32(streamid);
|
||||
iommu_map[3] = cpu_to_fdt32(1);
|
||||
|
||||
if (devid == 0)
|
||||
fdt_setprop_inplace(blob, nodeoff, "iommu-map", iommu_map, 16);
|
||||
else
|
||||
fdt_appendprop(blob, nodeoff, "iommu-map", iommu_map, 16);
|
||||
}
|
||||
|
||||
static void fdt_fixup_pcie(void *blob)
|
||||
{
|
||||
struct udevice *dev, *bus;
|
||||
struct ls_pcie_g4 *pcie;
|
||||
int streamid;
|
||||
int index;
|
||||
pci_dev_t bdf;
|
||||
|
||||
/* Scan all known buses */
|
||||
for (pci_find_first_device(&dev); dev; pci_find_next_device(&dev)) {
|
||||
for (bus = dev; device_is_on_pci_bus(bus);)
|
||||
bus = bus->parent;
|
||||
pcie = dev_get_priv(bus);
|
||||
|
||||
streamid = ls_pcie_g4_next_streamid(pcie);
|
||||
if (streamid < 0) {
|
||||
debug("ERROR: no stream ids free\n");
|
||||
continue;
|
||||
}
|
||||
|
||||
index = ls_pcie_g4_next_lut_index(pcie);
|
||||
if (index < 0) {
|
||||
debug("ERROR: no LUT indexes free\n");
|
||||
continue;
|
||||
}
|
||||
|
||||
/* the DT fixup must be relative to the hose first_busno */
|
||||
bdf = dm_pci_get_bdf(dev) - PCI_BDF(bus->seq, 0, 0);
|
||||
/* map PCI b.d.f to streamID in LUT */
|
||||
ls_pcie_g4_lut_set_mapping(pcie, index, bdf >> 8, streamid);
|
||||
/* update msi-map in device tree */
|
||||
fdt_pcie_set_msi_map_entry(blob, pcie, bdf >> 8, streamid);
|
||||
/* update iommu-map in device tree */
|
||||
fdt_pcie_set_iommu_map_entry(blob, pcie, bdf >> 8, streamid);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static void ft_pcie_ep_layerscape_gen4_fix(void *blob, struct ls_pcie_g4 *pcie)
|
||||
{
|
||||
int off;
|
||||
|
||||
off = fdt_node_offset_by_compat_reg(blob, "fsl,lx2160a-pcie-ep",
|
||||
pcie->ccsr_res.start);
|
||||
|
||||
if (off < 0) {
|
||||
debug("%s: ERROR: failed to find pcie compatiable\n",
|
||||
__func__);
|
||||
return;
|
||||
}
|
||||
|
||||
if (pcie->enabled && pcie->mode == PCI_HEADER_TYPE_NORMAL)
|
||||
fdt_set_node_status(blob, off, FDT_STATUS_OKAY, 0);
|
||||
else
|
||||
fdt_set_node_status(blob, off, FDT_STATUS_DISABLED, 0);
|
||||
}
|
||||
|
||||
static void ft_pcie_rc_layerscape_gen4_fix(void *blob, struct ls_pcie_g4 *pcie)
|
||||
{
|
||||
int off;
|
||||
|
||||
#ifdef CONFIG_FSL_PCIE_COMPAT
|
||||
off = fdt_node_offset_by_compat_reg(blob, CONFIG_FSL_PCIE_COMPAT,
|
||||
pcie->ccsr_res.start);
|
||||
#else
|
||||
#error "No CONFIG_FSL_PCIE_COMPAT defined"
|
||||
#endif
|
||||
if (off < 0) {
|
||||
debug("%s: ERROR: failed to find pcie compatiable\n", __func__);
|
||||
return;
|
||||
}
|
||||
|
||||
if (pcie->enabled && pcie->mode == PCI_HEADER_TYPE_BRIDGE)
|
||||
fdt_set_node_status(blob, off, FDT_STATUS_OKAY, 0);
|
||||
else
|
||||
fdt_set_node_status(blob, off, FDT_STATUS_DISABLED, 0);
|
||||
}
|
||||
|
||||
static void ft_pcie_layerscape_gen4_setup(void *blob, struct ls_pcie_g4 *pcie)
|
||||
{
|
||||
ft_pcie_rc_layerscape_gen4_fix(blob, pcie);
|
||||
ft_pcie_ep_layerscape_gen4_fix(blob, pcie);
|
||||
}
|
||||
|
||||
/* Fixup Kernel DT for PCIe */
|
||||
void ft_pci_setup(void *blob, bd_t *bd)
|
||||
{
|
||||
struct ls_pcie_g4 *pcie;
|
||||
|
||||
list_for_each_entry(pcie, &ls_pcie_g4_list, list)
|
||||
ft_pcie_layerscape_gen4_setup(blob, pcie);
|
||||
|
||||
#if defined(CONFIG_FSL_LSCH3) || defined(CONFIG_FSL_LSCH2)
|
||||
fdt_fixup_pcie(blob);
|
||||
#endif
|
||||
}
|
||||
|
||||
#else /* !CONFIG_OF_BOARD_SETUP */
|
||||
void ft_pci_setup(void *blob, bd_t *bd)
|
||||
{
|
||||
}
|
||||
#endif
|
|
@ -103,6 +103,13 @@ config WDT_ORION
|
|||
Select this to enable Orion watchdog timer, which can be found on some
|
||||
Marvell Armada chips.
|
||||
|
||||
config WDT_SP805
|
||||
bool "SP805 watchdog timer support"
|
||||
depends on WDT
|
||||
help
|
||||
Select this to enable SP805 watchdog timer, which can be found on some
|
||||
nxp layerscape chips.
|
||||
|
||||
config WDT_CDNS
|
||||
bool "Cadence watchdog timer support"
|
||||
depends on WDT
|
||||
|
|
|
@ -27,3 +27,4 @@ obj-$(CONFIG_WDT_CDNS) += cdns_wdt.o
|
|||
obj-$(CONFIG_WDT_MPC8xx) += mpc8xx_wdt.o
|
||||
obj-$(CONFIG_WDT_MT7621) += mt7621_wdt.o
|
||||
obj-$(CONFIG_WDT_MTK) += mtk_wdt.o
|
||||
obj-$(CONFIG_WDT_SP805) += sp805_wdt.o
|
||||
|
|
127
drivers/watchdog/sp805_wdt.c
Normal file
127
drivers/watchdog/sp805_wdt.c
Normal file
|
@ -0,0 +1,127 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+
|
||||
/*
|
||||
* Watchdog driver for SP805 on some Layerscape SoC
|
||||
*
|
||||
* Copyright 2019 NXP
|
||||
*/
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <common.h>
|
||||
#include <dm/device.h>
|
||||
#include <dm/fdtaddr.h>
|
||||
#include <dm/read.h>
|
||||
#include <linux/bitops.h>
|
||||
#include <watchdog.h>
|
||||
#include <wdt.h>
|
||||
|
||||
#define WDTLOAD 0x000
|
||||
#define WDTCONTROL 0x008
|
||||
#define WDTINTCLR 0x00C
|
||||
#define WDTLOCK 0xC00
|
||||
|
||||
#define TIME_OUT_MIN_MSECS 1
|
||||
#define TIME_OUT_MAX_MSECS 120000
|
||||
#define SYS_FSL_WDT_CLK_DIV 16
|
||||
#define INT_ENABLE BIT(0)
|
||||
#define RESET_ENABLE BIT(1)
|
||||
#define DISABLE 0
|
||||
#define UNLOCK 0x1ACCE551
|
||||
#define LOCK 0x00000001
|
||||
#define INT_MASK BIT(0)
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
struct sp805_wdt_priv {
|
||||
void __iomem *reg;
|
||||
};
|
||||
|
||||
static int sp805_wdt_reset(struct udevice *dev)
|
||||
{
|
||||
struct sp805_wdt_priv *priv = dev_get_priv(dev);
|
||||
|
||||
writel(UNLOCK, priv->reg + WDTLOCK);
|
||||
writel(INT_MASK, priv->reg + WDTINTCLR);
|
||||
writel(LOCK, priv->reg + WDTLOCK);
|
||||
readl(priv->reg + WDTLOCK);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sp805_wdt_start(struct udevice *dev, u64 timeout, ulong flags)
|
||||
{
|
||||
u32 load_value;
|
||||
u32 load_time;
|
||||
struct sp805_wdt_priv *priv = dev_get_priv(dev);
|
||||
|
||||
load_time = (u32)timeout;
|
||||
if (timeout < TIME_OUT_MIN_MSECS)
|
||||
load_time = TIME_OUT_MIN_MSECS;
|
||||
else if (timeout > TIME_OUT_MAX_MSECS)
|
||||
load_time = TIME_OUT_MAX_MSECS;
|
||||
/* sp805 runs counter with given value twice, so when the max timeout is
|
||||
* set 120s, the gd->bus_clk is less than 1145MHz, the load_value will
|
||||
* not overflow.
|
||||
*/
|
||||
load_value = (gd->bus_clk) /
|
||||
(2 * 1000 * SYS_FSL_WDT_CLK_DIV) * load_time;
|
||||
|
||||
writel(UNLOCK, priv->reg + WDTLOCK);
|
||||
writel(load_value, priv->reg + WDTLOAD);
|
||||
writel(INT_MASK, priv->reg + WDTINTCLR);
|
||||
writel(INT_ENABLE | RESET_ENABLE, priv->reg + WDTCONTROL);
|
||||
writel(LOCK, priv->reg + WDTLOCK);
|
||||
readl(priv->reg + WDTLOCK);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sp805_wdt_stop(struct udevice *dev)
|
||||
{
|
||||
struct sp805_wdt_priv *priv = dev_get_priv(dev);
|
||||
|
||||
writel(UNLOCK, priv->reg + WDTLOCK);
|
||||
writel(DISABLE, priv->reg + WDTCONTROL);
|
||||
writel(LOCK, priv->reg + WDTLOCK);
|
||||
readl(priv->reg + WDTLOCK);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sp805_wdt_probe(struct udevice *dev)
|
||||
{
|
||||
debug("%s: Probing wdt%u\n", __func__, dev->seq);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sp805_wdt_ofdata_to_platdata(struct udevice *dev)
|
||||
{
|
||||
struct sp805_wdt_priv *priv = dev_get_priv(dev);
|
||||
|
||||
priv->reg = (void __iomem *)dev_read_addr(dev);
|
||||
if (IS_ERR(priv->reg))
|
||||
return PTR_ERR(priv->reg);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct wdt_ops sp805_wdt_ops = {
|
||||
.start = sp805_wdt_start,
|
||||
.reset = sp805_wdt_reset,
|
||||
.stop = sp805_wdt_stop,
|
||||
};
|
||||
|
||||
static const struct udevice_id sp805_wdt_ids[] = {
|
||||
{ .compatible = "arm,sp805-wdt" },
|
||||
{}
|
||||
};
|
||||
|
||||
U_BOOT_DRIVER(sp805_wdt) = {
|
||||
.name = "sp805_wdt",
|
||||
.id = UCLASS_WDT,
|
||||
.of_match = sp805_wdt_ids,
|
||||
.probe = sp805_wdt_probe,
|
||||
.priv_auto_alloc_size = sizeof(struct sp805_wdt_priv),
|
||||
.ofdata_to_platdata = sp805_wdt_ofdata_to_platdata,
|
||||
.ops = &sp805_wdt_ops,
|
||||
};
|
|
@ -98,7 +98,8 @@
|
|||
"${scriptaddr} ${prefix}${script}; " \
|
||||
"env exists secureboot && load ${devtype} " \
|
||||
"${devnum}:${distro_bootpart} " \
|
||||
"${scripthdraddr} ${prefix}${boot_script_hdr} " \
|
||||
"${scripthdraddr} ${prefix}${boot_script_hdr}; " \
|
||||
"env exists secureboot " \
|
||||
"&& esbc_validate ${scripthdraddr};" \
|
||||
"source ${scriptaddr}\0" \
|
||||
"installer=load mmc 0:2 $load_addr " \
|
||||
|
|
|
@ -98,7 +98,8 @@
|
|||
"${scriptaddr} ${prefix}${script}; " \
|
||||
"env exists secureboot && load ${devtype} " \
|
||||
"${devnum}:${distro_bootpart} " \
|
||||
"${scripthdraddr} ${prefix}${boot_script_hdr} " \
|
||||
"${scripthdraddr} ${prefix}${boot_script_hdr}; " \
|
||||
"env exists secureboot " \
|
||||
"&& esbc_validate ${scripthdraddr};" \
|
||||
"source ${scriptaddr}\0" \
|
||||
"installer=load mmc 0:2 $load_addr " \
|
||||
|
|
|
@ -363,7 +363,8 @@
|
|||
"${scriptaddr} ${prefix}${script}; " \
|
||||
"env exists secureboot && load ${devtype} " \
|
||||
"${devnum}:${distro_bootpart} " \
|
||||
"${scripthdraddr} ${prefix}${boot_script_hdr} " \
|
||||
"${scripthdraddr} ${prefix}${boot_script_hdr}; " \
|
||||
"env exists secureboot " \
|
||||
"&& esbc_validate ${scripthdraddr};" \
|
||||
"source ${scriptaddr}\0" \
|
||||
"installer=load mmc 0:2 $load_addr " \
|
||||
|
|
200
include/configs/ls1028a_common.h
Normal file
200
include/configs/ls1028a_common.h
Normal file
|
@ -0,0 +1,200 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||
/*
|
||||
* Copyright 2019 NXP
|
||||
*/
|
||||
|
||||
#ifndef __L1028A_COMMON_H
|
||||
#define __L1028A_COMMON_H
|
||||
|
||||
#define CONFIG_REMAKE_ELF
|
||||
#define CONFIG_FSL_LAYERSCAPE
|
||||
#define CONFIG_MP
|
||||
|
||||
#include <asm/arch/stream_id_lsch3.h>
|
||||
#include <asm/arch/config.h>
|
||||
#include <asm/arch/soc.h>
|
||||
|
||||
/* Link Definitions */
|
||||
#define CONFIG_SYS_INIT_SP_ADDR CONFIG_SYS_TEXT_BASE
|
||||
|
||||
#define CONFIG_SKIP_LOWLEVEL_INIT
|
||||
|
||||
#define CONFIG_VERY_BIG_RAM
|
||||
#define CONFIG_SYS_DDR_SDRAM_BASE 0x80000000UL
|
||||
#define CONFIG_SYS_FSL_DDR_SDRAM_BASE_PHY 0
|
||||
#define CONFIG_SYS_SDRAM_BASE CONFIG_SYS_DDR_SDRAM_BASE
|
||||
#define CONFIG_SYS_DDR_BLOCK2_BASE 0x2080000000ULL
|
||||
#define CONFIG_SYS_FSL_DDR_MAIN_NUM_CTRLS 1
|
||||
|
||||
#define CONFIG_CMD_MEMTEST
|
||||
#define CONFIG_SYS_MEMTEST_START 0x80000000
|
||||
#define CONFIG_SYS_MEMTEST_END 0x9fffffff
|
||||
|
||||
/*
|
||||
* SMP Definitinos
|
||||
*/
|
||||
#define CPU_RELEASE_ADDR secondary_boot_func
|
||||
|
||||
/* Generic Timer Definitions */
|
||||
#define COUNTER_FREQUENCY 25000000 /* 25MHz */
|
||||
|
||||
/* Size of malloc() pool */
|
||||
#define CONFIG_SYS_MALLOC_LEN (CONFIG_ENV_SIZE + 2048 * 1024)
|
||||
|
||||
/* I2C */
|
||||
#define CONFIG_SYS_I2C
|
||||
|
||||
/* Serial Port */
|
||||
#define CONFIG_CONS_INDEX 1
|
||||
#define CONFIG_SYS_NS16550_SERIAL
|
||||
#define CONFIG_SYS_NS16550_REG_SIZE 1
|
||||
#define CONFIG_SYS_NS16550_CLK (get_bus_freq(0) / 2)
|
||||
|
||||
#define CONFIG_BAUDRATE 115200
|
||||
#define CONFIG_SYS_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
|
||||
|
||||
/* Miscellaneous configurable options */
|
||||
#define CONFIG_SYS_LOAD_ADDR (CONFIG_SYS_DDR_SDRAM_BASE + 0x10000000)
|
||||
|
||||
/* Physical Memory Map */
|
||||
#define CONFIG_CHIP_SELECTS_PER_CTRL 4
|
||||
|
||||
#define CONFIG_HWCONFIG
|
||||
#define HWCONFIG_BUFFER_SIZE 128
|
||||
|
||||
/* Allow to overwrite serial and ethaddr */
|
||||
#define CONFIG_ENV_OVERWRITE
|
||||
|
||||
#define BOOT_TARGET_DEVICES(func) \
|
||||
func(MMC, mmc, 0) \
|
||||
func(USB, usb, 0)
|
||||
#include <config_distro_bootcmd.h>
|
||||
|
||||
/* Initial environment variables */
|
||||
#define CONFIG_EXTRA_ENV_SETTINGS \
|
||||
"board=ls1028ardb\0" \
|
||||
"hwconfig=fsl_ddr:bank_intlv=auto\0" \
|
||||
"ramdisk_addr=0x800000\0" \
|
||||
"ramdisk_size=0x2000000\0" \
|
||||
"fdt_high=0xffffffffffffffff\0" \
|
||||
"initrd_high=0xffffffffffffffff\0" \
|
||||
"fdt_addr=0x00f00000\0" \
|
||||
"kernel_addr=0x01000000\0" \
|
||||
"scriptaddr=0x80000000\0" \
|
||||
"scripthdraddr=0x80080000\0" \
|
||||
"fdtheader_addr_r=0x80100000\0" \
|
||||
"kernelheader_addr_r=0x80200000\0" \
|
||||
"load_addr=0xa0000000\0" \
|
||||
"kernel_addr_r=0x81000000\0" \
|
||||
"fdt_addr_r=0x90000000\0" \
|
||||
"ramdisk_addr_r=0xa0000000\0" \
|
||||
"kernel_start=0x1000000\0" \
|
||||
"kernelheader_start=0x800000\0" \
|
||||
"kernel_load=0xa0000000\0" \
|
||||
"kernel_size=0x2800000\0" \
|
||||
"kernelheader_size=0x40000\0" \
|
||||
"kernel_addr_sd=0x8000\0" \
|
||||
"kernel_size_sd=0x14000\0" \
|
||||
"kernelhdr_addr_sd=0x4000\0" \
|
||||
"kernelhdr_size_sd=0x10\0" \
|
||||
"console=ttyS0,115200\0" \
|
||||
"mtdparts=" CONFIG_MTDPARTS_DEFAULT "\0" \
|
||||
BOOTENV \
|
||||
"boot_scripts=ls1028ardb_boot.scr\0" \
|
||||
"boot_script_hdr=hdr_ls1028ardb_bs.out\0" \
|
||||
"scan_dev_for_boot_part=" \
|
||||
"part list ${devtype} ${devnum} devplist; " \
|
||||
"env exists devplist || setenv devplist 1; " \
|
||||
"for distro_bootpart in ${devplist}; do " \
|
||||
"if fstype ${devtype} " \
|
||||
"${devnum}:${distro_bootpart} " \
|
||||
"bootfstype; then " \
|
||||
"run scan_dev_for_boot; " \
|
||||
"fi; " \
|
||||
"done\0" \
|
||||
"scan_dev_for_boot=" \
|
||||
"echo Scanning ${devtype} " \
|
||||
"${devnum}:${distro_bootpart}...; " \
|
||||
"for prefix in ${boot_prefixes}; do " \
|
||||
"run scan_dev_for_scripts; " \
|
||||
"done;" \
|
||||
"\0" \
|
||||
"boot_a_script=" \
|
||||
"load ${devtype} ${devnum}:${distro_bootpart} " \
|
||||
"${scriptaddr} ${prefix}${script}; " \
|
||||
"env exists secureboot && load ${devtype} " \
|
||||
"${devnum}:${distro_bootpart} " \
|
||||
"${scripthdraddr} ${prefix}${boot_script_hdr} " \
|
||||
"&& esbc_validate ${scripthdraddr};" \
|
||||
"source ${scriptaddr}\0" \
|
||||
"sd_bootcmd=echo Trying load from SD ..;" \
|
||||
"mmcinfo; mmc read $load_addr " \
|
||||
"$kernel_addr_sd $kernel_size_sd && " \
|
||||
"env exists secureboot && mmc read $kernelheader_addr_r " \
|
||||
"$kernelhdr_addr_sd $kernelhdr_size_sd " \
|
||||
" && esbc_validate ${kernelheader_addr_r};" \
|
||||
"bootm $load_addr#$board\0" \
|
||||
"emmc_bootcmd=echo Trying load from EMMC ..;" \
|
||||
"mmcinfo; mmc dev 1; mmc read $load_addr " \
|
||||
"$kernel_addr_sd $kernel_size_sd && " \
|
||||
"env exists secureboot && mmc read $kernelheader_addr_r " \
|
||||
"$kernelhdr_addr_sd $kernelhdr_size_sd " \
|
||||
" && esbc_validate ${kernelheader_addr_r};" \
|
||||
"bootm $load_addr#$board\0"
|
||||
|
||||
#undef CONFIG_BOOTCOMMAND
|
||||
|
||||
#define SD_BOOTCOMMAND \
|
||||
"run distro_bootcmd;run sd_bootcmd; " \
|
||||
"env exists secureboot && esbc_halt;"
|
||||
|
||||
/* Monitor Command Prompt */
|
||||
#define CONFIG_SYS_CBSIZE 512 /* Console I/O Buffer Size */
|
||||
#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + \
|
||||
sizeof(CONFIG_SYS_PROMPT) + 16)
|
||||
#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE /* Boot args buffer */
|
||||
|
||||
#ifndef CONFIG_CMDLINE_EDITING
|
||||
#define CONFIG_CMDLINE_EDITING 1
|
||||
#endif
|
||||
|
||||
#define CONFIG_SYS_MAXARGS 64 /* max command args */
|
||||
|
||||
#define CONFIG_SYS_BOOTM_LEN (64 << 20) /* Increase max gunzip size */
|
||||
|
||||
/* MMC */
|
||||
#ifdef CONFIG_MMC
|
||||
#define CONFIG_FSL_ESDHC
|
||||
#define CONFIG_SYS_FSL_MMC_HAS_CAPBLT_VS33
|
||||
#endif
|
||||
|
||||
#define CONFIG_SYS_MMC_ENV_DEV 0
|
||||
#define OCRAM_NONSECURE_SIZE 0x00010000
|
||||
#define CONFIG_ENV_OFFSET 0x500000 /* 5MB */
|
||||
#define CONFIG_SYS_FSL_QSPI_BASE 0x20000000
|
||||
#define CONFIG_ENV_ADDR CONFIG_SYS_FSL_QSPI_BASE + CONFIG_ENV_OFFSET
|
||||
#define CONFIG_ENV_SIZE 0x2000 /* 8KB */
|
||||
#define CONFIG_ENV_SECT_SIZE 0x40000
|
||||
|
||||
#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_TEXT_BASE
|
||||
|
||||
/* MMC */
|
||||
#ifdef CONFIG_MMC
|
||||
#define CONFIG_FSL_ESDHC
|
||||
#define CONFIG_SYS_FSL_MMC_HAS_CAPBLT_VS33
|
||||
#endif
|
||||
|
||||
/* I2C bus multiplexer */
|
||||
#define I2C_MUX_PCA_ADDR_PRI 0x77 /* Primary Mux*/
|
||||
#define I2C_MUX_CH_DEFAULT 0x8
|
||||
|
||||
/* EEPROM */
|
||||
#define CONFIG_ID_EEPROM
|
||||
#define CONFIG_SYS_I2C_EEPROM_NXID
|
||||
#define CONFIG_SYS_EEPROM_BUS_NUM 0
|
||||
#define CONFIG_SYS_I2C_EEPROM_ADDR 0x57
|
||||
#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 1
|
||||
#define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS 3
|
||||
#define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS 5
|
||||
|
||||
#endif /* __L1028A_COMMON_H */
|
161
include/configs/ls1028aqds.h
Normal file
161
include/configs/ls1028aqds.h
Normal file
|
@ -0,0 +1,161 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||
/*
|
||||
* Copyright 2019 NXP
|
||||
*/
|
||||
|
||||
#ifndef __LS1028A_QDS_H
|
||||
#define __LS1028A_QDS_H
|
||||
|
||||
#include "ls1028a_common.h"
|
||||
|
||||
#define CONFIG_SYS_CLK_FREQ 100000000
|
||||
#define CONFIG_DDR_CLK_FREQ 100000000
|
||||
#define COUNTER_FREQUENCY_REAL (CONFIG_SYS_CLK_FREQ / 4)
|
||||
|
||||
/* DDR */
|
||||
#define CONFIG_DIMM_SLOTS_PER_CTLR 2
|
||||
|
||||
#define CONFIG_QIXIS_I2C_ACCESS
|
||||
#define CONFIG_SYS_I2C_EARLY_INIT
|
||||
|
||||
/*
|
||||
* QIXIS Definitions
|
||||
*/
|
||||
#define CONFIG_FSL_QIXIS
|
||||
|
||||
#ifdef CONFIG_FSL_QIXIS
|
||||
#define QIXIS_BASE 0x7fb00000
|
||||
#define QIXIS_BASE_PHYS QIXIS_BASE
|
||||
#define CONFIG_SYS_I2C_FPGA_ADDR 0x66
|
||||
#define QIXIS_LBMAP_SWITCH 1
|
||||
#define QIXIS_LBMAP_MASK 0x0f
|
||||
#define QIXIS_LBMAP_SHIFT 5
|
||||
#define QIXIS_LBMAP_DFLTBANK 0x00
|
||||
#define QIXIS_LBMAP_ALTBANK 0x00
|
||||
#define QIXIS_LBMAP_SD 0x00
|
||||
#define QIXIS_LBMAP_EMMC 0x00
|
||||
#define QIXIS_LBMAP_QSPI 0x00
|
||||
#define QIXIS_RCW_SRC_SD 0x8
|
||||
#define QIXIS_RCW_SRC_EMMC 0x9
|
||||
#define QIXIS_RCW_SRC_QSPI 0xf
|
||||
#define QIXIS_RST_CTL_RESET 0x31
|
||||
#define QIXIS_RCFG_CTL_RECONFIG_IDLE 0x20
|
||||
#define QIXIS_RCFG_CTL_RECONFIG_START 0x21
|
||||
#define QIXIS_RCFG_CTL_WATCHDOG_ENBLE 0x08
|
||||
#define QIXIS_RST_FORCE_MEM 0x01
|
||||
|
||||
#define CONFIG_SYS_FPGA_CSPR_EXT (0x0)
|
||||
#define CONFIG_SYS_FPGA_CSPR (CSPR_PHYS_ADDR(QIXIS_BASE_PHYS) | \
|
||||
CSPR_PORT_SIZE_8 | \
|
||||
CSPR_MSEL_GPCM | \
|
||||
CSPR_V)
|
||||
#define CONFIG_SYS_FPGA_AMASK IFC_AMASK(64 * 1024)
|
||||
#define CONFIG_SYS_FPGA_CSOR (CSOR_NOR_ADM_SHIFT(4) | \
|
||||
CSOR_NOR_NOR_MODE_AVD_NOR | \
|
||||
CSOR_NOR_TRHZ_80)
|
||||
#endif
|
||||
|
||||
/* RTC */
|
||||
#define CONFIG_SYS_RTC_BUS_NUM 1
|
||||
#define I2C_MUX_CH_RTC 0xB
|
||||
|
||||
/* Store environment at top of flash */
|
||||
#define CONFIG_ENV_SIZE 0x2000
|
||||
|
||||
#ifdef CONFIG_SPL_BUILD
|
||||
#define CONFIG_SYS_MONITOR_BASE CONFIG_SPL_TEXT_BASE
|
||||
#else
|
||||
#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_TEXT_BASE
|
||||
#endif
|
||||
|
||||
/* SATA */
|
||||
#define CONFIG_SCSI_AHCI_PLAT
|
||||
|
||||
#define CONFIG_SYS_SATA1 AHCI_BASE_ADDR1
|
||||
#ifndef CONFIG_CMD_EXT2
|
||||
#define CONFIG_CMD_EXT2
|
||||
#endif
|
||||
#define CONFIG_SYS_SCSI_MAX_SCSI_ID 1
|
||||
#define CONFIG_SYS_SCSI_MAX_LUN 1
|
||||
#define CONFIG_SYS_SCSI_MAX_DEVICE (CONFIG_SYS_SCSI_MAX_SCSI_ID * \
|
||||
CONFIG_SYS_SCSI_MAX_LUN)
|
||||
/* DSPI */
|
||||
#ifdef CONFIG_FSL_DSPI
|
||||
#define CONFIG_SPI_FLASH_SST
|
||||
#define CONFIG_SPI_FLASH_EON
|
||||
#endif
|
||||
|
||||
#ifndef SPL_NO_ENV
|
||||
#undef CONFIG_EXTRA_ENV_SETTINGS
|
||||
#define CONFIG_EXTRA_ENV_SETTINGS \
|
||||
"board=ls1028aqds\0" \
|
||||
"hwconfig=fsl_ddr:bank_intlv=auto\0" \
|
||||
"ramdisk_addr=0x800000\0" \
|
||||
"ramdisk_size=0x2000000\0" \
|
||||
"fdt_high=0xffffffffffffffff\0" \
|
||||
"initrd_high=0xffffffffffffffff\0" \
|
||||
"fdt_addr=0x00f00000\0" \
|
||||
"kernel_addr=0x01000000\0" \
|
||||
"scriptaddr=0x80000000\0" \
|
||||
"scripthdraddr=0x80080000\0" \
|
||||
"fdtheader_addr_r=0x80100000\0" \
|
||||
"kernelheader_addr_r=0x80200000\0" \
|
||||
"load_addr=0xa0000000\0" \
|
||||
"kernel_addr_r=0x81000000\0" \
|
||||
"fdt_addr_r=0x90000000\0" \
|
||||
"ramdisk_addr_r=0xa0000000\0" \
|
||||
"kernel_start=0x1000000\0" \
|
||||
"kernelheader_start=0x800000\0" \
|
||||
"kernel_load=0xa0000000\0" \
|
||||
"kernel_size=0x2800000\0" \
|
||||
"kernelheader_size=0x40000\0" \
|
||||
"kernel_addr_sd=0x8000\0" \
|
||||
"kernel_size_sd=0x14000\0" \
|
||||
"kernelhdr_addr_sd=0x4000\0" \
|
||||
"kernelhdr_size_sd=0x10\0" \
|
||||
"console=ttyS0,115200\0" \
|
||||
"mtdparts=" CONFIG_MTDPARTS_DEFAULT "\0" \
|
||||
BOOTENV \
|
||||
"boot_scripts=ls1028aqds_boot.scr\0" \
|
||||
"boot_script_hdr=hdr_ls1028aqds_bs.out\0" \
|
||||
"scan_dev_for_boot_part=" \
|
||||
"part list ${devtype} ${devnum} devplist; " \
|
||||
"env exists devplist || setenv devplist 1; " \
|
||||
"for distro_bootpart in ${devplist}; do " \
|
||||
"if fstype ${devtype} " \
|
||||
"${devnum}:${distro_bootpart} " \
|
||||
"bootfstype; then " \
|
||||
"run scan_dev_for_boot; " \
|
||||
"fi; " \
|
||||
"done\0" \
|
||||
"scan_dev_for_boot=" \
|
||||
"echo Scanning ${devtype} " \
|
||||
"${devnum}:${distro_bootpart}...; " \
|
||||
"for prefix in ${boot_prefixes}; do " \
|
||||
"run scan_dev_for_scripts; " \
|
||||
"done;" \
|
||||
"\0" \
|
||||
"boot_a_script=" \
|
||||
"load ${devtype} ${devnum}:${distro_bootpart} " \
|
||||
"${scriptaddr} ${prefix}${script}; " \
|
||||
"env exists secureboot && load ${devtype} " \
|
||||
"${devnum}:${distro_bootpart} " \
|
||||
"${scripthdraddr} ${prefix}${boot_script_hdr} " \
|
||||
"&& esbc_validate ${scripthdraddr};" \
|
||||
"source ${scriptaddr}\0" \
|
||||
"sd_bootcmd=echo Trying load from SD ..;" \
|
||||
"mmcinfo; mmc read $load_addr " \
|
||||
"$kernel_addr_sd $kernel_size_sd && " \
|
||||
"env exists secureboot && mmc read $kernelheader_addr_r " \
|
||||
"$kernelhdr_addr_sd $kernelhdr_size_sd " \
|
||||
" && esbc_validate ${kernelheader_addr_r};" \
|
||||
"bootm $load_addr#$board\0" \
|
||||
"emmc_bootcmd=echo Trying load from EMMC ..;" \
|
||||
"mmcinfo; mmc dev 1; mmc read $load_addr " \
|
||||
"$kernel_addr_sd $kernel_size_sd && " \
|
||||
"env exists secureboot && mmc read $kernelheader_addr_r " \
|
||||
"$kernelhdr_addr_sd $kernelhdr_size_sd " \
|
||||
" && esbc_validate ${kernelheader_addr_r};" \
|
||||
"bootm $load_addr#$board\0"
|
||||
#endif
|
||||
#endif /* __LS1028A_QDS_H */
|
77
include/configs/ls1028ardb.h
Normal file
77
include/configs/ls1028ardb.h
Normal file
|
@ -0,0 +1,77 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||
/*
|
||||
* Copyright 2019 NXP
|
||||
*/
|
||||
|
||||
#ifndef __LS1028A_RDB_H
|
||||
#define __LS1028A_RDB_H
|
||||
|
||||
#include "ls1028a_common.h"
|
||||
|
||||
#define CONFIG_SYS_CLK_FREQ 100000000
|
||||
#define CONFIG_DDR_CLK_FREQ 100000000
|
||||
#define COUNTER_FREQUENCY_REAL (CONFIG_SYS_CLK_FREQ / 4)
|
||||
|
||||
#define CONFIG_SYS_RTC_BUS_NUM 0
|
||||
|
||||
/* Store environment at top of flash */
|
||||
#define CONFIG_ENV_SIZE 0x2000
|
||||
|
||||
#define CONFIG_DIMM_SLOTS_PER_CTLR 1
|
||||
|
||||
#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_TEXT_BASE
|
||||
|
||||
#define CONFIG_QIXIS_I2C_ACCESS
|
||||
#define CONFIG_SYS_I2C_EARLY_INIT
|
||||
|
||||
/*
|
||||
* QIXIS Definitions
|
||||
*/
|
||||
#define CONFIG_FSL_QIXIS
|
||||
|
||||
#ifdef CONFIG_FSL_QIXIS
|
||||
#define QIXIS_BASE 0x7fb00000
|
||||
#define QIXIS_BASE_PHYS QIXIS_BASE
|
||||
#define CONFIG_SYS_I2C_FPGA_ADDR 0x66
|
||||
#define QIXIS_LBMAP_SWITCH 2
|
||||
#define QIXIS_LBMAP_MASK 0xe0
|
||||
#define QIXIS_LBMAP_SHIFT 0x5
|
||||
#define QIXIS_LBMAP_DFLTBANK 0x00
|
||||
#define QIXIS_LBMAP_ALTBANK 0x00
|
||||
#define QIXIS_LBMAP_SD 0x00
|
||||
#define QIXIS_LBMAP_EMMC 0x00
|
||||
#define QIXIS_LBMAP_QSPI 0x00
|
||||
#define QIXIS_RCW_SRC_SD 0xf8
|
||||
#define QIXIS_RCW_SRC_EMMC 0xf9
|
||||
#define QIXIS_RCW_SRC_QSPI 0xff
|
||||
#define QIXIS_RST_CTL_RESET 0x31
|
||||
#define QIXIS_RCFG_CTL_RECONFIG_IDLE 0x10
|
||||
#define QIXIS_RCFG_CTL_RECONFIG_START 0x11
|
||||
#define QIXIS_RCFG_CTL_WATCHDOG_ENBLE 0x08
|
||||
#define QIXIS_RST_FORCE_MEM 0x01
|
||||
|
||||
#define CONFIG_SYS_FPGA_CSPR_EXT (0x0)
|
||||
#define CONFIG_SYS_FPGA_CSPR (CSPR_PHYS_ADDR(QIXIS_BASE_PHYS) | \
|
||||
CSPR_PORT_SIZE_8 | \
|
||||
CSPR_MSEL_GPCM | \
|
||||
CSPR_V)
|
||||
#define CONFIG_SYS_FPGA_CSOR (CSOR_NOR_ADM_SHIFT(4) | \
|
||||
CSOR_NOR_NOR_MODE_AVD_NOR | \
|
||||
CSOR_NOR_TRHZ_80)
|
||||
#endif
|
||||
|
||||
/* SATA */
|
||||
#ifndef CONFIG_CMD_EXT2
|
||||
#define CONFIG_CMD_EXT2
|
||||
#endif
|
||||
#define CONFIG_SYS_SCSI_MAX_SCSI_ID 1
|
||||
#define CONFIG_SYS_SCSI_MAX_LUN 1
|
||||
#define CONFIG_SYS_SCSI_MAX_DEVICE (CONFIG_SYS_SCSI_MAX_SCSI_ID * \
|
||||
CONFIG_SYS_SCSI_MAX_LUN)
|
||||
#define SCSI_VEND_ID 0x1b4b
|
||||
#define SCSI_DEV_ID 0x9170
|
||||
#define CONFIG_SCSI_DEV_LIST {SCSI_VEND_ID, SCSI_DEV_ID}
|
||||
#define CONFIG_SCSI_AHCI_PLAT
|
||||
#define CONFIG_SYS_SATA1 AHCI_BASE_ADDR1
|
||||
|
||||
#endif /* __LS1028A_RDB_H */
|
|
@ -273,7 +273,8 @@
|
|||
"${scriptaddr} ${prefix}${script}; " \
|
||||
"env exists secureboot && load ${devtype} " \
|
||||
"${devnum}:${distro_bootpart} " \
|
||||
"${scripthdraddr} ${prefix}${boot_script_hdr} " \
|
||||
"${scripthdraddr} ${prefix}${boot_script_hdr}; " \
|
||||
"env exists secureboot " \
|
||||
"&& esbc_validate ${scripthdraddr};" \
|
||||
"source ${scriptaddr}\0" \
|
||||
"qspi_bootcmd=echo Trying load from qspi..;" \
|
||||
|
|
|
@ -253,8 +253,9 @@
|
|||
"${scriptaddr} ${prefix}${script}; " \
|
||||
"env exists secureboot && load ${devtype} " \
|
||||
"${devnum}:${distro_bootpart} " \
|
||||
"${scripthdraddr} ${prefix}${boot_script_hdr} " \
|
||||
"&& esbc_validate ${scripthdraddr};" \
|
||||
"${scripthdraddr} ${prefix}${boot_script_hdr}; " \
|
||||
"env exists secureboot " \
|
||||
"&& esbc_validate ${scripthdraddr};" \
|
||||
"source ${scriptaddr}\0" \
|
||||
"qspi_bootcmd=echo Trying load from qspi..;" \
|
||||
"sf probe && sf read $load_addr " \
|
||||
|
|
|
@ -398,7 +398,8 @@
|
|||
"${scriptaddr} ${prefix}${script}; " \
|
||||
"env exists secureboot && load ${devtype} " \
|
||||
"${devnum}:${distro_bootpart} " \
|
||||
"${scripthdraddr} ${prefix}${boot_script_hdr} " \
|
||||
"${scripthdraddr} ${prefix}${boot_script_hdr}; "\
|
||||
"env exists secureboot " \
|
||||
"&& esbc_validate ${scripthdraddr};" \
|
||||
"source ${scriptaddr}\0" \
|
||||
"installer=load mmc 0:2 $load_addr " \
|
||||
|
|
|
@ -495,7 +495,8 @@ unsigned long get_board_sys_clk(void);
|
|||
"${scriptaddr} ${prefix}${script}; " \
|
||||
"env exists secureboot && load ${devtype} " \
|
||||
"${devnum}:${distro_bootpart} " \
|
||||
"${scripthdraddr} ${prefix}${boot_script_hdr} " \
|
||||
"${scripthdraddr} ${prefix}${boot_script_hdr}; " \
|
||||
"env exists secureboot " \
|
||||
"&& esbc_validate ${scripthdraddr};" \
|
||||
"source ${scriptaddr}\0" \
|
||||
"qspi_bootcmd=echo Trying load from qspi..;" \
|
||||
|
|
|
@ -187,7 +187,6 @@ unsigned long get_board_ddr_clk(void);
|
|||
#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + \
|
||||
sizeof(CONFIG_SYS_PROMPT) + 16)
|
||||
#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE /* Boot args buffer */
|
||||
#define CONFIG_CMDLINE_EDITING 1
|
||||
#define CONFIG_SYS_MAXARGS 64 /* max command args */
|
||||
|
||||
#define CONFIG_SYS_BOOTM_LEN (64 << 20) /* Increase max gunzip size */
|
||||
|
|
|
@ -60,6 +60,7 @@
|
|||
|
||||
#define AQR107_PHY_ADDR1 0x04
|
||||
#define AQR107_PHY_ADDR2 0x05
|
||||
#define AQR107_IRQ_MASK 0x0C
|
||||
|
||||
#define CORTINA_NO_FW_UPLOAD
|
||||
#define CORTINA_PHY_ADDR1 0x0
|
||||
|
|
Loading…
Reference in a new issue