void cpu_attach(struct device *dv) { int usearmfpe; usearmfpe = 1; /* when compiled in, its enabled by default */ curcpu()->ci_dev = dv; evcnt_attach_dynamic(&curcpu()->ci_arm700bugcount, EVCNT_TYPE_MISC, NULL, dv->dv_xname, "arm700swibug"); /* Get the cpu ID from coprocessor 15 */ curcpu()->ci_cpuid = cpu_id(); curcpu()->ci_cputype = curcpu()->ci_cpuid & CPU_ID_CPU_MASK; curcpu()->ci_cpurev = curcpu()->ci_cpuid & CPU_ID_REVISION_MASK; identify_arm_cpu(dv, curcpu()); if (curcpu()->ci_cputype == CPU_ID_SA110 && curcpu()->ci_cpurev < 3) { printf("%s: SA-110 with bugged STM^ instruction\n", dv->dv_xname); } #ifdef CPU_ARM8 if ((curcpu()->ci_cpuid & CPU_ID_CPU_MASK) == CPU_ID_ARM810) { int clock = arm8_clock_config(0, 0); char *fclk; printf("%s: ARM810 cp15=%02x", dv->dv_xname, clock); printf(" clock:%s", (clock & 1) ? " dynamic" : ""); printf("%s", (clock & 2) ? " sync" : ""); switch ((clock >> 2) & 3) { case 0: fclk = "bus clock"; break; case 1: fclk = "ref clock"; break; case 3: fclk = "pll"; break; default: fclk = "illegal"; break; } printf(" fclk source=%s\n", fclk); }
void cpu_attach(struct device *dv) { curcpu()->ci_dev = dv; /* Get the CPU ID from coprocessor 15 */ curcpu()->ci_arm_cpuid = cpu_id(); curcpu()->ci_arm_cputype = curcpu()->ci_arm_cpuid & CPU_ID_CPU_MASK; curcpu()->ci_arm_cpurev = curcpu()->ci_arm_cpuid & CPU_ID_REVISION_MASK; identify_arm_cpu(dv, curcpu()); vfp_init(); }
void cpu_attach(struct device *dv) { curcpu()->ci_dev = dv; /* Get the CPU ID from coprocessor 15 */ curcpu()->ci_arm_cpuid = cpu_id(); curcpu()->ci_arm_cputype = curcpu()->ci_arm_cpuid & CPU_ID_CPU_MASK; curcpu()->ci_arm_cpurev = curcpu()->ci_arm_cpuid & CPU_ID_REVISION_MASK; identify_arm_cpu(dv, curcpu()); #ifdef CPU_ARM8 if ((curcpu()->ci_arm_cpuid & CPU_ID_CPU_MASK) == CPU_ID_ARM810) { int clock = arm8_clock_config(0, 0); char *fclk; aprint_normal("%s: ARM810 cp15=%02x", dv->dv_xname, clock); aprint_normal(" clock:%s", (clock & 1) ? " dynamic" : ""); aprint_normal("%s", (clock & 2) ? " sync" : ""); switch ((clock >> 2) & 3) { case 0: fclk = "bus clock"; break; case 1: fclk = "ref clock"; break; case 3: fclk = "pll"; break; default: fclk = "illegal"; break; } aprint_normal(" fclk source=%s\n", fclk); }
/** * arm_processor_identify * * Print out information about the currently executing processor. */ void arm_processor_identify(void) { get_cachetype_cp15(); identify_arm_cpu(); }