mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-21 20:34:38 +00:00
pci: mediatek: add support for multiple ports in mediatek pcie gen3 driver
One MediaTek PCIe Gen3 controller has only one port, where PCI bus 0 on this port represents the controller itself and bus 1 represents the external PCIe device. If multiple PCIe controllers are probed in U-Boot, U-Boot will use bus numbers greater than 2 as input parameters. Therefore, we should convert the BDF bus number to either 0 or 1 by subtracting the offset by controller->seq_. Signed-off-by: Sam Shih <sam.shih@mediatek.com> Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
This commit is contained in:
parent
7071ba2658
commit
dfbadb86b3
1 changed files with 24 additions and 0 deletions
|
@ -83,6 +83,28 @@ struct mtk_pcie {
|
||||||
struct phy phy;
|
struct phy phy;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static pci_dev_t convert_bdf(const struct udevice *controller, pci_dev_t bdf)
|
||||||
|
{
|
||||||
|
int bdfs[3];
|
||||||
|
|
||||||
|
bdfs[0] = PCI_BUS(bdf);
|
||||||
|
bdfs[1] = PCI_DEV(bdf);
|
||||||
|
bdfs[2] = PCI_FUNC(bdf);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* One MediaTek PCIe Gen3 controller has only one port, where PCI bus 0 on
|
||||||
|
* this port represents the controller itself and bus 1 represents the
|
||||||
|
* external PCIe device. If multiple PCIe controllers are probed in U-Boot,
|
||||||
|
* U-Boot will use bus numbers greater than 2 as input parameters. Therefore,
|
||||||
|
* we should convert the BDF bus number to either 0 or 1 by subtracting the
|
||||||
|
* offset by controller->seq_
|
||||||
|
*/
|
||||||
|
|
||||||
|
bdfs[0] = bdfs[0] - controller->seq_;
|
||||||
|
|
||||||
|
return PCI_BDF(bdfs[0], bdfs[1], bdfs[2]);
|
||||||
|
}
|
||||||
|
|
||||||
static void mtk_pcie_config_tlp_header(const struct udevice *bus,
|
static void mtk_pcie_config_tlp_header(const struct udevice *bus,
|
||||||
pci_dev_t devfn,
|
pci_dev_t devfn,
|
||||||
int where, int size)
|
int where, int size)
|
||||||
|
@ -91,6 +113,8 @@ static void mtk_pcie_config_tlp_header(const struct udevice *bus,
|
||||||
int bytes;
|
int bytes;
|
||||||
u32 val;
|
u32 val;
|
||||||
|
|
||||||
|
devfn = convert_bdf(bus, devfn);
|
||||||
|
|
||||||
size = 1 << size;
|
size = 1 << size;
|
||||||
bytes = (GENMASK(size - 1, 0) & 0xf) << (where & 0x3);
|
bytes = (GENMASK(size - 1, 0) & 0xf) << (where & 0x3);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue