X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=board%2Flogicpd%2Fomap3som%2Fomap3logic.c;h=b2fcc28f8b4bf77d2d78cd6ab0d0c970bcc0ade4;hb=7a2af751a005a08c21a697a7295dbe6f928fc980;hp=b86da5a5d1080e566edbe8462ec210a175749855;hpb=b17b7ea044646cdf0fba0fddb394fe38c3a9af9f;p=u-boot diff --git a/board/logicpd/omap3som/omap3logic.c b/board/logicpd/omap3som/omap3logic.c index b86da5a5d1..b2fcc28f8b 100644 --- a/board/logicpd/omap3som/omap3logic.c +++ b/board/logicpd/omap3som/omap3logic.c @@ -26,10 +26,20 @@ #include #include #include +#include +#include +#include +#include +#include +#include #include "omap3logic.h" DECLARE_GLOBAL_DATA_PTR; +#define CONTROL_WKUP_CTRL 0x48002a5c +#define GPIO_IO_PWRDNZ (1 << 6) +#define PBIASLITEVMODE1 (1 << 8) + /* * two dimensional array of strucures containining board name and Linux * machine IDs; row it selected based on CPU column is slected based @@ -37,9 +47,10 @@ DECLARE_GLOBAL_DATA_PTR; */ static const struct ns16550_platdata omap3logic_serial = { - OMAP34XX_UART1, - 2, - V_NS16550_CLK + .base = OMAP34XX_UART1, + .reg_shift = 2, + .clock = V_NS16550_CLK, + .fcr = UART_FCR_DEFVAL, }; U_BOOT_DEVICE(omap3logic_uart) = { @@ -50,29 +61,103 @@ U_BOOT_DEVICE(omap3logic_uart) = { static struct board_id { char *name; int machine_id; + char *fdtfile; } boards[2][2] = { { { .name = "OMAP35xx SOM LV", .machine_id = MACH_TYPE_OMAP3530_LV_SOM, + .fdtfile = "logicpd-som-lv-35xx-devkit.dtb", }, { .name = "OMAP35xx Torpedo", .machine_id = MACH_TYPE_OMAP3_TORPEDO, + .fdtfile = "logicpd-torpedo-35xx-devkit.dtb", }, }, { { .name = "DM37xx SOM LV", - .machine_id = MACH_TYPE_DM3730_SOM_LV, + .fdtfile = "logicpd-som-lv-37xx-devkit.dtb", }, { .name = "DM37xx Torpedo", - .machine_id = MACH_TYPE_DM3730_TORPEDO, + .fdtfile = "logicpd-torpedo-37xx-devkit.dtb", }, }, }; +#ifdef CONFIG_SPL_OS_BOOT +int spl_start_uboot(void) +{ + /* break into full u-boot on 'c' */ + return serial_tstc() && serial_getc() == 'c'; +} +#endif + +#if defined(CONFIG_SPL_BUILD) +/* + * Routine: get_board_mem_timings + * Description: If we use SPL then there is no x-loader nor config header + * so we have to setup the DDR timings ourself on the first bank. This + * provides the timing values back to the function that configures + * the memory. + */ +void get_board_mem_timings(struct board_sdrc_timings *timings) +{ + timings->mr = MICRON_V_MR_165; + /* 256MB DDR */ + timings->mcfg = MICRON_V_MCFG_200(256 << 20); + timings->ctrla = MICRON_V_ACTIMA_200; + timings->ctrlb = MICRON_V_ACTIMB_200; + timings->rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_200MHz; +} +#endif + +#ifdef CONFIG_USB_MUSB_OMAP2PLUS +static struct musb_hdrc_config musb_config = { + .multipoint = 1, + .dyn_fifo = 1, + .num_eps = 16, + .ram_bits = 12, +}; + +static struct omap_musb_board_data musb_board_data = { + .interface_type = MUSB_INTERFACE_ULPI, +}; + +static struct musb_hdrc_platform_data musb_plat = { +#if defined(CONFIG_USB_MUSB_HOST) + .mode = MUSB_HOST, +#elif defined(CONFIG_USB_MUSB_GADGET) + .mode = MUSB_PERIPHERAL, +#else +#error "Please define either CONFIG_USB_MUSB_HOST or CONFIG_USB_MUSB_GADGET" +#endif + .config = &musb_config, + .power = 100, + .platform_ops = &omap2430_ops, + .board_data = &musb_board_data, +}; +#endif + + +/* + * Routine: misc_init_r + * Description: Configure board specific parts + */ +int misc_init_r(void) +{ + twl4030_power_init(); + omap_die_id_display(); + +#ifdef CONFIG_USB_MUSB_OMAP2PLUS + musb_register(&musb_plat, &musb_board_data, (void *)MUSB_BASE); +#endif + + return 0; +} + /* * BOARD_ID_GPIO - GPIO of pin with optional pulldown resistor on SOM LV */ @@ -84,14 +169,20 @@ static struct board_id { */ int board_init(void) { - struct board_id *board; - unsigned int val; - gpmc_init(); /* in SRAM or SDRAM, finish GPMC */ /* boot param addr */ gd->bd->bi_boot_params = (OMAP34XX_SDRC_CS0 + 0x100); + return 0; +} + +#ifdef CONFIG_BOARD_LATE_INIT +int board_late_init(void) +{ + struct board_id *board; + unsigned int val; + /* * To identify between a SOM LV and Torpedo module, * a pulldown resistor is on hsusb0_data5 for the SOM LV module. @@ -126,14 +217,19 @@ int board_init(void) printf("Board: %s\n", board->name); /* Set the machine_id passed to Linux */ - gd->bd->bi_arch_number = board->machine_id; + if (board->machine_id) + gd->bd->bi_arch_number = board->machine_id; + + /* If the user has not set fdtimage, set the default */ + if (!getenv("fdtimage")) + setenv("fdtimage", board->fdtfile); } /* restore hsusb0_data5 pin as hsusb0_data5 */ MUX_VAL(CP(HSUSB0_DATA5), (IEN | PTD | DIS | M0)); - return 0; } +#endif #if defined(CONFIG_GENERIC_MMC) && !defined(CONFIG_SPL_BUILD) int board_mmc_init(bd_t *bis)