mirror of
https://github.com/torvalds/linux
synced 2024-10-21 02:39:51 +00:00
Merge branch 'pci/brcmstb'
- Add reset_control_rearm() stub for !CONFIG_RESET_CONTROLLER (Jim Quinlan) - Fix use of BCM7216 reset controller (Jim Quinlan) - Use reset/rearm for Broadcom STB pulse reset instead of deassert/assert (Jim Quinlan) * pci/brcmstb: PCI: brcmstb: Use reset/rearm instead of deassert/assert ata: ahci_brcm: Fix use of BCM7216 reset controller reset: add missing empty function reset_control_rearm()
This commit is contained in:
commit
a147995c9f
|
@ -86,7 +86,8 @@ struct brcm_ahci_priv {
|
|||
u32 port_mask;
|
||||
u32 quirks;
|
||||
enum brcm_ahci_version version;
|
||||
struct reset_control *rcdev;
|
||||
struct reset_control *rcdev_rescal;
|
||||
struct reset_control *rcdev_ahci;
|
||||
};
|
||||
|
||||
static inline u32 brcm_sata_readreg(void __iomem *addr)
|
||||
|
@ -352,8 +353,8 @@ static int brcm_ahci_suspend(struct device *dev)
|
|||
else
|
||||
ret = 0;
|
||||
|
||||
if (priv->version != BRCM_SATA_BCM7216)
|
||||
reset_control_assert(priv->rcdev);
|
||||
reset_control_assert(priv->rcdev_ahci);
|
||||
reset_control_rearm(priv->rcdev_rescal);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -365,10 +366,10 @@ static int __maybe_unused brcm_ahci_resume(struct device *dev)
|
|||
struct brcm_ahci_priv *priv = hpriv->plat_data;
|
||||
int ret = 0;
|
||||
|
||||
if (priv->version == BRCM_SATA_BCM7216)
|
||||
ret = reset_control_reset(priv->rcdev);
|
||||
else
|
||||
ret = reset_control_deassert(priv->rcdev);
|
||||
ret = reset_control_deassert(priv->rcdev_ahci);
|
||||
if (ret)
|
||||
return ret;
|
||||
ret = reset_control_reset(priv->rcdev_rescal);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
@ -434,7 +435,6 @@ static int brcm_ahci_probe(struct platform_device *pdev)
|
|||
{
|
||||
const struct of_device_id *of_id;
|
||||
struct device *dev = &pdev->dev;
|
||||
const char *reset_name = NULL;
|
||||
struct brcm_ahci_priv *priv;
|
||||
struct ahci_host_priv *hpriv;
|
||||
struct resource *res;
|
||||
|
@ -456,15 +456,15 @@ static int brcm_ahci_probe(struct platform_device *pdev)
|
|||
if (IS_ERR(priv->top_ctrl))
|
||||
return PTR_ERR(priv->top_ctrl);
|
||||
|
||||
/* Reset is optional depending on platform and named differently */
|
||||
if (priv->version == BRCM_SATA_BCM7216)
|
||||
reset_name = "rescal";
|
||||
else
|
||||
reset_name = "ahci";
|
||||
|
||||
priv->rcdev = devm_reset_control_get_optional(&pdev->dev, reset_name);
|
||||
if (IS_ERR(priv->rcdev))
|
||||
return PTR_ERR(priv->rcdev);
|
||||
if (priv->version == BRCM_SATA_BCM7216) {
|
||||
priv->rcdev_rescal = devm_reset_control_get_optional_shared(
|
||||
&pdev->dev, "rescal");
|
||||
if (IS_ERR(priv->rcdev_rescal))
|
||||
return PTR_ERR(priv->rcdev_rescal);
|
||||
}
|
||||
priv->rcdev_ahci = devm_reset_control_get_optional(&pdev->dev, "ahci");
|
||||
if (IS_ERR(priv->rcdev_ahci))
|
||||
return PTR_ERR(priv->rcdev_ahci);
|
||||
|
||||
hpriv = ahci_platform_get_resources(pdev, 0);
|
||||
if (IS_ERR(hpriv))
|
||||
|
@ -485,10 +485,10 @@ static int brcm_ahci_probe(struct platform_device *pdev)
|
|||
break;
|
||||
}
|
||||
|
||||
if (priv->version == BRCM_SATA_BCM7216)
|
||||
ret = reset_control_reset(priv->rcdev);
|
||||
else
|
||||
ret = reset_control_deassert(priv->rcdev);
|
||||
ret = reset_control_reset(priv->rcdev_rescal);
|
||||
if (ret)
|
||||
return ret;
|
||||
ret = reset_control_deassert(priv->rcdev_ahci);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
@ -539,8 +539,8 @@ static int brcm_ahci_probe(struct platform_device *pdev)
|
|||
out_disable_clks:
|
||||
ahci_platform_disable_clks(hpriv);
|
||||
out_reset:
|
||||
if (priv->version != BRCM_SATA_BCM7216)
|
||||
reset_control_assert(priv->rcdev);
|
||||
reset_control_assert(priv->rcdev_ahci);
|
||||
reset_control_rearm(priv->rcdev_rescal);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -1148,6 +1148,7 @@ static int brcm_pcie_suspend(struct device *dev)
|
|||
|
||||
brcm_pcie_turn_off(pcie);
|
||||
ret = brcm_phy_stop(pcie);
|
||||
reset_control_rearm(pcie->rescal);
|
||||
clk_disable_unprepare(pcie->clk);
|
||||
|
||||
return ret;
|
||||
|
@ -1163,9 +1164,13 @@ static int brcm_pcie_resume(struct device *dev)
|
|||
base = pcie->base;
|
||||
clk_prepare_enable(pcie->clk);
|
||||
|
||||
ret = reset_control_reset(pcie->rescal);
|
||||
if (ret)
|
||||
goto err_disable_clk;
|
||||
|
||||
ret = brcm_phy_start(pcie);
|
||||
if (ret)
|
||||
goto err;
|
||||
goto err_reset;
|
||||
|
||||
/* Take bridge out of reset so we can access the SERDES reg */
|
||||
pcie->bridge_sw_init_set(pcie, 0);
|
||||
|
@ -1180,14 +1185,16 @@ static int brcm_pcie_resume(struct device *dev)
|
|||
|
||||
ret = brcm_pcie_setup(pcie);
|
||||
if (ret)
|
||||
goto err;
|
||||
goto err_reset;
|
||||
|
||||
if (pcie->msi)
|
||||
brcm_msi_set_regs(pcie->msi);
|
||||
|
||||
return 0;
|
||||
|
||||
err:
|
||||
err_reset:
|
||||
reset_control_rearm(pcie->rescal);
|
||||
err_disable_clk:
|
||||
clk_disable_unprepare(pcie->clk);
|
||||
return ret;
|
||||
}
|
||||
|
@ -1197,7 +1204,7 @@ static void __brcm_pcie_remove(struct brcm_pcie *pcie)
|
|||
brcm_msi_remove(pcie);
|
||||
brcm_pcie_turn_off(pcie);
|
||||
brcm_phy_stop(pcie);
|
||||
reset_control_assert(pcie->rescal);
|
||||
reset_control_rearm(pcie->rescal);
|
||||
clk_disable_unprepare(pcie->clk);
|
||||
}
|
||||
|
||||
|
@ -1278,13 +1285,13 @@ static int brcm_pcie_probe(struct platform_device *pdev)
|
|||
return PTR_ERR(pcie->perst_reset);
|
||||
}
|
||||
|
||||
ret = reset_control_deassert(pcie->rescal);
|
||||
ret = reset_control_reset(pcie->rescal);
|
||||
if (ret)
|
||||
dev_err(&pdev->dev, "failed to deassert 'rescal'\n");
|
||||
|
||||
ret = brcm_phy_start(pcie);
|
||||
if (ret) {
|
||||
reset_control_assert(pcie->rescal);
|
||||
reset_control_rearm(pcie->rescal);
|
||||
clk_disable_unprepare(pcie->clk);
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -47,6 +47,11 @@ static inline int reset_control_reset(struct reset_control *rstc)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static inline int reset_control_rearm(struct reset_control *rstc)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int reset_control_assert(struct reset_control *rstc)
|
||||
{
|
||||
return 0;
|
||||
|
|
Loading…
Reference in a new issue