/* -------------------------------------------------------------------------- Name: prom_init -------------------------------------------------------------------------- */ void __init prom_init(void) { extern ulong r4k_interval; serial_init(); kerSysFlashInit(); do_syslog(8, NULL, 8); printk( "%s prom init\n", get_system_type() ); PERF->IrqMask = 0; arcs_cmdline[0] = '\0'; #if defined(CONFIG_ROOT_NFS) create_root_nfs_cmdline( arcs_cmdline ); #elif defined(CONFIG_ROOT_FLASHFS) strcpy(arcs_cmdline, CONFIG_ROOT_FLASHFS); #endif add_memory_region(0, (getMemorySize() - ADSL_SDRAM_IMAGE_SIZE), BOOT_MEM_RAM); #if defined(CONFIG_BCM96348) calculateCpuSpeed(); #endif /* Count register increments every other clock */ r4k_interval = CPU_CLOCK / HZ / 2; mips_hpt_frequency = CPU_CLOCK / 2; mips_machgroup = MACH_GROUP_BRCM; mips_machtype = MACH_BCM; }
void __init plat_time_init(void) { /* JU: TBD: there was some special SMP handling added here in original kernel */ mips_hpt_frequency = calculateCpuSpeed() / 2; #if defined(CONFIG_BCM_PWRMNGT) || defined(CONFIG_BCM_PWRMNGT_MODULE) BcmPwrMngtInitC0Speed(); #else // Enable cp0 counter/compare interrupt only when not using power management write_c0_status(IE_IRQ5 | read_c0_status()); #endif }
int getCPUspeed_cmd(int argc, char **argv) { int speed; if (_cpuIdTest() != 1) { printf("error: cpuid instruction is not supported.\n"); return false; } printf("Detected cpuid instruction...\n"); if (_rdtscTest() > 0) { printf("Using rdtsc to perform measurement...\n"); speed = calculateCpuSpeed(_tscGetCpuSpeed); } else if (_rdmsrTest() > 0) { printf("Using rdmsr to perform measurement...\n"); speed = calculateCpuSpeed(_msrGetCpuSpeed); } else { printf("error: rdtsc or rdmsr should be available to perform this command\n"); return false; } printf("Detected CPU speed: %dMHz\n", speed); return 0; }
void __init prom_init(void) { #if 0 int argc = fw_arg0; u32 *argv = (u32 *)CKSEG0ADDR(fw_arg1); int i; kerSysEarlyFlashInit(); // too early in bootup sequence to acquire spinlock, not needed anyways // only the kernel is running at this point kerSysNvRamGetBoardIdLocked(promBoardIdStr); printk( "%s prom init\n", promBoardIdStr ); #if defined(CONFIG_BCM_KF_DSP) && defined(CONFIG_BCM_BCMDSP_MODULE) main_tp_num = ((read_c0_diag3() & CP0_CMT_TPID) == CP0_CMT_TPID) ? 1 : 0; printk("Linux TP ID = %u \n", (unsigned int)main_tp_num); #endif PERF->IrqControl[0].IrqMask=0; arcs_cmdline[0] = '\0'; create_cmdline(arcs_cmdline); strcat(arcs_cmdline, " "); for (i = 1; i < argc; i++) { strcat(arcs_cmdline, (char *)CKSEG0ADDR(argv[i])); if (i < (argc - 1)) strcat(arcs_cmdline, " "); } /* Count register increments every other clock */ mips_hpt_frequency = calculateCpuSpeed() / 2; retrieve_boot_loader_parameters(); #endif }