Changeset View
Changeset View
Standalone View
Standalone View
sys/arm64/arm64/identcpu.c
| Show First 20 Lines • Show All 2,314 Lines • ▼ Show 20 Lines | if (user_ctr_has_neoverse_n1_1542419(midr, READ_SPECIALREG(ctr_el0))) { | ||||
| *errata_list = &errata_id; | *errata_list = &errata_id; | ||||
| *errata_count = 1; | *errata_count = 1; | ||||
| return (true); | return (true); | ||||
| } | } | ||||
| return (false); | return (false); | ||||
| } | } | ||||
| static void | static bool | ||||
| user_ctr_enable(const struct cpu_feat *feat __unused, | user_ctr_enable(const struct cpu_feat *feat __unused, | ||||
| cpu_feat_errata errata_status, u_int *errata_list, u_int errata_count) | cpu_feat_errata errata_status, u_int *errata_list, u_int errata_count) | ||||
| { | { | ||||
| MPASS(emulate_ctr || errata_status != ERRATA_NONE); | MPASS(emulate_ctr || errata_status != ERRATA_NONE); | ||||
| /* | /* | ||||
| * The Errata Management Firmware Interface may incorrectly mark | * The Errata Management Firmware Interface may incorrectly mark | ||||
| * this as firmware mitigated. We should ignore that as there is | * this as firmware mitigated. We should ignore that as there is | ||||
| Show All 19 Lines | if (errata_status != ERRATA_NONE && PCPU_GET(cpuid) == 0 && | ||||
| user_cpu_desc.ctr |= (PAGE_SHIFT - 2) << CTR_ILINE_SHIFT; | user_cpu_desc.ctr |= (PAGE_SHIFT - 2) << CTR_ILINE_SHIFT; | ||||
| l_user_cpu_desc.ctr = user_cpu_desc.ctr; | l_user_cpu_desc.ctr = user_cpu_desc.ctr; | ||||
| } | } | ||||
| WRITE_SPECIALREG(sctlr_el1, | WRITE_SPECIALREG(sctlr_el1, | ||||
| READ_SPECIALREG(sctlr_el1) & ~SCTLR_UCT); | READ_SPECIALREG(sctlr_el1) & ~SCTLR_UCT); | ||||
| isb(); | isb(); | ||||
| return (true); | |||||
| } | } | ||||
| CPU_FEAT(trap_ctr, | CPU_FEAT(trap_ctr, "Trap CTR_EL0", | ||||
| user_ctr_check, user_ctr_has_errata, user_ctr_enable, | user_ctr_check, user_ctr_has_errata, user_ctr_enable, | ||||
| CPU_FEAT_AFTER_DEV | CPU_FEAT_PER_CPU); | CPU_FEAT_AFTER_DEV | CPU_FEAT_PER_CPU); | ||||
| static bool | static bool | ||||
| user_ctr_handler(uint64_t esr, struct trapframe *frame) | user_ctr_handler(uint64_t esr, struct trapframe *frame) | ||||
| { | { | ||||
| uint64_t value; | uint64_t value; | ||||
| int reg; | int reg; | ||||
| ▲ Show 20 Lines • Show All 1,052 Lines • Show Last 20 Lines | |||||