Merge branch 'master' of git://git.denx.de/u-boot-fsl-qoriq

This commit is contained in:
Tom Rini 2016-04-06 14:17:22 -04:00
commit 43d3fb5c06
43 changed files with 369 additions and 313 deletions

View File

@ -25,10 +25,6 @@ ifneq ($(CONFIG_LS2080A),)
obj-$(CONFIG_SYS_HAS_SERDES) += ls2080a_serdes.o obj-$(CONFIG_SYS_HAS_SERDES) += ls2080a_serdes.o
endif endif
ifneq ($(CONFIG_LS2085A),)
obj-$(CONFIG_SYS_HAS_SERDES) += ls2080a_serdes.o
endif
ifneq ($(CONFIG_LS1043A),) ifneq ($(CONFIG_LS1043A),)
obj-$(CONFIG_SYS_HAS_SERDES) += ls1043a_serdes.o obj-$(CONFIG_SYS_HAS_SERDES) += ls1043a_serdes.o
endif endif

View File

@ -538,12 +538,12 @@ int print_cpuinfo(void)
struct sys_info sysinfo; struct sys_info sysinfo;
char buf[32]; char buf[32];
unsigned int i, core; unsigned int i, core;
u32 type, rcw; u32 type, rcw, svr = gur_in32(&gur->svr);
puts("SoC: "); puts("SoC: ");
cpu_name(buf); cpu_name(buf);
printf(" %s (0x%x)\n", buf, gur_in32(&gur->svr)); printf(" %s (0x%x)\n", buf, svr);
memset((u8 *)buf, 0x00, ARRAY_SIZE(buf)); memset((u8 *)buf, 0x00, ARRAY_SIZE(buf));
get_sys_info(&sysinfo); get_sys_info(&sysinfo);
puts("Clock Configuration:"); puts("Clock Configuration:");
@ -564,7 +564,10 @@ int print_cpuinfo(void)
printf(" FMAN: %-4s MHz", strmhz(buf, sysinfo.freq_fman[0])); printf(" FMAN: %-4s MHz", strmhz(buf, sysinfo.freq_fman[0]));
#endif #endif
#ifdef CONFIG_SYS_FSL_HAS_DP_DDR #ifdef CONFIG_SYS_FSL_HAS_DP_DDR
printf(" DP-DDR: %-4s MT/s", strmhz(buf, sysinfo.freq_ddrbus2)); if (soc_has_dp_ddr()) {
printf(" DP-DDR: %-4s MT/s",
strmhz(buf, sysinfo.freq_ddrbus2));
}
#endif #endif
puts("\n"); puts("\n");

View File

@ -97,9 +97,13 @@ void get_sys_info(struct sys_info *sys_info)
FSL_CHASSIS3_RCWSR0_MEM_PLL_RAT_SHIFT) & FSL_CHASSIS3_RCWSR0_MEM_PLL_RAT_SHIFT) &
FSL_CHASSIS3_RCWSR0_MEM_PLL_RAT_MASK; FSL_CHASSIS3_RCWSR0_MEM_PLL_RAT_MASK;
#ifdef CONFIG_SYS_FSL_HAS_DP_DDR #ifdef CONFIG_SYS_FSL_HAS_DP_DDR
sys_info->freq_ddrbus2 *= (gur_in32(&gur->rcwsr[0]) >> if (soc_has_dp_ddr()) {
sys_info->freq_ddrbus2 *= (gur_in32(&gur->rcwsr[0]) >>
FSL_CHASSIS3_RCWSR0_MEM2_PLL_RAT_SHIFT) & FSL_CHASSIS3_RCWSR0_MEM2_PLL_RAT_SHIFT) &
FSL_CHASSIS3_RCWSR0_MEM2_PLL_RAT_MASK; FSL_CHASSIS3_RCWSR0_MEM2_PLL_RAT_MASK;
} else {
sys_info->freq_ddrbus2 = 0;
}
#endif #endif
for (i = 0; i < CONFIG_SYS_FSL_NUM_CC_PLLS; i++) { for (i = 0; i < CONFIG_SYS_FSL_NUM_CC_PLLS; i++) {

View File

@ -20,7 +20,7 @@ ENTRY(lowlevel_init)
#ifdef CONFIG_FSL_LSCH3 #ifdef CONFIG_FSL_LSCH3
/* Set Wuo bit for RN-I 20 */ /* Set Wuo bit for RN-I 20 */
#if defined(CONFIG_LS2085A) || defined (CONFIG_LS2080A) #ifdef CONFIG_LS2080A
ldr x0, =CCI_AUX_CONTROL_BASE(20) ldr x0, =CCI_AUX_CONTROL_BASE(20)
ldr x1, =0x00000010 ldr x1, =0x00000010
bl ccn504_set_aux bl ccn504_set_aux

View File

@ -18,7 +18,31 @@
DECLARE_GLOBAL_DATA_PTR; DECLARE_GLOBAL_DATA_PTR;
#if defined(CONFIG_LS2080A) || defined(CONFIG_LS2085A) bool soc_has_dp_ddr(void)
{
struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR);
u32 svr = gur_in32(&gur->svr);
/* LS2085A has DP_DDR */
if (SVR_SOC_VER(svr) == SVR_LS2085)
return true;
return false;
}
bool soc_has_aiop(void)
{
struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR);
u32 svr = gur_in32(&gur->svr);
/* LS2085A has AIOP */
if (SVR_SOC_VER(svr) == SVR_LS2085)
return true;
return false;
}
#ifdef CONFIG_LS2080A
/* /*
* This erratum requires setting a value to eddrtqcr1 to * This erratum requires setting a value to eddrtqcr1 to
* optimal the DDR performance. * optimal the DDR performance.

View File

@ -46,7 +46,7 @@ void board_init_f(ulong dummy)
{ {
/* Clear global data */ /* Clear global data */
memset((void *)gd, 0, sizeof(gd_t)); memset((void *)gd, 0, sizeof(gd_t));
#if defined(CONFIG_LS2080A) || defined(CONFIG_LS2085A) #ifdef CONFIG_LS2080A
arch_cpu_init(); arch_cpu_init();
#endif #endif
#ifdef CONFIG_FSL_IFC #ifdef CONFIG_FSL_IFC
@ -54,7 +54,7 @@ void board_init_f(ulong dummy)
#endif #endif
board_early_init_f(); board_early_init_f();
timer_init(); timer_init();
#if defined(CONFIG_LS2080A) || defined(CONFIG_LS2085A) #ifdef CONFIG_LS2080A
env_init(); env_init();
#endif #endif
get_clocks(); get_clocks();

View File

@ -23,16 +23,11 @@
*/ */
#define CONFIG_SYS_MEM_RESERVE_SECURE (2048 * 1024) /* 2MB */ #define CONFIG_SYS_MEM_RESERVE_SECURE (2048 * 1024) /* 2MB */
#if defined(CONFIG_LS2080A) || defined(CONFIG_LS2085A) #ifdef CONFIG_LS2080A
#define CONFIG_MAX_CPUS 16 #define CONFIG_MAX_CPUS 16
#define CONFIG_SYS_FSL_IFC_BANK_COUNT 8 #define CONFIG_SYS_FSL_IFC_BANK_COUNT 8
#ifdef CONFIG_LS2080A
#define CONFIG_NUM_DDR_CONTROLLERS 2
#endif
#ifdef CONFIG_LS2085A
#define CONFIG_NUM_DDR_CONTROLLERS 3 #define CONFIG_NUM_DDR_CONTROLLERS 3
#define CONFIG_SYS_FSL_HAS_DP_DDR #define CONFIG_SYS_FSL_HAS_DP_DDR /* Runtime check to confirm */
#endif
#define CONFIG_SYS_FSL_CLUSTER_CLOCKS { 1, 1, 4, 4 } #define CONFIG_SYS_FSL_CLUSTER_CLOCKS { 1, 1, 4, 4 }
#define SRDS_MAX_LANES 8 #define SRDS_MAX_LANES 8
#define CONFIG_SYS_FSL_SRDS_1 #define CONFIG_SYS_FSL_SRDS_1

View File

@ -157,9 +157,11 @@ static const struct sys_mmu_table early_mmu_table[] = {
{ CONFIG_SYS_FSL_IFC_BASE, CONFIG_SYS_FSL_IFC_BASE, { CONFIG_SYS_FSL_IFC_BASE, CONFIG_SYS_FSL_IFC_BASE,
CONFIG_SYS_FSL_IFC_SIZE, MT_DEVICE_NGNRNE, PTE_BLOCK_NON_SHARE }, CONFIG_SYS_FSL_IFC_SIZE, MT_DEVICE_NGNRNE, PTE_BLOCK_NON_SHARE },
{ CONFIG_SYS_FSL_DRAM_BASE1, CONFIG_SYS_FSL_DRAM_BASE1, { CONFIG_SYS_FSL_DRAM_BASE1, CONFIG_SYS_FSL_DRAM_BASE1,
CONFIG_SYS_FSL_DRAM_SIZE1, MT_NORMAL, PTE_BLOCK_OUTER_SHARE }, CONFIG_SYS_FSL_DRAM_SIZE1, MT_NORMAL,
PTE_BLOCK_OUTER_SHARE | PTE_BLOCK_NS },
{ CONFIG_SYS_FSL_DRAM_BASE2, CONFIG_SYS_FSL_DRAM_BASE2, { CONFIG_SYS_FSL_DRAM_BASE2, CONFIG_SYS_FSL_DRAM_BASE2,
CONFIG_SYS_FSL_DRAM_SIZE2, MT_NORMAL, PTE_BLOCK_OUTER_SHARE }, CONFIG_SYS_FSL_DRAM_SIZE2, MT_NORMAL,
PTE_BLOCK_OUTER_SHARE | PTE_BLOCK_NS },
#endif #endif
}; };
@ -204,7 +206,7 @@ static const struct sys_mmu_table final_mmu_table[] = {
{ CONFIG_SYS_PCIE3_PHYS_ADDR, CONFIG_SYS_PCIE3_PHYS_ADDR, { CONFIG_SYS_PCIE3_PHYS_ADDR, CONFIG_SYS_PCIE3_PHYS_ADDR,
CONFIG_SYS_PCIE3_PHYS_SIZE, MT_DEVICE_NGNRNE, CONFIG_SYS_PCIE3_PHYS_SIZE, MT_DEVICE_NGNRNE,
PTE_BLOCK_NON_SHARE | PTE_BLOCK_PXN | PTE_BLOCK_UXN }, PTE_BLOCK_NON_SHARE | PTE_BLOCK_PXN | PTE_BLOCK_UXN },
#if defined(CONFIG_LS2080A) || defined(CONFIG_LS2085A) #ifdef CONFIG_LS2080A
{ CONFIG_SYS_PCIE4_PHYS_ADDR, CONFIG_SYS_PCIE4_PHYS_ADDR, { CONFIG_SYS_PCIE4_PHYS_ADDR, CONFIG_SYS_PCIE4_PHYS_ADDR,
CONFIG_SYS_PCIE4_PHYS_SIZE, MT_DEVICE_NGNRNE, CONFIG_SYS_PCIE4_PHYS_SIZE, MT_DEVICE_NGNRNE,
PTE_BLOCK_NON_SHARE | PTE_BLOCK_PXN | PTE_BLOCK_UXN }, PTE_BLOCK_NON_SHARE | PTE_BLOCK_PXN | PTE_BLOCK_UXN },
@ -245,7 +247,8 @@ static const struct sys_mmu_table final_mmu_table[] = {
CONFIG_SYS_FSL_QBMAN_SIZE, MT_DEVICE_NGNRNE, CONFIG_SYS_FSL_QBMAN_SIZE, MT_DEVICE_NGNRNE,
PTE_BLOCK_NON_SHARE | PTE_BLOCK_PXN | PTE_BLOCK_UXN }, PTE_BLOCK_NON_SHARE | PTE_BLOCK_PXN | PTE_BLOCK_UXN },
{ CONFIG_SYS_FSL_DRAM_BASE2, CONFIG_SYS_FSL_DRAM_BASE2, { CONFIG_SYS_FSL_DRAM_BASE2, CONFIG_SYS_FSL_DRAM_BASE2,
CONFIG_SYS_FSL_DRAM_SIZE2, MT_NORMAL, PTE_BLOCK_OUTER_SHARE }, CONFIG_SYS_FSL_DRAM_SIZE2, MT_NORMAL,
PTE_BLOCK_OUTER_SHARE | PTE_BLOCK_NS },
{ CONFIG_SYS_PCIE1_PHYS_ADDR, CONFIG_SYS_PCIE1_PHYS_ADDR, { CONFIG_SYS_PCIE1_PHYS_ADDR, CONFIG_SYS_PCIE1_PHYS_ADDR,
CONFIG_SYS_PCIE1_PHYS_SIZE, MT_DEVICE_NGNRNE, CONFIG_SYS_PCIE1_PHYS_SIZE, MT_DEVICE_NGNRNE,
PTE_BLOCK_NON_SHARE | PTE_BLOCK_PXN | PTE_BLOCK_UXN }, PTE_BLOCK_NON_SHARE | PTE_BLOCK_PXN | PTE_BLOCK_UXN },
@ -256,7 +259,8 @@ static const struct sys_mmu_table final_mmu_table[] = {
CONFIG_SYS_PCIE3_PHYS_SIZE, MT_DEVICE_NGNRNE, CONFIG_SYS_PCIE3_PHYS_SIZE, MT_DEVICE_NGNRNE,
PTE_BLOCK_NON_SHARE | PTE_BLOCK_PXN | PTE_BLOCK_UXN }, PTE_BLOCK_NON_SHARE | PTE_BLOCK_PXN | PTE_BLOCK_UXN },
{ CONFIG_SYS_FSL_DRAM_BASE3, CONFIG_SYS_FSL_DRAM_BASE3, { CONFIG_SYS_FSL_DRAM_BASE3, CONFIG_SYS_FSL_DRAM_BASE3,
CONFIG_SYS_FSL_DRAM_SIZE3, MT_NORMAL, PTE_BLOCK_OUTER_SHARE }, CONFIG_SYS_FSL_DRAM_SIZE3, MT_NORMAL,
PTE_BLOCK_OUTER_SHARE | PTE_BLOCK_NS },
#endif #endif
}; };
#endif #endif

View File

@ -9,7 +9,7 @@
#include <config.h> #include <config.h>
#if defined(CONFIG_LS2080A) || defined(CONFIG_LS2085A) #ifdef CONFIG_LS2080A
enum srds_prtcl { enum srds_prtcl {
NONE = 0, NONE = 0,
PCIE1, PCIE1,

View File

@ -94,4 +94,7 @@ void cpu_name(char *name);
#ifdef CONFIG_SYS_FSL_ERRATUM_A009635 #ifdef CONFIG_SYS_FSL_ERRATUM_A009635
void erratum_a009635(void); void erratum_a009635(void);
#endif #endif
bool soc_has_dp_ddr(void);
bool soc_has_aiop(void);
#endif /* _ASM_ARMV8_FSL_LAYERSCAPE_SOC_H_ */ #endif /* _ASM_ARMV8_FSL_LAYERSCAPE_SOC_H_ */

View File

@ -82,12 +82,12 @@ enum csu_cslx_ind {
CSU_CSLX_FTM5, CSU_CSLX_FTM5,
CSU_CSLX_FTM8, CSU_CSLX_FTM8,
CSU_CSLX_FTM7, CSU_CSLX_FTM7,
CSU_CSLX_COP_DCSR,
CSU_CSLX_EPU, CSU_CSLX_EPU,
CSU_CSLX_GDI, CSU_CSLX_COP_DCSR,
CSU_CSLX_DDI, CSU_CSLX_DDI,
CSU_CSLX_GDI,
CSU_CSLX_RESERVED1, CSU_CSLX_RESERVED1,
CSU_CSLX_USB3_PHY = 117, CSU_CSLX_USB3_PHY = 116,
CSU_CSLX_RESERVED2, CSU_CSLX_RESERVED2,
CSU_CSLX_MAX, CSU_CSLX_MAX,
}; };

View File

@ -44,15 +44,14 @@
#endif #endif
#if defined(CONFIG_LS1043A) || defined(CONFIG_LS2080A) ||\ #if defined(CONFIG_LS1043A) || defined(CONFIG_LS2080A)
defined(CONFIG_LS2085A)
/* For LS1043 (ARMv8), ESBC image Address in Header is 64 bit /* For LS1043 (ARMv8), ESBC image Address in Header is 64 bit
* Similiarly for LS2080 and LS2085 * Similiarly for LS2080
*/ */
#define CONFIG_ESBC_ADDR_64BIT #define CONFIG_ESBC_ADDR_64BIT
#endif #endif
#if defined(CONFIG_LS2080A) || defined(CONFIG_LS2085A) #ifdef CONFIG_LS2080A
#define CONFIG_EXTRA_ENV \ #define CONFIG_EXTRA_ENV \
"setenv fdt_high 0xa0000000;" \ "setenv fdt_high 0xa0000000;" \
"setenv initrd_high 0xcfffffff;" \ "setenv initrd_high 0xcfffffff;" \
@ -66,12 +65,11 @@
/* Copying Bootscript and Header to DDR from NOR for LS2 and for rest, from /* Copying Bootscript and Header to DDR from NOR for LS2 and for rest, from
* Non-XIP Memory (Nand/SD)*/ * Non-XIP Memory (Nand/SD)*/
#if defined(CONFIG_SYS_RAMBOOT) || defined(CONFIG_LS2080A) ||\ #if defined(CONFIG_SYS_RAMBOOT) || defined(CONFIG_LS2080A)
defined(CONFIG_LS2085A)
#define CONFIG_BOOTSCRIPT_COPY_RAM #define CONFIG_BOOTSCRIPT_COPY_RAM
#endif #endif
/* The address needs to be modified according to NOR and DDR memory map */ /* The address needs to be modified according to NOR and DDR memory map */
#if defined(CONFIG_LS2080A) || defined(CONFIG_LS2085A) #ifdef CONFIG_LS2080A
#define CONFIG_BS_HDR_ADDR_FLASH 0x583920000 #define CONFIG_BS_HDR_ADDR_FLASH 0x583920000
#define CONFIG_BS_ADDR_FLASH 0x583900000 #define CONFIG_BS_ADDR_FLASH 0x583900000
#define CONFIG_BS_HDR_ADDR_RAM 0xa3920000 #define CONFIG_BS_HDR_ADDR_RAM 0xa3920000

View File

@ -176,9 +176,9 @@ void board_ft_fman_fixup_port(void *fdt, char *compat, phys_addr_t addr,
} else if (fm_info_get_enet_if(port) == } else if (fm_info_get_enet_if(port) ==
PHY_INTERFACE_MODE_SGMII_2500) { PHY_INTERFACE_MODE_SGMII_2500) {
/* 2.5G SGMII interface */ /* 2.5G SGMII interface */
f_link.phy_id = port; f_link.phy_id = cpu_to_fdt32(port);
f_link.duplex = 1; f_link.duplex = cpu_to_fdt32(1);
f_link.link_speed = 1000; f_link.link_speed = cpu_to_fdt32(1000);
f_link.pause = 0; f_link.pause = 0;
f_link.asym_pause = 0; f_link.asym_pause = 0;
/* no PHY for 2.5G SGMII */ /* no PHY for 2.5G SGMII */
@ -241,9 +241,9 @@ void board_ft_fman_fixup_port(void *fdt, char *compat, phys_addr_t addr,
} else if (fm_info_get_enet_if(port) == PHY_INTERFACE_MODE_XGMII && } else if (fm_info_get_enet_if(port) == PHY_INTERFACE_MODE_XGMII &&
port == FM1_10GEC1) { port == FM1_10GEC1) {
/* XFI interface */ /* XFI interface */
f_link.phy_id = port; f_link.phy_id = cpu_to_fdt32(port);
f_link.duplex = 1; f_link.duplex = cpu_to_fdt32(1);
f_link.link_speed = 10000; f_link.link_speed = cpu_to_fdt32(10000);
f_link.pause = 0; f_link.pause = 0;
f_link.asym_pause = 0; f_link.asym_pause = 0;
/* no PHY for XFI */ /* no PHY for XFI */

View File

@ -6,5 +6,3 @@ F: include/configs/ls2080a_emu.h
F: configs/ls2080a_emu_defconfig F: configs/ls2080a_emu_defconfig
F: include/configs/ls2080a_simu.h F: include/configs/ls2080a_simu.h
F: configs/ls2080a_simu_defconfig F: configs/ls2080a_simu_defconfig
F: configs/ls2085a_emu_defconfig
F: configs/ls2085a_simu_defconfig

View File

@ -7,6 +7,7 @@
#include <common.h> #include <common.h>
#include <fsl_ddr_sdram.h> #include <fsl_ddr_sdram.h>
#include <fsl_ddr_dimm_params.h> #include <fsl_ddr_dimm_params.h>
#include <asm/arch/soc.h>
#include "ddr.h" #include "ddr.h"
DECLARE_GLOBAL_DATA_PTR; DECLARE_GLOBAL_DATA_PTR;
@ -201,22 +202,24 @@ void dram_init_banksize(void)
} }
#ifdef CONFIG_SYS_DP_DDR_BASE_PHY #ifdef CONFIG_SYS_DP_DDR_BASE_PHY
/* initialize DP-DDR here */ if (soc_has_dp_ddr()) {
puts("DP-DDR: "); /* initialize DP-DDR here */
/* puts("DP-DDR: ");
* DDR controller use 0 as the base address for binding. /*
* It is mapped to CONFIG_SYS_DP_DDR_BASE for core to access. * DDR controller use 0 as the base address for binding.
*/ * It is mapped to CONFIG_SYS_DP_DDR_BASE for core to access.
dp_ddr_size = fsl_other_ddr_sdram(CONFIG_SYS_DP_DDR_BASE_PHY, */
dp_ddr_size = fsl_other_ddr_sdram(CONFIG_SYS_DP_DDR_BASE_PHY,
CONFIG_DP_DDR_CTRL, CONFIG_DP_DDR_CTRL,
CONFIG_DP_DDR_NUM_CTRLS, CONFIG_DP_DDR_NUM_CTRLS,
CONFIG_DP_DDR_DIMM_SLOTS_PER_CTLR, CONFIG_DP_DDR_DIMM_SLOTS_PER_CTLR,
NULL, NULL, NULL); NULL, NULL, NULL);
if (dp_ddr_size) { if (dp_ddr_size) {
gd->bd->bi_dram[2].start = CONFIG_SYS_DP_DDR_BASE; gd->bd->bi_dram[2].start = CONFIG_SYS_DP_DDR_BASE;
gd->bd->bi_dram[2].size = dp_ddr_size; gd->bd->bi_dram[2].size = dp_ddr_size;
} else { } else {
puts("Not detected"); puts("Not detected");
}
} }
#endif #endif
} }

View File

@ -42,7 +42,7 @@ void detail_board_ddr_info(void)
print_size(gd->bd->bi_dram[0].size + gd->bd->bi_dram[1].size, ""); print_size(gd->bd->bi_dram[0].size + gd->bd->bi_dram[1].size, "");
print_ddr_info(0); print_ddr_info(0);
#ifdef CONFIG_SYS_FSL_HAS_DP_DDR #ifdef CONFIG_SYS_FSL_HAS_DP_DDR
if (gd->bd->bi_dram[2].size) { if (soc_has_dp_ddr() && gd->bd->bi_dram[2].size) {
puts("\nDP-DDR "); puts("\nDP-DDR ");
print_size(gd->bd->bi_dram[2].size, ""); print_size(gd->bd->bi_dram[2].size, "");
print_ddr_info(CONFIG_DP_DDR_CTRL); print_ddr_info(CONFIG_DP_DDR_CTRL);

View File

@ -6,11 +6,8 @@ F: board/freescale/ls2080a/ls2080aqds.c
F: include/configs/ls2080aqds.h F: include/configs/ls2080aqds.h
F: configs/ls2080aqds_defconfig F: configs/ls2080aqds_defconfig
F: configs/ls2080aqds_nand_defconfig F: configs/ls2080aqds_nand_defconfig
F: configs/ls2085aqds_defconfig
F: configs/ls2085aqds_nand_defconfig
LS2080A_SECURE_BOOT BOARD LS2080A_SECURE_BOOT BOARD
M: Saksham Jain <saksham.jain@nxp.freescale.com> M: Saksham Jain <saksham.jain@nxp.freescale.com>
S: Maintained S: Maintained
F: configs/ls2080aqds_SECURE_BOOT_defconfig F: configs/ls2080aqds_SECURE_BOOT_defconfig
F: configs/ls2085aqds_SECURE_BOOT_defconfig

View File

@ -7,6 +7,7 @@
#include <common.h> #include <common.h>
#include <fsl_ddr_sdram.h> #include <fsl_ddr_sdram.h>
#include <fsl_ddr_dimm_params.h> #include <fsl_ddr_dimm_params.h>
#include <asm/arch/soc.h>
#include "ddr.h" #include "ddr.h"
DECLARE_GLOBAL_DATA_PTR; DECLARE_GLOBAL_DATA_PTR;
@ -201,22 +202,24 @@ void dram_init_banksize(void)
} }
#ifdef CONFIG_SYS_DP_DDR_BASE_PHY #ifdef CONFIG_SYS_DP_DDR_BASE_PHY
/* initialize DP-DDR here */ if (soc_has_dp_ddr()) {
puts("DP-DDR: "); /* initialize DP-DDR here */
/* puts("DP-DDR: ");
* DDR controller use 0 as the base address for binding. /*
* It is mapped to CONFIG_SYS_DP_DDR_BASE for core to access. * DDR controller use 0 as the base address for binding.
*/ * It is mapped to CONFIG_SYS_DP_DDR_BASE for core to access.
dp_ddr_size = fsl_other_ddr_sdram(CONFIG_SYS_DP_DDR_BASE_PHY, */
dp_ddr_size = fsl_other_ddr_sdram(CONFIG_SYS_DP_DDR_BASE_PHY,
CONFIG_DP_DDR_CTRL, CONFIG_DP_DDR_CTRL,
CONFIG_DP_DDR_NUM_CTRLS, CONFIG_DP_DDR_NUM_CTRLS,
CONFIG_DP_DDR_DIMM_SLOTS_PER_CTLR, CONFIG_DP_DDR_DIMM_SLOTS_PER_CTLR,
NULL, NULL, NULL); NULL, NULL, NULL);
if (dp_ddr_size) { if (dp_ddr_size) {
gd->bd->bi_dram[2].start = CONFIG_SYS_DP_DDR_BASE; gd->bd->bi_dram[2].start = CONFIG_SYS_DP_DDR_BASE;
gd->bd->bi_dram[2].size = dp_ddr_size; gd->bd->bi_dram[2].size = dp_ddr_size;
} else { } else {
puts("Not detected"); puts("Not detected");
}
} }
#endif #endif
} }

View File

@ -228,7 +228,7 @@ void detail_board_ddr_info(void)
print_size(gd->bd->bi_dram[0].size + gd->bd->bi_dram[1].size, ""); print_size(gd->bd->bi_dram[0].size + gd->bd->bi_dram[1].size, "");
print_ddr_info(0); print_ddr_info(0);
#ifdef CONFIG_SYS_FSL_HAS_DP_DDR #ifdef CONFIG_SYS_FSL_HAS_DP_DDR
if (gd->bd->bi_dram[2].size) { if (soc_has_dp_ddr() && gd->bd->bi_dram[2].size) {
puts("\nDP-DDR "); puts("\nDP-DDR ");
print_size(gd->bd->bi_dram[2].size, ""); print_size(gd->bd->bi_dram[2].size, "");
print_ddr_info(CONFIG_DP_DDR_CTRL); print_ddr_info(CONFIG_DP_DDR_CTRL);

View File

@ -6,11 +6,8 @@ F: board/freescale/ls2080a/ls2080ardb.c
F: include/configs/ls2080ardb.h F: include/configs/ls2080ardb.h
F: configs/ls2080ardb_defconfig F: configs/ls2080ardb_defconfig
F: configs/ls2080ardb_nand_defconfig F: configs/ls2080ardb_nand_defconfig
F: configs/ls2085ardb_defconfig
F: configs/ls2085ardb_nand_defconfig
LS2080A_SECURE_BOOT BOARD LS2080A_SECURE_BOOT BOARD
M: Saksham Jain <saksham.jain@nxp.freescale.com> M: Saksham Jain <saksham.jain@nxp.freescale.com>
S: Maintained S: Maintained
F: configs/ls2080ardb_SECURE_BOOT_defconfig F: configs/ls2080ardb_SECURE_BOOT_defconfig
F: configs/ls2085ardb_SECURE_BOOT_defconfig

View File

@ -7,6 +7,7 @@
#include <common.h> #include <common.h>
#include <fsl_ddr_sdram.h> #include <fsl_ddr_sdram.h>
#include <fsl_ddr_dimm_params.h> #include <fsl_ddr_dimm_params.h>
#include <asm/arch/soc.h>
#include "ddr.h" #include "ddr.h"
DECLARE_GLOBAL_DATA_PTR; DECLARE_GLOBAL_DATA_PTR;
@ -201,22 +202,24 @@ void dram_init_banksize(void)
} }
#ifdef CONFIG_SYS_DP_DDR_BASE_PHY #ifdef CONFIG_SYS_DP_DDR_BASE_PHY
/* initialize DP-DDR here */ if (soc_has_dp_ddr()) {
puts("DP-DDR: "); /* initialize DP-DDR here */
/* puts("DP-DDR: ");
* DDR controller use 0 as the base address for binding. /*
* It is mapped to CONFIG_SYS_DP_DDR_BASE for core to access. * DDR controller use 0 as the base address for binding.
*/ * It is mapped to CONFIG_SYS_DP_DDR_BASE for core to access.
dp_ddr_size = fsl_other_ddr_sdram(CONFIG_SYS_DP_DDR_BASE_PHY, */
dp_ddr_size = fsl_other_ddr_sdram(CONFIG_SYS_DP_DDR_BASE_PHY,
CONFIG_DP_DDR_CTRL, CONFIG_DP_DDR_CTRL,
CONFIG_DP_DDR_NUM_CTRLS, CONFIG_DP_DDR_NUM_CTRLS,
CONFIG_DP_DDR_DIMM_SLOTS_PER_CTLR, CONFIG_DP_DDR_DIMM_SLOTS_PER_CTLR,
NULL, NULL, NULL); NULL, NULL, NULL);
if (dp_ddr_size) { if (dp_ddr_size) {
gd->bd->bi_dram[2].start = CONFIG_SYS_DP_DDR_BASE; gd->bd->bi_dram[2].start = CONFIG_SYS_DP_DDR_BASE;
gd->bd->bi_dram[2].size = dp_ddr_size; gd->bd->bi_dram[2].size = dp_ddr_size;
} else { } else {
puts("Not detected"); puts("Not detected");
}
} }
#endif #endif
} }

View File

@ -207,7 +207,7 @@ void detail_board_ddr_info(void)
print_size(gd->bd->bi_dram[0].size + gd->bd->bi_dram[1].size, ""); print_size(gd->bd->bi_dram[0].size + gd->bd->bi_dram[1].size, "");
print_ddr_info(0); print_ddr_info(0);
#ifdef CONFIG_SYS_FSL_HAS_DP_DDR #ifdef CONFIG_SYS_FSL_HAS_DP_DDR
if (gd->bd->bi_dram[2].size) { if (soc_has_dp_ddr() && gd->bd->bi_dram[2].size) {
puts("\nDP-DDR "); puts("\nDP-DDR ");
print_size(gd->bd->bi_dram[2].size, ""); print_size(gd->bd->bi_dram[2].size, "");
print_ddr_info(CONFIG_DP_DDR_CTRL); print_ddr_info(CONFIG_DP_DDR_CTRL);

View File

@ -1,20 +0,0 @@
CONFIG_ARM=y
CONFIG_TARGET_LS2080A_EMU=y
CONFIG_FIT=y
CONFIG_FIT_VERBOSE=y
CONFIG_OF_BOARD_SETUP=y
CONFIG_OF_STDOUT_VIA_ALIAS=y
CONFIG_SYS_EXTRA_OPTIONS="EMU,SYS_FSL_DDR4, LS2085A"
# CONFIG_CMD_CONSOLE is not set
# CONFIG_CMD_IMLS is not set
# CONFIG_CMD_XIMG is not set
# CONFIG_CMD_EDITENV is not set
# CONFIG_CMD_ENV_EXISTS is not set
# CONFIG_CMD_LOADS is not set
# CONFIG_CMD_FPGA is not set
# CONFIG_CMD_ITEST is not set
# CONFIG_CMD_SETEXPR is not set
# CONFIG_CMD_NFS is not set
# CONFIG_CMD_MISC is not set
CONFIG_SYS_NS16550=y
CONFIG_OF_LIBFDT=y

View File

@ -1,21 +0,0 @@
CONFIG_ARM=y
CONFIG_TARGET_LS2080A_SIMU=y
CONFIG_FIT=y
CONFIG_FIT_VERBOSE=y
CONFIG_OF_BOARD_SETUP=y
CONFIG_OF_STDOUT_VIA_ALIAS=y
CONFIG_SYS_EXTRA_OPTIONS="SIMU, LS2085A"
# CONFIG_CMD_CONSOLE is not set
# CONFIG_CMD_IMLS is not set
# CONFIG_CMD_XIMG is not set
# CONFIG_CMD_EDITENV is not set
# CONFIG_CMD_ENV_EXISTS is not set
# CONFIG_CMD_LOADS is not set
# CONFIG_CMD_FPGA is not set
# CONFIG_CMD_ITEST is not set
# CONFIG_CMD_SETEXPR is not set
# CONFIG_CMD_NFS is not set
# CONFIG_CMD_MISC is not set
CONFIG_NET_RANDOM_ETHADDR=y
CONFIG_SYS_NS16550=y
CONFIG_OF_LIBFDT=y

View File

@ -1,20 +0,0 @@
CONFIG_ARM=y
CONFIG_TARGET_LS2080AQDS=y
# CONFIG_SYS_MALLOC_F is not set
CONFIG_DM_SPI=y
CONFIG_DM_SPI_FLASH=y
CONFIG_DEFAULT_DEVICE_TREE="fsl-ls2080a-qds"
CONFIG_FIT=y
CONFIG_FIT_VERBOSE=y
CONFIG_OF_BOARD_SETUP=y
CONFIG_OF_STDOUT_VIA_ALIAS=y
CONFIG_SYS_EXTRA_OPTIONS="SYS_FSL_DDR4, LS2085A, SECURE_BOOT"
# CONFIG_CMD_SETEXPR is not set
CONFIG_OF_CONTROL=y
CONFIG_NET_RANDOM_ETHADDR=y
CONFIG_DM=y
CONFIG_NETDEVICES=y
CONFIG_E1000=y
CONFIG_SYS_NS16550=y
CONFIG_FSL_DSPI=y
CONFIG_RSA=y

View File

@ -1,19 +0,0 @@
CONFIG_ARM=y
CONFIG_TARGET_LS2080AQDS=y
# CONFIG_SYS_MALLOC_F is not set
CONFIG_DM_SPI=y
CONFIG_DM_SPI_FLASH=y
CONFIG_DEFAULT_DEVICE_TREE="fsl-ls2080a-qds"
CONFIG_FIT=y
CONFIG_FIT_VERBOSE=y
CONFIG_OF_BOARD_SETUP=y
CONFIG_OF_STDOUT_VIA_ALIAS=y
CONFIG_SYS_EXTRA_OPTIONS="SYS_FSL_DDR4, LS2085A"
# CONFIG_CMD_SETEXPR is not set
CONFIG_OF_CONTROL=y
CONFIG_NET_RANDOM_ETHADDR=y
CONFIG_DM=y
CONFIG_NETDEVICES=y
CONFIG_E1000=y
CONFIG_SYS_NS16550=y
CONFIG_FSL_DSPI=y

View File

@ -1,14 +0,0 @@
CONFIG_ARM=y
CONFIG_TARGET_LS2080AQDS=y
CONFIG_SPL=y
CONFIG_FIT=y
CONFIG_FIT_VERBOSE=y
CONFIG_OF_BOARD_SETUP=y
CONFIG_OF_STDOUT_VIA_ALIAS=y
CONFIG_SYS_EXTRA_OPTIONS="SYS_FSL_DDR4,NAND,LS2085A"
# CONFIG_CMD_SETEXPR is not set
CONFIG_NET_RANDOM_ETHADDR=y
CONFIG_NETDEVICES=y
CONFIG_E1000=y
CONFIG_SYS_NS16550=y
CONFIG_OF_LIBFDT=y

View File

@ -1,20 +0,0 @@
CONFIG_ARM=y
CONFIG_TARGET_LS2080ARDB=y
# CONFIG_SYS_MALLOC_F is not set
CONFIG_DM_SPI=y
CONFIG_DM_SPI_FLASH=y
CONFIG_DEFAULT_DEVICE_TREE="fsl-ls2080a-rdb"
CONFIG_FIT=y
CONFIG_FIT_VERBOSE=y
CONFIG_OF_BOARD_SETUP=y
CONFIG_OF_STDOUT_VIA_ALIAS=y
CONFIG_SYS_EXTRA_OPTIONS="SYS_FSL_DDR4, LS2085A, SECURE_BOOT"
# CONFIG_CMD_SETEXPR is not set
CONFIG_OF_CONTROL=y
CONFIG_NET_RANDOM_ETHADDR=y
CONFIG_DM=y
CONFIG_NETDEVICES=y
CONFIG_E1000=y
CONFIG_SYS_NS16550=y
CONFIG_FSL_DSPI=y
CONFIG_RSA=y

View File

@ -1,19 +0,0 @@
CONFIG_ARM=y
CONFIG_TARGET_LS2080ARDB=y
# CONFIG_SYS_MALLOC_F is not set
CONFIG_DM_SPI=y
CONFIG_DM_SPI_FLASH=y
CONFIG_DEFAULT_DEVICE_TREE="fsl-ls2080a-rdb"
CONFIG_FIT=y
CONFIG_FIT_VERBOSE=y
CONFIG_OF_BOARD_SETUP=y
CONFIG_OF_STDOUT_VIA_ALIAS=y
CONFIG_SYS_EXTRA_OPTIONS="SYS_FSL_DDR4, LS2085A"
# CONFIG_CMD_SETEXPR is not set
CONFIG_OF_CONTROL=y
CONFIG_NET_RANDOM_ETHADDR=y
CONFIG_DM=y
CONFIG_NETDEVICES=y
CONFIG_E1000=y
CONFIG_SYS_NS16550=y
CONFIG_FSL_DSPI=y

View File

@ -1,14 +0,0 @@
CONFIG_ARM=y
CONFIG_TARGET_LS2080ARDB=y
CONFIG_SPL=y
CONFIG_FIT=y
CONFIG_FIT_VERBOSE=y
CONFIG_OF_BOARD_SETUP=y
CONFIG_OF_STDOUT_VIA_ALIAS=y
CONFIG_SYS_EXTRA_OPTIONS="SYS_FSL_DDR4,NAND,LS2085A"
# CONFIG_CMD_SETEXPR is not set
CONFIG_NET_RANDOM_ETHADDR=y
CONFIG_NETDEVICES=y
CONFIG_E1000=y
CONFIG_SYS_NS16550=y
CONFIG_OF_LIBFDT=y

View File

@ -53,7 +53,7 @@ Note:
Represents a single port that is compatible with the DUART found Represents a single port that is compatible with the DUART found
on many Freescale chips (examples include mpc8349, mpc8548, on many Freescale chips (examples include mpc8349, mpc8548,
mpc8641d, p4080 and ls2085a). mpc8641d, p4080 and ls2080a).
Example: Example:

View File

@ -545,12 +545,12 @@ int sec_init(void)
/* /*
* Modifying CAAM Read/Write Attributes * Modifying CAAM Read/Write Attributes
* For LS2080A and LS2085A * For LS2080A
* For AXI Write - Cacheable, Write Back, Write allocate * For AXI Write - Cacheable, Write Back, Write allocate
* For AXI Read - Cacheable, Read allocate * For AXI Read - Cacheable, Read allocate
* Only For LS2080a and LS2085a, to solve CAAM coherency issues * Only For LS2080a, to solve CAAM coherency issues
*/ */
#if defined(CONFIG_LS2080A) || defined(CONFIG_LS2085A) #ifdef CONFIG_LS2080A
mcr = (mcr & ~MCFGR_AWCACHE_MASK) | (0xb << MCFGR_AWCACHE_SHIFT); mcr = (mcr & ~MCFGR_AWCACHE_MASK) | (0xb << MCFGR_AWCACHE_SHIFT);
mcr = (mcr & ~MCFGR_ARCACHE_MASK) | (0x6 << MCFGR_ARCACHE_SHIFT); mcr = (mcr & ~MCFGR_ARCACHE_MASK) | (0x6 << MCFGR_ARCACHE_SHIFT);
#else #else

View File

@ -20,6 +20,8 @@
#include <fsl_esdhc.h> #include <fsl_esdhc.h>
#include <fdt_support.h> #include <fdt_support.h>
#include <asm/io.h> #include <asm/io.h>
#include <dm.h>
#include <asm-generic/gpio.h>
DECLARE_GLOBAL_DATA_PTR; DECLARE_GLOBAL_DATA_PTR;
@ -72,6 +74,30 @@ struct fsl_esdhc {
uint scr; /* eSDHC control register */ uint scr; /* eSDHC control register */
}; };
/**
* struct fsl_esdhc_priv
*
* @esdhc_regs: registers of the sdhc controller
* @sdhc_clk: Current clk of the sdhc controller
* @bus_width: bus width, 1bit, 4bit or 8bit
* @cfg: mmc config
* @mmc: mmc
* Following is used when Driver Model is enabled for MMC
* @dev: pointer for the device
* @non_removable: 0: removable; 1: non-removable
* @cd_gpio: gpio for card detection
*/
struct fsl_esdhc_priv {
struct fsl_esdhc *esdhc_regs;
unsigned int sdhc_clk;
unsigned int bus_width;
struct mmc_config cfg;
struct mmc *mmc;
struct udevice *dev;
int non_removable;
struct gpio_desc cd_gpio;
};
/* Return the XFERTYP flags for a given command and data packet */ /* Return the XFERTYP flags for a given command and data packet */
static uint esdhc_xfertyp(struct mmc_cmd *cmd, struct mmc_data *data) static uint esdhc_xfertyp(struct mmc_cmd *cmd, struct mmc_data *data)
{ {
@ -118,8 +144,8 @@ static uint esdhc_xfertyp(struct mmc_cmd *cmd, struct mmc_data *data)
static void static void
esdhc_pio_read_write(struct mmc *mmc, struct mmc_data *data) esdhc_pio_read_write(struct mmc *mmc, struct mmc_data *data)
{ {
struct fsl_esdhc_cfg *cfg = mmc->priv; struct fsl_esdhc_priv *priv = mmc->priv;
struct fsl_esdhc *regs = (struct fsl_esdhc *)cfg->esdhc_base; struct fsl_esdhc *regs = priv->esdhc_regs;
uint blocks; uint blocks;
char *buffer; char *buffer;
uint databuf; uint databuf;
@ -180,8 +206,8 @@ esdhc_pio_read_write(struct mmc *mmc, struct mmc_data *data)
static int esdhc_setup_data(struct mmc *mmc, struct mmc_data *data) static int esdhc_setup_data(struct mmc *mmc, struct mmc_data *data)
{ {
int timeout; int timeout;
struct fsl_esdhc_cfg *cfg = mmc->priv; struct fsl_esdhc_priv *priv = mmc->priv;
struct fsl_esdhc *regs = (struct fsl_esdhc *)cfg->esdhc_base; struct fsl_esdhc *regs = priv->esdhc_regs;
#ifdef CONFIG_FSL_LAYERSCAPE #ifdef CONFIG_FSL_LAYERSCAPE
dma_addr_t addr; dma_addr_t addr;
#endif #endif
@ -312,8 +338,8 @@ esdhc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data)
int err = 0; int err = 0;
uint xfertyp; uint xfertyp;
uint irqstat; uint irqstat;
struct fsl_esdhc_cfg *cfg = mmc->priv; struct fsl_esdhc_priv *priv = mmc->priv;
volatile struct fsl_esdhc *regs = (struct fsl_esdhc *)cfg->esdhc_base; struct fsl_esdhc *regs = priv->esdhc_regs;
#ifdef CONFIG_SYS_FSL_ERRATUM_ESDHC111 #ifdef CONFIG_SYS_FSL_ERRATUM_ESDHC111
if (cmd->cmdidx == MMC_CMD_STOP_TRANSMISSION) if (cmd->cmdidx == MMC_CMD_STOP_TRANSMISSION)
@ -482,9 +508,9 @@ out:
static void set_sysctl(struct mmc *mmc, uint clock) static void set_sysctl(struct mmc *mmc, uint clock)
{ {
int div, pre_div; int div, pre_div;
struct fsl_esdhc_cfg *cfg = mmc->priv; struct fsl_esdhc_priv *priv = mmc->priv;
volatile struct fsl_esdhc *regs = (struct fsl_esdhc *)cfg->esdhc_base; struct fsl_esdhc *regs = priv->esdhc_regs;
int sdhc_clk = cfg->sdhc_clk; int sdhc_clk = priv->sdhc_clk;
uint clk; uint clk;
if (clock < mmc->cfg->f_min) if (clock < mmc->cfg->f_min)
@ -527,8 +553,8 @@ static void set_sysctl(struct mmc *mmc, uint clock)
#ifdef CONFIG_FSL_ESDHC_USE_PERIPHERAL_CLK #ifdef CONFIG_FSL_ESDHC_USE_PERIPHERAL_CLK
static void esdhc_clock_control(struct mmc *mmc, bool enable) static void esdhc_clock_control(struct mmc *mmc, bool enable)
{ {
struct fsl_esdhc_cfg *cfg = mmc->priv; struct fsl_esdhc_priv *priv = mmc->priv;
struct fsl_esdhc *regs = (struct fsl_esdhc *)cfg->esdhc_base; struct fsl_esdhc *regs = priv->esdhc_regs;
u32 value; u32 value;
u32 time_out; u32 time_out;
@ -556,8 +582,8 @@ static void esdhc_clock_control(struct mmc *mmc, bool enable)
static void esdhc_set_ios(struct mmc *mmc) static void esdhc_set_ios(struct mmc *mmc)
{ {
struct fsl_esdhc_cfg *cfg = mmc->priv; struct fsl_esdhc_priv *priv = mmc->priv;
struct fsl_esdhc *regs = (struct fsl_esdhc *)cfg->esdhc_base; struct fsl_esdhc *regs = priv->esdhc_regs;
#ifdef CONFIG_FSL_ESDHC_USE_PERIPHERAL_CLK #ifdef CONFIG_FSL_ESDHC_USE_PERIPHERAL_CLK
/* Select to use peripheral clock */ /* Select to use peripheral clock */
@ -580,8 +606,8 @@ static void esdhc_set_ios(struct mmc *mmc)
static int esdhc_init(struct mmc *mmc) static int esdhc_init(struct mmc *mmc)
{ {
struct fsl_esdhc_cfg *cfg = mmc->priv; struct fsl_esdhc_priv *priv = mmc->priv;
struct fsl_esdhc *regs = (struct fsl_esdhc *)cfg->esdhc_base; struct fsl_esdhc *regs = priv->esdhc_regs;
int timeout = 1000; int timeout = 1000;
/* Reset the entire host controller */ /* Reset the entire host controller */
@ -621,14 +647,23 @@ static int esdhc_init(struct mmc *mmc)
static int esdhc_getcd(struct mmc *mmc) static int esdhc_getcd(struct mmc *mmc)
{ {
struct fsl_esdhc_cfg *cfg = mmc->priv; struct fsl_esdhc_priv *priv = mmc->priv;
struct fsl_esdhc *regs = (struct fsl_esdhc *)cfg->esdhc_base; struct fsl_esdhc *regs = priv->esdhc_regs;
int timeout = 1000; int timeout = 1000;
#ifdef CONFIG_ESDHC_DETECT_QUIRK #ifdef CONFIG_ESDHC_DETECT_QUIRK
if (CONFIG_ESDHC_DETECT_QUIRK) if (CONFIG_ESDHC_DETECT_QUIRK)
return 1; return 1;
#endif #endif
#ifdef CONFIG_DM_MMC
if (priv->non_removable)
return 1;
if (dm_gpio_is_valid(&priv->cd_gpio))
return dm_gpio_get_value(&priv->cd_gpio);
#endif
while (!(esdhc_read32(&regs->prsstat) & PRSSTAT_CINS) && --timeout) while (!(esdhc_read32(&regs->prsstat) & PRSSTAT_CINS) && --timeout)
udelay(1000); udelay(1000);
@ -656,16 +691,29 @@ static const struct mmc_ops esdhc_ops = {
.getcd = esdhc_getcd, .getcd = esdhc_getcd,
}; };
int fsl_esdhc_initialize(bd_t *bis, struct fsl_esdhc_cfg *cfg) static int fsl_esdhc_cfg_to_priv(struct fsl_esdhc_cfg *cfg,
struct fsl_esdhc_priv *priv)
{
if (!cfg || !priv)
return -EINVAL;
priv->esdhc_regs = (struct fsl_esdhc *)(unsigned long)(cfg->esdhc_base);
priv->bus_width = cfg->max_bus_width;
priv->sdhc_clk = cfg->sdhc_clk;
return 0;
};
static int fsl_esdhc_init(struct fsl_esdhc_priv *priv)
{ {
struct fsl_esdhc *regs; struct fsl_esdhc *regs;
struct mmc *mmc; struct mmc *mmc;
u32 caps, voltage_caps; u32 caps, voltage_caps;
if (!cfg) if (!priv)
return -1; return -EINVAL;
regs = (struct fsl_esdhc *)cfg->esdhc_base; regs = priv->esdhc_regs;
/* First reset the eSDHC controller */ /* First reset the eSDHC controller */
esdhc_reset(regs); esdhc_reset(regs);
@ -676,7 +724,7 @@ int fsl_esdhc_initialize(bd_t *bis, struct fsl_esdhc_cfg *cfg)
#endif #endif
writel(SDHCI_IRQ_EN_BITS, &regs->irqstaten); writel(SDHCI_IRQ_EN_BITS, &regs->irqstaten);
memset(&cfg->cfg, 0, sizeof(cfg->cfg)); memset(&priv->cfg, 0, sizeof(priv->cfg));
voltage_caps = 0; voltage_caps = 0;
caps = esdhc_read32(&regs->hostcapblt); caps = esdhc_read32(&regs->hostcapblt);
@ -698,47 +746,83 @@ int fsl_esdhc_initialize(bd_t *bis, struct fsl_esdhc_cfg *cfg)
if (caps & ESDHC_HOSTCAPBLT_VS33) if (caps & ESDHC_HOSTCAPBLT_VS33)
voltage_caps |= MMC_VDD_32_33 | MMC_VDD_33_34; voltage_caps |= MMC_VDD_32_33 | MMC_VDD_33_34;
cfg->cfg.name = "FSL_SDHC"; priv->cfg.name = "FSL_SDHC";
cfg->cfg.ops = &esdhc_ops; priv->cfg.ops = &esdhc_ops;
#ifdef CONFIG_SYS_SD_VOLTAGE #ifdef CONFIG_SYS_SD_VOLTAGE
cfg->cfg.voltages = CONFIG_SYS_SD_VOLTAGE; priv->cfg.voltages = CONFIG_SYS_SD_VOLTAGE;
#else #else
cfg->cfg.voltages = MMC_VDD_32_33 | MMC_VDD_33_34; priv->cfg.voltages = MMC_VDD_32_33 | MMC_VDD_33_34;
#endif #endif
if ((cfg->cfg.voltages & voltage_caps) == 0) { if ((priv->cfg.voltages & voltage_caps) == 0) {
printf("voltage not supported by controller\n"); printf("voltage not supported by controller\n");
return -1; return -1;
} }
cfg->cfg.host_caps = MMC_MODE_4BIT | MMC_MODE_8BIT; if (priv->bus_width == 8)
priv->cfg.host_caps = MMC_MODE_4BIT | MMC_MODE_8BIT;
else if (priv->bus_width == 4)
priv->cfg.host_caps = MMC_MODE_4BIT;
priv->cfg.host_caps = MMC_MODE_4BIT | MMC_MODE_8BIT;
#ifdef CONFIG_SYS_FSL_ESDHC_HAS_DDR_MODE #ifdef CONFIG_SYS_FSL_ESDHC_HAS_DDR_MODE
cfg->cfg.host_caps |= MMC_MODE_DDR_52MHz; priv->cfg.host_caps |= MMC_MODE_DDR_52MHz;
#endif #endif
if (cfg->max_bus_width > 0) { if (priv->bus_width > 0) {
if (cfg->max_bus_width < 8) if (priv->bus_width < 8)
cfg->cfg.host_caps &= ~MMC_MODE_8BIT; priv->cfg.host_caps &= ~MMC_MODE_8BIT;
if (cfg->max_bus_width < 4) if (priv->bus_width < 4)
cfg->cfg.host_caps &= ~MMC_MODE_4BIT; priv->cfg.host_caps &= ~MMC_MODE_4BIT;
} }
if (caps & ESDHC_HOSTCAPBLT_HSS) if (caps & ESDHC_HOSTCAPBLT_HSS)
cfg->cfg.host_caps |= MMC_MODE_HS_52MHz | MMC_MODE_HS; priv->cfg.host_caps |= MMC_MODE_HS_52MHz | MMC_MODE_HS;
#ifdef CONFIG_ESDHC_DETECT_8_BIT_QUIRK #ifdef CONFIG_ESDHC_DETECT_8_BIT_QUIRK
if (CONFIG_ESDHC_DETECT_8_BIT_QUIRK) if (CONFIG_ESDHC_DETECT_8_BIT_QUIRK)
cfg->cfg.host_caps &= ~MMC_MODE_8BIT; priv->cfg.host_caps &= ~MMC_MODE_8BIT;
#endif #endif
cfg->cfg.f_min = 400000; priv->cfg.f_min = 400000;
cfg->cfg.f_max = min(cfg->sdhc_clk, (u32)52000000); priv->cfg.f_max = min(priv->sdhc_clk, (u32)52000000);
cfg->cfg.b_max = CONFIG_SYS_MMC_MAX_BLK_COUNT; priv->cfg.b_max = CONFIG_SYS_MMC_MAX_BLK_COUNT;
mmc = mmc_create(&cfg->cfg, cfg); mmc = mmc_create(&priv->cfg, priv);
if (mmc == NULL) if (mmc == NULL)
return -1; return -1;
priv->mmc = mmc;
return 0;
}
int fsl_esdhc_initialize(bd_t *bis, struct fsl_esdhc_cfg *cfg)
{
struct fsl_esdhc_priv *priv;
int ret;
if (!cfg)
return -EINVAL;
priv = calloc(sizeof(struct fsl_esdhc_priv), 1);
if (!priv)
return -ENOMEM;
ret = fsl_esdhc_cfg_to_priv(cfg, priv);
if (ret) {
debug("%s xlate failure\n", __func__);
free(priv);
return ret;
}
ret = fsl_esdhc_init(priv);
if (ret) {
debug("%s init failure\n", __func__);
free(priv);
return ret;
}
return 0; return 0;
} }
@ -819,3 +903,92 @@ void fdt_fixup_esdhc(void *blob, bd_t *bd)
4 + 1, 1); 4 + 1, 1);
} }
#endif #endif
#ifdef CONFIG_DM_MMC
#include <asm/arch/clock.h>
static int fsl_esdhc_probe(struct udevice *dev)
{
struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev);
struct fsl_esdhc_priv *priv = dev_get_priv(dev);
const void *fdt = gd->fdt_blob;
int node = dev->of_offset;
fdt_addr_t addr;
unsigned int val;
int ret;
addr = dev_get_addr(dev);
if (addr == FDT_ADDR_T_NONE)
return -EINVAL;
priv->esdhc_regs = (struct fsl_esdhc *)addr;
priv->dev = dev;
val = fdtdec_get_int(fdt, node, "bus-width", -1);
if (val == 8)
priv->bus_width = 8;
else if (val == 4)
priv->bus_width = 4;
else
priv->bus_width = 1;
if (fdt_get_property(fdt, node, "non-removable", NULL)) {
priv->non_removable = 1;
} else {
priv->non_removable = 0;
gpio_request_by_name_nodev(fdt, node, "cd-gpios", 0,
&priv->cd_gpio, GPIOD_IS_IN);
}
/*
* TODO:
* Because lack of clk driver, if SDHC clk is not enabled,
* need to enable it first before this driver is invoked.
*
* we use MXC_ESDHC_CLK to get clk freq.
* If one would like to make this function work,
* the aliases should be provided in dts as this:
*
* aliases {
* mmc0 = &usdhc1;
* mmc1 = &usdhc2;
* mmc2 = &usdhc3;
* mmc3 = &usdhc4;
* };
* Then if your board only supports mmc2 and mmc3, but we can
* correctly get the seq as 2 and 3, then let mxc_get_clock
* work as expected.
*/
priv->sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK + dev->seq);
if (priv->sdhc_clk <= 0) {
dev_err(dev, "Unable to get clk for %s\n", dev->name);
return -EINVAL;
}
ret = fsl_esdhc_init(priv);
if (ret) {
dev_err(dev, "fsl_esdhc_init failure\n");
return ret;
}
upriv->mmc = priv->mmc;
return 0;
}
static const struct udevice_id fsl_esdhc_ids[] = {
{ .compatible = "fsl,imx6ul-usdhc", },
{ .compatible = "fsl,imx6sx-usdhc", },
{ .compatible = "fsl,imx6sl-usdhc", },
{ .compatible = "fsl,imx6q-usdhc", },
{ .compatible = "fsl,imx7d-usdhc", },
{ /* sentinel */ }
};
U_BOOT_DRIVER(fsl_esdhc) = {
.name = "fsl-esdhc-mmc",
.id = UCLASS_MMC,
.of_match = fsl_esdhc_ids,
.probe = fsl_esdhc_probe,
.priv_auto_alloc_size = sizeof(struct fsl_esdhc_priv),
};
#endif

View File

@ -356,6 +356,12 @@ static unsigned long get_mc_boot_timeout_ms(void)
} }
#ifdef CONFIG_SYS_LS_MC_DRAM_AIOP_IMG_OFFSET #ifdef CONFIG_SYS_LS_MC_DRAM_AIOP_IMG_OFFSET
__weak bool soc_has_aiop(void)
{
return false;
}
static int load_mc_aiop_img(u64 aiop_fw_addr) static int load_mc_aiop_img(u64 aiop_fw_addr)
{ {
u64 mc_ram_addr = mc_get_dram_addr(); u64 mc_ram_addr = mc_get_dram_addr();
@ -363,6 +369,9 @@ static int load_mc_aiop_img(u64 aiop_fw_addr)
void *aiop_img; void *aiop_img;
#endif #endif
/* Check if AIOP is available */
if (!soc_has_aiop())
return -ENODEV;
/* /*
* Load the MC AIOP image in the MC private DRAM block: * Load the MC AIOP image in the MC private DRAM block:
*/ */
@ -1235,6 +1244,7 @@ static int do_fsl_mc(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
aiop_fw_addr = simple_strtoull(argv[3], NULL, aiop_fw_addr = simple_strtoull(argv[3], NULL,
16); 16);
/* if SoC doesn't have AIOP, err = -ENODEV */
err = load_mc_aiop_img(aiop_fw_addr); err = load_mc_aiop_img(aiop_fw_addr);
if (!err) if (!err)
printf("fsl-mc: AIOP FW applied\n"); printf("fsl-mc: AIOP FW applied\n");

View File

@ -7,4 +7,3 @@
obj-y += ldpaa_wriop.o obj-y += ldpaa_wriop.o
obj-y += ldpaa_eth.o obj-y += ldpaa_eth.o
obj-$(CONFIG_LS2080A) += ls2080a.o obj-$(CONFIG_LS2080A) += ls2080a.o
obj-$(CONFIG_LS2085A) += ls2080a.o

View File

@ -335,7 +335,7 @@ static int vsc9953_port_vlan_pvid_get(int port_nr, int *pvid)
struct vsc9953_analyzer *l2ana_reg; struct vsc9953_analyzer *l2ana_reg;
/* Administrative down */ /* Administrative down */
if (vsc9953_l2sw.port[port_nr].enabled) { if (!vsc9953_l2sw.port[port_nr].enabled) {
printf("Port %d is administrative down\n", port_nr); printf("Port %d is administrative down\n", port_nr);
return -1; return -1;
} }
@ -2525,6 +2525,9 @@ void vsc9953_init(bd_t *bis)
if (vsc9953_port_init(i)) if (vsc9953_port_init(i))
printf("Failed to initialize l2switch port %d\n", i); printf("Failed to initialize l2switch port %d\n", i);
if (!vsc9953_l2sw.port[i].enabled)
continue;
/* Enable VSC9953 GMII Ports Port ID 0 - 7 */ /* Enable VSC9953 GMII Ports Port ID 0 - 7 */
if (VSC9953_INTERNAL_PORT_CHECK(i)) { if (VSC9953_INTERNAL_PORT_CHECK(i)) {
out_le32(&l2ana_reg->pfc[i].pfc_cfg, out_le32(&l2ana_reg->pfc[i].pfc_cfg,
@ -2537,6 +2540,11 @@ void vsc9953_init(bd_t *bis)
out_le32(&l2sys_reg->pause_cfg.mac_fc_cfg[i], out_le32(&l2sys_reg->pause_cfg.mac_fc_cfg[i],
VSC9953_MAC_FC_CFG); VSC9953_MAC_FC_CFG);
} }
l2dev_gmii_reg = (struct vsc9953_dev_gmii *)
(VSC9953_OFFSET + VSC9953_DEV_GMII_OFFSET +
T1040_SWITCH_GMII_DEV_OFFSET * i);
out_le32(&l2dev_gmii_reg->port_mode.clock_cfg, out_le32(&l2dev_gmii_reg->port_mode.clock_cfg,
VSC9953_CLOCK_CFG); VSC9953_CLOCK_CFG);
out_le32(&l2dev_gmii_reg->mac_cfg_status.mac_ena_cfg, out_le32(&l2dev_gmii_reg->mac_cfg_status.mac_ena_cfg,
@ -2559,10 +2567,6 @@ void vsc9953_init(bd_t *bis)
/* WAIT FOR 2 us*/ /* WAIT FOR 2 us*/
udelay(2); udelay(2);
l2dev_gmii_reg = (struct vsc9953_dev_gmii *)(
(char *)l2dev_gmii_reg
+ T1040_SWITCH_GMII_DEV_OFFSET);
/* Initialize Lynx PHY Wrappers */ /* Initialize Lynx PHY Wrappers */
phy_addr = 0; phy_addr = 0;
if (vsc9953_l2sw.port[i].enet_if == if (vsc9953_l2sw.port[i].enet_if ==

View File

@ -212,7 +212,19 @@
#ifdef CONFIG_SYS_DPAA_FMAN #ifdef CONFIG_SYS_DPAA_FMAN
#define CONFIG_SYS_FM_MURAM_SIZE 0x60000 #define CONFIG_SYS_FM_MURAM_SIZE 0x60000
#if defined(CONFIG_QSPI_BOOT) || defined(CONFIG_SD_BOOT_QSPI) #ifdef CONFIG_NAND_BOOT
/* Store Fman ucode at offeset 0x160000(11 blocks). */
#define CONFIG_SYS_QE_FMAN_FW_IN_NAND
#define CONFIG_SYS_FMAN_FW_ADDR (11 * CONFIG_SYS_NAND_BLOCK_SIZE)
#elif defined(CONFIG_SD_BOOT)
/*
* PBL SD boot image should stored at 0x1000(8 blocks), the size of the image is
* about 1MB (2040 blocks), Env is stored after the image, and the env size is
* 0x2000 (16 blocks), 8 + 2040 + 16 = 2064, enlarge it to 2080(0x820).
*/
#define CONFIG_SYS_QE_FMAN_FW_IN_MMC
#define CONFIG_SYS_FMAN_FW_ADDR (512 * 0x820)
#elif defined(CONFIG_QSPI_BOOT)
#define CONFIG_SYS_QE_FW_IN_SPIFLASH #define CONFIG_SYS_QE_FW_IN_SPIFLASH
#define CONFIG_SYS_FMAN_FW_ADDR 0x400d0000 #define CONFIG_SYS_FMAN_FW_ADDR 0x400d0000
#define CONFIG_ENV_SPI_BUS 0 #define CONFIG_ENV_SPI_BUS 0

View File

@ -162,7 +162,7 @@ unsigned long get_board_ddr_clk(void);
FTIM2_NOR_TWP(0x1c)) FTIM2_NOR_TWP(0x1c))
#define CONFIG_SYS_NOR_FTIM3 0 #define CONFIG_SYS_NOR_FTIM3 0
#define CONFIG_SYS_MAX_FLASH_BANKS 2 /* number of banks */ #define CONFIG_SYS_MAX_FLASH_BANKS 1 /* number of banks */
#define CONFIG_SYS_MAX_FLASH_SECT 1024 /* sectors per device */ #define CONFIG_SYS_MAX_FLASH_SECT 1024 /* sectors per device */
#define CONFIG_SYS_FLASH_ERASE_TOUT 60000 /* Flash Erase Timeout (ms) */ #define CONFIG_SYS_FLASH_ERASE_TOUT 60000 /* Flash Erase Timeout (ms) */
#define CONFIG_SYS_FLASH_WRITE_TOUT 500 /* Flash Write Timeout (ms) */ #define CONFIG_SYS_FLASH_WRITE_TOUT 500 /* Flash Write Timeout (ms) */

View File

@ -171,10 +171,9 @@ unsigned long long get_qixis_addr(void);
#define CONFIG_SYS_LS_MC_DRAM_DPC_OFFSET 0x00F00000 #define CONFIG_SYS_LS_MC_DRAM_DPC_OFFSET 0x00F00000
#define CONFIG_SYS_LS_MC_DPL_MAX_LENGTH 0x20000 #define CONFIG_SYS_LS_MC_DPL_MAX_LENGTH 0x20000
#define CONFIG_SYS_LS_MC_DRAM_DPL_OFFSET 0x00F20000 #define CONFIG_SYS_LS_MC_DRAM_DPL_OFFSET 0x00F20000
#ifdef CONFIG_LS2085A /* For LS2085A */
#define CONFIG_SYS_LS_MC_AIOP_IMG_MAX_LENGTH 0x200000 #define CONFIG_SYS_LS_MC_AIOP_IMG_MAX_LENGTH 0x200000
#define CONFIG_SYS_LS_MC_DRAM_AIOP_IMG_OFFSET 0x07000000 #define CONFIG_SYS_LS_MC_DRAM_AIOP_IMG_OFFSET 0x07000000
#endif
/* /*
* Carve out a DDR region which will not be used by u-boot/Linux * Carve out a DDR region which will not be used by u-boot/Linux
@ -198,10 +197,6 @@ unsigned long long get_qixis_addr(void);
#define FSL_PCIE_COMPAT "fsl,ls2080a-pcie" #define FSL_PCIE_COMPAT "fsl,ls2080a-pcie"
#endif #endif
#ifdef CONFIG_LS2085A
#define FSL_PCIE_COMPAT "fsl,ls2085a-pcie"
#endif
#define CONFIG_SYS_PCI_64BIT #define CONFIG_SYS_PCI_64BIT
#define CONFIG_SYS_PCIE_CFG0_PHYS_OFF 0x00000000 #define CONFIG_SYS_PCIE_CFG0_PHYS_OFF 0x00000000

View File

@ -9,15 +9,8 @@
#include "ls2080a_common.h" #include "ls2080a_common.h"
#ifdef CONFIG_LS2080A
#define CONFIG_IDENT_STRING " LS2080A-EMU" #define CONFIG_IDENT_STRING " LS2080A-EMU"
#define CONFIG_BOOTP_VCI_STRING "U-Boot.LS2080A-EMU" #define CONFIG_BOOTP_VCI_STRING "U-Boot.LS2080A-EMU"
#endif
#ifdef CONFIG_LS2085A
#define CONFIG_IDENT_STRING " LS2085A-EMU"
#define CONFIG_BOOTP_VCI_STRING "U-Boot.LS2085A-EMU"
#endif
#define CONFIG_SYS_CLK_FREQ 100000000 #define CONFIG_SYS_CLK_FREQ 100000000
#define CONFIG_DDR_CLK_FREQ 133333333 #define CONFIG_DDR_CLK_FREQ 133333333

View File

@ -9,15 +9,8 @@
#include "ls2080a_common.h" #include "ls2080a_common.h"
#ifdef CONFIG_LS2080A
#define CONFIG_IDENT_STRING " LS2080A-SIMU" #define CONFIG_IDENT_STRING " LS2080A-SIMU"
#define CONFIG_BOOTP_VCI_STRING "U-Boot.LS2080A-SIMU" #define CONFIG_BOOTP_VCI_STRING "U-Boot.LS2080A-SIMU"
#endif
#ifdef CONFIG_LS2085A
#define CONFIG_IDENT_STRING " LS2085A-SIMU"
#define CONFIG_BOOTP_VCI_STRING "U-Boot.LS2085A-SIMU"
#endif
#define CONFIG_SYS_CLK_FREQ 100000000 #define CONFIG_SYS_CLK_FREQ 100000000
#define CONFIG_DDR_CLK_FREQ 133333333 #define CONFIG_DDR_CLK_FREQ 133333333

View File

@ -168,11 +168,7 @@
#define ESDHC_VENDORSPEC_VSELECT 0x00000002 /* Use 1.8V */ #define ESDHC_VENDORSPEC_VSELECT 0x00000002 /* Use 1.8V */
struct fsl_esdhc_cfg { struct fsl_esdhc_cfg {
#ifdef CONFIG_FSL_LAYERSCAPE phys_addr_t esdhc_base;
u64 esdhc_base;
#else
u32 esdhc_base;
#endif
u32 sdhc_clk; u32 sdhc_clk;
u8 max_bus_width; u8 max_bus_width;
struct mmc_config cfg; struct mmc_config cfg;

View File

@ -55,7 +55,7 @@ struct fsl_xhci {
#define CONFIG_SYS_FSL_XHCI_USB1_ADDR CONFIG_SYS_LS102XA_XHCI_USB1_ADDR #define CONFIG_SYS_FSL_XHCI_USB1_ADDR CONFIG_SYS_LS102XA_XHCI_USB1_ADDR
#define CONFIG_SYS_FSL_XHCI_USB2_ADDR 0 #define CONFIG_SYS_FSL_XHCI_USB2_ADDR 0
#define CONFIG_SYS_FSL_XHCI_USB3_ADDR 0 #define CONFIG_SYS_FSL_XHCI_USB3_ADDR 0
#elif defined(CONFIG_LS2080A) || defined(CONFIG_LS2085A) #elif defined(CONFIG_LS2080A)
#define CONFIG_SYS_FSL_XHCI_USB1_ADDR CONFIG_SYS_LS2080A_XHCI_USB1_ADDR #define CONFIG_SYS_FSL_XHCI_USB1_ADDR CONFIG_SYS_LS2080A_XHCI_USB1_ADDR
#define CONFIG_SYS_FSL_XHCI_USB2_ADDR CONFIG_SYS_LS2080A_XHCI_USB2_ADDR #define CONFIG_SYS_FSL_XHCI_USB2_ADDR CONFIG_SYS_LS2080A_XHCI_USB2_ADDR
#define CONFIG_SYS_FSL_XHCI_USB3_ADDR 0 #define CONFIG_SYS_FSL_XHCI_USB3_ADDR 0