[PATCH v3 01/17] dm: Emit the arch_cpu_init_dm() even only before relocation

Jan Kiszka jan.kiszka at siemens.com
Sun Jun 4 14:05:25 CEST 2023


On 05.05.23 00:50, Simon Glass wrote:
> The original function was only called once, before relocation. The new
> one is called again after relocation. This was not the intent of the
> original call. Fix this by renaming and updating the calling logic.
> 
> With this, chromebook_link64 makes it through SPL.
> 
> Fixes: 7fe32b3442f ("event: Convert arch_cpu_init_dm() to")
> Fixes: 7fe32b3442f0 ("event: Convert arch_cpu_init_dm() to use events")
> Reviewed-by: Bin Meng <bmeng.cn at gmail.com>
> 
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
> 
> Changes in v3:
> - Fix 'intend' typo
> 
>  arch/arm/mach-imx/imx8/cpu.c        | 2 +-
>  arch/arm/mach-imx/imx8m/soc.c       | 2 +-
>  arch/arm/mach-imx/imx8ulp/soc.c     | 2 +-
>  arch/arm/mach-imx/imx9/soc.c        | 2 +-
>  arch/arm/mach-omap2/am33xx/board.c  | 2 +-
>  arch/arm/mach-omap2/hwinit-common.c | 2 +-
>  arch/mips/mach-pic32/cpu.c          | 2 +-
>  arch/nios2/cpu/cpu.c                | 2 +-
>  arch/riscv/cpu/cpu.c                | 2 +-
>  arch/x86/cpu/baytrail/cpu.c         | 2 +-
>  arch/x86/cpu/broadwell/cpu.c        | 2 +-
>  arch/x86/cpu/ivybridge/cpu.c        | 2 +-
>  arch/x86/cpu/quark/quark.c          | 2 +-
>  arch/x86/lib/fsp2/fsp_init.c        | 2 +-
>  doc/develop/event.rst               | 6 +++---
>  drivers/core/root.c                 | 4 ++--
>  drivers/cpu/microblaze_cpu.c        | 2 +-
>  include/event.h                     | 2 +-
>  18 files changed, 21 insertions(+), 21 deletions(-)
> 
> diff --git a/arch/arm/mach-imx/imx8/cpu.c b/arch/arm/mach-imx/imx8/cpu.c
> index be1f4edded1..99772f68c32 100644
> --- a/arch/arm/mach-imx/imx8/cpu.c
> +++ b/arch/arm/mach-imx/imx8/cpu.c
> @@ -89,7 +89,7 @@ static int imx8_init_mu(void *ctx, struct event *event)
>  
>  	return 0;
>  }
> -EVENT_SPY(EVT_DM_POST_INIT, imx8_init_mu);
> +EVENT_SPY(EVT_DM_POST_INIT_F, imx8_init_mu);
>  
>  #if defined(CONFIG_ARCH_MISC_INIT)
>  int arch_misc_init(void)
> diff --git a/arch/arm/mach-imx/imx8m/soc.c b/arch/arm/mach-imx/imx8m/soc.c
> index 4705e6c1192..5a4f8358c9f 100644
> --- a/arch/arm/mach-imx/imx8m/soc.c
> +++ b/arch/arm/mach-imx/imx8m/soc.c
> @@ -549,7 +549,7 @@ static int imx8m_check_clock(void *ctx, struct event *event)
>  
>  	return 0;
>  }
> -EVENT_SPY(EVT_DM_POST_INIT, imx8m_check_clock);
> +EVENT_SPY(EVT_DM_POST_INIT_F, imx8m_check_clock);
>  
>  static void imx8m_setup_snvs(void)
>  {
> diff --git a/arch/arm/mach-imx/imx8ulp/soc.c b/arch/arm/mach-imx/imx8ulp/soc.c
> index 8424332f429..81eae02b6a8 100644
> --- a/arch/arm/mach-imx/imx8ulp/soc.c
> +++ b/arch/arm/mach-imx/imx8ulp/soc.c
> @@ -808,7 +808,7 @@ static int imx8ulp_evt_dm_post_init(void *ctx, struct event *event)
>  {
>  	return imx8ulp_dm_post_init();
>  }
> -EVENT_SPY(EVT_DM_POST_INIT, imx8ulp_evt_dm_post_init);
> +EVENT_SPY(EVT_DM_POST_INIT_F, imx8ulp_evt_dm_post_init);
>  
>  #if defined(CONFIG_SPL_BUILD)
>  __weak void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image)
> diff --git a/arch/arm/mach-imx/imx9/soc.c b/arch/arm/mach-imx/imx9/soc.c
> index a16e22ea6bb..252663a9eec 100644
> --- a/arch/arm/mach-imx/imx9/soc.c
> +++ b/arch/arm/mach-imx/imx9/soc.c
> @@ -262,7 +262,7 @@ int imx9_probe_mu(void *ctx, struct event *event)
>  
>  	return 0;
>  }
> -EVENT_SPY(EVT_DM_POST_INIT, imx9_probe_mu);
> +EVENT_SPY(EVT_DM_POST_INIT_F, imx9_probe_mu);
>  
>  int timer_init(void)
>  {
> diff --git a/arch/arm/mach-omap2/am33xx/board.c b/arch/arm/mach-omap2/am33xx/board.c
> index a52d04d85c8..ecc0a592e99 100644
> --- a/arch/arm/mach-omap2/am33xx/board.c
> +++ b/arch/arm/mach-omap2/am33xx/board.c
> @@ -535,4 +535,4 @@ static int am33xx_dm_post_init(void *ctx, struct event *event)
>  #endif
>  	return 0;
>  }
> -EVENT_SPY(EVT_DM_POST_INIT, am33xx_dm_post_init);
> +EVENT_SPY(EVT_DM_POST_INIT_F, am33xx_dm_post_init);
> diff --git a/arch/arm/mach-omap2/hwinit-common.c b/arch/arm/mach-omap2/hwinit-common.c
> index c4a8eabc3eb..771533394bc 100644
> --- a/arch/arm/mach-omap2/hwinit-common.c
> +++ b/arch/arm/mach-omap2/hwinit-common.c
> @@ -246,7 +246,7 @@ static int omap2_system_init(void *ctx, struct event *event)
>  
>  	return 0;
>  }
> -EVENT_SPY(EVT_DM_POST_INIT, omap2_system_init);
> +EVENT_SPY(EVT_DM_POST_INIT_F, omap2_system_init);
>  
>  /*
>   * Routine: wait_for_command_complete
> diff --git a/arch/mips/mach-pic32/cpu.c b/arch/mips/mach-pic32/cpu.c
> index de449e3c6a2..ec3c2505313 100644
> --- a/arch/mips/mach-pic32/cpu.c
> +++ b/arch/mips/mach-pic32/cpu.c
> @@ -102,7 +102,7 @@ static int pic32_flash_prefetch(void *ctx, struct event *event)
>  	prefetch_init();
>  	return 0;
>  }
> -EVENT_SPY(EVT_DM_POST_INIT, pic32_flash_prefetch);
> +EVENT_SPY(EVT_DM_POST_INIT_F, pic32_flash_prefetch);
>  
>  /* Un-gate DDR2 modules (gated by default) */
>  static void ddr2_pmd_ungate(void)
> diff --git a/arch/nios2/cpu/cpu.c b/arch/nios2/cpu/cpu.c
> index 85544503a5e..da167f4b29e 100644
> --- a/arch/nios2/cpu/cpu.c
> +++ b/arch/nios2/cpu/cpu.c
> @@ -80,7 +80,7 @@ static int nios_cpu_setup(void *ctx, struct event *event)
>  
>  	return 0;
>  }
> -EVENT_SPY(EVT_DM_POST_INIT, nios_cpu_setup);
> +EVENT_SPY(EVT_DM_POST_INIT_F, nios_cpu_setup);
>  
>  static int altera_nios2_get_desc(const struct udevice *dev, char *buf,
>  				 int size)
> diff --git a/arch/riscv/cpu/cpu.c b/arch/riscv/cpu/cpu.c
> index e1ed4ec01d0..ecfb1fb08c4 100644
> --- a/arch/riscv/cpu/cpu.c
> +++ b/arch/riscv/cpu/cpu.c
> @@ -145,7 +145,7 @@ int riscv_cpu_setup(void *ctx, struct event *event)
>  
>  	return 0;
>  }
> -EVENT_SPY(EVT_DM_POST_INIT, riscv_cpu_setup);
> +EVENT_SPY(EVT_DM_POST_INIT_F, riscv_cpu_setup);
>  
>  int arch_early_init_r(void)
>  {
> diff --git a/arch/x86/cpu/baytrail/cpu.c b/arch/x86/cpu/baytrail/cpu.c
> index 4fb6a485542..4a7b4f617f8 100644
> --- a/arch/x86/cpu/baytrail/cpu.c
> +++ b/arch/x86/cpu/baytrail/cpu.c
> @@ -64,7 +64,7 @@ static int baytrail_uart_init(void *ctx, struct event *event)
>  
>  	return 0;
>  }
> -EVENT_SPY(EVT_DM_POST_INIT, baytrail_uart_init);
> +EVENT_SPY(EVT_DM_POST_INIT_F, baytrail_uart_init);
>  
>  static void set_max_freq(void)
>  {
> diff --git a/arch/x86/cpu/broadwell/cpu.c b/arch/x86/cpu/broadwell/cpu.c
> index 7877961451a..f30aebfe4c6 100644
> --- a/arch/x86/cpu/broadwell/cpu.c
> +++ b/arch/x86/cpu/broadwell/cpu.c
> @@ -40,7 +40,7 @@ static int broadwell_init_cpu(void *ctx, struct event *event)
>  
>  	return 0;
>  }
> -EVENT_SPY(EVT_DM_POST_INIT, broadwell_init_cpu);
> +EVENT_SPY(EVT_DM_POST_INIT_F, broadwell_init_cpu);
>  
>  void set_max_freq(void)
>  {
> diff --git a/arch/x86/cpu/ivybridge/cpu.c b/arch/x86/cpu/ivybridge/cpu.c
> index cffc5d5b1d8..c988d7ff477 100644
> --- a/arch/x86/cpu/ivybridge/cpu.c
> +++ b/arch/x86/cpu/ivybridge/cpu.c
> @@ -86,7 +86,7 @@ static int ivybridge_cpu_init(void *ctx, struct event *ev)
>  
>  	return 0;
>  }
> -EVENT_SPY(EVT_DM_POST_INIT, ivybridge_cpu_init);
> +EVENT_SPY(EVT_DM_POST_INIT_F, ivybridge_cpu_init);
>  
>  #define PCH_EHCI0_TEMP_BAR0 0xe8000000
>  #define PCH_EHCI1_TEMP_BAR0 0xe8000400
> diff --git a/arch/x86/cpu/quark/quark.c b/arch/x86/cpu/quark/quark.c
> index 0a1fbb34d40..1be8e38cdf4 100644
> --- a/arch/x86/cpu/quark/quark.c
> +++ b/arch/x86/cpu/quark/quark.c
> @@ -263,7 +263,7 @@ static int quark_init_pcie(void *ctx, struct event *event)
>  
>  	return 0;
>  }
> -EVENT_SPY(EVT_DM_POST_INIT, quark_init_pcie);
> +EVENT_SPY(EVT_DM_POST_INIT_F, quark_init_pcie);
>  
>  int checkcpu(void)
>  {
> diff --git a/arch/x86/lib/fsp2/fsp_init.c b/arch/x86/lib/fsp2/fsp_init.c
> index b15926e8247..afec7d08d67 100644
> --- a/arch/x86/lib/fsp2/fsp_init.c
> +++ b/arch/x86/lib/fsp2/fsp_init.c
> @@ -42,7 +42,7 @@ int fsp_setup_pinctrl(void *ctx, struct event *event)
>  
>  	return ret;
>  }
> -EVENT_SPY(EVT_DM_POST_INIT, fsp_setup_pinctrl);
> +EVENT_SPY(EVT_DM_POST_INIT_F, fsp_setup_pinctrl);
>  
>  #if !defined(CONFIG_TPL_BUILD)
>  binman_sym_declare(ulong, intel_fsp_m, image_pos);
> diff --git a/doc/develop/event.rst b/doc/develop/event.rst
> index 4ff59348371..4c34fffc63b 100644
> --- a/doc/develop/event.rst
> +++ b/doc/develop/event.rst
> @@ -11,7 +11,7 @@ block device is probed.
>  Rather than using weak functions and direct calls across subsystemss, it is
>  often easier to use an event.
>  
> -An event consists of a type (e.g. EVT_DM_POST_INIT) and some optional data,
> +An event consists of a type (e.g. EVT_DM_POST_INIT_F) and some optional data,
>  in `union event_data`. An event spy can be creasted to watch for events of a
>  particular type. When the event is created, it is sent to each spy in turn.
>  
> @@ -26,9 +26,9 @@ To declare a spy, use something like this::
>          /* do something */
>          return 0;
>      }
> -    EVENT_SPY(EVT_DM_POST_INIT, snow_setup_cpus);
> +    EVENT_SPY(EVT_DM_POST_INIT_F, snow_setup_cpus);
>  
> -Your function is called when EVT_DM_POST_INIT is emitted, i.e. after driver
> +Your function is called when EVT_DM_POST_INIT_F is emitted, i.e. after driver
>  model is inited (in SPL, or in U-Boot proper before and after relocation).
>  
>  
> diff --git a/drivers/core/root.c b/drivers/core/root.c
> index c4fb48548bb..6775fb0b657 100644
> --- a/drivers/core/root.c
> +++ b/drivers/core/root.c
> @@ -436,8 +436,8 @@ int dm_init_and_scan(bool pre_reloc_only)
>  			return ret;
>  		}
>  	}
> -	if (CONFIG_IS_ENABLED(DM_EVENT)) {
> -		ret = event_notify_null(EVT_DM_POST_INIT);
> +	if (CONFIG_IS_ENABLED(DM_EVENT) && !(gd->flags & GD_FLG_RELOC)) {
> +		ret = event_notify_null(EVT_DM_POST_INIT_F);
>  		if (ret)
>  			return log_msg_ret("ev", ret);
>  	}
> diff --git a/drivers/cpu/microblaze_cpu.c b/drivers/cpu/microblaze_cpu.c
> index b9d07928223..c97a89fbd5c 100644
> --- a/drivers/cpu/microblaze_cpu.c
> +++ b/drivers/cpu/microblaze_cpu.c
> @@ -29,7 +29,7 @@ static int microblaze_cpu_probe_all(void *ctx, struct event *event)
>  
>  	return 0;
>  }
> -EVENT_SPY(EVT_DM_POST_INIT, microblaze_cpu_probe_all);
> +EVENT_SPY(EVT_DM_POST_INIT_F, microblaze_cpu_probe_all);
>  
>  static void microblaze_set_cpuinfo_pvr(struct microblaze_cpuinfo *ci)
>  {
> diff --git a/include/event.h b/include/event.h
> index e4580b68350..fe41080fa63 100644
> --- a/include/event.h
> +++ b/include/event.h
> @@ -22,7 +22,7 @@ enum event_t {
>  	EVT_TEST,
>  
>  	/* Events related to driver model */
> -	EVT_DM_POST_INIT,
> +	EVT_DM_POST_INIT_F,
>  	EVT_DM_PRE_PROBE,
>  	EVT_DM_POST_PROBE,
>  	EVT_DM_PRE_REMOVE,

This broke the VisonFive2:

...
U-Boot 2023.07-rc2-00058-g55171aedda8 (Jun 04 2023 - 14:00:57 +0200)

CPU:   rv64imafdc_zba_zbb
Model: StarFive VisionFive 2 v1.3B
DRAM:  8 GiB
initcall sequence 00000000fffe0b10 failed at call 00000000402160bc (err=-19)
### ERROR ### Please RESET the board ###


Already known?

Jan

-- 
Siemens AG, Technology
Competence Center Embedded Linux



More information about the U-Boot mailing list