Fighting for the power.

M. Warner Losh imp at bsdimp.com
Fri May 8 13:10:39 UTC 2009


In message: <3a142e750905080334qb62dcb5hcd07ce028a4ff035 at mail.gmail.com>
            "Paul B. Mahol" <onemda at gmail.com> writes:
: On 5/7/09, M. Warner Losh <imp at bsdimp.com> wrote:
: > In message: <3a142e750905040240g58152e69p6fcb797a5e026426 at mail.gmail.com>
: >             "Paul B. Mahol" <onemda at gmail.com> writes:
: > : On 5/4/09, Alexander Motin <mav at freebsd.org> wrote:
: > : > 2. PCI devices
: > : > PCI bus provides method to control device power. For example, I have
: > : > completely no use for my FireWire controller and most of time - EHCI USB
: > : > controller. Disabling them allows me to save about 3W of power. To
: > : > disable all unneeded PCI devices you should build kernel without their
: > : > drivers and add to loader.conf:
: > : > hw.pci.do_power_nodriver=3
: > : > To enable devices back all you need to do is just load their drivers as
: > : > modules.
: > :
: > : Unloading modules doesnt put them back into into D3 state.
: > : You are forced to load some another module again to put wanted device
: > : into D3 state.
: >
: > It should.  If it isn't, that's a bug.
: 
: It's a bug.
: 
: On machine resume(pci_resume), pci_cfg_restore() is called causing D3 -> D0 for
: all devices(including not attached ones).
: Unloading module/detaching device doesn't call pci_cfg_save.
: 
: Should device_detach routine be used or new one like
: pci_driver_removed() implemented?

No.  device_detach shouldn't be used for this.  This should happen all
in the PCI bus code when do_power_nodriver is > 0.

Warner



More information about the freebsd-mobile mailing list