arch/powerpc/kernel/setup_32.c
Source file repositories/reference/linux-study-clean/arch/powerpc/kernel/setup_32.c
File Facts
- System
- Linux kernel
- Corpus path
arch/powerpc/kernel/setup_32.c- Extension
.c- Size
- 5199 bytes
- Lines
- 221
- Domain
- Architecture Layer
- Bucket
- arch/powerpc
- Inferred role
- Architecture Layer: exported/initcall integration point
- Status
- integration implementation candidate
Why This File Exists
CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.
- CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.
- Exports symbols or registers init work; inspect boot/module ordering and who consumes the exported contract.
Dependency Surface
linux/module.hlinux/string.hlinux/sched.hlinux/init.hlinux/kernel.hlinux/reboot.hlinux/delay.hlinux/initrd.hlinux/tty.hlinux/seq_file.hlinux/root_dev.hlinux/cpu.hlinux/console.hlinux/memblock.hlinux/export.hlinux/nvram.hlinux/pgtable.hlinux/of_fdt.hlinux/irq.hasm/io.hasm/processor.hasm/setup.hasm/smp.hasm/elf.hasm/cputable.hasm/bootx.hasm/btext.hasm/machdep.hlinux/uaccess.hasm/pmac_feature.hasm/sections.hasm/nvram.h
Detected Declarations
function start_kernelfunction ppc_setup_l2crfunction ppc_setup_l3crfunction ppc_initfunction alloc_stackfunction irqstack_early_initfunction emergency_stack_initfunction exc_lvl_early_initfunction setup_power_savefunction initialize_cache_infoexport boot_cpuid_physexport smp_hw_indexexport DMA_MODE_READexport DMA_MODE_WRITE
Annotated Snippet
* This is run before start_kernel(), the kernel has been relocated
* and we are running with enough of the MMU enabled to have our
* proper kernel virtual addresses
*
* We do the initial parsing of the flat device-tree and prepares
* for the MMU to be fully initialized.
*/
notrace void __init machine_init(u64 dt_ptr)
{
u32 *addr = (u32 *)patch_site_addr(&patch__memset_nocache);
ppc_inst_t insn;
/* Configure static keys first, now that we're relocated. */
setup_feature_keys();
early_ioremap_init();
/* Enable early debugging if any specified (see udbg.h) */
udbg_early_init();
patch_instruction_site(&patch__memcpy_nocache, ppc_inst(PPC_RAW_NOP()));
create_cond_branch(&insn, addr, branch_target(addr), 0x820000);
patch_instruction(addr, insn); /* replace b by bne cr0 */
/* Do some early initialization based on the flat device tree */
early_init_devtree(__va(dt_ptr));
early_init_mmu();
setup_kdump_trampoline();
}
/* Checks "l2cr=xxxx" command-line option */
static int __init ppc_setup_l2cr(char *str)
{
if (cpu_has_feature(CPU_FTR_L2CR)) {
unsigned long val = simple_strtoul(str, NULL, 0);
printk(KERN_INFO "l2cr set to %lx\n", val);
_set_L2CR(0); /* force invalidate by disable cache */
_set_L2CR(val); /* and enable it */
}
return 1;
}
__setup("l2cr=", ppc_setup_l2cr);
/* Checks "l3cr=xxxx" command-line option */
static int __init ppc_setup_l3cr(char *str)
{
if (cpu_has_feature(CPU_FTR_L3CR)) {
unsigned long val = simple_strtoul(str, NULL, 0);
printk(KERN_INFO "l3cr set to %lx\n", val);
_set_L3CR(val); /* and enable it */
}
return 1;
}
__setup("l3cr=", ppc_setup_l3cr);
static int __init ppc_init(void)
{
/* clear the progress line */
if (ppc_md.progress)
ppc_md.progress(" ", 0xffff);
/* call platform init */
if (ppc_md.init != NULL) {
ppc_md.init();
}
return 0;
}
arch_initcall(ppc_init);
static void *__init alloc_stack(void)
{
return memblock_alloc_or_panic(THREAD_SIZE, THREAD_ALIGN);
}
void __init irqstack_early_init(void)
{
unsigned int i;
if (IS_ENABLED(CONFIG_VMAP_STACK))
return;
/* interrupt stacks must be in lowmem, we get that for free on ppc32
* as the memblock is limited to lowmem by default */
for_each_possible_cpu(i) {
softirq_ctx[i] = alloc_stack();
hardirq_ctx[i] = alloc_stack();
}
Annotation
- Immediate include surface: `linux/module.h`, `linux/string.h`, `linux/sched.h`, `linux/init.h`, `linux/kernel.h`, `linux/reboot.h`, `linux/delay.h`, `linux/initrd.h`.
- Detected declarations: `function start_kernel`, `function ppc_setup_l2cr`, `function ppc_setup_l3cr`, `function ppc_init`, `function alloc_stack`, `function irqstack_early_init`, `function emergency_stack_init`, `function exc_lvl_early_init`, `function setup_power_save`, `function initialize_cache_info`.
- Atlas domain: Architecture Layer / arch/powerpc.
- Implementation status: integration implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.