All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Manuel Luís Reis" <mluis.reis@gmail.com>
To: u-boot@lists.denx.de
Subject: SAMA5D3 Xplained: SPL broken after panic added to /lib/time.c:94
Date: Mon, 5 Apr 2021 18:50:22 +0100	[thread overview]
Message-ID: <CAJYnj0gEuvj8qyF3qrEt4kBYL=Xgcw16V-YJy5SeyHkJ3=DVog@mail.gmail.com> (raw)
In-Reply-To: <9b1a2cbd-1c43-e27b-d48f-01b6fd1ea65c@microchip.com>

> Okay, I am glad that you somehow found a solution.
> I am not sure why the ddr2_init call to udelay fails. Maybe we should
> initialize something (timer) before calling ddr2_init ?
> Or timers are initialized just after ddr2 , in which case we need to
> revert the order ?

I don't really understand how the timer gets initiated. Doesn't the
UCLASS framework handle it?  It does seem to be after board_init_f.
There is an option to make it available early, but it doesn't seem to
be implemented for this board. Maybe Claudiu can give a few pointers?
If I get some free time I'll try to dig further on this topic.

> To make a proper review, please use 'git send-email' command to send
> your patch , not attach it to the email here.
>
> If you modify the device tree, and some other code, you need to have two
> separate patches.
> each patch has to adhere to the subject rule : subsystem: component:
> change ...
>
> Check other commits in the area you are committing to see how they look like

Got it. Thanks.

I have sent the first patch for the device tree, but didn't go quite
as planned. Let me know. if there is a need to correct anything.

Cheers

On Mon, 5 Apr 2021 at 17:00, <Eugen.Hristev@microchip.com> wrote:
>
> On 4/5/21 6:42 PM, Manuel Lu?s Reis wrote:
>
> > Hi Eugen,
> >
> >  > Does the node have the property
> >  >
> >  > u-boot,dm-pre-reloc;
> >  >
> >  > Maybe try to add this and see if it changes anything ?
> >
> > Thanks. Indeed it didn't have those properties. I have added them and
> > also had to remove the udelay call in ddr2_init for the fix to work.
> > The udelay call in ddr2_init was also failing (maybe too early for a
> > timer call!?), but it seems to be redundant as it sits between two nops,
> > and is working well as far as I can tell. If extra time is needed in
> > that place, maybe extra NOPs could be considered instead.
> >
> > I am sending a patch for the fix. Could you review it please?
>
> Okay, I am glad that you somehow found a solution.
> I am not sure why the ddr2_init call to udelay fails. Maybe we should
> initialize something (timer) before calling ddr2_init ?
> Or timers are initialized just after ddr2 , in which case we need to
> revert the order ?
>
> To make a proper review, please use 'git send-email' command to send
> your patch , not attach it to the email here.
>
> If you modify the device tree, and some other code, you need to have two
> separate patches.
> each patch has to adhere to the subject rule : subsystem: component:
> change ...
>
> Check other commits in the area you are committing to see how they look like
>
> >
> > Let me know if you'd like me to change anything.
> >
> > Thanks again,
> > --------------------------------------------------------------------------------------------------------
> >
> >
> >  From cff45e15a96facc702c852a9beff27907b2c92e5 Mon Sep 17 00:00:00 2001
> > From: Manuel Reis <mluis.reis at gmail.com <mailto:mluis.reis@gmail.com>>
> > Date: Mon, 5 Apr 2021 16:31:38 +0100
> > Subject: [PATCH] add u-boot properties to pit timer
> >
> > timer node was not detected when udelay was used.
> > udelay call removed from ddr2_init as: it sits between two NOP;
> >
> > Signed-off-by: Manuel Reis <mluis.reis@gmail.com
> > <mailto:mluis.reis@gmail.com>>
> > ---
> >   arch/arm/dts/sama5d3.dtsi   | 1 +
> >   arch/arm/mach-at91/mpddrc.c | 3 ---
> >   2 files changed, 1 insertion(+), 3 deletions(-)
> >
> > diff --git a/arch/arm/dts/sama5d3.dtsi b/arch/arm/dts/sama5d3.dtsi
> > index 6ed218eaad..3cd30d574d 100644
> > --- a/arch/arm/dts/sama5d3.dtsi
> > +++ b/arch/arm/dts/sama5d3.dtsi
> > @@ -1316,6 +1316,7 @@
> >                          };
> >
> >                          pit: timer at fffffe30 {
> > +                               u-boot,dm-pre-reloc;
> >                                  compatible = "atmel,at91sam9260-pit";
> >                                  reg = <0xfffffe30 0xf>;
> >                                  interrupts = <3 IRQ_TYPE_LEVEL_HIGH 5>;
> > diff --git a/arch/arm/mach-at91/mpddrc.c b/arch/arm/mach-at91/mpddrc.c
> > index 5422c05456..2e52595e30 100644
> > --- a/arch/arm/mach-at91/mpddrc.c
> > +++ b/arch/arm/mach-at91/mpddrc.c
> > @@ -66,9 +66,6 @@ int ddr2_init(const unsigned int base,
> >          /* Issue a NOP command */
> >          atmel_mpddr_op(mpddr, ATMEL_MPDDRC_MR_MODE_NOP_CMD, ram_address);
> >
> > -       /* A 200 us is provided to precede any signal toggle */
> > -       udelay(200);
> > -
> >          /* Issue a NOP command */
> >          atmel_mpddr_op(mpddr, ATMEL_MPDDRC_MR_MODE_NOP_CMD, ram_address);
> >
> > --
> > 2.27.0
> >
> >
> >
> >
> >
> >
> >
> > On Mon, 5 Apr 2021 at 14:58, <Eugen.Hristev@microchip.com
> > <mailto:Eugen.Hristev@microchip.com>> wrote:
> >
> >     On 4/5/21 3:47 PM, Manuel Lu?s Reis wrote:
> >      > Hi Eugen,
> >      >
> >      >>   As Sean Anderson pointed out : the call to timer must have not
> >     worked at
> >      >> all before this change that now breaks things.
> >      >> Have you tried removing the call to the timer from this
> >     mem_init, to see
> >      >> if this makes the board boot correctly ?
> >      >>
> >      >> In mem_init I guess there are multiple calls to this timer function.
> >      >
> >      > Indeed I have. After my previous emails trying to find if there was
> >      > anything messing with the timer, I went the other way and dug further
> >      > into mem_init and ddr2_init. In ddr2_init there is a call to udelay,
> >      > udelay(200) in arch/arm/mach-at91/mpddrc.c line 70.
> >      >
> >      > I have commented this out in v2020.07 with no visible
> >     consequences. In
> >      > v2021.01, SPL did move a bit further, BUT when dealing with the sd
> >      > card, within the mmc driver, the errors continued. There are quite a
> >      > few udelay() calls within the mmc drivers, so I felt I shouldn't be
> >      > changing that.
> >      >
> >      > Instead, I went to check the udelay -> get_ticks -> dm_timer_init
> >      > function. And it seems the problem is exactly here. The function
> >     tries
> >      > to find a timer in the device tree, if I understand correctly, but it
> >      > doesn't find one, returning the -ENODEV  error, on the following
> >      > function: ret = uclass_first_device_err(UCLASS_TIMER, &dev);
> >      >
> >      > I checked the device tree and the pit timer is there. The UCLASS
> >      > driver looks good to me as per documentation. I have also tried
> >     adding
> >      > the "chosen" "tick-timer" parameter in the device tree pointing
> >     to the
> >      > pit timer so it would be recognized in the PLATDATA section of this
> >      > function, but still it wasn't recognized. (I might not have done this
> >      > correctly though it was compiled successfully)
> >      >
> >      > So there seems to be an issue of some kind of misconfiguration with
> >      > the declaration of the timer in the device tree that it doesn't get
> >      > read back.
> >
> >
> >     Does the node have the property
> >
> >     u-boot,dm-pre-reloc;
> >
> >     Maybe try to add this and see if it changes anything ?
> >
> >      >
> >      > Any ideas?
> >      >
> >      > Thanks
> >      >
> >      >
> >      >
> >      >
> >      >
> >      >
> >      >
> >      >
> >      > On Mon, 5 Apr 2021 at 13:44, <Eugen.Hristev@microchip.com
> >     <mailto:Eugen.Hristev@microchip.com>> wrote:
> >      >>
> >      >> On 4/4/21 7:25 PM, Manuel Reis wrote:
> >      >>> Hi again,
> >      >>>
> >      >>> I guess I misunderstood things a bit. Apologies for that.
> >      >>> Nevertheless, timer_init in board_init_f is pointing to the weak
> >      >>> timer_init in /lib/time.c, which is empty.
> >      >>>
> >      >>> Is there a way we can force start the pit timer?
> >      >>> Any pointer would be very helpful. Let me know if you'd like me
> >     to do
> >      >>> something in particular.
> >      >>>
> >      >>> Thanks
> >      >>>
> >      >>>
> >      >>>
> >      >>> On sex, 2 abr, 2021 at 18:15, Manuel Lu?s Reis
> >     <mluis.reis at gmail.com <mailto:mluis.reis@gmail.com>>
> >      >>> wrote:
> >      >>>> FYI:
> >      >>>>
> >      >>>> the output from serial port:
> >      >>>> <debug_uart>
> >      >>>> board_init_f spl_atmel.c 130 mem_init 182 ddr2_init mpddr.c
> >     66udelay
> >      >>>> lib time.c 196__udelay lib time.c 177Could not initialize
> >     timer (err
> >      >>>> -11)
> >      >>>>
> >      >>>> udelay lib time.c 196__udelay lib time.c 177Could not initialize
> >      >>>> timer (err -11)
> >      >>>>
> >      >>>> udelay lib time.c 196__udelay lib time.c 177Could not initialize
> >      >>>> timer (err -11)
> >      >>>> ...
> >      >>>>
> >      >>>>
> >      >>>>
> >      >>>>
> >      >>>> On Fri, 2 Apr 2021 at 18:12, Manuel Lu?s Reis
> >     <mluis.reis at gmail.com <mailto:mluis.reis@gmail.com>>
> >      >>>> wrote:
> >      >>>>>
> >      >>>>>   > As it seems from the dump of dm_dump_all() the
> >     atmel_pit_timer is
> >      >>>>> not
> >      >>>>>   > probed. I did a bit of debug and the dm_timer_init() ->
> >      >>>>>   > uclass_first_device() -> uclass_find_first_device() found
> >     zero
> >      >>>>> timers
> >      >>>>>   > registered for UCLASS_TIMER. The driver is compiled.  Also
> >      >>>>> checked that
> >      >>>>>   > atmel_pit_timer probe function is not called at all. The
> >     question
> >      >>>>> should be
> >      >>>>>   > why it is not probed at all?
> >      >>>>>
> >      >>>>>   Hi,
> >      >>>>>
> >      >>>>>   So, I put objdump and puts to some good use and could
> >     backtrace the
> >      >>>>>   initial error to a udelay call in ddr2_init function on mpddr.c
> >      >>>>> file.
> >      >>>>>   This function is called from mem_init on
> >      >>>>>   sama5d3_xplained/sama5d3_xplained.c, which in turn is
> >     called from
> >      >>>>>   board_init_f on spl_atmel.c.
> >      >>
> >      >> Hi Manuel,
> >      >>
> >      >> As Sean Anderson pointed out : the call to timer must have not
> >     worked at
> >      >> all before this change that now breaks things.
> >      >> Have you tried removing the call to the timer from this
> >     mem_init, to see
> >      >> if this makes the board boot correctly ?
> >      >>
> >      >> In mem_init I guess there are multiple calls to this timer function.
> >      >>
> >      >>>>>   I couldn't, however, find which timer_init function is
> >     being called
> >      >>>>>   here. I still have a few to try, but disassembly gives me a
> >     pretty
> >      >>>>>   empty function:
> >      >>>>>
> >      >>>>>   00303690 <timer_init>:
> >      >>>>>     303690:       e3a00000        mov     r0, #0
> >      >>>>>     303694:       e12fff1e        bx      lr
> >      >>>>>
> >      >>>>>   This work didn't give me many answers, but I got a couple
> >     of newbie
> >      >>>>> questions:
> >      >>>>>
> >      >>>>>   Why is it calling board_init_f from spl_atmel.c and not
> >     spl_at91.c?
> >      >>>>>   Isn't the latter the appropriate architecture for this board?
> >      >>>>>   Do you know which timer_init function it is getting here?
> >     Could
> >      >>>>> this
> >      >>>>>   be the reason timer isn't getting probed? >>>>>
> >      >>>>>   Cheers,
> >      >>>
> >      >>>
> >      >>
> >
>

      reply	other threads:[~2021-04-05 17:50 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-23 11:06 SAMA5D3 Xplained: SPL broken after panic added to /lib/time.c:94 Manuel Luís Reis
2021-03-23 11:14 ` Eugen.Hristev at microchip.com
2021-03-23 11:28   ` Manuel Luís Reis
2021-03-23 11:38     ` Eugen.Hristev at microchip.com
2021-03-23 13:20       ` Manuel Luís Reis
2021-03-23 16:08         ` Manuel Luís Reis
2021-03-23 16:26           ` Eugen.Hristev at microchip.com
2021-03-23 16:54             ` Manuel Luís Reis
2021-03-24  0:34               ` Sean Anderson
2021-03-25 10:25               ` Claudiu.Beznea at microchip.com
2021-04-02 17:12                 ` Manuel Luís Reis
2021-04-02 17:15                   ` Manuel Luís Reis
2021-04-04 16:25                     ` Manuel Reis
2021-04-05 12:44                       ` Eugen.Hristev at microchip.com
2021-04-05 12:47                         ` Manuel Luís Reis
2021-04-05 13:58                           ` Eugen.Hristev at microchip.com
2021-04-05 15:42                             ` Manuel Luís Reis
2021-04-05 16:00                               ` Eugen.Hristev at microchip.com
2021-04-05 17:50                                 ` Manuel Luís Reis [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAJYnj0gEuvj8qyF3qrEt4kBYL=Xgcw16V-YJy5SeyHkJ3=DVog@mail.gmail.com' \
    --to=mluis.reis@gmail.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.