Re: [PATCH 6/6] OMAP2+: hwmod: Fix the HW reset management

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



One quick comment here:

On Thu, 23 Jun 2011, Benoit Cousson wrote:

> The HW reset must be de-assert after the clocks are enabled
> but before waiting for the target to be ready. Otherwise the
> reset might not work properly since the clock is not running
> to proceed the reset.
> 
> De-assert the reset after _enable_clocks and before
> _wait_target_ready.
> Re-assert it only when the clocks are disabled.
> 
> Signed-off-by: Benoit Cousson <b-cousson@xxxxxx>
> Cc: Paul Walmsley <paul@xxxxxxxxx>
> ---
>  arch/arm/mach-omap2/omap_hwmod.c |   32 ++++++++++++++++----------------
>  1 files changed, 16 insertions(+), 16 deletions(-)
> 
> diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c
> index f401417..55ad6a5 100644
> --- a/arch/arm/mach-omap2/omap_hwmod.c
> +++ b/arch/arm/mach-omap2/omap_hwmod.c
> @@ -1250,15 +1250,6 @@ static int _enable(struct omap_hwmod *oh)
>  
>  	pr_debug("omap_hwmod: %s: enabling\n", oh->name);
>  
> -	/*
> -	 * If an IP contains only one HW reset line, then de-assert it in order
> -	 * to allow to enable the clocks. Otherwise the PRCM will return
> -	 * Intransition status, and the init will failed.
> -	 */
> -	if ((oh->_state == _HWMOD_STATE_INITIALIZED ||
> -	     oh->_state == _HWMOD_STATE_DISABLED) && oh->rst_lines_cnt == 1)
> -		_deassert_hardreset(oh, oh->rst_lines[0].name);
> -
>  	/* Mux pins for device runtime if populated */
>  	if (oh->mux && (!oh->mux->enabled ||
>  			((oh->_state == _HWMOD_STATE_IDLE) &&
> @@ -1268,6 +1259,15 @@ static int _enable(struct omap_hwmod *oh)
>  	_add_initiator_dep(oh, mpu_oh);
>  	_enable_clocks(oh);
>  
> +	/*
> +	 * If an IP contains only one HW reset line, then de-assert it in order
> +	 * to allow to enable the clocks. Otherwise the PRCM will return
> +	 * Intransition status, and the init will failed.
> +	 */

Please update this comment, this doesn't make sense any more...

> +	if ((oh->_state == _HWMOD_STATE_INITIALIZED ||
> +	     oh->_state == _HWMOD_STATE_DISABLED) && oh->rst_lines_cnt == 1)
> +		_deassert_hardreset(oh, oh->rst_lines[0].name);
> +
>  	r = _wait_target_ready(oh);
>  	if (!r) {
>  		oh->_state = _HWMOD_STATE_ENABLED;
> @@ -1396,13 +1396,6 @@ static int _shutdown(struct omap_hwmod *oh)
>  		_shutdown_sysc(oh);
>  	}
>  
> -	/*
> -	 * If an IP contains only one HW reset line, then assert it
> -	 * before disabling the clocks and shutting down the IP.
> -	 */
> -	if (oh->rst_lines_cnt == 1)
> -		_assert_hardreset(oh, oh->rst_lines[0].name);
> -
>  	/* clocks and deps are already disabled in idle */
>  	if (oh->_state == _HWMOD_STATE_ENABLED) {
>  		_del_initiator_dep(oh, mpu_oh);
> @@ -1411,6 +1404,13 @@ static int _shutdown(struct omap_hwmod *oh)
>  	}
>  	/* XXX Should this code also force-disable the optional clocks? */
>  
> +	/*
> +	 * If an IP contains only one HW reset line, then assert it
> +	 * before disabling the clocks and shutting down the IP.
> +	 */

And this one too.

> +	if (oh->rst_lines_cnt == 1)
> +		_assert_hardreset(oh, oh->rst_lines[0].name);
> +
>  	/* Mux pins to safe mode or use populated off mode values */
>  	if (oh->mux)
>  		omap_hwmod_mux(oh->mux, _HWMOD_STATE_DISABLED);
> -- 
> 1.7.0.4
> 


- Paul
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux