diff options
author | Andy Shevchenko <andriy.shevchenko@linux.intel.com> | 2022-07-18 17:53:28 +0300 |
---|---|---|
committer | Hans de Goede <hdegoede@redhat.com> | 2022-08-01 16:26:38 +0200 |
commit | 42d0d4232ac1620c38a73bd133bf9927c9bc3ac4 (patch) | |
tree | 20d447dc9faa1ecb22ee2bbda41b78884db5eeab /drivers/platform/x86/intel | |
parent | 8906ced9a909158a3688dd90940a0a075ba32631 (diff) |
platform/x86: p2sb: Move out of X86_PLATFORM_DEVICES dependency
The P2SB library is used for various drivers, including server
platforms. That's why the dependency on X86_PLATFORM_DEVICES
seems superfluous.
Reported-by: kernel test robot <lkp@intel.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Link: https://lore.kernel.org/r/20220718145328.14374-1-andriy.shevchenko@linux.intel.com
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Diffstat (limited to 'drivers/platform/x86/intel')
-rw-r--r-- | drivers/platform/x86/intel/Kconfig | 12 | ||||
-rw-r--r-- | drivers/platform/x86/intel/Makefile | 2 | ||||
-rw-r--r-- | drivers/platform/x86/intel/p2sb.c | 133 |
3 files changed, 0 insertions, 147 deletions
diff --git a/drivers/platform/x86/intel/Kconfig b/drivers/platform/x86/intel/Kconfig index c9cfbaae436b..794968bda115 100644 --- a/drivers/platform/x86/intel/Kconfig +++ b/drivers/platform/x86/intel/Kconfig @@ -70,18 +70,6 @@ config INTEL_OAKTRAIL enable/disable the Camera, WiFi, BT etc. devices. If in doubt, say Y here; it will only load on supported platforms. -config P2SB - bool "Primary to Sideband (P2SB) bridge access support" - depends on PCI - help - The Primary to Sideband (P2SB) bridge is an interface to some - PCI devices connected through it. In particular, SPI NOR controller - in Intel Apollo Lake SoC is one of such devices. - - The main purpose of this library is to unhide P2SB device in case - firmware kept it hidden on some platforms in order to access devices - behind it. - config INTEL_BXTWC_PMIC_TMU tristate "Intel Broxton Whiskey Cove TMU Driver" depends on INTEL_SOC_PMIC_BXTWC diff --git a/drivers/platform/x86/intel/Makefile b/drivers/platform/x86/intel/Makefile index 741a9404db98..717933dd0cfd 100644 --- a/drivers/platform/x86/intel/Makefile +++ b/drivers/platform/x86/intel/Makefile @@ -28,8 +28,6 @@ intel_int0002_vgpio-y := int0002_vgpio.o obj-$(CONFIG_INTEL_INT0002_VGPIO) += intel_int0002_vgpio.o intel_oaktrail-y := oaktrail.o obj-$(CONFIG_INTEL_OAKTRAIL) += intel_oaktrail.o -intel_p2sb-y := p2sb.o -obj-$(CONFIG_P2SB) += intel_p2sb.o intel_sdsi-y := sdsi.o obj-$(CONFIG_INTEL_SDSI) += intel_sdsi.o intel_vsec-y := vsec.o diff --git a/drivers/platform/x86/intel/p2sb.c b/drivers/platform/x86/intel/p2sb.c deleted file mode 100644 index fb2e141f3eb8..000000000000 --- a/drivers/platform/x86/intel/p2sb.c +++ /dev/null @@ -1,133 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* - * Primary to Sideband (P2SB) bridge access support - * - * Copyright (c) 2017, 2021-2022 Intel Corporation. - * - * Authors: Andy Shevchenko <andriy.shevchenko@linux.intel.com> - * Jonathan Yong <jonathan.yong@intel.com> - */ - -#include <linux/bits.h> -#include <linux/export.h> -#include <linux/pci.h> -#include <linux/platform_data/x86/p2sb.h> - -#include <asm/cpu_device_id.h> -#include <asm/intel-family.h> - -#define P2SBC 0xe0 -#define P2SBC_HIDE BIT(8) - -static const struct x86_cpu_id p2sb_cpu_ids[] = { - X86_MATCH_INTEL_FAM6_MODEL(ATOM_GOLDMONT, PCI_DEVFN(13, 0)), - X86_MATCH_INTEL_FAM6_MODEL(ATOM_GOLDMONT_D, PCI_DEVFN(31, 1)), - X86_MATCH_INTEL_FAM6_MODEL(ATOM_SILVERMONT_D, PCI_DEVFN(31, 1)), - X86_MATCH_INTEL_FAM6_MODEL(KABYLAKE, PCI_DEVFN(31, 1)), - X86_MATCH_INTEL_FAM6_MODEL(KABYLAKE_L, PCI_DEVFN(31, 1)), - X86_MATCH_INTEL_FAM6_MODEL(SKYLAKE, PCI_DEVFN(31, 1)), - X86_MATCH_INTEL_FAM6_MODEL(SKYLAKE_L, PCI_DEVFN(31, 1)), - {} -}; - -static int p2sb_get_devfn(unsigned int *devfn) -{ - const struct x86_cpu_id *id; - - id = x86_match_cpu(p2sb_cpu_ids); - if (!id) - return -ENODEV; - - *devfn = (unsigned int)id->driver_data; - return 0; -} - -static int p2sb_read_bar0(struct pci_dev *pdev, struct resource *mem) -{ - /* Copy resource from the first BAR of the device in question */ - *mem = pdev->resource[0]; - return 0; -} - -static int p2sb_scan_and_read(struct pci_bus *bus, unsigned int devfn, struct resource *mem) -{ - struct pci_dev *pdev; - int ret; - - pdev = pci_scan_single_device(bus, devfn); - if (!pdev) - return -ENODEV; - - ret = p2sb_read_bar0(pdev, mem); - - pci_stop_and_remove_bus_device(pdev); - return ret; -} - -/** - * p2sb_bar - Get Primary to Sideband (P2SB) bridge device BAR - * @bus: PCI bus to communicate with - * @devfn: PCI slot and function to communicate with - * @mem: memory resource to be filled in - * - * The BIOS prevents the P2SB device from being enumerated by the PCI - * subsystem, so we need to unhide and hide it back to lookup the BAR. - * - * if @bus is NULL, the bus 0 in domain 0 will be used. - * If @devfn is 0, it will be replaced by devfn of the P2SB device. - * - * Caller must provide a valid pointer to @mem. - * - * Locking is handled by pci_rescan_remove_lock mutex. - * - * Return: - * 0 on success or appropriate errno value on error. - */ -int p2sb_bar(struct pci_bus *bus, unsigned int devfn, struct resource *mem) -{ - struct pci_dev *pdev_p2sb; - unsigned int devfn_p2sb; - u32 value = P2SBC_HIDE; - int ret; - - /* Get devfn for P2SB device itself */ - ret = p2sb_get_devfn(&devfn_p2sb); - if (ret) - return ret; - - /* if @bus is NULL, use bus 0 in domain 0 */ - bus = bus ?: pci_find_bus(0, 0); - - /* - * Prevent concurrent PCI bus scan from seeing the P2SB device and - * removing via sysfs while it is temporarily exposed. - */ - pci_lock_rescan_remove(); - - /* Unhide the P2SB device, if needed */ - pci_bus_read_config_dword(bus, devfn_p2sb, P2SBC, &value); - if (value & P2SBC_HIDE) - pci_bus_write_config_dword(bus, devfn_p2sb, P2SBC, 0); - - pdev_p2sb = pci_scan_single_device(bus, devfn_p2sb); - if (devfn) - ret = p2sb_scan_and_read(bus, devfn, mem); - else - ret = p2sb_read_bar0(pdev_p2sb, mem); - pci_stop_and_remove_bus_device(pdev_p2sb); - - /* Hide the P2SB device, if it was hidden */ - if (value & P2SBC_HIDE) - pci_bus_write_config_dword(bus, devfn_p2sb, P2SBC, P2SBC_HIDE); - - pci_unlock_rescan_remove(); - - if (ret) - return ret; - - if (mem->flags == 0) - return -ENODEV; - - return 0; -} -EXPORT_SYMBOL_GPL(p2sb_bar); |