static int beaglebone_devices_init(void) { int black; if (!of_machine_is_compatible("ti,am335x-bone")) return 0; if (bootsource_get() == BOOTSOURCE_MMC) { if (bootsource_get_instance() == 0) omap_set_bootmmc_devname("mmc0"); else omap_set_bootmmc_devname("mmc1"); } black = is_beaglebone_black(); defaultenv_append_directory(defaultenv_beaglebone); globalvar_add_simple("board.variant", black ? "boneblack" : "bone"); printf("detected 'BeagleBone %s'\n", black ? "Black" : "White"); armlinux_set_architecture(MACH_TYPE_BEAGLEBONE); /* Register update handler */ am33xx_bbu_emmc_mlo_register_handler("MLO.emmc", "/dev/mmc1"); if (IS_ENABLED(CONFIG_SHELL_NONE)) return am33xx_of_register_bootdevice(); return 0; }
static int beaglebone_devices_init(void) { int black; if (!of_machine_is_compatible("ti,am335x-bone")) return 0; if (bootsource_get() == BOOTSOURCE_MMC) { if (bootsource_get_instance() == 0) omap_set_bootmmc_devname("mmc0"); else omap_set_bootmmc_devname("mmc1"); } black = is_beaglebone_black(); defaultenv_append_directory(defaultenv_beaglebone); globalvar_add_simple("board.variant", black ? "boneblack" : "bone"); printf("detected 'BeagleBone %s'\n", black ? "Black" : "White"); armlinux_set_architecture(MACH_TYPE_BEAGLEBONE); return 0; }
static int omap_env_init(void) { struct stat s; char *diskdev = "/dev/disk0.0"; int ret; if (bootsource_get() != BOOTSOURCE_MMC) return 0; ret = stat(diskdev, &s); if (ret) { printf("no %s. using default env\n", diskdev); return 0; } mkdir("/boot", 0666); ret = mount(diskdev, "fat", "/boot"); if (ret) { printf("failed to mount %s\n", diskdev); return 0; } if (IS_ENABLED(CONFIG_OMAP_BUILD_IFT)) default_environment_path = "/dev/defaultenv"; else default_environment_path = "/boot/barebox.env"; return 0; }
/* * Replaces the default shell in xload configuration */ static __noreturn int omap_xload(void) { void *func; if (!barebox_part) barebox_part = &default_part; switch (bootsource_get()) { case BOOTSOURCE_MMC: printf("booting from MMC\n"); func = omap_xload_boot_mmc(); break; case BOOTSOURCE_USB: if (IS_ENABLED(CONFIG_OMAP3_USBBOOT) && cpu_is_omap3()) { printf("booting from USB\n"); func = omap3_xload_boot_usb(); } else if (IS_ENABLED(CONFIG_FS_OMAP4_USBBOOT)) { printf("booting from USB\n"); func = omap4_xload_boot_usb(); } else { printf("booting from USB not enabled\n"); func = NULL; } break; case BOOTSOURCE_NAND: printf("booting from NAND\n"); func = omap_xload_boot_nand(barebox_part); break; case BOOTSOURCE_SPI: printf("booting from SPI\n"); func = omap_xload_boot_spi(barebox_part); break; case BOOTSOURCE_SERIAL: if (IS_ENABLED(CONFIG_OMAP_SERIALBOOT)) { printf("booting from serial\n"); func = omap_serial_boot(); break; } case BOOTSOURCE_NET: if (IS_ENABLED(CONFIG_AM33XX_NET_BOOT)) { printf("booting from NET\n"); func = am33xx_net_boot(); break; } else { printf("booting from network not enabled\n"); } default: printf("unknown boot source. Fall back to nand\n"); func = omap_xload_boot_nand(barebox_part); break; } if (!func) { printf("booting failed\n"); while (1); } omap_start_barebox(func); }
static int tqma53_devices_init(void) { char *of_env_path; unsigned bbu_flag_emmc = 0, bbu_flag_sd = 0; if (!of_machine_is_compatible("tq,tqma53")) return 0; barebox_set_hostname("tqma53"); if (bootsource_get() == BOOTSOURCE_MMC && bootsource_get_instance() == 1) { of_env_path = "/chosen/environment-sd"; bbu_flag_sd = BBU_HANDLER_FLAG_DEFAULT; } else { of_env_path = "/chosen/environment-emmc"; bbu_flag_emmc = BBU_HANDLER_FLAG_DEFAULT; } imx53_bbu_internal_mmc_register_handler("sd", "/dev/mmc1", bbu_flag_sd); imx53_bbu_internal_mmc_register_handler("emmc", "/dev/mmc2", bbu_flag_emmc); of_device_enable_path(of_env_path); armlinux_set_architecture(MACH_TYPE_TQMA53); return 0; }
static int realq7_device_init(void) { if (!of_machine_is_compatible("dmo,imx6q-edmqmx6")) return 0; gpio_direction_output(IMX_GPIO_NR(2, 22), 1); gpio_direction_output(IMX_GPIO_NR(2, 21), 1); switch (bootsource_get()) { case BOOTSOURCE_MMC: switch (bootsource_get_instance()) { case 2: of_device_enable_path("/chosen/environment-sd"); break; case 3: of_device_enable_path("/chosen/environment-emmc"); break; } break; default: case BOOTSOURCE_SPI: of_device_enable_path("/chosen/environment-spi"); break; } return 0; }
static int pcm043_devices_init(void) { uint32_t reg; char *envstr; unsigned long bbu_nand_flags = 0; /* CS0: Nor Flash */ imx35_setup_weimcs(5, 0x22C0CF00, 0x75000D01, 0x00000900); led_gpio_register(&led0); reg = readl(MX35_CCM_BASE_ADDR + MX35_CCM_RCSR); /* some fuses provide us vital information about connected hardware */ if (reg & 0x20000000) nand_info.width = 2; /* 16 bit */ else nand_info.width = 1; /* 8 bit */ imx35_add_fec(&fec_info); /* * This platform supports NOR and NAND */ imx35_add_nand(&nand_info); /* * Up to 32MiB NOR type flash, connected to * CS line 0, data width is 16 bit */ add_cfi_flash_device(DEVICE_ID_DYNAMIC, MX35_CS0_BASE_ADDR, 32 * 1024 * 1024, 0); switch (bootsource_get()) { case BOOTSOURCE_NAND: devfs_add_partition("nand0", 0x00000, SZ_512K, DEVFS_PARTITION_FIXED, "self_raw"); dev_add_bb_dev("self_raw", "self0"); devfs_add_partition("nand0", SZ_512K, SZ_256K, DEVFS_PARTITION_FIXED, "env_raw"); dev_add_bb_dev("env_raw", "env0"); envstr = "NAND"; bbu_nand_flags = BBU_HANDLER_FLAG_DEFAULT; break; case BOOTSOURCE_NOR: default: devfs_add_partition("nor0", 0x00000, SZ_512K, DEVFS_PARTITION_FIXED, "self0"); /* ourself */ devfs_add_partition("nor0", SZ_512K, SZ_128K, DEVFS_PARTITION_FIXED, "env0"); /* environment */ protect_file("/dev/env0", 1); envstr = "NOR"; break; } pr_info("using environment from %s flash\n", envstr); imx35_add_fb(&ipu_fb_data); armlinux_set_architecture(MACH_TYPE_PCM043); imx_bbu_external_nand_register_handler("nand", "/dev/nand0.barebox", bbu_nand_flags); return 0; }
static __noreturn int socfpga_xload(void) { enum bootsource bootsource = bootsource_get(); struct socfpga_barebox_part *part; void *buf = NULL; switch (bootsource) { case BOOTSOURCE_MMC: socfpga_mmc_init(); for (part = barebox_parts; part->mmc_disk; part++) { buf = bootstrap_read_disk(barebox_parts->mmc_disk, "fat"); if (!buf) { pr_info("failed to load barebox from MMC %s\n", part->mmc_disk); continue; } } if (!buf) { pr_err("failed to load barebox.bin from MMC\n"); hang(); } break; case BOOTSOURCE_SPI: socfpga_qspi_init(); for (part = barebox_parts; part->nor_size; part++) { buf = bootstrap_read_devfs("mtd0", false, part->nor_offset, part->nor_size, SZ_1M); if (!buf) { pr_info("failed to load barebox from QSPI NOR flash at offset %#x\n", part->nor_offset); continue; } break; } if (!buf) { pr_err("failed to load barebox from QSPI NOR flash\n"); hang(); } break; default: pr_err("unknown bootsource %d\n", bootsource); hang(); } pr_info("starting bootloader...\n"); bootstrap_boot(buf, 0); hang(); }
static int physom_devices_init(void) { if (!of_machine_is_compatible("phytec,am335x-som")) return 0; switch (bootsource_get()) { case BOOTSOURCE_SPI: of_device_enable_path("/chosen/environment-spi"); break; case BOOTSOURCE_MMC: if (bootsource_get_instance() == 0) omap_set_bootmmc_devname("mmc0"); else omap_set_bootmmc_devname("mmc1"); break; default: of_device_enable_path("/chosen/environment-nand"); break; } omap_set_barebox_part(&physom_barebox_part); defaultenv_append_directory(defaultenv_physom_am335x); /* Special module set up */ if (of_machine_is_compatible("phytec,phycore-am335x-som")) { armlinux_set_architecture(MACH_TYPE_PCM051); barebox_set_hostname("pcm051"); } if (of_machine_is_compatible("phytec,phyflex-am335x-som")) { armlinux_set_architecture(MACH_TYPE_PFLA03); am33xx_select_rmii2_crs_dv(); barebox_set_hostname("pfla03"); } if (of_machine_is_compatible("phytec,phycard-am335x-som")) { armlinux_set_architecture(MACH_TYPE_PCAAXS1); barebox_set_hostname("pcaaxs1"); } /* Register update handler */ am33xx_bbu_spi_nor_mlo_register_handler("MLO.spi", "/dev/m25p0.xload"); am33xx_bbu_spi_nor_register_handler("spi", "/dev/m25p0.barebox"); am33xx_bbu_nand_xloadslots_register_handler("MLO.nand", xloadslots, ARRAY_SIZE(xloadslots)); am33xx_bbu_nand_slots_register_handler("nand", nandslots, ARRAY_SIZE(nandslots)); if (IS_ENABLED(CONFIG_SHELL_NONE)) return am33xx_of_register_bootdevice(); return 0; }
static int tx53_devices_init(void) { const char *envdev; uint32_t flag_nand = 0; uint32_t flag_mmc = 0; if (!of_machine_is_compatible("karo,tx53")) return 0; barebox_set_model("Ka-Ro TX53"); barebox_set_hostname("tx53"); switch (bootsource_get()) { case BOOTSOURCE_MMC: devfs_add_partition("mmc0", 0x00000, SZ_512K, DEVFS_PARTITION_FIXED, "self0"); devfs_add_partition("mmc0", SZ_512K, SZ_1M, DEVFS_PARTITION_FIXED, "env0"); envdev = "MMC"; flag_mmc |= BBU_HANDLER_FLAG_DEFAULT; break; case BOOTSOURCE_NAND: default: devfs_add_partition("nand0", 0x00000, 0x80000, DEVFS_PARTITION_FIXED, "self_raw"); dev_add_bb_dev("self_raw", "self0"); devfs_add_partition("nand0", 0x80000, 0x100000, DEVFS_PARTITION_FIXED, "env_raw"); dev_add_bb_dev("env_raw", "env0"); envdev = "NAND"; flag_nand |= BBU_HANDLER_FLAG_DEFAULT; break; } armlinux_set_architecture(MACH_TYPE_TX53); /* rev xx30 can boot from nand or USB */ imx53_bbu_internal_nand_register_handler("nand-xx30", flag_nand, SZ_512K); /* rev 1011 can boot from MMC/SD, other bootsource currently unknown */ imx53_bbu_internal_mmc_register_handler("mmc-1011", "/dev/mmc0", flag_mmc); if (of_machine_is_compatible("karo,tx53-1011")) imx53_init_lowlevel(1000); printf("Using environment in %s\n", envdev); return 0; }
static int efikamx_usb_init(void) { if (!of_machine_is_compatible("genesi,imx51-sb")) return 0; barebox_set_hostname("efikasb"); mc13xxx_register_init_callback(efikamx_power_init); gpio_direction_output(GPIO_BLUETOOTH, 0); gpio_direction_output(GPIO_WIFI_ENABLE, 1); gpio_direction_output(GPIO_WIFI_RESET, 0); gpio_direction_output(GPIO_SMSC3317_RESET, 0); gpio_direction_output(GPIO_HUB_RESET, 0); gpio_direction_output(GPIO_BACKLIGHT_POWER, 1); mdelay(10); gpio_set_value(GPIO_HUB_RESET, 1); gpio_set_value(GPIO_SMSC3317_RESET, 1); gpio_set_value(GPIO_BLUETOOTH, 1); gpio_set_value(GPIO_WIFI_RESET, 1); mxc_iomux_v3_setup_pad(MX51_PAD_USBH1_STP__GPIO1_27); gpio_set_value(IMX_GPIO_NR(1, 27), 1); mdelay(1); mxc_iomux_v3_setup_pad(MX51_PAD_USBH1_STP__USBH1_STP); if (machine_is_efikasb()) { mxc_iomux_v3_setup_pad(MX51_PAD_EIM_A26__GPIO2_20); gpio_set_value(IMX_GPIO_NR(2, 20), 1); mdelay(1); mxc_iomux_v3_setup_pad(MX51_PAD_EIM_A26__USBH2_STP); } switch (bootsource_get()) { case BOOTSOURCE_MMC: of_device_enable_path("/chosen/environment-sd"); break; case BOOTSOURCE_SPI: default: of_device_enable_path("/chosen/environment-spi"); break; } return 0; }
/* * Replaces the default shell in xload configuration */ static __noreturn int omap_xload(void) { void *func; if (!barebox_part) barebox_part = &default_part; switch (bootsource_get()) { case BOOTSOURCE_MMC: printf("booting from MMC\n"); func = omap_xload_boot_mmc(); break; case BOOTSOURCE_USB: if (IS_ENABLED(CONFIG_FS_OMAP4_USBBOOT)) { printf("booting from USB\n"); func = omap4_xload_boot_usb(); break; } else { printf("booting from USB not enabled\n"); } case BOOTSOURCE_NAND: printf("booting from NAND\n"); func = omap_xload_boot_nand(barebox_part->nand_offset, barebox_part->nand_size); break; case BOOTSOURCE_SPI: printf("booting from SPI\n"); func = omap_xload_boot_spi(barebox_part->nor_offset, barebox_part->nor_size); break; default: printf("unknown boot source. Fall back to nand\n"); func = omap_xload_boot_nand(barebox_part->nand_offset, barebox_part->nand_size); break; } if (!func) { printf("booting failed\n"); while (1); } omap_start_barebox(func); }
static int pcm051_devices_init(void) { pcm051_enable_mmc0_pin_mux(); am33xx_add_mmc0(NULL); pcm051_spi_init(); pcm051_eth_init(); pcm051_i2c_init(); pcm051_nand_init(); pcm051_enable_user_led_pin_mux(); pcm051_enable_user_btn_pin_mux(); switch (bootsource_get()) { case BOOTSOURCE_SPI: devfs_add_partition("m25p0", 0x00000, SZ_128K, DEVFS_PARTITION_FIXED, "xload"); devfs_add_partition("m25p0", SZ_128K, SZ_512K, DEVFS_PARTITION_FIXED, "self0"); devfs_add_partition("m25p0", SZ_128K + SZ_512K, SZ_128K, DEVFS_PARTITION_FIXED, "env0"); break; default: devfs_add_partition("nand0", 0x00000, SZ_128K, DEVFS_PARTITION_FIXED, "xload_raw"); dev_add_bb_dev("xload_raw", "xload"); devfs_add_partition("nand0", SZ_512K, SZ_512K, DEVFS_PARTITION_FIXED, "self_raw"); dev_add_bb_dev("self_raw", "self0"); devfs_add_partition("nand0", SZ_512K + SZ_512K, SZ_128K, DEVFS_PARTITION_FIXED, "env_raw"); dev_add_bb_dev("env_raw", "env0"); break; } omap_set_barebox_part(&pcm051_barebox_part); armlinux_set_bootparams((void *)(AM33XX_DRAM_ADDR_SPACE_START + 0x100)); armlinux_set_architecture(MACH_TYPE_PCM051); am33xx_bbu_spi_nor_mlo_register_handler("MLO.spi", "/dev/m25p0.xload"); return 0; }
static int phytec_pcaaxl3_init(void) { if (!of_machine_is_compatible("phytec,imx6q-pcaaxl3")) return 0; switch (bootsource_get()) { case BOOTSOURCE_MMC: of_device_enable_path("/chosen/environment-sd"); break; default: case BOOTSOURCE_NAND: of_device_enable_path("/chosen/environment-nand"); break; } imx6_bbu_nand_register_handler("nand", BBU_HANDLER_FLAG_DEFAULT); return 0; }
static int tqma53_devices_init(void) { char *of_env_path = "/chosen/environment-emmc"; if (!of_machine_is_compatible("tq,tqma53")) return 0; barebox_set_model("TQ tqma53"); barebox_set_hostname("tqma53"); if (bootsource_get() == BOOTSOURCE_MMC && bootsource_get_instance() == 1) of_env_path = "/chosen/environment-sd"; of_device_enable_path(of_env_path); armlinux_set_architecture(MACH_TYPE_TQMA53); return 0; }
static int gk802_env_init(void) { char *bootsource_name; char *barebox_name; char *default_environment_name; if (!of_machine_is_compatible("zealz,imx6q-gk802")) return 0; /* Keep RTL8192CU disabled */ gpio_direction_output(GK802_GPIO_RTL8192_PDN, 1); gpio_direction_input(GK802_GPIO_RECOVERY_BTN); setenv("recovery", gpio_get_value(GK802_GPIO_RECOVERY_BTN) ? "0" : "1"); if (bootsource_get() != BOOTSOURCE_MMC) return 0; switch (bootsource_get_instance()) { case 2: bootsource_name = "mmc2"; barebox_name = "mmc2.barebox"; default_environment_name = "mmc2.bareboxenv"; default_environment_path = "/dev/mmc2.bareboxenv"; break; case 3: bootsource_name = "mmc3"; barebox_name = "mmc3.barebox"; default_environment_name = "mmc3.bareboxenv"; default_environment_path = "/dev/mmc3.bareboxenv"; break; default: return 0; } device_detect_by_name(bootsource_name); devfs_add_partition(bootsource_name, 0x00000, SZ_512K, DEVFS_PARTITION_FIXED, barebox_name); devfs_add_partition(bootsource_name, SZ_512K, SZ_512K, DEVFS_PARTITION_FIXED, default_environment_name); return 0; }
static int omap_env_init(void) { struct stat s; char *partname; const char *diskdev; int ret; if (bootsource_get() != BOOTSOURCE_MMC) return 0; if (omap_bootmmc_dev) diskdev = omap_bootmmc_dev; else diskdev = "disk0"; device_detect_by_name(diskdev); partname = asprintf("/dev/%s.0", diskdev); ret = stat(partname, &s); free(partname); if (ret) { printf("no %s. using default env\n", diskdev); return 0; } mkdir("/boot", 0666); ret = mount(diskdev, "fat", "/boot", NULL); if (ret) { printf("failed to mount %s\n", diskdev); return 0; } default_environment_path_set("/boot/barebox.env"); return 0; }
static int dfi_fs700_m60_init(void) { unsigned flag_spi = 0, flag_mmc = 0; if (!of_machine_is_compatible("dfi,fs700-m60")) return 0; phy_register_fixup_for_uid(PHY_ID_AR8031, AR_PHY_ID_MASK, ar8031_phy_fixup); if (bootsource_get() == BOOTSOURCE_SPI) flag_spi |= BBU_HANDLER_FLAG_DEFAULT; else flag_mmc |= BBU_HANDLER_FLAG_DEFAULT; imx6_bbu_internal_mmc_register_handler("mmc", "/dev/mmc3.boot0", flag_mmc); imx6_bbu_internal_spi_i2c_register_handler("spiflash", "/dev/m25p0", flag_spi); armlinux_set_architecture(MACH_TYPE_MX6Q_SABRESD); return 0; }
static int tx53_part_init(void) { const char *envdev; switch (bootsource_get()) { case BOOTSOURCE_MMC: devfs_add_partition("disk0", 0x00000, SZ_512K, DEVFS_PARTITION_FIXED, "self0"); devfs_add_partition("disk0", SZ_512K, SZ_1M, DEVFS_PARTITION_FIXED, "env0"); envdev = "MMC"; break; case BOOTSOURCE_NAND: default: devfs_add_partition("nand0", 0x00000, 0x80000, DEVFS_PARTITION_FIXED, "self_raw"); dev_add_bb_dev("self_raw", "self0"); devfs_add_partition("nand0", 0x80000, 0x100000, DEVFS_PARTITION_FIXED, "env_raw"); dev_add_bb_dev("env_raw", "env0"); envdev = "NAND"; break; } printf("Using environment in %s\n", envdev); return 0; }
static int board_console_init(void) { if (!of_machine_is_compatible("afi,gf")) return 0; switch (bootsource_get()) { default: case BOOTSOURCE_SPI: of_device_enable_path("/chosen/environment-spi"); break; case BOOTSOURCE_MMC: omap_set_bootmmc_devname("mmc0"); break; } defaultenv_append_directory(defaultenv_gf); am33xx_register_ethaddr(0, 0); am33xx_register_ethaddr(1, 1); barebox_set_hostname("gf"); am33xx_bbu_spi_nor_mlo_register_handler("MLO.spi", "/dev/m25p0.mlo"); am33xx_bbu_spi_nor_register_handler("spi", "/dev/m25p0.boot"); return 0; }
static int pcm051_devices_init(void) { if (!of_machine_is_compatible("phytec,pcm051")) return 0; switch (bootsource_get()) { case BOOTSOURCE_SPI: of_device_enable_path("/chosen/environment-spi"); break; case BOOTSOURCE_MMC: omap_set_bootmmc_devname("mmc0"); break; default: of_device_enable_path("/chosen/environment-nand"); break; } omap_set_barebox_part(&pcm051_barebox_part); armlinux_set_architecture(MACH_TYPE_PCM051); am33xx_bbu_spi_nor_mlo_register_handler("MLO.spi", "/dev/m25p0.xload"); return 0; }
static int pcm038_devices_init(void) { int i; u64 uid = 0; char *envdev; long sram_size; unsigned int mode[] = { /* FEC */ PD0_AIN_FEC_TXD0, PD1_AIN_FEC_TXD1, PD2_AIN_FEC_TXD2, PD3_AIN_FEC_TXD3, PD4_AOUT_FEC_RX_ER, PD5_AOUT_FEC_RXD1, PD6_AOUT_FEC_RXD2, PD7_AOUT_FEC_RXD3, PD8_AF_FEC_MDIO, PD9_AIN_FEC_MDC | GPIO_PUEN, PD10_AOUT_FEC_CRS, PD11_AOUT_FEC_TX_CLK, PD12_AOUT_FEC_RXD0, PD13_AOUT_FEC_RX_DV, PD14_AOUT_FEC_RX_CLK, PD15_AOUT_FEC_COL, PD16_AIN_FEC_TX_ER, PF23_AIN_FEC_TX_EN, PCM038_GPIO_FEC_RST | GPIO_GPIO | GPIO_OUT, /* UART1 */ PE12_PF_UART1_TXD, PE13_PF_UART1_RXD, PE14_PF_UART1_CTS, PE15_PF_UART1_RTS, /* CSPI1 */ PD25_PF_CSPI1_RDY, PD29_PF_CSPI1_SCLK, PD30_PF_CSPI1_MISO, PD31_PF_CSPI1_MOSI, PCM038_GPIO_SPI_CS0 | GPIO_GPIO | GPIO_OUT, #ifdef CONFIG_MACH_PCM970_BASEBOARD PCM970_GPIO_SPI_CS1 | GPIO_GPIO | GPIO_OUT, #endif /* Display */ PA5_PF_LSCLK, PA6_PF_LD0, PA7_PF_LD1, PA8_PF_LD2, PA9_PF_LD3, PA10_PF_LD4, PA11_PF_LD5, PA12_PF_LD6, PA13_PF_LD7, PA14_PF_LD8, PA15_PF_LD9, PA16_PF_LD10, PA17_PF_LD11, PA18_PF_LD12, PA19_PF_LD13, PA20_PF_LD14, PA21_PF_LD15, PA22_PF_LD16, PA23_PF_LD17, PA24_PF_REV, PA25_PF_CLS, PA26_PF_PS, PA27_PF_SPL_SPR, PA28_PF_HSYNC, PA29_PF_VSYNC, PA30_PF_CONTRAST, PA31_PF_OE_ACD, /* USB OTG */ PC7_PF_USBOTG_DATA5, PC8_PF_USBOTG_DATA6, PC9_PF_USBOTG_DATA0, PC10_PF_USBOTG_DATA2, PC11_PF_USBOTG_DATA1, PC12_PF_USBOTG_DATA4, PC13_PF_USBOTG_DATA3, PE0_PF_USBOTG_NXT, PCM038_GPIO_OTG_STP | GPIO_GPIO | GPIO_OUT, PE2_PF_USBOTG_DIR, PE24_PF_USBOTG_CLK, PE25_PF_USBOTG_DATA7, /* I2C1 */ PD17_PF_I2C_DATA | GPIO_PUEN, PD18_PF_I2C_CLK, /* I2C2 */ PC5_PF_I2C2_SDA, PC6_PF_I2C2_SCL, }; /* configure 16 bit nor flash on cs0 */ imx27_setup_weimcs(0, 0x22C2CF00, 0x75000D01, 0x00000900); /* configure SRAM on cs1 */ imx27_setup_weimcs(1, 0x0000d843, 0x22252521, 0x22220a00); /* SRAM can be up to 2MiB */ sram_size = get_ram_size((ulong *)MX27_CS1_BASE_ADDR, SZ_2M); if (sram_size) add_mem_device("ram1", MX27_CS1_BASE_ADDR, sram_size, IORESOURCE_MEM_WRITEABLE); /* initizalize gpios */ for (i = 0; i < ARRAY_SIZE(mode); i++) imx_gpio_mode(mode[i]); spi_register_board_info(pcm038_spi_board_info, ARRAY_SIZE(pcm038_spi_board_info)); imx27_add_spi0(&pcm038_spi_0_data); pcm038_power_init(); add_cfi_flash_device(DEVICE_ID_DYNAMIC, 0xC0000000, 32 * 1024 * 1024, 0); imx27_add_nand(&nand_info); imx27_add_fb(&pcm038_fb_data); imx27_add_i2c0(NULL); imx27_add_i2c1(NULL); /* Register the fec device after the PLL re-initialisation * as the fec depends on the (now higher) ipg clock */ gpio_set_value(PCM038_GPIO_FEC_RST, 1); imx27_add_fec(&fec_info); /* Apply delay for STP line to stop ULPI */ gpio_direction_output(PCM038_GPIO_OTG_STP, 1); mdelay(1); imx_gpio_mode(PE1_PF_USBOTG_STP); imx27_add_usbotg(&pcm038_otg_pdata); switch (bootsource_get()) { case BOOTSOURCE_NAND: devfs_add_partition("nand0", 0, SZ_512K, DEVFS_PARTITION_FIXED, "self_raw"); dev_add_bb_dev("self_raw", "self0"); devfs_add_partition("nand0", SZ_512K, SZ_128K, DEVFS_PARTITION_FIXED, "env_raw"); dev_add_bb_dev("env_raw", "env0"); envdev = "NAND"; break; default: devfs_add_partition("nor0", 0, SZ_512K, DEVFS_PARTITION_FIXED, "self0"); devfs_add_partition("nor0", SZ_512K, SZ_128K, DEVFS_PARTITION_FIXED, "env0"); protect_file("/dev/env0", 1); envdev = "NOR"; } pr_notice("Using environment in %s Flash\n", envdev); if (imx_iim_read(1, 0, &uid, 6) == 6) armlinux_set_serial(uid); armlinux_set_bootparams((void *)0xa0000100); armlinux_set_architecture(MACH_TYPE_PCM038); return 0; }