commit
588eec2a86
@ -0,0 +1,42 @@ |
||||
/*
|
||||
* Copyright 2015 Freescale Semiconductor, Inc. |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
#include <common.h> |
||||
#include <asm/io.h> |
||||
#include <asm/arch/immap_ls102xa.h> |
||||
#include <ahci.h> |
||||
#include <scsi.h> |
||||
|
||||
/* port register default value */ |
||||
#define AHCI_PORT_PHY_1_CFG 0xa003fffe |
||||
#define AHCI_PORT_PHY_2_CFG 0x28183411 |
||||
#define AHCI_PORT_PHY_3_CFG 0x0e081004 |
||||
#define AHCI_PORT_PHY_4_CFG 0x00480811 |
||||
#define AHCI_PORT_PHY_5_CFG 0x192c96a4 |
||||
#define AHCI_PORT_TRANS_CFG 0x08000025 |
||||
|
||||
#define SATA_ECC_REG_ADDR 0x20220520 |
||||
#define SATA_ECC_DISABLE 0x00020000 |
||||
|
||||
int ls1021a_sata_init(void) |
||||
{ |
||||
struct ccsr_ahci __iomem *ccsr_ahci = (void *)AHCI_BASE_ADDR; |
||||
|
||||
#ifdef CONFIG_SYS_FSL_ERRATUM_A008407 |
||||
out_le32((void *)SATA_ECC_REG_ADDR, SATA_ECC_DISABLE); |
||||
#endif |
||||
|
||||
out_le32(&ccsr_ahci->ppcfg, AHCI_PORT_PHY_1_CFG); |
||||
out_le32(&ccsr_ahci->pp2c, AHCI_PORT_PHY_2_CFG); |
||||
out_le32(&ccsr_ahci->pp3c, AHCI_PORT_PHY_3_CFG); |
||||
out_le32(&ccsr_ahci->pp4c, AHCI_PORT_PHY_4_CFG); |
||||
out_le32(&ccsr_ahci->pp5c, AHCI_PORT_PHY_5_CFG); |
||||
out_le32(&ccsr_ahci->ptc, AHCI_PORT_TRANS_CFG); |
||||
|
||||
ahci_init((void __iomem *)AHCI_BASE_ADDR); |
||||
scsi_scan(0); |
||||
|
||||
return 0; |
||||
} |
@ -0,0 +1,30 @@ |
||||
#
|
||||
# Copyright 2014-2015, Freescale Semiconductor
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
obj-y += cpu.o
|
||||
obj-y += lowlevel.o
|
||||
obj-y += soc.o
|
||||
obj-$(CONFIG_MP) += mp.o
|
||||
obj-$(CONFIG_OF_LIBFDT) += fdt.o
|
||||
obj-$(CONFIG_SPL) += spl.o
|
||||
|
||||
ifneq ($(CONFIG_FSL_LSCH3),) |
||||
obj-y += fsl_lsch3_speed.o
|
||||
obj-$(CONFIG_SYS_HAS_SERDES) += fsl_lsch3_serdes.o
|
||||
else |
||||
ifneq ($(CONFIG_FSL_LSCH2),) |
||||
obj-y += fsl_lsch2_speed.o
|
||||
obj-$(CONFIG_SYS_HAS_SERDES) += fsl_lsch2_serdes.o
|
||||
endif |
||||
endif |
||||
|
||||
ifneq ($(CONFIG_LS2085A),) |
||||
obj-$(CONFIG_SYS_HAS_SERDES) += ls2085a_serdes.o
|
||||
else |
||||
ifneq ($(CONFIG_LS1043A),) |
||||
obj-$(CONFIG_SYS_HAS_SERDES) += ls1043a_serdes.o
|
||||
endif |
||||
endif |
@ -0,0 +1,10 @@ |
||||
# |
||||
# Copyright 2015 Freescale Semiconductor |
||||
# |
||||
# SPDX-License-Identifier: GPL-2.0+ |
||||
# |
||||
|
||||
Freescale LayerScape with Chassis Generation 2 |
||||
|
||||
This architecture supports Freescale ARMv8 SoCs with Chassis generation 2, |
||||
for example LS1043A. |
@ -1,5 +1,5 @@ |
||||
# |
||||
# Copyright 2014 Freescale Semiconductor |
||||
# Copyright 2014-2015 Freescale Semiconductor |
||||
# |
||||
# SPDX-License-Identifier: GPL-2.0+ |
||||
# |
@ -1,5 +1,5 @@ |
||||
/*
|
||||
* Copyright 2014, Freescale Semiconductor |
||||
* Copyright 2014-2015, Freescale Semiconductor |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
@ -0,0 +1,117 @@ |
||||
/*
|
||||
* Copyright 2015 Freescale Semiconductor, Inc. |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#include <common.h> |
||||
#include <asm/io.h> |
||||
#include <asm/errno.h> |
||||
#include <asm/arch/fsl_serdes.h> |
||||
#include <asm/arch/soc.h> |
||||
|
||||
#ifdef CONFIG_SYS_FSL_SRDS_1 |
||||
static u8 serdes1_prtcl_map[SERDES_PRCTL_COUNT]; |
||||
#endif |
||||
|
||||
int is_serdes_configured(enum srds_prtcl device) |
||||
{ |
||||
int ret = 0; |
||||
|
||||
#ifdef CONFIG_SYS_FSL_SRDS_1 |
||||
ret |= serdes1_prtcl_map[device]; |
||||
#endif |
||||
|
||||
return !!ret; |
||||
} |
||||
|
||||
int serdes_get_first_lane(u32 sd, enum srds_prtcl device) |
||||
{ |
||||
struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR); |
||||
u32 cfg = gur_in32(&gur->rcwsr[4]); |
||||
int i; |
||||
|
||||
switch (sd) { |
||||
#ifdef CONFIG_SYS_FSL_SRDS_1 |
||||
case FSL_SRDS_1: |
||||
cfg &= FSL_CHASSIS2_RCWSR4_SRDS1_PRTCL_MASK; |
||||
cfg >>= FSL_CHASSIS2_RCWSR4_SRDS1_PRTCL_SHIFT; |
||||
break; |
||||
#endif |
||||
default: |
||||
printf("invalid SerDes%d\n", sd); |
||||
break; |
||||
} |
||||
|
||||
/* Is serdes enabled at all? */ |
||||
if (unlikely(cfg == 0)) |
||||
return -ENODEV; |
||||
|
||||
for (i = 0; i < SRDS_MAX_LANES; i++) { |
||||
if (serdes_get_prtcl(sd, cfg, i) == device) |
||||
return i; |
||||
} |
||||
|
||||
return -ENODEV; |
||||
} |
||||
|
||||
int get_serdes_protocol(void) |
||||
{ |
||||
struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR); |
||||
u32 cfg = gur_in32(&gur->rcwsr[4]) & |
||||
FSL_CHASSIS2_RCWSR4_SRDS1_PRTCL_MASK; |
||||
cfg >>= FSL_CHASSIS2_RCWSR4_SRDS1_PRTCL_SHIFT; |
||||
|
||||
return cfg; |
||||
} |
||||
|
||||
const char *serdes_clock_to_string(u32 clock) |
||||
{ |
||||
switch (clock) { |
||||
case SRDS_PLLCR0_RFCK_SEL_100: |
||||
return "100"; |
||||
case SRDS_PLLCR0_RFCK_SEL_125: |
||||
return "125"; |
||||
case SRDS_PLLCR0_RFCK_SEL_156_25: |
||||
return "156.25"; |
||||
default: |
||||
return "100"; |
||||
} |
||||
} |
||||
|
||||
void serdes_init(u32 sd, u32 sd_addr, u32 sd_prctl_mask, u32 sd_prctl_shift, |
||||
u8 serdes_prtcl_map[SERDES_PRCTL_COUNT]) |
||||
{ |
||||
struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR); |
||||
u32 cfg; |
||||
int lane; |
||||
|
||||
memset(serdes_prtcl_map, 0, sizeof(serdes_prtcl_map)); |
||||
|
||||
cfg = gur_in32(&gur->rcwsr[4]) & sd_prctl_mask; |
||||
cfg >>= sd_prctl_shift; |
||||
printf("Using SERDES%d Protocol: %d (0x%x)\n", sd + 1, cfg, cfg); |
||||
|
||||
if (!is_serdes_prtcl_valid(sd, cfg)) |
||||
printf("SERDES%d[PRTCL] = 0x%x is not valid\n", sd + 1, cfg); |
||||
|
||||
for (lane = 0; lane < SRDS_MAX_LANES; lane++) { |
||||
enum srds_prtcl lane_prtcl = serdes_get_prtcl(sd, cfg, lane); |
||||
|
||||
if (unlikely(lane_prtcl >= SERDES_PRCTL_COUNT)) |
||||
debug("Unknown SerDes lane protocol %d\n", lane_prtcl); |
||||
else |
||||
serdes_prtcl_map[lane_prtcl] = 1; |
||||
} |
||||
} |
||||
|
||||
void fsl_serdes_init(void) |
||||
{ |
||||
#ifdef CONFIG_SYS_FSL_SRDS_1 |
||||
serdes_init(FSL_SRDS_1, |
||||
CONFIG_SYS_FSL_SERDES_ADDR, |
||||
FSL_CHASSIS2_RCWSR4_SRDS1_PRTCL_MASK, |
||||
FSL_CHASSIS2_RCWSR4_SRDS1_PRTCL_SHIFT, |
||||
serdes1_prtcl_map); |
||||
#endif |
||||
} |
@ -0,0 +1,180 @@ |
||||
/*
|
||||
* Copyright 2015 Freescale Semiconductor, Inc. |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#include <common.h> |
||||
#include <linux/compiler.h> |
||||
#include <asm/io.h> |
||||
#include <asm/processor.h> |
||||
#include <asm/arch/clock.h> |
||||
#include <asm/arch/soc.h> |
||||
#include <fsl_ifc.h> |
||||
|
||||
DECLARE_GLOBAL_DATA_PTR; |
||||
|
||||
#ifndef CONFIG_SYS_FSL_NUM_CC_PLLS |
||||
#define CONFIG_SYS_FSL_NUM_CC_PLLS 2 |
||||
#endif |
||||
|
||||
void get_sys_info(struct sys_info *sys_info) |
||||
{ |
||||
struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR); |
||||
#ifdef CONFIG_FSL_IFC |
||||
struct fsl_ifc ifc_regs = {(void *)CONFIG_SYS_IFC_ADDR, (void *)NULL}; |
||||
u32 ccr; |
||||
#endif |
||||
#if defined(CONFIG_FSL_ESDHC) || defined(CONFIG_SYS_DPAA_FMAN) |
||||
u32 rcw_tmp; |
||||
#endif |
||||
struct ccsr_clk *clk = (void *)(CONFIG_SYS_FSL_CLK_ADDR); |
||||
unsigned int cpu; |
||||
const u8 core_cplx_pll[8] = { |
||||
[0] = 0, /* CC1 PPL / 1 */ |
||||
[1] = 0, /* CC1 PPL / 2 */ |
||||
[4] = 1, /* CC2 PPL / 1 */ |
||||
[5] = 1, /* CC2 PPL / 2 */ |
||||
}; |
||||
|
||||
const u8 core_cplx_pll_div[8] = { |
||||
[0] = 1, /* CC1 PPL / 1 */ |
||||
[1] = 2, /* CC1 PPL / 2 */ |
||||
[4] = 1, /* CC2 PPL / 1 */ |
||||
[5] = 2, /* CC2 PPL / 2 */ |
||||
}; |
||||
|
||||
uint i; |
||||
uint freq_c_pll[CONFIG_SYS_FSL_NUM_CC_PLLS]; |
||||
uint ratio[CONFIG_SYS_FSL_NUM_CC_PLLS]; |
||||
unsigned long sysclk = CONFIG_SYS_CLK_FREQ; |
||||
|
||||
sys_info->freq_systembus = sysclk; |
||||
#ifdef CONFIG_DDR_CLK_FREQ |
||||
sys_info->freq_ddrbus = CONFIG_DDR_CLK_FREQ; |
||||
#else |
||||
sys_info->freq_ddrbus = sysclk; |
||||
#endif |
||||
|
||||
sys_info->freq_systembus *= (gur_in32(&gur->rcwsr[0]) >> |
||||
FSL_CHASSIS2_RCWSR0_SYS_PLL_RAT_SHIFT) & |
||||
FSL_CHASSIS2_RCWSR0_SYS_PLL_RAT_MASK; |
||||
sys_info->freq_ddrbus *= (gur_in32(&gur->rcwsr[0]) >> |
||||
FSL_CHASSIS2_RCWSR0_MEM_PLL_RAT_SHIFT) & |
||||
FSL_CHASSIS2_RCWSR0_MEM_PLL_RAT_MASK; |
||||
|
||||
for (i = 0; i < CONFIG_SYS_FSL_NUM_CC_PLLS; i++) { |
||||
ratio[i] = (in_be32(&clk->pllcgsr[i].pllcngsr) >> 1) & 0xff; |
||||
if (ratio[i] > 4) |
||||
freq_c_pll[i] = sysclk * ratio[i]; |
||||
else |
||||
freq_c_pll[i] = sys_info->freq_systembus * ratio[i]; |
||||
} |
||||
|
||||
for (cpu = 0; cpu < CONFIG_MAX_CPUS; cpu++) { |
||||
u32 c_pll_sel = (in_be32(&clk->clkcsr[cpu].clkcncsr) >> 27) |
||||
& 0xf; |
||||
u32 cplx_pll = core_cplx_pll[c_pll_sel]; |
||||
|
||||
sys_info->freq_processor[cpu] = |
||||
freq_c_pll[cplx_pll] / core_cplx_pll_div[c_pll_sel]; |
||||
} |
||||
|
||||
#define HWA_CGA_M1_CLK_SEL 0xe0000000 |
||||
#define HWA_CGA_M1_CLK_SHIFT 29 |
||||
#ifdef CONFIG_SYS_DPAA_FMAN |
||||
rcw_tmp = in_be32(&gur->rcwsr[7]); |
||||
switch ((rcw_tmp & HWA_CGA_M1_CLK_SEL) >> HWA_CGA_M1_CLK_SHIFT) { |
||||
case 2: |
||||
sys_info->freq_fman[0] = freq_c_pll[0] / 2; |
||||
break; |
||||
case 3: |
||||
sys_info->freq_fman[0] = freq_c_pll[0] / 3; |
||||
break; |
||||
case 6: |
||||
sys_info->freq_fman[0] = freq_c_pll[1] / 2; |
||||
break; |
||||
case 7: |
||||
sys_info->freq_fman[0] = freq_c_pll[1] / 3; |
||||
break; |
||||
default: |
||||
printf("Error: Unknown FMan1 clock select!\n"); |
||||
break; |
||||
} |
||||
#endif |
||||
|
||||
#define HWA_CGA_M2_CLK_SEL 0x00000007 |
||||
#define HWA_CGA_M2_CLK_SHIFT 0 |
||||
#ifdef CONFIG_FSL_ESDHC |
||||
rcw_tmp = in_be32(&gur->rcwsr[15]); |
||||
rcw_tmp = (rcw_tmp & HWA_CGA_M2_CLK_SEL) >> HWA_CGA_M2_CLK_SHIFT; |
||||
sys_info->freq_sdhc = freq_c_pll[1] / rcw_tmp; |
||||
#endif |
||||
|
||||
#if defined(CONFIG_FSL_IFC) |
||||
ccr = ifc_in32(&ifc_regs.gregs->ifc_ccr); |
||||
ccr = ((ccr & IFC_CCR_CLK_DIV_MASK) >> IFC_CCR_CLK_DIV_SHIFT) + 1; |
||||
|
||||
sys_info->freq_localbus = sys_info->freq_systembus / ccr; |
||||
#endif |
||||
} |
||||
|
||||
int get_clocks(void) |
||||
{ |
||||
struct sys_info sys_info; |
||||
|
||||
get_sys_info(&sys_info); |
||||
gd->cpu_clk = sys_info.freq_processor[0]; |
||||
gd->bus_clk = sys_info.freq_systembus; |
||||
gd->mem_clk = sys_info.freq_ddrbus; |
||||
|
||||
#ifdef CONFIG_FSL_ESDHC |
||||
gd->arch.sdhc_clk = sys_info.freq_sdhc; |
||||
#endif |
||||
|
||||
if (gd->cpu_clk != 0) |
||||
return 0; |
||||
else |
||||
return 1; |
||||
} |
||||
|
||||
ulong get_bus_freq(ulong dummy) |
||||
{ |
||||
return gd->bus_clk; |
||||
} |
||||
|
||||
ulong get_ddr_freq(ulong dummy) |
||||
{ |
||||
return gd->mem_clk; |
||||
} |
||||
|
||||
#ifdef CONFIG_FSL_ESDHC |
||||
int get_sdhc_freq(ulong dummy) |
||||
{ |
||||
return gd->arch.sdhc_clk; |
||||
} |
||||
#endif |
||||
|
||||
int get_serial_clock(void) |
||||
{ |
||||
return gd->bus_clk; |
||||
} |
||||
|
||||
unsigned int mxc_get_clock(enum mxc_clock clk) |
||||
{ |
||||
switch (clk) { |
||||
case MXC_I2C_CLK: |
||||
return get_bus_freq(0); |
||||
#if defined(CONFIG_FSL_ESDHC) |
||||
case MXC_ESDHC_CLK: |
||||
return get_sdhc_freq(0); |
||||
#endif |
||||
case MXC_DSPI_CLK: |
||||
return get_bus_freq(0); |
||||
case MXC_UART_CLK: |
||||
return get_bus_freq(0); |
||||
default: |
||||
printf("Unsupported clock\n"); |
||||
} |
||||
return 0; |
||||
} |
@ -0,0 +1,86 @@ |
||||
/*
|
||||
* Copyright 2015 Freescale Semiconductor, Inc. |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#include <common.h> |
||||
#include <asm/arch/fsl_serdes.h> |
||||
#include <asm/arch/immap_lsch2.h> |
||||
|
||||
struct serdes_config { |
||||
u32 protocol; |
||||
u8 lanes[SRDS_MAX_LANES]; |
||||
}; |
||||
|
||||
static struct serdes_config serdes1_cfg_tbl[] = { |
||||
/* SerDes 1 */ |
||||
{0x1555, {XFI_FM1_MAC9, PCIE1, PCIE2, PCIE3} }, |
||||
{0x2555, {SGMII_2500_FM1_DTSEC9, PCIE1, PCIE2, PCIE3} }, |
||||
{0x4555, {QSGMII_FM1_A, PCIE1, PCIE2, PCIE3} }, |
||||
{0x4558, {QSGMII_FM1_A, PCIE1, PCIE2, SATA1} }, |
||||
{0x1355, {XFI_FM1_MAC9, SGMII_FM1_DTSEC2, PCIE2, PCIE3} }, |
||||
{0x2355, {SGMII_2500_FM1_DTSEC9, SGMII_FM1_DTSEC2, PCIE2, PCIE3} }, |
||||
{0x3335, {SGMII_FM1_DTSEC9, SGMII_FM1_DTSEC2, SGMII_FM1_DTSEC5, |
||||
PCIE3} }, |
||||
{0x3355, {SGMII_FM1_DTSEC9, SGMII_FM1_DTSEC2, PCIE2, PCIE3} }, |
||||
{0x3358, {SGMII_FM1_DTSEC9, SGMII_FM1_DTSEC2, PCIE2, SATA1} }, |
||||
{0x3555, {SGMII_FM1_DTSEC9, PCIE1, PCIE2, PCIE3} }, |
||||
{0x3558, {SGMII_FM1_DTSEC9, PCIE1, PCIE2, SATA1} }, |
||||
{0x7000, {PCIE1, PCIE1, PCIE1, PCIE1} }, |
||||
{0x9998, {PCIE1, PCIE2, PCIE3, SATA1} }, |
||||
{0x6058, {PCIE1, PCIE1, PCIE2, SATA1} }, |
||||
{0x1455, {XFI_FM1_MAC9, QSGMII_FM1_A, PCIE2, PCIE3} }, |
||||
{0x2455, {SGMII_2500_FM1_DTSEC9, QSGMII_FM1_A, PCIE2, PCIE3} }, |
||||
{0x2255, {SGMII_2500_FM1_DTSEC9, SGMII_2500_FM1_DTSEC2, PCIE2, PCIE3} }, |
||||
{0x3333, {SGMII_FM1_DTSEC9, SGMII_FM1_DTSEC2, SGMII_FM1_DTSEC5, |
||||
SGMII_FM1_DTSEC6} }, |
||||
{} |
||||
}; |
||||
|
||||
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; |
||||
} |
@ -1,12 +1,11 @@ |
||||
/*
|
||||
* Copyright 2015 Freescale Semiconductor, Inc. |
||||
* Copyright 2014-2015 Freescale Semiconductor, Inc. |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#include <common.h> |
||||
#include <asm/arch/fsl_serdes.h> |
||||
#include <asm/arch-fsl-lsch3/immap_lsch3.h> |
||||
|
||||
struct serdes_config { |
||||
u8 protocol; |
@ -0,0 +1,79 @@ |
||||
/*
|
||||
* Copyright 2014-2015 Freescale Semiconductor, Inc. |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#include <common.h> |
||||
#include <spl.h> |
||||
#include <asm/io.h> |
||||
#include <fsl_ifc.h> |
||||
#include <fsl_csu.h> |
||||
#include <i2c.h> |
||||
|
||||
DECLARE_GLOBAL_DATA_PTR; |
||||
|
||||
u32 spl_boot_device(void) |
||||
{ |
||||
#ifdef CONFIG_SPL_MMC_SUPPORT |
||||
return BOOT_DEVICE_MMC1; |
||||
#endif |
||||
#ifdef CONFIG_SPL_NAND_SUPPORT |
||||
return BOOT_DEVICE_NAND; |
||||
#endif |
||||
return 0; |
||||
} |
||||
|
||||
u32 spl_boot_mode(void) |
||||
{ |
||||
switch (spl_boot_device()) { |
||||
case BOOT_DEVICE_MMC1: |
||||
#ifdef CONFIG_SPL_FAT_SUPPORT |
||||
return MMCSD_MODE_FAT; |
||||
#else |
||||
return MMCSD_MODE_RAW; |
||||
#endif |
||||
case BOOT_DEVICE_NAND: |
||||
return 0; |
||||
default: |
||||
puts("spl: error: unsupported device\n"); |
||||
hang(); |
||||
} |
||||
} |
||||
|
||||
#ifdef CONFIG_SPL_BUILD |
||||
void board_init_f(ulong dummy) |
||||
{ |
||||
/* Set global data pointer */ |
||||
gd = &gdata; |
||||
/* Clear global data */ |
||||
memset((void *)gd, 0, sizeof(gd_t)); |
||||
#ifdef CONFIG_LS2085A |
||||
arch_cpu_init(); |
||||
#endif |
||||
#ifdef CONFIG_FSL_IFC |
||||
init_early_memctl_regs(); |
||||
#endif |
||||
board_early_init_f(); |
||||
timer_init(); |
||||
#ifdef CONFIG_LS2085A |
||||
env_init(); |
||||
#endif |
||||
get_clocks(); |
||||
|
||||
preloader_console_init(); |
||||
|
||||
#ifdef CONFIG_SPL_I2C_SUPPORT |
||||
i2c_init_all(); |
||||
#endif |
||||
dram_init(); |
||||
|
||||
/* Clear the BSS */ |
||||
memset(__bss_start, 0, __bss_end - __bss_start); |
||||
|
||||
#ifdef CONFIG_LAYERSCAPE_NS_ACCESS |
||||
enable_layerscape_ns_access(); |
||||
#endif |
||||
board_init_r(NULL, 0); |
||||
} |
||||
#endif |
@ -1,13 +0,0 @@ |
||||
#
|
||||
# Copyright 2014, Freescale Semiconductor
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
obj-y += cpu.o
|
||||
obj-y += lowlevel.o
|
||||
obj-y += soc.o
|
||||
obj-y += speed.o
|
||||
obj-$(CONFIG_SYS_HAS_SERDES) += fsl_lsch3_serdes.o ls2085a_serdes.o
|
||||
obj-$(CONFIG_MP) += mp.o
|
||||
obj-$(CONFIG_OF_LIBFDT) += fdt.o
|
@ -1,7 +0,0 @@ |
||||
/*
|
||||
* Copyright 2014, Freescale Semiconductor, Inc. |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
void get_sys_info(struct sys_info *sys_info); |
@ -0,0 +1,143 @@ |
||||
/*
|
||||
* Copyright 2015, Freescale Semiconductor |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#ifndef _ASM_ARMV8_FSL_LAYERSCAPE_CONFIG_H_ |
||||
#define _ASM_ARMV8_FSL_LAYERSCAPE_CONFIG_H_ |
||||
|
||||
#include <fsl_ddrc_version.h> |
||||
|
||||
#ifdef CONFIG_SYS_FSL_DDR4 |
||||
#define CONFIG_SYS_FSL_DDRC_GEN4 |
||||
#else |
||||
#define CONFIG_SYS_FSL_DDRC_ARM_GEN3 /* Enable Freescale ARM DDR3 driver */ |
||||
#endif |
||||
#define CONFIG_SYS_FSL_DDR /* Freescale DDR driver */ |
||||
#define CONFIG_SYS_FSL_DDR_VER FSL_DDR_VER_5_0 |
||||
|
||||
#if defined(CONFIG_LS2085A) |
||||
#define CONFIG_MAX_CPUS 16 |
||||
#define CONFIG_SYS_FSL_IFC_BANK_COUNT 8 |
||||
#define CONFIG_NUM_DDR_CONTROLLERS 3 |
||||
#define CONFIG_SYS_FSL_CLUSTER_CLOCKS { 1, 1, 4, 4 } |
||||
#define SRDS_MAX_LANES 8 |
||||
#define CONFIG_SYS_FSL_SRDS_1 |
||||
#define CONFIG_SYS_FSL_SRDS_2 |
||||
#define CONFIG_SYS_PAGE_SIZE 0x10000 |
||||
#define CONFIG_SYS_CACHELINE_SIZE 64 |
||||
#ifndef L1_CACHE_BYTES |
||||
#define L1_CACHE_SHIFT 6 |
||||
#define L1_CACHE_BYTES BIT(L1_CACHE_SHIFT) |
||||
#endif |
||||
|
||||
#define CONFIG_SYS_FSL_OCRAM_BASE 0x18000000 /* initial RAM */ |
||||
#define CONFIG_SYS_FSL_OCRAM_SIZE 0x00200000 /* 2M */ |
||||
|
||||
/* DDR */ |
||||
#define CONFIG_SYS_FSL_DDR_LE |
||||
#define CONFIG_SYS_LS2_DDR_BLOCK1_SIZE ((phys_size_t)2 << 30) |
||||
#define CONFIG_MAX_MEM_MAPPED CONFIG_SYS_LS2_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_IFC_LE |
||||
|
||||
#define CONFIG_SYS_MEMAC_LITTLE_ENDIAN |
||||
|
||||
/* Generic Interrupt Controller Definitions */ |
||||
#define GICD_BASE 0x06000000 |
||||
#define GICR_BASE 0x06100000 |
||||
|
||||
/* SMMU Defintions */ |
||||
#define SMMU_BASE 0x05000000 /* GR0 Base */ |
||||
|
||||
/* Cache Coherent Interconnect */ |
||||
#define CCI_MN_BASE 0x04000000 |
||||
#define CCI_MN_RNF_NODEID_LIST 0x180 |
||||
#define CCI_MN_DVM_DOMAIN_CTL 0x200 |
||||
#define CCI_MN_DVM_DOMAIN_CTL_SET 0x210 |
||||
|
||||
#define CCI_RN_I_0_BASE (CCI_MN_BASE + 0x800000) |
||||
#define CCI_RN_I_2_BASE (CCI_MN_BASE + 0x820000) |
||||
#define CCI_RN_I_6_BASE (CCI_MN_BASE + 0x860000) |
||||
#define CCI_RN_I_12_BASE (CCI_MN_BASE + 0x8C0000) |
||||
#define CCI_RN_I_16_BASE (CCI_MN_BASE + 0x900000) |
||||
#define CCI_RN_I_20_BASE (CCI_MN_BASE + 0x940000) |
||||
|
||||
#define CCI_S0_QOS_CONTROL_BASE(x) ((CCI_RN_I_0_BASE + (x * 0x10000)) + 0x10) |
||||
#define CCI_S1_QOS_CONTROL_BASE(x) ((CCI_RN_I_0_BASE + (x * 0x10000)) + 0x110) |
||||
#define CCI_S2_QOS_CONTROL_BASE(x) ((CCI_RN_I_0_BASE + (x * 0x10000)) + 0x210) |
||||
|
||||
/* 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 CONFIG_SYS_FSL_ERRATUM_A008336 |
||||
#define CONFIG_SYS_FSL_ERRATUM_A008511 |
||||
#define CONFIG_SYS_FSL_ERRATUM_A008514 |
||||
#define CONFIG_SYS_FSL_ERRATUM_A008585 |
||||
#define CONFIG_SYS_FSL_ERRATUM_A008751 |
||||
#elif defined(CONFIG_LS1043A) |
||||
#define CONFIG_MAX_CPUS 4 |
||||
#define CONFIG_SYS_CACHELINE_SIZE 64 |
||||
#define CONFIG_SYS_FMAN_V3 |
||||
#define CONFIG_SYS_NUM_FMAN 1 |
||||
#define CONFIG_SYS_NUM_FM1_DTSEC 7 |
||||
#define CONFIG_SYS_NUM_FM1_10GEC 1 |
||||
#define CONFIG_SYS_FSL_IFC_BANK_COUNT 4 |
||||
#define CONFIG_NUM_DDR_CONTROLLERS 1 |
||||
#define CONFIG_SYS_CCSRBAR_DEFAULT 0x01000000 |
||||
#define CONFIG_SYS_FSL_SEC_COMPAT 5 |
||||
#define CONFIG_SYS_FSL_OCRAM_BASE 0x10000000 /* initial RAM */ |
||||
#define CONFIG_SYS_FSL_OCRAM_SIZE 0x200000 /* 2 MiB */ |
||||
#define CONFIG_SYS_FSL_DDR_BE |
||||
#define CONFIG_SYS_LS1_DDR_BLOCK1_SIZE ((phys_size_t)2 << 30) |
||||
#define CONFIG_MAX_MEM_MAPPED CONFIG_SYS_LS1_DDR_BLOCK1_SIZE |
||||
|
||||
#define CONFIG_SYS_FSL_CCSR_GUR_BE |
||||
#define CONFIG_SYS_FSL_CCSR_SCFG_BE |
||||
#define CONFIG_SYS_FSL_IFC_BE |
||||
#define CONFIG_SYS_FSL_ESDHC_BE |
||||
#define CONFIG_SYS_FSL_WDOG_BE |
||||
#define CONFIG_SYS_FSL_DSPI_BE |
||||
#define CONFIG_SYS_FSL_QSPI_BE |
||||
|
||||
#define QE_MURAM_SIZE 0x6000UL |
||||
#define MAX_QE_RISC 1 |
||||
#define QE_NUM_OF_SNUM 28 |
||||
|
||||
#define SRDS_MAX_LANES 4 |
||||
#define CONFIG_SYS_FSL_SRDS_1 |
||||
#define CONFIG_SYS_FSL_PCIE_COMPAT "fsl,qoriq-pcie-v2.4" |
||||
|
||||
#define CONFIG_SYS_FSL_SFP_VER_3_2 |
||||
#define CONFIG_SYS_FSL_SNVS_LE |
||||
#define CONFIG_SYS_FSL_SEC_LE |
||||
#define CONFIG_SYS_FSL_SFP_BE |
||||
#define CONFIG_SYS_FSL_SRK_LE |
||||
#define CONFIG_KEY_REVOCATION |
||||
|
||||
/* SMMU Defintions */ |
||||
#define SMMU_BASE 0x09000000 |
||||
|
||||
/* Generic Interrupt Controller Definitions */ |
||||
#define GICD_BASE 0x01401000 |
||||
#define GICC_BASE 0x01402000 |
||||
|
||||
#else |
||||
#error SoC not defined |
||||
#endif |
||||
|
||||
#endif /* _ASM_ARMV8_FSL_LAYERSCAPE_CONFIG_H_ */ |
@ -0,0 +1,229 @@ |
||||
/*
|
||||
* Copyright 2014-2015, Freescale Semiconductor |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#ifndef _FSL_LAYERSCAPE_CPU_H |
||||
#define _FSL_LAYERSCAPE_CPU_H |
||||
|
||||
static struct cpu_type cpu_type_list[] = { |
||||
CPU_TYPE_ENTRY(LS2085, LS2085, 8), |
||||
CPU_TYPE_ENTRY(LS2080, LS2080, 8), |
||||
CPU_TYPE_ENTRY(LS2045, LS2045, 4), |
||||
CPU_TYPE_ENTRY(LS1043, LS1043, 4), |
||||
}; |
||||
|
||||
#ifndef CONFIG_SYS_DCACHE_OFF |
||||
|
||||
#define SECTION_SHIFT_L0 39UL |
||||
#define SECTION_SHIFT_L1 30UL |
||||
#define SECTION_SHIFT_L2 21UL |
||||
#define BLOCK_SIZE_L0 0x8000000000 |
||||
#define BLOCK_SIZE_L1 0x40000000 |
||||
#define BLOCK_SIZE_L2 0x200000 |
||||
#define NUM_OF_ENTRY 512 |
||||
#define TCR_EL2_PS_40BIT (2 << 16) |
||||
|
||||
#define LAYERSCAPE_VA_BITS (40) |
||||
#define LAYERSCAPE_TCR (TCR_TG0_4K | \ |
||||
TCR_EL2_PS_40BIT | \
|
||||
TCR_SHARED_NON | \
|
||||
TCR_ORGN_NC | \
|
||||
TCR_IRGN_NC | \
|
||||
TCR_T0SZ(LAYERSCAPE_VA_BITS)) |
||||
#define LAYERSCAPE_TCR_FINAL (TCR_TG0_4K | \ |
||||
TCR_EL2_PS_40BIT | \
|
||||
TCR_SHARED_OUTER | \
|
||||
TCR_ORGN_WBWA | \
|
||||
TCR_IRGN_WBWA | \
|
||||
TCR_T0SZ(LAYERSCAPE_VA_BITS)) |
||||
|
||||
#ifdef CONFIG_FSL_LSCH3 |
||||
#define CONFIG_SYS_FSL_CCSR_BASE 0x00000000 |
||||
#define CONFIG_SYS_FSL_CCSR_SIZE 0x10000000 |
||||
#define CONFIG_SYS_FSL_QSPI_BASE1 0x20000000 |
||||
#define CONFIG_SYS_FSL_QSPI_SIZE1 0x10000000 |
||||
#define CONFIG_SYS_FSL_IFC_BASE1 0x30000000 |
||||
#define CONFIG_SYS_FSL_IFC_SIZE1 0x10000000 |
||||
#define CONFIG_SYS_FSL_IFC_SIZE1_1 0x400000 |
||||
#define CONFIG_SYS_FSL_DRAM_BASE1 0x80000000 |
||||
#define CONFIG_SYS_FSL_DRAM_SIZE1 0x80000000 |
||||
#define CONFIG_SYS_FSL_QSPI_BASE2 0x400000000 |
||||
#define CONFIG_SYS_FSL_QSPI_SIZE2 0x100000000 |
||||
#define CONFIG_SYS_FSL_IFC_BASE2 0x500000000 |
||||
#define CONFIG_SYS_FSL_IFC_SIZE2 0x100000000 |
||||
#define CONFIG_SYS_FSL_DCSR_BASE 0x700000000 |
||||
#define CONFIG_SYS_FSL_DCSR_SIZE 0x40000000 |
||||
#define CONFIG_SYS_FSL_MC_BASE 0x80c000000 |
||||
#define CONFIG_SYS_FSL_MC_SIZE 0x4000000 |
||||
#define CONFIG_SYS_FSL_NI_BASE 0x810000000 |
||||
#define CONFIG_SYS_FSL_NI_SIZE 0x8000000 |
||||
#define CONFIG_SYS_FSL_QBMAN_BASE 0x818000000 |
||||
#define CONFIG_SYS_FSL_QBMAN_SIZE 0x8000000 |
||||
#define CONFIG_SYS_FSL_QBMAN_SIZE_1 0x4000000 |
||||
#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 |
||||
#define CONFIG_SYS_FSL_WRIOP1_BASE 0x4300000000 |
||||
#define CONFIG_SYS_FSL_WRIOP1_SIZE 0x100000000 |
||||
#define CONFIG_SYS_FSL_AIOP1_BASE 0x4b00000000 |
||||
#define CONFIG_SYS_FSL_AIOP1_SIZE 0x100000000 |
||||
#define CONFIG_SYS_FSL_PEBUF_BASE 0x4c00000000 |
||||
#define CONFIG_SYS_FSL_PEBUF_SIZE 0x400000000 |
||||
#define CONFIG_SYS_FSL_DRAM_BASE2 0x8080000000 |
||||
#define CONFIG_SYS_FSL_DRAM_SIZE2 0x7F80000000 |
||||
#elif defined(CONFIG_FSL_LSCH2) |
||||
#define CONFIG_SYS_FSL_BOOTROM_BASE 0x0 |
||||
#define CONFIG_SYS_FSL_BOOTROM_SIZE 0x1000000 |
||||
#define CONFIG_SYS_FSL_CCSR_BASE 0x1000000 |
||||
#define CONFIG_SYS_FSL_CCSR_SIZE 0xf000000 |
||||
#define CONFIG_SYS_FSL_DCSR_BASE 0x20000000 |
||||
#define CONFIG_SYS_FSL_DCSR_SIZE 0x4000000 |
||||
#define CONFIG_SYS_FSL_QSPI_BASE 0x40000000 |
||||
#define CONFIG_SYS_FSL_QSPI_SIZE 0x20000000 |
||||
#define CONFIG_SYS_FSL_IFC_BASE 0x60000000 |
||||
#define CONFIG_SYS_FSL_IFC_SIZE 0x20000000 |
||||
#define CONFIG_SYS_FSL_DRAM_BASE1 0x80000000 |
||||
#define CONFIG_SYS_FSL_DRAM_SIZE1 0x80000000 |
||||
#define CONFIG_SYS_FSL_QBMAN_BASE 0x500000000 |
||||
#define CONFIG_SYS_FSL_QBMAN_SIZE 0x10000000 |
||||
#define CONFIG_SYS_FSL_DRAM_BASE2 0x880000000 |
||||
#define CONFIG_SYS_FSL_DRAM_SIZE2 0x780000000 /* 30GB */ |
||||
#define CONFIG_SYS_PCIE1_PHYS_SIZE 0x800000000 |
||||
#define CONFIG_SYS_PCIE2_PHYS_SIZE 0x800000000 |
||||
#define CONFIG_SYS_PCIE3_PHYS_SIZE 0x800000000 |
||||
#define CONFIG_SYS_FSL_DRAM_BASE3 0x8800000000 |
||||
#define CONFIG_SYS_FSL_DRAM_SIZE3 0x7800000000 /* 480GB */ |
||||
#endif |
||||
|
||||
struct sys_mmu_table { |
||||
u64 virt_addr; |
||||
u64 phys_addr; |
||||
u64 size; |
||||
u64 memory_type; |
||||
u64 share; |
||||
}; |
||||
|
||||
struct table_info { |
||||
u64 *ptr; |
||||
u64 table_base; |
||||
u64 entry_size; |
||||
}; |
||||
|
||||
static const struct sys_mmu_table early_mmu_table[] = { |
||||
#ifdef CONFIG_FSL_LSCH3 |
||||
{ CONFIG_SYS_FSL_CCSR_BASE, CONFIG_SYS_FSL_CCSR_BASE, |
||||
CONFIG_SYS_FSL_CCSR_SIZE, MT_DEVICE_NGNRNE, PMD_SECT_NON_SHARE }, |
||||
{ CONFIG_SYS_FSL_OCRAM_BASE, CONFIG_SYS_FSL_OCRAM_BASE, |
||||
CONFIG_SYS_FSL_OCRAM_SIZE, MT_NORMAL, PMD_SECT_NON_SHARE }, |
||||
/* For IFC Region #1, only the first 4MB is cache-enabled */ |
||||
{ CONFIG_SYS_FSL_IFC_BASE1, CONFIG_SYS_FSL_IFC_BASE1, |
||||
CONFIG_SYS_FSL_IFC_SIZE1_1, MT_NORMAL, PMD_SECT_NON_SHARE }, |
||||
{ CONFIG_SYS_FSL_IFC_BASE1 + CONFIG_SYS_FSL_IFC_SIZE1_1, |
||||
CONFIG_SYS_FSL_IFC_BASE1 + CONFIG_SYS_FSL_IFC_SIZE1_1, |
||||
CONFIG_SYS_FSL_IFC_SIZE1 - CONFIG_SYS_FSL_IFC_SIZE1_1, |
||||
MT_DEVICE_NGNRNE, PMD_SECT_NON_SHARE }, |
||||
{ CONFIG_SYS_FLASH_BASE, CONFIG_SYS_FSL_IFC_BASE1, |
||||
CONFIG_SYS_FSL_IFC_SIZE1, MT_DEVICE_NGNRNE, PMD_SECT_NON_SHARE }, |
||||
{ CONFIG_SYS_FSL_DRAM_BASE1, CONFIG_SYS_FSL_DRAM_BASE1, |
||||
CONFIG_SYS_FSL_DRAM_SIZE1, MT_NORMAL, PMD_SECT_OUTER_SHARE }, |
||||
{ CONFIG_SYS_FSL_DCSR_BASE, CONFIG_SYS_FSL_DCSR_BASE, |
||||
CONFIG_SYS_FSL_DCSR_SIZE, MT_DEVICE_NGNRNE, PMD_SECT_NON_SHARE }, |
||||
{ CONFIG_SYS_FSL_DRAM_BASE2, CONFIG_SYS_FSL_DRAM_BASE2, |
||||
CONFIG_SYS_FSL_DRAM_SIZE2, MT_NORMAL, PMD_SECT_OUTER_SHARE }, |
||||
#elif defined(CONFIG_FSL_LSCH2) |
||||
{ CONFIG_SYS_FSL_CCSR_BASE, CONFIG_SYS_FSL_CCSR_BASE, |
||||
CONFIG_SYS_FSL_CCSR_SIZE, MT_DEVICE_NGNRNE, PMD_SECT_NON_SHARE }, |
||||
{ CONFIG_SYS_FSL_OCRAM_BASE, CONFIG_SYS_FSL_OCRAM_BASE, |
||||
CONFIG_SYS_FSL_OCRAM_SIZE, MT_NORMAL, PMD_SECT_NON_SHARE }, |
||||
{ CONFIG_SYS_FSL_DCSR_BASE, CONFIG_SYS_FSL_DCSR_BASE, |
||||
CONFIG_SYS_FSL_DCSR_SIZE, MT_DEVICE_NGNRNE, PMD_SECT_NON_SHARE }, |
||||
{ CONFIG_SYS_FSL_IFC_BASE, CONFIG_SYS_FSL_IFC_BASE, |
||||
CONFIG_SYS_FSL_IFC_SIZE, MT_DEVICE_NGNRNE, PMD_SECT_NON_SHARE }, |
||||
{ CONFIG_SYS_FSL_DRAM_BASE1, CONFIG_SYS_FSL_DRAM_BASE1, |
||||
CONFIG_SYS_FSL_DRAM_SIZE1, MT_NORMAL, PMD_SECT_OUTER_SHARE }, |
||||
{ CONFIG_SYS_FSL_DRAM_BASE2, CONFIG_SYS_FSL_DRAM_BASE2, |
||||
CONFIG_SYS_FSL_DRAM_SIZE2, MT_NORMAL, PMD_SECT_OUTER_SHARE }, |
||||
#endif |
||||
}; |
||||
|
||||
static const struct sys_mmu_table final_mmu_table[] = { |
||||
#ifdef CONFIG_FSL_LSCH3 |
||||
{ CONFIG_SYS_FSL_CCSR_BASE, CONFIG_SYS_FSL_CCSR_BASE, |
||||
CONFIG_SYS_FSL_CCSR_SIZE, MT_DEVICE_NGNRNE, PMD_SECT_NON_SHARE }, |
||||
{ CONFIG_SYS_FSL_OCRAM_BASE, CONFIG_SYS_FSL_OCRAM_BASE, |
||||
CONFIG_SYS_FSL_OCRAM_SIZE, MT_NORMAL, PMD_SECT_NON_SHARE }, |
||||
{ CONFIG_SYS_FSL_DRAM_BASE1, CONFIG_SYS_FSL_DRAM_BASE1, |
||||
CONFIG_SYS_FSL_DRAM_SIZE1, MT_NORMAL, PMD_SECT_OUTER_SHARE }, |
||||
{ CONFIG_SYS_FSL_QSPI_BASE2, CONFIG_SYS_FSL_QSPI_BASE2, |
||||
CONFIG_SYS_FSL_QSPI_SIZE2, MT_DEVICE_NGNRNE, PMD_SECT_NON_SHARE }, |
||||
{ CONFIG_SYS_FSL_IFC_BASE2, CONFIG_SYS_FSL_IFC_BASE2, |
||||
CONFIG_SYS_FSL_IFC_SIZE2, MT_DEVICE_NGNRNE, PMD_SECT_NON_SHARE }, |
||||
{ CONFIG_SYS_FSL_DCSR_BASE, CONFIG_SYS_FSL_DCSR_BASE, |
||||
CONFIG_SYS_FSL_DCSR_SIZE, MT_DEVICE_NGNRNE, PMD_SECT_NON_SHARE }, |
||||
{ CONFIG_SYS_FSL_MC_BASE, CONFIG_SYS_FSL_MC_BASE, |
||||
CONFIG_SYS_FSL_MC_SIZE, MT_DEVICE_NGNRNE, PMD_SECT_NON_SHARE }, |
||||
{ CONFIG_SYS_FSL_NI_BASE, CONFIG_SYS_FSL_NI_BASE, |
||||
CONFIG_SYS_FSL_NI_SIZE, MT_DEVICE_NGNRNE, PMD_SECT_NON_SHARE }, |
||||
/* For QBMAN portal, only the first 64MB is cache-enabled */ |
||||
{ CONFIG_SYS_FSL_QBMAN_BASE, CONFIG_SYS_FSL_QBMAN_BASE, |
||||
CONFIG_SYS_FSL_QBMAN_SIZE_1, MT_NORMAL, PMD_SECT_NON_SHARE }, |
||||
{ CONFIG_SYS_FSL_QBMAN_BASE + CONFIG_SYS_FSL_QBMAN_SIZE_1, |
||||
CONFIG_SYS_FSL_QBMAN_BASE + CONFIG_SYS_FSL_QBMAN_SIZE_1, |
||||
CONFIG_SYS_FSL_QBMAN_SIZE - CONFIG_SYS_FSL_QBMAN_SIZE_1, |
||||
MT_DEVICE_NGNRNE, PMD_SECT_NON_SHARE }, |
||||
{ CONFIG_SYS_PCIE1_PHYS_ADDR, CONFIG_SYS_PCIE1_PHYS_ADDR, |
||||
CONFIG_SYS_PCIE1_PHYS_SIZE, MT_DEVICE_NGNRNE, PMD_SECT_NON_SHARE }, |
||||
{ CONFIG_SYS_PCIE2_PHYS_ADDR, CONFIG_SYS_PCIE2_PHYS_ADDR, |
||||
CONFIG_SYS_PCIE2_PHYS_SIZE, MT_DEVICE_NGNRNE, PMD_SECT_NON_SHARE }, |
||||
{ CONFIG_SYS_PCIE3_PHYS_ADDR, CONFIG_SYS_PCIE3_PHYS_ADDR, |
||||
CONFIG_SYS_PCIE3_PHYS_SIZE, MT_DEVICE_NGNRNE, PMD_SECT_NON_SHARE }, |
||||
#ifdef CONFIG_LS2085A |
||||
{ CONFIG_SYS_PCIE4_PHYS_ADDR, CONFIG_SYS_PCIE4_PHYS_ADDR, |
||||
CONFIG_SYS_PCIE4_PHYS_SIZE, MT_DEVICE_NGNRNE, PMD_SECT_NON_SHARE }, |
||||
#endif |
||||
{ CONFIG_SYS_FSL_WRIOP1_BASE, CONFIG_SYS_FSL_WRIOP1_BASE, |
||||
CONFIG_SYS_FSL_WRIOP1_SIZE, MT_DEVICE_NGNRNE, PMD_SECT_NON_SHARE }, |
||||
{ CONFIG_SYS_FSL_AIOP1_BASE, CONFIG_SYS_FSL_AIOP1_BASE, |
||||
CONFIG_SYS_FSL_AIOP1_SIZE, MT_DEVICE_NGNRNE, PMD_SECT_NON_SHARE }, |
||||
{ CONFIG_SYS_FSL_PEBUF_BASE, CONFIG_SYS_FSL_PEBUF_BASE, |
||||
CONFIG_SYS_FSL_PEBUF_SIZE, MT_DEVICE_NGNRNE, PMD_SECT_NON_SHARE }, |
||||
{ CONFIG_SYS_FSL_DRAM_BASE2, CONFIG_SYS_FSL_DRAM_BASE2, |
||||
CONFIG_SYS_FSL_DRAM_SIZE2, MT_NORMAL, PMD_SECT_OUTER_SHARE }, |
||||
#elif defined(CONFIG_FSL_LSCH2) |
||||
{ CONFIG_SYS_FSL_BOOTROM_BASE, CONFIG_SYS_FSL_BOOTROM_BASE, |
||||
CONFIG_SYS_FSL_BOOTROM_SIZE, MT_DEVICE_NGNRNE, PMD_SECT_NON_SHARE }, |
||||
{ CONFIG_SYS_FSL_CCSR_BASE, CONFIG_SYS_FSL_CCSR_BASE, |
||||
CONFIG_SYS_FSL_CCSR_SIZE, MT_DEVICE_NGNRNE, PMD_SECT_NON_SHARE }, |
||||
{ CONFIG_SYS_FSL_OCRAM_BASE, CONFIG_SYS_FSL_OCRAM_BASE, |
||||
CONFIG_SYS_FSL_OCRAM_SIZE, MT_NORMAL, PMD_SECT_NON_SHARE }, |
||||
{ CONFIG_SYS_FSL_DCSR_BASE, CONFIG_SYS_FSL_DCSR_BASE, |
||||
CONFIG_SYS_FSL_DCSR_SIZE, MT_DEVICE_NGNRNE, PMD_SECT_NON_SHARE }, |
||||
{ CONFIG_SYS_FSL_QSPI_BASE, CONFIG_SYS_FSL_QSPI_BASE, |
||||
CONFIG_SYS_FSL_QSPI_SIZE, MT_DEVICE_NGNRNE, PMD_SECT_NON_SHARE }, |
||||
{ CONFIG_SYS_FSL_IFC_BASE, CONFIG_SYS_FSL_IFC_BASE, |
||||
CONFIG_SYS_FSL_IFC_SIZE, MT_DEVICE_NGNRNE, PMD_SECT_NON_SHARE }, |
||||
{ CONFIG_SYS_FSL_DRAM_BASE1, CONFIG_SYS_FSL_DRAM_BASE1, |
||||
CONFIG_SYS_FSL_DRAM_SIZE1, MT_NORMAL, |
||||
PMD_SECT_OUTER_SHARE | PMD_SECT_NS }, |
||||
{ CONFIG_SYS_FSL_QBMAN_BASE, CONFIG_SYS_FSL_QBMAN_BASE, |
||||
CONFIG_SYS_FSL_QBMAN_SIZE, MT_DEVICE_NGNRNE, PMD_SECT_NON_SHARE }, |
||||
{ CONFIG_SYS_FSL_DRAM_BASE2, CONFIG_SYS_FSL_DRAM_BASE2, |
||||
CONFIG_SYS_FSL_DRAM_SIZE2, MT_NORMAL, PMD_SECT_OUTER_SHARE }, |
||||
{ CONFIG_SYS_PCIE1_PHYS_ADDR, CONFIG_SYS_PCIE1_PHYS_ADDR, |
||||
CONFIG_SYS_PCIE1_PHYS_SIZE, MT_DEVICE_NGNRNE, PMD_SECT_NON_SHARE }, |
||||
{ CONFIG_SYS_PCIE2_PHYS_ADDR, CONFIG_SYS_PCIE2_PHYS_ADDR, |
||||
CONFIG_SYS_PCIE2_PHYS_SIZE, MT_DEVICE_NGNRNE, PMD_SECT_NON_SHARE }, |
||||
{ CONFIG_SYS_PCIE3_PHYS_ADDR, CONFIG_SYS_PCIE3_PHYS_ADDR, |
||||
CONFIG_SYS_PCIE3_PHYS_SIZE, MT_DEVICE_NGNRNE, PMD_SECT_NON_SHARE }, |
||||
{ CONFIG_SYS_FSL_DRAM_BASE3, CONFIG_SYS_FSL_DRAM_BASE3, |
||||
CONFIG_SYS_FSL_DRAM_SIZE3, MT_NORMAL, PMD_SECT_OUTER_SHARE }, |
||||
#endif |
||||
}; |
||||
#endif |
||||
|
||||
int fsl_qoriq_core_to_cluster(unsigned int core); |
||||
u32 cpu_mask(void); |
||||
#endif /* _FSL_LAYERSCAPE_CPU_H */ |
@ -0,0 +1,157 @@ |
||||
/*
|
||||
* Copyright 2015 Freescale Semiconductor, Inc. |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#ifndef __FSL_SERDES_H__ |
||||
#define __FSL_SERDES_H__ |
||||
|
||||
#include <config.h> |
||||
|
||||
#if defined(CONFIG_LS2085A) |
||||
enum srds_prtcl { |
||||
NONE = 0, |
||||
PCIE1, |
||||
PCIE2, |
||||
PCIE3, |
||||
PCIE4, |
||||
SATA1, |
||||
SATA2, |
||||
XAUI1, |
||||
XAUI2, |
||||
XFI1, |
||||
XFI2, |
||||
XFI3, |
||||
XFI4, |
||||
XFI5, |
||||
XFI6, |
||||
XFI7, |
||||
XFI8, |
||||
SGMII1, |
||||
SGMII2, |
||||
SGMII3, |
||||
SGMII4, |
||||
SGMII5, |
||||
SGMII6, |
||||
SGMII7, |
||||
SGMII8, |
||||
SGMII9, |
||||
SGMII10, |
||||
SGMII11, |
||||
SGMII12, |
||||
SGMII13, |
||||
SGMII14, |
||||
SGMII15, |
||||
SGMII16, |
||||
QSGMII_A, /* A indicates MACs 1-4 */ |
||||
QSGMII_B, /* B indicates MACs 5-8 */ |
||||
QSGMII_C, /* C indicates MACs 9-12 */ |
||||
QSGMII_D, /* D indicates MACs 12-16 */ |
||||
SERDES_PRCTL_COUNT |
||||
}; |
||||
|
||||
enum srds { |
||||
FSL_SRDS_1 = 0, |
||||
FSL_SRDS_2 = 1, |
||||
}; |
||||
#elif defined(CONFIG_LS1043A) |
||||
enum srds_prtcl { |
||||
NONE = 0, |
||||
PCIE1, |
||||
PCIE2, |
||||
PCIE3, |
||||
PCIE4, |
||||
SATA1, |
||||
SATA2, |
||||
SRIO1, |
||||
SRIO2, |
||||
SGMII_FM1_DTSEC1, |
||||
SGMII_FM1_DTSEC2, |
||||
SGMII_FM1_DTSEC3, |
||||
SGMII_FM1_DTSEC4, |
||||
SGMII_FM1_DTSEC5, |
||||
SGMII_FM1_DTSEC6, |
||||
SGMII_FM1_DTSEC9, |
||||
SGMII_FM1_DTSEC10, |
||||
SGMII_FM2_DTSEC1, |
||||
SGMII_FM2_DTSEC2, |
||||
SGMII_FM2_DTSEC3, |
||||
SGMII_FM2_DTSEC4, |
||||
SGMII_FM2_DTSEC5, |
||||
SGMII_FM2_DTSEC6, |
||||
SGMII_FM2_DTSEC9, |
||||
SGMII_FM2_DTSEC10, |
||||
SGMII_TSEC1, |
||||
SGMII_TSEC2, |
||||
SGMII_TSEC3, |
||||
SGMII_TSEC4, |
||||
XAUI_FM1, |
||||
XAUI_FM2, |
||||
AURORA, |
||||
CPRI1, |
||||
CPRI2, |
||||
CPRI3, |
||||
CPRI4, |
||||
CPRI5, |
||||
CPRI6, |
||||
CPRI7, |
||||
CPRI8, |
||||
XAUI_FM1_MAC9, |
||||
XAUI_FM1_MAC10, |
||||
XAUI_FM2_MAC9, |
||||
XAUI_FM2_MAC10, |
||||
HIGIG_FM1_MAC9, |
||||
HIGIG_FM1_MAC10, |
||||
HIGIG_FM2_MAC9, |
||||
HIGIG_FM2_MAC10, |
||||
QSGMII_FM1_A, /* A indicates MACs 1,2,5,6 */ |
||||
QSGMII_FM1_B, /* B indicates MACs 5,6,9,10 */ |
||||
QSGMII_FM2_A, |
||||
QSGMII_FM2_B, |
||||
XFI_FM1_MAC1, |
||||
XFI_FM1_MAC2, |
||||
XFI_FM1_MAC9, |
||||
XFI_FM1_MAC10, |
||||
XFI_FM2_MAC9, |
||||
XFI_FM2_MAC10, |
||||
INTERLAKEN, |
||||
QSGMII_SW1_A, /* Indicates ports on L2 Switch */ |
||||
QSGMII_SW1_B, |
||||
SGMII_2500_FM1_DTSEC1, |
||||
SGMII_2500_FM1_DTSEC2, |
||||
SGMII_2500_FM1_DTSEC3, |
||||
SGMII_2500_FM1_DTSEC4, |
||||
SGMII_2500_FM1_DTSEC5, |
||||
SGMII_2500_FM1_DTSEC6, |
||||
SGMII_2500_FM1_DTSEC9, |
||||
SGMII_2500_FM1_DTSEC10, |
||||
SGMII_2500_FM2_DTSEC1, |
||||
SGMII_2500_FM2_DTSEC2, |
||||
SGMII_2500_FM2_DTSEC3, |
||||
SGMII_2500_FM2_DTSEC4, |
||||
SGMII_2500_FM2_DTSEC5, |
||||
SGMII_2500_FM2_DTSEC6, |
||||
SGMII_2500_FM2_DTSEC9, |
||||
SGMII_2500_FM2_DTSEC10, |
||||
SERDES_PRCTL_COUNT |
||||
}; |
||||
|
||||
enum srds { |
||||
FSL_SRDS_1 = 0, |
||||
}; |
||||
|
||||
#endif |
||||
|
||||
int is_serdes_configured(enum srds_prtcl device); |
||||
void fsl_serdes_init(void); |
||||
int serdes_get_first_lane(u32 sd, enum srds_prtcl device); |
||||
enum srds_prtcl serdes_get_prtcl(int serdes, int cfg, int lane); |
||||
int is_serdes_prtcl_valid(int serdes, u32 prtcl); |
||||
|
||||
#ifdef CONFIG_LS1043A |
||||
const char *serdes_clock_to_string(u32 clock); |
||||
int get_serdes_protocol(void); |
||||
#endif |
||||
|
||||
#endif /* __FSL_SERDES_H__ */ |
@ -0,0 +1,555 @@ |
||||
/*
|
||||
* Copyright 2013-2015 Freescale Semiconductor, Inc. |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#ifndef __ARCH_FSL_LSCH2_IMMAP_H__ |
||||
#define __ARCH_FSL_LSCH2_IMMAP_H__ |
||||
|
||||
#include <fsl_immap.h> |
||||
|
||||
#define CONFIG_SYS_IMMR 0x01000000 |
||||
#define CONFIG_SYS_DCSRBAR 0x20000000 |
||||
#define CONFIG_SYS_DCSR_DCFG_ADDR (CONFIG_SYS_DCSRBAR + 0x00220000) |
||||
|
||||
#define CONFIG_SYS_FSL_DDR_ADDR (CONFIG_SYS_IMMR + 0x00080000) |
||||
#define CONFIG_SYS_CCI400_ADDR (CONFIG_SYS_IMMR + 0x00180000) |
||||
#define CONFIG_SYS_GIC400_ADDR (CONFIG_SYS_IMMR + 0x00400000) |
||||
#define CONFIG_SYS_IFC_ADDR (CONFIG_SYS_IMMR + 0x00530000) |
||||
#define CONFIG_SYS_FSL_ESDHC_ADDR (CONFIG_SYS_IMMR + 0x00560000) |
||||
#define CONFIG_SYS_FSL_CSU_ADDR (CONFIG_SYS_IMMR + 0x00510000) |
||||
#define CONFIG_SYS_FSL_GUTS_ADDR (CONFIG_SYS_IMMR + 0x00ee0000) |
||||
#define CONFIG_SYS_FSL_RST_ADDR (CONFIG_SYS_IMMR + 0x00ee00b0) |
||||
#define CONFIG_SYS_FSL_SCFG_ADDR (CONFIG_SYS_IMMR + 0x00570000) |
||||
#define CONFIG_SYS_FSL_FMAN_ADDR (CONFIG_SYS_IMMR + 0x00a00000) |
||||
#define CONFIG_SYS_FSL_SERDES_ADDR (CONFIG_SYS_IMMR + 0x00ea0000) |
||||
#define CONFIG_SYS_FSL_DCFG_ADDR (CONFIG_SYS_IMMR + 0x00ee0000) |
||||
#define CONFIG_SYS_FSL_CLK_ADDR (CONFIG_SYS_IMMR + 0x00ee1000) |
||||
#define CONFIG_SYS_NS16550_COM1 (CONFIG_SYS_IMMR + 0x011c0500) |
||||
#define CONFIG_SYS_NS16550_COM2 (CONFIG_SYS_IMMR + 0x011c0600) |
||||
#define CONFIG_SYS_NS16550_COM3 (CONFIG_SYS_IMMR + 0x011d0500) |
||||
#define CONFIG_SYS_NS16550_COM4 (CONFIG_SYS_IMMR + 0x011d0600) |
||||
#define CONFIG_SYS_FSL_XHCI_USB1_ADDR (CONFIG_SYS_IMMR + 0x01f00000) |
||||
#define CONFIG_SYS_FSL_XHCI_USB2_ADDR (CONFIG_SYS_IMMR + 0x02000000) |
||||
#define CONFIG_SYS_FSL_XHCI_USB3_ADDR (CONFIG_SYS_IMMR + 0x02100000) |
||||
#define CONFIG_SYS_PCIE1_ADDR (CONFIG_SYS_IMMR + 0x2400000) |
||||
#define CONFIG_SYS_PCIE2_ADDR (CONFIG_SYS_IMMR + 0x2500000) |
||||
#define CONFIG_SYS_PCIE3_ADDR (CONFIG_SYS_IMMR + 0x2600000) |
||||
#define CONFIG_SYS_FSL_SEC_ADDR (CONFIG_SYS_IMMR + 0x700000) |
||||
#define CONFIG_SYS_FSL_JR0_ADDR (CONFIG_SYS_IMMR + 0x710000) |
||||
#define CONFIG_SYS_SNVS_ADDR (CONFIG_SYS_IMMR + 0xe90000) |
||||
#define CONFIG_SYS_SFP_ADDR (CONFIG_SYS_IMMR + 0xe80200) |
||||
|
||||
#define CONFIG_SYS_FSL_TIMER_ADDR 0x02b00000 |
||||
|
||||
#define I2C1_BASE_ADDR (CONFIG_SYS_IMMR + 0x01180000) |
||||
#define I2C2_BASE_ADDR (CONFIG_SYS_IMMR + 0x01190000) |
||||
#define I2C3_BASE_ADDR (CONFIG_SYS_IMMR + 0x011a0000) |
||||
#define I2C4_BASE_ADDR (CONFIG_SYS_IMMR + 0x011b0000) |
||||
|
||||
#define WDOG1_BASE_ADDR (CONFIG_SYS_IMMR + 0x01ad0000) |
||||
|
||||
#define QSPI0_BASE_ADDR (CONFIG_SYS_IMMR + 0x00550000) |
||||
#define DSPI1_BASE_ADDR (CONFIG_SYS_IMMR + 0x01100000) |
||||
|
||||
#define LPUART_BASE (CONFIG_SYS_IMMR + 0x01950000) |
||||
|
||||
#define AHCI_BASE_ADDR (CONFIG_SYS_IMMR + 0x02200000) |
||||
|
||||
#define CONFIG_SYS_PCIE1_PHYS_ADDR 0x4000000000ULL |
||||
#define CONFIG_SYS_PCIE2_PHYS_ADDR 0x4800000000ULL |
||||
#define CONFIG_SYS_PCIE3_PHYS_ADDR 0x5000000000ULL |
||||
|
||||
/* TZ Address Space Controller Definitions */ |
||||
#define TZASC1_BASE 0x01100000 /* as per CCSR map. */ |
||||
#define TZASC2_BASE 0x01110000 /* as per CCSR map. */ |
||||
#define TZASC3_BASE 0x01120000 /* as per CCSR map. */ |
||||
#define TZASC4_BASE 0x01130000 /* as per CCSR map. */ |
||||
#define TZASC_BUILD_CONFIG_REG(x) ((TZASC1_BASE + (x * 0x10000))) |
||||
#define TZASC_ACTION_REG(x) ((TZASC1_BASE + (x * 0x10000)) + 0x004) |
||||
#define TZASC_GATE_KEEPER(x) ((TZASC1_BASE + (x * 0x10000)) + 0x008) |
||||
#define TZASC_REGION_BASE_LOW_0(x) ((TZASC1_BASE + (x * 0x10000)) + 0x100) |
||||
#define TZASC_REGION_BASE_HIGH_0(x) ((TZASC1_BASE + (x * 0x10000)) + 0x104) |
||||
#define TZASC_REGION_TOP_LOW_0(x) ((TZASC1_BASE + (x * 0x10000)) + 0x108) |
||||
#define TZASC_REGION_TOP_HIGH_0(x) ((TZASC1_BASE + (x * 0x10000)) + 0x10C) |
||||
#define TZASC_REGION_ATTRIBUTES_0(x) ((TZASC1_BASE + (x * 0x10000)) + 0x110) |
||||
#define TZASC_REGION_ID_ACCESS_0(x) ((TZASC1_BASE + (x * 0x10000)) + 0x114) |
||||
|
||||
#define TP_ITYP_AV 0x00000001 /* Initiator available */ |
||||
#define TP_ITYP_TYPE(x) (((x) & 0x6) >> 1) /* Initiator Type */ |
||||
#define TP_ITYP_TYPE_ARM 0x0 |
||||
#define TP_ITYP_TYPE_PPC 0x1 /* PowerPC */ |
||||
#define TP_ITYP_TYPE_OTHER 0x2 /* StarCore DSP */ |
||||
#define TP_ITYP_TYPE_HA 0x3 /* HW Accelerator */ |
||||
#define TP_ITYP_THDS(x) (((x) & 0x18) >> 3) /* # threads */ |
||||
#define TP_ITYP_VER(x) (((x) & 0xe0) >> 5) /* Initiator Version */ |
||||
#define TY_ITYP_VER_A7 0x1 |
||||
#define TY_ITYP_VER_A53 0x2 |
||||
#define TY_ITYP_VER_A57 0x3 |
||||
|
||||
#define TP_CLUSTER_EOC 0xc0000000 /* end of clusters */ |
||||
#define TP_CLUSTER_INIT_MASK 0x0000003f /* initiator mask */ |
||||
#define TP_INIT_PER_CLUSTER 4 |
||||
|
||||
/*
|
||||
* Define default values for some CCSR macros to make header files cleaner* |
||||
* |
||||
* To completely disable CCSR relocation in a board header file, define |
||||
* CONFIG_SYS_CCSR_DO_NOT_RELOCATE. This will force CONFIG_SYS_CCSRBAR_PHYS |
||||
* to a value that is the same as CONFIG_SYS_CCSRBAR. |
||||
*/ |
||||
|
||||
#ifdef CONFIG_SYS_CCSRBAR_PHYS |
||||
#error "Do not define CONFIG_SYS_CCSRBAR_PHYS directly. Use \ |
||||
CONFIG_SYS_CCSRBAR_PHYS_LOW and/or CONFIG_SYS_CCSRBAR_PHYS_HIGH instead." |
||||
#endif |
||||
|
||||
#ifdef CONFIG_SYS_CCSR_DO_NOT_RELOCATE |
||||
#undef CONFIG_SYS_CCSRBAR_PHYS_HIGH |
||||
#undef CONFIG_SYS_CCSRBAR_PHYS_LOW |
||||
#define CONFIG_SYS_CCSRBAR_PHYS_HIGH 0 |
||||
#endif |
||||
|
||||
#ifndef CONFIG_SYS_CCSRBAR |
||||
#define CONFIG_SYS_CCSRBAR CONFIG_SYS_CCSRBAR_DEFAULT |
||||
#endif |
||||
|
||||
#ifndef CONFIG_SYS_CCSRBAR_PHYS_HIGH |
||||
#define CONFIG_SYS_CCSRBAR_PHYS_HIGH 0 |
||||
#endif |
||||
|
||||
#ifndef CONFIG_SYS_CCSRBAR_PHYS_LOW |
||||
#define CONFIG_SYS_CCSRBAR_PHYS_LOW CONFIG_SYS_CCSRBAR_DEFAULT |
||||
#endif |
||||
|
||||
#define CONFIG_SYS_CCSRBAR_PHYS ((CONFIG_SYS_CCSRBAR_PHYS_HIGH * 1ull) << 32 | \ |
||||
CONFIG_SYS_CCSRBAR_PHYS_LOW) |
||||
|
||||
struct sys_info { |
||||
unsigned long freq_processor[CONFIG_MAX_CPUS]; |
||||
unsigned long freq_systembus; |
||||
unsigned long freq_ddrbus; |
||||
unsigned long freq_localbus; |
||||
unsigned long freq_sdhc; |
||||
#ifdef CONFIG_SYS_DPAA_FMAN |
||||
unsigned long freq_fman[CONFIG_SYS_NUM_FMAN]; |
||||
#endif |
||||
unsigned long freq_qman; |
||||
}; |
||||
|
||||
#define CONFIG_SYS_FSL_FM1_OFFSET 0xa00000 |
||||
#define CONFIG_SYS_FSL_FM1_RX0_1G_OFFSET 0xa88000 |
||||
#define CONFIG_SYS_FSL_FM1_RX1_1G_OFFSET 0xa89000 |
||||
#define CONFIG_SYS_FSL_FM1_RX2_1G_OFFSET 0xa8a000 |
||||
#define CONFIG_SYS_FSL_FM1_RX3_1G_OFFSET 0xa8b000 |
||||
#define CONFIG_SYS_FSL_FM1_RX4_1G_OFFSET 0xa8c000 |
||||
#define CONFIG_SYS_FSL_FM1_RX5_1G_OFFSET 0xa8d000 |
||||
|
||||
#define CONFIG_SYS_FSL_FM1_DTSEC1_OFFSET 0xae0000 |
||||
#define CONFIG_SYS_FSL_FM1_ADDR \ |
||||
(CONFIG_SYS_IMMR + CONFIG_SYS_FSL_FM1_OFFSET) |
||||
#define CONFIG_SYS_FSL_FM1_DTSEC1_ADDR \ |
||||
(CONFIG_SYS_IMMR + CONFIG_SYS_FSL_FM1_DTSEC1_OFFSET) |
||||
|
||||
/* Device Configuration and Pin Control */ |
||||
struct ccsr_gur { |
||||
u32 porsr1; /* POR status 1 */ |
||||
#define FSL_CHASSIS2_CCSR_PORSR1_RCW_MASK 0xFF800000 |
||||
u32 porsr2; /* POR status 2 */ |
||||
u8 res_008[0x20-0x8]; |
||||
u32 gpporcr1; /* General-purpose POR configuration */ |
||||
u32 gpporcr2; |
||||
#define FSL_CHASSIS2_DCFG_FUSESR_VID_SHIFT 25 |
||||
#define FSL_CHASSIS2_DCFG_FUSESR_VID_MASK 0x1F |
||||
#define FSL_CHASSIS2_DCFG_FUSESR_ALTVID_SHIFT 20 |
||||
#define FSL_CHASSIS2_DCFG_FUSESR_ALTVID_MASK 0x1F |
||||
u32 dcfg_fusesr; /* Fuse status register */ |
||||
u8 res_02c[0x70-0x2c]; |
||||
u32 devdisr; /* Device disable control */ |
||||
#define FSL_CHASSIS2_DEVDISR2_DTSEC1_1 0x80000000 |
||||
#define FSL_CHASSIS2_DEVDISR2_DTSEC1_2 0x40000000 |
||||
#define FSL_CHASSIS2_DEVDISR2_DTSEC1_3 0x20000000 |
||||
#define FSL_CHASSIS2_DEVDISR2_DTSEC1_4 0x10000000 |
||||
#define FSL_CHASSIS2_DEVDISR2_DTSEC1_5 0x08000000 |
||||
#define FSL_CHASSIS2_DEVDISR2_DTSEC1_6 0x04000000 |
||||
#define FSL_CHASSIS2_DEVDISR2_DTSEC1_9 0x00800000 |
||||
#define FSL_CHASSIS2_DEVDISR2_DTSEC1_10 0x00400000 |
||||
#define FSL_CHASSIS2_DEVDISR2_10GEC1_1 0x00800000 |
||||
#define FSL_CHASSIS2_DEVDISR2_10GEC1_2 0x00400000 |
||||
#define FSL_CHASSIS2_DEVDISR2_10GEC1_3 0x80000000 |
||||
#define FSL_CHASSIS2_DEVDISR2_10GEC1_4 0x40000000 |
||||
u32 devdisr2; /* Device disable control 2 */ |
||||
u32 devdisr3; /* Device disable control 3 */ |
||||
u32 devdisr4; /* Device disable control 4 */ |
||||
u32 devdisr5; /* Device disable control 5 */ |
||||
u32 devdisr6; /* Device disable control 6 */ |
||||
u32 devdisr7; /* Device disable control 7 */ |
||||
u8 res_08c[0x94-0x8c]; |
||||
u32 coredisru; /* uppper portion for support of 64 cores */ |
||||
u32 coredisrl; /* lower portion for support of 64 cores */ |
||||
u8 res_09c[0xa0-0x9c]; |
||||
u32 pvr; /* Processor version */ |
||||
u32 svr; /* System version */ |
||||
u32 mvr; /* Manufacturing version */ |
||||
u8 res_0ac[0xb0-0xac]; |
||||
u32 rstcr; /* Reset control */ |
||||
u32 rstrqpblsr; /* Reset request preboot loader status */ |
||||
u8 res_0b8[0xc0-0xb8]; |
||||
u32 rstrqmr1; /* Reset request mask */ |
||||
u8 res_0c4[0xc8-0xc4]; |
||||
u32 rstrqsr1; /* Reset request status */ |
||||
u8 res_0cc[0xd4-0xcc]; |
||||
u32 rstrqwdtmrl; /* Reset request WDT mask */ |
||||
u8 res_0d8[0xdc-0xd8]; |
||||
u32 rstrqwdtsrl; /* Reset request WDT status */ |
||||
u8 res_0e0[0xe4-0xe0]; |
||||
u32 brrl; /* Boot release */ |
||||
u8 res_0e8[0x100-0xe8]; |
||||
u32 rcwsr[16]; /* Reset control word status */ |
||||
#define FSL_CHASSIS2_RCWSR0_SYS_PLL_RAT_SHIFT 25 |
||||
#define FSL_CHASSIS2_RCWSR0_SYS_PLL_RAT_MASK 0x1f |
||||
#define FSL_CHASSIS2_RCWSR0_MEM_PLL_RAT_SHIFT 16 |
||||
#define FSL_CHASSIS2_RCWSR0_MEM_PLL_RAT_MASK 0x3f |
||||
#define FSL_CHASSIS2_RCWSR4_SRDS1_PRTCL_MASK 0xffff0000 |
||||
#define FSL_CHASSIS2_RCWSR4_SRDS1_PRTCL_SHIFT 16 |
||||
u8 res_140[0x200-0x140]; |
||||
u32 scratchrw[4]; /* Scratch Read/Write */ |
||||
u8 res_210[0x300-0x210]; |
||||
u32 scratchw1r[4]; /* Scratch Read (Write once) */ |
||||
u8 res_310[0x400-0x310]; |
||||
u32 crstsr[12]; |
||||
u8 res_430[0x500-0x430]; |
||||
|
||||
/* PCI Express n Logical I/O Device Number register */ |
||||
u32 dcfg_ccsr_pex1liodnr; |
||||
u32 dcfg_ccsr_pex2liodnr; |
||||
u32 dcfg_ccsr_pex3liodnr; |
||||
u32 dcfg_ccsr_pex4liodnr; |
||||
/* RIO n Logical I/O Device Number register */ |
||||
u32 dcfg_ccsr_rio1liodnr; |
||||
u32 dcfg_ccsr_rio2liodnr; |
||||
u32 dcfg_ccsr_rio3liodnr; |
||||
u32 dcfg_ccsr_rio4liodnr; |
||||
/* USB Logical I/O Device Number register */ |
||||
u32 dcfg_ccsr_usb1liodnr; |
||||
u32 dcfg_ccsr_usb2liodnr; |
||||
u32 dcfg_ccsr_usb3liodnr; |
||||
u32 dcfg_ccsr_usb4liodnr; |
||||
/* SD/MMC Logical I/O Device Number register */ |
||||
u32 dcfg_ccsr_sdmmc1liodnr; |
||||
u32 dcfg_ccsr_sdmmc2liodnr; |
||||
u32 dcfg_ccsr_sdmmc3liodnr; |
||||
u32 dcfg_ccsr_sdmmc4liodnr; |
||||
/* RIO Message Unit Logical I/O Device Number register */ |
||||
u32 dcfg_ccsr_riomaintliodnr; |
||||
|
||||
u8 res_544[0x550-0x544]; |
||||
u32 sataliodnr[4]; |
||||
u8 res_560[0x570-0x560]; |
||||
|
||||
u32 dcfg_ccsr_misc1liodnr; |
||||
u32 dcfg_ccsr_misc2liodnr; |
||||
u32 dcfg_ccsr_misc3liodnr; |
||||
u32 dcfg_ccsr_misc4liodnr; |
||||
u32 dcfg_ccsr_dma1liodnr; |
||||
u32 dcfg_ccsr_dma2liodnr; |
||||
u32 dcfg_ccsr_dma3liodnr; |
||||
u32 dcfg_ccsr_dma4liodnr; |
||||
u32 dcfg_ccsr_spare1liodnr; |
||||
u32 dcfg_ccsr_spare2liodnr; |
||||
u32 dcfg_ccsr_spare3liodnr; |
||||
u32 dcfg_ccsr_spare4liodnr; |
||||
u8 res_5a0[0x600-0x5a0]; |
||||
u32 dcfg_ccsr_pblsr; |
||||
|
||||
u32 pamubypenr; |
||||
u32 dmacr1; |
||||
|
||||
u8 res_60c[0x610-0x60c]; |
||||
u32 dcfg_ccsr_gensr1; |
||||
u32 dcfg_ccsr_gensr2; |
||||
u32 dcfg_ccsr_gensr3; |
||||
u32 dcfg_ccsr_gensr4; |
||||
u32 dcfg_ccsr_gencr1; |
||||
u32 dcfg_ccsr_gencr2; |
||||
u32 dcfg_ccsr_gencr3; |
||||
u32 dcfg_ccsr_gencr4; |
||||
u32 dcfg_ccsr_gencr5; |
||||
u32 dcfg_ccsr_gencr6; |
||||
u32 dcfg_ccsr_gencr7; |
||||
u8 res_63c[0x658-0x63c]; |
||||
u32 dcfg_ccsr_cgensr1; |
||||
u32 dcfg_ccsr_cgensr0; |
||||
u8 res_660[0x678-0x660]; |
||||
u32 dcfg_ccsr_cgencr1; |
||||
|
||||
u32 dcfg_ccsr_cgencr0; |
||||
u8 res_680[0x700-0x680]; |
||||
u32 dcfg_ccsr_sriopstecr; |
||||
u32 dcfg_ccsr_dcsrcr; |
||||
|
||||
u8 res_708[0x740-0x708]; /* add more registers when needed */ |
||||
u32 tp_ityp[64]; /* Topology Initiator Type Register */ |
||||
struct { |
||||
u32 upper; |
||||
u32 lower; |
||||
} tp_cluster[16]; |
||||
u8 res_8c0[0xa00-0x8c0]; /* add more registers when needed */ |
||||
u32 dcfg_ccsr_qmbm_warmrst; |
||||
u8 res_a04[0xa20-0xa04]; /* add more registers when needed */ |
||||
u32 dcfg_ccsr_reserved0; |
||||
u32 dcfg_ccsr_reserved1; |
||||
}; |
||||
|
||||
#define SCFG_QSPI_CLKSEL 0x40100000 |
||||
#define SCFG_USBDRVVBUS_SELCR_USB1 0x00000000 |
||||
#define SCFG_USBDRVVBUS_SELCR_USB2 0x00000001 |
||||
#define SCFG_USBDRVVBUS_SELCR_USB3 0x00000002 |
||||
#define SCFG_USBPWRFAULT_INACTIVE 0x00000000 |
||||
#define SCFG_USBPWRFAULT_SHARED 0x00000001 |
||||
#define SCFG_USBPWRFAULT_DEDICATED 0x00000002 |
||||
#define SCFG_USBPWRFAULT_USB3_SHIFT 4 |
||||
#define SCFG_USBPWRFAULT_USB2_SHIFT 2 |
||||
#define SCFG_USBPWRFAULT_USB1_SHIFT 0 |
||||
|
||||
#define SCFG_SNPCNFGCR_SECRDSNP 0x80000000 |
||||
#define SCFG_SNPCNFGCR_SECWRSNP 0x40000000 |
||||
|
||||
/* Supplemental Configuration Unit */ |
||||
struct ccsr_scfg { |
||||
u8 res_000[0x100-0x000]; |
||||
u32 usb2_icid; |
||||
u32 usb3_icid; |
||||
u8 res_108[0x114-0x108]; |
||||
u32 dma_icid; |
||||
u32 sata_icid; |
||||
u32 usb1_icid; |
||||
u32 qe_icid; |
||||
u32 sdhc_icid; |
||||
u32 edma_icid; |
||||
u32 etr_icid; |
||||
u32 core_sft_rst[4]; |
||||
u8 res_140[0x158-0x140]; |
||||
u32 altcbar; |
||||
u32 qspi_cfg; |
||||
u8 res_160[0x180-0x160]; |
||||
u32 dmamcr; |
||||
u8 res_184[0x18c-0x184]; |
||||
u32 debug_icid; |
||||
u8 res_190[0x1a4-0x190]; |
||||
u32 snpcnfgcr; |
||||
u8 res_1a8[0x1ac-0x1a8]; |
||||
u32 intpcr; |
||||
u8 res_1b0[0x204-0x1b0]; |
||||
u32 coresrencr; |
||||
u8 res_208[0x220-0x208]; |
||||
u32 rvbar0_0; |
||||
u32 rvbar0_1; |
||||
u32 rvbar1_0; |
||||
u32 rvbar1_1; |
||||
u32 rvbar2_0; |
||||
u32 rvbar2_1; |
||||
u32 rvbar3_0; |
||||
u32 rvbar3_1; |
||||
u32 lpmcsr; |
||||
u8 res_244[0x400-0x244]; |
||||
u32 qspidqscr; |
||||
u32 ecgtxcmcr; |
||||
u32 sdhciovselcr; |
||||
u32 rcwpmuxcr0; |
||||
u32 usbdrvvbus_selcr; |
||||
u32 usbpwrfault_selcr; |
||||
u32 usb_refclk_selcr1; |
||||
u32 usb_refclk_selcr2; |
||||
u32 usb_refclk_selcr3; |
||||
u8 res_424[0x600-0x424]; |
||||
u32 scratchrw[4]; |
||||
u8 res_610[0x680-0x610]; |
||||
u32 corebcr; |
||||
u8 res_684[0x1000-0x684]; |
||||
u32 pex1msiir; |
||||
u32 pex1msir; |
||||
u8 res_1008[0x2000-0x1008]; |
||||
u32 pex2; |
||||
u32 pex2msir; |
||||
u8 res_2008[0x3000-0x2008]; |
||||
u32 pex3msiir; |
||||
u32 pex3msir; |
||||
}; |
||||
|
||||
/* Clocking */ |
||||
struct ccsr_clk { |
||||
struct { |
||||
u32 clkcncsr; /* core cluster n clock control status */ |
||||
u8 res_004[0x0c]; |
||||
u32 clkcghwacsr; /* Clock generator n hardware accelerator */ |
||||
u8 res_014[0x0c]; |
||||
} clkcsr[4]; |
||||
u8 res_040[0x780]; /* 0x100 */ |
||||
struct { |
||||
u32 pllcngsr; |
||||
u8 res_804[0x1c]; |
||||
} pllcgsr[2]; |
||||
u8 res_840[0x1c0]; |
||||
u32 clkpcsr; /* 0xa00 Platform clock domain control/status */ |
||||
u8 res_a04[0x1fc]; |
||||
u32 pllpgsr; /* 0xc00 Platform PLL General Status */ |
||||
u8 res_c04[0x1c]; |
||||
u32 plldgsr; /* 0xc20 DDR PLL General Status */ |
||||
u8 res_c24[0x3dc]; |
||||
}; |
||||
|
||||
/* System Counter */ |
||||
struct sctr_regs { |
||||
u32 cntcr; |
||||
u32 cntsr; |
||||
u32 cntcv1; |
||||
u32 cntcv2; |
||||
u32 resv1[4]; |
||||
u32 cntfid0; |
||||
u32 cntfid1; |
||||
u32 resv2[1002]; |
||||
u32 counterid[12]; |
||||
}; |
||||
|
||||
#define SRDS_MAX_LANES 4 |
||||
struct ccsr_serdes { |
||||
struct { |
||||
u32 rstctl; /* Reset Control Register */ |
||||
#define SRDS_RSTCTL_RST 0x80000000 |
||||
#define SRDS_RSTCTL_RSTDONE 0x40000000 |
||||
#define SRDS_RSTCTL_RSTERR 0x20000000 |
||||
#define SRDS_RSTCTL_SWRST 0x10000000 |
||||
#define SRDS_RSTCTL_SDEN 0x00000020 |
||||
#define SRDS_RSTCTL_SDRST_B 0x00000040 |
||||
#define SRDS_RSTCTL_PLLRST_B 0x00000080 |
||||
u32 pllcr0; /* PLL Control Register 0 */ |
||||
#define SRDS_PLLCR0_POFF 0x80000000 |
||||
#define SRDS_PLLCR0_RFCK_SEL_MASK 0x70000000 |
||||
#define SRDS_PLLCR0_RFCK_SEL_100 0x00000000 |
||||
#define SRDS_PLLCR0_RFCK_SEL_125 0x10000000 |
||||
#define SRDS_PLLCR0_RFCK_SEL_156_25 0x20000000 |
||||
#define SRDS_PLLCR0_RFCK_SEL_150 0x30000000 |
||||
#define SRDS_PLLCR0_RFCK_SEL_161_13 0x40000000 |
||||
#define SRDS_PLLCR0_RFCK_SEL_122_88 0x50000000 |
||||
#define SRDS_PLLCR0_PLL_LCK 0x00800000 |
||||
#define SRDS_PLLCR0_FRATE_SEL_MASK 0x000f0000 |
||||
#define SRDS_PLLCR0_FRATE_SEL_5 0x00000000 |
||||
#define SRDS_PLLCR0_FRATE_SEL_3_75 0x00050000 |
||||
#define SRDS_PLLCR0_FRATE_SEL_5_15 0x00060000 |
||||
#define SRDS_PLLCR0_FRATE_SEL_4 0x00070000 |
||||
#define SRDS_PLLCR0_FRATE_SEL_3_12 0x00090000 |
||||
#define SRDS_PLLCR0_FRATE_SEL_3 0x000a0000 |
||||
u32 pllcr1; /* PLL Control Register 1 */ |
||||
#define SRDS_PLLCR1_PLL_BWSEL 0x08000000 |
||||
u32 res_0c; /* 0x00c */ |
||||
u32 pllcr3; |
||||
u32 pllcr4; |
||||
u8 res_18[0x20-0x18]; |
||||
} bank[2]; |
||||
u8 res_40[0x90-0x40]; |
||||
u32 srdstcalcr; /* 0x90 TX Calibration Control */ |
||||
u8 res_94[0xa0-0x94]; |
||||
u32 srdsrcalcr; /* 0xa0 RX Calibration Control */ |
||||
u8 res_a4[0xb0-0xa4]; |
||||
u32 srdsgr0; /* 0xb0 General Register 0 */ |
||||
u8 res_b4[0xe0-0xb4]; |
||||
u32 srdspccr0; /* 0xe0 Protocol Converter Config 0 */ |
||||
u32 srdspccr1; /* 0xe4 Protocol Converter Config 1 */ |
||||
u32 srdspccr2; /* 0xe8 Protocol Converter Config 2 */ |
||||
u32 srdspccr3; /* 0xec Protocol Converter Config 3 */ |
||||
u32 srdspccr4; /* 0xf0 Protocol Converter Config 4 */ |
||||
u8 res_f4[0x100-0xf4]; |
||||
struct { |
||||
u32 lnpssr; /* 0x100, 0x120, ..., 0x1e0 */ |
||||
u8 res_104[0x120-0x104]; |
||||
} srdslnpssr[4]; |
||||
u8 res_180[0x300-0x180]; |
||||
u32 srdspexeqcr; |
||||
u32 srdspexeqpcr[11]; |
||||
u8 res_330[0x400-0x330]; |
||||
u32 srdspexapcr; |
||||
u8 res_404[0x440-0x404]; |
||||
u32 srdspexbpcr; |
||||
u8 res_444[0x800-0x444]; |
||||
struct { |
||||
u32 gcr0; /* 0x800 General Control Register 0 */ |
||||
u32 gcr1; /* 0x804 General Control Register 1 */ |
||||
u32 gcr2; /* 0x808 General Control Register 2 */ |
||||
u32 sscr0; |
||||
u32 recr0; /* 0x810 Receive Equalization Control */ |
||||
u32 recr1; |
||||
u32 tecr0; /* 0x818 Transmit Equalization Control */ |
||||
u32 sscr1; |
||||
u32 ttlcr0; /* 0x820 Transition Tracking Loop Ctrl 0 */ |
||||
u8 res_824[0x83c-0x824]; |
||||
u32 tcsr3; |
||||
} lane[4]; /* Lane A, B, C, D, E, F, G, H */ |
||||
u8 res_a00[0x1000-0xa00]; /* from 0xa00 to 0xfff */ |
||||
}; |
||||
|
||||
#define CCI400_CTRLORD_TERM_BARRIER 0x00000008 |
||||
#define CCI400_CTRLORD_EN_BARRIER 0 |
||||
#define CCI400_SHAORD_NON_SHAREABLE 0x00000002 |
||||
#define CCI400_DVM_MESSAGE_REQ_EN 0x00000002 |
||||
#define CCI400_SNOOP_REQ_EN 0x00000001 |
||||
|
||||
/* CCI-400 registers */ |
||||
struct ccsr_cci400 { |
||||
u32 ctrl_ord; /* Control Override */ |
||||
u32 spec_ctrl; /* Speculation Control */ |
||||
u32 secure_access; /* Secure Access */ |
||||
u32 status; /* Status */ |
||||
u32 impr_err; /* Imprecise Error */ |
||||
u8 res_14[0x100 - 0x14]; |
||||
u32 pmcr; /* Performance Monitor Control */ |
||||
u8 res_104[0xfd0 - 0x104]; |
||||
u32 pid[8]; /* Peripheral ID */ |
||||
u32 cid[4]; /* Component ID */ |
||||
struct { |
||||
u32 snoop_ctrl; /* Snoop Control */ |
||||
u32 sha_ord; /* Shareable Override */ |
||||
u8 res_1008[0x1100 - 0x1008]; |
||||
u32 rc_qos_ord; /* read channel QoS Value Override */ |
||||
u32 wc_qos_ord; /* read channel QoS Value Override */ |
||||
u8 res_1108[0x110c - 0x1108]; |
||||
u32 qos_ctrl; /* QoS Control */ |
||||
u32 max_ot; /* Max OT */ |
||||
u8 res_1114[0x1130 - 0x1114]; |
||||
u32 target_lat; /* Target Latency */ |
||||
u32 latency_regu; /* Latency Regulation */ |
||||
u32 qos_range; /* QoS Range */ |
||||
u8 res_113c[0x2000 - 0x113c]; |
||||
} slave[5]; /* Slave Interface */ |
||||
u8 res_6000[0x9004 - 0x6000]; |
||||
u32 cycle_counter; /* Cycle counter */ |
||||
u32 count_ctrl; /* Count Control */ |
||||
u32 overflow_status; /* Overflow Flag Status */ |
||||
u8 res_9010[0xa000 - 0x9010]; |
||||
struct { |
||||
u32 event_select; /* Event Select */ |
||||
u32 event_count; /* Event Count */ |
||||
u32 counter_ctrl; /* Counter Control */ |
||||
u32 overflow_status; /* Overflow Flag Status */ |
||||
u8 res_a010[0xb000 - 0xa010]; |
||||
} pcounter[4]; /* Performance Counter */ |
||||
u8 res_e004[0x10000 - 0xe004]; |
||||
}; |
||||
|
||||
/* MMU 500 */ |
||||
#define SMMU_SCR0 (SMMU_BASE + 0x0) |
||||
#define SMMU_SCR1 (SMMU_BASE + 0x4) |
||||
#define SMMU_SCR2 (SMMU_BASE + 0x8) |
||||
#define SMMU_SACR (SMMU_BASE + 0x10) |
||||
#define SMMU_IDR0 (SMMU_BASE + 0x20) |
||||
#define SMMU_IDR1 (SMMU_BASE + 0x24) |
||||
|
||||
#define SMMU_NSCR0 (SMMU_BASE + 0x400) |
||||
#define SMMU_NSCR2 (SMMU_BASE + 0x408) |
||||
#define SMMU_NSACR (SMMU_BASE + 0x410) |
||||
|
||||
#define SCR0_CLIENTPD_MASK 0x00000001 |
||||
#define SCR0_USFCFG_MASK 0x00000400 |
||||
|
||||
#endif /* __ARCH_FSL_LSCH2_IMMAP_H__*/ |
@ -0,0 +1,55 @@ |
||||
/*
|
||||
* Copyright 2015 Freescale Semiconductor, Inc. |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
* |
||||
*/ |
||||
|
||||
#ifndef __ASM_ARCH_FSL_LAYERSCAPE_IMX_REGS_H__ |
||||
#define __ASM_ARCH_FSL_LAYERSCAPE_IMX_REGS_H__ |
||||
|
||||
#define I2C_QUIRK_REG /* enable 8-bit driver */ |
||||
|
||||
#ifdef CONFIG_FSL_LPUART |
||||
#ifdef CONFIG_LPUART_32B_REG |
||||
struct lpuart_fsl { |
||||
u32 baud; |
||||
u32 stat; |
||||
u32 ctrl; |
||||
u32 data; |
||||
u32 match; |
||||
u32 modir; |
||||
u32 fifo; |
||||
u32 water; |
||||
}; |
||||
#else |
||||
struct lpuart_fsl { |
||||
u8 ubdh; |
||||
u8 ubdl; |
||||
u8 uc1; |
||||
u8 uc2; |
||||
u8 us1; |
||||
u8 us2; |
||||
u8 uc3; |
||||
u8 ud; |
||||
u8 uma1; |
||||
u8 uma2; |
||||
u8 uc4; |
||||
u8 uc5; |
||||
u8 ued; |
||||
u8 umodem; |
||||
u8 uir; |
||||
u8 reserved; |
||||
u8 upfifo; |
||||
u8 ucfifo; |
||||
u8 usfifo; |
||||
u8 utwfifo; |
||||
u8 utcfifo; |
||||
u8 urwfifo; |
||||
u8 urcfifo; |
||||
u8 rsvd[28]; |
||||
}; |
||||
#endif |
||||
#endif /* CONFIG_FSL_LPUART */ |
||||
|
||||
#endif /* __ASM_ARCH_FSL_LAYERSCAPE_IMX_REGS_H__ */ |
@ -0,0 +1,10 @@ |
||||
/*
|
||||
* Copyright 2015, Freescale Semiconductor |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#ifndef _ASM_ARMV8_FSL_LAYERSCAPE_MMU_H_ |
||||
#define _ASM_ARMV8_FSL_LAYERSCAPE_MMU_H_ |
||||
#include <asm/arch-armv8/mmu.h> |
||||
#endif /* _ASM_ARMV8_FSL_LAYERSCAPE_MMU_H_ */ |
@ -0,0 +1,158 @@ |
||||
/*
|
||||
* Copyright 2015 Freescale Semiconductor, Inc. |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#ifndef __FSL_NS_ACCESS_H_ |
||||
#define __FSL_NS_ACCESS_H_ |
||||
|
||||
enum csu_cslx_ind { |
||||
CSU_CSLX_PCIE2_IO = 0, |
||||
CSU_CSLX_PCIE1_IO, |
||||
CSU_CSLX_MG2TPR_IP, |
||||
CSU_CSLX_IFC_MEM, |
||||
CSU_CSLX_OCRAM, |
||||
CSU_CSLX_GIC, |
||||
CSU_CSLX_PCIE1, |
||||
CSU_CSLX_OCRAM2, |
||||
CSU_CSLX_QSPI_MEM, |
||||
CSU_CSLX_PCIE2, |
||||
CSU_CSLX_SATA, |
||||
CSU_CSLX_USB1, |
||||
CSU_CSLX_QM_BM_SWPORTAL, |
||||
CSU_CSLX_PCIE3 = 16, |
||||
CSU_CSLX_PCIE3_IO, |
||||
CSU_CSLX_USB3 = 20, |
||||
CSU_CSLX_USB2, |
||||
CSU_CSLX_SERDES = 32, |
||||
CSU_CSLX_QDMA, |
||||
CSU_CSLX_LPUART2, |
||||
CSU_CSLX_LPUART1, |
||||
CSU_CSLX_LPUART4, |
||||
CSU_CSLX_LPUART3, |
||||
CSU_CSLX_LPUART6, |
||||
CSU_CSLX_LPUART5, |
||||
CSU_CSLX_DSPI1 = 41, |
||||
CSU_CSLX_QSPI, |
||||
CSU_CSLX_ESDHC, |
||||
CSU_CSLX_IFC = 45, |
||||
CSU_CSLX_I2C1, |
||||
CSU_CSLX_I2C3 = 48, |
||||
CSU_CSLX_I2C2, |
||||
CSU_CSLX_DUART2 = 50, |
||||
CSU_CSLX_DUART1, |
||||
CSU_CSLX_WDT2, |
||||
CSU_CSLX_WDT1, |
||||
CSU_CSLX_EDMA, |
||||
CSU_CSLX_SYS_CNT, |
||||
CSU_CSLX_DMA_MUX2, |
||||
CSU_CSLX_DMA_MUX1, |
||||
CSU_CSLX_DDR, |
||||
CSU_CSLX_QUICC, |
||||
CSU_CSLX_DCFG_CCU_RCPM = 60, |
||||
CSU_CSLX_SECURE_BOOTROM, |
||||
CSU_CSLX_SFP, |
||||
CSU_CSLX_TMU, |
||||
CSU_CSLX_SECURE_MONITOR, |
||||
CSU_CSLX_SCFG, |
||||
CSU_CSLX_FM = 66, |
||||
CSU_CSLX_SEC5_5, |
||||
CSU_CSLX_BM, |
||||
CSU_CSLX_QM, |
||||
CSU_CSLX_GPIO2 = 70, |
||||
CSU_CSLX_GPIO1, |
||||
CSU_CSLX_GPIO4, |
||||
CSU_CSLX_GPIO3, |
||||
CSU_CSLX_PLATFORM_CONT, |
||||
CSU_CSLX_CSU, |
||||
CSU_CSLX_IIC4 = 77, |
||||
CSU_CSLX_WDT4, |
||||
CSU_CSLX_WDT3, |
||||
CSU_CSLX_WDT5 = 81, |
||||
CSU_CSLX_FTM2 = 86, |
||||
CSU_CSLX_FTM1, |
||||
CSU_CSLX_FTM4, |
||||
CSU_CSLX_FTM3, |
||||
CSU_CSLX_FTM6 = 90, |
||||
CSU_CSLX_FTM5, |
||||
CSU_CSLX_FTM8, |
||||
CSU_CSLX_FTM7, |
||||
CSU_CSLX_DSCR = 121, |
||||
}; |
||||
|
||||
static struct csu_ns_dev ns_dev[] = { |
||||
{CSU_CSLX_PCIE2_IO, CSU_ALL_RW}, |
||||
{CSU_CSLX_PCIE1_IO, CSU_ALL_RW}, |
||||
{CSU_CSLX_MG2TPR_IP, CSU_ALL_RW}, |
||||
{CSU_CSLX_IFC_MEM, CSU_ALL_RW}, |
||||
{CSU_CSLX_OCRAM, CSU_ALL_RW}, |
||||
{CSU_CSLX_GIC, CSU_ALL_RW}, |
||||
{CSU_CSLX_PCIE1, CSU_ALL_RW}, |
||||
{CSU_CSLX_OCRAM2, CSU_ALL_RW}, |
||||
{CSU_CSLX_QSPI_MEM, CSU_ALL_RW}, |
||||
{CSU_CSLX_PCIE2, CSU_ALL_RW}, |
||||
{CSU_CSLX_SATA, CSU_ALL_RW}, |
||||
{CSU_CSLX_USB1, CSU_ALL_RW}, |
||||
{CSU_CSLX_QM_BM_SWPORTAL, CSU_ALL_RW}, |
||||
{CSU_CSLX_PCIE3, CSU_ALL_RW}, |
||||
{CSU_CSLX_PCIE3_IO, CSU_ALL_RW}, |
||||
{CSU_CSLX_USB3, CSU_ALL_RW}, |
||||
{CSU_CSLX_USB2, CSU_ALL_RW}, |
||||
{CSU_CSLX_SERDES, CSU_ALL_RW}, |
||||
{CSU_CSLX_QDMA, CSU_ALL_RW}, |
||||
{CSU_CSLX_LPUART2, CSU_ALL_RW}, |
||||
{CSU_CSLX_LPUART1, CSU_ALL_RW}, |
||||
{CSU_CSLX_LPUART4, CSU_ALL_RW}, |
||||
{CSU_CSLX_LPUART3, CSU_ALL_RW}, |
||||
{CSU_CSLX_LPUART6, CSU_ALL_RW}, |
||||
{CSU_CSLX_LPUART5, CSU_ALL_RW}, |
||||
{CSU_CSLX_DSPI1, CSU_ALL_RW}, |
||||
{CSU_CSLX_QSPI, CSU_ALL_RW}, |
||||
{CSU_CSLX_ESDHC, CSU_ALL_RW}, |
||||
{CSU_CSLX_IFC, CSU_ALL_RW}, |
||||
{CSU_CSLX_I2C1, CSU_ALL_RW}, |
||||
{CSU_CSLX_I2C3, CSU_ALL_RW}, |
||||
{CSU_CSLX_I2C2, CSU_ALL_RW}, |
||||
{CSU_CSLX_DUART2, CSU_ALL_RW}, |
||||
{CSU_CSLX_DUART1, CSU_ALL_RW}, |
||||
{CSU_CSLX_WDT2, CSU_ALL_RW}, |
||||
{CSU_CSLX_WDT1, CSU_ALL_RW}, |
||||
{CSU_CSLX_EDMA, CSU_ALL_RW}, |
||||
{CSU_CSLX_SYS_CNT, CSU_ALL_RW}, |
||||
{CSU_CSLX_DMA_MUX2, CSU_ALL_RW}, |
||||
{CSU_CSLX_DMA_MUX1, CSU_ALL_RW}, |
||||
{CSU_CSLX_DDR, CSU_ALL_RW}, |
||||
{CSU_CSLX_QUICC, CSU_ALL_RW}, |
||||
{CSU_CSLX_DCFG_CCU_RCPM, CSU_ALL_RW}, |
||||
{CSU_CSLX_SECURE_BOOTROM, CSU_ALL_RW}, |
||||
{CSU_CSLX_SFP, CSU_ALL_RW}, |
||||
{CSU_CSLX_TMU, CSU_ALL_RW}, |
||||
{CSU_CSLX_SECURE_MONITOR, CSU_ALL_RW}, |
||||
{CSU_CSLX_SCFG, CSU_ALL_RW}, |
||||
{CSU_CSLX_FM, CSU_ALL_RW}, |
||||
{CSU_CSLX_SEC5_5, CSU_ALL_RW}, |
||||
{CSU_CSLX_BM, CSU_ALL_RW}, |
||||
{CSU_CSLX_QM, CSU_ALL_RW}, |
||||
{CSU_CSLX_GPIO2, CSU_ALL_RW}, |
||||
{CSU_CSLX_GPIO1, CSU_ALL_RW}, |
||||
{CSU_CSLX_GPIO4, CSU_ALL_RW}, |
||||
{CSU_CSLX_GPIO3, CSU_ALL_RW}, |
||||
{CSU_CSLX_PLATFORM_CONT, CSU_ALL_RW}, |
||||
{CSU_CSLX_CSU, CSU_ALL_RW}, |
||||
{CSU_CSLX_IIC4, CSU_ALL_RW}, |
||||
{CSU_CSLX_WDT4, CSU_ALL_RW}, |
||||
{CSU_CSLX_WDT3, CSU_ALL_RW}, |
||||
{CSU_CSLX_WDT5, CSU_ALL_RW}, |
||||
{CSU_CSLX_FTM2, CSU_ALL_RW}, |
||||
{CSU_CSLX_FTM1, CSU_ALL_RW}, |
||||
{CSU_CSLX_FTM4, CSU_ALL_RW}, |
||||
{CSU_CSLX_FTM3, CSU_ALL_RW}, |
||||
{CSU_CSLX_FTM6, CSU_ALL_RW}, |
||||
{CSU_CSLX_FTM5, CSU_ALL_RW}, |
||||
{CSU_CSLX_FTM8, CSU_ALL_RW}, |
||||
{CSU_CSLX_FTM7, CSU_ALL_RW}, |
||||
{CSU_CSLX_DSCR, CSU_ALL_RW}, |
||||
}; |
||||
|
||||
#endif |
@ -0,0 +1,53 @@ |
||||
/*
|
||||
* Copyright 2015 Freescale Semiconductor |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#ifndef _ASM_ARMV8_FSL_LAYERSCAPE_SOC_H_ |
||||
#define _ASM_ARMV8_FSL_LAYERSCAPE_SOC_H_ |
||||
|
||||
#ifdef CONFIG_SYS_FSL_CCSR_GUR_LE |
||||
#define gur_in32(a) in_le32(a) |
||||
#define gur_out32(a, v) out_le32(a, v) |
||||
#elif defined(CONFIG_SYS_FSL_CCSR_GUR_BE) |
||||
#define gur_in32(a) in_be32(a) |
||||
#define gur_out32(a, v) out_be32(a, v) |
||||
#endif |
||||
|
||||
#ifdef CONFIG_SYS_FSL_CCSR_SCFG_LE |
||||
#define scfg_in32(a) in_le32(a) |
||||
#define scfg_out32(a, v) out_le32(a, v) |
||||
#elif defined(CONFIG_SYS_FSL_CCSR_SCFG_BE) |
||||
#define scfg_in32(a) in_be32(a) |
||||
#define scfg_out32(a, v) out_be32(a, v) |
||||
#endif |
||||
|
||||
struct cpu_type { |
||||
char name[15]; |
||||
u32 soc_ver; |
||||
u32 num_cores; |
||||
}; |
||||
|
||||
#define CPU_TYPE_ENTRY(n, v, nc) \ |
||||
{ .name = #n, .soc_ver = SVR_##v, .num_cores = (nc)} |
||||
|
||||
#define SVR_WO_E 0xFFFFFE |
||||
#define SVR_LS1043 0x879204 |
||||
#define SVR_LS2045 0x870120 |
||||
#define SVR_LS2080 0x870110 |
||||
#define SVR_LS2085 0x870100 |
||||
|
||||
#define SVR_MAJ(svr) (((svr) >> 4) & 0xf) |
||||
#define SVR_MIN(svr) (((svr) >> 0) & 0xf) |
||||
#define SVR_SOC_VER(svr) (((svr) >> 8) & SVR_WO_E) |
||||
#define IS_E_PROCESSOR(svr) (!((svr >> 8) & 0x1)) |
||||
|
||||
#ifdef CONFIG_FSL_LSCH3 |
||||
void fsl_lsch3_early_init_f(void); |
||||
#elif defined(CONFIG_FSL_LSCH2) |
||||
void fsl_lsch2_early_init_f(void); |
||||
#endif |
||||
|
||||
void cpu_name(char *name); |
||||
#endif /* _ASM_ARMV8_FSL_LAYERSCAPE_SOC_H_ */ |
@ -0,0 +1,10 @@ |
||||
/*
|
||||
* Copyright 2014-2015, Freescale Semiconductor, Inc. |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#ifndef _FSL_LAYERSCAPE_SPEED_H |
||||
#define _FSL_LAYERSCAPE_SPEED_H |
||||
void get_sys_info(struct sys_info *sys_info); |
||||
#endif /* _FSL_LAYERSCAPE_SPEED_H */ |
@ -1,185 +0,0 @@ |
||||
/*
|
||||
* Copyright 2014, Freescale Semiconductor |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#ifndef _ASM_ARMV8_FSL_LSCH3_CONFIG_ |
||||
#define _ASM_ARMV8_FSL_LSCH3_CONFIG_ |
||||
|
||||
#include <fsl_ddrc_version.h> |
||||
|
||||
#define CONFIG_SYS_PAGE_SIZE 0x10000 |
||||
#define CONFIG_SYS_CACHELINE_SIZE 64 |
||||
|
||||
#ifndef L1_CACHE_BYTES |
||||
#define L1_CACHE_SHIFT 6 |
||||
#define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT) |
||||
#endif |
||||
|
||||
#define CONFIG_MP |
||||
#define CONFIG_SYS_FSL_OCRAM_BASE 0x18000000 /* initial RAM */ |
||||
#define CONFIG_SYS_FSL_OCRAM_SIZE 0x00200000 /* 2M */ |
||||
/* Link Definitions */ |
||||
#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_FSL_OCRAM_BASE + 0xfff0) |
||||
|
||||
#define CONFIG_SYS_IMMR 0x01000000 |
||||
#define CONFIG_SYS_FSL_DDR_ADDR (CONFIG_SYS_IMMR + 0x00080000) |
||||
#define CONFIG_SYS_FSL_DDR2_ADDR (CONFIG_SYS_IMMR + 0x00090000) |
||||
#define CONFIG_SYS_FSL_DDR3_ADDR 0x08210000 |
||||
#define CONFIG_SYS_FSL_GUTS_ADDR (CONFIG_SYS_IMMR + 0x00E00000) |
||||
#define CONFIG_SYS_FSL_PMU_ADDR (CONFIG_SYS_IMMR + 0x00E30000) |
||||
#define CONFIG_SYS_FSL_RST_ADDR (CONFIG_SYS_IMMR + 0x00E60000) |
||||
#define CONFIG_SYS_FSL_CH3_CLK_GRPA_ADDR (CONFIG_SYS_IMMR + 0x00300000) |
||||
#define CONFIG_SYS_FSL_CH3_CLK_GRPB_ADDR (CONFIG_SYS_IMMR + 0x00310000) |
||||
#define CONFIG_SYS_FSL_CH3_CLK_CTRL_ADDR (CONFIG_SYS_IMMR + 0x00370000) |
||||
#define CONFIG_SYS_FSL_ESDHC_ADDR (CONFIG_SYS_IMMR + 0x01140000) |
||||
#define CONFIG_SYS_IFC_ADDR (CONFIG_SYS_IMMR + 0x01240000) |
||||
#define CONFIG_SYS_NS16550_COM1 (CONFIG_SYS_IMMR + 0x011C0500) |
||||
#define CONFIG_SYS_NS16550_COM2 (CONFIG_SYS_IMMR + 0x011C0600) |
||||
#define CONFIG_SYS_FSL_TIMER_ADDR 0x023d0000 |
||||
#define CONFIG_SYS_FSL_PMU_CLTBENR (CONFIG_SYS_FSL_PMU_ADDR + \ |
||||
0x18A0) |
||||
|
||||
#define CONFIG_SYS_FSL_WRIOP1_ADDR (CONFIG_SYS_IMMR + 0x7B80000) |
||||
#define CONFIG_SYS_FSL_WRIOP1_MDIO1 (CONFIG_SYS_FSL_WRIOP1_ADDR + 0x16000) |
||||
#define CONFIG_SYS_FSL_WRIOP1_MDIO2 (CONFIG_SYS_FSL_WRIOP1_ADDR + 0x17000) |
||||
#define CONFIG_SYS_FSL_LSCH3_SERDES_ADDR (CONFIG_SYS_IMMR + 0xEA0000) |
||||
|
||||
/* SP (Cortex-A5) related */ |
||||
#define CONFIG_SYS_FSL_SP_ADDR (CONFIG_SYS_IMMR + 0x00F00000) |
||||
#define CONFIG_SYS_FSL_SP_VSG_GIC_ADDR (CONFIG_SYS_FSL_SP_ADDR) |
||||
#define CONFIG_SYS_FSL_SP_VSG_GIC_VIGR1 (CONFIG_SYS_FSL_SP_ADDR) |
||||
#define CONFIG_SYS_FSL_SP_VSG_GIC_VIGR2 \ |
||||
(CONFIG_SYS_FSL_SP_ADDR + 0x0008) |
||||
#define CONFIG_SYS_FSL_SP_LOOPBACK_DUART \ |
||||
(CONFIG_SYS_FSL_SP_ADDR + 0x1000) |
||||
|
||||
#define CONFIG_SYS_FSL_DCSR_DDR_ADDR 0x70012c000ULL |
||||
#define CONFIG_SYS_FSL_DCSR_DDR2_ADDR 0x70012d000ULL |
||||
#define CONFIG_SYS_FSL_DCSR_DDR3_ADDR 0x700132000ULL |
||||
#define CONFIG_SYS_FSL_DCSR_DDR4_ADDR 0x700133000ULL |
||||
|
||||
#define I2C1_BASE_ADDR (CONFIG_SYS_IMMR + 0x01000000) |
||||
#define I2C2_BASE_ADDR (CONFIG_SYS_IMMR + 0x01010000) |
||||
#define I2C3_BASE_ADDR (CONFIG_SYS_IMMR + 0x01020000) |
||||
#define I2C4_BASE_ADDR (CONFIG_SYS_IMMR + 0x01030000) |
||||
|
||||
#define CONFIG_SYS_LS2085A_XHCI_USB1_ADDR (CONFIG_SYS_IMMR + 0x02100000) |
||||
#define CONFIG_SYS_LS2085A_XHCI_USB2_ADDR (CONFIG_SYS_IMMR + 0x02110000) |
||||
|
||||
/* 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) |
||||
|
||||
/* TZ Address Space Controller Definitions */ |
||||
#define TZASC1_BASE 0x01100000 /* as per CCSR map. */ |
||||
#define TZASC2_BASE 0x01110000 /* as per CCSR map. */ |
||||
#define TZASC3_BASE 0x01120000 /* as per CCSR map. */ |
||||
#define TZASC4_BASE 0x01130000 /* as per CCSR map. */ |
||||
#define TZASC_BUILD_CONFIG_REG(x) ((TZASC1_BASE + (x * 0x10000))) |
||||
#define TZASC_ACTION_REG(x) ((TZASC1_BASE + (x * 0x10000)) + 0x004) |
||||
#define TZASC_GATE_KEEPER(x) ((TZASC1_BASE + (x * 0x10000)) + 0x008) |
||||
#define TZASC_REGION_BASE_LOW_0(x) ((TZASC1_BASE + (x * 0x10000)) + 0x100) |
||||
#define TZASC_REGION_BASE_HIGH_0(x) ((TZASC1_BASE + (x * 0x10000)) + 0x104) |
||||
#define TZASC_REGION_TOP_LOW_0(x) ((TZASC1_BASE + (x * 0x10000)) + 0x108) |
||||
#define TZASC_REGION_TOP_HIGH_0(x) ((TZASC1_BASE + (x * 0x10000)) + 0x10C) |
||||
#define TZASC_REGION_ATTRIBUTES_0(x) ((TZASC1_BASE + (x * 0x10000)) + 0x110) |
||||
#define TZASC_REGION_ID_ACCESS_0(x) ((TZASC1_BASE + (x * 0x10000)) + 0x114) |
||||
|
||||
/* Generic Interrupt Controller Definitions */ |
||||
#define GICD_BASE 0x06000000 |
||||
#define GICR_BASE 0x06100000 |
||||
|
||||
/* SMMU Defintions */ |
||||
#define SMMU_BASE 0x05000000 /* GR0 Base */ |
||||
|
||||
/* DDR */ |
||||
#define CONFIG_SYS_FSL_DDR_LE |
||||
#define CONFIG_VERY_BIG_RAM |
||||
#ifdef CONFIG_SYS_FSL_DDR4 |
||||
#define CONFIG_SYS_FSL_DDRC_GEN4 |
||||
#else |
||||
#define CONFIG_SYS_FSL_DDRC_ARM_GEN3 /* Enable Freescale ARM DDR3 driver */ |
||||
#endif |
||||
#define CONFIG_SYS_FSL_DDR /* Freescale DDR driver */ |
||||
#define CONFIG_SYS_LS2_DDR_BLOCK1_SIZE ((phys_size_t)2 << 30) |
||||
#define CONFIG_MAX_MEM_MAPPED CONFIG_SYS_LS2_DDR_BLOCK1_SIZE |
||||
#define CONFIG_SYS_FSL_DDR_VER FSL_DDR_VER_5_0 |
||||
|
||||
#define CONFIG_SYS_FSL_ESDHC_LE |
||||
/* IFC */ |
||||
#define CONFIG_SYS_FSL_IFC_LE |
||||
#define CONFIG_SYS_MEMAC_LITTLE_ENDIAN |
||||
|
||||
/* PCIe */ |
||||
#define CONFIG_SYS_PCIE1_ADDR (CONFIG_SYS_IMMR + 0x2400000) |
||||
#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) |
||||
#define CONFIG_SYS_PCIE1_PHYS_ADDR 0x1000000000ULL |
||||
#define CONFIG_SYS_PCIE2_PHYS_ADDR 0x1200000000ULL |
||||
#define CONFIG_SYS_PCIE3_PHYS_ADDR 0x1400000000ULL |
||||
#define CONFIG_SYS_PCIE4_PHYS_ADDR 0x1600000000ULL |
||||
|
||||
/* Cache Coherent Interconnect */ |
||||
#define CCI_MN_BASE 0x04000000 |
||||
#define CCI_MN_RNF_NODEID_LIST 0x180 |
||||
#define CCI_MN_DVM_DOMAIN_CTL 0x200 |
||||
#define CCI_MN_DVM_DOMAIN_CTL_SET 0x210 |
||||
|
||||
#define CCI_RN_I_0_BASE (CCI_MN_BASE + 0x800000) |
||||
#define CCI_RN_I_2_BASE (CCI_MN_BASE + 0x820000) |
||||
#define CCI_RN_I_6_BASE (CCI_MN_BASE + 0x860000) |
||||
#define CCI_RN_I_12_BASE (CCI_MN_BASE + 0x8C0000) |
||||
#define CCI_RN_I_16_BASE (CCI_MN_BASE + 0x900000) |
||||
#define CCI_RN_I_20_BASE (CCI_MN_BASE + 0x940000) |
||||
|
||||
#define CCI_S0_QOS_CONTROL_BASE(x) ((CCI_RN_I_0_BASE + (x * 0x10000)) + 0x10) |
||||
#define CCI_S1_QOS_CONTROL_BASE(x) ((CCI_RN_I_0_BASE + (x * 0x10000)) + 0x110) |
||||
#define CCI_S2_QOS_CONTROL_BASE(x) ((CCI_RN_I_0_BASE + (x * 0x10000)) + 0x210) |
||||
|
||||
/* Device Configuration */ |
||||
#define DCFG_BASE 0x01e00000 |
||||
#define DCFG_PORSR1 0x000 |
||||
#define DCFG_PORSR1_RCW_SRC 0xff800000 |
||||
#define DCFG_PORSR1_RCW_SRC_NOR 0x12f00000 |
||||
#define DCFG_RCWSR13 0x130 |
||||
#define DCFG_RCWSR13_DSPI (0 << 8) |
||||
|
||||
#define DCFG_DCSR_BASE 0X700100000ULL |
||||
#define DCFG_DCSR_PORCR1 0x000 |
||||
|
||||
/* Supplemental Configuration */ |
||||
#define SCFG_BASE 0x01fc0000 |
||||
#define SCFG_USB3PRM1CR 0x000 |
||||
|
||||
#ifdef CONFIG_LS2085A |
||||
#define CONFIG_MAX_CPUS 16 |
||||
#define CONFIG_SYS_FSL_IFC_BANK_COUNT 8 |
||||
#define CONFIG_NUM_DDR_CONTROLLERS 3 |
||||
#define CONFIG_SYS_FSL_CLUSTER_CLOCKS { 1, 1, 4, 4 } |
||||
#define CONFIG_SYS_FSL_SRDS_1 |
||||
#define CONFIG_SYS_FSL_SRDS_2 |
||||
#else |
||||
#error SoC not defined |
||||
#endif |
||||
|
||||
#ifdef CONFIG_LS2085A |
||||
#define CONFIG_SYS_FSL_ERRATUM_A008336 |
||||
#define CONFIG_SYS_FSL_ERRATUM_A008511 |
||||
#define CONFIG_SYS_FSL_ERRATUM_A008514 |
||||
#define CONFIG_SYS_FSL_ERRATUM_A008585 |
||||
#define CONFIG_SYS_FSL_ERRATUM_A008751 |
||||
#endif |
||||
|
||||
#endif /* _ASM_ARMV8_FSL_LSCH3_CONFIG_ */ |
@ -1,67 +0,0 @@ |
||||
/*
|
||||
* Copyright 2015 Freescale Semiconductor, Inc. |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#ifndef __FSL_SERDES_H |
||||
#define __FSL_SERDES_H |
||||
|
||||
#include <config.h> |
||||
|
||||
#define SRDS_MAX_LANES 8 |
||||
|
||||
enum srds_prtcl { |
||||
NONE = 0, |
||||
PCIE1, |
||||
PCIE2, |
||||
PCIE3, |
||||
PCIE4, |
||||
SATA1, |
||||
SATA2, |
||||
XAUI1, |
||||
XAUI2, |
||||
XFI1, |
||||
XFI2, |
||||
XFI3, |
||||
XFI4, |
||||
XFI5, |
||||
XFI6, |
||||
XFI7, |
||||
XFI8, |
||||
SGMII1, |
||||
SGMII2, |
||||
SGMII3, |
||||
SGMII4, |
||||
SGMII5, |
||||
SGMII6, |
||||
SGMII7, |
||||
SGMII8, |
||||
SGMII9, |
||||
SGMII10, |
||||
SGMII11, |
||||
SGMII12, |
||||
SGMII13, |
||||
SGMII14, |
||||
SGMII15, |
||||
SGMII16, |
||||
QSGMII_A, /* A indicates MACs 1-4 */ |
||||
QSGMII_B, /* B indicates MACs 5-8 */ |
||||
QSGMII_C, /* C indicates MACs 9-12 */ |
||||
QSGMII_D, /* D indicates MACs 12-16 */ |
||||
SERDES_PRCTL_COUNT |
||||
}; |
||||
|
||||
enum srds { |
||||
FSL_SRDS_1 = 0, |
||||
FSL_SRDS_2 = 1, |
||||
}; |
||||
|
||||
int is_serdes_configured(enum srds_prtcl device); |
||||
void fsl_serdes_init(void); |
||||
|
||||
int serdes_get_first_lane(u32 sd, enum srds_prtcl device); |
||||
enum srds_prtcl serdes_get_prtcl(int serdes, int cfg, int lane); |
||||
int is_serdes_prtcl_valid(int serdes, u32 prtcl); |
||||
|
||||
#endif /* __FSL_SERDES_H */ |
@ -1,9 +0,0 @@ |
||||
/*
|
||||
* Copyright 2014, Freescale Semiconductor |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#ifndef _ASM_ARMV8_FSL_LSCH3_GPIO_H_ |
||||
#define _ASM_ARMV8_FSL_LSCH3_GPIO_H_ |
||||
#endif /* _ASM_ARMV8_FSL_LSCH3_GPIO_H_ */ |
@ -1,13 +0,0 @@ |
||||
/*
|
||||
* Copyright 2014 Freescale Semiconductor, Inc. |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
* |
||||
*/ |
||||
|
||||
#ifndef __ASM_ARCH_FSL_LSCH3_IMX_REGS_H_ |
||||
#define __ASM_ARCH_FSL_LSCH3_IMX_REGS_H_ |
||||
|
||||
#define I2C_QUIRK_REG /* enable 8-bit driver */ |
||||
|
||||
#endif /* __ASM_ARCH_FSL_LSCH3_IMX_REGS_H_ */ |
@ -1,28 +0,0 @@ |
||||
/*
|
||||
* Copyright 2015 Freescale Semiconductor |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
struct cpu_type { |
||||
char name[15]; |
||||
u32 soc_ver; |
||||
u32 num_cores; |
||||
}; |
||||
|
||||
#define CPU_TYPE_ENTRY(n, v, nc) \ |
||||
{ .name = #n, .soc_ver = SVR_##v, .num_cores = (nc)} |
||||
|
||||
#define SVR_WO_E 0xFFFFFE |
||||
#define SVR_LS2045 0x870120 |
||||
#define SVR_LS2080 0x870110 |
||||
#define SVR_LS2085 0x870100 |
||||
|
||||
#define SVR_MAJ(svr) (((svr) >> 4) & 0xf) |
||||
#define SVR_MIN(svr) (((svr) >> 0) & 0xf) |
||||
#define SVR_SOC_VER(svr) (((svr) >> 8) & SVR_WO_E) |
||||
#define IS_E_PROCESSOR(svr) (!((svr >> 8) & 0x1)) |
||||
|
||||
void fsl_lsch3_early_init_f(void); |
||||
void cpu_name(char *name); |
||||
|
@ -0,0 +1,11 @@ |
||||
/*
|
||||
* Copyright 2015 Freescale Semiconductor, Inc. |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#ifndef __FSL_SATA_H_ |
||||
#define __FSL_SATA_H_ |
||||
|
||||
int ls1021a_sata_init(void); |
||||
#endif |
@ -1,14 +0,0 @@ |
||||
#PBL preamble and RCW header |
||||
aa55aa55 01ee0100 |
||||
|
||||
#enable IFC, disable QSPI and DSPI |
||||
0608000a 00000000 00000000 00000000 |
||||
20000000 00407900 60040a00 21046000 |
||||
00000000 00000000 00000000 00038000 |
||||
00080000 881b7340 00000000 00000000 |
||||
|
||||
#disable IFC, enable QSPI and DSPI |
||||
#0608000a 00000000 00000000 00000000 |
||||
#20000000 00407900 60040a00 21046000 |
||||
#00000000 00000000 00000000 00038000 |
||||
#20084800 881b7340 00000000 00000000 |
@ -0,0 +1,8 @@ |
||||
#PBL preamble and RCW header |
||||
aa55aa55 01ee0100 |
||||
|
||||
#enable IFC, disable QSPI and DSPI |
||||
0608000a 00000000 00000000 00000000 |
||||
30000000 00007900 60040a00 21046000 |
||||
00000000 00000000 00000000 20000000 |
||||
00080000 881b7340 00000000 00000000 |
@ -0,0 +1,8 @@ |
||||
#PBL preamble and RCW header |
||||
aa55aa55 01ee0100 |
||||
|
||||
#disable IFC, enable QSPI and DSPI |
||||
0608000a 00000000 00000000 00000000 |
||||
30000000 00007900 60040a00 21046000 |
||||
00000000 00000000 00000000 20000000 |
||||
20024800 881b7340 00000000 00000000 |
@ -0,0 +1,16 @@ |
||||
|
||||
if TARGET_LS1043ARDB |
||||
|
||||
config SYS_BOARD |
||||
default "ls1043ardb" |
||||
|
||||
config SYS_VENDOR |
||||
default "freescale" |
||||
|
||||
config SYS_SOC |
||||
default "fsl-layerscape" |
||||
|
||||
config SYS_CONFIG_NAME |
||||
default "ls1043ardb" |
||||
|
||||
endif |
@ -0,0 +1,7 @@ |
||||
LS1043A BOARD |
||||
M: Mingkai Hu <Mingkai.hu@freescale.com> |
||||
S: Maintained |
||||
F: board/freescale/ls1043ardb/ |
||||
F: board/freescale/ls1043ardb/ls1043ardb.c |
||||
F: include/configs/ls1043ardb.h |
||||
F: configs/ls1043ardb_defconfig |
@ -0,0 +1,10 @@ |
||||
#
|
||||
# Copyright 2015 Freescale Semiconductor
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
|
||||
obj-y += cpld.o
|
||||
obj-y += ddr.o
|
||||
obj-y += ls1043ardb.o
|
||||
obj-$(CONFIG_SYS_DPAA_FMAN) += eth.o
|
@ -0,0 +1,87 @@ |
||||
Overview |
||||
-------- |
||||
The LS1043A Reference Design Board (RDB) is a high-performance computing, |
||||
evaluation, and development platform that supports the QorIQ LS1043A |
||||
LayerScape Architecture processor. The LS1043ARDB provides SW development |
||||
platform for the Freescale LS1043A processor series, with a complete |
||||
debugging environment. The LS1043A RDB is lead-free and RoHS-compliant. |
||||
|
||||
LS1043A SoC Overview |
||||
-------------------- |
||||
The LS1043A integrated multicore processor combines four ARM Cortex-A53 |
||||
processor cores with datapath acceleration optimized for L2/3 packet |
||||
processing, single pass security offload and robust traffic management |
||||
and quality of service. |
||||
|
||||
The LS1043A SoC includes the following function and features: |
||||
- Four 64-bit ARM Cortex-A53 CPUs |
||||
- 1 MB unified L2 Cache |
||||
- One 32-bit DDR3L/DDR4 SDRAM memory controllers with ECC and interleaving |
||||
support |
||||
- Data Path Acceleration Architecture (DPAA) incorporating acceleration the |
||||
the following functions: |
||||
- Packet parsing, classification, and distribution (FMan) |
||||
- Queue management for scheduling, packet sequencing, and congestion |
||||
management (QMan) |
||||
- Hardware buffer management for buffer allocation and de-allocation (BMan) |
||||
- Cryptography acceleration (SEC) |
||||
- Ethernet interfaces by FMan |
||||
- Up to 1 x XFI supporting 10G interface |
||||
- Up to 1 x QSGMII |
||||
- Up to 4 x SGMII supporting 1000Mbps |
||||
- Up to 2 x SGMII supporting 2500Mbps |
||||
- Up to 2 x RGMII supporting 1000Mbps |
||||
- High-speed peripheral interfaces |
||||
- Three PCIe 2.0 controllers, one supporting x4 operation |
||||
- One serial ATA (SATA 3.0) controllers |
||||
- Additional peripheral interfaces |
||||
- Three high-speed USB 3.0 controllers with integrated PHY |
||||
- Enhanced secure digital host controller (eSDXC/eMMC) |
||||
- Quad Serial Peripheral Interface (QSPI) Controller |
||||
- Serial peripheral interface (SPI) controller |
||||
- Four I2C controllers |
||||
- Two DUARTs |
||||
- Integrated flash controller supporting NAND and NOR flash |
||||
- QorIQ platform's trust architecture 2.1 |
||||
|
||||
LS1043ARDB board Overview |
||||
----------------------- |
||||
- SERDES Connections, 4 lanes supporting: |
||||
- PCI Express 2.0 with two PCIe connectors supporting: miniPCIe card and |
||||
standard PCIe card |
||||
- QSGMII with x4 RJ45 connector |
||||
- XFI with x1 RJ45 connector |
||||
- DDR Controller |
||||
- 2GB 32bits DDR4 SDRAM. Support rates of up to 1600MT/s |
||||
-IFC/Local Bus |
||||
- One 128MB NOR flash 16-bit data bus |
||||
- One 512 MB NAND flash with ECC support |
||||
- CPLD connection |
||||
- USB 3.0 |
||||
- Two super speed USB 3.0 Type A ports |
||||
- SDHC: connects directly to a full SD/MMC slot |
||||
- DSPI: 16 MB high-speed flash Memory for boot code and storage (up to 108MHz) |
||||
- 4 I2C controllers |
||||
- UART |
||||
- Two 4-pin serial ports at up to 115.2 Kbit/s |
||||
- Two DB9 D-Type connectors supporting one Serial port each |
||||
- ARM JTAG support |
||||
|
||||
Memory map from core's view |
||||
---------------------------- |
||||
Start Address End Address Description Size |
||||
0x00_0000_0000 0x00_000F_FFFF Secure Boot ROM 1MB |
||||
0x00_0100_0000 0x00_0FFF_FFFF CCSRBAR 240MB |
||||
0x00_1000_0000 0x00_1000_FFFF OCRAM0 64KB |
||||
0x00_1001_0000 0x00_1001_FFFF OCRAM1 64KB |
||||
0x00_2000_0000 0x00_20FF_FFFF DCSR 16MB |
||||
0x00_6000_0000 0x00_67FF_FFFF IFC - NOR Flash 128MB |
||||
0x00_7E80_0000 0x00_7E80_FFFF IFC - NAND Flash 64KB |
||||
0x00_7FB0_0000 0x00_7FB0_0FFF IFC - FPGA 4KB |
||||
0x00_8000_0000 0x00_FFFF_FFFF DRAM1 2GB |
||||
|
||||
Booting Options |
||||
--------------- |
||||
a) NOR boot |
||||
b) NAND boot |
||||
c) SD boot |
@ -0,0 +1,152 @@ |
||||
/*
|
||||
* Copyright 2015 Freescale Semiconductor |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
* |
||||
* Freescale LS1043ARDB board-specific CPLD controlling supports. |
||||
*/ |
||||
|
||||
#include <common.h> |
||||
#include <command.h> |
||||
#include <asm/io.h> |
||||
#include "cpld.h" |
||||
|
||||
u8 cpld_read(unsigned int reg) |
||||
{ |
||||
void *p = (void *)CONFIG_SYS_CPLD_BASE; |
||||
|
||||
return in_8(p + reg); |
||||
} |
||||
|
||||
void cpld_write(unsigned int reg, u8 value) |
||||
{ |
||||
void *p = (void *)CONFIG_SYS_CPLD_BASE; |
||||
|
||||
out_8(p + reg, value); |
||||
} |
||||
|
||||
/* Set the boot bank to the alternate bank */ |
||||
void cpld_set_altbank(void) |
||||
{ |
||||
u8 reg4 = CPLD_READ(soft_mux_on); |
||||
u8 reg7 = CPLD_READ(vbank); |
||||
|
||||
CPLD_WRITE(soft_mux_on, reg4 | CPLD_SW_MUX_BANK_SEL); |
||||
|
||||
reg7 = (reg7 & ~CPLD_BANK_SEL_MASK) | CPLD_BANK_SEL_ALTBANK; |
||||
CPLD_WRITE(vbank, reg7); |
||||
|
||||
CPLD_WRITE(system_rst, 1); |
||||
} |
||||
|
||||
/* Set the boot bank to the default bank */ |
||||
void cpld_set_defbank(void) |
||||
{ |
||||
CPLD_WRITE(global_rst, 1); |
||||
} |
||||
|
||||
void cpld_set_nand(void) |
||||
{ |
||||
u16 reg = CPLD_CFG_RCW_SRC_NAND; |
||||
u8 reg5 = (u8)(reg >> 1); |
||||
u8 reg6 = (u8)(reg & 1); |
||||
|
||||
cpld_rev_bit(®5); |
||||
|
||||
CPLD_WRITE(soft_mux_on, 1); |
||||
|
||||
CPLD_WRITE(cfg_rcw_src1, reg5); |
||||
CPLD_WRITE(cfg_rcw_src2, reg6); |
||||
|
||||
CPLD_WRITE(system_rst, 1); |
||||
} |
||||
|
||||
void cpld_set_sd(void) |
||||
{ |
||||
u16 reg = CPLD_CFG_RCW_SRC_SD; |
||||
u8 reg5 = (u8)(reg >> 1); |
||||
u8 reg6 = (u8)(reg & 1); |
||||
|
||||
cpld_rev_bit(®5); |
||||
|
||||
CPLD_WRITE(soft_mux_on, 1); |
||||
|
||||
CPLD_WRITE(cfg_rcw_src1, reg5); |
||||
CPLD_WRITE(cfg_rcw_src2, reg6); |
||||
|
||||
CPLD_WRITE(system_rst, 1); |
||||
} |
||||
#ifdef DEBUG |
||||
static void cpld_dump_regs(void) |
||||
{ |
||||
printf("cpld_ver = %x\n", CPLD_READ(cpld_ver)); |
||||
printf("cpld_ver_sub = %x\n", CPLD_READ(cpld_ver_sub)); |
||||
printf("pcba_ver = %x\n", CPLD_READ(pcba_ver)); |
||||
printf("soft_mux_on = %x\n", CPLD_READ(soft_mux_on)); |
||||
printf("cfg_rcw_src1 = %x\n", CPLD_READ(cfg_rcw_src1)); |
||||
printf("cfg_rcw_src2 = %x\n", CPLD_READ(cfg_rcw_src2)); |
||||
printf("vbank = %x\n", CPLD_READ(vbank)); |
||||
printf("sysclk_sel = %x\n", CPLD_READ(sysclk_sel)); |
||||
printf("uart_sel = %x\n", CPLD_READ(uart_sel)); |
||||
printf("sd1refclk_sel = %x\n", CPLD_READ(sd1refclk_sel)); |
||||
printf("tdmclk_mux_sel = %x\n", CPLD_READ(tdmclk_mux_sel)); |
||||
printf("sdhc_spics_sel = %x\n", CPLD_READ(sdhc_spics_sel)); |
||||
printf("status_led = %x\n", CPLD_READ(status_led)); |
||||
putc('\n'); |
||||
} |
||||
#endif |
||||
|
||||
void cpld_rev_bit(unsigned char *value) |
||||
{ |
||||
u8 rev_val, val; |
||||
int i; |
||||
|
||||
val = *value; |
||||
rev_val = val & 1; |
||||
for (i = 1; i <= 7; i++) { |
||||
val >>= 1; |
||||
rev_val <<= 1; |
||||
rev_val |= val & 1; |
||||
} |
||||
|
||||
*value = rev_val; |
||||
} |
||||
|
||||
int do_cpld(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) |
||||
{ |
||||
int rc = 0; |
||||
|
||||
if (argc <= 1) |
||||
return cmd_usage(cmdtp); |
||||
|
||||
if (strcmp(argv[1], "reset") == 0) { |
||||
if (strcmp(argv[2], "altbank") == 0) |
||||
cpld_set_altbank(); |
||||
else if (strcmp(argv[2], "nand") == 0) |
||||
cpld_set_nand(); |
||||
else if (strcmp(argv[2], "sd") == 0) |
||||
cpld_set_sd(); |
||||
else |
||||
cpld_set_defbank(); |
||||
#ifdef DEBUG |
||||
} else if (strcmp(argv[1], "dump") == 0) { |
||||
cpld_dump_regs(); |
||||
#endif |
||||
} else { |
||||
rc = cmd_usage(cmdtp); |
||||
} |
||||
|
||||
return rc; |
||||
} |
||||
|
||||
U_BOOT_CMD( |
||||
cpld, CONFIG_SYS_MAXARGS, 1, do_cpld, |
||||
"Reset the board or alternate bank", |
||||
"reset: reset to default bank\n" |
||||
"cpld reset altbank: reset to alternate bank\n" |
||||
"cpld reset nand: reset to boot from NAND flash\n" |
||||
"cpld reset sd: reset to boot from SD card\n" |
||||
#ifdef DEBUG |
||||
"cpld dump - display the CPLD registers\n" |
||||
#endif |
||||
); |
@ -0,0 +1,45 @@ |
||||
/*
|
||||
* Copyright 2015 Freescale Semiconductor |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#ifndef __CPLD_H__ |
||||
#define __CPLD_H__ |
||||
|
||||
/*
|
||||
* CPLD register set of LS1043ARDB board-specific. |
||||
*/ |
||||
struct cpld_data { |
||||
u8 cpld_ver; /* 0x0 - CPLD Major Revision Register */ |
||||
u8 cpld_ver_sub; /* 0x1 - CPLD Minor Revision Register */ |
||||
u8 pcba_ver; /* 0x2 - PCBA Revision Register */ |
||||
u8 system_rst; /* 0x3 - system reset register */ |
||||
u8 soft_mux_on; /* 0x4 - Switch Control Enable Register */ |
||||
u8 cfg_rcw_src1; /* 0x5 - Reset config word 1 */ |
||||
u8 cfg_rcw_src2; /* 0x6 - Reset config word 1 */ |
||||
u8 vbank; /* 0x7 - Flash bank selection Control */ |
||||
u8 sysclk_sel; /* 0x8 - */ |
||||
u8 uart_sel; /* 0x9 - */ |
||||
u8 sd1refclk_sel; /* 0xA - */ |
||||
u8 tdmclk_mux_sel; /* 0xB - */ |
||||
u8 sdhc_spics_sel; /* 0xC - */ |
||||
u8 status_led; /* 0xD - */ |
||||
u8 global_rst; /* 0xE - */ |
||||
}; |
||||
|
||||
u8 cpld_read(unsigned int reg); |
||||
void cpld_write(unsigned int reg, u8 value); |
||||
void cpld_rev_bit(unsigned char *value); |
||||
|
||||
#define CPLD_READ(reg) cpld_read(offsetof(struct cpld_data, reg)) |
||||
#define CPLD_WRITE(reg, value) \ |
||||
cpld_write(offsetof(struct cpld_data, reg), value) |
||||
|
||||
/* CPLD on IFC */ |
||||
#define CPLD_SW_MUX_BANK_SEL 0x40 |
||||
#define CPLD_BANK_SEL_MASK 0x07 |
||||
#define CPLD_BANK_SEL_ALTBANK 0x04 |
||||
#define CPLD_CFG_RCW_SRC_NAND 0x106 |
||||
#define CPLD_CFG_RCW_SRC_SD 0x040 |
||||
#endif |
@ -0,0 +1,191 @@ |
||||
/*
|
||||
* Copyright 2015 Freescale Semiconductor, Inc. |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#include <common.h> |
||||
#include <fsl_ddr_sdram.h> |
||||
#include <fsl_ddr_dimm_params.h> |
||||
#include "ddr.h" |
||||
#ifdef CONFIG_FSL_DEEP_SLEEP |
||||
#include <fsl_sleep.h> |
||||
#endif |
||||
|
||||
DECLARE_GLOBAL_DATA_PTR; |
||||
|
||||
void fsl_ddr_board_options(memctl_options_t *popts, |
||||
dimm_params_t *pdimm, |
||||
unsigned int ctrl_num) |
||||
{ |
||||
const struct board_specific_parameters *pbsp, *pbsp_highest = NULL; |
||||
ulong ddr_freq; |
||||
|
||||
if (ctrl_num > 1) { |
||||
printf("Not supported controller number %d\n", ctrl_num); |
||||
return; |
||||
} |
||||
if (!pdimm->n_ranks) |
||||
return; |
||||
|
||||
pbsp = udimms[0]; |
||||
|
||||
/* Get clk_adjust, wrlvl_start, wrlvl_ctl, according to the board ddr
|
||||
* freqency and n_banks specified in board_specific_parameters table. |
||||
*/ |
||||
ddr_freq = get_ddr_freq(0) / 1000000; |
||||
while (pbsp->datarate_mhz_high) { |
||||
if (pbsp->n_ranks == pdimm->n_ranks) { |
||||
if (ddr_freq <= pbsp->datarate_mhz_high) { |
||||
popts->clk_adjust = pbsp->clk_adjust; |
||||
popts->wrlvl_start = pbsp->wrlvl_start; |
||||
popts->wrlvl_ctl_2 = pbsp->wrlvl_ctl_2; |
||||
popts->wrlvl_ctl_3 = pbsp->wrlvl_ctl_3; |
||||
popts->cpo_override = pbsp->cpo_override; |
||||
popts->write_data_delay = |
||||
pbsp->write_data_delay; |
||||
goto found; |
||||
} |
||||
pbsp_highest = pbsp; |
||||
} |
||||
pbsp++; |
||||
} |
||||
|
||||
if (pbsp_highest) { |
||||
printf("Error: board specific timing not found for %lu MT/s\n", |
||||
ddr_freq); |
||||
printf("Trying to use the highest speed (%u) parameters\n", |
||||
pbsp_highest->datarate_mhz_high); |
||||
popts->clk_adjust = pbsp_highest->clk_adjust; |
||||
popts->wrlvl_start = pbsp_highest->wrlvl_start; |
||||
popts->wrlvl_ctl_2 = pbsp->wrlvl_ctl_2; |
||||
popts->wrlvl_ctl_3 = pbsp->wrlvl_ctl_3; |
||||
} else { |
||||
panic("DIMM is not supported by this board"); |
||||
} |
||||
found: |
||||
debug("Found timing match: n_ranks %d, data rate %d, rank_gb %d\n", |
||||
pbsp->n_ranks, pbsp->datarate_mhz_high, pbsp->rank_gb); |
||||
|
||||
/* force DDR bus width to 32 bits */ |
||||
popts->data_bus_width = 1; |
||||
popts->otf_burst_chop_en = 0; |
||||
popts->burst_length = DDR_BL8; |
||||
|
||||
/*
|
||||
* Factors to consider for half-strength driver enable: |
||||
* - number of DIMMs installed |
||||
*/ |
||||
popts->half_strength_driver_enable = 1; |
||||
/*
|
||||
* Write leveling override |
||||
*/ |
||||
popts->wrlvl_override = 1; |
||||
popts->wrlvl_sample = 0xf; |
||||
|
||||
/*
|
||||
* Rtt and Rtt_WR override |
||||
*/ |
||||
popts->rtt_override = 0; |
||||
|
||||
/* Enable ZQ calibration */ |
||||
popts->zq_en = 1; |
||||
|
||||
popts->ddr_cdr1 = DDR_CDR1_DHC_EN | DDR_CDR1_ODT(DDR_CDR_ODT_80ohm); |
||||
popts->ddr_cdr2 = DDR_CDR2_ODT(DDR_CDR_ODT_80ohm) | |
||||
DDR_CDR2_VREF_OVRD(70); /* Vref = 70% */ |
||||
} |
||||
|
||||
/* DDR model number: MT40A512M8HX-093E */ |
||||
#ifdef CONFIG_SYS_DDR_RAW_TIMING |
||||
dimm_params_t ddr_raw_timing = { |
||||
.n_ranks = 1, |
||||
.rank_density = 2147483648u, |
||||
.capacity = 2147483648u, |
||||
.primary_sdram_width = 32, |
||||
.ec_sdram_width = 0, |
||||
.registered_dimm = 0, |
||||
.mirrored_dimm = 0, |
||||
.n_row_addr = 15, |
||||
.n_col_addr = 10, |
||||
.bank_addr_bits = 0, |
||||
.bank_group_bits = 2, |
||||
.edc_config = 0, |
||||
.burst_lengths_bitmask = 0x0c, |
||||
|
||||
.tckmin_x_ps = 938, |
||||
.tckmax_ps = 1500, |
||||
.caslat_x = 0x000DFA00, |
||||
.taa_ps = 13500, |
||||
.trcd_ps = 13500, |
||||
.trp_ps = 13500, |
||||
.tras_ps = 33000, |
||||
.trc_ps = 46500, |
||||
.trfc1_ps = 260000, |
||||
.trfc2_ps = 160000, |
||||
.trfc4_ps = 110000, |
||||
.tfaw_ps = 21000, |
||||
.trrds_ps = 3700, |
||||
.trrdl_ps = 5300, |
||||
.tccdl_ps = 5355, |
||||
.refresh_rate_ps = 7800000, |
||||
.dq_mapping[0] = 0x0, |
||||
.dq_mapping[1] = 0x0, |
||||
.dq_mapping[2] = 0x0, |
||||
.dq_mapping[3] = 0x0, |
||||
.dq_mapping[4] = 0x0, |
||||
.dq_mapping[5] = 0x0, |
||||
.dq_mapping[6] = 0x0, |
||||
.dq_mapping[7] = 0x0, |
||||
.dq_mapping[8] = 0x0, |
||||
.dq_mapping[9] = 0x0, |
||||
.dq_mapping[10] = 0x0, |
||||
.dq_mapping[11] = 0x0, |
||||
.dq_mapping[12] = 0x0, |
||||
.dq_mapping[13] = 0x0, |
||||
.dq_mapping[14] = 0x0, |
||||
.dq_mapping[15] = 0x0, |
||||
.dq_mapping[16] = 0x0, |
||||
.dq_mapping[17] = 0x0, |
||||
.dq_mapping_ors = 0, |
||||
}; |
||||
|
||||
int fsl_ddr_get_dimm_params(dimm_params_t *pdimm, |
||||
unsigned int controller_number, |
||||
unsigned int dimm_number) |
||||
{ |
||||
static const char dimm_model[] = "Fixed DDR on board"; |
||||
|
||||
if (((controller_number == 0) && (dimm_number == 0)) || |
||||
((controller_number == 1) && (dimm_number == 0))) { |
||||
memcpy(pdimm, &ddr_raw_timing, sizeof(dimm_params_t)); |
||||
memset(pdimm->mpart, 0, sizeof(pdimm->mpart)); |
||||
memcpy(pdimm->mpart, dimm_model, sizeof(dimm_model) - 1); |
||||
} |
||||
|
||||
return 0; |
||||
} |
||||
#endif |
||||
|
||||
phys_size_t initdram(int board_type) |
||||
{ |
||||
phys_size_t dram_size; |
||||
|
||||
#if defined(CONFIG_SPL_BUILD) || !defined(CONFIG_SPL) |
||||
puts("Initializing DDR....\n"); |
||||
dram_size = fsl_ddr_sdram(); |
||||
#else |
||||
dram_size = fsl_ddr_sdram_size(); |
||||
#endif |
||||
#ifdef CONFIG_FSL_DEEP_SLEEP |
||||
fsl_dp_ddr_restore(); |
||||
#endif |
||||
|
||||
return dram_size; |
||||
} |
||||
|
||||
void dram_init_banksize(void) |
||||
{ |
||||
gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE; |
||||
gd->bd->bi_dram[0].size = gd->ram_size; |
||||
} |
@ -0,0 +1,45 @@ |
||||
/*
|
||||
* Copyright 2015 Freescale Semiconductor, Inc. |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#ifndef __DDR_H__ |
||||
#define __DDR_H__ |
||||
struct board_specific_parameters { |
||||
u32 n_ranks; |
||||
u32 datarate_mhz_high; |
||||
u32 rank_gb; |
||||
u32 clk_adjust; |
||||
u32 wrlvl_start; |
||||
u32 wrlvl_ctl_2; |
||||
u32 wrlvl_ctl_3; |
||||
u32 cpo_override; |
||||
u32 write_data_delay; |
||||
u32 force_2t; |
||||
}; |
||||
|
||||
/*
|
||||
* These tables contain all valid speeds we want to override with board |
||||
* specific parameters. datarate_mhz_high values need to be in ascending order |
||||
* for each n_ranks group. |
||||
*/ |
||||
static const struct board_specific_parameters udimm0[] = { |
||||
/*
|
||||
* memory controller 0 |
||||
* num| hi| rank| clk| wrlvl | wrlvl | wrlvl | cpo |wrdata|2T |
||||
* ranks| mhz| GB |adjst| start | ctl2 | ctl3 | |delay | |
||||
*/ |
||||
#ifdef CONFIG_SYS_FSL_DDR4 |
||||
{1, 1666, 0, 6, 7, 0x07090800, 0x00000000,}, |
||||
{1, 1900, 0, 6, 7, 0x07090800, 0x00000000,}, |
||||
{1, 2200, 0, 6, 7, 0x07090800, 0x00000000,}, |
||||
#endif |
||||
{} |
||||
}; |
||||
|
||||
static const struct board_specific_parameters *udimms[] = { |
||||
udimm0, |
||||
}; |
||||
|
||||
#endif |
@ -0,0 +1,77 @@ |
||||
/*
|
||||
* Copyright 2015 Freescale Semiconductor, Inc. |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
#include <common.h> |
||||
#include <asm/io.h> |
||||
#include <netdev.h> |
||||
#include <fm_eth.h> |
||||
#include <fsl_dtsec.h> |
||||
#include <fsl_mdio.h> |
||||
#include <malloc.h> |
||||
|
||||
#include "../common/fman.h" |
||||
|
||||
int board_eth_init(bd_t *bis) |
||||
{ |
||||
#ifdef CONFIG_FMAN_ENET |
||||
int i; |
||||
struct memac_mdio_info dtsec_mdio_info; |
||||
struct memac_mdio_info tgec_mdio_info; |
||||
struct mii_dev *dev; |
||||
u32 srds_s1; |
||||
struct ccsr_gur *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR); |
||||
|
||||
srds_s1 = in_be32(&gur->rcwsr[4]) & |
||||
FSL_CHASSIS2_RCWSR4_SRDS1_PRTCL_MASK; |
||||
srds_s1 >>= FSL_CHASSIS2_RCWSR4_SRDS1_PRTCL_SHIFT; |
||||
|
||||
dtsec_mdio_info.regs = |
||||
(struct memac_mdio_controller *)CONFIG_SYS_FM1_DTSEC_MDIO_ADDR; |
||||
|
||||
dtsec_mdio_info.name = DEFAULT_FM_MDIO_NAME; |
||||
|
||||
/* Register the 1G MDIO bus */ |
||||
fm_memac_mdio_init(bis, &dtsec_mdio_info); |
||||
|
||||
tgec_mdio_info.regs = |
||||
(struct memac_mdio_controller *)CONFIG_SYS_FM1_TGEC_MDIO_ADDR; |
||||
tgec_mdio_info.name = DEFAULT_FM_TGEC_MDIO_NAME; |
||||
|
||||
/* Register the 10G MDIO bus */ |
||||
fm_memac_mdio_init(bis, &tgec_mdio_info); |
||||
|
||||
/* Set the two on-board RGMII PHY address */ |
||||
fm_info_set_phy_address(FM1_DTSEC3, RGMII_PHY1_ADDR); |
||||
fm_info_set_phy_address(FM1_DTSEC4, RGMII_PHY2_ADDR); |
||||
|
||||
/* QSGMII on lane B, MAC 1/2/5/6 */ |
||||
fm_info_set_phy_address(FM1_DTSEC1, QSGMII_PORT1_PHY_ADDR); |
||||
fm_info_set_phy_address(FM1_DTSEC2, QSGMII_PORT2_PHY_ADDR); |
||||
fm_info_set_phy_address(FM1_DTSEC5, QSGMII_PORT3_PHY_ADDR); |
||||
fm_info_set_phy_address(FM1_DTSEC6, QSGMII_PORT4_PHY_ADDR); |
||||
|
||||
switch (srds_s1) { |
||||
case 0x1455: |
||||
break; |
||||
default: |
||||
printf("Invalid SerDes protocol 0x%x for LS1043ARDB\n", |
||||
srds_s1); |
||||
break; |
||||
} |
||||
|
||||
dev = miiphy_get_dev_by_name(DEFAULT_FM_MDIO_NAME); |
||||
for (i = FM1_DTSEC1; i < FM1_DTSEC1 + CONFIG_SYS_NUM_FM1_DTSEC; i++) |
||||
fm_info_set_mdio(i, dev); |
||||
|
||||
/* XFI on lane A, MAC 9 */ |
||||
fm_info_set_phy_address(FM1_10GEC1, FM1_10GEC1_PHY_ADDR); |
||||
dev = miiphy_get_dev_by_name(DEFAULT_FM_TGEC_MDIO_NAME); |
||||
fm_info_set_mdio(FM1_10GEC1, dev); |
||||
|
||||
cpu_eth_init(bis); |
||||
#endif |
||||
|
||||
return pci_eth_init(bis); |
||||
} |
@ -0,0 +1,142 @@ |
||||
/*
|
||||
* Copyright 2015 Freescale Semiconductor, Inc. |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#include <common.h> |
||||
#include <i2c.h> |
||||
#include <asm/io.h> |
||||
#include <asm/arch/clock.h> |
||||
#include <asm/arch/fsl_serdes.h> |
||||
#include <asm/arch/soc.h> |
||||
#include <hwconfig.h> |
||||
#include <ahci.h> |
||||
#include <mmc.h> |
||||
#include <scsi.h> |
||||
#include <fm_eth.h> |
||||
#include <fsl_csu.h> |
||||
#include <fsl_esdhc.h> |
||||
#include <fsl_ifc.h> |
||||
#include "cpld.h" |
||||
|
||||
DECLARE_GLOBAL_DATA_PTR; |
||||
|
||||
int checkboard(void) |
||||
{ |
||||
static const char *freq[3] = {"100.00MHZ", "156.25MHZ"}; |
||||
#ifndef CONFIG_SD_BOOT |
||||
u8 cfg_rcw_src1, cfg_rcw_src2; |
||||
u32 cfg_rcw_src; |
||||
#endif |
||||
u32 sd1refclk_sel; |
||||
|
||||
printf("Board: LS1043ARDB, boot from "); |
||||
|
||||
#ifdef CONFIG_SD_BOOT |
||||
puts("SD\n"); |
||||
#else |
||||
cfg_rcw_src1 = CPLD_READ(cfg_rcw_src1); |
||||
cfg_rcw_src2 = CPLD_READ(cfg_rcw_src2); |
||||
cpld_rev_bit(&cfg_rcw_src1); |
||||
cfg_rcw_src = cfg_rcw_src1; |
||||
cfg_rcw_src = (cfg_rcw_src << 1) | cfg_rcw_src2; |
||||
|
||||
if (cfg_rcw_src == 0x25) |
||||
printf("vBank %d\n", CPLD_READ(vbank)); |
||||
else if (cfg_rcw_src == 0x106) |
||||
puts("NAND\n"); |
||||
else |
||||
printf("Invalid setting of SW4\n"); |
||||
#endif |
||||
|
||||
printf("CPLD: V%x.%x\nPCBA: V%x.0\n", CPLD_READ(cpld_ver), |
||||
CPLD_READ(cpld_ver_sub), CPLD_READ(pcba_ver)); |
||||
|
||||
puts("SERDES Reference Clocks:\n"); |
||||
sd1refclk_sel = CPLD_READ(sd1refclk_sel); |
||||
printf("SD1_CLK1 = %s, SD1_CLK2 = %s\n", freq[sd1refclk_sel], freq[0]); |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
int dram_init(void) |
||||
{ |
||||
gd->ram_size = initdram(0); |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
int board_early_init_f(void) |
||||
{ |
||||
fsl_lsch2_early_init_f(); |
||||
return 0; |
||||
} |
||||
|
||||
int board_init(void) |
||||
{ |
||||
struct ccsr_cci400 *cci = (struct ccsr_cci400 *)CONFIG_SYS_CCI400_ADDR; |
||||
|
||||
/*
|
||||
* Set CCI-400 control override register to enable barrier |
||||
* transaction |
||||
*/ |
||||
out_le32(&cci->ctrl_ord, CCI400_CTRLORD_EN_BARRIER); |
||||
|
||||
#ifdef CONFIG_FSL_IFC |
||||
init_final_memctl_regs(); |
||||
#endif |
||||
|
||||
#ifdef CONFIG_ENV_IS_NOWHERE |
||||
gd->env_addr = (ulong)&default_environment[0]; |
||||
#endif |
||||
|
||||
#ifdef CONFIG_LAYERSCAPE_NS_ACCESS |
||||
enable_layerscape_ns_access(); |
||||
#endif |
||||
|
||||
return 0; |
||||
} |
||||
|
||||
int config_board_mux(void) |
||||
{ |
||||
return 0; |
||||
} |
||||
|
||||
#if defined(CONFIG_MISC_INIT_R) |
||||
int misc_init_r(void) |
||||
{ |
||||
config_board_mux(); |
||||
|
||||
return 0; |
||||
} |
||||
#endif |
||||
|
||||
int ft_board_setup(void *blob, bd_t *bd) |
||||
{ |
||||
ft_cpu_setup(blob, bd); |
||||
|
||||
#ifdef CONFIG_SYS_DPAA_FMAN |
||||
fdt_fixup_fman_ethernet(blob); |
||||
#endif |
||||
return 0; |
||||
} |
||||
|
||||
u8 flash_read8(void *addr) |
||||
{ |
||||
return __raw_readb(addr + 1); |
||||
} |
||||
|
||||
void flash_write16(u16 val, void *addr) |
||||
{ |
||||
u16 shftval = (((val >> 8) & 0xff) | ((val << 8) & 0xff00)); |
||||
|
||||
__raw_writew(shftval, addr); |
||||
} |
||||
|
||||
u16 flash_read16(void *addr) |
||||
{ |
||||
u16 val = __raw_readw(addr); |
||||
|
||||
return (((val) >> 8) & 0x00ff) | (((val) << 8) & 0xff00); |
||||
} |
@ -0,0 +1,14 @@ |
||||
#Configure Scratch register |
||||
09570600 00000000 |
||||
09570604 10000000 |
||||
#Alt base register |
||||
09570158 00001000 |
||||
#Disable CCI barrier tranaction |
||||
09570178 0000e010 |
||||
09180000 00000008 |
||||
#USB PHY frequency sel |
||||
09570418 0000009e |
||||
0957041c 0000009e |
||||
09570420 0000009e |
||||
#flush PBI data |
||||
096100c0 000fffff |
@ -0,0 +1,7 @@ |
||||
#PBL preamble and RCW header |
||||
aa55aa55 01ee0100 |
||||
# serdes protocol |
||||
0810000f 0c000000 00000000 00000000 |
||||
14550002 80004012 e0106000 61002000 |
||||
00000000 00000000 00000000 00038800 |
||||
00000000 00001100 00000096 00000001 |
@ -0,0 +1,7 @@ |
||||
#PBL preamble and RCW header |
||||
aa55aa55 01ee0100 |
||||
# RCW |
||||
0810000f 0c000000 00000000 00000000 |
||||
14550002 80004012 60040000 61002000 |
||||
00000000 00000000 00000000 00038800 |
||||
00000000 00001100 00000096 00000001 |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue