arm, am33xx: update for siemens am335x based boards
PATCH v2 1/1 arm, am33xx: update for siemens am335x based boards
updates for the siemens am335x based boards:
- draco: add delay for DDR3 configuration
- change MTD partition layout and add a possibility to redefine MTD layout in board header.
- move ubi support to common header file
- draco: improve dtb naming
- draco: set CONFIG_SYS_CBSIZE to 1024
- add generic env based led
Leds can now be defined in Environment
- add generic env based dfu button
Which gpio is used for the dfu button can be defined through the Environment
- set MACH_TYPE only if defined
- draco: increase CPU freq to 300MHz
- Add time command to siemens am33xx boards
- DDR3: increase default tRFC
- draco: enable pullup for DFU and ERST pin
- change print format DDR3
---
Changes in v2:
- add Reviewed-by from Tom Rini
- add comment from Samuel Egli:
increase delay in DDR3 init
board/siemens/common/board.c | 176 +++++++++++++++------ board/siemens/draco/board.c | 43 +++-- board/siemens/draco/board.h | 13 +- board/siemens/draco/mux.c | 4 +- include/configs/draco.h | 28 +++- include/configs/dxr2.h | 23 ++- include/configs/pxm2.h | 23 ++- include/configs/rut.h | 16 +- include/configs/siemens-am33x-common.h | 280 +++++++++++++++++++++++---------- 9 files changed, 428 insertions(+), 178 deletions(-)
board/siemens/common/board.c +125 -51
@@ -75,8 +75,9 @@ int board_init(void)i2c_set_bus_num (0 );if (read_eeprom () <0 )puts ("Could not get board ID.\n" ); - +#ifdef CONFIG_MACH_TYPE gd->bd->bi_arch_number =CONFIG_MACH_TYPE ; +#endif gd->bd->bi_boot_params =CONFIG_SYS_SDRAM_BASE +0x100 ;#ifdef CONFIG_FACTORYSET
@@ -102,21 +103,29 @@ const struct dpll_params *get_dpll_ddr_params(void) } #ifndef CONFIG_SPL_BUILD + +#define MAX_NR_LEDS 10 +#define MAX_PIN_NUMBER 128 +#define STARTUP 0 + #if defined(BOARD_DFU_BUTTON_GPIO) -/* - * This command returns the status of the user button on - * Input - none - * Returns - 1 if button is held down - * 0 if button is not held down - */ -static int -do_userbutton(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +unsigned char get_button_state(char * const envname, unsigned char def) { int button = 0; int gpio; + char *ptr_env; - gpio = BOARD_DFU_BUTTON_GPIO; - gpio_request(gpio, "DFU"); + /* If button is not found we take default */ + ptr_env = getenv(envname); + if (NULL == ptr_env) { + gpio = def; + } else { + gpio = (unsigned char)simple_strtoul(ptr_env, NULL, 0); + if (gpio > MAX_PIN_NUMBER) + gpio = def; + } + + gpio_request(gpio, ""); gpio_direction_input(gpio); if (gpio_get_value(gpio)) button = 1;
@@ -127,53 +136,27 @@ do_userbutton(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) return button; } - -U_BOOT_CMD ( - dfubutton,CONFIG_SYS_MAXARGS ,1 , do_userbutton, -"Return the status of the DFU button" , -"" -); -#endif -/* -* This command sets led -* Input - name of led -* value of led -* Returns - 1 if input does not match -* 0 if led was set +/** +* This command returns the status of the user button on +* Input - none +* Returns - 1 if button is held down +* 0 if button is not held down */ static int -do_setled (cmd_tbl_t *cmdtp,int flag,int argc,char *const argv[]) +do_userbutton (cmd_tbl_t *cmdtp,int flag,int argc,char *const argv[]) { -int gpio =0 ; -if (argc !=3 ) - goto exit; -#if defined(BOARD_STATUS_LED ) -if (!strcmp (argv[1 ],"stat" )) - gpio =BOARD_STATUS_LED ; -#endif -#if defined(BOARD_DFU_BUTTON_LED ) -if (!strcmp (argv[1 ],"dfu" )) - gpio =BOARD_DFU_BUTTON_LED ; -#endif -/* If argument does not mach exit */ -if (gpio ==0 ) - goto exit; -gpio_request (gpio,"" ); -gpio_direction_output (gpio,1 ); -if (!strcmp (argv[2 ],"1" )) -gpio_set_value (gpio,1 ); -else -gpio_set_value (gpio,0 ); -return 0 ; -exit: -return 1 ; +int button =0 ; + button =get_button_state ("button_dfu0" ,BOARD_DFU_BUTTON_GPIO ); + button |=get_button_state ("button_dfu1" ,BOARD_DFU_BUTTON_GPIO ); +return button; }U_BOOT_CMD ( - led,CONFIG_SYS_MAXARGS ,2 , do_setled, -"Set led on or off" , -"dfu val - set dfu led\nled stat val - set status led" + dfubutton,CONFIG_SYS_MAXARGS ,1 , do_userbutton, +"Return the status of the DFU button" , +"" ); +#endif static int do_usertestwdt (cmd_tbl_t *cmdtp,int flag,int argc,char *const argv[])
@@ -189,4 +172,95 @@ U_BOOT_CMD("Sends U-Boot into infinite loop" ,"" ); + +/** +* Get led gpios from env and set them. +* The led define in environment need to need to be of the form ledN=NN,S0,S1 +* where N is an unsigned integer from 0 to 9 and S0 and S1 is 0 or 1. S0 +* defines the startup state of the led, S1 the special state of the led when +* it enters e.g. dfu mode. +*/ +void set_env_gpios (unsigned char state) +{ +char *ptr_env; +char str_tmp[5 ];/* must contain "ledX"*/ +char num[1 ]; +unsigned char i, idx, pos1, pos2, ccount; +unsigned char gpio_n, gpio_s0, gpio_s1; + +for (i =0 ; i <MAX_NR_LEDS ; i++) { +strcpy (str_tmp,"led" ); +sprintf (num,"%d" , i); +strcat (str_tmp, num); + +/* If env var is not found we stop */ + ptr_env =getenv (str_tmp); +if (NULL == ptr_env) +break ; + +/* Find sperators position */ + pos1 =0 ; + pos2 =0 ; + ccount =0 ; +for (idx =0 ; ptr_env[idx] !='\0' ; idx++) { +if (ptr_env[idx] ==',' ) { +if (ccount++ <1 ) + pos1 = idx; +else + pos2 = idx; + } + } +/* Bad led description skip this definition */ +if (pos2 <= pos1 || ccount >2 ) +continue ; + +/* Get pin number and request gpio */ +memset (str_tmp,0 ,sizeof (str_tmp)); +strncpy (str_tmp, ptr_env, pos1*sizeof (char )); + gpio_n = (unsigned char )simple_strtoul (str_tmp,NULL ,0 ); + +/* Invalid gpio number skip definition */ +if (gpio_n >MAX_PIN_NUMBER ) +continue ; + +gpio_request (gpio_n,"" ); + +if (state ==STARTUP ) { +/* get pin state 0 and set */ +memset (str_tmp,0 ,sizeof (str_tmp)); +strncpy (str_tmp, ptr_env+pos1+1 , + (pos2-pos1-1 )*sizeof (char )); + gpio_s0 = (unsigned char )simple_strtoul (str_tmp,NULL , +0 ); + +gpio_direction_output (gpio_n, gpio_s0); + + }else { +/* get pin state 1 and set */ +memset (str_tmp,0 ,sizeof (str_tmp)); +strcpy (str_tmp, ptr_env+pos2+1 ); + gpio_s1 = (unsigned char )simple_strtoul (str_tmp,NULL , +0 ); +gpio_direction_output (gpio_n, gpio_s1); + } + }/* loop through defined led in environment */ +} + +static int do_board_led (cmd_tbl_t *cmdtp,int flag,int argc, +char *const argv[]) +{ +if (argc !=2 ) +return CMD_RET_USAGE ; +if ((unsigned char )simple_strtoul (argv[1 ],NULL ,0 ) ==STARTUP ) +set_env_gpios (0 ); +else +set_env_gpios (1 ); +return 0 ; +}; + +U_BOOT_CMD ( + draco_led,CONFIG_SYS_MAXARGS ,2 , do_board_led, +"Set LEDs defined in environment" , +"<0|1>" +);#endif /* !CONFIG_SPL_BUILD */
board/siemens/draco/board.c +31 -12
80 lines not on this page · raw message
board/siemens/draco/board.h +10 -3
@@ -16,9 +16,13 @@#ifndef _BOARD_H_#define _BOARD_H_ -#define PARGS3 (x) settings.ddr3.x-ddr3_default.x, \ - settings.ddr3.x, ddr3_default.x -#define PRINTARGS (y) printf("%x, %8x, %8x : "#y"\n", PARGS3(y)) +#define PARGS (x) #x ,/* Parameter Name */ \ + settings.ddr3.x,/* EEPROM Value */ \ + ddr3_default.x,/* Default Value */ \ + settings.ddr3.x-ddr3_default.x /* Difference */ + +#define PRINTARGS (y) printf("%-20s, %8x, %8x, %4d\n", PARGS(y)) +#define MAGIC_CHIP 0x50494843/* Automatic generated definition */
@@ -69,4 +73,7 @@ void enable_uart4_pin_mux(void);void enable_uart5_pin_mux (void );void enable_i2c0_pin_mux (void );void enable_board_pin_mux (void ); + +/* Forwared declaration, defined in common board.c */ +void set_env_gpios (unsigned char state);#endif
board/siemens/draco/mux.c +2 -2
@@ -60,7 +60,7 @@ static struct module_pin_mux nand_pin_mux[] = {static struct module_pin_mux gpios_pin_mux[] = {/* DFU button GPIO0_27*/ - {OFFSET (gpmc_ad11), (MODE (7 ) |PULLUDEN |RXACTIVE )}, + {OFFSET (gpmc_ad11), (MODE (7 ) |PULLUDEN |PULLUP_EN |RXACTIVE )}, {OFFSET (gpmc_csn3),MODE (7 ) },/* LED0 GPIO2_0 */ {OFFSET (emu0),MODE (7 )},/* LED1 GPIO3_7 */ /* Triacs in HW Rev 2 */
@@ -222,7 +222,7 @@ static struct module_pin_mux gpios_pin_mux[] = { {OFFSET(vrefp), MODE(7) | RXACTIVE | PULLUDDIS}, {OFFSET(vrefn), MODE(7) | RXACTIVE | PULLUDDIS},/* nRST for SMSC LAN9303 switch - GPIO2_24 */ - {OFFSET(lcd_pclk), MODE(7) }, /* LAN9303 nRST */ + {OFFSET(lcd_pclk), MODE(7) | PULLUDEN | PULLUP_EN }, /* LAN9303 nRST */ {-1}, };
include/configs/draco.h +23 -5
@@ -19,18 +19,23 @@#include "siemens-am33x-common.h" -#define CONFIG_SYS_MPUCLK 275 +#define CONFIG_DISPLAY_CPUINFO +#define CONFIG_SYS_MPUCLK 300#define DDR_PLL_FREQ 303#undef CONFIG_SPL_AM33XX_ENABLE_RTC32K_OSC -#define BOARD_DFU_BUTTON_GPIO 27 -#define BOARD_DFU_BUTTON_LED 64/* red LED */ -#define BOARD_STATUS_LED 103/* green LED */ +#define BOARD_DFU_BUTTON_GPIO 27/* Use as default */ #define GPIO_LAN9303_NRST 88/* GPIO2_24 = gpio88 */ +#define CONFIG_ENV_SETTINGS_BUTTONS_AND_LEDS \ + "button_dfu0=27\0" \ + "led0=103,1,0\0" \ + "led1=64,0,1\0" +#undef CONFIG_DOS_PARTITION#undef CONFIG_CMD_FAT +#define CONFIG_BOARD_LATE_INIT /* Physical Memory Map */ #define CONFIG_MAX_RAM_BANK_SIZE (1024 << 20)/* 1GB */
@@ -57,13 +62,25 @@/* Watchdog */ #define CONFIG_OMAP_WATCHDOG +/* Define own nand partitions */ +#define CONFIG_ENV_OFFSET_REDUND 0x2E0000 +#define CONFIG_ENV_SIZE_REDUND 0x2000 +#define CONFIG_ENV_RANGE (4 * CONFIG_SYS_ENV_SECT_SIZE) + + +#define MTDPARTS_DEFAULT MTDPARTS_DEFAULT_V2 +#ifndef CONFIG_SPL_BUILD /* Default env settings */ #define CONFIG_EXTRA_ENV_SETTINGS \ + "hostname=draco\0" \ "nand_img_size=0x400000\0" \ "optargs=\0" \ - CONFIG_COMMON_ENV_SETTINGS + "preboot=draco_led 0\0" \ + CONFIG_ENV_SETTINGS_BUTTONS_AND_LEDS \ + CONFIG_ENV_SETTINGS_V2 \ + CONFIG_ENV_SETTINGS_NAND_V2#ifndef CONFIG_RESTORE_FLASH /* set to negative value for no autoboot */
@@ -75,6 +92,7 @@"reset; " \"fi;" \"run nand_boot;" \ +"run nand_boot_backup;" \"reset;"
include/configs/dxr2.h +21 -2
@@ -19,7 +19,8 @@#include "siemens-am33x-common.h" -#define CONFIG_SYS_MPUCLK 275 +#define CONFIG_DISPLAY_CPUINFO +#define CONFIG_SYS_MPUCLK 300#define DDR_PLL_FREQ 303#undef CONFIG_SPL_AM33XX_ENABLE_RTC32K_OSC
@@ -28,9 +29,15 @@#define BOARD_STATUS_LED 103/* green LED */ #define GPIO_LAN9303_NRST 88/* GPIO2_24 = gpio88 */ +#define CONFIG_ENV_SETTINGS_BUTTONS_AND_LEDS \ + "button_dfu0=27\0" \ + "led0=103,1,0\0" \ + "led1=64,0,1\0" +#undef CONFIG_DOS_PARTITION#undef CONFIG_CMD_FAT +#define CONFIG_BOARD_LATE_INIT /* Physical Memory Map */ #define CONFIG_MAX_RAM_BANK_SIZE (1024 << 20)/* 1GB */
@@ -57,6 +64,14 @@/* Watchdog */ #define CONFIG_OMAP_WATCHDOG +/* Define own nand partitions */ +#define CONFIG_ENV_OFFSET_REDUND 0x2E0000 +#define CONFIG_ENV_SIZE_REDUND 0x2000 +#define CONFIG_ENV_RANGE (4 * CONFIG_SYS_ENV_SECT_SIZE) + + +#define MTDPARTS_DEFAULT MTDPARTS_DEFAULT_V2 +#ifndef CONFIG_SPL_BUILD /* Default env settings */
@@ -64,7 +79,10 @@"hostname=dxr2\0" \"nand_img_size=0x400000\0" \"optargs=\0" \ -CONFIG_COMMON_ENV_SETTINGS +"preboot=draco_led 0\0" \ +CONFIG_ENV_SETTINGS_BUTTONS_AND_LEDS \ +CONFIG_ENV_SETTINGS_V2 \ +CONFIG_ENV_SETTINGS_NAND_V2 #ifndef CONFIG_RESTORE_FLASH/* set to negative value for no autoboot */
@@ -76,6 +94,7 @@"reset; " \"fi;" \"run nand_boot;" \ +"run nand_boot_backup;" \"reset;"
include/configs/pxm2.h +11 -12
@@ -25,11 +25,14 @@#define DDR_PLL_FREQ 266#define BOARD_DFU_BUTTON_GPIO 59 -#define BOARD_DFU_BUTTON_LED 117#define BOARD_LCD_POWER 111#define BOARD_BACK_LIGHT 112#define BOARD_TOUCH_POWER 57 +#define CONFIG_ENV_SETTINGS_BUTTONS_AND_LEDS \ + "button_dfu0=59\0" \ + "led0=117,0,1\0" \ +/* Physical Memory Map */ #define CONFIG_MAX_RAM_BANK_SIZE (512 << 20)/* 1GB */
@@ -48,29 +51,25 @@#define CONFIG_FACTORYSET -/* UBI Support */ -#ifndef CONFIG_SPL_BUILD -#define CONFIG_CMD_MTDPARTS -#define CONFIG_MTD_PARTITIONS -#define CONFIG_MTD_DEVICE -#define CONFIG_RBTREE -#define CONFIG_LZO -#define CONFIG_CMD_UBI -#define CONFIG_CMD_UBIFS -#endif /* Watchdog */ #define CONFIG_OMAP_WATCHDOG #ifndef CONFIG_SPL_BUILD +/* Use common default */ +#define MTDPARTS_DEFAULT MTDPARTS_DEFAULT_V1 +/* Default env settings */ #define CONFIG_EXTRA_ENV_SETTINGS \ "hostname=pxm2\0" \ "nand_img_size=0x500000\0" \ "optargs=\0" \ + "preboot=draco_led 0\0" \ + CONFIG_ENV_SETTINGS_BUTTONS_AND_LEDS \ "splashpos=m,m\0" \ - CONFIG_COMMON_ENV_SETTINGS \ + CONFIG_ENV_SETTINGS_V1 \ + CONFIG_ENV_SETTINGS_NAND_V1 \ "mmc_dev=0\0" \ "mmc_root=/dev/mmcblk0p2 rw\0" \ "mmc_root_fs_type=ext4 rootwait\0" \
include/configs/rut.h +5 -11
@@ -45,29 +45,23 @@#define CONFIG_FACTORYSET -/* UBI Support */ -#ifndef CONFIG_SPL_BUILD -#define CONFIG_CMD_MTDPARTS -#define CONFIG_MTD_PARTITIONS -#define CONFIG_MTD_DEVICE -#define CONFIG_RBTREE -#define CONFIG_LZO -#define CONFIG_CMD_UBI -#define CONFIG_CMD_UBIFS -#endif /* Watchdog */ #define WATCHDOG_TRIGGER_GPIO 14#ifndef CONFIG_SPL_BUILD +/* Use common default */ +#define MTDPARTS_DEFAULT MTDPARTS_DEFAULT_V1 +/* Default env settings */ #define CONFIG_EXTRA_ENV_SETTINGS \ "hostname=rut\0" \ "nand_img_size=0x500000\0" \ "splashpos=m,m\0" \ "optargs=fixrtc --no-log consoleblank=0 \0" \ - CONFIG_COMMON_ENV_SETTINGS \ + CONFIG_ENV_SETTINGS_V1 \ + CONFIG_ENV_SETTINGS_NAND_V1 \ "mmc_dev=0\0" \ "mmc_root=/dev/mmcblk0p2 rw\0" \ "mmc_root_fs_type=ext4 rootwait\0" \
include/configs/siemens-am33x-common.h +200 -80
342 lines not on this page · raw message
Signature · 1 line
2.1.0
PATCH v2 1/1 arm, am33xx: update for siemens am335x based boards
Quoted 20 lines · Heiko Schocher
updates for the siemens am335x based boards:
- draco: add delay for DDR3 configuration
- change MTD partition layout and add a possibility to redefine MTD layout in board header.
- move ubi support to common header file
- draco: improve dtb naming
- draco: setCONFIG_SYS_CBSIZEto 1024
- add generic env based led
Leds can now be defined in Environment
- add generic env based dfu button
Which gpio is used for the dfu button can be defined through the Environment
- setMACH_TYPEonly if defined
- draco: increase CPU freq to 300MHz
- Add time command to siemens am33xx boards
- DDR3: increase default tRFC
- draco: enable pullup for DFU and ERST pin
- change print format DDR3
Quoted 5 lines
Signed-off-by Samuel Egli <[email protected]>Acked-by Heiko Schocher <[email protected]>Reviewed-by Tom Rini <[email protected]>Signed-off-by Heiko Schocher <[email protected]>
Applied to u-boot/master, thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150619/0f206725/attachment.sig>