/* * Early initialization. Relocation is on but do not reference unbolted pages */ static void __init pSeries_init_early(void) { DBG(" -> pSeries_init_early()\n"); fw_feature_init(); if (firmware_has_feature(FW_FEATURE_LPAR)) find_udbg_vterm(); if (firmware_has_feature(FW_FEATURE_DABR)) ppc_md.set_dabr = pseries_set_dabr; else if (firmware_has_feature(FW_FEATURE_XDABR)) ppc_md.set_dabr = pseries_set_xdabr; iommu_init_early_pSeries(); DBG(" <- pSeries_init_early()\n"); }
static int __init pSeries_probe_hypertas(unsigned long node, const char *uname, int depth, void *data) { const char *hypertas; unsigned long len; if (depth != 1 || (strcmp(uname, "rtas") != 0 && strcmp(uname, "rtas@0") != 0)) return 0; hypertas = of_get_flat_dt_prop(node, "ibm,hypertas-functions", &len); if (!hypertas) return 1; powerpc_firmware_features |= FW_FEATURE_LPAR; fw_feature_init(hypertas, len); return 1; }
/* * Early initialization. Relocation is on but do not reference unbolted pages */ static void __init pSeries_init_early(void) { void *comport; int iommu_off = 0; unsigned int default_speed; u64 physport; DBG(" -> pSeries_init_early()\n"); fw_feature_init(); if (systemcfg->platform & PLATFORM_LPAR) hpte_init_lpar(); else { hpte_init_native(); iommu_off = (of_chosen && get_property(of_chosen, "linux,iommu-off", NULL)); } generic_find_legacy_serial_ports(&physport, &default_speed); if (systemcfg->platform & PLATFORM_LPAR) find_udbg_vterm(); else if (physport) { /* Map the uart for udbg. */ comport = (void *)ioremap(physport, 16); udbg_init_uart(comport, default_speed); ppc_md.udbg_putc = udbg_putc; ppc_md.udbg_getc = udbg_getc; ppc_md.udbg_getc_poll = udbg_getc_poll; DBG("Hello World !\n"); } iommu_init_early_pSeries(); pSeries_discover_pic(); DBG(" <- pSeries_init_early()\n"); }