Skip to content

Commit a147995

Browse files
committed
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()
2 parents a4ffbb7 + bb61075 commit a147995

File tree

3 files changed

+41
-29
lines changed

3 files changed

+41
-29
lines changed

drivers/ata/ahci_brcm.c

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,8 @@ struct brcm_ahci_priv {
8686
u32 port_mask;
8787
u32 quirks;
8888
enum brcm_ahci_version version;
89-
struct reset_control *rcdev;
89+
struct reset_control *rcdev_rescal;
90+
struct reset_control *rcdev_ahci;
9091
};
9192

9293
static inline u32 brcm_sata_readreg(void __iomem *addr)
@@ -352,8 +353,8 @@ static int brcm_ahci_suspend(struct device *dev)
352353
else
353354
ret = 0;
354355

355-
if (priv->version != BRCM_SATA_BCM7216)
356-
reset_control_assert(priv->rcdev);
356+
reset_control_assert(priv->rcdev_ahci);
357+
reset_control_rearm(priv->rcdev_rescal);
357358

358359
return ret;
359360
}
@@ -365,10 +366,10 @@ static int __maybe_unused brcm_ahci_resume(struct device *dev)
365366
struct brcm_ahci_priv *priv = hpriv->plat_data;
366367
int ret = 0;
367368

368-
if (priv->version == BRCM_SATA_BCM7216)
369-
ret = reset_control_reset(priv->rcdev);
370-
else
371-
ret = reset_control_deassert(priv->rcdev);
369+
ret = reset_control_deassert(priv->rcdev_ahci);
370+
if (ret)
371+
return ret;
372+
ret = reset_control_reset(priv->rcdev_rescal);
372373
if (ret)
373374
return ret;
374375

@@ -434,7 +435,6 @@ static int brcm_ahci_probe(struct platform_device *pdev)
434435
{
435436
const struct of_device_id *of_id;
436437
struct device *dev = &pdev->dev;
437-
const char *reset_name = NULL;
438438
struct brcm_ahci_priv *priv;
439439
struct ahci_host_priv *hpriv;
440440
struct resource *res;
@@ -456,15 +456,15 @@ static int brcm_ahci_probe(struct platform_device *pdev)
456456
if (IS_ERR(priv->top_ctrl))
457457
return PTR_ERR(priv->top_ctrl);
458458

459-
/* Reset is optional depending on platform and named differently */
460-
if (priv->version == BRCM_SATA_BCM7216)
461-
reset_name = "rescal";
462-
else
463-
reset_name = "ahci";
464-
465-
priv->rcdev = devm_reset_control_get_optional(&pdev->dev, reset_name);
466-
if (IS_ERR(priv->rcdev))
467-
return PTR_ERR(priv->rcdev);
459+
if (priv->version == BRCM_SATA_BCM7216) {
460+
priv->rcdev_rescal = devm_reset_control_get_optional_shared(
461+
&pdev->dev, "rescal");
462+
if (IS_ERR(priv->rcdev_rescal))
463+
return PTR_ERR(priv->rcdev_rescal);
464+
}
465+
priv->rcdev_ahci = devm_reset_control_get_optional(&pdev->dev, "ahci");
466+
if (IS_ERR(priv->rcdev_ahci))
467+
return PTR_ERR(priv->rcdev_ahci);
468468

469469
hpriv = ahci_platform_get_resources(pdev, 0);
470470
if (IS_ERR(hpriv))
@@ -485,10 +485,10 @@ static int brcm_ahci_probe(struct platform_device *pdev)
485485
break;
486486
}
487487

488-
if (priv->version == BRCM_SATA_BCM7216)
489-
ret = reset_control_reset(priv->rcdev);
490-
else
491-
ret = reset_control_deassert(priv->rcdev);
488+
ret = reset_control_reset(priv->rcdev_rescal);
489+
if (ret)
490+
return ret;
491+
ret = reset_control_deassert(priv->rcdev_ahci);
492492
if (ret)
493493
return ret;
494494

@@ -539,8 +539,8 @@ static int brcm_ahci_probe(struct platform_device *pdev)
539539
out_disable_clks:
540540
ahci_platform_disable_clks(hpriv);
541541
out_reset:
542-
if (priv->version != BRCM_SATA_BCM7216)
543-
reset_control_assert(priv->rcdev);
542+
reset_control_assert(priv->rcdev_ahci);
543+
reset_control_rearm(priv->rcdev_rescal);
544544
return ret;
545545
}
546546

drivers/pci/controller/pcie-brcmstb.c

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1148,6 +1148,7 @@ static int brcm_pcie_suspend(struct device *dev)
11481148

11491149
brcm_pcie_turn_off(pcie);
11501150
ret = brcm_phy_stop(pcie);
1151+
reset_control_rearm(pcie->rescal);
11511152
clk_disable_unprepare(pcie->clk);
11521153

11531154
return ret;
@@ -1163,9 +1164,13 @@ static int brcm_pcie_resume(struct device *dev)
11631164
base = pcie->base;
11641165
clk_prepare_enable(pcie->clk);
11651166

1167+
ret = reset_control_reset(pcie->rescal);
1168+
if (ret)
1169+
goto err_disable_clk;
1170+
11661171
ret = brcm_phy_start(pcie);
11671172
if (ret)
1168-
goto err;
1173+
goto err_reset;
11691174

11701175
/* Take bridge out of reset so we can access the SERDES reg */
11711176
pcie->bridge_sw_init_set(pcie, 0);
@@ -1180,14 +1185,16 @@ static int brcm_pcie_resume(struct device *dev)
11801185

11811186
ret = brcm_pcie_setup(pcie);
11821187
if (ret)
1183-
goto err;
1188+
goto err_reset;
11841189

11851190
if (pcie->msi)
11861191
brcm_msi_set_regs(pcie->msi);
11871192

11881193
return 0;
11891194

1190-
err:
1195+
err_reset:
1196+
reset_control_rearm(pcie->rescal);
1197+
err_disable_clk:
11911198
clk_disable_unprepare(pcie->clk);
11921199
return ret;
11931200
}
@@ -1197,7 +1204,7 @@ static void __brcm_pcie_remove(struct brcm_pcie *pcie)
11971204
brcm_msi_remove(pcie);
11981205
brcm_pcie_turn_off(pcie);
11991206
brcm_phy_stop(pcie);
1200-
reset_control_assert(pcie->rescal);
1207+
reset_control_rearm(pcie->rescal);
12011208
clk_disable_unprepare(pcie->clk);
12021209
}
12031210

@@ -1278,13 +1285,13 @@ static int brcm_pcie_probe(struct platform_device *pdev)
12781285
return PTR_ERR(pcie->perst_reset);
12791286
}
12801287

1281-
ret = reset_control_deassert(pcie->rescal);
1288+
ret = reset_control_reset(pcie->rescal);
12821289
if (ret)
12831290
dev_err(&pdev->dev, "failed to deassert 'rescal'\n");
12841291

12851292
ret = brcm_phy_start(pcie);
12861293
if (ret) {
1287-
reset_control_assert(pcie->rescal);
1294+
reset_control_rearm(pcie->rescal);
12881295
clk_disable_unprepare(pcie->clk);
12891296
return ret;
12901297
}

include/linux/reset.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ static inline int reset_control_reset(struct reset_control *rstc)
4747
return 0;
4848
}
4949

50+
static inline int reset_control_rearm(struct reset_control *rstc)
51+
{
52+
return 0;
53+
}
54+
5055
static inline int reset_control_assert(struct reset_control *rstc)
5156
{
5257
return 0;

0 commit comments

Comments
 (0)