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:
Rafael J. Wysocki
2025-07-22 15:59:47 +02:00
11 changed files with 91 additions and 27 deletions

View File

@@ -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);

View File

@@ -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);

View File

@@ -61,6 +61,13 @@ static const struct acpi_device_id int340x_thermal_device_ids[] = {
{"INTC10D7"},
{"INTC10D8"},
{"INTC10D9"},
{"INTC10FC"},
{"INTC10FD"},
{"INTC10FE"},
{"INTC10FF"},
{"INTC1100"},
{"INTC1101"},
{"INTC1102"},
{""},
};

View File

@@ -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

View File

@@ -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)

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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) },
{ }
};

View File

@@ -690,6 +690,7 @@ static const struct acpi_device_id int3400_thermal_match[] = {
{"INTC1068", 0},
{"INTC10A0", 0},
{"INTC10D4", 0},
{"INTC10FC", 0},
{}
};

View File

@@ -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);