lkml.org 
[lkml]   [2021]   [Sep]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: beaglebone black boot failure Linux v5.15.rc1
    From
    Date
    Hi Matti, Tony,

    On 9/21/21 2:47 AM, Tony Lindgren wrote:
    > * Matti Vaittinen <mazziesaccount@gmail.com> [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;
    > }
    >
    >

    \
     
     \ /
      Last update: 2021-09-21 18:08    [W:2.554 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site