[PATCH v3] event: Add fpga load event

Michal Simek michal.simek at amd.com
Wed Jul 19 10:37:24 CEST 2023



On 7/18/23 13:22, Taedcke, Christian wrote:
> Hello Michal,
> 
> On 17.07.2023 12:36, Michal Simek wrote:
>>
>>
>> On 7/12/23 13:39, christian.taedcke-oss at weidmueller.com wrote:
>>> From: Christian Taedcke <christian.taedcke at weidmueller.com>
>>>
>>> This enables implementing custom logic after a bitstream was loaded
>>> into the fpga.
>>>
>>> Signed-off-by: Christian Taedcke <christian.taedcke at weidmueller.com>
>>> ---
>>>
>>> Changes in v3:
>>> - replace #if with if
>>> - remove previously added printf
>>> - return notification error from fpga_load()
>>> - fix static_assert checking event name list
>>>
>>> Changes in v2:
>>> - replace __weak function with a new event
>>>
>>>   common/event.c      |  3 +++
>>>   drivers/fpga/fpga.c | 20 ++++++++++++++++++++
>>>   include/event.h     | 16 ++++++++++++++++
>>>   3 files changed, 39 insertions(+)
>>>
>>> diff --git a/common/event.c b/common/event.c
>>> index 164c95f8f5..20720c5283 100644
>>> --- a/common/event.c
>>> +++ b/common/event.c
>>> @@ -36,6 +36,9 @@ const char *const type_name[] = {
>>>       /* init hooks */
>>>       "misc_init_f",
>>> +    /* Fpga load hook */
>>> +    "fpga_load",
>>> +
>>>       /* fdt hooks */
>>>       "ft_fixup",
>>> diff --git a/drivers/fpga/fpga.c b/drivers/fpga/fpga.c
>>> index 7f6b6bc73a..81e6d8ffc0 100644
>>> --- a/drivers/fpga/fpga.c
>>> +++ b/drivers/fpga/fpga.c
>>> @@ -244,6 +244,21 @@ int fpga_loads(int devnum, const void *buf, size_t size,
>>>   }
>>>   #endif
>>> +static int fpga_load_event_notify(const void *buf, size_t bsize, int result)
>>> +{
>>> +    if (CONFIG_IS_ENABLED(EVENT)) {
>>> +        struct event_fpga_load load = {
>>> +            .buf = buf,
>>> +            .bsize = bsize,
>>> +            .result = result
>>> +        };
>>> +
>>> +        return event_notify(EVT_FPGA_LOAD, &load, sizeof(load));
>>> +    }
>>> +
>>> +    return 0;
>>> +}
>>> +
>>>   /*
>>>    * Generic multiplexing code
>>>    */
>>> @@ -251,6 +266,7 @@ int fpga_load(int devnum, const void *buf, size_t bsize, 
>>> bitstream_type bstype,
>>>             int flags)
>>>   {
>>>       int ret_val = FPGA_FAIL;           /* assume failure */
>>> +    int ret_notify;
>>>       const fpga_desc *desc = fpga_validate(devnum, buf, bsize,
>>>                             (char *)__func__);
>>> @@ -284,6 +300,10 @@ int fpga_load(int devnum, const void *buf, size_t bsize, 
>>> bitstream_type bstype,
>>>           }
>>>       }
>>> +    ret_notify = fpga_load_event_notify(buf, bsize, ret_val);
>>> +    if (ret_notify)
>>> +        return ret_notify;
>>> +
>>>       return ret_val;
>>>   }
>>> diff --git a/include/event.h b/include/event.h
>>> index fe41080fa6..77124c2e73 100644
>>> --- a/include/event.h
>>> +++ b/include/event.h
>>> @@ -31,6 +31,9 @@ enum event_t {
>>>       /* Init hooks */
>>>       EVT_MISC_INIT_F,
>>> +    /* Fpga load hook */
>>> +    EVT_FPGA_LOAD,
>>> +
>>>       /* Device tree fixups before booting */
>>>       EVT_FT_FIXUP,
>>> @@ -59,6 +62,19 @@ union event_data {
>>>           struct udevice *dev;
>>>       } dm;
>>> +    /**
>>> +     * struct event_fpga_load - fpga load event
>>> +     *
>>> +     * @buf: The buffer that was loaded into the fpga
>>> +     * @bsize: The size of the buffer that was loaded into the fpga
>>> +     * @result: Result of the load operation
>>> +     */
>>> +    struct event_fpga_load {
>>> +        const void *buf;
>>> +        size_t bsize;
>>> +        int result;
>>> +    } fpga_load;
>>> +
>>>       /**
>>>        * struct event_ft_fixup - FDT fixup before booting
>>>        *
>>
>> There is the error generated for kmcent2_defconfig.
>>
>> Please fix.
>>
>> For more information please take a look at
>>
>> https://source.denx.de/u-boot/custodians/u-boot-microblaze/-/jobs/657127
>>
>> +In file included from board/keymile/kmcent2/kmcent2.c:9:
>> +include/event.h:74:17: error: unknown type name 'size_t'
>> +   74 |                 size_t bsize;
>> +      |                 ^~~~~~
>> +make[2]: *** [scripts/Makefile.build:257: board/keymile/kmcent2/kmcent2.o] 
>> Error 1
> 
> Thanks for pasting the error message here, since i cannot access your link.
> 
> Which header should i inlucde before event.h in kmcent2.c (to fix the error)?
> 1. common.h seems to be used often, but i only need size_t, or
> 2. stddef.h seems to be used sometimes, but never in the board folder, or
> 3. linux/stddef.h seems to be used sometimes, but never in the board folder

I think priority is from top to down.
Just try to build that target to see that error first and then try to add 
missing header to fix it.

Thanks,
Michal




More information about the U-Boot mailing list