Re: [linux-pm] Adapt drivers to type-safe pci

From: Pavel Machek
Date: Fri Nov 12 2004 - 10:41:55 EST


Hi!

> > This adapts few drivers to type-safe pci powermanagment. I introduced
> > device_to_pci_state helper that will be usefull to few drivers... Does
> > it look okay?
>
> I'd rather have something like the attached patch.
> Fixed policy mappings are generically broken; what
> about devices that don't support PCI_D2?

Point taken, this function is probably too big to be in header.

> This should I guess use the new "pci_power_t", but
> I'm not that current yet.

I'd still like this function to return suitable state (and do nothing
else), to make converting drivers easier.

For now suspend() only gets 0 or 3; I'd rather not change code for
now. Do we really enter PCI_D1 on standby? I believe PCI transitions
are fast enough to enter PCI_D3hot even for standby / suspend-to-ram.

Pavel

> +void
> +pci_choose_state(struct pci_dev *pdev, suspend_state_t sleepstate)
> +{
> + int pm, state;
> + u16 pmc;
> +
> + /* nothing to do for legacy PCI devices */
> + pm = pci_find_capability(pdev, PCI_CAP_ID_PM);
> + if (!pm)
> + return;
> +
> + /* map to a PCI PM state this device supports
> + * FIXME ACPI may know what states to use; we should probably
> + * prefer that policy to this one.
> + */
> + state = 3;
> + switch (sleepstate) {
> + case PM_SUSPEND_ON:
> + state = 0;
> + break;
> + case PM_SUSPEND_STANDBY:
> + case PM_SUSPEND_MEM:
> + pci_read_config_word(pdev, pm + PCI_PM_PMC, &pmc);
> + if (sleepstate == PM_SUSPEND_STANDBY
> + && (pmc & PCI_PM_CAP_D1) != 0)
> + state = 1;
> + else if ((pmc & PCI_PM_CAP_D2) != 0)
> + state = 2;
> + break;
> + }
> +
> + /* maybe go to a deeper power state */
> + if (pdev->current_state < state)
> + pci_set_power_state(pdev, state);
> +}
> +EXPORT_SYMBOL(pci_choose_state);
>
> /**
> * pci_save_state - save the PCI configuration space of a device before suspending


--
People were complaining that M$ turns users into beta-testers...
...jr ghea gurz vagb qrirybcref, naq gurl frrz gb yvxr vg gung jnl!
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/