pci: brcmstb: Cleanup controller state before handover
Make sure we handover the PCIe controller in a clean state. Some of the devices hanging from the PCIe bus might need to be properly reset through #PERST in order for Linux to be able to initialize them. This is specially important in order to properly initialize Raspberry Pi 4 B and 400's USB chip. Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de> Signed-off-by: Matthias Brugger <mbrugger@suse.com>
This commit is contained in:
parent
e3bbc1f74e
commit
85f3fddbcc
@ -579,6 +579,24 @@ static int brcm_pcie_probe(struct udevice *dev)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int brcm_pcie_remove(struct udevice *dev)
|
||||||
|
{
|
||||||
|
struct brcm_pcie *pcie = dev_get_priv(dev);
|
||||||
|
void __iomem *base = pcie->base;
|
||||||
|
|
||||||
|
/* Assert fundamental reset */
|
||||||
|
setbits_le32(base + PCIE_RGR1_SW_INIT_1, RGR1_SW_INIT_1_PERST_MASK);
|
||||||
|
|
||||||
|
/* Turn off SerDes */
|
||||||
|
setbits_le32(base + PCIE_MISC_HARD_PCIE_HARD_DEBUG,
|
||||||
|
PCIE_HARD_DEBUG_SERDES_IDDQ_MASK);
|
||||||
|
|
||||||
|
/* Shutdown bridge */
|
||||||
|
setbits_le32(base + PCIE_RGR1_SW_INIT_1, RGR1_SW_INIT_1_INIT_MASK);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int brcm_pcie_of_to_plat(struct udevice *dev)
|
static int brcm_pcie_of_to_plat(struct udevice *dev)
|
||||||
{
|
{
|
||||||
struct brcm_pcie *pcie = dev_get_priv(dev);
|
struct brcm_pcie *pcie = dev_get_priv(dev);
|
||||||
@ -618,6 +636,8 @@ U_BOOT_DRIVER(pcie_brcm_base) = {
|
|||||||
.ops = &brcm_pcie_ops,
|
.ops = &brcm_pcie_ops,
|
||||||
.of_match = brcm_pcie_ids,
|
.of_match = brcm_pcie_ids,
|
||||||
.probe = brcm_pcie_probe,
|
.probe = brcm_pcie_probe,
|
||||||
|
.remove = brcm_pcie_remove,
|
||||||
.of_to_plat = brcm_pcie_of_to_plat,
|
.of_to_plat = brcm_pcie_of_to_plat,
|
||||||
.priv_auto = sizeof(struct brcm_pcie),
|
.priv_auto = sizeof(struct brcm_pcie),
|
||||||
|
.flags = DM_FLAG_OS_PREPARE,
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user