arm: ls102xa: Add Freescale LS102xA SoC and LS1021AQDS board support
Subsystems (7)
cover arm: ls102xa: Add Freescale LS102xA SoC and LS1021AQDS board support
This series contain the support for Freescale LS102xA SoC and LS1021AQDS board.
The QorIQ LS1 family is built on Layerscape architecture, the industry's first software-aware, core-agnostic networking architecture to offer unprecedented efficiency and scale.
Freescale LS102xA is a set of SoCs combines two ARM Cortex-A7 cores that have been optimized for high reliability and pack the highest level of integration available for sub-3 W embedded communications processors with Layerscape architecture and with a comprehensive enablement model focused on ease of programmability.
For the detail information about LS1021AQDS board, please refer to README in the patch.
----------------------------------------------------------------
Alison Wang (5):
arm: ls102xa: Add Freescale LS102xA SoC support
arm: ls102xa: Add i2c support for LS102xA
arm: ls102xa: Add etsec support for LS102xA
arm: ls102xa: Add esdhc support for LS102xA
arm: ls102xa: Add basic support for LS1021AQDS board
Claudiu Manoil (1):
net: Merge asm/fsl_enet.h into fsl_mdio.h
York Sun (3):
driver/ddr/freescale: Add support of accumulate ECC driver/ddr/freescale: Fix DDR3 driver for ARM driver/ddr/fsl: Add support of overriding chip select write leveling
arch/powerpc/include/asm/fsl_enet.h | 24 -- board/freescale/ls1021aqds/Makefile | 8 + board/freescale/ls1021aqds/README | 112 +++++++++ board/freescale/ls1021aqds/ddr.c | 169 +++++++++++++ board/freescale/ls1021aqds/ddr.h | 64 +++++ board/freescale/ls1021aqds/ls1021aqds.c | 208 ++++++++++++++++ board/freescale/ls1021aqds/ls1021aqds_qixis.h | 35 +++ board/freescale/mpc8360emds/mpc8360emds.c | 2 +- board/freescale/mpc837xemds/mpc837xemds.c | 1 - boards.cfg | 1 + drivers/ddr/fsl/arm_ddr_gen3.c | 2 +- drivers/ddr/fsl/ctrl_regs.c | 8 + drivers/ddr/fsl/interactive.c | 2 + drivers/i2c/mxc_i2c.c | 2 +- drivers/mmc/fsl_esdhc.c | 4 +- drivers/net/fm/dtsec.c | 1 - drivers/net/fm/fm.h | 2 +- drivers/net/fm/init.c | 1 + drivers/net/fm/memac.c | 1 - drivers/net/fm/tgec.c | 1 - drivers/net/fsl_mdio.c | 16 +- drivers/net/tsec.c | 7 + drivers/qe/uec.h | 1 - include/common.h | 5 +- include/configs/ls1021aqds.h | 418 ++++++++++++++++++++++++++++++++ include/fm_eth.h | 2 +- include/fsl_ddr_sdram.h | 2 + include/fsl_esdhc.h | 14 +- include/fsl_mdio.h | 13 +- include/tsec.h | 7 +- 30 files changed, 1087 insertions(+), 46 deletions(-) delete mode 100644 arch/powerpc/include/asm/fsl_enet.h create mode 100644 board/freescale/ls1021aqds/Makefile create mode 100644 board/freescale/ls1021aqds/README create mode 100644 board/freescale/ls1021aqds/ddr.c create mode 100644 board/freescale/ls1021aqds/ddr.h create mode 100644 board/freescale/ls1021aqds/ls1021aqds.c create mode 100644 board/freescale/ls1021aqds/ls1021aqds_qixis.h create mode 100644 include/configs/ls1021aqds.h
PATCH 1/9 arm: ls102xa: Add Freescale LS102xA SoC support
The QorIQ LS1 family is built on Layerscape architecture, the industry's first software-aware, core-agnostic networking architecture to offer unprecedented efficiency and scale.
Freescale LS102xA is a set of SoCs combines two ARM Cortex-A7 cores that have been optimized for high reliability and pack the highest level of integration available for sub-3 W embedded communications processors with Layerscape architecture and with a comprehensive enablement model focused on ease of programmability.
--- arch/arm/cpu/armv7/ls102xa/Makefile | 11 + arch/arm/cpu/armv7/ls102xa/clock.c | 131 +++++++ arch/arm/cpu/armv7/ls102xa/cpu.c | 102 ++++++ arch/arm/cpu/armv7/ls102xa/fdt.c | 82 +++++ arch/arm/cpu/armv7/ls102xa/timer.c | 129 +++++++ arch/arm/include/asm/arch-ls102xa/clock.h | 23 ++ arch/arm/include/asm/arch-ls102xa/config.h | 70 ++++ arch/arm/include/asm/arch-ls102xa/immap_ls102xa.h | 420 ++++++++++++++++++++++ arch/arm/include/asm/arch-ls102xa/imx-regs.h | 53 +++ arch/arm/include/asm/config.h | 4 + arch/arm/include/asm/io.h | 8 +- drivers/watchdog/Makefile | 2 +- 12 files changed, 1033 insertions(+), 2 deletions(-) create mode 100644 arch/arm/cpu/armv7/ls102xa/Makefile create mode 100644 arch/arm/cpu/armv7/ls102xa/clock.c create mode 100644 arch/arm/cpu/armv7/ls102xa/cpu.c create mode 100644 arch/arm/cpu/armv7/ls102xa/fdt.c create mode 100644 arch/arm/cpu/armv7/ls102xa/timer.c create mode 100644 arch/arm/include/asm/arch-ls102xa/clock.h create mode 100644 arch/arm/include/asm/arch-ls102xa/config.h create mode 100644 arch/arm/include/asm/arch-ls102xa/immap_ls102xa.h create mode 100644 arch/arm/include/asm/arch-ls102xa/imx-regs.h
arch/arm/cpu/armv7/ls102xa/Makefile new file +11 -0
@@ -0,0 +1,11 @@ +# +# Copyright 2014 Freescale Semiconductor, Inc. +# +# SPDX-License-Identifier: GPL-2.0+ +# + +obj-y += cpu.o +obj-y += clock.o +obj-y += timer.o + +obj-$(CONFIG_OF_LIBFDT) += fdt.o
arch/arm/cpu/armv7/ls102xa/clock.c new file +131 -0
131 lines not on this page · raw message
arch/arm/cpu/armv7/ls102xa/cpu.c new file +102 -0
102 lines not on this page · raw message
arch/arm/cpu/armv7/ls102xa/fdt.c new file +82 -0
82 lines not on this page · raw message
arch/arm/cpu/armv7/ls102xa/timer.c new file +129 -0
129 lines not on this page · raw message
arch/arm/include/asm/arch-ls102xa/clock.h new file +23 -0
@@ -0,0 +1,23 @@ +/* +* Copyright 2014 Freescale Semiconductor, Inc. +* +* SPDX-License-Identifier: GPL-2.0+ +* +*/ + +#ifndef __ASM_ARCH_LS102XA_CLOCK_H_ +#define __ASM_ARCH_LS102XA_CLOCK_H_ + +#include <common.h> + +enum mxc_clock { +MXC_ARM_CLK =0 , +MXC_UART_CLK , +MXC_ESDHC_CLK , +MXC_I2C_CLK , +MXC_DSPI_CLK , +}; + +unsigned int mxc_get_clock (enum mxc_clock clk); + +#endif /* __ASM_ARCH_LS102XA_CLOCK_H_ */
arch/arm/include/asm/arch-ls102xa/config.h new file +70 -0
70 lines not on this page · raw message
arch/arm/include/asm/arch-ls102xa/immap_ls102xa.h new file +420 -0
420 lines not on this page · raw message
arch/arm/include/asm/arch-ls102xa/imx-regs.h new file +53 -0
53 lines not on this page · raw message
arch/arm/include/asm/config.h +4 -0
@@ -17,4 +17,8 @@#define CONFIG_STATIC_RELA #endif +#ifdef CONFIG_LS102xA +#include <asm/arch/config.h> +#endif +#endif
arch/arm/include/asm/io.h +7 -1
@@ -367,7 +367,12 @@ out: return retval; } -#elif !defined(readb) +#else +#define memset_io (a, b, c) memset((void *)(a), (b), (c)) +#define memcpy_fromio (a, b, c) memcpy((a), (void *)(b), (c)) +#define memcpy_toio (a, b, c) memcpy((void *)(a), (b), (c)) + +#if !defined(readb)#define readb (addr) (__readwrite_bug("readb"),0)#define readw (addr) (__readwrite_bug("readw"),0)
@@ -380,6 +385,7 @@ out:#define check_signature (io,sig,len) (0) +#endif #endif /* __mem_pci */ /*
drivers/watchdog/Makefile +1 -1
@@ -7,7 +7,7 @@ obj-$(CONFIG_AT91SAM9_WATCHDOG) += at91sam9_wdt.o obj-$(CONFIG_FTWDT010_WATCHDOG) += ftwdt010_wdt.o -ifneq (,$(filter $(SOC), mx31 mx35 mx5 mx6 vf610)) +ifneq (,$(filter $(SOC), mx31 mx35 mx5 mx6 vf610 ls102xa)) obj-y += imx_watchdog.o endif obj-$(CONFIG_TNETV107X_WATCHDOG) += tnetv107x_wdt.o
Signature · 1 line
1.8.0
PATCH 1/9 arm: ls102xa: Add Freescale LS102xA SoC support
Quoted 610 lines · Alison Wang
The QorIQ LS1 family is built on Layerscape architecture, the industry's first software-aware, core-agnostic networking architecture to offer unprecedented efficiency and scale.
Freescale LS102xA is a set of SoCs combines two ARM Cortex-A7 cores that have been optimized for high reliability and pack the highest level of integration available for sub-3 W embedded communications processors with Layerscape architecture and with a comprehensive enablement model focused on ease of programmability.
Signed-off-by Alison Wang <[email protected]>Signed-off-by Jason Jin <[email protected]>Signed-off-by Jingchang Lu <[email protected]>Signed-off-by Prabhakar Kushwaha <[email protected]>--- arch/arm/cpu/armv7/ls102xa/Makefile | 11 + arch/arm/cpu/armv7/ls102xa/clock.c | 131 +++++++ arch/arm/cpu/armv7/ls102xa/cpu.c | 102 ++++++ arch/arm/cpu/armv7/ls102xa/fdt.c | 82 +++++ arch/arm/cpu/armv7/ls102xa/timer.c | 129 +++++++ arch/arm/include/asm/arch-ls102xa/clock.h | 23 ++ arch/arm/include/asm/arch-ls102xa/config.h | 70 ++++ arch/arm/include/asm/arch-ls102xa/immap_ls102xa.h | 420 ++++++++++++++++++++++ arch/arm/include/asm/arch-ls102xa/imx-regs.h | 53 +++ arch/arm/include/asm/config.h | 4 + arch/arm/include/asm/io.h | 8 +- drivers/watchdog/Makefile | 2 +- 12 files changed, 1033 insertions(+), 2 deletions(-)create mode 100644
arch/arm/cpu/armv7/ls102xa/Makefilecreate mode 100644arch/arm/cpu/armv7/ls102xa/clock.ccreate mode 100644arch/arm/cpu/armv7/ls102xa/cpu.ccreate mode 100644arch/arm/cpu/armv7/ls102xa/fdt.ccreate mode 100644arch/arm/cpu/armv7/ls102xa/timer.ccreate mode 100644arch/arm/include/asm/arch-ls102xa/clock.hcreate mode 100644arch/arm/include/asm/arch-ls102xa/config.hcreate mode 100644arch/arm/include/asm/arch-ls102xa/immap_ls102xa.hcreate mode 100644arch/arm/include/asm/arch-ls102xa/imx-regs.harch/arm/cpu/armv7/ls102xa/Makefile new file +11
-0@@ -0,0 +1,11 @@ +# +# Copyright 2014 Freescale Semiconductor, Inc. +# +# SPDX-License-Identifier: GPL-2.0+ +# + +obj-y += cpu.o +obj-y += clock.o +obj-y += timer.o + +obj-$(CONFIG_OF_LIBFDT) += fdt.oarch/arm/cpu/armv7/ls102xa/clock.c new file +131
-0@@ -0,0 +1,131 @@ +/* +* Copyright 2014 Freescale Semiconductor, Inc. +* +* SPDX-License-Identifier: GPL-2.0+ +*/ + +#include <common.h> +#include <asm/io.h> +#include <asm/arch/immap_ls102xa.h> +#include <asm/arch/clock.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 ; +u32 ccr; +#endif +struct ccsr_clk *clk = (void *)(CONFIG_SYS_FSL_LS1_CLK_ADDR ); +unsigned int cpu; +const u8 core_cplx_pll[6 ] = { + [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[6 ] = { + [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 *= (in_be32 (&gur->rcwsr[0 ]) >> +RCWSR0_SYS_PLL_RAT_SHIFT ) &RCWSR0_SYS_PLL_RAT_MASK ; + sys_info->freq_ddrbus *= (in_be32 (&gur->rcwsr[0 ]) >> +RCWSR0_MEM_PLL_RAT_SHIFT ) &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 ) &0x3f ; +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]; + } + +#if defined(CONFIG_FSL_IFC ) + ccr =in_be32 (&ifc_regs->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 *2 ; + +#if defined(CONFIG_FSL_ESDHC ) + gd->arch.sdhc_clk = gd->bus_clk; +#endif + +return 0 ; +} + +ulong get_bus_freq (ulong dummy) +{ +return gd->bus_clk; +} + +ulong get_ddr_freq (ulong dummy) +{ +return gd->mem_clk; +} + +int get_serial_clock (void ) +{ +return gd->bus_clk /2 ; +} + +unsigned int mxc_get_clock (enum mxc_clock clk) +{ +switch (clk) { +case MXC_I2C_CLK : +return get_bus_freq (0 ) /2 ; +case MXC_ESDHC_CLK : +return get_bus_freq (0 ); +case MXC_DSPI_CLK : +return get_bus_freq (0 ) /2 ; +case MXC_UART_CLK : +return get_bus_freq (0 ) /2 ; +default : +printf ("Unsupported clock\n" ); + } +return 0 ; +}arch/arm/cpu/armv7/ls102xa/cpu.c new file +102
-0@@ -0,0 +1,102 @@ +/* +* Copyright 2014 Freescale Semiconductor, Inc. +* +* SPDX-License-Identifier: GPL-2.0+ +*/ + +#include <common.h> +#include <asm/arch/clock.h> +#include <asm/io.h> +#include <asm/arch/immap_ls102xa.h> +#include <tsec.h> +#include <netdev.h> +#include <fsl_esdhc.h> + +DECLARE_GLOBAL_DATA_PTR ; + +#if defined(CONFIG_DISPLAY_CPUINFO ) +int print_cpuinfo (void ) +{ +char buf[32 ]; +struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR ); +unsigned int svr, major, minor, ver, i; + + svr =in_be32 (&gur->svr); + major =SVR_MAJ (svr); + minor =SVR_MIN (svr); + +puts ("CPU: Freescale LayerScape " ); + + ver =SVR_SOC_VER (svr); +switch (ver) { +case SOC_VER_SLS1020 : +puts ("SLS1020" ); +break ; +case SOC_VER_LS1020 : +puts ("LS1020" ); +break ; +case SOC_VER_LS1021 : +puts ("LS1021" ); +break ; +case SOC_VER_LS1022 : +puts ("LS1022" ); +break ; +default : +puts ("Unknown" ); +break ; + } + +if (IS_E_PROCESSOR (svr) && (ver !=SOC_VER_SLS1020 )) +puts ("E" ); + +printf (", Version: %d.%d, (0x%08x)\n" , major, minor, svr); + +puts ("Clock Configuration:" ); + +printf ("\n CPU0(ARMV7):%-4s MHz, " ,strmhz (buf, gd->cpu_clk)); +printf ("\n Bus:%-4s MHz, " ,strmhz (buf, gd->bus_clk)); +printf ("DDR:%-4s MHz, " ,strmhz (buf, gd->mem_clk)); +puts ("\n" ); + +/* Display the RCW, so that no one gets confused as to what RCW +* we're actually using for this boot. +*/ +puts ("Reset Configuration Word (RCW):" ); +for (i =0 ; i <ARRAY_SIZE (gur->rcwsr); i++) { +u32 rcw =in_be32 (&gur->rcwsr[i]); + +if ((i %4 ) ==0 ) +printf ("\n %08x:" , i *4 ); +printf (" %08x" , rcw); + } +puts ("\n" ); + +return 0 ; +} +#endif + +void enable_caches (void ) +{ +#ifndef CONFIG_SYS_ICACHE_OFF +icache_enable (); +#endif +#ifndef CONFIG_SYS_DCACHE_OFF +dcache_enable (); +#endif +} + +#ifdef CONFIG_FSL_ESDHC +int cpu_mmc_init (bd_t *bis) +{ +return fsl_esdhc_mmc_init (bis); +} +#endif + +int cpu_eth_init (bd_t *bis) +{ +#ifdef CONFIG_TSEC_ENET +tsec_standard_init (bis); +#endif + +return 0 ; +}arch/arm/cpu/armv7/ls102xa/fdt.c new file +82
-0@@ -0,0 +1,82 @@ +/* +* Copyright 2014 Freescale Semiconductor, Inc. +* +* SPDX-License-Identifier: GPL-2.0+ +*/ + +#include <common.h> +#include <libfdt.h> +#include <fdt_support.h> +#include <asm/io.h> +#include <asm/processor.h> +#include <asm/arch/clock.h> +#include <linux/ctype.h> +#ifdef CONFIG_FSL_ESDHC +#include <fsl_esdhc.h> +#endif + +DECLARE_GLOBAL_DATA_PTR ; + +void fdt_add_enet_stashing (void *fdt) +{ +do_fixup_by_compat (fdt,"fsl,etsec2" ,"bd-stash" ,NULL ,0 ,1 ); +do_fixup_by_compat_u32 (fdt,"fsl,etsec2" ,"rx-stash-len" ,96 ,1 ); +do_fixup_by_compat_u32 (fdt,"fsl,etsec2" ,"rx-stash-idx" ,0 ,1 ); +} + +void ft_cpu_setup (void *blob,bd_t *bd) +{ +int off; +int val; +unsigned long busclk =get_bus_freq (0 ); + +fdt_fixup_ethernet (blob); + +fdt_add_enet_stashing (blob); + + off =fdt_node_offset_by_prop_value (blob,-1 ,"device_type" ,"cpu" ,4 ); +while (off != -FDT_ERR_NOTFOUND ) { + val = gd->cpu_clk; +fdt_setprop (blob, off,"clock-frequency" , &val,4 ); + off =fdt_node_offset_by_prop_value (blob, off, +"device_type" ,"cpu" ,4 ); + } + +do_fixup_by_prop_u32 (blob, +"device_type" ,"soc" ,4 ,"bus-frequency" , busclk /2 ,1 ); + +#ifdef CONFIG_SYS_NS16550 +do_fixup_by_compat_u32 (blob,"ns16550" , +"clock-frequency" ,CONFIG_SYS_NS16550_CLK ,1 ); +#endif + +do_fixup_by_compat_u32 (blob,"fsl,sys-clock" , +"clock-frequency" ,CONFIG_SYS_CLK_FREQ ,1 ); + +#if defined(CONFIG_FSL_ESDHC ) +fdt_fixup_esdhc (blob, bd); +#endif + +/* +* platform bus clock = system bus clock/2 +* Here busclk = system bus clock +* We are using the platform bus clock as 1588 Timer reference +* clock source select +*/ +do_fixup_by_compat_u32 (blob,"fsl,gianfar-ptp-timer" , +"timer-frequency" , busclk /2 ,1 ); + +/* +* clock-freq should change to clock-frequency and +* flexcan-v1.0 should change to p1010-flexcan respectively +* in the future. +*/ +do_fixup_by_compat_u32 (blob,"fsl,flexcan-v1.0" , +"clock_freq" , busclk /2 ,1 ); + +do_fixup_by_compat_u32 (blob,"fsl,flexcan-v1.0" , +"clock-frequency" , busclk /2 ,1 ); + +do_fixup_by_compat_u32 (blob,"fsl,p1010-flexcan" , +"clock-frequency" , busclk /2 ,1 ); +}arch/arm/cpu/armv7/ls102xa/timer.c new file +129
-0@@ -0,0 +1,129 @@ +/* +* Copyright 2014 Freescale Semiconductor, Inc. +* +* SPDX-License-Identifier: GPL-2.0+ +*/ + +#include <common.h> +#include <asm/io.h> +#include <div64.h> +#include <asm/arch/immap_ls102xa.h> +#include <asm/arch/clock.h> + +DECLARE_GLOBAL_DATA_PTR ; + +/* +* This function is intended for SHORT delays only. +* It will overflow at around 10 seconds @ 400MHz, +* or 20 seconds @ 200MHz. +*/ +unsigned long usec2ticks (unsigned long usec) +{ +ulong ticks; + +if (usec <1000 ) + ticks = ((usec * (get_tbclk ()/1000 )) +500 ) /1000 ; +else + ticks = ((usec /10 ) * (get_tbclk () /100000 )); + +return ticks; +} + +static inline unsigned long long tick_to_time (unsigned long long tick) +{ +unsigned long freq; + + asmvolatile ("mrc p15, 0, %0, c14, c0, 0" :"=r" (freq)); + + tick *=CONFIG_SYS_HZ ; +do_div (tick, freq); + +return tick; +} + +static inline unsigned long long us_to_tick (unsigned long long usec) +{ +unsigned long freq; + + asmvolatile ("mrc p15, 0, %0, c14, c0, 0" :"=r" (freq)); + + usec = usec * freq +999999 ; +do_div (usec,1000000 ); + +return usec; +} + +int timer_init (void ) +{ +struct sctr_regs *sctr = (struct sctr_regs *)SCTR_BASE_ADDR ; +unsigned long ctrl, val, freq; + +/* Enable System Counter */ +writel (SYS_COUNTER_CTRL_ENABLE , &sctr->cntcr); + + freq =GENERIC_TIMER_CLK ; + asm("mcr p15, 0, %0, c14, c0, 0" : :"r" (freq)); + +/* Set PL1 Physical Timer Ctrl */ + ctrl =ARCH_TIMER_CTRL_ENABLE ; + asm("mcr p15, 0, %0, c14, c2, 1" : :"r" (ctrl)); + +/* Set PL1 Physical Comp Value */ + val =TIMER_COMP_VAL ; + asm("mcrr p15, 2, %Q0, %R0, c14" : :"r" (val)); + + gd->arch.tbl =0 ; + gd->arch.tbu =0 ; + +return 0 ; +} + +unsigned long long get_ticks (void ) +{ +unsigned long long now; + + asm("mrrc p15, 0, %Q0, %R0, c14" :"=r" (now)); + +/* increment tbu if tbl has rolled over */ +if (now < gd->arch.tbl) + gd->arch.tbu++; + gd->arch.tbl = now; + +return (((unsigned long long )gd->arch.tbu) <<32 ) | gd->arch.tbl; +} + +unsigned long get_timer_masked (void ) +{ +return tick_to_time (get_ticks ()); +} + +unsigned long get_timer (ulong base) +{ +return get_timer_masked () - base; +} + +/* delay x useconds and preserve advance timstamp value */ +void __udelay (unsigned long usec) +{ +unsigned long long start; +unsigned long tmo; + + start =get_ticks ();/* get current timestamp */ + tmo =us_to_tick (usec);/* convert usecs to ticks */ + +while ((get_ticks () - start) < tmo) + ;/* loop till time has passed */ +} + +/* +* This function is derived from PowerPC code (timebase clock frequency). +* On ARM it returns the number of timer ticks per second. +*/ +unsigned long get_tbclk (void ) +{ +unsigned long freq; + + asmvolatile ("mrc p15, 0, %0, c14, c0, 0" :"=r" (freq)); + +return freq; +}arch/arm/include/asm/arch-ls102xa/clock.h new file +23
-0@@ -0,0 +1,23 @@ +/* +* Copyright 2014 Freescale Semiconductor, Inc. +* +* SPDX-License-Identifier: GPL-2.0+ +* +*/ + +#ifndef __ASM_ARCH_LS102XA_CLOCK_H_ +#define __ASM_ARCH_LS102XA_CLOCK_H_ + +#include <common.h> + +enum mxc_clock { +MXC_ARM_CLK =0 , +MXC_UART_CLK , +MXC_ESDHC_CLK , +MXC_I2C_CLK , +MXC_DSPI_CLK , +}; + +unsigned int mxc_get_clock (enum mxc_clock clk); + +#endif /* __ASM_ARCH_LS102XA_CLOCK_H_ */ arch/arm/include/asm/arch-ls102xa/config.h new file +51
-0@@ -0,0 +1,70 @@ +/* +* Copyright 2014, Freescale Semiconductor +* +* SPDX-License-Identifier: GPL-2.0+ +*/ + +#ifndef _ASM_ARMV7_LS102xA_CONFIG_ +#define _ASM_ARMV7_LS102xA_CONFIG_ + +#define CONFIG_SYS_IMMR 0x01000000 + +#define CONFIG_SYS_FSL_DDR_ADDR (CONFIG_SYS_IMMR + 0x00080000) +#define CONFIG_SYS_IFC_ADDR (CONFIG_SYS_IMMR + 0x00530000) +#define CONFIG_SYS_FSL_ESDHC_ADDR (CONFIG_SYS_IMMR + 0x00560000) +#define CONFIG_SYS_FSL_SCFG_ADDR (CONFIG_SYS_IMMR + 0x00570000) +#define CONFIG_SYS_FSL_SERDES_ADDR (CONFIG_SYS_IMMR + 0x00ea0000) +#define CONFIG_SYS_FSL_GUTS_ADDR (CONFIG_SYS_IMMR + 0x00ee0000) +#define CONFIG_SYS_FSL_LS1_CLK_ADDR (CONFIG_SYS_IMMR + 0x00ee1000) +#define CONFIG_SYS_NS16550_COM1 (CONFIG_SYS_IMMR + 0x011c0500) +#define CONFIG_SYS_NS16550_COM2 (CONFIG_SYS_IMMR + 0x011d0500) + +#define CONFIG_SYS_CCI400_ADDR 0x01180000 + +#define CONFIG_SYS_TSEC1_OFFSET 0x01d10000 +#define CONFIG_SYS_TSEC2_OFFSET 0x01d50000 +#define CONFIG_SYS_TSEC3_OFFSET 0x01d90000 +#define CONFIG_SYS_MDIO1_OFFSET 0x01d24000 + +#define TSEC_BASE_ADDR (CONFIG_SYS_IMMR + CONFIG_SYS_TSEC1_OFFSET) +#define MDIO_BASE_ADDR (CONFIG_SYS_IMMR + CONFIG_SYS_MDIO1_OFFSET) + +#define CONFIG_SYS_FSL_ESDHC_ADDR (CONFIG_SYS_IMMR + 0x00560000) + +#define SCTR_BASE_ADDR (CONFIG_SYS_IMMR + 0x01b00000) + +#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 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 CONFIG_SYS_FSL_DDR_BE +#define CONFIG_VERY_BIG_RAM +#define CONFIG_SYS_FSL_DDRC_ARM_GEN3 +#define CONFIG_SYS_FSL_DDR +#define CONFIG_SYS_LS1_DDR_BLOCK1_SIZE ((phys_size_t)2 << 30)
arch/arm/include/asm/arch-ls102xa/config.h line 61
Quoted 10 lines
arch/arm/include/asm/arch-ls102xa/config.h new file +10
-0+#define CONFIG_MAX_MEM_MAPPED CONFIG_SYS_LS1_DDR_BLOCK1_SIZE + +#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 CONFIG_SYS_FSL_SRDS_1 +
What about CONFIG_ARMV7_VIRT? This config allows the kernel to be entered in the HYP mode which is a prerequisite for running KVM which we need to support.
Diana
PATCH 2/9 arm: ls102xa: Add i2c support for LS102xA
In reply to Alison Wang--- drivers/i2c/mxc_i2c.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/i2c/mxc_i2c.c +1 -1
@@ -423,7 +423,7 @@ static void * const i2c_bases[] = { (void *)IMX_I2C2_BASE#elif defined(CONFIG_MX31 ) || defined(CONFIG_MX35 ) || \ defined(CONFIG_MX51 ) || defined(CONFIG_MX53 ) || \ - defined(CONFIG_MX6 ) + defined(CONFIG_MX6 ) || defined(CONFIG_LS102xA) (void *)I2C1_BASE_ADDR , (void *)I2C2_BASE_ADDR , (void *)I2C3_BASE_ADDR
Signature · 1 line
1.8.0
PATCH 3/9 net: Merge asm/fsl_enet.h into fsl_mdio.h
In reply to Alison WangFrom: Claudiu Manoil <[email protected]>
fsl_enet.h defines the mapping of the usual MII management registers, which are included in the MDIO register block common to Freescale ethernet controllers. So it shouldn't depend on the CPU architecture but it should be actually part of the arch independent fsl_mdio.h.
To remove the arch dependency, merge the content of asm/fsl_enet.h into fsl_mdio.h.
Some files (like fm_eth.h) were simply including fsl_enet.h only for phy.h. These were updated to include phy.h instead.
--- arch/powerpc/include/asm/fsl_enet.h | 24 ------------------------ board/freescale/mpc8360emds/mpc8360emds.c | 2 +- board/freescale/mpc837xemds/mpc837xemds.c | 1 - drivers/net/fm/dtsec.c | 1 - drivers/net/fm/fm.h | 2 +- drivers/net/fm/init.c | 1 + drivers/net/fm/memac.c | 1 - drivers/net/fm/tgec.c | 1 - drivers/net/fsl_mdio.c | 1 - drivers/qe/uec.h | 1 - include/fm_eth.h | 2 +- include/fsl_mdio.h | 13 ++++++++++++- include/tsec.h | 2 +- 13 files changed, 17 insertions(+), 35 deletions(-) delete mode 100644 arch/powerpc/include/asm/fsl_enet.h
arch/powerpc/include/asm/fsl_enet.h deleted +0 -24
@@ -1,24 +0,0 @@ -/* -* Copyright 2010 Freescale Semiconductor, Inc. -* -* SPDX-License-Identifier: GPL-2.0+ -*/ - -#ifndef __ASM_PPC_FSL_ENET_H -#define __ASM_PPC_FSL_ENET_H - -#include <phy.h> - -struct tsec_mii_mng { -u32 miimcfg;/* MII management configuration reg */ -u32 miimcom;/* MII management command reg */ -u32 miimadd;/* MII management address reg */ -u32 miimcon;/* MII management control reg */ -u32 miimstat;/* MII management status reg */ -u32 miimind;/* MII management indication reg */ -u32 ifstat;/* Interface Status Register */ -} __attribute__ ((packed)); - -int fdt_fixup_phy_connection (void *blob,int offset,phy_interface_t phyc); - -#endif /* __ASM_PPC_FSL_ENET_H */
board/freescale/mpc8360emds/mpc8360emds.c +1 -1
@@ -11,13 +11,13 @@#include <i2c.h> #include <miiphy.h> #include <phy.h> +#include <fsl_mdio.h> #if defined(CONFIG_PCI )#include <pci.h> #endif #include <spd_sdram.h> #include <asm/mmu.h> #include <asm/io.h> -#include <asm/fsl_enet.h> #include <asm/mmu.h> #if defined(CONFIG_OF_LIBFDT )#include <libfdt.h>
board/freescale/mpc837xemds/mpc837xemds.c +0 -1
@@ -10,7 +10,6 @@#include <i2c.h> #include <asm/io.h> #include <asm/fsl_mpc83xx_serdes.h> -#include <asm/fsl_enet.h> #include <spd_sdram.h> #include <tsec.h> #include <libfdt.h>
drivers/net/fm/dtsec.c +0 -1
@@ -7,7 +7,6 @@#include <common.h> #include <asm/types.h> #include <asm/io.h> -#include <asm/fsl_enet.h> #include <asm/fsl_dtsec.h> #include <fsl_mdio.h> #include <phy.h>
drivers/net/fm/fm.h +1 -1
@@ -8,8 +8,8 @@#define __FM_H__#include <common.h> +#include <phy.h> #include <fm_eth.h> -#include <asm/fsl_enet.h> #include <asm/fsl_fman.h> /* Port ID */
drivers/net/fm/init.c +1 -0
@@ -6,6 +6,7 @@#include <common.h> #include <asm/io.h> #include <asm/fsl_serdes.h> +#include <fsl_mdio.h> #include "fm.h"
drivers/net/fm/memac.c +0 -1
@@ -12,7 +12,6 @@#include <phy.h> #include <asm/types.h> #include <asm/io.h> -#include <asm/fsl_enet.h> #include <asm/fsl_memac.h> #include "fm.h"
drivers/net/fm/tgec.c +0 -1
@@ -12,7 +12,6 @@#include <phy.h> #include <asm/types.h> #include <asm/io.h> -#include <asm/fsl_enet.h> #include <asm/fsl_tgec.h> #include "fm.h"
drivers/net/fsl_mdio.c +0 -1
@@ -11,7 +11,6 @@#include <fsl_mdio.h> #include <asm/io.h> #include <asm/errno.h> -#include <asm/fsl_enet.h> void tsec_local_mdio_write (struct tsec_mii_mng __iomem *phyregs,int port_addr,int dev_addr,int regnum,int value)
drivers/qe/uec.h +0 -1
@@ -13,7 +13,6 @@#include "qe.h" #include "uccf.h" #include <phy.h> -#include <asm/fsl_enet.h> #define MAX_TX_THREADS 8#define MAX_RX_THREADS 8
include/fm_eth.h +1 -1
@@ -8,8 +8,8 @@#define __FM_ETH_H__#include <common.h> +#include <phy.h> #include <asm/types.h> -#include <asm/fsl_enet.h> enum fm_port {FM1_DTSEC1 ,
include/fsl_mdio.h +12 -1
@@ -10,7 +10,18 @@#include <net.h> #include <miiphy.h> -#include <asm/fsl_enet.h> + +struct tsec_mii_mng { +u32 miimcfg;/* MII management configuration reg */ +u32 miimcom;/* MII management command reg */ +u32 miimadd;/* MII management address reg */ +u32 miimcon;/* MII management control reg */ +u32 miimstat;/* MII management status reg */ +u32 miimind;/* MII management indication reg */ +u32 ifstat;/* Interface Status Register */ +} __packed; + +int fdt_fixup_phy_connection (void *blob,int offset,phy_interface_t phyc);/* PHY register offsets */ #define PHY_EXT_PAGE_ACCESS 0x1f
include/tsec.h +1 -1
@@ -20,7 +20,7 @@#include <net.h> #include <config.h> #include <phy.h> -#include <asm/fsl_enet.h> +#include <fsl_mdio.h> #define TSEC_SIZE 0x01000#define TSEC_MDIO_OFFSET 0x01000
Signature · 1 line
1.8.0
PATCH 4/9 arm: ls102xa: Add etsec support for LS102xA
In reply to Alison Wang--- drivers/net/fsl_mdio.c | 15 ++++++++++++--- drivers/net/tsec.c | 7 +++++++ include/tsec.h | 7 ++++++- 3 files changed, 25 insertions(+), 4 deletions(-)
drivers/net/fsl_mdio.c +12 -3
@@ -12,6 +12,15 @@#include <asm/io.h> #include <asm/errno.h> +void tsec_mdio_sync (void ) +{ +#if defined(CONFIG_PPC ) + asm("sync" ); +#elif defined(CONFIG_ARM ) + asm("dsb" ); +#endif +} +void tsec_local_mdio_write (struct tsec_mii_mng __iomem *phyregs,int port_addr,int dev_addr,int regnum,int value) {
@@ -19,7 +28,7 @@ void tsec_local_mdio_write(struct tsec_mii_mng __iomem *phyregs, int port_addr,out_be32 (&phyregs->miimadd, (port_addr <<8 ) | (regnum &0x1f ));out_be32 (&phyregs->miimcon, value); - asm("sync" ); +tsec_mdio_sync ();while ((in_be32 (&phyregs->miimind) &MIIMIND_BUSY ) && timeout--) ;
@@ -37,11 +46,11 @@ int tsec_local_mdio_read(struct tsec_mii_mng __iomem *phyregs, int port_addr,/* Clear the command register, and wait */ out_be32 (&phyregs->miimcom,0 ); - asm("sync" ); +tsec_mdio_sync ();/* Initiate a read command, and wait */ out_be32 (&phyregs->miimcom,MIIMCOM_READ_CYCLE ); - asm("sync" ); +tsec_mdio_sync ();/* Wait for the the indication that the read is done */ while ((in_be32(&phyregs->miimind) & (MIIMIND_NOTVALID | MIIMIND_BUSY))
drivers/net/tsec.c +7 -0
@@ -20,6 +20,7 @@#include <fsl_mdio.h> #include <asm/errno.h> #include <asm/processor.h> +#include <asm/io.h> DECLARE_GLOBAL_DATA_PTR ;
@@ -270,6 +271,9 @@ void redundant_init(struct eth_device *dev)out_be32 (®s->tstat,TSTAT_CLEAR_THALT );out_be32 (®s->rstat,RSTAT_CLEAR_RHALT );clrbits_be32 (®s->dmactrl,DMACTRL_GRS |DMACTRL_GTS ); +#ifdef CONFIG_LS102xA +setbits_be32 (®s->dmactrl,DMACTRL_LE ); +#endif do { uint16_t status;
@@ -366,6 +370,9 @@ static void startup_tsec(struct eth_device *dev)out_be32 (®s->tstat,TSTAT_CLEAR_THALT );out_be32 (®s->rstat,RSTAT_CLEAR_RHALT );clrbits_be32 (®s->dmactrl,DMACTRL_GRS |DMACTRL_GTS ); +#ifdef CONFIG_LS102xA +setbits_be32 (®s->dmactrl,DMACTRL_LE ); +#endif }/* This returns the status bits of the device. The return value
include/tsec.h +6 -1
@@ -20,10 +20,14 @@#include <net.h> #include <config.h> #include <phy.h> -#include <fsl_mdio.h> +#ifdef CONFIG_LS102xA +#define TSEC_SIZE 0x40000 +#define TSEC_MDIO_OFFSET 0x40000 +#else #define TSEC_SIZE 0x01000#define TSEC_MDIO_OFFSET 0x01000 +#endif #define CONFIG_SYS_MDIO_BASE_ADDR (MDIO_BASE_ADDR + 0x520)
@@ -128,6 +132,7 @@#define DMACTRL_INIT_SETTINGS 0x000000c3#define DMACTRL_GRS 0x00000010#define DMACTRL_GTS 0x00000008 +#define DMACTRL_LE 0x00008000#define TSTAT_CLEAR_THALT 0x80000000#define RSTAT_CLEAR_RHALT 0x00800000
Signature · 1 line
1.8.0
PATCH 5/9 arm: ls102xa: Add esdhc support for LS102xA
In reply to Alison Wang--- drivers/mmc/fsl_esdhc.c | 4 ++-- include/fsl_esdhc.h | 14 +++++++++++++- 2 files changed, 15 insertions(+), 3 deletions(-)
drivers/mmc/fsl_esdhc.c +2 -2
@@ -96,7 +96,7 @@ static uint esdhc_xfertyp(struct mmc_cmd *cmd, struct mmc_data *data)else if (cmd->resp_type &MMC_RSP_PRESENT ) xfertyp |=XFERTYP_RSPTYP_48 ; -#if defined(CONFIG_MX53 ) || defined(CONFIG_PPC_T4240 ) +#if defined(CONFIG_MX53 ) || defined(CONFIG_PPC_T4240 ) || defined(CONFIG_LS102xA)if (cmd->cmdidx ==MMC_CMD_STOP_TRANSMISSION ) xfertyp |=XFERTYP_CMDTYP_ABORT ;#endif
@@ -561,7 +561,7 @@ int fsl_esdhc_initialize(bd_t *bis, struct fsl_esdhc_cfg *cfg)memset (&cfg->cfg,0 ,sizeof (cfg->cfg)); voltage_caps =0 ; - caps = regs->hostcapblt; + caps =esdhc_read32 (®s->hostcapblt);#ifdef CONFIG_SYS_FSL_ERRATUM_ESDHC135 caps = caps & ~(ESDHC_HOSTCAPBLT_SRS |
include/fsl_esdhc.h +13 -1
@@ -162,7 +162,19 @@ struct fsl_esdhc_cfg { };/* Select the correct accessors depending on endianess */ -#if __BYTE_ORDER == __LITTLE_ENDIAN +#if definedCONFIG_SYS_FSL_ESDHC_LE +#define esdhc_read32 in_le32 +#define esdhc_write32 out_le32 +#define esdhc_clrsetbits32 clrsetbits_le32 +#define esdhc_clrbits32 clrbits_le32 +#define esdhc_setbits32 setbits_le32 +#elif defined(CONFIG_SYS_FSL_ESDHC_BE ) +#define esdhc_read32 in_be32 +#define esdhc_write32 out_be32 +#define esdhc_clrsetbits32 clrsetbits_be32 +#define esdhc_clrbits32 clrbits_be32 +#define esdhc_setbits32 setbits_be32 +#elif __BYTE_ORDER == __LITTLE_ENDIAN#define esdhc_read32 in_le32#define esdhc_write32 out_le32#define esdhc_clrsetbits32 clrsetbits_le32
Signature · 1 line
1.8.0
PATCH 6/9 driver/ddr/freescale: Add support of accumulate ECC
In reply to Alison WangFrom: York Sun <[email protected]>
If less than 8 ECC pins are used for DDR data bus width smaller than 64 bits, the 8-bit ECC code will be transmitted/received across several beats, and it will be used to check 64-bits of data once 8-bits of ECC are accumulated.
--- drivers/ddr/fsl/ctrl_regs.c | 5 +++++ 1 file changed, 5 insertions(+)
drivers/ddr/fsl/ctrl_regs.c +5 -0
@@ -693,6 +693,7 @@ static void set_ddr_sdram_cfg(fsl_ddr_cfg_regs_t *ddr,unsigned int x32_en =0 ;/* x32 enable */ unsigned int pchb8 =0 ;/* precharge bit 8 enable */ unsigned int hse;/* Global half strength override */ +unsigned int acc_ecc_en =0 ;/* Accumulated ECC enable */ unsigned int mem_halt =0 ;/* memory controller halt */ unsigned int bi =0 ;/* Bypass initialization */
@@ -736,6 +737,9 @@ static void set_ddr_sdram_cfg(fsl_ddr_cfg_regs_t *ddr, ba_intlv_ctl = popts->ba_intlv_ctl; hse = popts->half_strength_driver_enable; +/* set when ddr bus width < 64 */ + acc_ecc_en = (dbw !=0 && ecc_en ==1 ) ?1 :0 ; + ddr->ddr_sdram_cfg = (0 | ((mem_en &0x1 ) <<31 ) | ((sren & 0x1) << 30)
@@ -752,6 +756,7 @@ static void set_ddr_sdram_cfg(fsl_ddr_cfg_regs_t *ddr, | ((x32_en & 0x1) << 5) | ((pchb8 &0x1 ) <<4 ) | ((hse &0x1 ) <<3 ) + | ((acc_ecc_en &0x1 ) <<2 ) | ((mem_halt &0x1 ) <<1 ) | ((bi &0x1 ) <<0 ) );
Signature · 1 line
1.8.0
PATCH 7/9 driver/ddr/freescale: Fix DDR3 driver for ARM
In reply to Alison WangFrom: York Sun <[email protected]>
Reading DDR register should use ddr_in32() for proper endianess. This patch fixes incorrect waiting time for ARM platforms.
--- drivers/ddr/fsl/arm_ddr_gen3.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/ddr/fsl/arm_ddr_gen3.c +1 -1
@@ -194,7 +194,7 @@ step2:* For example, 2GB on 666MT/s 64-bit bus takes about 402ms * Let's wait for 800ms */ - bus_width =3 - ((ddr->sdram_cfg &SDRAM_CFG_DBW_MASK ) + bus_width =3 - ((ddr_in32 (&ddr->sdram_cfg) &SDRAM_CFG_DBW_MASK ) >>SDRAM_CFG_DBW_SHIFT ); timeout = ((total_gb_size_per_controller << (6 - bus_width)) *100 / (get_ddr_freq (0 ) >>20 )) <<1 ;
Signature · 1 line
1.8.0
PATCH 8/9 driver/ddr/fsl: Add support of overriding chip select write leveling
In reply to Alison WangFrom: York Sun <[email protected]>
JEDEC spec allows DRAM vendors to use prime DQ for write leveling. This is not an issue unless some DQ pins are not connected. If a platform uses regular DIMMs but with reduced DDR ECC pins, the prime DQ may end up on those floating pins for the second rank. The workaround is to use a known good chip select for this purpose.
--- drivers/ddr/fsl/ctrl_regs.c | 3 +++ drivers/ddr/fsl/interactive.c | 2 ++ include/fsl_ddr_sdram.h | 2 ++ 3 files changed, 7 insertions(+)
drivers/ddr/fsl/ctrl_regs.c +3 -0
@@ -2273,6 +2273,9 @@ compute_fsl_memctl_config_regs(const memctl_options_t *popts,if (ip_rev >0x40400 ) unq_mrs_en =1 ; +if (ip_rev >0x40700 ) + ddr->debug[18 ] = popts->cswl_override; +set_ddr_sdram_cfg_2 (ddr, popts, unq_mrs_en);set_ddr_sdram_mode (ddr, popts, common_dimm, cas_latency, additive_latency, unq_mrs_en);
drivers/ddr/fsl/interactive.c +2 -0
@@ -510,6 +510,7 @@ static void fsl_ddr_options_edit(fsl_ddr_info_t *pinfo,CTRL_OPTIONS (wrlvl_override),CTRL_OPTIONS (wrlvl_sample),CTRL_OPTIONS (wrlvl_start), +CTRL_OPTIONS (cswl_override),CTRL_OPTIONS (rcw_override),CTRL_OPTIONS (rcw_1), CTRL_OPTIONS(rcw_2),
@@ -800,6 +801,7 @@ static void print_memctl_options(const memctl_options_t *popts)CTRL_OPTIONS (wrlvl_override),CTRL_OPTIONS (wrlvl_sample),CTRL_OPTIONS (wrlvl_start), +CTRL_OPTIONS_HEX (cswl_override),CTRL_OPTIONS (rcw_override),CTRL_OPTIONS (rcw_1), CTRL_OPTIONS(rcw_2),
include/fsl_ddr_sdram.h +2 -0
@@ -281,6 +281,7 @@ typedef struct memctl_options_partial_s {#define DDR_DATA_BUS_WIDTH_64 0#define DDR_DATA_BUS_WIDTH_32 1#define DDR_DATA_BUS_WIDTH_16 2 +#define DDR_CSWL_CS0 0x04000001/* * Generalized parameters for memory controller configuration, * might be a little specific to the FSL memory controller
@@ -340,6 +341,7 @@ typedef struct memctl_options_s {unsigned int cpo_override;unsigned int write_data_delay;/* DQS adjust */ +unsigned int cswl_override;unsigned int wrlvl_override;unsigned int wrlvl_sample;/* Write leveling */ unsigned int wrlvl_start;
Signature · 1 line
1.8.0
PATCH 9/9 arm: ls102xa: Add basic support for LS1021AQDS board
In reply to Alison Wang--- board/freescale/ls1021aqds/Makefile | 8 + board/freescale/ls1021aqds/README | 112 +++++++ board/freescale/ls1021aqds/ddr.c | 169 +++++++++++ board/freescale/ls1021aqds/ddr.h | 64 ++++ board/freescale/ls1021aqds/ls1021aqds.c | 208 +++++++++++++ board/freescale/ls1021aqds/ls1021aqds_qixis.h | 35 +++ boards.cfg | 1 + include/common.h | 5 +- include/configs/ls1021aqds.h | 418 ++++++++++++++++++++++++++ 9 files changed, 1017 insertions(+), 3 deletions(-) create mode 100644 board/freescale/ls1021aqds/Makefile create mode 100644 board/freescale/ls1021aqds/README create mode 100644 board/freescale/ls1021aqds/ddr.c create mode 100644 board/freescale/ls1021aqds/ddr.h create mode 100644 board/freescale/ls1021aqds/ls1021aqds.c create mode 100644 board/freescale/ls1021aqds/ls1021aqds_qixis.h create mode 100644 include/configs/ls1021aqds.h
board/freescale/ls1021aqds/Makefile new file +8 -0
@@ -0,0 +1,8 @@ +# +# Copyright 2014 Freescale Semiconductor, Inc. +# +# SPDX-License-Identifier: GPL-2.0+ +# + +obj-y += ls1021aqds.o +obj-y += ddr.o
board/freescale/ls1021aqds/README new file +112 -0
112 lines not on this page · raw message
board/freescale/ls1021aqds/ddr.c new file +169 -0
169 lines not on this page · raw message
board/freescale/ls1021aqds/ddr.h new file +64 -0
64 lines not on this page · raw message
board/freescale/ls1021aqds/ls1021aqds.c new file +208 -0
208 lines not on this page · raw message
board/freescale/ls1021aqds/ls1021aqds_qixis.h new file +35 -0
@@ -0,0 +1,35 @@ +/* +* Copyright 2014 Freescale Semiconductor, Inc. +* +* SPDX-License-Identifier: GPL-2.0+ +*/ + +#ifndef __LS1021AQDS_QIXIS_H__ +#define __LS1021AQDS_QIXIS_H__ + +/* Definitions of QIXIS Registers for LS1021AQDS */ + +/* BRDCFG4[4:7]] select EC1 and EC2 as a pair */ +#define BRDCFG4_EMISEL_MASK 0xe0 +#define BRDCFG4_EMISEL_SHIFT 5 + +/* SYSCLK */ +#define QIXIS_SYSCLK_66 0x0 +#define QIXIS_SYSCLK_83 0x1 +#define QIXIS_SYSCLK_100 0x2 +#define QIXIS_SYSCLK_125 0x3 +#define QIXIS_SYSCLK_133 0x4 +#define QIXIS_SYSCLK_150 0x5 +#define QIXIS_SYSCLK_160 0x6 +#define QIXIS_SYSCLK_166 0x7 +#define QIXIS_SYSCLK_64 0x8 + +/* DDRCLK */ +#define QIXIS_DDRCLK_66 0x0 +#define QIXIS_DDRCLK_100 0x1 +#define QIXIS_DDRCLK_125 0x2 +#define QIXIS_DDRCLK_133 0x3 + +#define QIXIS_SRDS1CLK_100 0x0 + +#endif
boards.cfg +1 -0
@@ -298,6 +298,7 @@ Active arm armv7 exynos samsung trats2 Active arm armv7 exynos samsung universal_c210 s5pc210_universal - Przemyslaw Marczak <[email protected]> Active arm armv7 highbank - highbank highbank - Rob Herring <[email protected]> Active arm armv7 keystone ti k2hk_evm k2hk_evm - Vitaly Andrianov <[email protected]> +Active arm armv7 ls102xa freescale ls1021aqds ls1021aqds_nor ls1021aqds - Active arm armv7 mx5 denx m53evk m53evk m53evk:IMX_CONFIG=board/denx/m53evk/imximage.cfg Marek Vasut <[email protected]> Active arm armv7 mx5 esg ima3-mx53 ima3-mx53 ima3-mx53:IMX_CONFIG=board/esg/ima3-mx53/imximage.cfg - Active arm armv7 mx5 freescale mx51evk mx51evk mx51evk:IMX_CONFIG=board/freescale/mx51evk/imximage.cfg Stefano Babic <[email protected]>
include/common.h +2 -3
@@ -693,9 +693,6 @@ ulong get_PERCLK3(void);ulong get_bus_freq (ulong );int get_serial_clock (void ); -#if defined(CONFIG_MPC83xx) || defined(CONFIG_MPC85xx) -ulong get_ddr_freq (ulong ); -#endif #if defined(CONFIG_MPC85xx)typedef MPC85xx_SYS_INFO sys_info_t ;void get_sys_info (sys_info_t * );
@@ -711,6 +708,8 @@ static inline ulong get_ddr_freq(ulong dummy) {return get_bus_freq (dummy); } +#else +ulong get_ddr_freq (ulong );#endif #if defined(CONFIG_4xx)
include/configs/ls1021aqds.h new file +418 -0
418 lines not on this page · raw message
Signature · 1 line
1.8.0
Fabio Estevam
reviewerPATCH 9/9 arm: ls102xa: Add basic support for LS1021AQDS board
include/configs/ls1021aqds.h line 362
Quoted 6 lines · Alison Wang
include/configs/ls1021aqds.h new file +6
-0+#define CONFIG_EXTRA_ENV_SETTINGS \ + "ethaddr=00:e0:0c:bc:e5:60\0" \ + "eth1addr=00:e0:0c:bc:e5:61\0" \ + "eth2addr=00:e0:0c:bc:e5:62\0" \ + "eth3addr=00:e0:0c:bc:e5:63\0" \ + "ipaddr=192.168.1.100\0" \
You should not hardcode any ethaddr/ipaddr.
PATCH 9/9 arm: ls102xa: Add basic support for LS1021AQDS board
Quoted 10 lines · Fabio Estevam
include/configs/ls1021aqds.h line 362
Quoted 6 lines · Alison Wang
include/configs/ls1021aqds.h new file +6
-0+#define CONFIG_EXTRA_ENV_SETTINGS \ + "ethaddr=00:e0:0c:bc:e5:60\0" \ + "eth1addr=00:e0:0c:bc:e5:61\0" \ + "eth2addr=00:e0:0c:bc:e5:62\0" \ + "eth3addr=00:e0:0c:bc:e5:63\0" \ + "ipaddr=192.168.1.100\0" \You should not hardcode any ethaddr/ipaddr.
and forgot to add the board maintainer.
Signature · 3 lines
Otavio Salvador O.S. Systems http://www.ossystems.com.br http://code.ossystems.com.br Mobile: +55 (53) 9981-7854 Mobile: +1 (347) 903-9750
PATCH 9/9 arm: ls102xa: Add basic support for LS1021AQDS board
In reply to Fabio EstevamHi, Fabio,
Quoted 6 lines · Alison Wang
+#define
CONFIG_EXTRA_ENV_SETTINGS????? \
+?????? "ethaddr=00:e0:0c:bc:e5:60\0"?? \
+?????? "eth1addr=00:e0:0c:bc:e5:61\0"? \
+?????? "eth2addr=00:e0:0c:bc:e5:62\0"? \
+?????? "eth3addr=00:e0:0c:bc:e5:63\0"? \
+?????? "ipaddr=192.168.1.100\0"??????? \
You should not hardcode any ethaddr/ipaddr.
[Alison Wang] I will remove them in v2. Thanks.
Best Regards,
Alison Wang
cover arm: ls102xa: Add Freescale LS102xA SoC and LS1021AQDS board support
In reply to Alison WangNo comment on the commit itself, but does it really need all of the marketing BS at the top?
Quoted 83 lines · Alison Wang
This series contain the support for Freescale LS102xA SoC and LS1021AQDS board.
The QorIQ LS1 family is built on Layerscape architecture, the industry's first
software-aware, core-agnostic networking architecture to offer unprecedented
efficiency and scale.Freescale LS102xA is a set of SoCs combines two ARM Cortex-A7 cores that have
been optimized for high reliability and pack the highest level of integration
available for sub-3 W embedded communications processors with Layerscape architecture and with a comprehensive enablement model focused on ease of programmability.For the detail information about LS1021AQDS board, please refer to README in the patch.
----------------------------------------------------------------
Alison Wang (5):
arm: ls102xa: Add Freescale LS102xA SoC support
arm: ls102xa: Add i2c support for LS102xA
arm: ls102xa: Add etsec support for LS102xA
arm: ls102xa: Add esdhc support for LS102xA
arm: ls102xa: Add basic support for LS1021AQDS boardClaudiu Manoil (1):
net: Mergeasm/fsl_enet.hintofsl_mdio.hYork Sun (3):
driver/ddr/freescale: Add support of accumulate ECC driver/ddr/freescale: Fix DDR3 driver for ARM driver/ddr/fsl: Add support of overriding chip select write levelingarch/powerpc/include/asm/fsl_enet.h | 24 -- board/freescale/ls1021aqds/Makefile | 8 + board/freescale/ls1021aqds/README | 112 +++++++++ board/freescale/ls1021aqds/ddr.c | 169 +++++++++++++ board/freescale/ls1021aqds/ddr.h | 64 +++++ board/freescale/ls1021aqds/ls1021aqds.c | 208 ++++++++++++++++ board/freescale/ls1021aqds/ls1021aqds_qixis.h | 35 +++ board/freescale/mpc8360emds/mpc8360emds.c | 2 +- board/freescale/mpc837xemds/mpc837xemds.c | 1 - boards.cfg | 1 + drivers/ddr/fsl/arm_ddr_gen3.c | 2 +- drivers/ddr/fsl/ctrl_regs.c | 8 + drivers/ddr/fsl/interactive.c | 2 + drivers/i2c/mxc_i2c.c | 2 +- drivers/mmc/fsl_esdhc.c | 4 +- drivers/net/fm/dtsec.c | 1 - drivers/net/fm/fm.h | 2 +- drivers/net/fm/init.c | 1 + drivers/net/fm/memac.c | 1 - drivers/net/fm/tgec.c | 1 - drivers/net/fsl_mdio.c | 16 +- drivers/net/tsec.c | 7 + drivers/qe/uec.h | 1 - include/common.h | 5 +- include/configs/ls1021aqds.h | 418 ++++++++++++++++++++++++++++++++ include/fm_eth.h | 2 +- include/fsl_ddr_sdram.h | 2 + include/fsl_esdhc.h | 14 +- include/fsl_mdio.h | 13 +- include/tsec.h | 7 +- 30 files changed, 1087 insertions(+), 46 deletions(-) delete mode 100644 arch/powerpc/include/asm/fsl_enet.h create mode 100644 board/freescale/ls1021aqds/Makefile create mode 100644 board/freescale/ls1021aqds/README create mode 100644 board/freescale/ls1021aqds/ddr.c create mode 100644 board/freescale/ls1021aqds/ddr.h create mode 100644 board/freescale/ls1021aqds/ls1021aqds.c create mode 100644 board/freescale/ls1021aqds/ls1021aqds_qixis.h create mode 100644 include/configs/ls1021aqds.h_______________________________________________
U-Boot mailing list
U-Boot at lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot