mirror of
https://github.com/torvalds/linux.git
synced 2026-01-25 15:03:52 +08:00
Merge branches 'acpi-soc', 'acpi-fan', 'acpi-dptf', 'acpi-pfrut', 'acpi-prm' and 'acpi-tad'
Merge updates of assorted ACPI drivers for 6.17-rc1: - Remove an AudioDSP-related ID from the ACPI LPSS driver (Andy Shevchenko) - Replace sprintf()/scnprintf() with sysfs_emit() in the ACPI fan driver and update a debug message in fan_get_state_acpi4() (Eslam Khafagy, Abdelrahman Fekry, Sumeet Pawnikar) - Add Intel Wildcat Lake support to the ACPI DPTF driver (Srinivas Pandruvada) - Add more debug information regarding failing firmware updates to the ACPI pfr_update driver (Chen Yu) - Reduce the verbosity of the ACPI PRM (platform runtime mechanism) driver to avoid user confusion (Zhu Qiyu) - Replace sprintf() with sysfs_emit() in the ACPI TAD (time and alarm device) driver (Sukrut Heroorkar) * acpi-soc: ACPI: LPSS: Remove AudioDSP related ID * acpi-fan: ACPI: fan: Update debug message in fan_get_state_acpi4() ACPI: fan: Replace sprintf() with sysfs_emit() ACPI: fan: Replace sprintf()/scnprintf() with sysfs_emit() in show() functions * acpi-dptf: ACPI: DPTF: Support for Wildcat Lake * acpi-pfrut: ACPI: pfr_update: Add more debug information when firmware update failed * acpi-prm: ACPI: PRM: Reduce unnecessary printing to avoid user confusion * acpi-tad: ACPI: TAD: Replace sprintf() with sysfs_emit()
This commit is contained in:
@@ -233,7 +233,7 @@ static ssize_t time_show(struct device *dev, struct device_attribute *attr,
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return sprintf(buf, "%u:%u:%u:%u:%u:%u:%d:%u\n",
|
||||
return sysfs_emit(buf, "%u:%u:%u:%u:%u:%u:%d:%u\n",
|
||||
rt.year, rt.month, rt.day, rt.hour, rt.minute, rt.second,
|
||||
rt.tz, rt.daylight);
|
||||
}
|
||||
@@ -428,7 +428,7 @@ static ssize_t caps_show(struct device *dev, struct device_attribute *attr,
|
||||
{
|
||||
struct acpi_tad_driver_data *dd = dev_get_drvdata(dev);
|
||||
|
||||
return sprintf(buf, "0x%02X\n", dd->capabilities);
|
||||
return sysfs_emit(buf, "0x%02X\n", dd->capabilities);
|
||||
}
|
||||
|
||||
static DEVICE_ATTR_RO(caps);
|
||||
|
||||
@@ -238,6 +238,8 @@ static const struct acpi_device_id int3407_device_ids[] = {
|
||||
{"INTC10A5", 0},
|
||||
{"INTC10D8", 0},
|
||||
{"INTC10D9", 0},
|
||||
{"INTC1100", 0},
|
||||
{"INTC1101", 0},
|
||||
{"", 0},
|
||||
};
|
||||
MODULE_DEVICE_TABLE(acpi, int3407_device_ids);
|
||||
|
||||
@@ -61,6 +61,13 @@ static const struct acpi_device_id int340x_thermal_device_ids[] = {
|
||||
{"INTC10D7"},
|
||||
{"INTC10D8"},
|
||||
{"INTC10D9"},
|
||||
{"INTC10FC"},
|
||||
{"INTC10FD"},
|
||||
{"INTC10FE"},
|
||||
{"INTC10FF"},
|
||||
{"INTC1100"},
|
||||
{"INTC1101"},
|
||||
{"INTC1102"},
|
||||
{""},
|
||||
};
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
{"INTC106A", }, /* Fan for Lunar Lake generation */ \
|
||||
{"INTC10A2", }, /* Fan for Raptor Lake generation */ \
|
||||
{"INTC10D6", }, /* Fan for Panther Lake generation */ \
|
||||
{"INTC10FE", }, /* Fan for Wildcat Lake generation */ \
|
||||
{"PNP0C0B", } /* Generic ACPI fan */
|
||||
|
||||
#define ACPI_FPS_NAME_LEN 20
|
||||
|
||||
@@ -22,9 +22,9 @@ static ssize_t show_state(struct device *dev, struct device_attribute *attr, cha
|
||||
int count;
|
||||
|
||||
if (fps->control == 0xFFFFFFFF || fps->control > 100)
|
||||
count = scnprintf(buf, PAGE_SIZE, "not-defined:");
|
||||
count = sysfs_emit(buf, "not-defined:");
|
||||
else
|
||||
count = scnprintf(buf, PAGE_SIZE, "%lld:", fps->control);
|
||||
count = sysfs_emit(buf, "%lld:", fps->control);
|
||||
|
||||
if (fps->trip_point == 0xFFFFFFFF || fps->trip_point > 9)
|
||||
count += sysfs_emit_at(buf, count, "not-defined:");
|
||||
@@ -59,7 +59,7 @@ static ssize_t show_fan_speed(struct device *dev, struct device_attribute *attr,
|
||||
if (status)
|
||||
return status;
|
||||
|
||||
return sprintf(buf, "%lld\n", fst.speed);
|
||||
return sysfs_emit(buf, "%lld\n", fst.speed);
|
||||
}
|
||||
|
||||
static ssize_t show_fine_grain_control(struct device *dev, struct device_attribute *attr, char *buf)
|
||||
@@ -67,7 +67,7 @@ static ssize_t show_fine_grain_control(struct device *dev, struct device_attribu
|
||||
struct acpi_device *acpi_dev = container_of(dev, struct acpi_device, dev);
|
||||
struct acpi_fan *fan = acpi_driver_data(acpi_dev);
|
||||
|
||||
return sprintf(buf, "%d\n", fan->fif.fine_grain_ctrl);
|
||||
return sysfs_emit(buf, "%d\n", fan->fif.fine_grain_ctrl);
|
||||
}
|
||||
|
||||
int acpi_fan_create_attributes(struct acpi_device *device)
|
||||
|
||||
@@ -102,7 +102,7 @@ match_fps:
|
||||
break;
|
||||
}
|
||||
if (i == fan->fps_count) {
|
||||
dev_dbg(&device->dev, "Invalid control value returned\n");
|
||||
dev_dbg(&device->dev, "No matching fps control value\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
||||
@@ -127,8 +127,11 @@ static int query_capability(struct pfru_update_cap_info *cap_hdr,
|
||||
pfru_dev->rev_id,
|
||||
PFRU_FUNC_QUERY_UPDATE_CAP,
|
||||
NULL, ACPI_TYPE_PACKAGE);
|
||||
if (!out_obj)
|
||||
if (!out_obj) {
|
||||
dev_dbg(pfru_dev->parent_dev,
|
||||
"Query cap failed with no object\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (out_obj->package.count < CAP_NR_IDX ||
|
||||
out_obj->package.elements[CAP_STATUS_IDX].type != ACPI_TYPE_INTEGER ||
|
||||
@@ -141,13 +144,17 @@ static int query_capability(struct pfru_update_cap_info *cap_hdr,
|
||||
out_obj->package.elements[CAP_DRV_SVN_IDX].type != ACPI_TYPE_INTEGER ||
|
||||
out_obj->package.elements[CAP_PLAT_ID_IDX].type != ACPI_TYPE_BUFFER ||
|
||||
out_obj->package.elements[CAP_OEM_ID_IDX].type != ACPI_TYPE_BUFFER ||
|
||||
out_obj->package.elements[CAP_OEM_INFO_IDX].type != ACPI_TYPE_BUFFER)
|
||||
out_obj->package.elements[CAP_OEM_INFO_IDX].type != ACPI_TYPE_BUFFER) {
|
||||
dev_dbg(pfru_dev->parent_dev,
|
||||
"Query cap failed with invalid package count/type\n");
|
||||
goto free_acpi_buffer;
|
||||
}
|
||||
|
||||
cap_hdr->status = out_obj->package.elements[CAP_STATUS_IDX].integer.value;
|
||||
if (cap_hdr->status != DSM_SUCCEED) {
|
||||
ret = -EBUSY;
|
||||
dev_dbg(pfru_dev->parent_dev, "Error Status:%d\n", cap_hdr->status);
|
||||
dev_dbg(pfru_dev->parent_dev, "Query cap Error Status:%d\n",
|
||||
cap_hdr->status);
|
||||
goto free_acpi_buffer;
|
||||
}
|
||||
|
||||
@@ -193,24 +200,32 @@ static int query_buffer(struct pfru_com_buf_info *info,
|
||||
out_obj = acpi_evaluate_dsm_typed(handle, &pfru_guid,
|
||||
pfru_dev->rev_id, PFRU_FUNC_QUERY_BUF,
|
||||
NULL, ACPI_TYPE_PACKAGE);
|
||||
if (!out_obj)
|
||||
if (!out_obj) {
|
||||
dev_dbg(pfru_dev->parent_dev,
|
||||
"Query buf failed with no object\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (out_obj->package.count < BUF_NR_IDX ||
|
||||
out_obj->package.elements[BUF_STATUS_IDX].type != ACPI_TYPE_INTEGER ||
|
||||
out_obj->package.elements[BUF_EXT_STATUS_IDX].type != ACPI_TYPE_INTEGER ||
|
||||
out_obj->package.elements[BUF_ADDR_LOW_IDX].type != ACPI_TYPE_INTEGER ||
|
||||
out_obj->package.elements[BUF_ADDR_HI_IDX].type != ACPI_TYPE_INTEGER ||
|
||||
out_obj->package.elements[BUF_SIZE_IDX].type != ACPI_TYPE_INTEGER)
|
||||
out_obj->package.elements[BUF_SIZE_IDX].type != ACPI_TYPE_INTEGER) {
|
||||
dev_dbg(pfru_dev->parent_dev,
|
||||
"Query buf failed with invalid package count/type\n");
|
||||
goto free_acpi_buffer;
|
||||
}
|
||||
|
||||
info->status = out_obj->package.elements[BUF_STATUS_IDX].integer.value;
|
||||
info->ext_status =
|
||||
out_obj->package.elements[BUF_EXT_STATUS_IDX].integer.value;
|
||||
if (info->status != DSM_SUCCEED) {
|
||||
ret = -EBUSY;
|
||||
dev_dbg(pfru_dev->parent_dev, "Error Status:%d\n", info->status);
|
||||
dev_dbg(pfru_dev->parent_dev, "Error Extended Status:%d\n", info->ext_status);
|
||||
dev_dbg(pfru_dev->parent_dev,
|
||||
"Query buf failed with Error Status:%d\n", info->status);
|
||||
dev_dbg(pfru_dev->parent_dev,
|
||||
"Query buf failed with Error Extended Status:%d\n", info->ext_status);
|
||||
|
||||
goto free_acpi_buffer;
|
||||
}
|
||||
@@ -295,12 +310,16 @@ static bool applicable_image(const void *data, struct pfru_update_cap_info *cap,
|
||||
m_img_hdr = data + size;
|
||||
|
||||
type = get_image_type(m_img_hdr, pfru_dev);
|
||||
if (type < 0)
|
||||
if (type < 0) {
|
||||
dev_dbg(pfru_dev->parent_dev, "Invalid image type\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
size = adjust_efi_size(m_img_hdr, size);
|
||||
if (size < 0)
|
||||
if (size < 0) {
|
||||
dev_dbg(pfru_dev->parent_dev, "Invalid image size\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
auth = data + size;
|
||||
size += sizeof(u64) + auth->auth_info.hdr.len;
|
||||
@@ -346,8 +365,11 @@ static int start_update(int action, struct pfru_device *pfru_dev)
|
||||
out_obj = acpi_evaluate_dsm_typed(handle, &pfru_guid,
|
||||
pfru_dev->rev_id, PFRU_FUNC_START,
|
||||
&in_obj, ACPI_TYPE_PACKAGE);
|
||||
if (!out_obj)
|
||||
if (!out_obj) {
|
||||
dev_dbg(pfru_dev->parent_dev,
|
||||
"Update failed to start with no object\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (out_obj->package.count < UPDATE_NR_IDX ||
|
||||
out_obj->package.elements[UPDATE_STATUS_IDX].type != ACPI_TYPE_INTEGER ||
|
||||
@@ -355,8 +377,11 @@ static int start_update(int action, struct pfru_device *pfru_dev)
|
||||
out_obj->package.elements[UPDATE_AUTH_TIME_LOW_IDX].type != ACPI_TYPE_INTEGER ||
|
||||
out_obj->package.elements[UPDATE_AUTH_TIME_HI_IDX].type != ACPI_TYPE_INTEGER ||
|
||||
out_obj->package.elements[UPDATE_EXEC_TIME_LOW_IDX].type != ACPI_TYPE_INTEGER ||
|
||||
out_obj->package.elements[UPDATE_EXEC_TIME_HI_IDX].type != ACPI_TYPE_INTEGER)
|
||||
out_obj->package.elements[UPDATE_EXEC_TIME_HI_IDX].type != ACPI_TYPE_INTEGER) {
|
||||
dev_dbg(pfru_dev->parent_dev,
|
||||
"Update failed with invalid package count/type\n");
|
||||
goto free_acpi_buffer;
|
||||
}
|
||||
|
||||
update_result.status =
|
||||
out_obj->package.elements[UPDATE_STATUS_IDX].integer.value;
|
||||
@@ -365,8 +390,10 @@ static int start_update(int action, struct pfru_device *pfru_dev)
|
||||
|
||||
if (update_result.status != DSM_SUCCEED) {
|
||||
ret = -EBUSY;
|
||||
dev_dbg(pfru_dev->parent_dev, "Error Status:%d\n", update_result.status);
|
||||
dev_dbg(pfru_dev->parent_dev, "Error Extended Status:%d\n",
|
||||
dev_dbg(pfru_dev->parent_dev,
|
||||
"Update failed with Error Status:%d\n", update_result.status);
|
||||
dev_dbg(pfru_dev->parent_dev,
|
||||
"Update failed with Error Extended Status:%d\n",
|
||||
update_result.ext_status);
|
||||
|
||||
goto free_acpi_buffer;
|
||||
@@ -450,8 +477,10 @@ static ssize_t pfru_write(struct file *file, const char __user *buf,
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (len > buf_info.buf_size)
|
||||
if (len > buf_info.buf_size) {
|
||||
dev_dbg(pfru_dev->parent_dev, "Capsule image size too large\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
iov.iov_base = (void __user *)buf;
|
||||
iov.iov_len = len;
|
||||
@@ -460,10 +489,14 @@ static ssize_t pfru_write(struct file *file, const char __user *buf,
|
||||
/* map the communication buffer */
|
||||
phy_addr = (phys_addr_t)((buf_info.addr_hi << 32) | buf_info.addr_lo);
|
||||
buf_ptr = memremap(phy_addr, buf_info.buf_size, MEMREMAP_WB);
|
||||
if (!buf_ptr)
|
||||
if (!buf_ptr) {
|
||||
dev_dbg(pfru_dev->parent_dev, "Failed to remap the buffer\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
if (!copy_from_iter_full(buf_ptr, len, &iter)) {
|
||||
dev_dbg(pfru_dev->parent_dev,
|
||||
"Failed to copy the data from the user space buffer\n");
|
||||
ret = -EINVAL;
|
||||
goto unmap;
|
||||
}
|
||||
|
||||
@@ -85,8 +85,6 @@ static u64 efi_pa_va_lookup(efi_guid_t *guid, u64 pa)
|
||||
}
|
||||
}
|
||||
|
||||
pr_warn("Failed to find VA for GUID: %pUL, PA: 0x%llx", guid, pa);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -154,13 +152,37 @@ acpi_parse_prmt(union acpi_subtable_headers *header, const unsigned long end)
|
||||
guid_copy(&th->guid, (guid_t *)handler_info->handler_guid);
|
||||
th->handler_addr =
|
||||
(void *)efi_pa_va_lookup(&th->guid, handler_info->handler_address);
|
||||
/*
|
||||
* Print a warning message if handler_addr is zero which is not expected to
|
||||
* ever happen.
|
||||
*/
|
||||
if (unlikely(!th->handler_addr))
|
||||
pr_warn("Failed to find VA of handler for GUID: %pUL, PA: 0x%llx",
|
||||
&th->guid, handler_info->handler_address);
|
||||
|
||||
th->static_data_buffer_addr =
|
||||
efi_pa_va_lookup(&th->guid, handler_info->static_data_buffer_address);
|
||||
/*
|
||||
* According to the PRM specification, static_data_buffer_address can be zero,
|
||||
* so avoid printing a warning message in that case. Otherwise, if the
|
||||
* return value of efi_pa_va_lookup() is zero, print the message.
|
||||
*/
|
||||
if (unlikely(!th->static_data_buffer_addr && handler_info->static_data_buffer_address))
|
||||
pr_warn("Failed to find VA of static data buffer for GUID: %pUL, PA: 0x%llx",
|
||||
&th->guid, handler_info->static_data_buffer_address);
|
||||
|
||||
th->acpi_param_buffer_addr =
|
||||
efi_pa_va_lookup(&th->guid, handler_info->acpi_param_buffer_address);
|
||||
|
||||
/*
|
||||
* According to the PRM specification, acpi_param_buffer_address can be zero,
|
||||
* so avoid printing a warning message in that case. Otherwise, if the
|
||||
* return value of efi_pa_va_lookup() is zero, print the message.
|
||||
*/
|
||||
if (unlikely(!th->acpi_param_buffer_addr && handler_info->acpi_param_buffer_address))
|
||||
pr_warn("Failed to find VA of acpi param buffer for GUID: %pUL, PA: 0x%llx",
|
||||
&th->guid, handler_info->acpi_param_buffer_address);
|
||||
|
||||
} while (++cur_handler < tm->handler_count && (handler_info = get_next_handler(handler_info)));
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -387,9 +387,6 @@ static const struct acpi_device_id acpi_lpss_device_ids[] = {
|
||||
{ "INT3435", LPSS_ADDR(lpt_uart_dev_desc) },
|
||||
{ "INT3436", LPSS_ADDR(lpt_sdio_dev_desc) },
|
||||
|
||||
/* Wildcat Point LPSS devices */
|
||||
{ "INT3438", LPSS_ADDR(lpt_spi_dev_desc) },
|
||||
|
||||
{ }
|
||||
};
|
||||
|
||||
|
||||
@@ -690,6 +690,7 @@ static const struct acpi_device_id int3400_thermal_match[] = {
|
||||
{"INTC1068", 0},
|
||||
{"INTC10A0", 0},
|
||||
{"INTC10D4", 0},
|
||||
{"INTC10FC", 0},
|
||||
{}
|
||||
};
|
||||
|
||||
|
||||
@@ -276,6 +276,7 @@ static const struct acpi_device_id int3403_device_ids[] = {
|
||||
{"INTC1069", 0},
|
||||
{"INTC10A1", 0},
|
||||
{"INTC10D5", 0},
|
||||
{"INTC10FD", 0},
|
||||
{"", 0},
|
||||
};
|
||||
MODULE_DEVICE_TABLE(acpi, int3403_device_ids);
|
||||
|
||||
Reference in New Issue
Block a user