Re: beaglebone black boot failure Linux v5.15.rc1

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

 



Hi Matti, Tony,

On 9/21/21 2:47 AM, Tony Lindgren wrote:
> * Matti Vaittinen <mazziesaccount@xxxxxxxxx> [210920 08:23]:
>> Finally, adding the udelay(100); (as Tony suggested) at the end of the
>> omap_reset_deassert() did make the oops go away even when pruss_tm was
>> enabled. I don't know what would be a proper fix though.

I have been able to boot v5.15-rc1 just fine on my BBB without any additional
changes [1].

May I ask what is your BBB board version? My board is rev.A5C.

I vaguely remember from all those years ago when I first enabled PRUSS on AM335x
that some earlier BBB versions had some issues around PRUSS.

regards
Suman

[1] https://marc.info/?l=linux-omap&m=163223991005545&w=2

> 
> The following patch works for me on bbb with the following test script:
> 
> #!/bin/sh
> 
> module="4a326000.target-module"
> driver="/sys/bus/platform/drivers/ti-sysc"
> 
> while true; do
> 	echo ${module} > ${driver}/bind
> 	echo ${module} > ${driver}/unbind
> done
> 
> It also allows leaving out the udelay for dra7 iva reset. Care to try
> this and see if it helps?
> 
> Regards,
> 
> Tony
> 
> 8< -----------------
> diff --git a/drivers/soc/ti/omap_prm.c b/drivers/soc/ti/omap_prm.c
> --- a/drivers/soc/ti/omap_prm.c
> +++ b/drivers/soc/ti/omap_prm.c
> @@ -825,26 +825,29 @@ static int omap_reset_deassert(struct reset_controller_dev *rcdev,
>  	writel_relaxed(v, reset->prm->base + reset->prm->data->rstctrl);
>  	spin_unlock_irqrestore(&reset->lock, flags);
>  
> -	if (!has_rstst)
> -		goto exit;
> -
> -	/* wait for the status to be set */
> -	ret = readl_relaxed_poll_timeout_atomic(reset->prm->base +
> +	if (has_rstst) {
> +		/* wait for the status to be set */
> +		ret = readl_relaxed_poll_timeout_atomic(reset->prm->base +
>  						 reset->prm->data->rstst,
>  						 v, v & BIT(st_bit), 1,
>  						 OMAP_RESET_MAX_WAIT);
> -	if (ret)
> -		pr_err("%s: timedout waiting for %s:%lu\n", __func__,
> -		       reset->prm->data->name, id);
> -
> -exit:
> -	if (reset->clkdm) {
> -		/* At least dra7 iva needs a delay before clkdm idle */
> -		if (has_rstst)
> -			udelay(1);
> -		pdata->clkdm_allow_idle(reset->clkdm);
> +		if (ret)
> +			pr_err("%s: timedout waiting for %s:%lu\n", __func__,
> +			       reset->prm->data->name, id);
> +	} else {
> +		/* wait for the reset bit to cleaar */
> +		ret = readl_relaxed_poll_timeout_atomic(reset->prm->base +
> +						reset->prm->data->rstctrl,
> +						v, !(v & BIT(id)), 1,
> +						OMAP_RESET_MAX_WAIT);
> +		if (ret)
> +			pr_err("%s: timedout waiting for %s:%lu\n", __func__,
> +			       reset->prm->data->name, id);
>  	}
>  
> +	if (reset->clkdm)
> +		pdata->clkdm_allow_idle(reset->clkdm);
> +
>  	return ret;
>  }
>  
> 




[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