64-bit RPi4B u-boot hangup with modern rpi firmware: some information (but investigative-toolbox limited)

Mark Millard via freebsd-arm <[email protected]>
Newsgroups gmane.os.freebsd.devel.arm
Message-ID <[email protected]>
I tried building u-boot with:

CONFIG_LOG=y
CONFIG_LOG_CONSOLE=y
CONFIG_LOG_MAX_LEVEL=7

and the first console output with the somewhat older
firmware (for which the combination boots) was:

initcall: 00000000000ec7b4


U-Boot 2020.10 (Oct 13 2020 - 20:26:59 +0000)

That is display_options, just after serial_init
and console_init_f are executed.

No such output occurs with more modern firmware
(same u-boot).

That means, in the 4 GIByte RPi4B context that
I have access to, that the hang up happens at
some point during the sequence of initialization
steps, on or before display_options:

static const init_fnc_t init_sequence_f[] = {
        setup_mon_len,
#ifdef CONFIG_OF_CONTROL
        fdtdec_setup,
#endif
#ifdef CONFIG_TRACE_EARLY
        trace_early_init,
#endif
        initf_malloc,
        log_init,
        initf_bootstage,        /* uses its own timer, so does not need DM */
#ifdef CONFIG_BLOBLIST
        bloblist_init,
#endif
        setup_spl_handoff,
        initf_console_record,
#if defined(CONFIG_HAVE_FSP)
        arch_fsp_init,
#endif
        arch_cpu_init,          /* basic arch cpu dependent setup */
        mach_cpu_init,          /* SoC/machine dependent CPU setup */
        initf_dm,
        arch_cpu_init_dm,
#if defined(CONFIG_BOARD_EARLY_INIT_F)
        board_early_init_f,
#endif
#if defined(CONFIG_PPC) || defined(CONFIG_SYS_FSL_CLK) || defined(CONFIG_M68K)
        /* get CPU and bus clocks according to the environment variable */
        get_clocks,             /* get CPU and bus clocks (etc.) */
#endif
#if !defined(CONFIG_M68K)
        timer_init,             /* initialize timer */
#endif
#if defined(CONFIG_BOARD_POSTCLK_INIT)
        board_postclk_init,
#endif
        env_init,               /* initialize environment */
        init_baud_rate,         /* initialze baudrate settings */
        serial_init,            /* serial communications setup */
        console_init_f,         /* stage 1 init of console */
        display_options,        /* say that we are here */
. . .

I'll note that the use of the list is via:

void board_init_f(ulong boot_flags)
{
        gd->flags = boot_flags;
        gd->have_console = 0;
        
        if (initcall_run_list(init_sequence_f))
                hang();
. . .

where:

/**
 * hang - stop processing by staying in an endless loop
 *
 * The purpose of this function is to stop further execution of code cause
 * something went completely wrong.  To catch this and give some feedback to
 * the user one needs to catch the bootstage_error (see show_boot_progress())
 * in the board code.
 */
void hang(void)
{
#if !defined(CONFIG_SPL_BUILD) || \
                (CONFIG_IS_ENABLED(LIBCOMMON_SUPPORT) && \
                 CONFIG_IS_ENABLED(SERIAL_SUPPORT))
        puts("### ERROR ### Please RESET the board ###\n");
#endif
        bootstage_error(BOOTSTAGE_ID_NEED_RESET);
        if (IS_ENABLED(CONFIG_SANDBOX))
                os_exit(1);
        for (;;)
                ;
}

With the tools I have around, I do not see a way to
find out what was the last element of init_sequence_f
to (at least start to) be called (or if it stopped even
before initcall_run_list would start).


Note: CONFIG_LOG_MAX_LEVEL=7 (without something like
CONFIG_LOG_DEFAULT_LEVEL being a smaller figure) is not
reasonable for general use: Its output is massive.

===
Mark Millard
marklmi at yahoo.com
( dsl-only.net went
away in early 2018-Mar)

_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-arm
To unsubscribe, send any mail to "[email protected]"
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.