PCI: Add defines for normal and subtractive PCI bridges
Subsystems (20)
Pali Rohár
maintainerPATCH RESEND v2 1/2 PCI: Add defines for normal and subtractive PCI bridges
Add following two new PCI class codes defines into pci_ids.h include file:
PCI_CLASS_BRIDGE_PCI_NORMAL
PCI_CLASS_BRIDGE_PCI_SUBTRACTIVE
And use these defines in all kernel code for describing PCI class codes for normal and subtractive PCI bridges.
---
Changes in v2:
- rebased on on top of pci/next branch
- dropped pcie-iproc.c change for 0x43c register for now (layout of this register is unknown and later I should get more information from Broadcom about it)
--- .../mips/include/asm/mach-bcm63xx/bcm63xx_regs.h | 2 -- arch/mips/pci/fixup-sb1250.c | 2 +- arch/mips/pci/pci-bcm63xx.c | 2 +- arch/powerpc/platforms/powernv/pci.c | 2 +- arch/powerpc/sysdev/fsl_pci.c | 2 +- arch/sh/drivers/pci/pcie-sh7786.c | 2 +- drivers/pci/controller/dwc/pci-keystone.c | 8 ++++---- drivers/pci/controller/dwc/pci-meson.c | 16 ++++++++-------- drivers/pci/controller/dwc/pcie-qcom.c | 2 +- .../pci/controller/mobiveil/pcie-mobiveil-host.c | 2 +- drivers/pci/controller/pci-aardvark.c | 2 +- drivers/pci/controller/pci-loongson.c | 2 +- drivers/pci/controller/pci-tegra.c | 2 +- drivers/pci/controller/pcie-iproc-bcma.c | 2 +- drivers/pci/controller/pcie-iproc.c | 2 +- drivers/pci/controller/pcie-mediatek-gen3.c | 2 +- drivers/pci/controller/pcie-rcar-host.c | 2 +- drivers/pci/controller/pcie-rockchip-host.c | 2 +- drivers/pci/controller/pcie-rockchip.h | 1 - drivers/pci/hotplug/shpchp_core.c | 2 +- drivers/pci/pci-bridge-emul.c | 4 ++-- drivers/pci/pcie/portdrv_pci.c | 4 ++-- include/linux/pci_ids.h | 2 ++ 23 files changed, 34 insertions(+), 35 deletions(-)
arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h +0 -2
@@ -1380,8 +1380,6 @@#define PCIE_IDVAL3_REG 0x43c#define IDVAL3_CLASS_CODE_MASK 0xffffff -#define IDVAL3_SUBCLASS_SHIFT 8 -#define IDVAL3_CLASS_SHIFT 16#define PCIE_DLSTATUS_REG 0x1048#define DLSTATUS_PHYLINKUP (1 << 13)
arch/mips/pci/fixup-sb1250.c +1 -1
@@ -75,7 +75,7 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SIBYTE, PCI_DEVICE_ID_BCM1250_PCI,*/ static void quirk_sb1250_ht (struct pci_dev *dev) { - dev->class =PCI_CLASS_BRIDGE_PCI <<8 ; + dev->class =PCI_CLASS_BRIDGE_PCI_NORMAL ; }DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_SIBYTE ,PCI_DEVICE_ID_BCM1250_HT , quirk_sb1250_ht);
arch/mips/pci/pci-bcm63xx.c +1 -1
@@ -186,7 +186,7 @@ static int __init bcm63xx_register_pcie(void)/* setup class code as bridge */ val =bcm_pcie_readl (PCIE_IDVAL3_REG ); val &= ~IDVAL3_CLASS_CODE_MASK ; - val |= (PCI_CLASS_BRIDGE_PCI <<IDVAL3_SUBCLASS_SHIFT ); + val |=PCI_CLASS_BRIDGE_PCI_NORMAL ;bcm_pcie_writel (val,PCIE_IDVAL3_REG );/* disable bar1 size */
arch/powerpc/platforms/powernv/pci.c +1 -1
@@ -815,7 +815,7 @@ void pnv_pci_shutdown(void)/* Fixup wrong class code in p7ioc and p8 root complex */ static void pnv_p7ioc_rc_quirk (struct pci_dev *dev) { - dev->class =PCI_CLASS_BRIDGE_PCI <<8 ; + dev->class =PCI_CLASS_BRIDGE_PCI_NORMAL ; }DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_IBM ,0x3b9 , pnv_p7ioc_rc_quirk);
arch/powerpc/sysdev/fsl_pci.c +1 -1
@@ -55,7 +55,7 @@ static void quirk_fsl_pcie_early(struct pci_dev *dev)if ((hdr_type &0x7f ) !=PCI_HEADER_TYPE_BRIDGE )return ; - dev->class =PCI_CLASS_BRIDGE_PCI <<8 ; + dev->class =PCI_CLASS_BRIDGE_PCI_NORMAL ; fsl_pcie_bus_fixup =1 ;return ; }
arch/sh/drivers/pci/pcie-sh7786.c +1 -1
@@ -314,7 +314,7 @@ static int __init pcie_init(struct sh7786_pcie_port *port)* class to match. Hardware takes care of propagating the IDSETR * settings, so there is no need to bother with a quirk. */ -pci_write_reg (chan,PCI_CLASS_BRIDGE_PCI <<16 ,SH4A_PCIEIDSETR1 ); +pci_write_reg (chan,PCI_CLASS_BRIDGE_PCI_NORMAL <<8 ,SH4A_PCIEIDSETR1 );/* Initialize default capabilities. */ data =pci_read_reg (chan,SH4A_PCIEEXPCAP0 );
drivers/pci/controller/dwc/pci-keystone.c +4 -4
@@ -531,13 +531,13 @@ static void ks_pcie_quirk(struct pci_dev *dev)struct pci_dev *bridge;static const struct pci_device_id rc_pci_devids[] = { {PCI_DEVICE (PCI_VENDOR_ID_TI ,PCIE_RC_K2HK ), - .class =PCI_CLASS_BRIDGE_PCI <<8 , .class_mask = ~0 , }, + .class =PCI_CLASS_BRIDGE_PCI_NORMAL , .class_mask = ~0 , }, {PCI_DEVICE (PCI_VENDOR_ID_TI ,PCIE_RC_K2E ), - .class =PCI_CLASS_BRIDGE_PCI <<8 , .class_mask = ~0 , }, + .class =PCI_CLASS_BRIDGE_PCI_NORMAL , .class_mask = ~0 , }, {PCI_DEVICE (PCI_VENDOR_ID_TI ,PCIE_RC_K2L ), - .class =PCI_CLASS_BRIDGE_PCI <<8 , .class_mask = ~0 , }, + .class =PCI_CLASS_BRIDGE_PCI_NORMAL , .class_mask = ~0 , }, {PCI_DEVICE (PCI_VENDOR_ID_TI ,PCIE_RC_K2G ), - .class =PCI_CLASS_BRIDGE_PCI <<8 , .class_mask = ~0 , }, + .class =PCI_CLASS_BRIDGE_PCI_NORMAL , .class_mask = ~0 , }, {0 , }, };
drivers/pci/controller/dwc/pci-meson.c +8 -8
@@ -313,14 +313,14 @@ static int meson_pcie_rd_own_conf(struct pci_bus *bus, u32 devfn,* cannot program the PCI_CLASS_DEVICE register, so we must fabricate * the return value in the config accessors. */ -if (where ==PCI_CLASS_REVISION && size ==4 ) - *val = (PCI_CLASS_BRIDGE_PCI <<16 ) | (*val &0xffff ); -else if (where ==PCI_CLASS_DEVICE && size ==2 ) - *val =PCI_CLASS_BRIDGE_PCI ; -else if (where ==PCI_CLASS_DEVICE && size ==1 ) - *val =PCI_CLASS_BRIDGE_PCI &0xff ; -else if (where ==PCI_CLASS_DEVICE +1 && size ==1 ) - *val = (PCI_CLASS_BRIDGE_PCI >>8 ) &0xff ; +if ((where & ~3 ) ==PCI_CLASS_REVISION ) { +if (size <=2 ) + *val = (*val & ((1 << (size *8 )) -1 )) << (8 * (where &3 )); + *val &= ~0xffffff00 ; + *val |=PCI_CLASS_BRIDGE_PCI_NORMAL <<8 ; +if (size <=2 ) + *val = (*val >> (8 * (where &3 ))) & ((1 << (size *8 )) -1 ); + }return PCIBIOS_SUCCESSFUL ; }
drivers/pci/controller/dwc/pcie-qcom.c +1 -1
@@ -1634,7 +1634,7 @@ static const struct of_device_id qcom_pcie_match[] = {static void qcom_fixup_class (struct pci_dev *dev) { - dev->class =PCI_CLASS_BRIDGE_PCI <<8 ; + dev->class =PCI_CLASS_BRIDGE_PCI_NORMAL ; }DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_QCOM ,0x0101 , qcom_fixup_class);DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_QCOM ,0x0104 , qcom_fixup_class);
drivers/pci/controller/mobiveil/pcie-mobiveil-host.c +1 -1
@@ -295,7 +295,7 @@ int mobiveil_host_init(struct mobiveil_pcie *pcie, bool reinit)/* fixup for PCIe class register */ value =mobiveil_csr_readl (pcie,PAB_INTP_AXI_PIO_CLASS ); value &=0xff ; - value |= (PCI_CLASS_BRIDGE_PCI <<16 ); + value |=PCI_CLASS_BRIDGE_PCI_NORMAL <<8 ;mobiveil_csr_writel (pcie, value,PAB_INTP_AXI_PIO_CLASS );return 0 ;
drivers/pci/controller/pci-aardvark.c +1 -1
@@ -529,7 +529,7 @@ static void advk_pcie_setup_hw(struct advk_pcie *pcie)*/ reg =advk_readl (pcie,PCIE_CORE_DEV_REV_REG ); reg &= ~0xffffff00 ; - reg |= (PCI_CLASS_BRIDGE_PCI <<8 ) <<8 ; + reg |=PCI_CLASS_BRIDGE_PCI_NORMAL <<8 ;advk_writel (pcie, reg,PCIE_CORE_DEV_REV_REG );/* Disable Root Bridge I/O space, memory space and bus mastering */
drivers/pci/controller/pci-loongson.c +1 -1
@@ -35,7 +35,7 @@ struct loongson_pci {/* Fixup wrong class code in PCIe bridges */ static void bridge_class_quirk (struct pci_dev *dev) { - dev->class =PCI_CLASS_BRIDGE_PCI <<8 ; + dev->class =PCI_CLASS_BRIDGE_PCI_NORMAL ; }DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_LOONGSON ,DEV_PCIE_PORT_0 , bridge_class_quirk);
drivers/pci/controller/pci-tegra.c +1 -1
@@ -726,7 +726,7 @@ static void tegra_pcie_port_free(struct tegra_pcie_port *port)/* Tegra PCIE root complex wrongly reports device class */ static void tegra_pcie_fixup_class (struct pci_dev *dev) { - dev->class =PCI_CLASS_BRIDGE_PCI <<8 ; + dev->class =PCI_CLASS_BRIDGE_PCI_NORMAL ; }DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_NVIDIA ,0x0bf0 , tegra_pcie_fixup_class);DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_NVIDIA ,0x0bf1 , tegra_pcie_fixup_class);
drivers/pci/controller/pcie-iproc-bcma.c +1 -1
@@ -18,7 +18,7 @@/* NS: CLASS field is R/O, and set to wrong 0x200 value */ static void bcma_pcie2_fixup_class (struct pci_dev *dev) { - dev->class =PCI_CLASS_BRIDGE_PCI <<8 ; + dev->class =PCI_CLASS_BRIDGE_PCI_NORMAL ; }DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_BROADCOM ,0x8011 , bcma_pcie2_fixup_class);DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_BROADCOM ,0x8012 , bcma_pcie2_fixup_class);
drivers/pci/controller/pcie-iproc.c +1 -1
@@ -1581,7 +1581,7 @@ static void quirk_paxc_bridge(struct pci_dev *pdev)* code that the bridge is not an Ethernet device. */ if (pdev->hdr_type ==PCI_HEADER_TYPE_BRIDGE ) - pdev->class =PCI_CLASS_BRIDGE_PCI <<8 ; + pdev->class =PCI_CLASS_BRIDGE_PCI_NORMAL ;/* * MPSS is not being set properly (as it is currently 0). This is
drivers/pci/controller/pcie-mediatek-gen3.c +1 -1
@@ -292,7 +292,7 @@ static int mtk_pcie_startup_port(struct mtk_gen3_pcie *pcie)/* Set class code */ val =readl_relaxed (pcie->base +PCIE_PCI_IDS_1 ); val &= ~GENMASK (31 ,8 ); - val |=PCI_CLASS (PCI_CLASS_BRIDGE_PCI <<8 ); + val |=PCI_CLASS (PCI_CLASS_BRIDGE_PCI_NORMAL );writel_relaxed (val, pcie->base +PCIE_PCI_IDS_1 );/* Mask all INTx interrupts */
drivers/pci/controller/pcie-rcar-host.c +1 -1
@@ -370,7 +370,7 @@ static int rcar_pcie_hw_init(struct rcar_pcie *pcie)* class to match. Hardware takes care of propagating the IDSETR * settings, so there is no need to bother with a quirk. */ -rcar_pci_write_reg (pcie,PCI_CLASS_BRIDGE_PCI <<16 ,IDSETR1 ); +rcar_pci_write_reg (pcie,PCI_CLASS_BRIDGE_PCI_NORMAL <<8 ,IDSETR1 );/* * Setup Secondary Bus Number & Subordinate Bus Number, even though
drivers/pci/controller/pcie-rockchip-host.c +1 -1
@@ -370,7 +370,7 @@ static int rockchip_pcie_host_init_port(struct rockchip_pcie *rockchip)rockchip_pcie_write (rockchip,ROCKCHIP_VENDOR_ID ,PCIE_CORE_CONFIG_VENDOR );rockchip_pcie_write (rockchip, -PCI_CLASS_BRIDGE_PCI <<PCIE_RC_CONFIG_SCC_SHIFT , +PCI_CLASS_BRIDGE_PCI_NORMAL <<8 ,PCIE_RC_CONFIG_RID_CCR );/* Clear THP cap's next cap pointer to remove L1 substate cap */
drivers/pci/controller/pcie-rockchip.h +0 -1
@@ -134,7 +134,6 @@#define PCIE_RC_CONFIG_NORMAL_BASE 0x800000#define PCIE_RC_CONFIG_BASE 0xa00000#define PCIE_RC_CONFIG_RID_CCR (PCIE_RC_CONFIG_BASE + 0x08) -#define PCIE_RC_CONFIG_SCC_SHIFT 16#define PCIE_RC_CONFIG_DCR (PCIE_RC_CONFIG_BASE + 0xc4)#define PCIE_RC_CONFIG_DCR_CSPL_SHIFT 18#define PCIE_RC_CONFIG_DCR_CSPL_LIMIT 0xff
drivers/pci/hotplug/shpchp_core.c +1 -1
@@ -312,7 +312,7 @@ static void shpc_remove(struct pci_dev *dev) }static const struct pci_device_id shpcd_pci_tbl[] = { - {PCI_DEVICE_CLASS (((PCI_CLASS_BRIDGE_PCI <<8 ) |0x00 ), ~0 )}, + {PCI_DEVICE_CLASS (PCI_CLASS_BRIDGE_PCI_NORMAL , ~0 )}, {/* end: all zeroes */ } };MODULE_DEVICE_TABLE (pci, shpcd_pci_tbl);
drivers/pci/pci-bridge-emul.c +2 -2
@@ -329,9 +329,9 @@ int pci_bridge_emul_init(struct pci_bridge_emul *bridge,/* * class_revision: Class is high 24 bits and revision is low 8 bit of this member, -* while class for PCI Bridge Normal Decode has the 24-bit value: PCI_CLASS_BRIDGE_PCI << 8 +* while class for PCI Bridge Normal Decode has the 24-bit value: PCI_CLASS_BRIDGE_PCI_NORMAL */ - bridge->conf.class_revision |=cpu_to_le32 ((PCI_CLASS_BRIDGE_PCI <<8 ) <<8 ); + bridge->conf.class_revision |=cpu_to_le32 (PCI_CLASS_BRIDGE_PCI_NORMAL <<8 ); bridge->conf.header_type =PCI_HEADER_TYPE_BRIDGE ; bridge->conf.cache_line_size =0x10 ; bridge->conf.status =cpu_to_le16 (PCI_STATUS_CAP_LIST );
drivers/pci/pcie/portdrv_pci.c +2 -2
@@ -178,9 +178,9 @@ static pci_ers_result_t pcie_portdrv_mmio_enabled(struct pci_dev *dev)*/ static const struct pci_device_id port_pci_ids[] = {/* handle any PCI-Express port */ - {PCI_DEVICE_CLASS (((PCI_CLASS_BRIDGE_PCI <<8 ) |0x00 ), ~0 ) }, + {PCI_DEVICE_CLASS (PCI_CLASS_BRIDGE_PCI_NORMAL , ~0 ) },/* subtractive decode PCI-to-PCI bridge, class type is 060401h */ - {PCI_DEVICE_CLASS (((PCI_CLASS_BRIDGE_PCI <<8 ) |0x01 ), ~0 ) }, + {PCI_DEVICE_CLASS (PCI_CLASS_BRIDGE_PCI_SUBTRACTIVE , ~0 ) },/* handle any Root Complex Event Collector */ {PCI_DEVICE_CLASS (((PCI_CLASS_SYSTEM_RCEC <<8 ) |0x00 ), ~0 ) }, { },
include/linux/pci_ids.h +2 -0
@@ -60,6 +60,8 @@#define PCI_CLASS_BRIDGE_EISA 0x0602#define PCI_CLASS_BRIDGE_MC 0x0603#define PCI_CLASS_BRIDGE_PCI 0x0604 +#define PCI_CLASS_BRIDGE_PCI_NORMAL 0x060400 +#define PCI_CLASS_BRIDGE_PCI_SUBTRACTIVE 0x060401#define PCI_CLASS_BRIDGE_PCMCIA 0x0605#define PCI_CLASS_BRIDGE_NUBUS 0x0606#define PCI_CLASS_BRIDGE_CARDBUS 0x0607
Signature · 1 line
2.20.1
Pali Rohár
maintainerPATCH RESEND v2 2/2 PCI: iproc: Set all 24 bits of PCI class code
Register 0x43c in its low 24 bits contains PCI class code.
Update code to set all 24 bits of PCI class code and not only upper 16 bits of PCI class code.
Use a new macro PCI_CLASS_BRIDGE_PCI_NORMAL which represents whole 24 bits of normal PCI bridge class.
---
Roman helped me with this change and confirmed that class code is stored really in bits [23:0] of custom register 0x43c (normally class code is stored in bits [31:8] of pci register 0x08).
--- drivers/pci/controller/pcie-iproc.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-)
drivers/pci/controller/pcie-iproc.c +4 -5
@@ -789,14 +789,13 @@ static int iproc_pcie_check_link(struct iproc_pcie *pcie)return -EFAULT ; } -/* force class to PCI_CLASS_BRIDGE_PCI (0x0604) */ +/* force class to PCI_CLASS_BRIDGE_PCI_NORMAL (0x060400) */ #define PCI_BRIDGE_CTRL_REG_OFFSET 0x43c -#define PCI_CLASS_BRIDGE_MASK 0xffff00 -#define PCI_CLASS_BRIDGE_SHIFT 8 +#define PCI_BRIDGE_CTRL_REG_CLASS_MASK 0xffffffiproc_pci_raw_config_read32 (pcie,0 ,PCI_BRIDGE_CTRL_REG_OFFSET ,4 , &class); - class &= ~PCI_CLASS_BRIDGE_MASK ; - class |= (PCI_CLASS_BRIDGE_PCI <<PCI_CLASS_BRIDGE_SHIFT ); + class &= ~PCI_BRIDGE_CTRL_REG_CLASS_MASK ; + class |=PCI_CLASS_BRIDGE_PCI_NORMAL ;iproc_pci_raw_config_write32 (pcie,0 ,PCI_BRIDGE_CTRL_REG_OFFSET ,4 , class);
Signature · 1 line
2.20.1
Quoted 7 lines · Pali Rohár
Add following two new PCI class codes defines into
pci_ids.hinclude file:
PCI_CLASS_BRIDGE_PCI_NORMAL
PCI_CLASS_BRIDGE_PCI_SUBTRACTIVEAnd use these defines in all kernel code for describing PCI class codes for normal and subtractive PCI bridges.
Looks good; is this another case?
drivers/pci/controller/pci-mvebu.c: dev_rev |= (PCI_CLASS_BRIDGE_PCI << 8) << 8;
Quoted 4 lines
static void
quirk_sb1250_ht(struct pci_dev *dev)
{(quoted diff) +1
-1- dev->class = PCI_CLASS_BRIDGE_PCI << 8; + dev->class = PCI_CLASS_BRIDGE_PCI_NORMAL;
Pali Rohár
maintainerQuoted 6 lines · On Thursday 17 February 2022 15:11:34 Bjorn Helgaas wrote:
Quoted 5 lines · Pali Rohár
Add following two new PCI class codes defines into
pci_ids.hinclude file:
PCI_CLASS_BRIDGE_PCI_NORMAL
PCI_CLASS_BRIDGE_PCI_SUBTRACTIVE
Quoted 6 lines
Quoted 2 lines
And use these defines in all kernel code for describing PCI class codes for normal and subtractive PCI bridges.
Looks good; is this another case?
drivers/pci/controller/pci-mvebu.c: dev_rev |= (PCI_CLASS_BRIDGE_PCI << 8) << 8;
Yes! It is.
Quoted 4 lines
Quoted 4 lines
static void
quirk_sb1250_ht(struct pci_dev *dev)
{(quoted diff) +1
-1- dev->class = PCI_CLASS_BRIDGE_PCI << 8; + dev->class = PCI_CLASS_BRIDGE_PCI_NORMAL;
Bjorn Helgaas
AppliedQuoted 9 lines · Pali Rohár
Add following two new PCI class codes defines into
pci_ids.hinclude file:
PCI_CLASS_BRIDGE_PCI_NORMAL
PCI_CLASS_BRIDGE_PCI_SUBTRACTIVEAnd use these defines in all kernel code for describing PCI class codes for normal and subtractive PCI bridges.
Signed-off-by Pali Rohár <[email protected]>
Applied both changes to pci/bridge-class-codes for v5.18, plus the following pci-mvebu.c change:
drivers/pci/controller/pci-mvebu.c +1 -1
@@ -268,7 +268,7 @@ static void mvebu_pcie_setup_hw(struct mvebu_pcie_port *port)*/ dev_rev =mvebu_readl (port,PCIE_DEV_REV_OFF ); dev_rev &= ~0xffffff00 ; - dev_rev |= (PCI_CLASS_BRIDGE_PCI <<8 ) <<8 ; + dev_rev |=PCI_CLASS_BRIDGE_PCI_NORMAL <<8 ;mvebu_writel (port, dev_rev,PCIE_DEV_REV_OFF );
Quoted 362 lines
---
Changes in v2:
- rebased on on top of pci/next branch
- droppedpcie-iproc.cchange for0x43cregister for now (layout of this register is unknown and later I should get more information from Broadcom about it)--- .../mips/include/asm/mach-bcm63xx/bcm63xx_regs.h | 2 -- arch/mips/pci/fixup-sb1250.c | 2 +- arch/mips/pci/pci-bcm63xx.c | 2 +- arch/powerpc/platforms/powernv/pci.c | 2 +- arch/powerpc/sysdev/fsl_pci.c | 2 +- arch/sh/drivers/pci/pcie-sh7786.c | 2 +- drivers/pci/controller/dwc/pci-keystone.c | 8 ++++---- drivers/pci/controller/dwc/pci-meson.c | 16 ++++++++-------- drivers/pci/controller/dwc/pcie-qcom.c | 2 +- .../pci/controller/mobiveil/pcie-mobiveil-host.c | 2 +- drivers/pci/controller/pci-aardvark.c | 2 +- drivers/pci/controller/pci-loongson.c | 2 +- drivers/pci/controller/pci-tegra.c | 2 +- drivers/pci/controller/pcie-iproc-bcma.c | 2 +- drivers/pci/controller/pcie-iproc.c | 2 +- drivers/pci/controller/pcie-mediatek-gen3.c | 2 +- drivers/pci/controller/pcie-rcar-host.c | 2 +- drivers/pci/controller/pcie-rockchip-host.c | 2 +- drivers/pci/controller/pcie-rockchip.h | 1 - drivers/pci/hotplug/shpchp_core.c | 2 +- drivers/pci/pci-bridge-emul.c | 4 ++-- drivers/pci/pcie/portdrv_pci.c | 4 ++-- include/linux/pci_ids.h | 2 ++ 23 files changed, 34 insertions(+), 35 deletions(-)arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h +0
-2@@ -1380,8 +1380,6 @@#define PCIE_IDVAL3_REG 0x43c#define IDVAL3_CLASS_CODE_MASK 0xffffff -#define IDVAL3_SUBCLASS_SHIFT 8 -#define IDVAL3_CLASS_SHIFT 16#define PCIE_DLSTATUS_REG 0x1048#define DLSTATUS_PHYLINKUP (1 << 13)arch/mips/pci/fixup-sb1250.c +1
-1@@ -75,7 +75,7 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SIBYTE, PCI_DEVICE_ID_BCM1250_PCI,*/ static void quirk_sb1250_ht (struct pci_dev *dev) { - dev->class =PCI_CLASS_BRIDGE_PCI <<8 ; + dev->class =PCI_CLASS_BRIDGE_PCI_NORMAL ; }DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_SIBYTE ,PCI_DEVICE_ID_BCM1250_HT , quirk_sb1250_ht);arch/mips/pci/pci-bcm63xx.c +1
-1@@ -186,7 +186,7 @@ static int __init bcm63xx_register_pcie(void)/* setup class code as bridge */ val =bcm_pcie_readl (PCIE_IDVAL3_REG ); val &= ~IDVAL3_CLASS_CODE_MASK ; - val |= (PCI_CLASS_BRIDGE_PCI <<IDVAL3_SUBCLASS_SHIFT ); + val |=PCI_CLASS_BRIDGE_PCI_NORMAL ;bcm_pcie_writel (val,PCIE_IDVAL3_REG );/* disable bar1 size */ arch/powerpc/platforms/powernv/pci.c +1
-1@@ -815,7 +815,7 @@ void pnv_pci_shutdown(void)/* Fixup wrong class code in p7ioc and p8 root complex */ static void pnv_p7ioc_rc_quirk (struct pci_dev *dev) { - dev->class =PCI_CLASS_BRIDGE_PCI <<8 ; + dev->class =PCI_CLASS_BRIDGE_PCI_NORMAL ; }DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_IBM ,0x3b9 , pnv_p7ioc_rc_quirk);arch/powerpc/sysdev/fsl_pci.c +1
-1@@ -55,7 +55,7 @@ static void quirk_fsl_pcie_early(struct pci_dev *dev)if ((hdr_type &0x7f ) !=PCI_HEADER_TYPE_BRIDGE )return ; - dev->class =PCI_CLASS_BRIDGE_PCI <<8 ; + dev->class =PCI_CLASS_BRIDGE_PCI_NORMAL ; fsl_pcie_bus_fixup =1 ;return ; }arch/sh/drivers/pci/pcie-sh7786.c +1
-1@@ -314,7 +314,7 @@ static int __init pcie_init(struct sh7786_pcie_port *port)* class to match. Hardware takes care of propagating the IDSETR * settings, so there is no need to bother with a quirk. */ -pci_write_reg (chan,PCI_CLASS_BRIDGE_PCI <<16 ,SH4A_PCIEIDSETR1 ); +pci_write_reg (chan,PCI_CLASS_BRIDGE_PCI_NORMAL <<8 ,SH4A_PCIEIDSETR1 );/* Initialize default capabilities. */ data =pci_read_reg (chan,SH4A_PCIEEXPCAP0 );drivers/pci/controller/dwc/pci-keystone.c +4
-4@@ -531,13 +531,13 @@ static void ks_pcie_quirk(struct pci_dev *dev)struct pci_dev *bridge;static const struct pci_device_id rc_pci_devids[] = { {PCI_DEVICE (PCI_VENDOR_ID_TI ,PCIE_RC_K2HK ), - .class =PCI_CLASS_BRIDGE_PCI <<8 , .class_mask = ~0 , }, + .class =PCI_CLASS_BRIDGE_PCI_NORMAL , .class_mask = ~0 , }, {PCI_DEVICE (PCI_VENDOR_ID_TI ,PCIE_RC_K2E ), - .class =PCI_CLASS_BRIDGE_PCI <<8 , .class_mask = ~0 , }, + .class =PCI_CLASS_BRIDGE_PCI_NORMAL , .class_mask = ~0 , }, {PCI_DEVICE (PCI_VENDOR_ID_TI ,PCIE_RC_K2L ), - .class =PCI_CLASS_BRIDGE_PCI <<8 , .class_mask = ~0 , }, + .class =PCI_CLASS_BRIDGE_PCI_NORMAL , .class_mask = ~0 , }, {PCI_DEVICE (PCI_VENDOR_ID_TI ,PCIE_RC_K2G ), - .class =PCI_CLASS_BRIDGE_PCI <<8 , .class_mask = ~0 , }, + .class =PCI_CLASS_BRIDGE_PCI_NORMAL , .class_mask = ~0 , }, {0 , }, };drivers/pci/controller/dwc/pci-meson.c +8
-8@@ -313,14 +313,14 @@ static int meson_pcie_rd_own_conf(struct pci_bus *bus, u32 devfn,* cannot program the PCI_CLASS_DEVICE register, so we must fabricate * the return value in the config accessors. */ -if (where ==PCI_CLASS_REVISION && size ==4 ) - *val = (PCI_CLASS_BRIDGE_PCI <<16 ) | (*val &0xffff ); -else if (where ==PCI_CLASS_DEVICE && size ==2 ) - *val =PCI_CLASS_BRIDGE_PCI ; -else if (where ==PCI_CLASS_DEVICE && size ==1 ) - *val =PCI_CLASS_BRIDGE_PCI &0xff ; -else if (where ==PCI_CLASS_DEVICE +1 && size ==1 ) - *val = (PCI_CLASS_BRIDGE_PCI >>8 ) &0xff ; +if ((where & ~3 ) ==PCI_CLASS_REVISION ) { +if (size <=2 ) + *val = (*val & ((1 << (size *8 )) -1 )) << (8 * (where &3 )); + *val &= ~0xffffff00 ; + *val |=PCI_CLASS_BRIDGE_PCI_NORMAL <<8 ; +if (size <=2 ) + *val = (*val >> (8 * (where &3 ))) & ((1 << (size *8 )) -1 ); + }return PCIBIOS_SUCCESSFUL ; }drivers/pci/controller/dwc/pcie-qcom.c +1
-1@@ -1634,7 +1634,7 @@ static const struct of_device_id qcom_pcie_match[] = {static void qcom_fixup_class (struct pci_dev *dev) { - dev->class =PCI_CLASS_BRIDGE_PCI <<8 ; + dev->class =PCI_CLASS_BRIDGE_PCI_NORMAL ; }DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_QCOM ,0x0101 , qcom_fixup_class);DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_QCOM ,0x0104 , qcom_fixup_class);drivers/pci/controller/mobiveil/pcie-mobiveil-host.c +1
-1@@ -295,7 +295,7 @@ int mobiveil_host_init(struct mobiveil_pcie *pcie, bool reinit)/* fixup for PCIe class register */ value =mobiveil_csr_readl (pcie,PAB_INTP_AXI_PIO_CLASS ); value &=0xff ; - value |= (PCI_CLASS_BRIDGE_PCI <<16 ); + value |=PCI_CLASS_BRIDGE_PCI_NORMAL <<8 ;mobiveil_csr_writel (pcie, value,PAB_INTP_AXI_PIO_CLASS );return 0 ;drivers/pci/controller/pci-aardvark.c +1
-1@@ -529,7 +529,7 @@ static void advk_pcie_setup_hw(struct advk_pcie *pcie)*/ reg =advk_readl (pcie,PCIE_CORE_DEV_REV_REG ); reg &= ~0xffffff00 ; - reg |= (PCI_CLASS_BRIDGE_PCI <<8 ) <<8 ; + reg |=PCI_CLASS_BRIDGE_PCI_NORMAL <<8 ;advk_writel (pcie, reg,PCIE_CORE_DEV_REV_REG );/* Disable Root Bridge I/O space, memory space and bus mastering */ drivers/pci/controller/pci-loongson.c +1
-1@@ -35,7 +35,7 @@ struct loongson_pci {/* Fixup wrong class code in PCIe bridges */ static void bridge_class_quirk (struct pci_dev *dev) { - dev->class =PCI_CLASS_BRIDGE_PCI <<8 ; + dev->class =PCI_CLASS_BRIDGE_PCI_NORMAL ; }DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_LOONGSON ,DEV_PCIE_PORT_0 , bridge_class_quirk);drivers/pci/controller/pci-tegra.c +1
-1@@ -726,7 +726,7 @@ static void tegra_pcie_port_free(struct tegra_pcie_port *port)/* Tegra PCIE root complex wrongly reports device class */ static void tegra_pcie_fixup_class (struct pci_dev *dev) { - dev->class =PCI_CLASS_BRIDGE_PCI <<8 ; + dev->class =PCI_CLASS_BRIDGE_PCI_NORMAL ; }DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_NVIDIA ,0x0bf0 , tegra_pcie_fixup_class);DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_NVIDIA ,0x0bf1 , tegra_pcie_fixup_class);drivers/pci/controller/pcie-iproc-bcma.c +1
-1@@ -18,7 +18,7 @@/* NS: CLASS field is R/O, and set to wrong 0x200 value */ static void bcma_pcie2_fixup_class (struct pci_dev *dev) { - dev->class =PCI_CLASS_BRIDGE_PCI <<8 ; + dev->class =PCI_CLASS_BRIDGE_PCI_NORMAL ; }DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_BROADCOM ,0x8011 , bcma_pcie2_fixup_class);DECLARE_PCI_FIXUP_EARLY (PCI_VENDOR_ID_BROADCOM ,0x8012 , bcma_pcie2_fixup_class);drivers/pci/controller/pcie-iproc.c +1
-1@@ -1581,7 +1581,7 @@ static void quirk_paxc_bridge(struct pci_dev *pdev)* code that the bridge is not an Ethernet device. */ if (pdev->hdr_type ==PCI_HEADER_TYPE_BRIDGE ) - pdev->class =PCI_CLASS_BRIDGE_PCI <<8 ; + pdev->class =PCI_CLASS_BRIDGE_PCI_NORMAL ;/* * MPSS is not being set properly (as it is currently 0). This is drivers/pci/controller/pcie-mediatek-gen3.c +1
-1@@ -292,7 +292,7 @@ static int mtk_pcie_startup_port(struct mtk_gen3_pcie *pcie)/* Set class code */ val =readl_relaxed (pcie->base +PCIE_PCI_IDS_1 ); val &= ~GENMASK (31 ,8 ); - val |=PCI_CLASS (PCI_CLASS_BRIDGE_PCI <<8 ); + val |=PCI_CLASS (PCI_CLASS_BRIDGE_PCI_NORMAL );writel_relaxed (val, pcie->base +PCIE_PCI_IDS_1 );/* Mask all INTx interrupts */ drivers/pci/controller/pcie-rcar-host.c +1
-1@@ -370,7 +370,7 @@ static int rcar_pcie_hw_init(struct rcar_pcie *pcie)* class to match. Hardware takes care of propagating the IDSETR * settings, so there is no need to bother with a quirk. */ -rcar_pci_write_reg (pcie,PCI_CLASS_BRIDGE_PCI <<16 ,IDSETR1 ); +rcar_pci_write_reg (pcie,PCI_CLASS_BRIDGE_PCI_NORMAL <<8 ,IDSETR1 );/* * Setup Secondary Bus Number & Subordinate Bus Number, even though drivers/pci/controller/pcie-rockchip-host.c +1
-1@@ -370,7 +370,7 @@ static int rockchip_pcie_host_init_port(struct rockchip_pcie *rockchip)rockchip_pcie_write (rockchip,ROCKCHIP_VENDOR_ID ,PCIE_CORE_CONFIG_VENDOR );rockchip_pcie_write (rockchip, -PCI_CLASS_BRIDGE_PCI <<PCIE_RC_CONFIG_SCC_SHIFT , +PCI_CLASS_BRIDGE_PCI_NORMAL <<8 ,PCIE_RC_CONFIG_RID_CCR );/* Clear THP cap's next cap pointer to remove L1 substate cap */ drivers/pci/controller/pcie-rockchip.h +0
-1@@ -134,7 +134,6 @@#define PCIE_RC_CONFIG_NORMAL_BASE 0x800000#define PCIE_RC_CONFIG_BASE 0xa00000#define PCIE_RC_CONFIG_RID_CCR (PCIE_RC_CONFIG_BASE + 0x08) -#define PCIE_RC_CONFIG_SCC_SHIFT 16#define PCIE_RC_CONFIG_DCR (PCIE_RC_CONFIG_BASE + 0xc4)#define PCIE_RC_CONFIG_DCR_CSPL_SHIFT 18#define PCIE_RC_CONFIG_DCR_CSPL_LIMIT 0xffdrivers/pci/hotplug/shpchp_core.c +1
-1@@ -312,7 +312,7 @@ static void shpc_remove(struct pci_dev *dev) }static const struct pci_device_id shpcd_pci_tbl[] = { - {PCI_DEVICE_CLASS (((PCI_CLASS_BRIDGE_PCI <<8 ) |0x00 ), ~0 )}, + {PCI_DEVICE_CLASS (PCI_CLASS_BRIDGE_PCI_NORMAL , ~0 )}, {/* end: all zeroes */ } };MODULE_DEVICE_TABLE (pci, shpcd_pci_tbl);drivers/pci/pci-bridge-emul.c +2
-2@@ -329,9 +329,9 @@ int pci_bridge_emul_init(struct pci_bridge_emul *bridge,/* * class_revision: Class is high 24 bits and revision is low 8 bit of this member, -* while class for PCI Bridge Normal Decode has the 24-bit value: PCI_CLASS_BRIDGE_PCI << 8 +* while class for PCI Bridge Normal Decode has the 24-bit value: PCI_CLASS_BRIDGE_PCI_NORMAL */ - bridge->conf.class_revision |=cpu_to_le32 ((PCI_CLASS_BRIDGE_PCI <<8 ) <<8 ); + bridge->conf.class_revision |=cpu_to_le32 (PCI_CLASS_BRIDGE_PCI_NORMAL <<8 ); bridge->conf.header_type =PCI_HEADER_TYPE_BRIDGE ; bridge->conf.cache_line_size =0x10 ; bridge->conf.status =cpu_to_le16 (PCI_STATUS_CAP_LIST );drivers/pci/pcie/portdrv_pci.c +2
-2@@ -178,9 +178,9 @@ static pci_ers_result_t pcie_portdrv_mmio_enabled(struct pci_dev *dev)*/ static const struct pci_device_id port_pci_ids[] = {/* handle any PCI-Express port */ - {PCI_DEVICE_CLASS (((PCI_CLASS_BRIDGE_PCI <<8 ) |0x00 ), ~0 ) }, + {PCI_DEVICE_CLASS (PCI_CLASS_BRIDGE_PCI_NORMAL , ~0 ) },/* subtractive decode PCI-to-PCI bridge, class type is 060401h */ - {PCI_DEVICE_CLASS (((PCI_CLASS_BRIDGE_PCI <<8 ) |0x01 ), ~0 ) }, + {PCI_DEVICE_CLASS (PCI_CLASS_BRIDGE_PCI_SUBTRACTIVE , ~0 ) },/* handle any Root Complex Event Collector */ {PCI_DEVICE_CLASS (((PCI_CLASS_SYSTEM_RCEC <<8 ) |0x00 ), ~0 ) }, { },include/linux/pci_ids.h +2
-0@@ -60,6 +60,8 @@#define PCI_CLASS_BRIDGE_EISA 0x0602#define PCI_CLASS_BRIDGE_MC 0x0603#define PCI_CLASS_BRIDGE_PCI 0x0604 +#define PCI_CLASS_BRIDGE_PCI_NORMAL 0x060400 +#define PCI_CLASS_BRIDGE_PCI_SUBTRACTIVE 0x060401#define PCI_CLASS_BRIDGE_PCMCIA 0x0605#define PCI_CLASS_BRIDGE_NUBUS 0x0606#define PCI_CLASS_BRIDGE_CARDBUS 0x0607Signature · 1 line
2.20.1