void __init prom_init(void) { extern unsigned char ecos_to_linux_boot_args[]; strncpy(arcs_cmdline, ecos_to_linux_boot_args, CL_SIZE-1); arcs_cmdline[CL_SIZE-1] = 0; if (strstr(arcs_cmdline, "nouart")) no_early_printk = 1; bchip_mips_setup(); set_board_nmi_handler(); #ifdef CONFIG_SMP register_smp_ops(&brcmstb_smp_ops); #endif }
void __init prom_init(void) { char *ptr; cfe_init(cfe_handle, cfe_entry); bchip_check_compat(); board_pinmux_setup(); bchip_mips_setup(); set_board_nmi_handler(); /* default to SATA (where available) or MTD rootfs */ #ifdef CONFIG_BRCM_HAS_SATA ROOT_DEV = Root_SDA1; #else ROOT_DEV = MKDEV(MTD_BLOCK_MAJOR, 0); #endif root_mountflags &= ~MS_RDONLY; bchip_set_features(); #if defined(CONFIG_BRCM_IKOS_DEBUG) strcpy(arcs_cmdline, "debug initcall_debug"); #elif !defined(CONFIG_BRCM_IKOS) cfe_read_configuration(); #endif brcm_setup_early_printk(); #ifdef CONFIG_CMDLINE_BOOL #ifdef CONFIG_CMDLINE_OVERRIDE strlcpy(arcs_cmdline, builtin_cmdline, COMMAND_LINE_SIZE); #else if (builtin_cmdline[0]) { strlcat(arcs_cmdline, " ", COMMAND_LINE_SIZE); strlcat(arcs_cmdline, builtin_cmdline, COMMAND_LINE_SIZE); } #endif #endif /* provide "ubiroot" alias to reduce typing */ if (strstr(arcs_cmdline, "ubiroot")) strcat(arcs_cmdline, " ubi.mtd=rootfs rootfstype=ubifs " "root=ubi0:rootfs"); ptr = strstr(arcs_cmdline, "memc1="); if (ptr) brcm_dram1_linux_mb = memparse(ptr + 6, &ptr) >> 20; printk(KERN_INFO "Options: enet_en=%d enet0_mii=%d enet_no_mdio=%d " "enet1_en=%d moca=%d\n", brcm_enet_enabled, brcm_enet0_force_ext_mii, brcm_enet_no_mdio, brcm_enet1_enabled, brcm_moca_enabled); printk(KERN_INFO " sata=%d docsis=%d pci=%d pcie=%d smp=%d " "usb=%d\n", brcm_sata_enabled, brcm_docsis_platform, brcm_pci_enabled, brcm_pcie_enabled, brcm_smp_enabled, brcm_usb_enabled); bchip_early_setup(); board_get_ram_size(&brcm_dram0_size_mb, &brcm_dram1_size_mb); do { unsigned long dram0_mb = brcm_dram0_size_mb, mb; mb = min(dram0_mb, BRCM_MAX_LOWER_MB); dram0_mb -= mb; add_memory_region(0, mb << 20, BOOT_MEM_RAM); if (!dram0_mb) break; #ifdef CONFIG_BRCM_UPPER_MEMORY mb = min(dram0_mb, BRCM_MAX_UPPER_MB); dram0_mb -= mb; brcm_upper_tlb_setup(); add_memory_region(UPPERMEM_START, mb << 20, BOOT_MEM_RAM); if (!dram0_mb) break; #endif #if defined(CONFIG_HIGHMEM) add_memory_region(HIGHMEM_START, dram0_mb << 20, BOOT_MEM_RAM); break; #endif /* * We wound up here because the chip's architecture cannot * make use of all MEMC0 RAM in Linux. i.e. no suitable * HIGHMEM or upper memory options are supported by the CPU. * * But we can still report the excess memory as a "bonus" * reserved (bmem) region, so the application can manage it. */ mb = brcm_dram0_size_mb - dram0_mb; /* Linux memory */ if (!brcm_dram1_size_mb && mb == 256) { printk(KERN_INFO "MEMC0 split: %lu MB -> Linux; " "%lu MB -> extra bmem\n", mb, dram0_mb); brcm_dram1_size_mb = dram0_mb; brcm_dram1_start = UPPERMEM_START; } } while (0); #if defined(CONFIG_HIGHMEM) && defined(CONFIG_BRCM_HAS_1GB_MEMC1) if (brcm_dram1_linux_mb > brcm_dram1_size_mb) { printk(KERN_WARNING "warning: 'memc1=%luM' exceeds " "available memory (%lu MB); ignoring\n", brcm_dram1_linux_mb, brcm_dram1_size_mb); brcm_dram1_linux_mb = 0; } else if (brcm_dram1_linux_mb) { /* Since the bootloader can only map the first 256M of memc1 * when it boots, if we get memc1= request from bootloader, we * should try to pull the memory from the end to avoid crossing * over the memory that is allocated for boot logo image by * bootloader. */ unsigned long start_mb, start_b, size, splash_bound = 0; if (0 == parse_splash_mem(arcs_cmdline, &splash_bound, &size)) { splash_bound += size; } start_mb = brcm_dram1_size_mb - brcm_dram1_linux_mb; start_b = start_mb << 20; if (splash_bound > start_b) { unsigned long orig_dram1 = brcm_dram1_linux_mb; start_mb = (splash_bound + 0x000FFFFF) >> 20; start_b = start_mb << 20; brcm_dram1_linux_mb = brcm_dram1_size_mb - start_mb; printk(KERN_WARNING "warning: 'memc1=%luM' starts " " before splash memory bound (0x%lx);" " adjusting to (memc1=%luM)\n", orig_dram1, splash_bound, brcm_dram1_linux_mb); } printk(KERN_INFO "memc1: adding %luMB at %luMB " "(0x%08lx@0x%08lx)", brcm_dram1_linux_mb, (MEMC1_START >> 20) + start_mb, brcm_dram1_linux_mb << 20, MEMC1_START + start_b); add_memory_region(MEMC1_START + start_b, brcm_dram1_linux_mb << 20, BOOT_MEM_RAM); }