Hi Pali,

On 12/20/22 09:07, Pali Rohár wrote:
On Tuesday 20 December 2022 07:20:15 Stefan Roese wrote:
Hi Tony,

On 12/20/22 02:36, Tony Dinh wrote:
Hi Stefan,

On Mon, Dec 19, 2022 at 4:06 PM Tony Dinh <mibo...@gmail.com> wrote:

Hi Stefan,

On Mon, Dec 19, 2022 at 1:22 PM Tony Dinh <mibo...@gmail.com> wrote:

Hi Stefan,

On Sun, Dec 18, 2022 at 11:29 PM Stefan Roese <s...@denx.de> wrote:

Hi Tony,

On 12/19/22 07:17, Stefan Roese wrote:

<snip>

git checkout 37bb396669b27aa62fe8bc5eeb6bfde92e09c2d3
Previous HEAD position was 3b44b3fdf2 arm: mvebu: Add support for
programming LD0 and LD1 eFuse
HEAD is now at 37bb396669 timer: orion-timer: Only init timer once

This is where the Pogo V4 was frozen during boot. Among the Kirkwood
boards that I have and used for testing, it is the only one that has
CONFIG_BOOTSTAGE=y.

Thanks for testing and git bi-secting.

Should I create a new post for would like to continue this topic here
in this thread?

Let me check, if I can find the root cause and this problem quickly. If
not, then we should probably disable CONFIG_BOOTSTAGE on the Pogo v4 for
a short while until we've fixed this issue.

I fail to spot the problem with this small commit 37bb396669b27a. I can
also not reproduce this on my Armada XP board - it uses SPL though, this
might make a difference.

Could you perhaps apply this attached debug patch and make sure, that
you have DEBUG_UART enabled in your Pogo v4 config. And boot into the
resulting image.

Here is the kwboot log with DEBUG_UART. Note that number 322322 below
is part of the log.

322322

U-Boot 2023.01-rc3-00057-g9bd3d354a1-dirty (Dec 19 2022 - 01:29:21 -0800)
Pogoplug V4

SoC:   Kirkwood 88F6281_A1
Model: Cloud Engines PogoPlug Series 4
DRAM:  128 MiB
322322322Core:  19 devices, 15 uclasses, devicetree: separate
NAND:  4


Going a bit further with your debug patch, I've added more prints.

   static void orion_timer_init(void *base, enum input_clock_type type)
   {
          /* Only init the timer once */
-       if (early_init_done)
+       if (early_init_done) {
+               printch('6'); // test-only
                  return;
+       }

And the boot log below shows somehow the early_init_done is already
true by the time the orion_timer_init is called. Pretty weird, to say
the least!

--BEGIN LOG--
3262632626

U-Boot 2023.01-rc4-dirty (Dec 19 2022 - 15:35:26 -0800)
Pogoplug V4

SoC:   Kirkwood 88F6281_A1
Model: Cloud Engines PogoPlug Series 4
DRAM:  128 MiB
326263262632626Core:  19 devices, 15 uclasses, devicetree: separate
NAND:  456
--END LOG--


I tried this change in drivers/timer/orion-timer.c and it seems to
work consistently.

-static bool early_init_done __section(".data") = false;
+static bool early_init_done = false;

I still can't see why it would make a difference. Why does the
__section macro not work? does the reallocation timing have anything
to do with this variable being of the wrong value?

Hmmm, so we might have a problem with memory being overwritten? You
should perhaps where the sections (especially data) are located and
where the stack etc is located. I suggest to also enable DEBUG in
board_f/c.c to see a bit more of the addresses being used.

Thanks,
Stefan

Maybe similar issue as with mbus or atsha?
https://lore.kernel.org/u-boot/20220810124609.5765-1-p...@kernel.org/
https://lore.kernel.org/u-boot/20220408143015.23163-2-p...@kernel.org/

static variables do not work correctly _before_ u-boot relocation. You
should avoid usage global OR static variables in code which may be
called before relocation. And on some boards are all global, static and
bss variables read-only (those which use execute-in-place, e.g. ppc
flash).

Thanks for the input. Frankly, I was always a bit hesitant when using
early static variables. Also with moving them into the data segment.
Even though this seems to work on some platforms AFAICT.

I've prepared a patch getting rid of this variable by introducing a
function instead. Tested successfully on my Armada XP platform.

Tony, could you (and perhaps others as well?) test with this new patch,
if everything still works as expected?

Thanks,
Stefan

Reply via email to