ACPI fixes for 5.14-rc4
- Revert recent change of the ACPI IRQ resources handling that attempted to improve the ACPI IRQ override selection logic, but introduced serious regressions on some systems (Hui Wang). - Fix up quirks for AMD platforms in the suspend-to-idle support code so as to take upcoming systems using uPEP HID AMDI007 into account as appropriate (Mario Limonciello). - Fix the code retrieving DPTF attributes of the PCH FIVR so that it agrees on the return data type with the ACPI control method evaluated for this purpose (Srinivas Pandruvada). -----BEGIN PGP SIGNATURE----- iQJGBAABCAAwFiEE4fcc61cGeeHD/fCwgsRv/nhiVHEFAmEESVASHHJqd0Byand5 c29ja2kubmV0AAoJEILEb/54YlRxAg4P/3XEhqudZI7+5VsGgjdVSuYIQZEVBiIt 6M1WOIVwbL+pybeadYVTIzjsBIWWyem48mvUf9liqpzNfgTdyVdbANyJNct9NsgN fETI/ethoBE0+VA8m5Z59ze3vwLWHII++GrL2J6/XQm+VV1mul2FsZ9GJj8v+8zf rD/OatQZMkdLQ5Z7E3OfeNRETmyuxd95wI3xmNcUxtMWkpWq41tRCoXHRPGuWxGF xJKRHDtN7MqXI6WPvdKLMZ2XXbbbmwr4fw5/r5schkP8dbtzMLMPhd7blZlA81jF no7jNQ8EPs5IIgpMkxNo1wVnYK0ALDWrAKifODsQe1WJbRThz9SRAssYD7WQkczE zoE6FcUt2rrKj91P0cnOUWJ+PI8WTa4RStjva1zxliwgv7pDn5SuedAdPv0P/9Zz XO74NrnrF8P+H/rWMNX3/kVzzabw58gzr0o/2a17sFyk+dVAb3vsjQRS+MWy/GLA OsiAqqRe3jC2OtyeQ053FLxacSqItBrfySPB9fGO5rpi5KOG/8ODNf3Y9Z+aWeln LNi7/SU4ZUbklmr8BbXRAdfCnZBrmr9+ddeP4Qg4cBtoJQUsjQHSQzXEuFQWPFNL L+oHkPLNw0Yqej5pJa5eoOKEH0lm0aBDivNV3zJ/0PqD2zFtNB6LQWIftOYARaz0 CDfY0XwUdq58 =IGYg -----END PGP SIGNATURE----- Merge tag 'acpi-5.14-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm Pull ACPI fixes from Rafael Wysocki: "These revert a recent IRQ resources handling modification that turned out to be problematic, fix suspend-to-idle handling on AMD platforms to take upcoming systems into account properly and fix the retrieval of the DPTF attributes of the PCH FIVR. Specifics: - Revert recent change of the ACPI IRQ resources handling that attempted to improve the ACPI IRQ override selection logic, but introduced serious regressions on some systems (Hui Wang). - Fix up quirks for AMD platforms in the suspend-to-idle support code so as to take upcoming systems using uPEP HID AMDI007 into account as appropriate (Mario Limonciello). - Fix the code retrieving DPTF attributes of the PCH FIVR so that it agrees on the return data type with the ACPI control method evaluated for this purpose (Srinivas Pandruvada)" * tag 'acpi-5.14-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: ACPI: DPTF: Fix reading of attributes Revert "ACPI: resources: Add checks for ACPI IRQ override" ACPI: PM: Add support for upcoming AMD uPEP HID AMDI007
This commit is contained in:
commit
e1dab4c02d
|
@ -9,6 +9,42 @@
|
|||
#include <linux/module.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
struct pch_fivr_resp {
|
||||
u64 status;
|
||||
u64 result;
|
||||
};
|
||||
|
||||
static int pch_fivr_read(acpi_handle handle, char *method, struct pch_fivr_resp *fivr_resp)
|
||||
{
|
||||
struct acpi_buffer resp = { sizeof(struct pch_fivr_resp), fivr_resp};
|
||||
struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
|
||||
struct acpi_buffer format = { sizeof("NN"), "NN" };
|
||||
union acpi_object *obj;
|
||||
acpi_status status;
|
||||
int ret = -EFAULT;
|
||||
|
||||
status = acpi_evaluate_object(handle, method, NULL, &buffer);
|
||||
if (ACPI_FAILURE(status))
|
||||
return ret;
|
||||
|
||||
obj = buffer.pointer;
|
||||
if (!obj || obj->type != ACPI_TYPE_PACKAGE)
|
||||
goto release_buffer;
|
||||
|
||||
status = acpi_extract_package(obj, &format, &resp);
|
||||
if (ACPI_FAILURE(status))
|
||||
goto release_buffer;
|
||||
|
||||
if (fivr_resp->status)
|
||||
goto release_buffer;
|
||||
|
||||
ret = 0;
|
||||
|
||||
release_buffer:
|
||||
kfree(buffer.pointer);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Presentation of attributes which are defined for INT1045
|
||||
* They are:
|
||||
|
@ -23,15 +59,14 @@ static ssize_t name##_show(struct device *dev,\
|
|||
char *buf)\
|
||||
{\
|
||||
struct acpi_device *acpi_dev = dev_get_drvdata(dev);\
|
||||
unsigned long long val;\
|
||||
acpi_status status;\
|
||||
struct pch_fivr_resp fivr_resp;\
|
||||
int status;\
|
||||
\
|
||||
status = acpi_evaluate_integer(acpi_dev->handle, #method,\
|
||||
NULL, &val);\
|
||||
if (ACPI_SUCCESS(status))\
|
||||
return sprintf(buf, "%d\n", (int)val);\
|
||||
else\
|
||||
return -EINVAL;\
|
||||
status = pch_fivr_read(acpi_dev->handle, #method, &fivr_resp);\
|
||||
if (status)\
|
||||
return status;\
|
||||
\
|
||||
return sprintf(buf, "%llu\n", fivr_resp.result);\
|
||||
}
|
||||
|
||||
#define PCH_FIVR_STORE(name, method) \
|
||||
|
|
|
@ -423,13 +423,6 @@ static void acpi_dev_get_irqresource(struct resource *res, u32 gsi,
|
|||
}
|
||||
}
|
||||
|
||||
static bool irq_is_legacy(struct acpi_resource_irq *irq)
|
||||
{
|
||||
return irq->triggering == ACPI_EDGE_SENSITIVE &&
|
||||
irq->polarity == ACPI_ACTIVE_HIGH &&
|
||||
irq->shareable == ACPI_EXCLUSIVE;
|
||||
}
|
||||
|
||||
/**
|
||||
* acpi_dev_resource_interrupt - Extract ACPI interrupt resource information.
|
||||
* @ares: Input ACPI resource object.
|
||||
|
@ -468,7 +461,7 @@ bool acpi_dev_resource_interrupt(struct acpi_resource *ares, int index,
|
|||
}
|
||||
acpi_dev_get_irqresource(res, irq->interrupts[index],
|
||||
irq->triggering, irq->polarity,
|
||||
irq->shareable, irq_is_legacy(irq));
|
||||
irq->shareable, true);
|
||||
break;
|
||||
case ACPI_RESOURCE_TYPE_EXTENDED_IRQ:
|
||||
ext_irq = &ares->data.extended_irq;
|
||||
|
|
|
@ -378,19 +378,25 @@ static int lps0_device_attach(struct acpi_device *adev,
|
|||
* AMDI0006:
|
||||
* - should use rev_id 0x0
|
||||
* - function mask = 0x3: Should use Microsoft method
|
||||
* AMDI0007:
|
||||
* - Should use rev_id 0x2
|
||||
* - Should only use AMD method
|
||||
*/
|
||||
const char *hid = acpi_device_hid(adev);
|
||||
rev_id = 0;
|
||||
rev_id = strcmp(hid, "AMDI0007") ? 0 : 2;
|
||||
lps0_dsm_func_mask = validate_dsm(adev->handle,
|
||||
ACPI_LPS0_DSM_UUID_AMD, rev_id, &lps0_dsm_guid);
|
||||
lps0_dsm_func_mask_microsoft = validate_dsm(adev->handle,
|
||||
ACPI_LPS0_DSM_UUID_MICROSOFT, rev_id,
|
||||
ACPI_LPS0_DSM_UUID_MICROSOFT, 0,
|
||||
&lps0_dsm_guid_microsoft);
|
||||
if (lps0_dsm_func_mask > 0x3 && (!strcmp(hid, "AMD0004") ||
|
||||
!strcmp(hid, "AMDI0005"))) {
|
||||
lps0_dsm_func_mask = (lps0_dsm_func_mask << 1) | 0x1;
|
||||
acpi_handle_debug(adev->handle, "_DSM UUID %s: Adjusted function mask: 0x%x\n",
|
||||
ACPI_LPS0_DSM_UUID_AMD, lps0_dsm_func_mask);
|
||||
} else if (lps0_dsm_func_mask_microsoft > 0 && !strcmp(hid, "AMDI0007")) {
|
||||
lps0_dsm_func_mask_microsoft = -EINVAL;
|
||||
acpi_handle_debug(adev->handle, "_DSM Using AMD method\n");
|
||||
}
|
||||
} else {
|
||||
rev_id = 1;
|
||||
|
|
Loading…
Reference in New Issue