static int omap_init(void) { int ret; struct device_node *root; root = of_get_root_node(); if (root) { __omap_cpu_type = omap_soc_from_dt(); if (!__omap_cpu_type) hang(); } if (cpu_is_omap3()) ret = omap3_init(); else if (cpu_is_omap4()) ret = omap4_init(); else if (cpu_is_am33xx()) ret = am33xx_init(); else return -EINVAL; if (root) return ret; if (cpu_is_omap3()) ret = omap3_devices_init(); else if (cpu_is_omap4()) ret = omap4_devices_init(); else if (cpu_is_am33xx()) ret = am33xx_devices_init(); else return -EINVAL; return ret; }
void armv7_attach(struct device *parent, struct device *self, void *aux) { struct armv7_softc *sc = (struct armv7_softc *)self; struct board_dev *bd; uint32_t issunxi = 0; bus_space_handle_t ioh; switch (board_id) { #if NEXYNOS > 0 case BOARD_ID_EXYNOS5_CHROMEBOOK: printf(": Exynos 5 Chromebook\n"); exynos5_init(); sc->sc_board_devs = chromebook_devs; break; #endif #if NIMX > 0 case BOARD_ID_IMX6_HUMMINGBOARD: printf(": SolidRun HummingBoard\n"); imx6_init(); sc->sc_board_devs = hummingboard_devs; break; case BOARD_ID_IMX6_SABRELITE: printf(": i.MX6 SABRE Lite\n"); imx6_init(); sc->sc_board_devs = sabrelite_devs; break; case BOARD_ID_IMX6_UDOO: printf(": i.MX6 UDOO\n"); imx6_init(); sc->sc_board_devs = udoo_devs; break; case BOARD_ID_IMX6_UTILITE: printf(": i.MX6 Utilite\n"); imx6_init(); sc->sc_board_devs = utilite_devs; break; case BOARD_ID_IMX6_WANDBOARD: printf(": i.MX6 Wandboard\n"); imx6_init(); sc->sc_board_devs = wandboard_devs; break; #endif #if NOMAP > 0 case BOARD_ID_OMAP3_BEAGLE: printf(": BeagleBoard\n"); omap3_init(); sc->sc_board_devs = beagleboard_devs; break; case BOARD_ID_AM335X_BEAGLEBONE: printf(": BeagleBone\n"); am335x_init(); sc->sc_board_devs = beaglebone_devs; break; case BOARD_ID_OMAP3_OVERO: printf(": Gumstix Overo\n"); omap3_init(); sc->sc_board_devs = overo_devs; break; case BOARD_ID_OMAP4_PANDA: printf(": PandaBoard\n"); omap4_init(); sc->sc_board_devs = pandaboard_devs; break; #endif #if NSUNXI > 0 case BOARD_ID_SUN4I_A10: printf(": A1X\n"); sxia1x_init(); sc->sc_board_devs = sun4i_devs; issunxi = 1; break; case BOARD_ID_SUN7I_A20: printf(": A20\n"); sxia20_init(); sc->sc_board_devs = sun7i_devs; issunxi = 1; break; #endif default: printf("\n"); panic("%s: board type 0x%x unknown", __func__, board_id); } if (issunxi) { /* * XXX think of a better place to do this, as there might * be need for access by other drivers later. */ if (bus_space_map(&armv7_bs_tag, SYSCTRL_ADDR, SYSCTRL_SIZE, 0, &ioh)) panic("sunxi_attach: bus_space_map failed!"); /* map the part of SRAM dedicated to EMAC to EMAC */ bus_space_write_4(&armv7_bs_tag, ioh, 4, bus_space_read_4(&armv7_bs_tag, ioh, 4) | (5 << 2)); } /* Directly configure on-board devices (dev* in config file). */ for (bd = sc->sc_board_devs; bd->name != NULL; bd++) { struct armv7_dev *ad = armv7_find_dev(bd->name, bd->unit); struct armv7_attach_args aa; if (ad == NULL) { printf("%s: device %s unit %d not found\n", DEVNAME(sc), bd->name, bd->unit); continue; } memset(&aa, 0, sizeof(aa)); aa.aa_dev = ad; aa.aa_iot = &armv7_bs_tag; aa.aa_dmat = &armv7_bus_dma_tag; if (config_found_sm(self, &aa, NULL, armv7_submatch) == NULL) printf("%s: device %s unit %d not configured\n", DEVNAME(sc), bd->name, bd->unit); } }