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 U-Boot code for describing PCI class codes for normal and subtractive PCI bridges. Signed-off-by: Pali Rohár <pali@kernel.org> Reviewed-by: Stefan Roese <sr@denx.de>
This commit is contained in:
parent
e976504374
commit
d7b904092d
@ -150,7 +150,7 @@ static void xr3pci_init(void)
|
|||||||
/* allow ECRC */
|
/* allow ECRC */
|
||||||
writel(0x6006, XR3_CONFIG_BASE + XR3PCI_PEX_SPC2);
|
writel(0x6006, XR3_CONFIG_BASE + XR3PCI_PEX_SPC2);
|
||||||
/* setup the correct class code for the host bridge */
|
/* setup the correct class code for the host bridge */
|
||||||
writel(PCI_CLASS_BRIDGE_PCI << 16, XR3_CONFIG_BASE + XR3PCI_BRIDGE_PCI_IDS);
|
writel(PCI_CLASS_BRIDGE_PCI_NORMAL << 8, XR3_CONFIG_BASE + XR3PCI_BRIDGE_PCI_IDS);
|
||||||
|
|
||||||
/* reset phy and root complex */
|
/* reset phy and root complex */
|
||||||
writel(JUNO_RESET_CTRL_PHY | JUNO_RESET_CTRL_RC,
|
writel(JUNO_RESET_CTRL_PHY | JUNO_RESET_CTRL_RC,
|
||||||
|
@ -800,7 +800,7 @@ static int pcie_advk_setup_hw(struct pcie_advk *pcie)
|
|||||||
*/
|
*/
|
||||||
reg = advk_readl(pcie, ADVK_ROOT_PORT_PCI_CFG_OFF + PCI_CLASS_REVISION);
|
reg = advk_readl(pcie, ADVK_ROOT_PORT_PCI_CFG_OFF + PCI_CLASS_REVISION);
|
||||||
reg &= ~0xffffff00;
|
reg &= ~0xffffff00;
|
||||||
reg |= (PCI_CLASS_BRIDGE_PCI << 8) << 8;
|
reg |= PCI_CLASS_BRIDGE_PCI_NORMAL << 8;
|
||||||
advk_writel(pcie, reg, ADVK_ROOT_PORT_PCI_CFG_OFF + PCI_CLASS_REVISION);
|
advk_writel(pcie, reg, ADVK_ROOT_PORT_PCI_CFG_OFF + PCI_CLASS_REVISION);
|
||||||
|
|
||||||
/* Enable generation and checking of ECRC on PCIe Root Port */
|
/* Enable generation and checking of ECRC on PCIe Root Port */
|
||||||
|
@ -289,7 +289,7 @@ static int rcar_gen3_pcie_hw_init(struct udevice *dev)
|
|||||||
* class to match. Hardware takes care of propagating the IDSETR
|
* class to match. Hardware takes care of propagating the IDSETR
|
||||||
* settings, so there is no need to bother with a quirk.
|
* settings, so there is no need to bother with a quirk.
|
||||||
*/
|
*/
|
||||||
writel(PCI_CLASS_BRIDGE_PCI << 16, priv->regs + IDSETR1);
|
writel(PCI_CLASS_BRIDGE_PCI_NORMAL << 8, priv->regs + IDSETR1);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Setup Secondary Bus Number & Subordinate Bus Number, even though
|
* Setup Secondary Bus Number & Subordinate Bus Number, even though
|
||||||
|
@ -440,7 +440,7 @@ static int mvebu_pcie_probe(struct udevice *dev)
|
|||||||
*/
|
*/
|
||||||
reg = readl(pcie->base + MVPCIE_ROOT_PORT_PCI_CFG_OFF + PCI_CLASS_REVISION);
|
reg = readl(pcie->base + MVPCIE_ROOT_PORT_PCI_CFG_OFF + PCI_CLASS_REVISION);
|
||||||
reg &= ~0xffffff00;
|
reg &= ~0xffffff00;
|
||||||
reg |= (PCI_CLASS_BRIDGE_PCI << 8) << 8;
|
reg |= PCI_CLASS_BRIDGE_PCI_NORMAL << 8;
|
||||||
writel(reg, pcie->base + MVPCIE_ROOT_PORT_PCI_CFG_OFF + PCI_CLASS_REVISION);
|
writel(reg, pcie->base + MVPCIE_ROOT_PORT_PCI_CFG_OFF + PCI_CLASS_REVISION);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -325,8 +325,8 @@ static int pci_tegra_read_config(const struct udevice *bus, pci_dev_t bdf,
|
|||||||
/* fixup root port class */
|
/* fixup root port class */
|
||||||
if (PCI_BUS(bdf) == 0) {
|
if (PCI_BUS(bdf) == 0) {
|
||||||
if ((offset & ~3) == PCI_CLASS_REVISION) {
|
if ((offset & ~3) == PCI_CLASS_REVISION) {
|
||||||
value &= ~0x00ff0000;
|
value &= ~0x00ffff00;
|
||||||
value |= PCI_CLASS_BRIDGE_PCI << 16;
|
value |= PCI_CLASS_BRIDGE_PCI_NORMAL << 8;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -539,9 +539,9 @@ static int pcie_dw_mvebu_probe(struct udevice *dev)
|
|||||||
PCIE_ATU_TYPE_MEM, pcie->mem.phys_start,
|
PCIE_ATU_TYPE_MEM, pcie->mem.phys_start,
|
||||||
pcie->mem.bus_start, pcie->mem.size);
|
pcie->mem.bus_start, pcie->mem.size);
|
||||||
|
|
||||||
/* Set the CLASS_REV of RC CFG header to PCI_CLASS_BRIDGE_PCI */
|
/* Set the CLASS_REV of RC CFG header to PCI_CLASS_BRIDGE_PCI_NORMAL */
|
||||||
clrsetbits_le32(pcie->ctrl_base + PCI_CLASS_REVISION,
|
clrsetbits_le32(pcie->ctrl_base + PCI_CLASS_REVISION,
|
||||||
0xffff << 16, PCI_CLASS_BRIDGE_PCI << 16);
|
0xffffff << 8, PCI_CLASS_BRIDGE_PCI_NORMAL << 8);
|
||||||
|
|
||||||
pcie_dw_set_host_bars(pcie->ctrl_base);
|
pcie_dw_set_host_bars(pcie->ctrl_base);
|
||||||
|
|
||||||
|
@ -532,7 +532,7 @@ static int fsl_pcie_fixup_classcode(struct fsl_pcie *pcie)
|
|||||||
|
|
||||||
fsl_pcie_hose_read_config_dword(pcie, classcode_reg, &val);
|
fsl_pcie_hose_read_config_dword(pcie, classcode_reg, &val);
|
||||||
val &= 0xff;
|
val &= 0xff;
|
||||||
val |= PCI_CLASS_BRIDGE_PCI << 16;
|
val |= PCI_CLASS_BRIDGE_PCI_NORMAL << 8;
|
||||||
fsl_pcie_hose_write_config_dword(pcie, classcode_reg, val);
|
fsl_pcie_hose_write_config_dword(pcie, classcode_reg, val);
|
||||||
|
|
||||||
if (pcie->block_rev >= PEX_IP_BLK_REV_3_0)
|
if (pcie->block_rev >= PEX_IP_BLK_REV_3_0)
|
||||||
|
@ -300,9 +300,9 @@ static int imx_pcie_regions_setup(struct imx_pcie_priv *priv)
|
|||||||
setbits_le32(priv->dbi_base + PCI_COMMAND,
|
setbits_le32(priv->dbi_base + PCI_COMMAND,
|
||||||
PCI_COMMAND_IO | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER);
|
PCI_COMMAND_IO | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER);
|
||||||
|
|
||||||
/* Set the CLASS_REV of RC CFG header to PCI_CLASS_BRIDGE_PCI */
|
/* Set the CLASS_REV of RC CFG header to PCI_CLASS_BRIDGE_PCI_NORMAL */
|
||||||
setbits_le32(priv->dbi_base + PCI_CLASS_REVISION,
|
setbits_le32(priv->dbi_base + PCI_CLASS_REVISION,
|
||||||
PCI_CLASS_BRIDGE_PCI << 16);
|
PCI_CLASS_BRIDGE_PCI_NORMAL << 8);
|
||||||
|
|
||||||
/* Region #0 is used for Outbound CFG space access. */
|
/* Region #0 is used for Outbound CFG space access. */
|
||||||
writel(0, priv->dbi_base + PCIE_ATU_VIEWPORT);
|
writel(0, priv->dbi_base + PCIE_ATU_VIEWPORT);
|
||||||
|
@ -1123,7 +1123,7 @@ static int iproc_pcie_check_link(struct iproc_pcie *pcie)
|
|||||||
PCI_BRIDGE_CTRL_REG_OFFSET,
|
PCI_BRIDGE_CTRL_REG_OFFSET,
|
||||||
4, &class);
|
4, &class);
|
||||||
class &= ~PCI_BRIDGE_CTRL_REG_CLASS_MASK;
|
class &= ~PCI_BRIDGE_CTRL_REG_CLASS_MASK;
|
||||||
class |= (PCI_CLASS_BRIDGE_PCI << 8);
|
class |= PCI_CLASS_BRIDGE_PCI_NORMAL;
|
||||||
iproc_pci_raw_config_write32(pcie, 0,
|
iproc_pci_raw_config_write32(pcie, 0,
|
||||||
PCI_BRIDGE_CTRL_REG_OFFSET,
|
PCI_BRIDGE_CTRL_REG_OFFSET,
|
||||||
4, class);
|
4, class);
|
||||||
|
@ -351,7 +351,7 @@ static int rockchip_pcie_init_port(struct udevice *dev)
|
|||||||
|
|
||||||
/* Initialize Root Complex registers. */
|
/* Initialize Root Complex registers. */
|
||||||
writel(PCIE_LM_VENDOR_ROCKCHIP, priv->apb_base + PCIE_LM_VENDOR_ID);
|
writel(PCIE_LM_VENDOR_ROCKCHIP, priv->apb_base + PCIE_LM_VENDOR_ID);
|
||||||
writel(PCI_CLASS_BRIDGE_PCI << 16,
|
writel(PCI_CLASS_BRIDGE_PCI_NORMAL << 8,
|
||||||
priv->apb_base + PCIE_RC_BASE + PCI_CLASS_REVISION);
|
priv->apb_base + PCIE_RC_BASE + PCI_CLASS_REVISION);
|
||||||
writel(PCIE_LM_RCBARPIE | PCIE_LM_RCBARPIS,
|
writel(PCIE_LM_RCBARPIE | PCIE_LM_RCBARPIS,
|
||||||
priv->apb_base + PCIE_LM_RCBAR);
|
priv->apb_base + PCIE_LM_RCBAR);
|
||||||
|
@ -55,6 +55,8 @@
|
|||||||
#define PCI_CLASS_BRIDGE_EISA 0x0602
|
#define PCI_CLASS_BRIDGE_EISA 0x0602
|
||||||
#define PCI_CLASS_BRIDGE_MC 0x0603
|
#define PCI_CLASS_BRIDGE_MC 0x0603
|
||||||
#define PCI_CLASS_BRIDGE_PCI 0x0604
|
#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_PCMCIA 0x0605
|
||||||
#define PCI_CLASS_BRIDGE_NUBUS 0x0606
|
#define PCI_CLASS_BRIDGE_NUBUS 0x0606
|
||||||
#define PCI_CLASS_BRIDGE_CARDBUS 0x0607
|
#define PCI_CLASS_BRIDGE_CARDBUS 0x0607
|
||||||
|
Loading…
Reference in New Issue
Block a user