aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mach-omap2/omap_hwmod_7xx_data.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/omap_hwmod_7xx_data.c b/arch/arm/mach-omap2/omap_hwmod_7xx_data.c
index b61355e2a771..252b74633e31 100644
--- a/arch/arm/mach-omap2/omap_hwmod_7xx_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_7xx_data.c
@@ -1526,8 +1526,31 @@ static struct omap_hwmod dra7xx_ocp2scp3_hwmod = {
1526 * 1526 *
1527 */ 1527 */
1528 1528
1529/*
1530 * As noted in documentation for _reset() in omap_hwmod.c, the stock reset
1531 * functionality of OMAP HWMOD layer does not deassert the hardreset lines
1532 * associated with an IP automatically leaving the driver to handle that
1533 * by itself. This does not work for PCIeSS which needs the reset lines
1534 * deasserted for the driver to start accessing registers.
1535 *
1536 * We use a PCIeSS HWMOD class specific reset handler to deassert the hardreset
1537 * lines after asserting them.
1538 */
1539static int dra7xx_pciess_reset(struct omap_hwmod *oh)
1540{
1541 int i;
1542
1543 for (i = 0; i < oh->rst_lines_cnt; i++) {
1544 omap_hwmod_assert_hardreset(oh, oh->rst_lines[i].name);
1545 omap_hwmod_deassert_hardreset(oh, oh->rst_lines[i].name);
1546 }
1547
1548 return 0;
1549}
1550
1529static struct omap_hwmod_class dra7xx_pciess_hwmod_class = { 1551static struct omap_hwmod_class dra7xx_pciess_hwmod_class = {
1530 .name = "pcie", 1552 .name = "pcie",
1553 .reset = dra7xx_pciess_reset,
1531}; 1554};
1532 1555
1533/* pcie1 */ 1556/* pcie1 */