Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 92702df3 authored by Paul Walmsley's avatar Paul Walmsley
Browse files

ARM: OMAP4: PM: fix PM regression introduced by recent clock cleanup

Commit 17b7e7d3 ("ARM: OMAP4:
clock/hwmod data: start to remove some IP block control "clocks"")
introduced a regression preventing the L3INIT clockdomain of OMAP4
systems from entering idle.  This in turn prevented these systems from
entering full chip clock-stop.

The regression was caused by the incorrect removal of a so-called
"optional functional clock" from the OMAP4 clock data.  This wasn't
caught for two reasons.  First, I missed the retention entry failure
in the branch test logs:

http://www.pwsan.com/omap/testlogs/cleanup_a_3.9/20130126014242/pm/4460pandaes/4460pandaes_log.txt



Second, the integration data for the OCP2SCP PHY IP block, added by
commit 0c668875 ("ARM: OMAP4: hwmod
data: add remaining USB-related IP blocks"), should have associated this
clock with the IP block, but did not.

Fix by adding back the so-called "optional" functional clock to the
clock data, and by linking that clock to the OCP2SCP PHY IP block
integration hwmod data.

The problem patch was discovered by J, Keerthy <j-keerthy@ti.com>.

Cc: Keerthy <j-keerthy@ti.com>
Cc: Benoît Cousson <b-cousson@ti.com>
Signed-off-by: default avatarPaul Walmsley <paul@pwsan.com>
parent 092bc089
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -1018,6 +1018,10 @@ DEFINE_CLK_OMAP_MUX(hsmmc2_fclk, "l3_init_clkdm", hsmmc1_fclk_sel,
		    OMAP4430_CM_L3INIT_MMC2_CLKCTRL, OMAP4430_CLKSEL_MASK,
		    hsmmc1_fclk_parents, func_dmic_abe_gfclk_ops);

DEFINE_CLK_GATE(ocp2scp_usb_phy_phy_48m, "func_48m_fclk", &func_48m_fclk, 0x0,
		OMAP4430_CM_L3INIT_USBPHYOCP2SCP_CLKCTRL,
		OMAP4430_OPTFCLKEN_PHY_48M_SHIFT, 0x0, NULL);

DEFINE_CLK_GATE(sha2md5_fck, "l3_div_ck", &l3_div_ck, 0x0,
		OMAP4430_CM_L4SEC_SHA2MD51_CLKCTRL,
		OMAP4430_MODULEMODE_SWCTRL_SHIFT, 0x0, NULL);
@@ -1545,6 +1549,7 @@ static struct omap_clk omap44xx_clks[] = {
	CLK(NULL,	"per_mcbsp4_gfclk",			&per_mcbsp4_gfclk,	CK_443X),
	CLK(NULL,	"hsmmc1_fclk",			&hsmmc1_fclk,	CK_443X),
	CLK(NULL,	"hsmmc2_fclk",			&hsmmc2_fclk,	CK_443X),
	CLK(NULL,	"ocp2scp_usb_phy_phy_48m",	&ocp2scp_usb_phy_phy_48m,	CK_443X),
	CLK(NULL,	"sha2md5_fck",			&sha2md5_fck,	CK_443X),
	CLK(NULL,	"slimbus1_fclk_1",		&slimbus1_fclk_1,	CK_443X),
	CLK(NULL,	"slimbus1_fclk_0",		&slimbus1_fclk_0,	CK_443X),
+6 −0
Original line number Diff line number Diff line
@@ -2714,6 +2714,10 @@ static struct omap_ocp2scp_dev ocp2scp_dev_attr[] = {
	{ }
};

static struct omap_hwmod_opt_clk ocp2scp_usb_phy_opt_clks[] = {
	{ .role = "48mhz", .clk = "ocp2scp_usb_phy_phy_48m" },
};

/* ocp2scp_usb_phy */
static struct omap_hwmod omap44xx_ocp2scp_usb_phy_hwmod = {
	.name		= "ocp2scp_usb_phy",
@@ -2728,6 +2732,8 @@ static struct omap_hwmod omap44xx_ocp2scp_usb_phy_hwmod = {
		},
	},
	.dev_attr	= ocp2scp_dev_attr,
	.opt_clks	= ocp2scp_usb_phy_opt_clks,
	.opt_clks_cnt	= ARRAY_SIZE(ocp2scp_usb_phy_opt_clks),
};

/*