am33xx: support non-ti boards
v2 cover am33xx: support non-ti boards
The am33xx code currently contains a number of details specific to the ti(-derived) boards in the common code. This series restructures the arch code to make it possible to add other boards.
This series does not yet any new boards, as the board I'm working on is using nand flash, and omap_gpmc hasn't been updated for bch8 / elm support yet. I've started looking at it, but no code so far.
Instead it has been tested on Beaglebone.
Changes since v1:
- Rebased against u-boot-ti
- Take Tom Rini's feedback into account
- evm.{c,h} -> board.{c,h}
- use DDR part numbers in defines and leave in ddr_defs.h (without MICRON_ prefix to stay < 80 chars)
Peter Korsgaard (6):
am33xx/board.c: make wdtimer/uart_base static
am33xx: move ti i2c baseboard header handling to board/ti/am335x/ am33xx/board: use cpu_mmc_init() for default mmc initialization
am33xx: move generic parts of pinmux handling out from
board/ti/am335x
am33xx: support board specific ddr settings am33xx/ddr_defs.h: rename DDR2/DDR3 defines to their actual part
numbers
arch/arm/cpu/armv7/am33xx/Makefile | 1 +
arch/arm/cpu/armv7/am33xx/board.c | 244 +-----------------
arch/arm/cpu/armv7/am33xx/emif4.c | 114 +--------
arch/arm/cpu/armv7/am33xx/mux.c | 33 +++
arch/arm/include/asm/arch-am33xx/ddr_defs.h | 69 +++---
arch/arm/include/asm/arch-am33xx/mux.h | 261 ++++++++++++++++++++
arch/arm/include/asm/arch-am33xx/sys_proto.h | 27 --
board/ti/am335x/Makefile | 1 +
.../cpu/armv7/am33xx => board/ti/am335x}/board.c | 138 +++++++----
.../sys_proto.h => board/ti/am335x/board.h | 24 +-
board/ti/am335x/mux.c | 250 +------------------
11 files changed, 447 insertions(+), 715 deletions(-)
create mode 100644 arch/arm/cpu/armv7/am33xx/mux.c
create mode 100644 arch/arm/include/asm/arch-am33xx/mux.h
copy {arch/arm/cpu/armv7/am33xx => board/ti/am335x}/board.c (64%)
copy arch/arm/include/asm/arch-am33xx/sys_proto.h => board/ti/am335x/board.h (75%)Signature · 1 line
1.7.10.4
PATCH v2 1/6 am33xx/board.c: make wdtimer/uart_base static
Only used here (and uart_base only for SPL).
--- arch/arm/cpu/armv7/am33xx/board.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
arch/arm/cpu/armv7/am33xx/board.c +4 -2
@@ -36,8 +36,10 @@DECLARE_GLOBAL_DATA_PTR ; -struct wd_timer *wdtimer = (struct wd_timer *)WDT_BASE ; -struct uart_sys *uart_base = (struct uart_sys *)DEFAULT_UART_BASE ; +static struct wd_timer *wdtimer = (struct wd_timer *)WDT_BASE ; +#ifdef CONFIG_SPL_BUILD +static struct uart_sys *uart_base = (struct uart_sys *)DEFAULT_UART_BASE ; +#endif static const struct gpio_bank gpio_bank_am33xx[4 ] = { { (void *)AM33XX_GPIO0_BASE ,METHOD_GPIO_24XX },
Signature · 1 line
1.7.10.4
PATCH v2 2/6 am33xx: move ti i2c baseboard header handling to board/ti/am335x/
In reply to Peter KorsgaardThe i2c header is specific to ti(-derived) boards, and not generic for all am335x boards.
---
arch/arm/cpu/armv7/am33xx/board.c | 242 --------------------
arch/arm/include/asm/arch-am33xx/sys_proto.h | 27 ---
board/ti/am335x/Makefile | 1 +
.../cpu/armv7/am33xx => board/ti/am335x}/board.c | 31 +--
.../sys_proto.h => board/ti/am335x/board.h | 24 +-
board/ti/am335x/mux.c | 1 +
6 files changed, 9 insertions(+), 317 deletions(-)
copy {arch/arm/cpu/armv7/am33xx => board/ti/am335x}/board.c (91%)
copy arch/arm/include/asm/arch-am33xx/sys_proto.h => board/ti/am335x/board.h (75%)arch/arm/cpu/armv7/am33xx/board.c +0 -242
@@ -36,11 +36,6 @@DECLARE_GLOBAL_DATA_PTR ; -static struct wd_timer *wdtimer = (struct wd_timer *)WDT_BASE ; -#ifdef CONFIG_SPL_BUILD -static struct uart_sys *uart_base = (struct uart_sys *)DEFAULT_UART_BASE ; -#endif -static const struct gpio_bank gpio_bank_am33xx[4 ] = { { (void *)AM33XX_GPIO0_BASE ,METHOD_GPIO_24XX }, { (void *)AM33XX_GPIO1_BASE ,METHOD_GPIO_24XX },
@@ -50,153 +45,6 @@ static const struct gpio_bank gpio_bank_am33xx[4] = {const struct gpio_bank *const omap_gpio_bank = gpio_bank_am33xx; -/* MII mode defines */ -#define MII_MODE_ENABLE 0x0 -#define RGMII_MODE_ENABLE 0xA - -/* GPIO that controls power to DDR on EVM-SK */ -#define GPIO_DDR_VTT_EN 7 - -static struct ctrl_dev *cdev = (struct ctrl_dev *)CTRL_DEVICE_BASE ; - -static struct am335x_baseboard_id __attribute__((section (".data" ))) header; - -static inline int board_is_bone (void ) -{ -return !strncmp (header.name,"A335BONE" ,HDR_NAME_LEN ); -} - -static inline int board_is_bone_lt (void ) -{ -return !strncmp (header.name,"A335BNLT" ,HDR_NAME_LEN ); -} - -static inline int board_is_evm_sk (void ) -{ -return !strncmp ("A335X_SK" , header.name,HDR_NAME_LEN ); -} - -/* -* Read header information from EEPROM into global structure. -*/ -static int read_eeprom (void ) -{ -/* Check if baseboard eeprom is available */ -if (i2c_probe (CONFIG_SYS_I2C_EEPROM_ADDR )) { -puts ("Could not probe the EEPROM; something fundamentally " -"wrong on the I2C bus.\n" ); -return -ENODEV ; - } - -/* read the eeprom using i2c */ -if (i2c_read (CONFIG_SYS_I2C_EEPROM_ADDR ,0 ,2 , (uchar *)&header, -sizeof (header))) { -puts ("Could not read the EEPROM; something fundamentally" -" wrong on the I2C bus.\n" ); -return -EIO ; - } - -if (header.magic !=0xEE3355AA ) { -/* -* read the eeprom using i2c again, -* but use only a 1 byte address -*/ -if (i2c_read (CONFIG_SYS_I2C_EEPROM_ADDR ,0 ,1 , - (uchar *)&header,sizeof (header))) { -puts ("Could not read the EEPROM; something " -"fundamentally wrong on the I2C bus.\n" ); -return -EIO ; - } - -if (header.magic !=0xEE3355AA ) { -printf ("Incorrect magic number (0x%x) in EEPROM\n" , - header.magic); -return -EINVAL ; - } - } - -return 0 ; -} - -/* UART Defines */ -#ifdef CONFIG_SPL_BUILD -#define UART_RESET (0x1 << 1) -#define UART_CLK_RUNNING_MASK 0x1 -#define UART_SMART_IDLE_EN (0x1 << 0x3) -#endif - -/* -* Determine what type of DDR we have. -*/ -static short inline board_memory_type (void ) -{ -/* The following boards are known to use DDR3. */ -if (board_is_evm_sk () ||board_is_bone_lt ()) -return EMIF_REG_SDRAM_TYPE_DDR3 ; - -return EMIF_REG_SDRAM_TYPE_DDR2 ; -} - -/* -* early system init of muxing and clocks. -*/ -void s_init (void ) -{ -/* WDT1 is already running when the bootloader gets control -* Disable it to avoid "random" resets -*/ -writel (0xAAAA , &wdtimer->wdtwspr); -while (readl (&wdtimer->wdtwwps) !=0x0 ) - ; -writel (0x5555 , &wdtimer->wdtwspr); -while (readl (&wdtimer->wdtwwps) !=0x0 ) - ; - -#ifdef CONFIG_SPL_BUILD -/* Setup the PLLs and the clocks for the peripherals */ -pll_init (); - -/* UART softreset */ -u32 regVal; - -enable_uart0_pin_mux (); - - regVal =readl (&uart_base->uartsyscfg); - regVal |=UART_RESET ; -writel (regVal, &uart_base->uartsyscfg); -while ((readl (&uart_base->uartsyssts) & -UART_CLK_RUNNING_MASK ) !=UART_CLK_RUNNING_MASK ) - ; - -/* Disable smart idle */ - regVal =readl (&uart_base->uartsyscfg); - regVal |=UART_SMART_IDLE_EN ; -writel (regVal, &uart_base->uartsyscfg); - - gd = &gdata; - -preloader_console_init (); - -/* Initalize the board header */ -enable_i2c0_pin_mux (); -i2c_init (CONFIG_SYS_I2C_SPEED ,CONFIG_SYS_I2C_SLAVE ); -if (read_eeprom () <0 ) -puts ("Could not get board ID.\n" ); - -enable_board_pin_mux (&header); -if (board_is_evm_sk ()) { -/* -* EVM SK 1.2A and later use gpio0_7 to enable DDR3. -* This is safe enough to do on older revs. -*/ -gpio_request (GPIO_DDR_VTT_EN ,"ddr_vtt_en" ); -gpio_direction_output (GPIO_DDR_VTT_EN ,1 ); - } - -config_ddr (board_memory_type ()); -#endif -} -#if defined(CONFIG_OMAP_HSMMC ) && !defined(CONFIG_SPL_BUILD )int board_mmc_init (bd_t *bis) {
@@ -215,93 +63,3 @@ void setup_clocks_for_console(void)/* Not yet implemented */ return ; } - -/* -* Basic board specific setup. Pinmux has been handled already. -*/ -int board_init (void ) -{ -i2c_init (CONFIG_SYS_I2C_SPEED ,CONFIG_SYS_I2C_SLAVE ); -if (read_eeprom () <0 ) -puts ("Could not get board ID.\n" ); - - gd->bd->bi_boot_params =PHYS_DRAM_1 +0x100 ; - -return 0 ; -} - -#ifdef CONFIG_DRIVER_TI_CPSW -static void cpsw_control (int enabled) -{ -/* VTP can be added here */ - -return ; -} - -static struct cpsw_slave_data cpsw_slaves[] = { - { - .slave_reg_ofs =0x208 , - .sliver_reg_ofs =0xd80 , - .phy_id =0 , - }, - { - .slave_reg_ofs =0x308 , - .sliver_reg_ofs =0xdc0 , - .phy_id =1 , - }, -}; - -static struct cpsw_platform_data cpsw_data = { - .mdio_base =AM335X_CPSW_MDIO_BASE , - .cpsw_base =AM335X_CPSW_BASE , - .mdio_div =0xff , - .channels =8 , - .cpdma_reg_ofs =0x800 , - .slaves =1 , - .slave_data = cpsw_slaves, - .ale_reg_ofs =0xd00 , - .ale_entries =1024 , - .host_port_reg_ofs =0x108 , - .hw_stats_reg_ofs =0x900 , - .mac_control = (1 <<5 ), - .control = cpsw_control, - .host_port_num =0 , - .version =CPSW_CTRL_VERSION_2 , -}; - -int board_eth_init (bd_t *bis) -{ -uint8_t mac_addr[6 ]; -uint32_t mac_hi, mac_lo; - -if (!eth_getenv_enetaddr ("ethaddr" , mac_addr)) { -debug ("<ethaddr> not set. Reading from E-fuse\n" ); -/* try reading mac address from efuse */ - mac_lo =readl (&cdev->macid0l); - mac_hi =readl (&cdev->macid0h); - mac_addr[0 ] = mac_hi &0xFF ; - mac_addr[1 ] = (mac_hi &0xFF00 ) >>8 ; - mac_addr[2 ] = (mac_hi &0xFF0000 ) >>16 ; - mac_addr[3 ] = (mac_hi &0xFF000000 ) >>24 ; - mac_addr[4 ] = mac_lo &0xFF ; - mac_addr[5 ] = (mac_lo &0xFF00 ) >>8 ; - -if (is_valid_ether_addr (mac_addr)) -eth_setenv_enetaddr ("ethaddr" , mac_addr); -else -return -1 ; - } - -if (board_is_bone () ||board_is_bone_lt ()) { -writel (MII_MODE_ENABLE , &cdev->miisel); - cpsw_slaves[0 ].phy_if = cpsw_slaves[1 ].phy_if = -PHY_INTERFACE_MODE_MII ; - }else { -writel (RGMII_MODE_ENABLE , &cdev->miisel); - cpsw_slaves[0 ].phy_if = cpsw_slaves[1 ].phy_if = -PHY_INTERFACE_MODE_RGMII ; - } - -return cpsw_register (&cpsw_data); -} -#endif
arch/arm/include/asm/arch-am33xx/sys_proto.h +0 -27
@@ -19,24 +19,6 @@#ifndef _SYS_PROTO_H_#define _SYS_PROTO_H_ -/* -* AM335x parts define a system EEPROM that defines certain sub-fields. -* We use these fields to in turn see what board we are on, and what -* that might require us to set or not set. -*/ -#define HDR_NO_OF_MAC_ADDR 3 -#define HDR_ETH_ALEN 6 -#define HDR_NAME_LEN 8 - -struct am335x_baseboard_id { -unsigned int magic; -char name[HDR_NAME_LEN ]; -char version[4 ]; -char serial[12 ]; -char config[32 ]; -char mac_addr[HDR_NO_OF_MAC_ADDR ][HDR_ETH_ALEN ]; -}; -#define BOARD_REV_ID 0x0u32 get_cpu_rev (void );
@@ -51,13 +33,4 @@ u32 get_device_type(void);void setup_clocks_for_console (void );void ddr_pll_config (unsigned int ddrpll_M); -/* -* We have three pin mux functions that must exist. We must be able to enable -* uart0, for initial output and i2c0 to read the main EEPROM. We then have a -* main pinmux function that can be overridden to enable all other pinmux that -* is required on the board. -*/ -void enable_uart0_pin_mux (void ); -void enable_i2c0_pin_mux (void ); -void enable_board_pin_mux (struct am335x_baseboard_id *header);#endif
board/ti/am335x/Makefile +1 -0
@@ -22,6 +22,7 @@ ifdef CONFIG_SPL_BUILD COBJS := mux.o endif +COBJS += board.o SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c) OBJS := $(addprefix $(obj),$(COBJS)) SOBJS := $(addprefix $(obj),$(SOBJS))
board/ti/am335x/board.c renamed from arch/arm/cpu/armv7/am33xx/board.c +2 -29
@@ -1,7 +1,7 @@/* * board.c * -* Common board functions for AM33XX based boards +* Board functions for TI AM335X based boards * * Copyright (C) 2011, Texas Instruments, Incorporated - http://www.ti.com/ *
@@ -33,6 +33,7 @@#include <i2c.h> #include <miiphy.h> #include <cpsw.h> +#include "board.h" DECLARE_GLOBAL_DATA_PTR ;
@@ -41,15 +42,6 @@ static struct wd_timer *wdtimer = (struct wd_timer *)WDT_BASE;static struct uart_sys *uart_base = (struct uart_sys *)DEFAULT_UART_BASE ;#endif -static const struct gpio_bank gpio_bank_am33xx[4 ] = { - { (void *)AM33XX_GPIO0_BASE ,METHOD_GPIO_24XX }, - { (void *)AM33XX_GPIO1_BASE ,METHOD_GPIO_24XX }, - { (void *)AM33XX_GPIO2_BASE ,METHOD_GPIO_24XX }, - { (void *)AM33XX_GPIO3_BASE ,METHOD_GPIO_24XX }, -}; - -const struct gpio_bank *const omap_gpio_bank = gpio_bank_am33xx; -/* MII mode defines */ #define MII_MODE_ENABLE 0x0#define RGMII_MODE_ENABLE 0xA
@@ -197,25 +189,6 @@ void s_init(void)#endif } -#if defined(CONFIG_OMAP_HSMMC ) && !defined(CONFIG_SPL_BUILD ) -int board_mmc_init (bd_t *bis) -{ -int ret; - - ret =omap_mmc_init (0 ,0 ,0 ); -if (ret) -return ret; - -return omap_mmc_init (1 ,0 ,0 ); -} -#endif - -void setup_clocks_for_console (void ) -{ -/* Not yet implemented */ -return ; -} -/* * Basic board specific setup. Pinmux has been handled already. */
board/ti/am335x/board.h renamed from arch/arm/include/asm/arch-am33xx/sys_proto.h +5 -19
@@ -1,7 +1,7 @@/* -* sys_proto.h +* board.h * -* System information header +* TI AM335x boards information header * * Copyright (C) 2011, Texas Instruments, Incorporated - http://www.ti.com/ *
@@ -16,11 +16,11 @@* GNU General Public License for more details. */ -#ifndef _SYS_PROTO_H_ -#define _SYS_PROTO_H_ +#ifndef _BOARD_H_ +#define _BOARD_H_/* -* AM335x parts define a system EEPROM that defines certain sub-fields. +* TI AM335x parts define a system EEPROM that defines certain sub-fields. * We use these fields to in turn see what board we are on, and what * that might require us to set or not set. */
@@ -37,20 +37,6 @@ struct am335x_baseboard_id {char mac_addr[HDR_NO_OF_MAC_ADDR ][HDR_ETH_ALEN ]; }; -#define BOARD_REV_ID 0x0 - -u32 get_cpu_rev (void ); -u32 get_sysboot_value (void ); - -#ifdef CONFIG_DISPLAY_CPUINFO -int print_cpuinfo (void ); -#endif - -extern struct ctrl_stat *cstat; -u32 get_device_type (void ); -void setup_clocks_for_console (void ); -void ddr_pll_config (unsigned int ddrpll_M); -/* * We have three pin mux functions that must exist. We must be able to enable * uart0, for initial output and i2c0 to read the main EEPROM. We then have a
board/ti/am335x/mux.c +1 -0
@@ -18,6 +18,7 @@#include <asm/arch/hardware.h> #include <asm/io.h> #include <i2c.h> +#include "board.h" #define MUX_CFG (value, offset) \ __raw_writel(value, (CTRL_BASE + offset));
Signature · 1 line
1.7.10.4
PATCH v2 2/6 am33xx: move ti i2c baseboard header handling to board/ti/am335x/
Quoted 4 lines · Peter Korsgaard
The i2c header is specific to ti(-derived) boards, and not generic for all am335x boards.
Signed-off-by Peter Korsgaard <[email protected]>
[snip]
Quoted 49 lines
arch/arm/cpu/armv7/am33xx/board.c +0
-49-/* -* early system init of muxing and clocks. -*/ -void s_init (void ) -{ -/* WDT1 is already running when the bootloader gets control -* Disable it to avoid "random" resets -*/ -writel (0xAAAA , &wdtimer->wdtwspr); -while (readl (&wdtimer->wdtwwps) !=0x0 ) - ; -writel (0x5555 , &wdtimer->wdtwspr); -while (readl (&wdtimer->wdtwwps) !=0x0 ) - ; - -#ifdef CONFIG_SPL_BUILD -/* Setup the PLLs and the clocks for the peripherals */ -pll_init (); - -/* UART softreset */ -u32 regVal; - -enable_uart0_pin_mux (); - - regVal =readl (&uart_base->uartsyscfg); - regVal |=UART_RESET ; -writel (regVal, &uart_base->uartsyscfg); -while ((readl (&uart_base->uartsyssts) & -UART_CLK_RUNNING_MASK ) !=UART_CLK_RUNNING_MASK ) - ; - -/* Disable smart idle */ - regVal =readl (&uart_base->uartsyscfg); - regVal |=UART_SMART_IDLE_EN ; -writel (regVal, &uart_base->uartsyscfg); - - gd = &gdata; - -preloader_console_init (); - -/* Initalize the board header */ -enable_i2c0_pin_mux (); -i2c_init (CONFIG_SYS_I2C_SPEED ,CONFIG_SYS_I2C_SLAVE ); -if (read_eeprom () <0 ) -puts ("Could not get board ID.\n" ); - -enable_board_pin_mux (&header); -if (board_is_evm_sk ()) { -/*
arch/arm/cpu/armv7/am33xx/board.c static const struct gpio_bank gpio_bank_am33xx[4] = { · line 198
Quoted 10 lines
arch/arm/cpu/armv7/am33xx/board.c +0
-10-* EVM SK 1.2A and later use gpio0_7 to enable DDR3. -* This is safe enough to do on older revs. -*/ -gpio_request (GPIO_DDR_VTT_EN ,"ddr_vtt_en" ); - gpio_direction_output(GPIO_DDR_VTT_EN, 1); - } - -config_ddr (board_memory_type ()); -#endif -}
My concern is that a lot of this should be general. But I'm willing to re-investigate how to do things once you're able to fully move your platform to mainline.
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20121018/fa05ea02/attachment.pgp>
PATCH v2 2/6 am33xx: move ti i2c baseboard header handling to board/ti/am335x/
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Tom" == Tom Rini <[email protected]> writes:
Hi,
Tom> My concern is that a lot of this should be general. But I'm Tom> willing to re-investigate how to do things once you're able to Tom> fully move your platform to mainline.
I agree (as long as there's hooks for special platform stuff), but it is hard to say what is really generic when we only support 1 board so far, so I suggest we wait and see what the commonalities will be.
It's also not a lot of code, s_init / board_init are only a few lines each.
Signature · 1 line
Bye, Peter Korsgaard
PATCH v2 3/6 am33xx/board: use cpu_mmc_init() for default mmc initialization
In reply to Peter KorsgaardSo platforms can override it with board_mmc_init() if needed.
--- arch/arm/cpu/armv7/am33xx/board.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/arm/cpu/armv7/am33xx/board.c +2 -2
@@ -46,10 +46,10 @@ static const struct gpio_bank gpio_bank_am33xx[4] = {const struct gpio_bank *const omap_gpio_bank = gpio_bank_am33xx;#if defined(CONFIG_OMAP_HSMMC ) && !defined(CONFIG_SPL_BUILD ) -int board_mmc_init (bd_t *bis) +int cpu_mmc_init (bd_t *bis) {int ret; - + ret =omap_mmc_init (0 ,0 ,0 );if (ret)return ret;
Signature · 1 line
1.7.10.4
PATCH v2 4/6 am33xx: move generic parts of pinmux handling out from board/ti/am335x
In reply to Peter KorsgaardSo they are available for other boards.
--- arch/arm/cpu/armv7/am33xx/Makefile | 1 + arch/arm/cpu/armv7/am33xx/mux.c | 33 ++++ arch/arm/include/asm/arch-am33xx/mux.h | 261 ++++++++++++++++++++++++++++++++ board/ti/am335x/mux.c | 249 +----------------------------- 4 files changed, 296 insertions(+), 248 deletions(-) create mode 100644 arch/arm/cpu/armv7/am33xx/mux.c create mode 100644 arch/arm/include/asm/arch-am33xx/mux.h
arch/arm/cpu/armv7/am33xx/Makefile +1 -0
@@ -21,6 +21,7 @@ COBJS += sys_info.o COBJS += ddr.o COBJS += emif4.o COBJS += board.o +COBJS += mux.o SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c) OBJS := $(addprefix $(obj),$(COBJS) $(COBJS-y) $(SOBJS))
arch/arm/cpu/armv7/am33xx/mux.c new file +33 -0
@@ -0,0 +1,33 @@ +/* +* mux.c +* +* Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License as +* published by the Free Software Foundation version 2. +* +* This program is distributed "as is" WITHOUT ANY WARRANTY of any +* kind, whether express or implied; without even the implied warranty +* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +*/ + +#include <common.h> +#include <asm/arch/mux.h> +#include <asm/arch/hardware.h> +#include <asm/io.h> + +/* +* Configure the pin mux for the module +*/ +void configure_module_pin_mux (struct module_pin_mux *mod_pin_mux) +{ +int i; + +if (!mod_pin_mux) +return ; + +for (i =0 ; mod_pin_mux[i].reg_offset !=-1 ; i++) +MUX_CFG (mod_pin_mux[i].val, mod_pin_mux[i].reg_offset); +}
arch/arm/include/asm/arch-am33xx/mux.h new file +261 -0
261 lines not on this page · raw message
board/ti/am335x/mux.c +1 -248
265 lines not on this page · raw message
Signature · 1 line
1.7.10.4
PATCH v2 5/6 am33xx: support board specific ddr settings
In reply to Peter KorsgaardMove the hardcoded ddr2/ddr3 settings for the ti boards to board code, so other boards can use different types/timings.
--- arch/arm/cpu/armv7/am33xx/emif4.c | 114 +++------------------------ arch/arm/include/asm/arch-am33xx/ddr_defs.h | 5 +- board/ti/am335x/board.c | 89 ++++++++++++++++++--- 3 files changed, 92 insertions(+), 116 deletions(-)
arch/arm/cpu/armv7/am33xx/emif4.c +11 -103
@@ -47,78 +47,6 @@ void dram_init_banksize(void)static struct vtp_reg *vtpreg = (struct vtp_reg *)VTP0_CTRL_ADDR ;static struct ddr_ctrl *ddrctrl = (struct ddr_ctrl *)DDR_CTRL_ADDR ; -static const struct ddr_data ddr2_data = { - .datardsratio0 = ((DDR2_RD_DQS <<30 )|(DDR2_RD_DQS <<20 ) - |(DDR2_RD_DQS <<10 )|(DDR2_RD_DQS <<0 )), - .datawdsratio0 = ((DDR2_WR_DQS <<30 )|(DDR2_WR_DQS <<20 ) - |(DDR2_WR_DQS <<10 )|(DDR2_WR_DQS <<0 )), - .datawiratio0 = ((DDR2_PHY_WRLVL <<30 )|(DDR2_PHY_WRLVL <<20 ) - |(DDR2_PHY_WRLVL <<10 )|(DDR2_PHY_WRLVL <<0 )), - .datagiratio0 = ((DDR2_PHY_GATELVL <<30 )|(DDR2_PHY_GATELVL <<20 ) - |(DDR2_PHY_GATELVL <<10 )|(DDR2_PHY_GATELVL <<0 )), - .datafwsratio0 = ((DDR2_PHY_FIFO_WE <<30 )|(DDR2_PHY_FIFO_WE <<20 ) - |(DDR2_PHY_FIFO_WE <<10 )|(DDR2_PHY_FIFO_WE <<0 )), - .datawrsratio0 = ((DDR2_PHY_WR_DATA <<30 )|(DDR2_PHY_WR_DATA <<20 ) - |(DDR2_PHY_WR_DATA <<10 )|(DDR2_PHY_WR_DATA <<0 )), - .datauserank0delay =DDR2_PHY_RANK0_DELAY , - .datadldiff0 =PHY_DLL_LOCK_DIFF , -}; - -static const struct cmd_control ddr2_cmd_ctrl_data = { - .cmd0csratio =DDR2_RATIO , - .cmd0dldiff =DDR2_DLL_LOCK_DIFF , - .cmd0iclkout =DDR2_INVERT_CLKOUT , - - .cmd1csratio =DDR2_RATIO , - .cmd1dldiff =DDR2_DLL_LOCK_DIFF , - .cmd1iclkout =DDR2_INVERT_CLKOUT , - - .cmd2csratio =DDR2_RATIO , - .cmd2dldiff =DDR2_DLL_LOCK_DIFF , - .cmd2iclkout =DDR2_INVERT_CLKOUT , -}; - -static const struct emif_regs ddr2_emif_reg_data = { - .sdram_config =DDR2_EMIF_SDCFG , - .ref_ctrl =DDR2_EMIF_SDREF , - .sdram_tim1 =DDR2_EMIF_TIM1 , - .sdram_tim2 =DDR2_EMIF_TIM2 , - .sdram_tim3 =DDR2_EMIF_TIM3 , - .emif_ddr_phy_ctlr_1 =DDR2_EMIF_READ_LATENCY , -}; - -static const struct ddr_data ddr3_data = { - .datardsratio0 =DDR3_RD_DQS , - .datawdsratio0 =DDR3_WR_DQS , - .datafwsratio0 =DDR3_PHY_FIFO_WE , - .datawrsratio0 =DDR3_PHY_WR_DATA , - .datadldiff0 =PHY_DLL_LOCK_DIFF , -}; - -static const struct cmd_control ddr3_cmd_ctrl_data = { - .cmd0csratio =DDR3_RATIO , - .cmd0dldiff =DDR3_DLL_LOCK_DIFF , - .cmd0iclkout =DDR3_INVERT_CLKOUT , - - .cmd1csratio =DDR3_RATIO , - .cmd1dldiff =DDR3_DLL_LOCK_DIFF , - .cmd1iclkout =DDR3_INVERT_CLKOUT , - - .cmd2csratio =DDR3_RATIO , - .cmd2dldiff =DDR3_DLL_LOCK_DIFF , - .cmd2iclkout =DDR3_INVERT_CLKOUT , -}; - -static struct emif_regs ddr3_emif_reg_data = { - .sdram_config =DDR3_EMIF_SDCFG , - .ref_ctrl =DDR3_EMIF_SDREF , - .sdram_tim1 =DDR3_EMIF_TIM1 , - .sdram_tim2 =DDR3_EMIF_TIM2 , - .sdram_tim3 =DDR3_EMIF_TIM3 , - .zq_config =DDR3_ZQ_CFG , - .emif_ddr_phy_ctlr_1 =DDR3_EMIF_READ_LATENCY , -}; -static void config_vtp (void ) { writel(readl(&vtpreg->vtp0ctrlreg) | VTP_CTRL_ENABLE,
@@ -134,46 +62,26 @@ static void config_vtp(void) ; } -void config_ddr (short ddr_type) +void config_ddr (unsigned int pll,unsigned int ioctrl, +const struct ddr_data *data,const struct cmd_control *ctrl, +const struct emif_regs *regs) { -int ddr_pll, ioctrl_val; -const struct emif_regs *emif_regs; -const struct ddr_data *ddr_data; -const struct cmd_control *cmd_ctrl_data; - -if (ddr_type ==EMIF_REG_SDRAM_TYPE_DDR2 ) { - ddr_pll =266 ; - cmd_ctrl_data = &ddr2_cmd_ctrl_data; - ddr_data = &ddr2_data; - ioctrl_val =DDR2_IOCTRL_VALUE ; - emif_regs = &ddr2_emif_reg_data; - }else if (ddr_type ==EMIF_REG_SDRAM_TYPE_DDR3 ) { - ddr_pll =303 ; - cmd_ctrl_data = &ddr3_cmd_ctrl_data; - ddr_data = &ddr3_data; - ioctrl_val =DDR3_IOCTRL_VALUE ; - emif_regs = &ddr3_emif_reg_data; - }else { -puts ("Unknown memory type" ); -hang (); - } -enable_emif_clocks (); -ddr_pll_config (ddr_pll); +ddr_pll_config (pll);config_vtp (); -config_cmd_ctrl (cmd_ctrl_data); +config_cmd_ctrl (ctrl); -config_ddr_data (0 , ddr_data); -config_ddr_data (1 , ddr_data); +config_ddr_data (0 , data); +config_ddr_data (1 , data); -config_io_ctrl (ioctrl_val); +config_io_ctrl (ioctrl);/* Set CKE to be controlled by EMIF/DDR PHY */ writel (DDR_CKE_CTRL_NORMAL , &ddrctrl->ddrckectrl);/* Program EMIF instance */ -config_ddr_phy (emif_regs); -set_sdram_timings (emif_regs); -config_sdram (emif_regs); +config_ddr_phy (regs); +set_sdram_timings (regs); +config_sdram (regs); }#endif
arch/arm/include/asm/arch-am33xx/ddr_defs.h +4 -1
@@ -29,6 +29,7 @@#define PHY_DLL_LOCK_DIFF 0x0#define DDR_CKE_CTRL_NORMAL 0x1 +/* Micron MT47H128M16RT-25E */ #define DDR2_EMIF_READ_LATENCY 0x100005/* Enable Dynamic Power Down */ #define DDR2_EMIF_TIM1 0x0666B3C9#define DDR2_EMIF_TIM2 0x243631CA
@@ -189,6 +190,8 @@ struct ddr_ctrl { unsigned int ddrckectrl; }; -void config_ddr (short ddr_type); +void config_ddr (unsigned int pll,unsigned int ioctrl, +const struct ddr_data *data,const struct cmd_control *ctrl, +const struct emif_regs *regs);#endif /* _DDR_DEFS_H */
board/ti/am335x/board.c +77 -12
103 lines not on this page · raw message
Signature · 1 line
1.7.10.4
PATCH v2 6/6 am33xx/ddr_defs.h: rename DDR2/DDR3 defines to their actual part numbers
In reply to Peter KorsgaardSo other parts can be added.
--- arch/arm/include/asm/arch-am33xx/ddr_defs.h | 64 +++++++-------- board/ti/am335x/board.c | 112 +++++++++++++++------------ 2 files changed, 94 insertions(+), 82 deletions(-)
arch/arm/include/asm/arch-am33xx/ddr_defs.h +32 -32
@@ -30,40 +30,40 @@#define DDR_CKE_CTRL_NORMAL 0x1/* Micron MT47H128M16RT-25E */ -#define DDR2_EMIF_READ_LATENCY 0x100005/* Enable Dynamic Power Down */ -#define DDR2_EMIF_TIM1 0x0666B3C9 -#define DDR2_EMIF_TIM2 0x243631CA -#define DDR2_EMIF_TIM3 0x0000033F -#define DDR2_EMIF_SDCFG 0x41805332 -#define DDR2_EMIF_SDREF 0x0000081a -#define DDR2_DLL_LOCK_DIFF 0x0 -#define DDR2_RATIO 0x80 -#define DDR2_INVERT_CLKOUT 0x00 -#define DDR2_RD_DQS 0x12 -#define DDR2_WR_DQS 0x00 -#define DDR2_PHY_WRLVL 0x00 -#define DDR2_PHY_GATELVL 0x00 -#define DDR2_PHY_WR_DATA 0x40 -#define DDR2_PHY_FIFO_WE 0x80 -#define DDR2_PHY_RANK0_DELAY 0x1 -#define DDR2_IOCTRL_VALUE 0x18B +#define MT47H128M16RT25E_EMIF_READ_LATENCY 0x100005 +#define MT47H128M16RT25E_EMIF_TIM1 0x0666B3C9 +#define MT47H128M16RT25E_EMIF_TIM2 0x243631CA +#define MT47H128M16RT25E_EMIF_TIM3 0x0000033F +#define MT47H128M16RT25E_EMIF_SDCFG 0x41805332 +#define MT47H128M16RT25E_EMIF_SDREF 0x0000081a +#define MT47H128M16RT25E_DLL_LOCK_DIFF 0x0 +#define MT47H128M16RT25E_RATIO 0x80 +#define MT47H128M16RT25E_INVERT_CLKOUT 0x00 +#define MT47H128M16RT25E_RD_DQS 0x12 +#define MT47H128M16RT25E_WR_DQS 0x00 +#define MT47H128M16RT25E_PHY_WRLVL 0x00 +#define MT47H128M16RT25E_PHY_GATELVL 0x00 +#define MT47H128M16RT25E_PHY_WR_DATA 0x40 +#define MT47H128M16RT25E_PHY_FIFO_WE 0x80 +#define MT47H128M16RT25E_PHY_RANK0_DELAY 0x1 +#define MT47H128M16RT25E_IOCTRL_VALUE 0x18B/* Micron MT41J128M16JT-125 */ -#define DDR3_EMIF_READ_LATENCY 0x06 -#define DDR3_EMIF_TIM1 0x0888A39B -#define DDR3_EMIF_TIM2 0x26337FDA -#define DDR3_EMIF_TIM3 0x501F830F -#define DDR3_EMIF_SDCFG 0x61C04AB2 -#define DDR3_EMIF_SDREF 0x0000093B -#define DDR3_ZQ_CFG 0x50074BE4 -#define DDR3_DLL_LOCK_DIFF 0x1 -#define DDR3_RATIO 0x40 -#define DDR3_INVERT_CLKOUT 0x1 -#define DDR3_RD_DQS 0x3B -#define DDR3_WR_DQS 0x85 -#define DDR3_PHY_WR_DATA 0xC1 -#define DDR3_PHY_FIFO_WE 0x100 -#define DDR3_IOCTRL_VALUE 0x18B +#define MT41J128MJT125_EMIF_READ_LATENCY 0x06 +#define MT41J128MJT125_EMIF_TIM1 0x0888A39B +#define MT41J128MJT125_EMIF_TIM2 0x26337FDA +#define MT41J128MJT125_EMIF_TIM3 0x501F830F +#define MT41J128MJT125_EMIF_SDCFG 0x61C04AB2 +#define MT41J128MJT125_EMIF_SDREF 0x0000093B +#define MT41J128MJT125_ZQ_CFG 0x50074BE4 +#define MT41J128MJT125_DLL_LOCK_DIFF 0x1 +#define MT41J128MJT125_RATIO 0x40 +#define MT41J128MJT125_INVERT_CLKOUT 0x1 +#define MT41J128MJT125_RD_DQS 0x3B +#define MT41J128MJT125_WR_DQS 0x85 +#define MT41J128MJT125_PHY_WR_DATA 0xC1 +#define MT41J128MJT125_PHY_FIFO_WE 0x100 +#define MT41J128MJT125_IOCTRL_VALUE 0x18B/** * Configure SDRAM
board/ti/am335x/board.c +62 -50
147 lines not on this page · raw message
Signature · 1 line
1.7.10.4
v2 cover am33xx: support non-ti boards
In reply to Peter KorsgaardQuoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Peter" == Peter Korsgaard <[email protected]> writes:
Hi,
Peter> The am33xx code currently contains a number of details specific Peter> to the ti(-derived) boards in the common code. This series Peter> restructures the arch code to make it possible to add other Peter> boards.
Peter> This series does not yet any new boards, as the board I'm Peter> working on is using nand flash, and omap_gpmc hasn't been Peter> updated for bch8 / elm support yet. I've started looking at it, Peter> but no code so far.
Peter> Instead it has been tested on Beaglebone.
Hi Tom,
You mentioned on IRC that you were happy with this series, but it doesn't seem to be merged yet. Is there anything blocking it? It isn't particular complicated, but it is bound to cause conflicts with any other am33xx changes, so it would be good to get it merged.
Peter> Changes since v1:
Peter> - Rebased against u-boot-ti
Peter> - Take Tom Rini's feedback into account
Peter> - evm.{c,h} -> board.{c,h}
Peter> - use DDR part numbers in defines and leave in ddr_defs.h
Peter> (without MICRON_ prefix to stay < 80 chars)
Peter> Peter Korsgaard (6):
Peter> am33xx/board.c: make wdtimer/uart_base static Peter> am33xx: move ti i2c baseboard header handling to board/ti/am335x/ Peter> am33xx/board: use cpu_mmc_init() for default mmc initialization Peter> am33xx: move generic parts of pinmux handling out from
Peter> board/ti/am335x
Peter> am33xx: support board specific ddr settings
Peter> am33xx/ddr_defs.h: rename DDR2/DDR3 defines to their actual part
Peter> numbers
Peter> arch/arm/cpu/armv7/am33xx/Makefile | 1 +
Peter> arch/arm/cpu/armv7/am33xx/board.c | 244 +-----------------
Peter> arch/arm/cpu/armv7/am33xx/emif4.c | 114 +--------
Peter> arch/arm/cpu/armv7/am33xx/mux.c | 33 +++
Peter> arch/arm/include/asm/arch-am33xx/ddr_defs.h | 69 +++---
Peter> arch/arm/include/asm/arch-am33xx/mux.h | 261 ++++++++++++++++++++
Peter> arch/arm/include/asm/arch-am33xx/sys_proto.h | 27 --
Peter> board/ti/am335x/Makefile | 1 +
Peter> .../cpu/armv7/am33xx => board/ti/am335x}/board.c | 138 +++++++----
Peter> .../sys_proto.h => board/ti/am335x/board.h | 24 +-
Peter> board/ti/am335x/mux.c | 250 +------------------
Peter> 11 files changed, 447 insertions(+), 715 deletions(-)
Peter> create mode 100644 arch/arm/cpu/armv7/am33xx/mux.c
Peter> create mode 100644 arch/arm/include/asm/arch-am33xx/mux.h
Peter> copy {arch/arm/cpu/armv7/am33xx => board/ti/am335x}/board.c (64%)
Peter> copy arch/arm/include/asm/arch-am33xx/sys_proto.h => board/ti/am335x/board.h (75%) Peter> --
Peter> 1.7.10.4
Peter> _______________________________________________ Peter> U-Boot mailing list
Peter> U-Boot at lists.denx.de
Peter> http://lists.denx.de/mailman/listinfo/u-boot
Signature · 1 line
Bye, Peter Korsgaard
v2 cover am33xx: support non-ti boards
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Quoted 17 lines · Peter Korsgaard
Quoted 2 lines
Quoted 2 lines
Quoted 2 lines
Quoted 2 lines
Quoted 2 lines
"Peter" == Peter Korsgaard <[email protected]> writes:
Hi,
Peter> The am33xx code currently contains a number of details specific Peter> to the ti(-derived) boards in the common code. This series Peter> restructures the arch code to make it possible to add other Peter> boards.
Peter> This series does not yet any new boards, as the board I'm Peter> working on is using nand flash, and
omap_gpmchasn't been Peter> updated for bch8 / elm support yet. I've started looking at it, Peter> but no code so far.Peter> Instead it has been tested on Beaglebone.
Quoted 7 lines
Hi Tom,
You mentioned on IRC that you were happy with this series, but it doesn't seem to be merged yet. Is there anything blocking it? It isn't particular complicated, but it is bound to cause conflicts with any other am33xx changes, so it would be good to get it merged.
Just trying to give a window between posting and merging. I've been holding at around a week which puts this at tomorrow.
- --
Tom
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://www.enigmail.net/
iQIcBAEBAgAGBQJQiBDgAAoJENk4IS6UOR1W7loQAJMs/ejH8J76sagGI7Lc1ogq ktDu4KkK9hTQCewLBhKn/N3wCwm7E3KgXvLLd1zF31jQTFcMJaHFjZJLO5wXr5Cb xElPaK9xUDSbAUB0eYPf+mfq+VvplW8fA/adMorjAWCMHfJN8ksaBc248rir1uaD L47CqBqBYUnkr7ZuUrjmUkalLt0udWaDb9Vr13sNa+FyZMWU+X5jbGSxBbf811WB flK8VrHQY4eFuDskVUgy6pM+6SX+8hiluF8y6WqfzdN+mtPnAlSMt6PPOZuFhLX8 rplOvBMuobgCjObW+pDsrdJ/yggfgzLF1p6Vy/KRdlv4e+V90jLKfpxsDGpFWRQ4 BZIjLgZl/xv/HjbQY0uyeHV9VGhzgT7ulLFl1wsosSl6GzJNBQDmamLeFFBoTYGg +vvWLD+1uQ2bL5iJ475K6kmtVLS4tWswPviXT9YI7K692QzbD8NKTzyQ8LmpAhyM ct1Wat1Nup2fggO14QA4bah1tf37b0MwjYEZfDXszVxR7OjtBa2b3/QdL8uBsCC5 gNrE5/Dpc+3hla71hkOMh7D/UPu0iYbcS3bQsXeTx8zON/1wixY5L53sAOzyL0kp hkMZh/5ygT1+5SvRB48kUPxxQIIsvybrz3bnRxYzFeDGo6h8HuATMS8XaRhRi9Ui WoIYL6dl3WlCHXT9GhMh
=KJ4+
-----END PGP SIGNATURE-----
v2 cover am33xx: support non-ti boards
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Tom" == Tom Rini <[email protected]> writes:
Tom> Just trying to give a window between posting and merging. I've Tom> been holding at around a week which puts this at tomorrow.
Ok, great - Thanks.
Signature · 1 line
Bye, Peter Korsgaard