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

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'acpi-6.12-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm

Pull ACPI fixes from Rafael Wysocki:
"These fix an ACPI PRM (Platform Runtime Mechanism) issue and add two
new DMI quirks, one for an ACPI IRQ override and one for lid switch
detection:

- Make acpi_parse_prmt() look for EFI_MEMORY_RUNTIME memory regions
only to comply with the UEFI specification and make PRM use
efi_guid_t instead of guid_t to avoid a compiler warning triggered
by that change (Koba Ko, Dan Carpenter)

- Add an ACPI IRQ override quirk for LG 16T90SP (Christian Heusel)

- Add a lid switch detection quirk for Samsung Galaxy Book2 (Shubham
Panwar)"

* tag 'acpi-6.12-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
ACPI: PRM: Clean up guid type in struct prm_handler_info
ACPI: button: Add DMI quirk for Samsung Galaxy Book2 to fix initial lid detection issue
ACPI: resource: Add LG 16T90SP to irq1_level_low_skip_override[]
ACPI: PRM: Find EFI_MEMORY_RUNTIME block for PRM handler and context

+41 -6
+11
drivers/acpi/button.c
··· 130 130 }, 131 131 .driver_data = (void *)(long)ACPI_BUTTON_LID_INIT_OPEN, 132 132 }, 133 + { 134 + /* 135 + * Samsung galaxybook2 ,initial _LID device notification returns 136 + * lid closed. 137 + */ 138 + .matches = { 139 + DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."), 140 + DMI_MATCH(DMI_PRODUCT_NAME, "750XED"), 141 + }, 142 + .driver_data = (void *)(long)ACPI_BUTTON_LID_INIT_OPEN, 143 + }, 133 144 {} 134 145 }; 135 146
+23 -6
drivers/acpi/prmt.c
··· 52 52 static LIST_HEAD(prm_module_list); 53 53 54 54 struct prm_handler_info { 55 - guid_t guid; 55 + efi_guid_t guid; 56 56 efi_status_t (__efiapi *handler_addr)(u64, void *); 57 57 u64 static_data_buffer_addr; 58 58 u64 acpi_param_buffer_addr; ··· 72 72 struct prm_handler_info handlers[] __counted_by(handler_count); 73 73 }; 74 74 75 - static u64 efi_pa_va_lookup(u64 pa) 75 + static u64 efi_pa_va_lookup(efi_guid_t *guid, u64 pa) 76 76 { 77 77 efi_memory_desc_t *md; 78 78 u64 pa_offset = pa & ~PAGE_MASK; 79 79 u64 page = pa & PAGE_MASK; 80 80 81 81 for_each_efi_memory_desc(md) { 82 - if (md->phys_addr < pa && pa < md->phys_addr + PAGE_SIZE * md->num_pages) 82 + if ((md->attribute & EFI_MEMORY_RUNTIME) && 83 + (md->phys_addr < pa && pa < md->phys_addr + PAGE_SIZE * md->num_pages)) { 83 84 return pa_offset + md->virt_addr + page - md->phys_addr; 85 + } 84 86 } 87 + 88 + pr_warn("Failed to find VA for GUID: %pUL, PA: 0x%llx", guid, pa); 85 89 86 90 return 0; 87 91 } ··· 152 148 th = &tm->handlers[cur_handler]; 153 149 154 150 guid_copy(&th->guid, (guid_t *)handler_info->handler_guid); 155 - th->handler_addr = (void *)efi_pa_va_lookup(handler_info->handler_address); 156 - th->static_data_buffer_addr = efi_pa_va_lookup(handler_info->static_data_buffer_address); 157 - th->acpi_param_buffer_addr = efi_pa_va_lookup(handler_info->acpi_param_buffer_address); 151 + th->handler_addr = 152 + (void *)efi_pa_va_lookup(&th->guid, handler_info->handler_address); 153 + 154 + th->static_data_buffer_addr = 155 + efi_pa_va_lookup(&th->guid, handler_info->static_data_buffer_address); 156 + 157 + th->acpi_param_buffer_addr = 158 + efi_pa_va_lookup(&th->guid, handler_info->acpi_param_buffer_address); 159 + 158 160 } while (++cur_handler < tm->handler_count && (handler_info = get_next_handler(handler_info))); 159 161 160 162 return 0; ··· 286 276 module = find_prm_module(&buffer->handler_guid); 287 277 if (!handler || !module) 288 278 goto invalid_guid; 279 + 280 + if (!handler->handler_addr || 281 + !handler->static_data_buffer_addr || 282 + !handler->acpi_param_buffer_addr) { 283 + buffer->prm_status = PRM_HANDLER_ERROR; 284 + return AE_OK; 285 + } 289 286 290 287 ACPI_COPY_NAMESEG(context.signature, "PRMC"); 291 288 context.revision = 0x0;
+7
drivers/acpi/resource.c
··· 503 503 DMI_MATCH(DMI_BOARD_NAME, "17U70P"), 504 504 }, 505 505 }, 506 + { 507 + /* LG Electronics 16T90SP */ 508 + .matches = { 509 + DMI_MATCH(DMI_SYS_VENDOR, "LG Electronics"), 510 + DMI_MATCH(DMI_BOARD_NAME, "16T90SP"), 511 + }, 512 + }, 506 513 { } 507 514 }; 508 515