Page MenuHomeFreeBSD

acpi_powerres: Fix turning off power resources on first D-state switch
Needs ReviewPublic

Authored by obiwac_gmail.com on Wed, Jan 8, 11:12 PM.
Tags
None
Referenced Files
Unknown Object (File)
Thu, Jan 23, 3:57 AM
Unknown Object (File)
Wed, Jan 22, 2:07 PM
Unknown Object (File)
Wed, Jan 22, 2:07 PM
Unknown Object (File)
Wed, Jan 22, 2:29 AM
Unknown Object (File)
Fri, Jan 17, 1:24 PM
Unknown Object (File)
Thu, Jan 16, 5:26 PM
Unknown Object (File)
Mon, Jan 13, 7:44 PM
Unknown Object (File)
Sun, Jan 12, 9:16 PM
Subscribers

Details

Summary

The power resource dependencies for each _PRx object are discovered and cached in ac_prx on the power consumer struct (struct acpi_powerconsumer) when a power consumer is registered. This is done in acpi_pwr_get_power_resources. ACPI guarantees these _PRx objects will evaluate to the same thing each time they are called.

This discovery process also registers those power resources, which were previously only registered when they were referenced by the relevant _PRx object for the target D-state when switching. This meant that the first D-state switch for a power consumer would not turn off any power resources as they wouldn't have been registered yet. This revision fixes this.

ac_prx will be used by subsequent patches.

This was split out from D48294.

Sponsored by: The FreeBSD Foundation

Test Plan

I have tested this on the Framework 13 AMD Ryzen 7040 series. All devices are able to suspend/resume fine.

I don't know if this will make a significant difference, but since devices will now go into D3cold (the power resources under _PR3 wouldn't be turned off previously, which is needed for D3cold), this might make suspended devices use less power (devctl suspend/resume <device>).

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Skipped
Unit
Tests Skipped
Build Status
Buildable 61586
Build 58470: arc lint + arc unit