mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-11-14 19:02:02 +00:00
The following pcpu related interfaces are moved into common: - common/cpu.c::start_pcpus - include/common/cpu.h::get_pcpu_id - include/common/cpu.h::set_current_pcpu_id Their arch specific implementations are moved into arch/$(ARCH): - arch/$(ARCH)/cpu.c::arch_start_pcpu - include/arch/$(ARCH)/asm/cpu.h::arch_get_pcpu_id - include/arch/$(ARCH)/asm/cpu.h::arch_set_current_pcpu_id The following interface is moved into common: - pcpu_set_current_state (from arch/x86/cpu.c -> common/cpu.c) The following MACROs are moved into include/common/cpu.h: - CPU_UP_TIMEOUT - CPU_DOWN_TIMEOUT - BSP_CPU_ID - INVALID_CPU_ID Tracked-On: #8791 Signed-off-by: Jian Jun Chen <jian.jun.chen@intel.com> Acked-by: Wang, Yu1 <yu1.wang@intel.com>
40 lines
765 B
C
40 lines
765 B
C
/*
|
|
* Copyright (C) 2023 Intel Corporation.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
#include <types.h>
|
|
#include <softirq.h>
|
|
#include <irq.h>
|
|
#include <logmsg.h>
|
|
#include <cpu.h>
|
|
#include <asm/msr.h>
|
|
#include <asm/irq.h>
|
|
#include <asm/apicreg.h>
|
|
#include <hw/hw_thermal.h>
|
|
|
|
/* run in interrupt context */
|
|
static void thermal_irq_handler(__unused uint32_t irq, __unused void *data)
|
|
{
|
|
fire_softirq(SOFTIRQ_THERMAL);
|
|
}
|
|
|
|
void init_hw_thermal(void)
|
|
{
|
|
int32_t retval = 0;
|
|
|
|
if (get_pcpu_id() == BSP_CPU_ID) {
|
|
retval = request_irq(THERMAL_IRQ, thermal_irq_handler, NULL, IRQF_NONE);
|
|
if (retval < 0) {
|
|
pr_err("Thermal irq setup failed\n");
|
|
}
|
|
}
|
|
|
|
if (retval >= 0) {
|
|
uint32_t val = THERMAL_VECTOR;
|
|
|
|
msr_write(MSR_IA32_EXT_APIC_LVT_THERMAL, val);
|
|
}
|
|
}
|