mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-07 13:43:51 +00:00
PCI: brcmstb: Use swinit reset if available
The 7712 SoC adds a software init reset device for the PCIe HW. If found in the DT node, use it. Link: https://lore.kernel.org/linux-pci/20240815225731.40276-7-james.quinlan@broadcom.com Signed-off-by: Jim Quinlan <james.quinlan@broadcom.com> Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org> Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com> Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
This commit is contained in:
parent
46cb27f671
commit
8201360218
@ -266,6 +266,7 @@ struct brcm_pcie {
|
||||
struct reset_control *rescal;
|
||||
struct reset_control *perst_reset;
|
||||
struct reset_control *bridge_reset;
|
||||
struct reset_control *swinit_reset;
|
||||
int num_memc;
|
||||
u64 memc_size[PCIE_BRCM_MAX_MEMC];
|
||||
u32 hw_rev;
|
||||
@ -1635,12 +1636,35 @@ static int brcm_pcie_probe(struct platform_device *pdev)
|
||||
if (IS_ERR(pcie->bridge_reset))
|
||||
return PTR_ERR(pcie->bridge_reset);
|
||||
|
||||
pcie->swinit_reset = devm_reset_control_get_optional_exclusive(&pdev->dev, "swinit");
|
||||
if (IS_ERR(pcie->swinit_reset))
|
||||
return PTR_ERR(pcie->swinit_reset);
|
||||
|
||||
ret = clk_prepare_enable(pcie->clk);
|
||||
if (ret)
|
||||
return dev_err_probe(&pdev->dev, ret, "could not enable clock\n");
|
||||
|
||||
pcie->bridge_sw_init_set(pcie, 0);
|
||||
|
||||
if (pcie->swinit_reset) {
|
||||
ret = reset_control_assert(pcie->swinit_reset);
|
||||
if (ret) {
|
||||
clk_disable_unprepare(pcie->clk);
|
||||
return dev_err_probe(&pdev->dev, ret,
|
||||
"could not assert reset 'swinit'\n");
|
||||
}
|
||||
|
||||
/* HW team recommends 1us for proper sync and propagation of reset */
|
||||
udelay(1);
|
||||
|
||||
ret = reset_control_deassert(pcie->swinit_reset);
|
||||
if (ret) {
|
||||
clk_disable_unprepare(pcie->clk);
|
||||
return dev_err_probe(&pdev->dev, ret,
|
||||
"could not de-assert reset 'swinit'\n");
|
||||
}
|
||||
}
|
||||
|
||||
ret = reset_control_reset(pcie->rescal);
|
||||
if (ret) {
|
||||
clk_disable_unprepare(pcie->clk);
|
||||
|
Loading…
Reference in New Issue
Block a user