setup.c
来自「linux 内核源代码」· C语言 代码 · 共 706 行 · 第 1/2 页
C
706 行
printk(KERN_INFO "Board Memory: %ldMB\n", physical_mem_end >> 20); printk(KERN_INFO "Kernel Managed Memory: %ldMB\n", _ramend >> 20); printk(KERN_INFO "Memory map:\n" KERN_INFO " text = 0x%p-0x%p\n" KERN_INFO " rodata = 0x%p-0x%p\n" KERN_INFO " data = 0x%p-0x%p\n" KERN_INFO " stack = 0x%p-0x%p\n" KERN_INFO " init = 0x%p-0x%p\n" KERN_INFO " bss = 0x%p-0x%p\n" KERN_INFO " available = 0x%p-0x%p\n"#ifdef CONFIG_MTD_UCLINUX KERN_INFO " rootfs = 0x%p-0x%p\n"#endif#if DMA_UNCACHED_REGION > 0 KERN_INFO " DMA Zone = 0x%p-0x%p\n"#endif , _stext, _etext, __start_rodata, __end_rodata, _sdata, _edata, (void *)&init_thread_union, (void *)((int)(&init_thread_union) + 0x2000), __init_begin, __init_end, __bss_start, __bss_stop, (void *)_ramstart, (void *)memory_end#ifdef CONFIG_MTD_UCLINUX , (void *)memory_mtd_start, (void *)(memory_mtd_start + mtd_size)#endif#if DMA_UNCACHED_REGION > 0 , (void *)(_ramend - DMA_UNCACHED_REGION), (void *)(_ramend)#endif ); /* * give all the memory to the bootmap allocator, tell it to put the * boot mem_map at the start of memory */ bootmap_size = init_bootmem_node(NODE_DATA(0), memory_start >> PAGE_SHIFT, /* map goes here */ PAGE_OFFSET >> PAGE_SHIFT, memory_end >> PAGE_SHIFT); /* * free the usable memory, we have to make sure we do not free * the bootmem bitmap so we then reserve it after freeing it :-) */ free_bootmem(memory_start, memory_end - memory_start); reserve_bootmem(memory_start, bootmap_size); /* * get kmalloc into gear */ paging_init(); /* check the size of the l1 area */ l1_length = _etext_l1 - _stext_l1; if (l1_length > L1_CODE_LENGTH) panic("L1 code memory overflow\n"); l1_length = _ebss_l1 - _sdata_l1; if (l1_length > L1_DATA_A_LENGTH) panic("L1 data memory overflow\n"); /* Copy atomic sequences to their fixed location, and sanity check that these locations are the ones that we advertise to userspace. */ memcpy((void *)FIXED_CODE_START, &fixed_code_start, FIXED_CODE_END - FIXED_CODE_START); BUG_ON((char *)&sigreturn_stub - (char *)&fixed_code_start != SIGRETURN_STUB - FIXED_CODE_START); BUG_ON((char *)&atomic_xchg32 - (char *)&fixed_code_start != ATOMIC_XCHG32 - FIXED_CODE_START); BUG_ON((char *)&atomic_cas32 - (char *)&fixed_code_start != ATOMIC_CAS32 - FIXED_CODE_START); BUG_ON((char *)&atomic_add32 - (char *)&fixed_code_start != ATOMIC_ADD32 - FIXED_CODE_START); BUG_ON((char *)&atomic_sub32 - (char *)&fixed_code_start != ATOMIC_SUB32 - FIXED_CODE_START); BUG_ON((char *)&atomic_ior32 - (char *)&fixed_code_start != ATOMIC_IOR32 - FIXED_CODE_START); BUG_ON((char *)&atomic_and32 - (char *)&fixed_code_start != ATOMIC_AND32 - FIXED_CODE_START); BUG_ON((char *)&atomic_xor32 - (char *)&fixed_code_start != ATOMIC_XOR32 - FIXED_CODE_START); BUG_ON((char *)&safe_user_instruction - (char *)&fixed_code_start != SAFE_USER_INSTRUCTION - FIXED_CODE_START); init_exception_vectors(); bf53x_cache_init();}static int __init topology_init(void){#if defined (CONFIG_BF561) static struct cpu cpu[2]; register_cpu(&cpu[0], 0); register_cpu(&cpu[1], 1); return 0;#else static struct cpu cpu[1]; return register_cpu(cpu, 0);#endif}subsys_initcall(topology_init);static u_long get_vco(void){ u_long msel; u_long vco; msel = (bfin_read_PLL_CTL() >> 9) & 0x3F; if (0 == msel) msel = 64; vco = CONFIG_CLKIN_HZ; vco >>= (1 & bfin_read_PLL_CTL()); /* DF bit */ vco = msel * vco; return vco;}/* Get the Core clock */u_long get_cclk(void){ u_long csel, ssel; if (bfin_read_PLL_STAT() & 0x1) return CONFIG_CLKIN_HZ; ssel = bfin_read_PLL_DIV(); csel = ((ssel >> 4) & 0x03); ssel &= 0xf; if (ssel && ssel < (1 << csel)) /* SCLK > CCLK */ return get_vco() / ssel; return get_vco() >> csel;}EXPORT_SYMBOL(get_cclk);/* Get the System clock */u_long get_sclk(void){ u_long ssel; if (bfin_read_PLL_STAT() & 0x1) return CONFIG_CLKIN_HZ; ssel = (bfin_read_PLL_DIV() & 0xf); if (0 == ssel) { printk(KERN_WARNING "Invalid System Clock\n"); ssel = 1; } return get_vco() / ssel;}EXPORT_SYMBOL(get_sclk);unsigned long sclk_to_usecs(unsigned long sclk){ u64 tmp = USEC_PER_SEC * (u64)sclk; do_div(tmp, get_sclk()); return tmp;}EXPORT_SYMBOL(sclk_to_usecs);unsigned long usecs_to_sclk(unsigned long usecs){ u64 tmp = get_sclk() * (u64)usecs; do_div(tmp, USEC_PER_SEC); return tmp;}EXPORT_SYMBOL(usecs_to_sclk);/* * Get CPU information for use by the procfs. */static int show_cpuinfo(struct seq_file *m, void *v){ char *cpu, *mmu, *fpu, *vendor, *cache; uint32_t revid; u_long cclk = 0, sclk = 0; u_int dcache_size = 0, dsup_banks = 0; cpu = CPU; mmu = "none"; fpu = "none"; revid = bfin_revid(); cclk = get_cclk(); sclk = get_sclk(); switch (bfin_read_CHIPID() & CHIPID_MANUFACTURE) { case 0xca: vendor = "Analog Devices"; break; default: vendor = "unknown"; break; } seq_printf(m, "processor\t: %d\n" "vendor_id\t: %s\n" "cpu family\t: 0x%x\n" "model name\t: ADSP-%s %lu(MHz CCLK) %lu(MHz SCLK)\n" "stepping\t: %d\n", 0, vendor, (bfin_read_CHIPID() & CHIPID_FAMILY), cpu, cclk/1000000, sclk/1000000, revid); seq_printf(m, "cpu MHz\t\t: %lu.%03lu/%lu.%03lu\n", cclk/1000000, cclk%1000000, sclk/1000000, sclk%1000000); seq_printf(m, "bogomips\t: %lu.%02lu\n" "Calibration\t: %lu loops\n", (loops_per_jiffy * HZ) / 500000, ((loops_per_jiffy * HZ) / 5000) % 100, (loops_per_jiffy * HZ)); /* Check Cache configutation */ switch (bfin_read_DMEM_CONTROL() & (1 << DMC0_P | 1 << DMC1_P)) { case ACACHE_BSRAM: cache = "dbank-A/B\t: cache/sram"; dcache_size = 16; dsup_banks = 1; break; case ACACHE_BCACHE: cache = "dbank-A/B\t: cache/cache"; dcache_size = 32; dsup_banks = 2; break; case ASRAM_BSRAM: cache = "dbank-A/B\t: sram/sram"; dcache_size = 0; dsup_banks = 0; break; default: cache = "unknown"; dcache_size = 0; dsup_banks = 0; break; } /* Is it turned on? */ if (!((bfin_read_DMEM_CONTROL()) & (ENDCPLB | DMC_ENABLE))) dcache_size = 0; seq_printf(m, "cache size\t: %d KB(L1 icache) " "%d KB(L1 dcache-%s) %d KB(L2 cache)\n", BFIN_ICACHESIZE / 1024, dcache_size,#if defined CONFIG_BFIN_WB "wb"#elif defined CONFIG_BFIN_WT "wt"#endif "", 0); seq_printf(m, "%s\n", cache); seq_printf(m, "icache setup\t: %d Sub-banks/%d Ways, %d Lines/Way\n", BFIN_ISUBBANKS, BFIN_IWAYS, BFIN_ILINES); seq_printf(m, "dcache setup\t: %d Super-banks/%d Sub-banks/%d Ways, %d Lines/Way\n", dsup_banks, BFIN_DSUBBANKS, BFIN_DWAYS, BFIN_DLINES);#ifdef CONFIG_BFIN_ICACHE_LOCK switch (read_iloc()) { case WAY0_L: seq_printf(m, "Way0 Locked-Down\n"); break; case WAY1_L: seq_printf(m, "Way1 Locked-Down\n"); break; case WAY01_L: seq_printf(m, "Way0,Way1 Locked-Down\n"); break; case WAY2_L: seq_printf(m, "Way2 Locked-Down\n"); break; case WAY02_L: seq_printf(m, "Way0,Way2 Locked-Down\n"); break; case WAY12_L: seq_printf(m, "Way1,Way2 Locked-Down\n"); break; case WAY012_L: seq_printf(m, "Way0,Way1 & Way2 Locked-Down\n"); break; case WAY3_L: seq_printf(m, "Way3 Locked-Down\n"); break; case WAY03_L: seq_printf(m, "Way0,Way3 Locked-Down\n"); break; case WAY13_L: seq_printf(m, "Way1,Way3 Locked-Down\n"); break; case WAY013_L: seq_printf(m, "Way 0,Way1,Way3 Locked-Down\n"); break; case WAY32_L: seq_printf(m, "Way3,Way2 Locked-Down\n"); break; case WAY320_L: seq_printf(m, "Way3,Way2,Way0 Locked-Down\n"); break; case WAY321_L: seq_printf(m, "Way3,Way2,Way1 Locked-Down\n"); break; case WAYALL_L: seq_printf(m, "All Ways are locked\n"); break; default: seq_printf(m, "No Ways are locked\n"); }#endif seq_printf(m, "board name\t: %s\n", bfin_board_name); seq_printf(m, "board memory\t: %ld kB (0x%p -> 0x%p)\n", physical_mem_end >> 10, (void *)0, (void *)physical_mem_end); seq_printf(m, "kernel memory\t: %d kB (0x%p -> 0x%p)\n", ((int)memory_end - (int)_stext) >> 10, _stext, (void *)memory_end); return 0;}static void *c_start(struct seq_file *m, loff_t *pos){ return *pos < NR_CPUS ? ((void *)0x12345678) : NULL;}static void *c_next(struct seq_file *m, void *v, loff_t *pos){ ++*pos; return c_start(m, pos);}static void c_stop(struct seq_file *m, void *v){}struct seq_operations cpuinfo_op = { .start = c_start, .next = c_next, .stop = c_stop, .show = show_cpuinfo,};void __init cmdline_init(const char *r0){ if (r0) strncpy(command_line, r0, COMMAND_LINE_SIZE);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?