xref: /openbmc/linux/drivers/pci/pci-mid.c (revision d5b0d883)
18cfab3cfSBjorn Helgaas // SPDX-License-Identifier: GPL-2.0
25823d089SAndy Shevchenko /*
35823d089SAndy Shevchenko  * Intel MID platform PM support
45823d089SAndy Shevchenko  *
55823d089SAndy Shevchenko  * Copyright (C) 2016, Intel Corporation
65823d089SAndy Shevchenko  *
75823d089SAndy Shevchenko  * Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
85823d089SAndy Shevchenko  */
95823d089SAndy Shevchenko 
105823d089SAndy Shevchenko #include <linux/init.h>
115823d089SAndy Shevchenko #include <linux/pci.h>
125823d089SAndy Shevchenko 
135823d089SAndy Shevchenko #include <asm/cpu_device_id.h>
145823d089SAndy Shevchenko #include <asm/intel-family.h>
155823d089SAndy Shevchenko #include <asm/intel-mid.h>
165823d089SAndy Shevchenko 
175823d089SAndy Shevchenko #include "pci.h"
185823d089SAndy Shevchenko 
19*d5b0d883SRafael J. Wysocki static bool pci_mid_pm_enabled __read_mostly;
20*d5b0d883SRafael J. Wysocki 
pci_use_mid_pm(void)21*d5b0d883SRafael J. Wysocki bool pci_use_mid_pm(void)
225823d089SAndy Shevchenko {
23*d5b0d883SRafael J. Wysocki 	return pci_mid_pm_enabled;
245823d089SAndy Shevchenko }
255823d089SAndy Shevchenko 
mid_pci_set_power_state(struct pci_dev * pdev,pci_power_t state)26*d5b0d883SRafael J. Wysocki int mid_pci_set_power_state(struct pci_dev *pdev, pci_power_t state)
275823d089SAndy Shevchenko {
285823d089SAndy Shevchenko 	return intel_mid_pci_set_power_state(pdev, state);
295823d089SAndy Shevchenko }
305823d089SAndy Shevchenko 
mid_pci_get_power_state(struct pci_dev * pdev)31*d5b0d883SRafael J. Wysocki pci_power_t mid_pci_get_power_state(struct pci_dev *pdev)
32e8a6123eSLukas Wunner {
33e8a6123eSLukas Wunner 	return intel_mid_pci_get_power_state(pdev);
34e8a6123eSLukas Wunner }
35e8a6123eSLukas Wunner 
368e522e1dSAndy Shevchenko /*
378e522e1dSAndy Shevchenko  * This table should be in sync with the one in
388e522e1dSAndy Shevchenko  * arch/x86/platform/intel-mid/pwr.c.
398e522e1dSAndy Shevchenko  */
405823d089SAndy Shevchenko static const struct x86_cpu_id lpss_cpu_ids[] = {
4191e503e6SThomas Gleixner 	X86_MATCH_INTEL_FAM6_MODEL(ATOM_SALTWELL_MID, NULL),
4291e503e6SThomas Gleixner 	X86_MATCH_INTEL_FAM6_MODEL(ATOM_SILVERMONT_MID, NULL),
435823d089SAndy Shevchenko 	{}
445823d089SAndy Shevchenko };
455823d089SAndy Shevchenko 
mid_pci_init(void)465823d089SAndy Shevchenko static int __init mid_pci_init(void)
475823d089SAndy Shevchenko {
485823d089SAndy Shevchenko 	const struct x86_cpu_id *id;
495823d089SAndy Shevchenko 
505823d089SAndy Shevchenko 	id = x86_match_cpu(lpss_cpu_ids);
515823d089SAndy Shevchenko 	if (id)
52*d5b0d883SRafael J. Wysocki 		pci_mid_pm_enabled = true;
53*d5b0d883SRafael J. Wysocki 
545823d089SAndy Shevchenko 	return 0;
555823d089SAndy Shevchenko }
565823d089SAndy Shevchenko arch_initcall(mid_pci_init);
57