diff options
Diffstat (limited to 'board')
-rw-r--r-- | board/congatec/conga-qeval20-qa3-e3845/Kconfig | 1 | ||||
-rw-r--r-- | board/dfi/dfi-bt700/Kconfig | 1 | ||||
-rw-r--r-- | board/isee/igep00x0/MAINTAINERS | 3 | ||||
-rw-r--r-- | board/isee/igep00x0/Makefile | 6 | ||||
-rw-r--r-- | board/isee/igep00x0/common.c | 68 | ||||
-rw-r--r-- | board/isee/igep00x0/igep00x0.c | 198 | ||||
-rw-r--r-- | board/isee/igep00x0/igep00x0.h | 13 | ||||
-rw-r--r-- | board/isee/igep00x0/spl.c | 64 | ||||
-rw-r--r-- | board/renesas/salvator-x/salvator-x.c | 39 | ||||
-rw-r--r-- | board/renesas/ulcb/ulcb.c | 35 | ||||
-rw-r--r-- | board/spear/common/Makefile | 14 | ||||
-rw-r--r-- | board/spear/common/spr_lowlevel_init.S | 174 | ||||
-rw-r--r-- | board/spear/common/spr_misc.c | 249 |
13 files changed, 220 insertions, 645 deletions
diff --git a/board/congatec/conga-qeval20-qa3-e3845/Kconfig b/board/congatec/conga-qeval20-qa3-e3845/Kconfig index e1fae737ac..9e44413c2c 100644 --- a/board/congatec/conga-qeval20-qa3-e3845/Kconfig +++ b/board/congatec/conga-qeval20-qa3-e3845/Kconfig @@ -25,6 +25,7 @@ config BOARD_SPECIFIC_OPTIONS # dummy select SPI_FLASH_STMICRO imply SPI_FLASH_SPANSION imply SPI_FLASH_WINBOND + select SERIAL_RX_BUFFER config PCIE_ECAM_BASE default 0xe0000000 diff --git a/board/dfi/dfi-bt700/Kconfig b/board/dfi/dfi-bt700/Kconfig index 4b6c3fc56c..f92f50a448 100644 --- a/board/dfi/dfi-bt700/Kconfig +++ b/board/dfi/dfi-bt700/Kconfig @@ -25,6 +25,7 @@ config BOARD_SPECIFIC_OPTIONS # dummy select SPI_FLASH_STMICRO imply SPI_FLASH_SPANSION imply SPI_FLASH_WINBOND + select SERIAL_RX_BUFFER config PCIE_ECAM_BASE default 0xe0000000 diff --git a/board/isee/igep00x0/MAINTAINERS b/board/isee/igep00x0/MAINTAINERS index 720ef2aa69..d75d400eed 100644 --- a/board/isee/igep00x0/MAINTAINERS +++ b/board/isee/igep00x0/MAINTAINERS @@ -3,6 +3,5 @@ M: Enric Balletbo i Serra <eballetbo@gmail.com> S: Maintained F: board/isee/igep00x0/ F: include/configs/omap3_igep00x0.h -F: configs/igep0020_defconfig -F: configs/igep0030_defconfig +F: configs/igep00x0_defconfig F: configs/igep0032_defconfig diff --git a/board/isee/igep00x0/Makefile b/board/isee/igep00x0/Makefile index 68b151c3c5..74594da771 100644 --- a/board/isee/igep00x0/Makefile +++ b/board/isee/igep00x0/Makefile @@ -5,4 +5,8 @@ # SPDX-License-Identifier: GPL-2.0+ # -obj-y := igep00x0.o +ifdef CONFIG_SPL_BUILD +obj-y := spl.o common.o +else +obj-y := igep00x0.o common.o +endif diff --git a/board/isee/igep00x0/common.c b/board/isee/igep00x0/common.c new file mode 100644 index 0000000000..e59516f612 --- /dev/null +++ b/board/isee/igep00x0/common.c @@ -0,0 +1,68 @@ +/* + * SPDX-License-Identifier: GPL-2.0+ + */ +#include <common.h> +#include <twl4030.h> +#include <asm/io.h> +#include <asm/omap_mmc.h> +#include <asm/arch/mux.h> +#include <asm/arch/sys_proto.h> +#include <jffs2/load_kernel.h> +#include <linux/mtd/nand.h> +#include "igep00x0.h" + +DECLARE_GLOBAL_DATA_PTR; + +/* + * Routine: set_muxconf_regs + * Description: Setting up the configuration Mux registers specific to the + * hardware. Many pins need to be moved from protect to primary + * mode. + */ +void set_muxconf_regs(void) +{ + MUX_DEFAULT(); +} + +/* + * Routine: board_init + * Description: Early hardware init. + */ +int board_init(void) +{ + int loops = 100; + + /* find out flash memory type, assume NAND first */ + gpmc_cs0_flash = MTD_DEV_TYPE_NAND; + gpmc_init(); + + /* Issue a RESET and then READID */ + writeb(NAND_CMD_RESET, &gpmc_cfg->cs[0].nand_cmd); + writeb(NAND_CMD_STATUS, &gpmc_cfg->cs[0].nand_cmd); + while ((readl(&gpmc_cfg->cs[0].nand_dat) & NAND_STATUS_READY) + != NAND_STATUS_READY) { + udelay(1); + if (--loops == 0) { + gpmc_cs0_flash = MTD_DEV_TYPE_ONENAND; + gpmc_init(); /* reinitialize for OneNAND */ + break; + } + } + + /* boot param addr */ + gd->bd->bi_boot_params = (OMAP34XX_SDRC_CS0 + 0x100); + + return 0; +} + +#if defined(CONFIG_MMC) +int board_mmc_init(bd_t *bis) +{ + return omap_mmc_init(0, 0, 0, -1, -1); +} + +void board_mmc_power_init(void) +{ + twl4030_power_mmc_init(0); +} +#endif diff --git a/board/isee/igep00x0/igep00x0.c b/board/isee/igep00x0/igep00x0.c index a7a75601dd..5c7f256711 100644 --- a/board/isee/igep00x0/igep00x0.c +++ b/board/isee/igep00x0/igep00x0.c @@ -17,18 +17,14 @@ #include <asm/arch/mmc_host_def.h> #include <asm/arch/mux.h> #include <asm/arch/sys_proto.h> -#include <asm/mach-types.h> #include <linux/mtd/mtd.h> #include <linux/mtd/nand.h> -#include <linux/mtd/nand.h> #include <linux/mtd/onenand.h> #include <jffs2/load_kernel.h> #include <mtd_node.h> #include <fdt_support.h> #include "igep00x0.h" -DECLARE_GLOBAL_DATA_PTR; - static const struct ns16550_platdata igep_serial = { .base = OMAP34XX_UART3, .reg_shift = 2, @@ -42,96 +38,41 @@ U_BOOT_DEVICE(igep_uart) = { }; /* - * Routine: board_init - * Description: Early hardware init. + * Routine: get_board_revision + * Description: GPIO_28 and GPIO_129 are used to read board and revision from + * IGEP00x0 boards. First of all, it is necessary to reset USB transceiver from + * IGEP0030 in order to read GPIO_IGEP00X0_BOARD_DETECTION correctly, because + * this functionality is shared by USB HOST. + * Once USB reset is applied, U-boot configures these pins as input pullup to + * detect board and revision: + * IGEP0020-RF = 0b00 + * IGEP0020-RC = 0b01 + * IGEP0030-RG = 0b10 + * IGEP0030-RE = 0b11 */ -int board_init(void) +static int get_board_revision(void) { - int loops = 100; - - /* find out flash memory type, assume NAND first */ - gpmc_cs0_flash = MTD_DEV_TYPE_NAND; - gpmc_init(); + int revision; - /* Issue a RESET and then READID */ - writeb(NAND_CMD_RESET, &gpmc_cfg->cs[0].nand_cmd); - writeb(NAND_CMD_STATUS, &gpmc_cfg->cs[0].nand_cmd); - while ((readl(&gpmc_cfg->cs[0].nand_dat) & NAND_STATUS_READY) - != NAND_STATUS_READY) { - udelay(1); - if (--loops == 0) { - gpmc_cs0_flash = MTD_DEV_TYPE_ONENAND; - gpmc_init(); /* reinitialize for OneNAND */ - break; - } - } + gpio_request(IGEP0030_USB_TRANSCEIVER_RESET, + "igep0030_usb_transceiver_reset"); + gpio_direction_output(IGEP0030_USB_TRANSCEIVER_RESET, 0); - /* boot param addr */ - gd->bd->bi_boot_params = (OMAP34XX_SDRC_CS0 + 0x100); + gpio_request(GPIO_IGEP00X0_BOARD_DETECTION, "igep00x0_board_detection"); + gpio_direction_input(GPIO_IGEP00X0_BOARD_DETECTION); + revision = 2 * gpio_get_value(GPIO_IGEP00X0_BOARD_DETECTION); + gpio_free(GPIO_IGEP00X0_BOARD_DETECTION); -#if defined(CONFIG_LED_STATUS) && defined(CONFIG_LED_STATUS_BOOT_ENABLE) - status_led_set(CONFIG_LED_STATUS_BOOT, CONFIG_LED_STATUS_ON); -#endif - - return 0; -} - -#ifdef 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 both banks. - */ -void get_board_mem_timings(struct board_sdrc_timings *timings) -{ - int mfr, id, err = identify_nand_chip(&mfr, &id); - - timings->mr = MICRON_V_MR_165; - if (!err) { - switch (mfr) { - case NAND_MFR_HYNIX: - timings->mcfg = HYNIX_V_MCFG_200(256 << 20); - timings->ctrla = HYNIX_V_ACTIMA_200; - timings->ctrlb = HYNIX_V_ACTIMB_200; - break; - case NAND_MFR_MICRON: - timings->mcfg = MICRON_V_MCFG_200(256 << 20); - timings->ctrla = MICRON_V_ACTIMA_200; - timings->ctrlb = MICRON_V_ACTIMB_200; - break; - default: - /* Should not happen... */ - break; - } - timings->rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_200MHz; - gpmc_cs0_flash = MTD_DEV_TYPE_NAND; - } else { - if (get_cpu_family() == CPU_OMAP34XX) { - timings->mcfg = NUMONYX_V_MCFG_165(256 << 20); - timings->ctrla = NUMONYX_V_ACTIMA_165; - timings->ctrlb = NUMONYX_V_ACTIMB_165; - timings->rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_165MHz; - } else { - timings->mcfg = NUMONYX_V_MCFG_200(256 << 20); - timings->ctrla = NUMONYX_V_ACTIMA_200; - timings->ctrlb = NUMONYX_V_ACTIMB_200; - timings->rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_200MHz; - } - gpmc_cs0_flash = MTD_DEV_TYPE_ONENAND; - } -} + gpio_request(GPIO_IGEP00X0_REVISION_DETECTION, + "igep00x0_revision_detection"); + gpio_direction_input(GPIO_IGEP00X0_REVISION_DETECTION); + revision = revision + gpio_get_value(GPIO_IGEP00X0_REVISION_DETECTION); + gpio_free(GPIO_IGEP00X0_REVISION_DETECTION); -#ifdef CONFIG_SPL_OS_BOOT -int spl_start_uboot(void) -{ - /* break into full u-boot on 'c' */ - if (serial_tstc() && serial_getc() == 'c') - return 1; + gpio_free(IGEP0030_USB_TRANSCEIVER_RESET); - return 0; + return revision; } -#endif -#endif int onenand_board_init(struct mtd_info *mtd) { @@ -199,20 +140,6 @@ int board_eth_init(bd_t *bis) static inline void setup_net_chip(void) {} #endif -#if defined(CONFIG_MMC) -int board_mmc_init(bd_t *bis) -{ - return omap_mmc_init(0, 0, 0, -1, -1); -} -#endif - -#if defined(CONFIG_MMC) -void board_mmc_power_init(void) -{ - twl4030_power_mmc_init(0); -} -#endif - #ifdef CONFIG_OF_BOARD_SETUP static int ft_enable_by_compatible(void *blob, char *compat, int enable) { @@ -247,31 +174,69 @@ int ft_board_setup(void *blob, bd_t *bd) } #endif -void set_fdt(void) +void set_led(void) { - switch (gd->bd->bi_arch_number) { - case MACH_TYPE_IGEP0020: - env_set("fdtfile", "omap3-igep0020.dtb"); + switch (get_board_revision()) { + case 0: + case 1: + gpio_request(IGEP0020_GPIO_LED, "igep0020_gpio_led"); + gpio_direction_output(IGEP0020_GPIO_LED, 1); + break; + case 2: + case 3: + gpio_request(IGEP0030_GPIO_LED, "igep0030_gpio_led"); + gpio_direction_output(IGEP0030_GPIO_LED, 0); break; - case MACH_TYPE_IGEP0030: - env_set("fdtfile", "omap3-igep0030.dtb"); + default: + /* Should not happen... */ break; } } +void set_boardname(void) +{ + char rev[5] = { 'F','C','G','E', }; + int i = get_board_revision(); + + rev[i+1] = 0; + env_set("board_rev", rev + i); + env_set("board_name", i < 2 ? "igep0020" : "igep0030"); +} + /* * Routine: misc_init_r * Description: Configure board specific parts */ int misc_init_r(void) { + t2_t *t2_base = (t2_t *)T2_BASE; + u32 pbias_lite; + twl4030_power_init(); + /* set VSIM to 1.8V */ + twl4030_pmrecv_vsel_cfg(TWL4030_PM_RECEIVER_VSIM_DEDICATED, + TWL4030_PM_RECEIVER_VSIM_VSEL_18, + TWL4030_PM_RECEIVER_VSIM_DEV_GRP, + TWL4030_PM_RECEIVER_DEV_GRP_P1); + + /* set up dual-voltage GPIOs to 1.8V */ + pbias_lite = readl(&t2_base->pbias_lite); + pbias_lite &= ~PBIASLITEVMODE1; + pbias_lite |= PBIASLITEPWRDNZ1; + writel(pbias_lite, &t2_base->pbias_lite); + if (get_cpu_family() == CPU_OMAP36XX) + writel(readl(OMAP34XX_CTRL_WKUP_CTRL) | + OMAP34XX_CTRL_WKUP_CTRL_GPIO_IO_PWRDNZ, + OMAP34XX_CTRL_WKUP_CTRL); + setup_net_chip(); omap_die_id_display(); - set_fdt(); + set_led(); + + set_boardname(); return 0; } @@ -292,22 +257,3 @@ void board_mtdparts_default(const char **mtdids, const char **mtdparts) *mtdparts = parts; } } - -/* - * Routine: set_muxconf_regs - * Description: Setting up the configuration Mux registers specific to the - * hardware. Many pins need to be moved from protect to primary - * mode. - */ -void set_muxconf_regs(void) -{ - MUX_DEFAULT(); - -#if (CONFIG_MACH_TYPE == MACH_TYPE_IGEP0020) - MUX_IGEP0020(); -#endif - -#if (CONFIG_MACH_TYPE == MACH_TYPE_IGEP0030) - MUX_IGEP0030(); -#endif -} diff --git a/board/isee/igep00x0/igep00x0.h b/board/isee/igep00x0/igep00x0.h index 5698efab5d..1cbe7c94d9 100644 --- a/board/isee/igep00x0/igep00x0.h +++ b/board/isee/igep00x0/igep00x0.h @@ -103,6 +103,8 @@ MUX_VAL(CP(MMC1_DAT1), (IEN | PTU | EN | M0)) /* MMC1_DAT1 */\ MUX_VAL(CP(MMC1_DAT2), (IEN | PTU | EN | M0)) /* MMC1_DAT2 */\ MUX_VAL(CP(MMC1_DAT3), (IEN | PTU | EN | M0)) /* MMC1_DAT3 */\ + MUX_VAL(CP(UART1_TX), (IDIS | PTD | DIS | M0)) /* UART1_TX */\ + MUX_VAL(CP(UART1_RX), (IEN | PTD | DIS | M0)) /* UART1_RX */\ MUX_VAL(CP(UART3_TX_IRTX), (IDIS | PTD | DIS | M0)) /* UART3_TX */\ MUX_VAL(CP(UART3_RX_IRRX), (IEN | PTD | DIS | M0)) /* UART3_RX */\ MUX_VAL(CP(I2C1_SCL), (IEN | PTU | EN | M0)) /* I2C1_SCL */\ @@ -117,13 +119,10 @@ MUX_VAL(CP(SYS_BOOT4), (IEN | PTD | DIS | M4)) /* GPIO_6 */\ MUX_VAL(CP(SYS_BOOT5), (IEN | PTD | DIS | M4)) /* GPIO_7 */\ MUX_VAL(CP(SYS_BOOT6), (IEN | PTD | DIS | M4)) /* GPIO_8 */\ + MUX_VAL(CP(ETK_D14_ES2), (IEN | PTU | EN | M4)) /* GPIO_28 */\ + MUX_VAL(CP(GPMC_NCS3), (IDIS | PTD | DIS | M4)) /* GPIO_54 */\ + MUX_VAL(CP(GPMC_WAIT2), (IEN | PTU | DIS | M4)) /* GPIO_64 */\ + MUX_VAL(CP(GPIO129), (IEN | PTU | EN | M4)) /* GPIO_129 */\ MUX_VAL(CP(SDRC_CKE0), (IDIS | PTU | EN | M0)) /* SDRC_CKE0 */\ MUX_VAL(CP(SDRC_CKE1), (IDIS | PTU | EN | M0)) /* SDRC_CKE1 */ #endif - -#define MUX_IGEP0020() \ - MUX_VAL(CP(GPMC_WAIT2), (IEN | PTU | DIS | M4)) /* GPIO_64-ETH_NRST */\ - -#define MUX_IGEP0030() \ - MUX_VAL(CP(UART1_TX), (IDIS | PTD | DIS | M0)) /* UART1_TX */\ - MUX_VAL(CP(UART1_RX), (IEN | PTD | DIS | M0)) /* UART1_RX */ diff --git a/board/isee/igep00x0/spl.c b/board/isee/igep00x0/spl.c new file mode 100644 index 0000000000..eb705cbe88 --- /dev/null +++ b/board/isee/igep00x0/spl.c @@ -0,0 +1,64 @@ +/* + * SPDX-License-Identifier: GPL-2.0+ + */ +#include <asm/io.h> +#include <asm/arch/mem.h> +#include <asm/arch/sys_proto.h> +#include <jffs2/load_kernel.h> +#include <linux/mtd/nand.h> +#include "igep00x0.h" + +/* + * 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 both banks. + */ +void get_board_mem_timings(struct board_sdrc_timings *timings) +{ + int mfr, id, err = identify_nand_chip(&mfr, &id); + + timings->mr = MICRON_V_MR_165; + if (!err) { + switch (mfr) { + case NAND_MFR_HYNIX: + timings->mcfg = HYNIX_V_MCFG_200(256 << 20); + timings->ctrla = HYNIX_V_ACTIMA_200; + timings->ctrlb = HYNIX_V_ACTIMB_200; + break; + case NAND_MFR_MICRON: + timings->mcfg = MICRON_V_MCFG_200(256 << 20); + timings->ctrla = MICRON_V_ACTIMA_200; + timings->ctrlb = MICRON_V_ACTIMB_200; + break; + default: + /* Should not happen... */ + break; + } + timings->rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_200MHz; + gpmc_cs0_flash = MTD_DEV_TYPE_NAND; + } else { + if (get_cpu_family() == CPU_OMAP34XX) { + timings->mcfg = NUMONYX_V_MCFG_165(256 << 20); + timings->ctrla = NUMONYX_V_ACTIMA_165; + timings->ctrlb = NUMONYX_V_ACTIMB_165; + timings->rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_165MHz; + } else { + timings->mcfg = NUMONYX_V_MCFG_200(256 << 20); + timings->ctrla = NUMONYX_V_ACTIMA_200; + timings->ctrlb = NUMONYX_V_ACTIMB_200; + timings->rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_200MHz; + } + gpmc_cs0_flash = MTD_DEV_TYPE_ONENAND; + } +} + +#ifdef CONFIG_SPL_OS_BOOT +int spl_start_uboot(void) +{ + /* break into full u-boot on 'c' */ + if (serial_tstc() && serial_getc() == 'c') + return 1; + + return 0; +} +#endif diff --git a/board/renesas/salvator-x/salvator-x.c b/board/renesas/salvator-x/salvator-x.c index 6270de4e40..a09cd56d66 100644 --- a/board/renesas/salvator-x/salvator-x.c +++ b/board/renesas/salvator-x/salvator-x.c @@ -161,22 +161,9 @@ int board_init(void) return 0; } -static struct eth_pdata salvator_x_ravb_platdata = { - .iobase = 0xE6800000, - .phy_interface = 0, - .max_speed = 1000, -}; - -U_BOOT_DEVICE(salvator_x_ravb) = { - .name = "ravb", - .platdata = &salvator_x_ravb_platdata, -}; - #ifdef CONFIG_SH_SDHI int board_mmc_init(bd_t *bis) { - int ret = -ENODEV; - /* SDHI0 */ gpio_request(GPIO_GFN_SD0_DAT0, NULL); gpio_request(GPIO_GFN_SD0_DAT1, NULL); @@ -192,11 +179,6 @@ int board_mmc_init(bd_t *bis) gpio_direction_output(GPIO_GP_5_2, 1); /* power on */ gpio_direction_output(GPIO_GP_5_1, 1); /* 1: 3.3V, 0: 1.8V */ - ret = sh_sdhi_init(CONFIG_SYS_SH_SDHI0_BASE, 0, - SH_SDHI_QUIRK_64BIT_BUF); - if (ret) - return ret; - /* SDHI1/SDHI2 eMMC */ gpio_request(GPIO_GFN_SD1_DAT0, NULL); gpio_request(GPIO_GFN_SD1_DAT1, NULL); @@ -219,11 +201,6 @@ int board_mmc_init(bd_t *bis) gpio_direction_output(GPIO_GP_5_3, 0); /* 1: 3.3V, 0: 1.8V */ gpio_direction_output(GPIO_GP_5_9, 0); /* 1: 3.3V, 0: 1.8V */ - ret = sh_sdhi_init(CONFIG_SYS_SH_SDHI2_BASE, 1, - SH_SDHI_QUIRK_64BIT_BUF); - if (ret) - return ret; - #if defined(CONFIG_R8A7795) /* SDHI3 */ gpio_request(GPIO_GFN_SD3_DAT0, NULL); /* GP_4_9 */ @@ -251,9 +228,7 @@ int board_mmc_init(bd_t *bis) gpio_direction_output(GPIO_GP_3_15, 1); /* power on */ gpio_direction_output(GPIO_GP_3_14, 1); /* 1: 3.3V, 0: 1.8V */ - ret = sh_sdhi_init(CONFIG_SYS_SH_SDHI3_BASE, 2, - SH_SDHI_QUIRK_64BIT_BUF); - return ret; + return 0; } #endif @@ -311,15 +286,3 @@ void reset_cpu(ulong addr) writel(RST_CODE, RST_CA57RESCNT); #endif } - -static const struct sh_serial_platdata serial_platdata = { - .base = SCIF2_BASE, - .type = PORT_SCIF, - .clk = CONFIG_SH_SCIF_CLK_FREQ, - .clk_mode = INT_CLK, -}; - -U_BOOT_DEVICE(salvator_x_scif2) = { - .name = "serial_sh", - .platdata = &serial_platdata, -}; diff --git a/board/renesas/ulcb/ulcb.c b/board/renesas/ulcb/ulcb.c index 4005ec8ad5..068cbdea03 100644 --- a/board/renesas/ulcb/ulcb.c +++ b/board/renesas/ulcb/ulcb.c @@ -140,22 +140,9 @@ int board_init(void) return 0; } -static struct eth_pdata salvator_x_ravb_platdata = { - .iobase = 0xE6800000, - .phy_interface = 0, - .max_speed = 1000, -}; - -U_BOOT_DEVICE(salvator_x_ravb) = { - .name = "ravb", - .platdata = &salvator_x_ravb_platdata, -}; - #ifdef CONFIG_SH_SDHI int board_mmc_init(bd_t *bis) { - int ret = -ENODEV; - /* SDHI0 */ gpio_request(GPIO_GFN_SD0_DAT0, NULL); gpio_request(GPIO_GFN_SD0_DAT1, NULL); @@ -171,11 +158,6 @@ int board_mmc_init(bd_t *bis) gpio_direction_output(GPIO_GP_5_2, 1); /* power on */ gpio_direction_output(GPIO_GP_5_1, 1); /* 1: 3.3V, 0: 1.8V */ - ret = sh_sdhi_init(CONFIG_SYS_SH_SDHI0_BASE, 0, - SH_SDHI_QUIRK_64BIT_BUF); - if (ret) - return ret; - /* SDHI1/SDHI2 eMMC */ gpio_request(GPIO_GFN_SD1_DAT0, NULL); gpio_request(GPIO_GFN_SD1_DAT1, NULL); @@ -198,10 +180,7 @@ int board_mmc_init(bd_t *bis) gpio_direction_output(GPIO_GP_5_3, 0); /* 1: 3.3V, 0: 1.8V */ gpio_direction_output(GPIO_GP_5_9, 0); /* 1: 3.3V, 0: 1.8V */ - ret = sh_sdhi_init(CONFIG_SYS_SH_SDHI2_BASE, 1, - SH_SDHI_QUIRK_64BIT_BUF); - - return ret; + return 0; } #endif @@ -243,15 +222,3 @@ int dram_init_banksize(void) const struct rmobile_sysinfo sysinfo = { CONFIG_RCAR_BOARD_STRING }; - -static const struct sh_serial_platdata serial_platdata = { - .base = SCIF2_BASE, - .type = PORT_SCIF, - .clk = CONFIG_SH_SCIF_CLK_FREQ, - .clk_mode = INT_CLK, -}; - -U_BOOT_DEVICE(salvator_x_scif2) = { - .name = "serial_sh", - .platdata = &serial_platdata, -}; diff --git a/board/spear/common/Makefile b/board/spear/common/Makefile deleted file mode 100644 index b0ba320481..0000000000 --- a/board/spear/common/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -# -# (C) Copyright 2006 -# Wolfgang Denk, DENX Software Engineering, wd@denx.de. -# -# SPDX-License-Identifier: GPL-2.0+ -# - -ifdef CONFIG_SPL_BUILD -# necessary to create built-in.o -obj- := __dummy__.o -else -obj-y := spr_misc.o -obj-y += spr_lowlevel_init.o -endif diff --git a/board/spear/common/spr_lowlevel_init.S b/board/spear/common/spr_lowlevel_init.S deleted file mode 100644 index 649488399a..0000000000 --- a/board/spear/common/spr_lowlevel_init.S +++ /dev/null @@ -1,174 +0,0 @@ -/* - * (C) Copyright 2006 - * Vipin Kumar, ST Micoelectronics, vipin.kumar@st.com. - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include <config.h> - -/* - * platform specific initializations are already done in Xloader - * Initializations already done include - * DDR, PLLs, IP's clock enable and reset release etc - */ -.globl lowlevel_init -lowlevel_init: - mov pc, lr - -/* void setfreq(unsigned int device, unsigned int frequency) */ -.global setfreq -setfreq: - stmfd sp!,{r14} - stmfd sp!,{r0-r12} - - mov r8,sp - ldr sp,SRAM_STACK_V - - /* Saving the function arguements for later use */ - mov r4,r0 - mov r5,r1 - - /* Putting DDR into self refresh */ - ldr r0,DDR_07_V - ldr r1,[r0] - ldr r2,DDR_ACTIVE_V - bic r1, r1, r2 - str r1,[r0] - ldr r0,DDR_57_V - ldr r1,[r0] - ldr r2,CYCLES_MASK_V - bic r1, r1, r2 - ldr r2,REFRESH_CYCLES_V - orr r1, r1, r2, lsl #16 - str r1,[r0] - ldr r0,DDR_07_V - ldr r1,[r0] - ldr r2,SREFRESH_MASK_V - orr r1, r1, r2 - str r1,[r0] - - /* flush pipeline */ - b flush - .align 5 -flush: - /* Delay to ensure self refresh mode */ - ldr r0,SREFRESH_DELAY_V -delay: - sub r0,r0,#1 - cmp r0,#0 - bne delay - - /* Putting system in slow mode */ - ldr r0,SCCTRL_V - mov r1,#2 - str r1,[r0] - - /* Changing PLL(1/2) frequency */ - mov r0,r4 - mov r1,r5 - - cmp r4,#0 - beq pll1_freq - - /* Change PLL2 (DDR frequency) */ - ldr r6,PLL2_FREQ_V - ldr r7,PLL2_CNTL_V - b pll2_freq - -pll1_freq: - /* Change PLL1 (CPU frequency) */ - ldr r6,PLL1_FREQ_V - ldr r7,PLL1_CNTL_V - -pll2_freq: - mov r0,r6 - ldr r1,[r0] - ldr r2,PLLFREQ_MASK_V - bic r1,r1,r2 - mov r2,r5,lsr#1 - orr r1,r1,r2,lsl#24 - str r1,[r0] - - mov r0,r7 - ldr r1,P1C0A_V - str r1,[r0] - ldr r1,P1C0E_V - str r1,[r0] - ldr r1,P1C06_V - str r1,[r0] - ldr r1,P1C0E_V - str r1,[r0] - -lock: - ldr r1,[r0] - and r1,r1,#1 - cmp r1,#0 - beq lock - - /* Putting system back to normal mode */ - ldr r0,SCCTRL_V - mov r1,#4 - str r1,[r0] - - /* Putting DDR back to normal */ - ldr r0,DDR_07_V - ldr r1,[R0] - ldr r2,SREFRESH_MASK_V - bic r1, r1, r2 - str r1,[r0] - ldr r2,DDR_ACTIVE_V - orr r1, r1, r2 - str r1,[r0] - - /* Delay to ensure self refresh mode */ - ldr r0,SREFRESH_DELAY_V -1: - sub r0,r0,#1 - cmp r0,#0 - bne 1b - - mov sp,r8 - /* Resuming back to code */ - ldmia sp!,{r0-r12} - ldmia sp!,{pc} - -SCCTRL_V: - .word 0xfca00000 -PLL1_FREQ_V: - .word 0xfca8000C -PLL1_CNTL_V: - .word 0xfca80008 -PLL2_FREQ_V: - .word 0xfca80018 -PLL2_CNTL_V: - .word 0xfca80014 -PLLFREQ_MASK_V: - .word 0xff000000 -P1C0A_V: - .word 0x1C0A -P1C0E_V: - .word 0x1C0E -P1C06_V: - .word 0x1C06 - -SREFRESH_DELAY_V: - .word 0x9999 -SRAM_STACK_V: - .word 0xD2800600 -DDR_07_V: - .word 0xfc60001c -DDR_ACTIVE_V: - .word 0x01000000 -DDR_57_V: - .word 0xfc6000e4 -CYCLES_MASK_V: - .word 0xffff0000 -REFRESH_CYCLES_V: - .word 0xf0f0 -SREFRESH_MASK_V: - .word 0x00010000 - -.global setfreq_sz -setfreq_sz: - .word setfreq_sz - setfreq diff --git a/board/spear/common/spr_misc.c b/board/spear/common/spr_misc.c deleted file mode 100644 index a02304f49e..0000000000 --- a/board/spear/common/spr_misc.c +++ /dev/null @@ -1,249 +0,0 @@ -/* - * (C) Copyright 2009 - * Vipin Kumar, ST Micoelectronics, vipin.kumar@st.com. - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include <common.h> -#include <command.h> -#include <i2c.h> -#include <net.h> -#include <linux/mtd/st_smi.h> -#include <asm/io.h> -#include <asm/arch/hardware.h> -#include <asm/arch/spr_emi.h> -#include <asm/arch/spr_defs.h> - -#define CPU 0 -#define DDR 1 -#define SRAM_REL 0xD2801000 - -DECLARE_GLOBAL_DATA_PTR; - -#if defined(CONFIG_CMD_NET) -static int i2c_read_mac(uchar *buffer); -#endif - -int dram_init(void) -{ - /* Store complete RAM size and return */ - gd->ram_size = get_ram_size(PHYS_SDRAM_1, PHYS_SDRAM_1_MAXSIZE); - - return 0; -} - -int dram_init_banksize(void) -{ - gd->bd->bi_dram[0].start = PHYS_SDRAM_1; - gd->bd->bi_dram[0].size = gd->ram_size; - - return 0; -} - -int board_early_init_f() -{ -#if defined(CONFIG_ST_SMI) - smi_init(); -#endif - return 0; -} -int misc_init_r(void) -{ -#if defined(CONFIG_CMD_NET) - uchar mac_id[6]; - - if (!eth_env_get_enetaddr("ethaddr", mac_id) && !i2c_read_mac(mac_id)) - eth_env_set_enetaddr("ethaddr", mac_id); -#endif - env_set("verify", "n"); - -#if defined(CONFIG_SPEAR_USBTTY) - env_set("stdin", "usbtty"); - env_set("stdout", "usbtty"); - env_set("stderr", "usbtty"); - -#ifndef CONFIG_SYS_NO_DCACHE - dcache_enable(); -#endif -#endif - return 0; -} - -#ifdef CONFIG_SPEAR_EMI -struct cust_emi_para { - unsigned int tap; - unsigned int tsdp; - unsigned int tdpw; - unsigned int tdpr; - unsigned int tdcs; -}; - -/* EMI timing setting of m28w640hc of linux kernel */ -const struct cust_emi_para emi_timing_m28w640hc = { - .tap = 0x10, - .tsdp = 0x05, - .tdpw = 0x0a, - .tdpr = 0x0a, - .tdcs = 0x05, -}; - -/* EMI timing setting of bootrom */ -const struct cust_emi_para emi_timing_bootrom = { - .tap = 0xf, - .tsdp = 0x0, - .tdpw = 0xff, - .tdpr = 0x111, - .tdcs = 0x02, -}; - -void spear_emi_init(void) -{ - const struct cust_emi_para *p = &emi_timing_m28w640hc; - struct emi_regs *emi_regs_p = (struct emi_regs *)CONFIG_SPEAR_EMIBASE; - unsigned int cs; - unsigned int val, tmp; - - val = readl(CONFIG_SPEAR_RASBASE); - - if (val & EMI_ACKMSK) - tmp = 0x3f; - else - tmp = 0x0; - - writel(tmp, &emi_regs_p->ack); - - for (cs = 0; cs < CONFIG_SYS_MAX_FLASH_BANKS; cs++) { - writel(p->tap, &emi_regs_p->bank_regs[cs].tap); - writel(p->tsdp, &emi_regs_p->bank_regs[cs].tsdp); - writel(p->tdpw, &emi_regs_p->bank_regs[cs].tdpw); - writel(p->tdpr, &emi_regs_p->bank_regs[cs].tdpr); - writel(p->tdcs, &emi_regs_p->bank_regs[cs].tdcs); - writel(EMI_CNTL_ENBBYTERW | ((val & 0x18) >> 3), - &emi_regs_p->bank_regs[cs].control); - } -} -#endif - -int spear_board_init(ulong mach_type) -{ - gd->bd->bi_arch_number = mach_type; - - /* adress of boot parameters */ - gd->bd->bi_boot_params = CONFIG_BOOT_PARAMS_ADDR; - -#ifdef CONFIG_SPEAR_EMI - spear_emi_init(); -#endif - return 0; -} - -#if defined(CONFIG_CMD_NET) -static int i2c_read_mac(uchar *buffer) -{ - u8 buf[2]; - - i2c_read(CONFIG_I2C_CHIPADDRESS, MAGIC_OFF, 1, buf, MAGIC_LEN); - - /* Check if mac in i2c memory is valid */ - if ((buf[0] == MAGIC_BYTE0) && (buf[1] == MAGIC_BYTE1)) { - /* Valid mac address is saved in i2c eeprom */ - i2c_read(CONFIG_I2C_CHIPADDRESS, MAC_OFF, 1, buffer, MAC_LEN); - return 0; - } - - return -1; -} - -static int write_mac(uchar *mac) -{ - u8 buf[2]; - - buf[0] = (u8)MAGIC_BYTE0; - buf[1] = (u8)MAGIC_BYTE1; - i2c_write(CONFIG_I2C_CHIPADDRESS, MAGIC_OFF, 1, buf, MAGIC_LEN); - - buf[0] = (u8)~MAGIC_BYTE0; - buf[1] = (u8)~MAGIC_BYTE1; - - i2c_read(CONFIG_I2C_CHIPADDRESS, MAGIC_OFF, 1, buf, MAGIC_LEN); - - /* check if valid MAC address is saved in I2C EEPROM or not? */ - if ((buf[0] == MAGIC_BYTE0) && (buf[1] == MAGIC_BYTE1)) { - i2c_write(CONFIG_I2C_CHIPADDRESS, MAC_OFF, 1, mac, MAC_LEN); - puts("I2C EEPROM written with mac address \n"); - return 0; - } - - puts("I2C EEPROM writing failed\n"); - return -1; -} -#endif - -int do_chip_config(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) -{ - void (*sram_setfreq) (unsigned int, unsigned int); - unsigned int frequency; -#if defined(CONFIG_CMD_NET) - unsigned char mac[6]; -#endif - - if ((argc > 3) || (argc < 2)) - return cmd_usage(cmdtp); - - if ((!strcmp(argv[1], "cpufreq")) || (!strcmp(argv[1], "ddrfreq"))) { - - frequency = simple_strtoul(argv[2], NULL, 0); - - if (frequency > 333) { - printf("Frequency is limited to 333MHz\n"); - return 1; - } - - sram_setfreq = memcpy((void *)SRAM_REL, setfreq, setfreq_sz); - - if (!strcmp(argv[1], "cpufreq")) { - sram_setfreq(CPU, frequency); - printf("CPU frequency changed to %u\n", frequency); - } else { - sram_setfreq(DDR, frequency); - printf("DDR frequency changed to %u\n", frequency); - } - - return 0; - -#if defined(CONFIG_CMD_NET) - } else if (!strcmp(argv[1], "ethaddr")) { - - u32 reg; - char *e, *s = argv[2]; - for (reg = 0; reg < 6; ++reg) { - mac[reg] = s ? simple_strtoul(s, &e, 16) : 0; - if (s) - s = (*e) ? e + 1 : e; - } - write_mac(mac); - - return 0; -#endif - } else if (!strcmp(argv[1], "print")) { -#if defined(CONFIG_CMD_NET) - if (!i2c_read_mac(mac)) { - printf("Ethaddr (from i2c mem) = %pM\n", mac); - } else { - printf("Ethaddr (from i2c mem) = Not set\n"); - } -#endif - return 0; - } - - return cmd_usage(cmdtp); -} - -U_BOOT_CMD(chip_config, 3, 1, do_chip_config, - "configure chip", - "chip_config cpufreq/ddrfreq frequency\n" -#if defined(CONFIG_CMD_NET) - "chip_config ethaddr XX:XX:XX:XX:XX:XX\n" -#endif - "chip_config print"); |