On 11/14/2018 08:09 AM, Ang, Chee Hong wrote: > On Thu, 2018-10-11 at 10:03 +0000, Marek Vasut wrote: >> On 10/11/2018 08:21 AM, Ang, Chee Hong wrote: >>> >>> On Wed, 2018-10-10 at 12:27 +0200, Marek Vasut wrote: >>>> >>>> On 10/10/2018 07:30 AM, Ang, Chee Hong wrote: >>>>> >>>>> >>>>> On Tue, 2018-10-09 at 14:48 +0200, Marek Vasut wrote: >>>>>> >>>>>> >>>>>> On 10/09/2018 05:03 AM, Ang, Chee Hong wrote: >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Mon, 2018-10-08 at 22:32 +0200, Marek Vasut wrote: >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> On 10/08/2018 05:10 PM, Ang, Chee Hong wrote: >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> On Mon, 2018-10-08 at 11:57 +0200, Marek Vasut wrote: >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On 10/08/2018 11:48 AM, chee.hong....@intel.com >>>>>>>>>> wrote: >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> From: "Ang, Chee Hong" <chee.hong....@intel.com> >>>>>>>>>>> >>>>>>>>>>> Enable 'fpga' command in u-boot. User will be able >>>>>>>>>>> to >>>>>>>>>>> use >>>>>>>>>>> the >>>>>>>>>>> fpga >>>>>>>>>>> command to program the FPGA on Stratix10 SoC. >>>>>>>>>>> >>>>>>>>>>> Signed-off-by: Ang, Chee Hong <chee.hong.ang@intel. >>>>>>>>>>> com> >>>>>>>>>>> --- >>>>>>>>>>> arch/arm/mach-socfpga/misc.c | 29 >>>>>>>>>>> +++++++++++++++++++++++++++++ >>>>>>>>>>> arch/arm/mach-socfpga/misc_s10.c | 2 ++ >>>>>>>>>>> drivers/fpga/altera.c | 6 ++++++ >>>>>>>>>>> include/altera.h | 4 ++++ >>>>>>>>>>> 4 files changed, 41 insertions(+) >>>>>>>>>>> >>>>>>>>>>> diff --git a/arch/arm/mach-socfpga/misc.c >>>>>>>>>>> b/arch/arm/mach- >>>>>>>>>>> socfpga/misc.c >>>>>>>>>>> index a4f6d5c..7986b58 100644 >>>>>>>>>>> --- a/arch/arm/mach-socfpga/misc.c >>>>>>>>>>> +++ b/arch/arm/mach-socfpga/misc.c >>>>>>>>>>> @@ -88,6 +88,27 @@ int overwrite_console(void) >>>>>>>>>>> #endif >>>>>>>>>>> >>>>>>>>>>> #ifdef CONFIG_FPGA >>>>>>>>>>> +#ifdef CONFIG_FPGA_STRATIX10 >>>>>>>>>>> +/* >>>>>>>>>>> + * FPGA programming support for SoC FPGA Stratix >>>>>>>>>>> 10 >>>>>>>>>>> + */ >>>>>>>>>>> +static Altera_desc altera_fpga[] = { >>>>>>>>>>> + { >>>>>>>>>>> + /* Family */ >>>>>>>>>>> + Intel_FPGA_Stratix10, >>>>>>>>>>> + /* Interface type */ >>>>>>>>>>> + secure_device_manager_mailbox, >>>>>>>>>>> + /* No limitation as additional >>>>>>>>>>> data >>>>>>>>>>> will >>>>>>>>>>> be >>>>>>>>>>> ignored */ >>>>>>>>>>> + -1, >>>>>>>>>>> + /* No device function table */ >>>>>>>>>>> + NULL, >>>>>>>>>>> + /* Base interface address >>>>>>>>>>> specified in >>>>>>>>>>> driver >>>>>>>>>>> */ >>>>>>>>>>> + NULL, >>>>>>>>>>> + /* No cookie implementation */ >>>>>>>>>>> + 0 >>>>>>>>>>> + }, >>>>>>>>>>> +}; >>>>>>>>>>> +#else >>>>>>>>>>> /* >>>>>>>>>>> * FPGA programming support for SoC FPGA Cyclone V >>>>>>>>>>> */ >>>>>>>>>>> @@ -107,6 +128,7 @@ static Altera_desc >>>>>>>>>>> altera_fpga[] = >>>>>>>>>>> { >>>>>>>>>>> 0 >>>>>>>>>>> }, >>>>>>>>>>> }; >>>>>>>>>>> +#endif >>>>>>>>>>> >>>>>>>>>>> /* add device descriptor to FPGA device table */ >>>>>>>>>>> void socfpga_fpga_add(void) >>>>>>>>>>> @@ -116,6 +138,13 @@ void socfpga_fpga_add(void) >>>>>>>>>>> for (i = 0; i < ARRAY_SIZE(altera_fpga); >>>>>>>>>>> i++) >>>>>>>>>>> fpga_add(fpga_altera, >>>>>>>>>>> &altera_fpga[i]); >>>>>>>>>>> } >>>>>>>>>>> + >>>>>>>>>>> +#else >>>>>>>>>>> + >>>>>>>>>>> +__weak void socfpga_fpga_add(void) >>>>>>>>>>> +{ >>>>>>>>>>> +} >>>>>>>>>> Why is a __weak function defined only in else- >>>>>>>>>> statement ? >>>>>>>>>> >>>>>>>>>> It should be defined always, with a sane default >>>>>>>>>> implementation. >>>>>>>>> I will remove the empty function in #else-statement and >>>>>>>>> define >>>>>>>>> the >>>>>>>>> default function like this : >>>>>>>>> >>>>>>>>> /* add device descriptor to FPGA device table */ >>>>>>>>> void socfpga_fpga_add(void) >>>>>>>>> { >>>>>>>>> #ifdef CONFIG_FPGA >>>>>>>>> int i; >>>>>>>>> fpga_init(); >>>>>>>>> for (i = 0; i < ARRAY_SIZE(altera_fpga); i++) >>>>>>>>> fpga_add(fpga_altera, &altera_fpga[i]); >>>>>>>>> #endif >>>>>>>>> } >>>>>>>>> >>>>>>>>> Is that OK? >>>>>>>> Can't you have __weak empty implementation of >>>>>>>> socfpga_fpga_add() >>>>>>>> and >>>>>>>> implement a version per platform ? Would that work and >>>>>>>> make >>>>>>>> sense >>>>>>>> ? >>>>>>> socfpga_fpga_add() as shown above is a generic function for >>>>>>> adding >>>>>>> FPGA >>>>>>> devices to FPGA driver which applies to all our platforms. >>>>>>> This >>>>>>> is >>>>>>> the >>>>>>> reason why it is defined in misc.c instead of >>>>>>> misc_<platform_name>.c. >>>>>>> >>>>>>> It turned out we already have this defined in misc.h: >>>>>>> #ifdef CONFIG_FPGA >>>>>>> void socfpga_fpga_add(void); >>>>>>> #else >>>>>>> static inline void socfpga_fpga_add(void) {} >>>>>>> #endif >>>>>> Right, if you had one socfpga_fpga_add() per platform + >>>>>> generic >>>>>> empty >>>>>> one, you could drop that whole thing ^. >>>>> Yes. It's being addressed in v3 patch: >>>>> https://lists.denx.de/pipermail/u-boot/2018-October/343561.html >>>> So where did the function go in there ? I don't see any __weak >>>> anything. >>> I don't have to add anything in my v3 patchsets to make this work. >>> It's already taken care by arch/arm/mach- >>> socfpga/include/mach/misc.h as >>> shown below: >>> >>> #ifdef CONFIG_FPGA >>> void socfpga_fpga_add(void); >>> #else >>> static inline void socfpga_fpga_add(void) {} >>> #endif >>> >>> An empty default socfpga_fpga_add() will be defined if CONFIG_FPGA >>> is >>> not defined. >> I was hoping to turn this into __weak function. > > Below are the new changes for new patch: > Empty weak function in arch/arm/mach-socfpga/misc.c: > > /* add device descriptor to FPGA device table */ > __weak void socfpga_fpga_add(void) > { > } > > > In arch/arm/mach-socfpga/misc_aria10.c and arch/arm/mach- > socfpga/misc_gen5.c: > > #ifdef CONFIG_FPGA > /* > * FPGA programming support for SoC FPGA Cyclone V > */ > static Altera_desc altera_fpga[] = { > { > /* Family */ > Altera_SoCFPGA, > /* Interface type */ > fast_passive_parallel, > /* No limitation as additional data will be ignored */ > -1, > /* No device function table */ > NULL, > /* Base interface address specified in driver */ > NULL, > /* No cookie implementation */ > 0 > }, > }; > > /* add device descriptor to FPGA device table */ > void socfpga_fpga_add(void) > { > int i; > fpga_init(); > for (i = 0; i < ARRAY_SIZE(altera_fpga); i++) > fpga_add(fpga_altera, &altera_fpga[i]); > } > #endif > > > In arch/arm/mach-socfpga/misc_s10.c: > > #ifdef CONFIG_FPGA > /* > * FPGA programming support for SoC FPGA Stratix 10 > */ > static Altera_desc altera_fpga[] = { > { > /* Family */ > Intel_FPGA_Stratix10, > /* Interface type */ > secure_device_manager_mailbox, > /* No limitation as additional data will be ignored */ > -1, > /* No device function table */ > NULL, > /* Base interface address specified in driver */ > NULL, > /* No cookie implementation */ > 0 > }, > }; > > /* add device descriptor to FPGA device table */ > void socfpga_fpga_add(void) > { > int i; > fpga_init(); > for (i = 0; i < ARRAY_SIZE(altera_fpga); i++) > fpga_add(fpga_altera, &altera_fpga[i]); > } > #endif > > With this new implementation, each platform overrides the > 'socfpga_fpga_add' to add its own fpga device. The problem here is > since our aria10 and gen5 are adding same fpga device, there will be > duplication of code for these 2 platforms. > What do you think ?
I think you can create a common code for Gen5 somehow, right ? > If you are OK with this implementation, I can submit a new patch for > review again. Thanks. Submit the patches, yes. -- Best regards, Marek Vasut _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot