int board_mmc_init(bd_t *bis) { int i, ret, ret_sd = 0; /* MASSMEMORY_EN: XMSMDATA7: GPJ2[7] output high */ gpio_request(S5PC110_GPIO_J27, "massmemory_en"); gpio_direction_output(S5PC110_GPIO_J27, 1); /* * MMC0 GPIO * GPG0[0] SD_0_CLK * GPG0[1] SD_0_CMD * GPG0[2] SD_0_CDn -> Not used * GPG0[3:6] SD_0_DATA[0:3] */ for (i = S5PC110_GPIO_G00; i < S5PC110_GPIO_G07; i++) { if (i == S5PC110_GPIO_G02) continue; /* GPG0[0:6] special function 2 */ gpio_cfg_pin(i, 0x2); /* GPG0[0:6] pull disable */ gpio_set_pull(i, S5P_GPIO_PULL_NONE); /* GPG0[0:6] drv 4x */ gpio_set_drv(i, S5P_GPIO_DRV_4X); } ret = s5p_mmc_init(0, 4); if (ret) pr_err("MMC: Failed to init MMC:0.\n"); /* * SD card (T_FLASH) detect and init * T_FLASH_DETECT: EINT28: GPH3[4] input mode */ gpio_request(S5PC110_GPIO_H34, "t_flash_detect"); gpio_cfg_pin(S5PC110_GPIO_H34, S5P_GPIO_INPUT); gpio_set_pull(S5PC110_GPIO_H34, S5P_GPIO_PULL_UP); if (!gpio_get_value(S5PC110_GPIO_H34)) { for (i = S5PC110_GPIO_G20; i < S5PC110_GPIO_G27; i++) { if (i == S5PC110_GPIO_G22) continue; /* GPG2[0:6] special function 2 */ gpio_cfg_pin(i, 0x2); /* GPG2[0:6] pull disable */ gpio_set_pull(i, S5P_GPIO_PULL_NONE); /* GPG2[0:6] drv 4x */ gpio_set_drv(i, S5P_GPIO_DRV_4X); } ret_sd = s5p_mmc_init(2, 4); if (ret_sd) pr_err("MMC: Failed to init SD card (MMC:2).\n"); } return ret & ret_sd; }
int board_mmc_init(bd_t *bis) { int i, ret, ret_sd = 0; /* MASSMEMORY_EN: XMSMDATA7: GPJ2[7] output high */ s5p_gpio_direction_output(&s5pc110_gpio->j2, 7, 1); /* * MMC0 GPIO * GPG0[0] SD_0_CLK * GPG0[1] SD_0_CMD * GPG0[2] SD_0_CDn -> Not used * GPG0[3:6] SD_0_DATA[0:3] */ for (i = 0; i < 7; i++) { if (i == 2) continue; /* GPG0[0:6] special function 2 */ s5p_gpio_cfg_pin(&s5pc110_gpio->g0, i, 0x2); /* GPG0[0:6] pull disable */ s5p_gpio_set_pull(&s5pc110_gpio->g0, i, GPIO_PULL_NONE); /* GPG0[0:6] drv 4x */ s5p_gpio_set_drv(&s5pc110_gpio->g0, i, GPIO_DRV_4X); } ret = s5p_mmc_init(0, 4); if (ret) error("MMC: Failed to init MMC:0.\n"); /* * SD card (T_FLASH) detect and init * T_FLASH_DETECT: EINT28: GPH3[4] input mode */ s5p_gpio_cfg_pin(&s5pc110_gpio->h3, 4, GPIO_INPUT); s5p_gpio_set_pull(&s5pc110_gpio->h3, 4, GPIO_PULL_UP); if (!s5p_gpio_get_value(&s5pc110_gpio->h3, 4)) { for (i = 0; i < 7; i++) { if (i == 2) continue; /* GPG2[0:6] special function 2 */ s5p_gpio_cfg_pin(&s5pc110_gpio->g2, i, 0x2); /* GPG2[0:6] pull disable */ s5p_gpio_set_pull(&s5pc110_gpio->g2, i, GPIO_PULL_NONE); /* GPG2[0:6] drv 4x */ s5p_gpio_set_drv(&s5pc110_gpio->g2, i, GPIO_DRV_4X); } ret_sd = s5p_mmc_init(2, 4); if (ret_sd) error("MMC: Failed to init SD card (MMC:2).\n"); } return ret & ret_sd; }
/* Set Initial global variables */ s5pc110_gpio = (struct s5pc110_gpio *)S5PC110_GPIO_BASE; //smc9115_pre_init(); pwm_pre_init(); gd->bd->bi_arch_number = MACH_TYPE_SMDKC100; gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100; return 0; } int dram_init(void) { gd->ram_size = get_ram_size((long *)PHYS_SDRAM_1, PHYS_SDRAM_1_SIZE); return 0; } void dram_init_banksize(void) { gd->bd->bi_dram[0].start = PHYS_SDRAM_1; gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE; } #ifdef CONFIG_DISPLAY_BOARDINFO int checkboard(void) { printf("\nBoard: FriendlyARM-TINY210\n"); return 0; } #endif int board_eth_init(bd_t *bis) { int rc = 0; #ifdef CONFIG_SMC911X rc = smc911x_initialize(0, CONFIG_SMC911X_BASE); #endif return rc; } ulong virt_to_phy_smdkc110(ulong addr) { if ((0xc0000000 <= addr) && (addr < 0xd0000000)) return (addr - 0xc0000000 + 0x20000000); else printf("The input address don't need "\ "a virtual-to-physical translation : %08lx\n", addr); return addr; } #ifdef CONFIG_GENERIC_MMC #define MOUTMMC (50000000) /* 50MHz */ int board_mmc_init(bd_t *bis) { int i; struct s5pc110_clock *clk = (struct s5pc110_clock *)samsung_get_base_clock(); unsigned long clk_src, clk_div, mpll, div; /* * MMC0 GPIO * GPG0[0] SD_0_CLK * GPG0[1] SD_0_CMD * GPG0[2] SD_0_CDn -> Not used * GPG0[3:6] SD_0_DATA[0:3] * * MMC1 GPIO * GPG1[0] SD_1_CLK * GPG1[1] SD_1_CMD * GPG1[2] SD_1_CDn -> Not used * GPG1[3:6] SD_1_DATA[0:3] */ for (i = 0; i < 7; i++) { if (i == 2) continue; /* GPG0[0:6] special function 2 */ s5p_gpio_cfg_pin(&s5pc110_gpio->g0, i, 0x2); /* GPG0[0:6] pull disable */ s5p_gpio_set_pull(&s5pc110_gpio->g0, i, GPIO_PULL_NONE); /* GPG0[0:6] drv 4x */ s5p_gpio_set_drv(&s5pc110_gpio->g0, i, GPIO_DRV_4X); /* GPG1[0:6] special function 2 */ s5p_gpio_cfg_pin(&s5pc110_gpio->g1, i, 0x2); /* GPG1[0:6] pull disable */ s5p_gpio_set_pull(&s5pc110_gpio->g1, i, GPIO_PULL_NONE); /* GPG1[0:6] drv 4x */ s5p_gpio_set_drv(&s5pc110_gpio->g1, i, GPIO_DRV_4X); } clk_src = readl(&clk->res9[0]); /* CLK_SRC4 */ clk_src &= ~((0xf << 4) | 0xf); clk_src |= (0x6 << 4) | 0x6; /* Set MMC0/1_SEL to SCLK_MPLL */ mpll = get_pll_clk(MPLL); div = ((mpll + MOUTMMC) / MOUTMMC) - 1; clk_div = readl(&clk->div4); clk_div &= ~((0xf << 4) | 0xf); clk_div |= (div << 4) | div; writel(clk_src, &clk->res9[0]); writel(clk_div, &clk->div4); return (s5p_mmc_init(0, 4) || s5p_mmc_init(1, 4)); }
int board_mmc_init(bd_t *bis) { int err; switch (get_hwrev()) { case 0: /* * Set the low to enable LDO_EN * But when you use the test board for eMMC booting * you should set it HIGH since it removes the inverter */ /* MASSMEMORY_EN: XMDMDATA_6: GPE3[6] */ s5p_gpio_direction_output(&gpio1->e3, 6, 0); break; default: /* * Default reset state is High and there's no inverter * But set it as HIGH to ensure */ /* MASSMEMORY_EN: XMDMADDR_3: GPE1[3] */ s5p_gpio_direction_output(&gpio1->e1, 3, 1); break; } /* * MMC device init * mmc0 : eMMC (8-bit buswidth) * mmc2 : SD card (4-bit buswidth) */ err = exynos_pinmux_config(PERIPH_ID_SDMMC0, PINMUX_FLAG_8BIT_MODE); if (err) debug("SDMMC0 not configured\n"); else err = s5p_mmc_init(0, 8); /* T-flash detect */ s5p_gpio_cfg_pin(&gpio2->x3, 4, 0xf); s5p_gpio_set_pull(&gpio2->x3, 4, GPIO_PULL_UP); /* * Check the T-flash detect pin * GPX3[4] T-flash detect pin */ if (!s5p_gpio_get_value(&gpio2->x3, 4)) { err = exynos_pinmux_config(PERIPH_ID_SDMMC2, PINMUX_FLAG_NONE); if (err) debug("SDMMC2 not configured\n"); else err = s5p_mmc_init(2, 4); } return err; }
int board_mmc_init(bd_t *bis) { int i; /* MASSMEMORY_EN: XMSMDATA7: GPJ2[7] output high */ s5p_gpio_direction_output(&s5pc110_gpio->j2, 7, 1); /* * MMC0 GPIO * GPG0[0] SD_0_CLK * GPG0[1] SD_0_CMD * GPG0[2] SD_0_CDn -> Not used * GPG0[3:6] SD_0_DATA[0:3] */ for (i = 0; i < 7; i++) { if (i == 2) continue; /* GPG0[0:6] special function 2 */ s5p_gpio_cfg_pin(&s5pc110_gpio->g0, i, 0x2); /* GPG0[0:6] pull disable */ s5p_gpio_set_pull(&s5pc110_gpio->g0, i, GPIO_PULL_NONE); /* GPG0[0:6] drv 4x */ s5p_gpio_set_drv(&s5pc110_gpio->g0, i, GPIO_DRV_4X); } return s5p_mmc_init(0, 4); }
int board_mmc_init(bd_t *bis) { int i, err; /* * MMC2 SD card GPIO: * * GPK2[0] SD_2_CLK(2) * GPK2[1] SD_2_CMD(2) * GPK2[2] SD_2_CDn * GPK2[3:6] SD_2_DATA[0:3](2) */ for (i = 0; i < 7; i++) { /* GPK2[0:6] special function 2 */ s5p_gpio_cfg_pin(&gpio2->k2, i, GPIO_FUNC(0x2)); /* GPK2[0:6] drv 4x */ s5p_gpio_set_drv(&gpio2->k2, i, GPIO_DRV_4X); /* GPK2[0:1] pull disable */ if (i == 0 || i == 1) { s5p_gpio_set_pull(&gpio2->k2, i, GPIO_PULL_NONE); continue; } /* GPK2[2:6] pull up */ s5p_gpio_set_pull(&gpio2->k2, i, GPIO_PULL_UP); } err = s5p_mmc_init(2, 4); return err; }
int board_sdmmc_init(void) { int err; err = exynos_pinmux_config(PERIPH_ID_SDMMC2, PINMUX_FLAG_NONE); if (err) { debug("SDMMC2 not configured\n"); return err; } return s5p_mmc_init(2, 4); }
int board_emmc_init(void) { int err; err = exynos_pinmux_config(PERIPH_ID_SDMMC0, PINMUX_FLAG_8BIT_MODE); if (err) { debug("SDMMC0 not configured\n"); return err; } return s5p_mmc_init(0, 8); }
int board_mmc_init(bd_t *bis) { struct exynos4_gpio_part2 *gpio = (struct exynos4_gpio_part2 *)samsung_get_base_gpio_part2(); int err; /* eMMC_EN: SD_0_CDn: GPK0[2] Output High */ s5p_gpio_direction_output(&gpio->k0, 2, 1); s5p_gpio_set_pull(&gpio->k0, 2, GPIO_PULL_NONE); /* * MMC device init * mmc0 : eMMC (8-bit buswidth) * mmc2 : SD card (4-bit buswidth) */ err = exynos_pinmux_config(PERIPH_ID_SDMMC0, PINMUX_FLAG_8BIT_MODE); if (err) debug("SDMMC0 not configured\n"); else err = s5p_mmc_init(0, 8); /* T-flash detect */ s5p_gpio_cfg_pin(&gpio->x3, 4, 0xf); s5p_gpio_set_pull(&gpio->x3, 4, GPIO_PULL_UP); /* * Check the T-flash detect pin * GPX3[4] T-flash detect pin */ if (!s5p_gpio_get_value(&gpio->x3, 4)) { err = exynos_pinmux_config(PERIPH_ID_SDMMC2, PINMUX_FLAG_NONE); if (err) debug("SDMMC2 not configured\n"); else err = s5p_mmc_init(2, 4); } return err; }
int board_mmc_init(bd_t *bis) { int err = 0; gpio_direction_input(GPIO_TF_DETECT); s3c_gpio_set_pull(GPIO_TF_DETECT, GPIO_PULL_NONE); /* * Check the T-flash detect pin */ if (!gpio_get_value(GPIO_TF_DETECT)) { pmic_set_output(get_pmic(), MAX8698_REG_ONOFF1, MAX8698_LDO5, 1); udelay(20); s3c_gpio_cfg_bulk(tf_gpio_table, ARRAY_SIZE(tf_gpio_table)); err = s5p_mmc_init(0, 4); } return err; }
int board_mmc_init(bd_t *bis) { int i, err; switch (get_hwrev()) { case 0: /* * Set the low to enable LDO_EN * But when you use the test board for eMMC booting * you should set it HIGH since it removes the inverter */ /* MASSMEMORY_EN: XMDMDATA_6: GPE3[6] */ s5p_gpio_direction_output(&gpio1->e3, 6, 0); break; default: /* * Default reset state is High and there's no inverter * But set it as HIGH to ensure */ /* MASSMEMORY_EN: XMDMADDR_3: GPE1[3] */ s5p_gpio_direction_output(&gpio1->e1, 3, 1); break; } /* * eMMC GPIO: * SDR 8-bit@48MHz at MMC0 * GPK0[0] SD_0_CLK(2) * GPK0[1] SD_0_CMD(2) * GPK0[2] SD_0_CDn -> Not used * GPK0[3:6] SD_0_DATA[0:3](2) * GPK1[3:6] SD_0_DATA[0:3](3) * * DDR 4-bit@26MHz at MMC4 * GPK0[0] SD_4_CLK(3) * GPK0[1] SD_4_CMD(3) * GPK0[2] SD_4_CDn -> Not used * GPK0[3:6] SD_4_DATA[0:3](3) * GPK1[3:6] SD_4_DATA[4:7](4) */ for (i = 0; i < 7; i++) { if (i == 2) continue; /* GPK0[0:6] special function 2 */ s5p_gpio_cfg_pin(&gpio2->k0, i, 0x2); /* GPK0[0:6] pull disable */ s5p_gpio_set_pull(&gpio2->k0, i, GPIO_PULL_NONE); /* GPK0[0:6] drv 4x */ s5p_gpio_set_drv(&gpio2->k0, i, GPIO_DRV_4X); } for (i = 3; i < 7; i++) { /* GPK1[3:6] special function 3 */ s5p_gpio_cfg_pin(&gpio2->k1, i, 0x3); /* GPK1[3:6] pull disable */ s5p_gpio_set_pull(&gpio2->k1, i, GPIO_PULL_NONE); /* GPK1[3:6] drv 4x */ s5p_gpio_set_drv(&gpio2->k1, i, GPIO_DRV_4X); } /* T-flash detect */ s5p_gpio_cfg_pin(&gpio2->x3, 4, 0xf); s5p_gpio_set_pull(&gpio2->x3, 4, GPIO_PULL_UP); /* * MMC device init * mmc0 : eMMC (8-bit buswidth) * mmc2 : SD card (4-bit buswidth) */ err = s5p_mmc_init(0, 8); /* * Check the T-flash detect pin * GPX3[4] T-flash detect pin */ if (!s5p_gpio_get_value(&gpio2->x3, 4)) { /* * SD card GPIO: * GPK2[0] SD_2_CLK(2) * GPK2[1] SD_2_CMD(2) * GPK2[2] SD_2_CDn -> Not used * GPK2[3:6] SD_2_DATA[0:3](2) */ for (i = 0; i < 7; i++) { if (i == 2) continue; /* GPK2[0:6] special function 2 */ s5p_gpio_cfg_pin(&gpio2->k2, i, 0x2); /* GPK2[0:6] pull disable */ s5p_gpio_set_pull(&gpio2->k2, i, GPIO_PULL_NONE); /* GPK2[0:6] drv 4x */ s5p_gpio_set_drv(&gpio2->k2, i, GPIO_DRV_4X); } err = s5p_mmc_init(2, 4); } return err; }