diff --git a/sys/arm/arm/machdep.c b/sys/arm/arm/machdep.c index 6bd31602f27..3c8a0982443 100644 --- a/sys/arm/arm/machdep.c +++ b/sys/arm/arm/machdep.c @@ -272,8 +272,22 @@ cpu_flush_dcache(void *ptr, size_t len) int cpu_est_clockrate(int cpu_id, uint64_t *rate) { +#if __ARM_ARCH >= 6 + struct pcpu *pc; + pc = pcpu_find(cpu_id); + if (pc == NULL || rate == NULL) + return (EINVAL); + + if (pc->pc_clock == 0) + return (EOPNOTSUPP); + + *rate = pc->pc_clock; + + return (0); +#else return (ENXIO); +#endif } void diff --git a/sys/arm/include/pcpu.h b/sys/arm/include/pcpu.h index ea2ba540339..bc8abd57b03 100644 --- a/sys/arm/include/pcpu.h +++ b/sys/arm/include/pcpu.h @@ -65,7 +65,8 @@ struct vmspace; int pc_dbreg_cmd; \ int pc_bp_harden_kind; \ uint32_t pc_original_actlr; \ - char __pad[147] + uint64_t pc_clock; \ + char __pad[139] #else #define PCPU_MD_FIELDS \ char __pad[93]