Commit 61159b76 authored by Heiko Schocher's avatar Heiko Schocher Committed by Tom Rini

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
Signed-off-by: default avatarSamuel Egli <samuel.egli@siemens.com>
Acked-by: default avatarHeiko Schocher <hs@denx.de>
Reviewed-by: default avatarTom Rini <trini@konsulko.com>
Signed-off-by: default avatarHeiko Schocher <hs@denx.de>
parent 8607c4f1
......@@ -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 */
......@@ -43,7 +43,7 @@ static struct draco_baseboard_id __attribute__((section(".data"))) settings;
/* Default@303MHz-i0 */
const struct ddr3_data ddr3_default = {
0x33524444, 0x56312e35, 0x0080, 0x0000, 0x003A, 0x003F, 0x009F,
0x0079, 0x0888A39B, 0x26247FDA, 0x501F821F, 0x00100206, 0x61A44A32,
0x0079, 0x0888A39B, 0x26517FDA, 0x501F84EF, 0x00100206, 0x61A44A32,
0x0000093B, 0x0000014A,
"default name @303MHz \0",
"default marking \0",
......@@ -71,8 +71,8 @@ static void print_ddr3_timings(void)
printf("clock:\t\t%d MHz\n", DDR_PLL_FREQ);
printf("device:\t\t%s\n", settings.ddr3.manu_name);
printf("marking:\t%s\n", settings.ddr3.manu_marking);
printf("timing parameters\n");
printf("diff\teeprom\tdefault\n");
printf("%-20s, %-8s, %-8s, %-4s\n", "timing parameters", "eeprom",
"default", "diff");
PRINTARGS(magic);
PRINTARGS(version);
PRINTARGS(ddr3_sratio);
......@@ -96,9 +96,12 @@ static void print_ddr3_timings(void)
static void print_chip_data(void)
{
struct ctrl_dev *cdev = (struct ctrl_dev *)CTRL_DEVICE_BASE;
dpll_mpu_opp100.m = am335x_get_efuse_mpu_max_freq(cdev);
printf("\nCPU BOARD\n");
printf("device: \t'%s'\n", settings.chip.sdevname);
printf("hw version: \t'%s'\n", settings.chip.shwver);
printf("max freq: \t%d MHz\n", dpll_mpu_opp100.m);
}
#endif /* CONFIG_SPL_BUILD */
......@@ -193,6 +196,11 @@ struct ctrl_ioregs draco_ddr3_ioregs = {
config_ddr(DDR_PLL_FREQ, &draco_ddr3_ioregs, &draco_ddr3_data,
&draco_ddr3_cmd_ctrl_data, &draco_ddr3_emif_reg_data, 0);
/* For Samsung 2Gbit RAM we need this delay otherwise config fails after
* soft reset.
*/
udelay(2000);
}
static void spl_siemens_board_init(void)
......@@ -201,6 +209,26 @@ static void spl_siemens_board_init(void)
}
#endif /* if def CONFIG_SPL_BUILD */
#ifdef CONFIG_BOARD_LATE_INIT
int board_late_init(void)
{
omap_nand_switch_ecc(1, 8);
#ifdef CONFIG_FACTORYSET
/* Set ASN in environment*/
if (factory_dat.asn[0] != 0) {
setenv("dtb_name", (char *)factory_dat.asn);
} else {
/* dtb suffix gets added in load script */
setenv("dtb_name", "am335x-draco");
}
#else
setenv("dtb_name", "am335x-draco");
#endif
return 0;
}
#endif
#if (defined(CONFIG_DRIVER_TI_CPSW) && !defined(CONFIG_SPL_BUILD)) || \
(defined(CONFIG_SPL_ETH_SUPPORT) && defined(CONFIG_SPL_BUILD))
static void cpsw_control(int enabled)
......@@ -280,13 +308,4 @@ U_BOOT_CMD(
#endif /* #if defined(CONFIG_DRIVER_TI_CPSW) */
#endif /* #if (defined(CONFIG_DRIVER_TI_CPSW) && !defined(CONFIG_SPL_BUILD)) */
#ifdef CONFIG_BOARD_LATE_INIT
int board_late_init(void)
{
omap_nand_switch_ecc(1, 8);
return 0;
}
#endif
#include "../common/board.c"
......@@ -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
......@@ -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},
};
......
......@@ -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;"
......
......@@ -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;"
......
......@@ -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" \
......
......@@ -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" \
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment