[PATCH v6 03/17] arm: mach-k3: Add basic support for J784S4 SoC definition
Bryan Brattlof
bb at ti.com
Thu Dec 14 03:29:57 CET 2023
On December 7, 2023 thus sayeth Neha Malcom Francis:
> Hi Apurva,
>
> On 06/12/23 18:07, Apurva Nandan wrote:
> > Add J784S4 initialization files for initial SPL boot.
> >
> > Signed-off-by: Hari Nagalla <hnagalla at ti.com>
> > [ add firewall configurations and change the R5 MCU scratchpad ]
> > Signed-off-by: Manorit Chawdhry <m-chawdhry at ti.com>
> > Signed-off-by: Dasnavis Sabiya <sabiya.d at ti.com>
> > Signed-off-by: Apurva Nandan <a-nandan at ti.com>
> > ---
> > arch/arm/mach-k3/Kconfig | 16 +-
> > arch/arm/mach-k3/Makefile | 2 +
> > arch/arm/mach-k3/arm64-mmu.c | 52 +++
> > arch/arm/mach-k3/include/mach/hardware.h | 4 +
> > .../mach-k3/include/mach/j784s4_hardware.h | 60 ++++
> > arch/arm/mach-k3/include/mach/j784s4_spl.h | 47 +++
> > arch/arm/mach-k3/include/mach/spl.h | 4 +
> > arch/arm/mach-k3/j784s4_fdt.c | 15 +
> > arch/arm/mach-k3/j784s4_init.c | 335 ++++++++++++++++++
> > arch/arm/mach-k3/r5/Makefile | 1 +
> > 10 files changed, 529 insertions(+), 7 deletions(-)
> > create mode 100644 arch/arm/mach-k3/include/mach/j784s4_hardware.h
> > create mode 100644 arch/arm/mach-k3/include/mach/j784s4_spl.h
> > create mode 100644 arch/arm/mach-k3/j784s4_fdt.c
> > create mode 100644 arch/arm/mach-k3/j784s4_init.c
> >
...
> > +
> > +void k3_mmc_stop_clock(void)
> > +{
> > + if (IS_ENABLED(CONFIG_K3_LOAD_SYSFW)) {
> > + if (spl_boot_device() == BOOT_DEVICE_MMC1) {
> > + struct mmc *mmc = find_mmc_device(0);
> > +
> > + if (!mmc)
> > + return;
> > +
> > + mmc->saved_clock = mmc->clock;
> > + mmc_set_clock(mmc, 0, true);
> > + }
> > + }
> > +}
> > +
> > +void k3_mmc_restart_clock(void)
> > +{
> > + if (IS_ENABLED(CONFIG_K3_LOAD_SYSFW)) {
> > + if (spl_boot_device() == BOOT_DEVICE_MMC1) {
> > + struct mmc *mmc = find_mmc_device(0);
> > +
> > + if (!mmc)
> > + return;
> > +
> > + mmc_set_clock(mmc, mmc->saved_clock, false);
> > + }
> > + }
> > +}
...
> > +void board_init_f(ulong dummy)
> > +{
> > + struct udevice *dev;
> > + int ret, ctr = 1;
> > +
> > + /*
> > + * Cannot delay this further as there is a chance that
> > + * K3_BOOT_PARAM_TABLE_INDEX can be over written by SPL MALLOC section.
> > + */
> > + store_boot_info_from_rom();
> > +
> > + /* Make all control module registers accessible */
> > + ctrl_mmr_unlock();
> > +
> > + if (IS_ENABLED(CONFIG_CPU_V7R)) {
> > + disable_linefill_optimization();
> > + setup_k3_mpu_regions();
> > + }
> > +
> > + /* Init DM early */
> > + ret = spl_early_init();
> > +
> > + /* Prepare console output */
> > + preloader_console_init();
> > +
> > + if (IS_ENABLED(CONFIG_K3_LOAD_SYSFW)) {
> > + /*
> > + * Process pinctrl for the serial0 a.k.a. WKUP_UART0 module and continue
> > + * regardless of the result of pinctrl. Do this without probing the
> > + * device, but instead by searching the device that would request the
> > + * given sequence number if probed. The UART will be used by the system
> > + * firmware (SYSFW) image for various purposes and SYSFW depends on us
> > + * to initialize its pin settings.
> > + */
> > + ret = uclass_find_device_by_seq(UCLASS_SERIAL, 0, &dev);
> > + if (!ret)
> > + pinctrl_select_state(dev, "default");
> > +
> > + /*
> > + * Load, start up, and configure system controller firmware. Provide
> > + * the U-Boot console init function to the SYSFW post-PM configuration
> > + * callback hook, effectively switching on (or over) the console
> > + * output.
> > + */
> > + k3_sysfw_loader(is_rom_loaded_sysfw(&bootdata),
> > + k3_mmc_stop_clock, k3_mmc_restart_clock);
> > +
>
> All these K3 specific code, should we push it out to a separate function
> like J721S2? (commit fca27ee8b993bd1a5752fc2156b1e86358fa8041 "arch:
> mach-k3: Update board specific API name to K3 generic API name")
>
> Else we can take this up in a separate clean up series.
>
Do we still have a need to support the split binary (sysfw.itb) boot
anymore now that binman is building tiboot3 for us? I don't think we
will ever be in a situation where ROM hasn't loaded the firmware for us.
> > +#ifdef CONFIG_SPL_OF_LIST
> > + if (IS_ENABLED(CONFIG_TI_I2C_BOARD_DETECT))
> > + do_board_detect();
> > +#endif
> > +
Should we tie CONFIG_SPL_OF_LIST and CONFIG_TI_I2C_BOARD_DETECT together
in Kconfig to avoid this?
> > + if (IS_ENABLED(CONFIG_SPL_CLK_K3)) {
> > + /*
> > + * Force probe of clk_k3 driver here to ensure basic default clock
> > + * configuration is always done for enabling PM services.
> > + */
> > + ret = uclass_get_device_by_driver(UCLASS_CLK,
> > + DM_DRIVER_GET(ti_clk),
> > + &dev);
> > + if (ret)
> > + panic("Failed to initialize clk-k3!\n");
> > + }
> > +
> > + remove_fwl_configs(cbass_hc_cfg0_fwls, ARRAY_SIZE(cbass_hc_cfg0_fwls));
> > + remove_fwl_configs(cbass_hc2_fwls, ARRAY_SIZE(cbass_hc2_fwls));
> > + remove_fwl_configs(cbass_rc_cfg0_fwls, ARRAY_SIZE(cbass_rc_cfg0_fwls));
> > + remove_fwl_configs(infra_cbass0_fwls, ARRAY_SIZE(infra_cbass0_fwls));
> > + remove_fwl_configs(mcu_cbass0_fwls, ARRAY_SIZE(mcu_cbass0_fwls));
> > + remove_fwl_configs(wkup_cbass0_fwls, ARRAY_SIZE(wkup_cbass0_fwls));
> > + remove_fwl_configs(navss_cbass0_fwls, ARRAY_SIZE(navss_cbass0_fwls));
> > + }
> > +
> > + /* Output System Firmware version info */
> > + k3_sysfw_print_ver();
> > +
> > + if (IS_ENABLED(CONFIG_TARGET_J784S4_R5_EVM)) {
> > + ret = uclass_get_device_by_name(UCLASS_MISC, "msmc", &dev);
> > + if (ret)
> > + panic("Probe of msmc failed: %d\n", ret);
> > +
> > + ret = uclass_get_device(UCLASS_RAM, 0, &dev);
> > + if (ret)
> > + panic("DRAM 0 init failed: %d\n", ret);
> > +
> > + while (dev) {
> > + ret = uclass_next_device_err(&dev);
> > + if (ret) {
> > + printf("Initialized %d DRAM controllers\n", ctr);
> > + break;
> > + }
> > + ctr++;
Nice! However I'm worried we miss events with controllers that we wanted
and failed to probe. Should we invert this check?
The uclass_foreach_dev() macro could help here too, but I don't see that
used very much. There may be a better idea i'm missing
>
> This looks fine. With the above comment addressed or not:
> Reviewed-by: Neha Malcom Francis <n-francis at ti.com>
>
~Bryan
More information about the U-Boot
mailing list