mirror of
https://github.com/torvalds/linux.git
synced 2026-05-12 16:18:45 +02:00
Merge branches 'acpi-apei', 'acpi-bus', 'acpi-cppc' and 'acpi-video'
Merge assorted ACPI support fixes for 7.1-rc2: - Fix EINJV2 memory error injection in APEI (Tony Luck) - Add missing notifier_block structure forward declaration to acpi_bus.h (Bartosz Golaszewski) - Fix related_cpus inconsistency during CPU hotplug in the ACPI CPPC library (Jinjie Ruan) - Add a quirk to force native backlight on HP OMEN 16 (8A44) in the ACPI video bus driver (Shivam Kalra) * acpi-apei: ACPI: APEI: EINJ: Fix EINJV2 memory error injection ACPICA: Provide #defines for EINJV2 error types * acpi-bus: ACPI: bus: add missing forward declaration to acpi_bus.h * acpi-cppc: ACPI: CPPC: Fix related_cpus inconsistency during CPU hotplug * acpi-video: ACPI: video: force native backlight on HP OMEN 16 (8A44)
This commit is contained in:
commit
36a96eda15
|
|
@ -401,8 +401,18 @@ static struct acpi_generic_address *einj_get_trigger_parameter_region(
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool is_memory_injection(u32 type, u32 flags)
|
||||||
|
{
|
||||||
|
if (flags & SETWA_FLAGS_EINJV2)
|
||||||
|
return !!(type & ACPI_EINJV2_MEMORY);
|
||||||
|
if (type & ACPI5_VENDOR_BIT)
|
||||||
|
return !!(vendor_flags & SETWA_FLAGS_MEM);
|
||||||
|
return !!(type & MEM_ERROR_MASK) || !!(flags & SETWA_FLAGS_MEM);
|
||||||
|
}
|
||||||
|
|
||||||
/* Execute instructions in trigger error action table */
|
/* Execute instructions in trigger error action table */
|
||||||
static int __einj_error_trigger(u64 trigger_paddr, u32 type,
|
static int __einj_error_trigger(u64 trigger_paddr, u32 type, u32 flags,
|
||||||
u64 param1, u64 param2)
|
u64 param1, u64 param2)
|
||||||
{
|
{
|
||||||
struct acpi_einj_trigger trigger_tab;
|
struct acpi_einj_trigger trigger_tab;
|
||||||
|
|
@ -480,7 +490,7 @@ static int __einj_error_trigger(u64 trigger_paddr, u32 type,
|
||||||
* This will cause resource conflict with regular memory. So
|
* This will cause resource conflict with regular memory. So
|
||||||
* remove it from trigger table resources.
|
* remove it from trigger table resources.
|
||||||
*/
|
*/
|
||||||
if ((param_extension || acpi5) && (type & MEM_ERROR_MASK) && param2) {
|
if ((param_extension || acpi5) && is_memory_injection(type, flags)) {
|
||||||
struct apei_resources addr_resources;
|
struct apei_resources addr_resources;
|
||||||
|
|
||||||
apei_resources_init(&addr_resources);
|
apei_resources_init(&addr_resources);
|
||||||
|
|
@ -660,7 +670,7 @@ static int __einj_error_inject(u32 type, u32 flags, u64 param1, u64 param2,
|
||||||
return rc;
|
return rc;
|
||||||
trigger_paddr = apei_exec_ctx_get_output(&ctx);
|
trigger_paddr = apei_exec_ctx_get_output(&ctx);
|
||||||
if (notrigger == 0) {
|
if (notrigger == 0) {
|
||||||
rc = __einj_error_trigger(trigger_paddr, type, param1, param2);
|
rc = __einj_error_trigger(trigger_paddr, type, flags, param1, param2);
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
@ -718,28 +728,6 @@ int einj_error_inject(u32 type, u32 flags, u64 param1, u64 param2, u64 param3,
|
||||||
SETWA_FLAGS_PCIE_SBDF | SETWA_FLAGS_EINJV2)))
|
SETWA_FLAGS_PCIE_SBDF | SETWA_FLAGS_EINJV2)))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
/* check if type is a valid EINJv2 error type */
|
|
||||||
if (is_v2) {
|
|
||||||
if (!(type & available_error_type_v2))
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* We need extra sanity checks for memory errors.
|
|
||||||
* Other types leap directly to injection.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* ensure param1/param2 existed */
|
|
||||||
if (!(param_extension || acpi5))
|
|
||||||
goto inject;
|
|
||||||
|
|
||||||
/* ensure injection is memory related */
|
|
||||||
if (type & ACPI5_VENDOR_BIT) {
|
|
||||||
if (vendor_flags != SETWA_FLAGS_MEM)
|
|
||||||
goto inject;
|
|
||||||
} else if (!(type & MEM_ERROR_MASK) && !(flags & SETWA_FLAGS_MEM)) {
|
|
||||||
goto inject;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Injections targeting a CXL 1.0/1.1 port have to be injected
|
* Injections targeting a CXL 1.0/1.1 port have to be injected
|
||||||
* via the einj_cxl_rch_error_inject() path as that does the proper
|
* via the einj_cxl_rch_error_inject() path as that does the proper
|
||||||
|
|
@ -748,6 +736,23 @@ int einj_error_inject(u32 type, u32 flags, u64 param1, u64 param2, u64 param3,
|
||||||
if (einj_is_cxl_error_type(type) && (flags & SETWA_FLAGS_MEM))
|
if (einj_is_cxl_error_type(type) && (flags & SETWA_FLAGS_MEM))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
/* check if type is a valid EINJv2 error type */
|
||||||
|
if (is_v2) {
|
||||||
|
if (!(type & available_error_type_v2))
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ensure param1/param2 existed */
|
||||||
|
if (!(param_extension || acpi5))
|
||||||
|
goto inject;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We need extra sanity checks for memory errors.
|
||||||
|
* Other types leap directly to injection.
|
||||||
|
*/
|
||||||
|
if (!is_memory_injection(type, flags))
|
||||||
|
goto inject;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Disallow crazy address masks that give BIOS leeway to pick
|
* Disallow crazy address masks that give BIOS leeway to pick
|
||||||
* injection address almost anywhere. Insist on page or
|
* injection address almost anywhere. Insist on page or
|
||||||
|
|
|
||||||
|
|
@ -362,7 +362,7 @@ static int send_pcc_cmd(int pcc_ss_id, u16 cmd)
|
||||||
end:
|
end:
|
||||||
if (cmd == CMD_WRITE) {
|
if (cmd == CMD_WRITE) {
|
||||||
if (unlikely(ret)) {
|
if (unlikely(ret)) {
|
||||||
for_each_online_cpu(i) {
|
for_each_possible_cpu(i) {
|
||||||
struct cpc_desc *desc = per_cpu(cpc_desc_ptr, i);
|
struct cpc_desc *desc = per_cpu(cpc_desc_ptr, i);
|
||||||
|
|
||||||
if (!desc)
|
if (!desc)
|
||||||
|
|
@ -524,13 +524,13 @@ int acpi_get_psd_map(unsigned int cpu, struct cppc_cpudata *cpu_data)
|
||||||
else if (pdomain->coord_type == DOMAIN_COORD_TYPE_SW_ANY)
|
else if (pdomain->coord_type == DOMAIN_COORD_TYPE_SW_ANY)
|
||||||
cpu_data->shared_type = CPUFREQ_SHARED_TYPE_ANY;
|
cpu_data->shared_type = CPUFREQ_SHARED_TYPE_ANY;
|
||||||
|
|
||||||
for_each_online_cpu(i) {
|
for_each_possible_cpu(i) {
|
||||||
if (i == cpu)
|
if (i == cpu)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
match_cpc_ptr = per_cpu(cpc_desc_ptr, i);
|
match_cpc_ptr = per_cpu(cpc_desc_ptr, i);
|
||||||
if (!match_cpc_ptr)
|
if (!match_cpc_ptr)
|
||||||
goto err_fault;
|
continue;
|
||||||
|
|
||||||
match_pdomain = &(match_cpc_ptr->domain_info);
|
match_pdomain = &(match_cpc_ptr->domain_info);
|
||||||
if (match_pdomain->domain != pdomain->domain)
|
if (match_pdomain->domain != pdomain->domain)
|
||||||
|
|
|
||||||
|
|
@ -916,6 +916,14 @@ static const struct dmi_system_id video_detect_dmi_table[] = {
|
||||||
DMI_MATCH(DMI_PRODUCT_NAME, "82K8"),
|
DMI_MATCH(DMI_PRODUCT_NAME, "82K8"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.callback = video_detect_force_native,
|
||||||
|
/* HP OMEN Gaming Laptop 16-n0xxx */
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "HP"),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_NAME, "OMEN by HP Gaming Laptop 16-n0xxx"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* x86 android tablets which directly control the backlight through
|
* x86 android tablets which directly control the backlight through
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,8 @@
|
||||||
#include <linux/property.h>
|
#include <linux/property.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
|
||||||
|
struct notifier_block;
|
||||||
|
|
||||||
struct acpi_handle_list {
|
struct acpi_handle_list {
|
||||||
u32 count;
|
u32 count;
|
||||||
acpi_handle *handles;
|
acpi_handle *handles;
|
||||||
|
|
|
||||||
|
|
@ -1386,6 +1386,12 @@ enum acpi_einj_command_status {
|
||||||
#define ACPI_EINJ_CXL_MEM_FATAL (1<<17)
|
#define ACPI_EINJ_CXL_MEM_FATAL (1<<17)
|
||||||
#define ACPI_EINJ_VENDOR_DEFINED (1<<31)
|
#define ACPI_EINJ_VENDOR_DEFINED (1<<31)
|
||||||
|
|
||||||
|
/* EINJV2 error types from EINJV2_GET_ERROR_TYPE (ACPI 6.6) */
|
||||||
|
|
||||||
|
#define ACPI_EINJV2_PROCESSOR (1)
|
||||||
|
#define ACPI_EINJV2_MEMORY (1<<1)
|
||||||
|
#define ACPI_EINJV2_PCIE (1<<2)
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
*
|
*
|
||||||
* ERST - Error Record Serialization Table (ACPI 4.0)
|
* ERST - Error Record Serialization Table (ACPI 4.0)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user