void __init early_setup(unsigned long dt_ptr) { struct paca_struct *lpaca = get_paca(); static struct machdep_calls **mach; /* Enable early debugging if any specified (see udbg.h) */ udbg_early_init(); DBG(" -> early_setup()\n"); /* * Do early initializations using the flattened device * tree, like retreiving the physical memory map or * calculating/retreiving the hash table size */ early_init_devtree(__va(dt_ptr)); /* * Iterate all ppc_md structures until we find the proper * one for the current machine type */ DBG("Probing machine type for platform %x...\n", _machine); for (mach = machines; *mach; mach++) { if ((*mach)->probe(_machine)) break; } /* What can we do if we didn't find ? */ if (*mach == NULL) { DBG("No suitable machine found !\n"); for (;;); } ppc_md = **mach; #ifdef CONFIG_CRASH_DUMP kdump_setup(); #endif DBG("Found, Initializing memory management...\n"); /* * Initialize the MMU Hash table and create the linear mapping * of memory. Has to be done before stab/slb initialization as * this is currently where the page size encoding is obtained */ htab_initialize(); /* * Initialize stab / SLB management except on iSeries */ if (!firmware_has_feature(FW_FEATURE_ISERIES)) { if (cpu_has_feature(CPU_FTR_SLB)) slb_initialize(); else stab_initialize(lpaca->stab_real); } DBG(" <- early_setup()\n"); }
void __init early_setup(unsigned long dt_ptr) { /* Identify CPU type */ identify_cpu(0, mfspr(SPRN_PVR)); /* Assume we're on cpu 0 for now. Don't write to the paca yet! */ setup_paca(0); /* Enable early debugging if any specified (see udbg.h) */ udbg_early_init(); DBG(" -> early_setup(), dt_ptr: 0x%lx\n", dt_ptr); /* * Do early initializations using the flattened device * tree, like retreiving the physical memory map or * calculating/retreiving the hash table size */ early_init_devtree(__va(dt_ptr)); /* Now we know the logical id of our boot cpu, setup the paca. */ setup_paca(boot_cpuid); /* Fix up paca fields required for the boot cpu */ get_paca()->cpu_start = 1; get_paca()->stab_real = __pa((u64)&initial_stab); get_paca()->stab_addr = (u64)&initial_stab; /* Probe the machine type */ probe_machine(); setup_kdump_trampoline(); DBG("Found, Initializing memory management...\n"); /* * Initialize the MMU Hash table and create the linear mapping * of memory. Has to be done before stab/slb initialization as * this is currently where the page size encoding is obtained */ htab_initialize(); /* * Initialize stab / SLB management except on iSeries */ if (cpu_has_feature(CPU_FTR_SLB)) slb_initialize(); else if (!firmware_has_feature(FW_FEATURE_ISERIES)) stab_initialize(get_paca()->stab_real); DBG(" <- early_setup()\n"); }
void early_setup_secondary(void) { struct paca_struct *lpaca = get_paca(); /* Mark enabled in PACA */ lpaca->proc_enabled = 0; /* Initialize hash table for that CPU */ htab_initialize_secondary(); /* Initialize STAB/SLB. We use a virtual address as it works * in real mode on pSeries and we want a virutal address on * iSeries anyway */ if (cpu_has_feature(CPU_FTR_SLB)) slb_initialize(); else stab_initialize(lpaca->stab_addr); }
void __init early_setup(unsigned long dt_ptr) { struct paca_struct *lpaca = get_paca(); static struct machdep_calls **mach; /* * Enable early debugging if any specified (see top of * this file) */ EARLY_DEBUG_INIT(); DBG(" -> early_setup()\n"); /* * Fill the default DBG level in naca (do we want to keep * that old mecanism around forever ?) */ ppcdbg_initialize(); /* * Do early initializations using the flattened device * tree, like retreiving the physical memory map or * calculating/retreiving the hash table size */ early_init_devtree(__va(dt_ptr)); /* * Iterate all ppc_md structures until we find the proper * one for the current machine type */ DBG("Probing machine type for platform %x...\n", systemcfg->platform); for (mach = machines; *mach; mach++) { if ((*mach)->probe(systemcfg->platform)) break; } /* What can we do if we didn't find ? */ if (*mach == NULL) { DBG("No suitable machine found !\n"); for (;;); } ppc_md = **mach; /* our udbg callbacks got overriden by the above, let's put them * back in. Ultimately, I want those things to be split from the * main ppc_md */ EARLY_DEBUG_INIT(); DBG("Found, Initializing memory management...\n"); /* * Initialize stab / SLB management */ stab_initialize(lpaca->stab_real); /* * Initialize the MMU Hash table and create the linear mapping * of memory */ htab_initialize(); DBG(" <- early_setup()\n"); }