Pull power management and ACPI fixes from Rafael Wysocki: "These are: a fix for a recently introduced false-positive warnings about PM domain pointers being changed inappropriately (harmless but annoying), an MCH size workaround quirk for one more platform, a compiler warning fix (generic power domains framework), an ACPI LPSS (Intel SoCs) driver fixup and a cleanup of the ACPI CPPC core code. Specifics: - PM core fix to avoid false-positive warnings generated when the pm_domain field is cleared for a device that appears to be bound to a driver (Rafael Wysocki). - New MCH size workaround quirk for Intel Haswell-ULT (Josh Boyer). - Fix for an "unused function" compiler warning in the generic power domains framework (Ulf Hansson). - Fixup for the ACPI driver for Intel SoCs (acpi-lpss) to set the PM domain pointer of a device properly in one place that was overlooked by a recent PM core update (Andy Shevchenko). - Removal of a redundant function declaration in the ACPI CPPC core code (Timur Tabi)" * tag 'pm+acpi-4.5-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: PM: Avoid false-positive warnings in dev_pm_domain_set() PM / Domains: Silence compiler warning for an unused function ACPI / CPPC: remove redundant mbox_send_message() declaration ACPI / LPSS: set PM domain via helper setter PNP: Add Haswell-ULT to Intel MCH size workaround
Unified · Split
| @@ -880,7 +880,7 @@ static int acpi_lpss_platform_notify(struct notifier_block *nb, · 879 unmodified lines | |||
| 880 | break; | 880 | break; |
| 881 | case BUS_NOTIFY_DRIVER_NOT_BOUND: | 881 | case BUS_NOTIFY_DRIVER_NOT_BOUND: |
| 882 | case BUS_NOTIFY_UNBOUND_DRIVER: | 882 | case BUS_NOTIFY_UNBOUND_DRIVER: |
| 883 | pdev->dev.pm_domain = NULL; | 883 | dev_pm_domain_set(&pdev->dev, NULL); |
| 884 | break; | 884 | break; |
| 885 | case BUS_NOTIFY_ADD_DEVICE: | 885 | case BUS_NOTIFY_ADD_DEVICE: |
| 886 | dev_pm_domain_set(&pdev->dev, &acpi_lpss_pm_domain); | 886 | dev_pm_domain_set(&pdev->dev, &acpi_lpss_pm_domain); |
| @@ -146,7 +146,7 @@ void dev_pm_domain_set(struct device *dev, struct dev_pm_domain *pd) · 145 unmodified lines | |||
| 146 | if (dev->pm_domain == pd) | 146 | if (dev->pm_domain == pd) |
| 147 | return; | 147 | return; |
| 148 | 148 | ||
| 149 | WARN(device_is_bound(dev), | 149 | WARN(pd && device_is_bound(dev), |
| 150 | "PM domains can only be changed for unbound devices\n"); | 150 | "PM domains can only be changed for unbound devices\n"); |
| 151 | dev->pm_domain = pd; | 151 | dev->pm_domain = pd; |
| 152 | device_pm_check_callbacks(dev); | 152 | device_pm_check_callbacks(dev); |
| @@ -173,14 +173,14 @@ static void genpd_queue_power_off_work(struct generic_pm_domain *genpd) · 172 unmodified lines | |||
| 173 | } | 173 | } |
| 174 | 174 | ||
| 175 | /** | 175 | /** |
| 176 | * __genpd_poweron - Restore power to a given PM domain and its masters. | 176 | * genpd_poweron - Restore power to a given PM domain and its masters. |
| 177 | * @genpd: PM domain to power up. | 177 | * @genpd: PM domain to power up. |
| 178 | * @depth: nesting count for lockdep. | 178 | * @depth: nesting count for lockdep. |
| 179 | * | 179 | * |
| 180 | * Restore power to @genpd and all of its masters so that it is possible to | 180 | * Restore power to @genpd and all of its masters so that it is possible to |
| 181 | * resume a device belonging to it. | 181 | * resume a device belonging to it. |
| 182 | */ | 182 | */ |
| 183 | static int __genpd_poweron(struct generic_pm_domain *genpd, unsigned int depth) | 183 | static int genpd_poweron(struct generic_pm_domain *genpd, unsigned int depth) |
| 184 | { | 184 | { |
| 185 | struct gpd_link *link; | 185 | struct gpd_link *link; |
| 186 | int ret = 0; | 186 | int ret = 0; |
| @@ -200,7 +200,7 @@ static int __genpd_poweron(struct generic_pm_domain *genpd, unsigned int depth) · 13 unmodified lines | |||
| 200 | genpd_sd_counter_inc(master); | 200 | genpd_sd_counter_inc(master); |
| 201 | 201 | ||
| 202 | mutex_lock_nested(&master->lock, depth + 1); | 202 | mutex_lock_nested(&master->lock, depth + 1); |
| 203 | ret = __genpd_poweron(master, depth + 1); | 203 | ret = genpd_poweron(master, depth + 1); |
| 204 | mutex_unlock(&master->lock); | 204 | mutex_unlock(&master->lock); |
| 205 | 205 | ||
| 206 | if (ret) { | 206 | if (ret) { |
| @@ -227,21 +227,6 @@ static int __genpd_poweron(struct generic_pm_domain *genpd, unsigned int depth) · 20 unmodified lines | |||
| 227 | return ret; | 227 | return ret; |
| 228 | } | 228 | } |
| 229 | 229 | ||
| 230 | /** | ||
| 231 | * genpd_poweron - Restore power to a given PM domain and its masters. | ||
| 232 | * @genpd: PM domain to power up. | ||
| 233 | */ | ||
| 234 | static int genpd_poweron(struct generic_pm_domain *genpd) | ||
| 235 | { | ||
| 236 | int ret; | ||
| 237 | |||
| 238 | mutex_lock(&genpd->lock); | ||
| 239 | ret = __genpd_poweron(genpd, 0); | ||
| 240 | mutex_unlock(&genpd->lock); | ||
| 241 | return ret; | ||
| 242 | } | ||
| 243 | |||
| 244 | |||
| 245 | static int genpd_save_dev(struct generic_pm_domain *genpd, struct device *dev) | 230 | static int genpd_save_dev(struct generic_pm_domain *genpd, struct device *dev) |
| 246 | { | 231 | { |
| 247 | return GENPD_DEV_CALLBACK(genpd, int, save_state, dev); | 232 | return GENPD_DEV_CALLBACK(genpd, int, save_state, dev); |
| @@ -489,7 +474,7 @@ static int pm_genpd_runtime_resume(struct device *dev) · 241 unmodified lines | |||
| 489 | } | 474 | } |
| 490 | 475 | ||
| 491 | mutex_lock(&genpd->lock); | 476 | mutex_lock(&genpd->lock); |
| 492 | ret = __genpd_poweron(genpd, 0); | 477 | ret = genpd_poweron(genpd, 0); |
| 493 | mutex_unlock(&genpd->lock); | 478 | mutex_unlock(&genpd->lock); |
| 494 | 479 | ||
| 495 | if (ret) | 480 | if (ret) |
| @@ -1821,8 +1806,10 @@ int genpd_dev_pm_attach(struct device *dev) · 1325 unmodified lines | |||
| 1821 | 1806 | ||
| 1822 | dev->pm_domain->detach = genpd_dev_pm_detach; | 1807 | dev->pm_domain->detach = genpd_dev_pm_detach; |
| 1823 | dev->pm_domain->sync = genpd_dev_pm_sync; | 1808 | dev->pm_domain->sync = genpd_dev_pm_sync; |
| 1824 | ret = genpd_poweron(pd); | ||
| 1825 | 1809 | ||
| 1810 | mutex_lock(&pd->lock); | ||
| 1811 | ret = genpd_poweron(pd, 0); | ||
| 1812 | mutex_unlock(&pd->lock); | ||
| 1826 | out: | 1813 | out: |
| 1827 | return ret ? -EPROBE_DEFER : 0; | 1814 | return ret ? -EPROBE_DEFER : 0; |
| 1828 | } | 1815 | } |
| @@ -342,6 +342,7 @@ static void quirk_amd_mmconfig_area(struct pnp_dev *dev) · 341 unmodified lines | |||
| 342 | /* Device IDs of parts that have 32KB MCH space */ | 342 | /* Device IDs of parts that have 32KB MCH space */ |
| 343 | static const unsigned int mch_quirk_devices[] = { | 343 | static const unsigned int mch_quirk_devices[] = { |
| 344 | 0x0154, /* Ivy Bridge */ | 344 | 0x0154, /* Ivy Bridge */ |
| 345 | 0x0a04, /* Haswell-ULT */ | ||
| 345 | 0x0c00, /* Haswell */ | 346 | 0x0c00, /* Haswell */ |
| 346 | 0x1604, /* Broadwell */ | 347 | 0x1604, /* Broadwell */ |
| 347 | }; | 348 | }; |
| @@ -133,6 +133,5 @@ extern int acpi_get_psd_map(struct cpudata **); · 132 unmodified lines | |||
| 133 | /* Methods to interact with the PCC mailbox controller. */ | 133 | /* Methods to interact with the PCC mailbox controller. */ |
| 134 | extern struct mbox_chan * | 134 | extern struct mbox_chan * |
| 135 | pcc_mbox_request_channel(struct mbox_client *, unsigned int); | 135 | pcc_mbox_request_channel(struct mbox_client *, unsigned int); |
| 136 | extern int mbox_send_message(struct mbox_chan *chan, void *mssg); | ||
| 137 | 136 | ||
| 138 | #endif /* _CPPC_ACPI_H*/ | 137 | #endif /* _CPPC_ACPI_H*/ |