tree 7f234fae798b6a5a14ef2c78d03fd9ee46bdc19d
parent 991053178e08fb4d1f80398367db05c2cc4f20b4
parent c87072064bd482930a021e88c11f438e780d36de
author Linus Torvalds <torvalds@linux-foundation.org> 1759361090 -0700
committer Linus Torvalds <torvalds@linux-foundation.org> 1759361090 -0700
mergetag object c87072064bd482930a021e88c11f438e780d36de
 type commit
 tag acpi-6.18-rc1
 tagger Rafael J. Wysocki <rjw@rjwysocki.net> 1759154033 +0200
 
 ACPI updates for 6.18-rc1
 
  - Add SoundWire File Table (SWFT) signature to ACPICA (Maciej Strozek)
 
  - Rearrange local variable definition involving #ifdef in ACPICA to
    avoid using uninitialized variables (Zhe Qiao)
 
  - Allow ACPICA to skip Global Lock initialization (Huacai Chen)
 
  - Apply ACPI_NONSTRING in more places in ACPICA and fix two regressions
    related to incorrect ACPI_NONSTRING usage (Ahmed Salem)
 
  - Fix printing CDAT table header when dissasebling CDAT AML (Ahmed
    Salem)
 
  - Use acpi_ds_clear_operands() in acpi_ds_call_control_method() in
    ACPICA (Hans de Goede)
 
  - Update dsmethod.c in ACPICA to address unused variable warning (Saket
    Dumbre)
 
  - Print error messages in ACPICA for too few or too many control method
    arguments (Saket Dumbre)
 
  - Update ACPICA version to 20250807 (Saket Dumbre)
 
  - Fix largest possible resource descriptor index in ACPICA (Dmitry
    Antipov)
 
  - Add Back-Invalidate restriction to CXL Window for CEDT in ACPICA
    (Davidlohr Bueso).
 
  - Add the package type to acceptable Arg3 types for _DSM in ACPICA
    because ACPI_TYPE_ANY does not cover it (Saket Dumbre)
 
  - Fix return values in ap_is_valid_checksum() in the acpidump utility
    in ACPICA (Kaushlendra Kumar)
 
  - Add Intel CVS ACPI HIDs to acpi_ignore_dep_ids[] so it is not
    regarded as real dependency (Hans de Goede)
 
  - Use ACPI_FREE() for freeing an ACPI object in description_show() in
    the ACPI sysfs-related code (Kaushlendra Kumar)
 
  - Fix memory leak in the ACPI processor idle driver registration error
    code path and optimize ACPI idle driver registration (Huisong Li,
    Rafael Wysocki)
 
  - Add module import namespace to the ACPI processor idle driver (Rafael
    Wysocki)
 
  - Eliminate static variable flat_state_cnt from the ACPI processor idle
    driver (Rafael Wysocki)
 
  - Release cpufreq policy references using __free() in the ACPI
    processor thremal driver (Zihuan Zhang)
 
  - Remove unused empty stubs of some functions and rearrange function
    declarations in a header file in the ACPI processor driver (Huisong
    Li)
 
  - Redefine two functions as void in the ACPI processor driver (Rafael
    Wysocki)
 
  - Stop exposing global variable acpi_idle_driver in the ACPI processor
    driver (Huisong Li)
 
  - Fix ACPI buffer properties extraction for data-only subnodes
    represented as _DSD-equivalent packages (Rafael Wysocki)
 
  - Fix handling of ACPI data-only subnodes represented as _DSD-equivalent
    packages in the case when they are embedded in larger _DSD-equivalent
    packages and clean up acpi_nondev_subnode_extract() (Rafael Wysocki)
 
  - Skip ACPI IRQ override on ASUS Vivobook Pro N6506CU (Sam van Kampen)
 
  - Add power resource init function and use it for introducing an HP
    EliteBook 855 G7 WWAN modem power resource quirk (Maciej Szmigiero)
 
  - Add support for DBG2 RISC-V SBI port subtype and Precise Baud Rate
    field to the ACPI SPCR table parser (Chen Pei)
 
  - Eliminate a dummy local variable from the ACPI thermal driver (Rafael
    Wysocki)
 
  - Fold two simple functions into their only caller in the ACPI fan
    driver (Rafael Wysocki)
 
  - Force native backlight on Lenovo 82K8 in the ACPI backlight (video)
    driver (Mario Limonciello)
 
  - Add missing sysfs_remove_group() for ACPI_TAD_RT (Daniel Tang)
 
  - Skip PRM handlers with NULL handler_address or NULL VA in the ACPI
    PRM driver (Shang song)
 
  - Remove redundant assignments in erst_dbg_{ioctl|write}() in the ACPI
    APEI driver (Thorsten Blum)
 
  - Allow the ACPI APEI EINJ to handle more types of addresses than just
    MMIO (Jiaqi Yan)
 
  - Use str_low_high() helper in two places in the ACPI code (Chelsy
    Ratnawat)
 
  - Use str_plural() to simplify the PNP code (Xichao Zhao)
 
  - Fix signedness issues in read/write helpers in the ACPI AML debugger
    interface (Amir Mohammad)
 -----BEGIN PGP SIGNATURE-----
 
 iQFGBAABCAAwFiEEcM8Aw/RY0dgsiRUR7l+9nS/U47UFAmjaj3ESHHJqd0Byand5
 c29ja2kubmV0AAoJEO5fvZ0v1OO1mKgH/A5eTwqfiQFvkhgQU/mP9v8Y0yV8p0qE
 W6xtzixsplk2bpV6IPcG8KA13EZMDGwkU+5xq2Jpsi/tipV58eyWv/i7TNaWNasM
 QaX7mVik/QOw2hb6Jdef2RdgJOwj1J6UimR+i58HNX0hlBTPsMyqY0yHf6gXDzNM
 CzS/A9kJUSvpCHav2tPoCr19ZLm+2GbgLoomGlqaM/Mxb6VyD7WnDeUYY2hOeZ4q
 pFabFcEMjB7SOHv5sDLCKzy/r9+AspM9GVRgLKiJkMv/DQ4YWJd4ZRarFQWD48ff
 sMX/DEg4M+YsaGCyHKLujloDpMnmg3MQYdvtmaf/Anf4VM/fkZPDkCY=
 =YK1m
 -----END PGP SIGNATURE-----

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

Pull ACPI updates from Rafael Wysocki:
 "These include an ACPICA update (upstream revision 20250807 with a few
  fixes on top), fixes and cleanups of the ACPI processor driver, fixes
  and cleanups of the ACPI properties management code, one more ACPI IRQ
  resource management quirk, one more ACPI backlight quirk, an ACPI
  device enumeration quirk related to _DEP, a power resource quirk
  related to WWAN modem for HP EliteBook 855 G7, ACPI SPCR table parser
  extensions, an ACPI APEI EINJ driver update allowing it to handle more
  address types, and several assorted cleanups of ACPI drivers and PNP
  code.

  Specifics:

   - Add SoundWire File Table (SWFT) signature to ACPICA (Maciej
     Strozek)

   - Rearrange local variable definition involving #ifdef in ACPICA to
     avoid using uninitialized variables (Zhe Qiao)

   - Allow ACPICA to skip Global Lock initialization (Huacai Chen)

   - Apply ACPI_NONSTRING in more places in ACPICA and fix two
     regressions related to incorrect ACPI_NONSTRING usage (Ahmed Salem)

   - Fix printing CDAT table header when dissasebling CDAT AML (Ahmed
     Salem)

   - Use acpi_ds_clear_operands() in acpi_ds_call_control_method() in
     ACPICA (Hans de Goede)

   - Update dsmethod.c in ACPICA to address unused variable warning
     (Saket Dumbre)

   - Print error messages in ACPICA for too few or too many control
     method arguments (Saket Dumbre)

   - Update ACPICA version to 20250807 (Saket Dumbre)

   - Fix largest possible resource descriptor index in ACPICA (Dmitry
     Antipov)

   - Add Back-Invalidate restriction to CXL Window for CEDT in ACPICA
     (Davidlohr Bueso)

   - Add the package type to acceptable Arg3 types for _DSM in ACPICA
     because ACPI_TYPE_ANY does not cover it (Saket Dumbre)

   - Fix return values in ap_is_valid_checksum() in the acpidump utility
     in ACPICA (Kaushlendra Kumar)

   - Add Intel CVS ACPI HIDs to acpi_ignore_dep_ids[] so it is not
     regarded as real dependency (Hans de Goede)

   - Use ACPI_FREE() for freeing an ACPI object in description_show() in
     the ACPI sysfs-related code (Kaushlendra Kumar)

   - Fix memory leak in the ACPI processor idle driver registration
     error code path and optimize ACPI idle driver registration (Huisong
     Li, Rafael Wysocki)

   - Add module import namespace to the ACPI processor idle driver
     (Rafael Wysocki)

   - Eliminate static variable flat_state_cnt from the ACPI processor
     idle driver (Rafael Wysocki)

   - Release cpufreq policy references using __free() in the ACPI
     processor thremal driver (Zihuan Zhang)

   - Remove unused empty stubs of some functions and rearrange function
     declarations in a header file in the ACPI processor driver (Huisong
     Li)

   - Redefine two functions as void in the ACPI processor driver (Rafael
     Wysocki)

   - Stop exposing global variable acpi_idle_driver in the ACPI
     processor driver (Huisong Li)

   - Fix ACPI buffer properties extraction for data-only subnodes
     represented as _DSD-equivalent packages (Rafael Wysocki)

   - Fix handling of ACPI data-only subnodes represented as
     _DSD-equivalent packages in the case when they are embedded in
     larger _DSD-equivalent packages and clean up
     acpi_nondev_subnode_extract() (Rafael Wysocki)

   - Skip ACPI IRQ override on ASUS Vivobook Pro N6506CU (Sam van
     Kampen)

   - Add power resource init function and use it for introducing an HP
     EliteBook 855 G7 WWAN modem power resource quirk (Maciej Szmigiero)

   - Add support for DBG2 RISC-V SBI port subtype and Precise Baud Rate
     field to the ACPI SPCR table parser (Chen Pei)

   - Eliminate a dummy local variable from the ACPI thermal driver
     (Rafael Wysocki)

   - Fold two simple functions into their only caller in the ACPI fan
     driver (Rafael Wysocki)

   - Force native backlight on Lenovo 82K8 in the ACPI backlight (video)
     driver (Mario Limonciello)

   - Add missing sysfs_remove_group() for ACPI_TAD_RT (Daniel Tang)

   - Skip PRM handlers with NULL handler_address or NULL VA in the ACPI
     PRM driver (Shang song)

   - Remove redundant assignments in erst_dbg_{ioctl|write}() in the
     ACPI APEI driver (Thorsten Blum)

   - Allow the ACPI APEI EINJ to handle more types of addresses than
     just MMIO (Jiaqi Yan)

   - Use str_low_high() helper in two places in the ACPI code (Chelsy
     Ratnawat)

   - Use str_plural() to simplify the PNP code (Xichao Zhao)

   - Fix signedness issues in read/write helpers in the ACPI AML
     debugger interface (Amir Mohammad)"

* tag 'acpi-6.18-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: (50 commits)
  ACPI: debug: fix signedness issues in read/write helpers
  ACPI: processor: Do not expose global variable acpi_idle_driver
  ACPI: SPCR: Support Precise Baud Rate field
  ACPI: processor: idle: Redefine two functions as void
  ACPI: processor: Update cpuidle driver check in __acpi_processor_start()
  ACPI: processor: idle: Rearrange declarations in header file
  ACPI: processor: Remove unused empty stubs of some functions
  ACPI: property: Adjust failure handling in acpi_nondev_subnode_extract()
  ACPI: property: Do not pass NULL handles to acpi_attach_data()
  ACPI: property: Add code comments explaining what is going on
  ACPI: property: Disregard references in data-only subnode lists
  ACPI: property: Fix buffer properties extraction for subnodes
  ACPI: SPCR: Add support for DBG2 RISC-V SBI port subtype
  ACPI: APEI: EINJ: Allow more types of addresses except MMIO
  ACPI: APEI: Remove redundant assignments in erst_dbg_{ioctl|write}()
  ACPICA: acpidump: fix return values in ap_is_valid_checksum()
  ACPICA: ACPI_TYPE_ANY does not include the package type
  ACPICA: CEDT: Add Back-Invalidate restriction to CXL Window
  ACPICA: Fix largest possible resource descriptor index
  ACPICA: Update version to 20250807
  ...
