Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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

+91 -27
+2 -2
drivers/acpi/acpi_tad.c
··· 233 233 if (ret) 234 234 return ret; 235 235 236 - return sprintf(buf, "%u:%u:%u:%u:%u:%u:%d:%u\n", 236 + return sysfs_emit(buf, "%u:%u:%u:%u:%u:%u:%d:%u\n", 237 237 rt.year, rt.month, rt.day, rt.hour, rt.minute, rt.second, 238 238 rt.tz, rt.daylight); 239 239 } ··· 428 428 { 429 429 struct acpi_tad_driver_data *dd = dev_get_drvdata(dev); 430 430 431 - return sprintf(buf, "0x%02X\n", dd->capabilities); 431 + return sysfs_emit(buf, "0x%02X\n", dd->capabilities); 432 432 } 433 433 434 434 static DEVICE_ATTR_RO(caps);
+2
drivers/acpi/dptf/dptf_power.c
··· 238 238 {"INTC10A5", 0}, 239 239 {"INTC10D8", 0}, 240 240 {"INTC10D9", 0}, 241 + {"INTC1100", 0}, 242 + {"INTC1101", 0}, 241 243 {"", 0}, 242 244 }; 243 245 MODULE_DEVICE_TABLE(acpi, int3407_device_ids);
+7
drivers/acpi/dptf/int340x_thermal.c
··· 61 61 {"INTC10D7"}, 62 62 {"INTC10D8"}, 63 63 {"INTC10D9"}, 64 + {"INTC10FC"}, 65 + {"INTC10FD"}, 66 + {"INTC10FE"}, 67 + {"INTC10FF"}, 68 + {"INTC1100"}, 69 + {"INTC1101"}, 70 + {"INTC1102"}, 64 71 {""}, 65 72 }; 66 73
+1
drivers/acpi/fan.h
··· 20 20 {"INTC106A", }, /* Fan for Lunar Lake generation */ \ 21 21 {"INTC10A2", }, /* Fan for Raptor Lake generation */ \ 22 22 {"INTC10D6", }, /* Fan for Panther Lake generation */ \ 23 + {"INTC10FE", }, /* Fan for Wildcat Lake generation */ \ 23 24 {"PNP0C0B", } /* Generic ACPI fan */ 24 25 25 26 #define ACPI_FPS_NAME_LEN 20
+4 -4
drivers/acpi/fan_attr.c
··· 22 22 int count; 23 23 24 24 if (fps->control == 0xFFFFFFFF || fps->control > 100) 25 - count = scnprintf(buf, PAGE_SIZE, "not-defined:"); 25 + count = sysfs_emit(buf, "not-defined:"); 26 26 else 27 - count = scnprintf(buf, PAGE_SIZE, "%lld:", fps->control); 27 + count = sysfs_emit(buf, "%lld:", fps->control); 28 28 29 29 if (fps->trip_point == 0xFFFFFFFF || fps->trip_point > 9) 30 30 count += sysfs_emit_at(buf, count, "not-defined:"); ··· 59 59 if (status) 60 60 return status; 61 61 62 - return sprintf(buf, "%lld\n", fst.speed); 62 + return sysfs_emit(buf, "%lld\n", fst.speed); 63 63 } 64 64 65 65 static ssize_t show_fine_grain_control(struct device *dev, struct device_attribute *attr, char *buf) ··· 67 67 struct acpi_device *acpi_dev = container_of(dev, struct acpi_device, dev); 68 68 struct acpi_fan *fan = acpi_driver_data(acpi_dev); 69 69 70 - return sprintf(buf, "%d\n", fan->fif.fine_grain_ctrl); 70 + return sysfs_emit(buf, "%d\n", fan->fif.fine_grain_ctrl); 71 71 } 72 72 73 73 int acpi_fan_create_attributes(struct acpi_device *device)
+1 -1
drivers/acpi/fan_core.c
··· 102 102 break; 103 103 } 104 104 if (i == fan->fps_count) { 105 - dev_dbg(&device->dev, "Invalid control value returned\n"); 105 + dev_dbg(&device->dev, "No matching fps control value\n"); 106 106 return -EINVAL; 107 107 } 108 108
+48 -15
drivers/acpi/pfr_update.c
··· 127 127 pfru_dev->rev_id, 128 128 PFRU_FUNC_QUERY_UPDATE_CAP, 129 129 NULL, ACPI_TYPE_PACKAGE); 130 - if (!out_obj) 130 + if (!out_obj) { 131 + dev_dbg(pfru_dev->parent_dev, 132 + "Query cap failed with no object\n"); 131 133 return ret; 134 + } 132 135 133 136 if (out_obj->package.count < CAP_NR_IDX || 134 137 out_obj->package.elements[CAP_STATUS_IDX].type != ACPI_TYPE_INTEGER || ··· 144 141 out_obj->package.elements[CAP_DRV_SVN_IDX].type != ACPI_TYPE_INTEGER || 145 142 out_obj->package.elements[CAP_PLAT_ID_IDX].type != ACPI_TYPE_BUFFER || 146 143 out_obj->package.elements[CAP_OEM_ID_IDX].type != ACPI_TYPE_BUFFER || 147 - out_obj->package.elements[CAP_OEM_INFO_IDX].type != ACPI_TYPE_BUFFER) 144 + out_obj->package.elements[CAP_OEM_INFO_IDX].type != ACPI_TYPE_BUFFER) { 145 + dev_dbg(pfru_dev->parent_dev, 146 + "Query cap failed with invalid package count/type\n"); 148 147 goto free_acpi_buffer; 148 + } 149 149 150 150 cap_hdr->status = out_obj->package.elements[CAP_STATUS_IDX].integer.value; 151 151 if (cap_hdr->status != DSM_SUCCEED) { 152 152 ret = -EBUSY; 153 - dev_dbg(pfru_dev->parent_dev, "Error Status:%d\n", cap_hdr->status); 153 + dev_dbg(pfru_dev->parent_dev, "Query cap Error Status:%d\n", 154 + cap_hdr->status); 154 155 goto free_acpi_buffer; 155 156 } 156 157 ··· 200 193 out_obj = acpi_evaluate_dsm_typed(handle, &pfru_guid, 201 194 pfru_dev->rev_id, PFRU_FUNC_QUERY_BUF, 202 195 NULL, ACPI_TYPE_PACKAGE); 203 - if (!out_obj) 196 + if (!out_obj) { 197 + dev_dbg(pfru_dev->parent_dev, 198 + "Query buf failed with no object\n"); 204 199 return ret; 200 + } 205 201 206 202 if (out_obj->package.count < BUF_NR_IDX || 207 203 out_obj->package.elements[BUF_STATUS_IDX].type != ACPI_TYPE_INTEGER || 208 204 out_obj->package.elements[BUF_EXT_STATUS_IDX].type != ACPI_TYPE_INTEGER || 209 205 out_obj->package.elements[BUF_ADDR_LOW_IDX].type != ACPI_TYPE_INTEGER || 210 206 out_obj->package.elements[BUF_ADDR_HI_IDX].type != ACPI_TYPE_INTEGER || 211 - out_obj->package.elements[BUF_SIZE_IDX].type != ACPI_TYPE_INTEGER) 207 + out_obj->package.elements[BUF_SIZE_IDX].type != ACPI_TYPE_INTEGER) { 208 + dev_dbg(pfru_dev->parent_dev, 209 + "Query buf failed with invalid package count/type\n"); 212 210 goto free_acpi_buffer; 211 + } 213 212 214 213 info->status = out_obj->package.elements[BUF_STATUS_IDX].integer.value; 215 214 info->ext_status = 216 215 out_obj->package.elements[BUF_EXT_STATUS_IDX].integer.value; 217 216 if (info->status != DSM_SUCCEED) { 218 217 ret = -EBUSY; 219 - dev_dbg(pfru_dev->parent_dev, "Error Status:%d\n", info->status); 220 - dev_dbg(pfru_dev->parent_dev, "Error Extended Status:%d\n", info->ext_status); 218 + dev_dbg(pfru_dev->parent_dev, 219 + "Query buf failed with Error Status:%d\n", info->status); 220 + dev_dbg(pfru_dev->parent_dev, 221 + "Query buf failed with Error Extended Status:%d\n", info->ext_status); 221 222 222 223 goto free_acpi_buffer; 223 224 } ··· 310 295 m_img_hdr = data + size; 311 296 312 297 type = get_image_type(m_img_hdr, pfru_dev); 313 - if (type < 0) 298 + if (type < 0) { 299 + dev_dbg(pfru_dev->parent_dev, "Invalid image type\n"); 314 300 return false; 301 + } 315 302 316 303 size = adjust_efi_size(m_img_hdr, size); 317 - if (size < 0) 304 + if (size < 0) { 305 + dev_dbg(pfru_dev->parent_dev, "Invalid image size\n"); 318 306 return false; 307 + } 319 308 320 309 auth = data + size; 321 310 size += sizeof(u64) + auth->auth_info.hdr.len; ··· 365 346 out_obj = acpi_evaluate_dsm_typed(handle, &pfru_guid, 366 347 pfru_dev->rev_id, PFRU_FUNC_START, 367 348 &in_obj, ACPI_TYPE_PACKAGE); 368 - if (!out_obj) 349 + if (!out_obj) { 350 + dev_dbg(pfru_dev->parent_dev, 351 + "Update failed to start with no object\n"); 369 352 return ret; 353 + } 370 354 371 355 if (out_obj->package.count < UPDATE_NR_IDX || 372 356 out_obj->package.elements[UPDATE_STATUS_IDX].type != ACPI_TYPE_INTEGER || ··· 377 355 out_obj->package.elements[UPDATE_AUTH_TIME_LOW_IDX].type != ACPI_TYPE_INTEGER || 378 356 out_obj->package.elements[UPDATE_AUTH_TIME_HI_IDX].type != ACPI_TYPE_INTEGER || 379 357 out_obj->package.elements[UPDATE_EXEC_TIME_LOW_IDX].type != ACPI_TYPE_INTEGER || 380 - out_obj->package.elements[UPDATE_EXEC_TIME_HI_IDX].type != ACPI_TYPE_INTEGER) 358 + out_obj->package.elements[UPDATE_EXEC_TIME_HI_IDX].type != ACPI_TYPE_INTEGER) { 359 + dev_dbg(pfru_dev->parent_dev, 360 + "Update failed with invalid package count/type\n"); 381 361 goto free_acpi_buffer; 362 + } 382 363 383 364 update_result.status = 384 365 out_obj->package.elements[UPDATE_STATUS_IDX].integer.value; ··· 390 365 391 366 if (update_result.status != DSM_SUCCEED) { 392 367 ret = -EBUSY; 393 - dev_dbg(pfru_dev->parent_dev, "Error Status:%d\n", update_result.status); 394 - dev_dbg(pfru_dev->parent_dev, "Error Extended Status:%d\n", 368 + dev_dbg(pfru_dev->parent_dev, 369 + "Update failed with Error Status:%d\n", update_result.status); 370 + dev_dbg(pfru_dev->parent_dev, 371 + "Update failed with Error Extended Status:%d\n", 395 372 update_result.ext_status); 396 373 397 374 goto free_acpi_buffer; ··· 477 450 if (ret) 478 451 return ret; 479 452 480 - if (len > buf_info.buf_size) 453 + if (len > buf_info.buf_size) { 454 + dev_dbg(pfru_dev->parent_dev, "Capsule image size too large\n"); 481 455 return -EINVAL; 456 + } 482 457 483 458 iov.iov_base = (void __user *)buf; 484 459 iov.iov_len = len; ··· 489 460 /* map the communication buffer */ 490 461 phy_addr = (phys_addr_t)((buf_info.addr_hi << 32) | buf_info.addr_lo); 491 462 buf_ptr = memremap(phy_addr, buf_info.buf_size, MEMREMAP_WB); 492 - if (!buf_ptr) 463 + if (!buf_ptr) { 464 + dev_dbg(pfru_dev->parent_dev, "Failed to remap the buffer\n"); 493 465 return -ENOMEM; 466 + } 494 467 495 468 if (!copy_from_iter_full(buf_ptr, len, &iter)) { 469 + dev_dbg(pfru_dev->parent_dev, 470 + "Failed to copy the data from the user space buffer\n"); 496 471 ret = -EINVAL; 497 472 goto unmap; 498 473 }
+24 -2
drivers/acpi/prmt.c
··· 85 85 } 86 86 } 87 87 88 - pr_warn("Failed to find VA for GUID: %pUL, PA: 0x%llx", guid, pa); 89 - 90 88 return 0; 91 89 } 92 90 ··· 152 154 guid_copy(&th->guid, (guid_t *)handler_info->handler_guid); 153 155 th->handler_addr = 154 156 (void *)efi_pa_va_lookup(&th->guid, handler_info->handler_address); 157 + /* 158 + * Print a warning message if handler_addr is zero which is not expected to 159 + * ever happen. 160 + */ 161 + if (unlikely(!th->handler_addr)) 162 + pr_warn("Failed to find VA of handler for GUID: %pUL, PA: 0x%llx", 163 + &th->guid, handler_info->handler_address); 155 164 156 165 th->static_data_buffer_addr = 157 166 efi_pa_va_lookup(&th->guid, handler_info->static_data_buffer_address); 167 + /* 168 + * According to the PRM specification, static_data_buffer_address can be zero, 169 + * so avoid printing a warning message in that case. Otherwise, if the 170 + * return value of efi_pa_va_lookup() is zero, print the message. 171 + */ 172 + if (unlikely(!th->static_data_buffer_addr && handler_info->static_data_buffer_address)) 173 + pr_warn("Failed to find VA of static data buffer for GUID: %pUL, PA: 0x%llx", 174 + &th->guid, handler_info->static_data_buffer_address); 158 175 159 176 th->acpi_param_buffer_addr = 160 177 efi_pa_va_lookup(&th->guid, handler_info->acpi_param_buffer_address); 178 + 179 + /* 180 + * According to the PRM specification, acpi_param_buffer_address can be zero, 181 + * so avoid printing a warning message in that case. Otherwise, if the 182 + * return value of efi_pa_va_lookup() is zero, print the message. 183 + */ 184 + if (unlikely(!th->acpi_param_buffer_addr && handler_info->acpi_param_buffer_address)) 185 + pr_warn("Failed to find VA of acpi param buffer for GUID: %pUL, PA: 0x%llx", 186 + &th->guid, handler_info->acpi_param_buffer_address); 161 187 162 188 } while (++cur_handler < tm->handler_count && (handler_info = get_next_handler(handler_info))); 163 189
-3
drivers/acpi/x86/lpss.c
··· 387 387 { "INT3435", LPSS_ADDR(lpt_uart_dev_desc) }, 388 388 { "INT3436", LPSS_ADDR(lpt_sdio_dev_desc) }, 389 389 390 - /* Wildcat Point LPSS devices */ 391 - { "INT3438", LPSS_ADDR(lpt_spi_dev_desc) }, 392 - 393 390 { } 394 391 }; 395 392
+1
drivers/thermal/intel/int340x_thermal/int3400_thermal.c
··· 690 690 {"INTC1068", 0}, 691 691 {"INTC10A0", 0}, 692 692 {"INTC10D4", 0}, 693 + {"INTC10FC", 0}, 693 694 {} 694 695 }; 695 696
+1
drivers/thermal/intel/int340x_thermal/int3403_thermal.c
··· 276 276 {"INTC1069", 0}, 277 277 {"INTC10A1", 0}, 278 278 {"INTC10D5", 0}, 279 + {"INTC10FD", 0}, 279 280 {"", 0}, 280 281 }; 281 282 MODULE_DEVICE_TABLE(acpi, int3403_device_ids);