On 11/26/2018 11:10 AM, Chee, Tien Fong wrote: > On Fri, 2018-11-23 at 13:31 +0100, Marek Vasut wrote: >> On 11/23/2018 10:51 AM, Chee, Tien Fong wrote: >>> >>> On Wed, 2018-11-21 at 15:19 +0100, Marek Vasut wrote: >>>> >>>> On 11/21/2018 11:41 AM, tien.fong.c...@intel.com wrote: >>>>> >>>>> >>>>> From: Tien Fong Chee <tien.fong.c...@intel.com> >>>>> >>>>> Add support for loading FPGA bitstream to get DDR up running >>>>> before >>>>> U-Boot is loaded into DDR. Boot device initialization, generic >>>>> firmware >>>>> loader and SPL FAT support are required for this whole >>>>> mechanism to >>>>> work. >>>>> >>>>> Signed-off-by: Tien Fong Chee <tien.fong.c...@intel.com> >>>>> --- >>>>> arch/arm/mach-socfpga/spl_a10.c | 49 >>>>> ++++++++++++++++++++++++++++++++++++++- >>>>> common/spl/spl_mmc.c | 2 +- >>>>> include/mmc.h | 1 + >>>>> 3 files changed, 50 insertions(+), 2 deletions(-) >>>>> >>>>> diff --git a/arch/arm/mach-socfpga/spl_a10.c b/arch/arm/mach- >>>>> socfpga/spl_a10.c >>>>> index 3ea64f7..67a4fac 100644 >>>>> --- a/arch/arm/mach-socfpga/spl_a10.c >>>>> +++ b/arch/arm/mach-socfpga/spl_a10.c >>>>> @@ -1,6 +1,6 @@ >>>>> // SPDX-License-Identifier: GPL-2.0+ >>>>> /* >>>>> - * Copyright (C) 2012 Altera Corporation <www.altera.com> >>>>> + * Copyright (C) 2012-2018 Altera Corporation <www.altera.com >>>>>> >>>>> */ >>>>> >>>>> #include <common.h> >>>>> @@ -23,6 +23,10 @@ >>>>> #include <fdtdec.h> >>>>> #include <watchdog.h> >>>>> #include <asm/arch/pinmux.h> >>>>> +#include <asm/arch/fpga_manager.h> >>>>> +#include <mmc.h> >>>>> + >>>>> +#define RBF 0 >>>>> >>>>> DECLARE_GLOBAL_DATA_PTR; >>>>> >>>>> @@ -73,6 +77,49 @@ void spl_board_init(void) >>>>> WATCHDOG_RESET(); >>>>> >>>>> arch_early_init_r(); >>>>> + >>>>> + /* If the full FPGA is already loaded, ie.from EPCQ, >>>>> config fpga pins */ >>>>> + if (is_fpgamgr_user_mode()) { >>>>> + config_pins(gd->fdt_blob, "shared"); >>>>> + config_pins(gd->fdt_blob, "fpga"); >>>>> + } else if (!is_fpgamgr_early_user_mode()) { >>>>> + /* Program IOSSM(early IO release) or full >>>>> FPGA */ >>>>> + fpga_fs_info fpga_fsinfo; >>>>> + char buf[16 * 1024] >>>>> __aligned(ARCH_DMA_MINALIGN); >>>>> + struct spl_boot_device bootdev; >>>>> + int len = 0; >>>>> + >>>>> + bootdev.boot_device = spl_boot_device(); >>>>> + >>>>> + /* Init MMC driver before reading FPGA >>>>> bitstream >>>>> from flash */ >>>>> + if (bootdev.boot_device == BOOT_DEVICE_MMC1) { >>>>> + struct mmc *mmc = NULL; >>>>> + int err = 0; >>>>> + >>>>> + err = spl_mmc_find_device(&mmc, >>>>> bootdev.boot_device); >>>>> + if (err) >>>>> + return; >>>>> + >>>>> + err = mmc_init(mmc); >>>> I thought all this backend specific stuff would be hidden in the >>>> FW >>>> loader. >>> The backend supported by FW loader is up to generic file system >>> interface layer. flash driver init is expected done by SPL/U-Boot >>> common init sequence framwork or user. Unfortunately, fw loader >>> need to >>> access flash before init sequence. >> This is actually accessing eMMC though , not flash . If we need this >> huge boilerplate code every time we use the FW loader, than the FW >> loader needs fixing. I can understand the spl_boot_device() being >> outside of the FW loader, but not the mmc_init() and co. > I can explore the posibility of adding the flash int mechanism into the > fm loader probe function.
What do you mean by "flash int" ? Note that we're talking about eMMC here, not flash. Unless you mean "backend init" by all that, in which case that'd only make sense, thanks. -- Best regards, Marek Vasut _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot