[U-Boot] [PATCH 2/3] cmd: fpga: Add support to load secure bitstreams
Michal Simek
michal.simek at xilinx.com
Thu May 31 06:44:38 UTC 2018
On 31.5.2018 08:05, Siva Durga Prasad Paladugu wrote:
> Hi,
>
>> -----Original Message-----
>> From: Michal Simek [mailto:michal.simek at xilinx.com]
>> Sent: Thursday, May 31, 2018 11:29 AM
>> To: Siva Durga Prasad Paladugu <sivadur at xilinx.com>; u-
>> boot at lists.denx.de
>> Cc: michal.simek at xilinx.com
>> Subject: Re: [PATCH 2/3] cmd: fpga: Add support to load secure bitstreams
>>
>> On 29.5.2018 16:22, Siva Durga Prasad Paladugu wrote:
>>> This patch adds support to load secure bitstreams(authenticated or
>>> encrypted or both). As of now, this feature is added and tested only
>>> for xilinx bitstreams and the secure bitstream was generated using
>>> xilinx bootgen tool, but the command is defined in more generic way.
>>>
>>> Command example to load authenticated and device key encrypted
>>> bitstream is as follows "fpga loads 0 100000 2000000 0 1"
>>>
>>> Signed-off-by: Siva Durga Prasad Paladugu
>>> <siva.durga.paladugu at xilinx.com>
>>> ---
>>> cmd/Kconfig | 7 ++++++
>>> cmd/fpga.c | 62
>> ++++++++++++++++++++++++++++++++++++++++++++++++++++-
>>> drivers/fpga/fpga.c | 29 +++++++++++++++++++++++++
>>> include/fpga.h | 11 ++++++++++
>>> 4 files changed, 108 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/cmd/Kconfig b/cmd/Kconfig index 38406fc..9b9eb94 100644
>>> --- a/cmd/Kconfig
>>> +++ b/cmd/Kconfig
>>> @@ -697,6 +697,13 @@ config CMD_FPGA_LOADP
>>> Supports loading an FPGA device from a bitstream buffer
>> containing
>>> a partial bitstream.
>>>
>>> +config CMD_FPGA_LOAD_SECURE
>>> +bool "fpga loads - loads secure bitstreams (Xilinx only)"
>>> +depends on CMD_FPGA
>>> +help
>>> + Enables the fpga loads command which is used to load secure
>>> + (authenticated or encrypted or both) bitstreams on to FPGA.
>>> +
>>> config CMD_FPGAD
>>> bool "fpgad - dump FPGA registers"
>>> help
>>> diff --git a/cmd/fpga.c b/cmd/fpga.c
>>> index 0981826..ad716a0 100644
>>> --- a/cmd/fpga.c
>>> +++ b/cmd/fpga.c
>>> @@ -27,6 +27,7 @@ enum {
>>> FPGA_LOADP,
>>> FPGA_LOADBP,
>>> FPGA_LOADFS,
>>> +FPGA_LOADS,
>>> };
>>>
>>> /*
>>> ------------------------------------------------------------------------- */ @@ -54,6 +55,11
>> @@ int do_fpga(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
>>> fpga_fs_info fpga_fsinfo;
>>> fpga_fsinfo.fstype = FS_TYPE_ANY;
>>> #endif
>>> +#if defined(CONFIG_CMD_FPGA_LOAD_SECURE)
>>> +struct fpga_secure_info fpga_sec_info;
>>> +
>>> +memset(&fpga_sec_info, 0, sizeof(fpga_sec_info)); #endif
>>>
>>> if (devstr)
>>> dev = (int) simple_strtoul(devstr, NULL, 16); @@ -80,6
>> +86,19 @@
>>> int do_fpga(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
>>> argc = 5;
>>> break;
>>> #endif
>>> +#if defined(CONFIG_CMD_FPGA_LOAD_SECURE)
>>> +case FPGA_LOADS:
>>> +if (argc < 7)
>>> +return CMD_RET_USAGE;
>>> +if (argc == 8)
>>> +fpga_sec_info.userkey_addr = (u8 *)(uintptr_t)
>>> + simple_strtoull(argv[7],
>>> + NULL, 16);
>>> +fpga_sec_info.encflag = (u8)simple_strtoul(argv[6], NULL,
>> 16);
>>> +fpga_sec_info.authflag = (u8)simple_strtoul(argv[5], NULL,
>> 16);
>>> +argc = 5;
>>> +break;
>>> +#endif
>>> default:
>>> break;
>>> }
>>> @@ -150,6 +169,22 @@ int do_fpga(cmd_tbl_t *cmdtp, int flag, int argc,
>> char *const argv[])
>>> if (!fpga_fsinfo.interface || !fpga_fsinfo.dev_part ||
>>> !fpga_fsinfo.filename)
>>> wrong_parms = 1;
>>> +break;
>>> +#endif
>>> +#if defined(CONFIG_CMD_FPGA_LOAD_SECURE)
>>> +case FPGA_LOADS:
>>> +if (fpga_sec_info.authflag >= FPGA_NO_ENC_OR_NO_AUTH
>> &&
>>> + fpga_sec_info.encflag >= FPGA_NO_ENC_OR_NO_AUTH) {
>>> +puts("ERR: use <fpga load> for NonSecure
>> bitstream\n");
>>> +wrong_parms = 1;
>>> +}
>>> +
>>> +if (fpga_sec_info.encflag == FPGA_ENC_USR_KEY &&
>>> + !fpga_sec_info.userkey_addr) {
>>> +wrong_parms = 1;
>>> +puts("ERR:User key not provided\n");
>>> +}
>>> +break;
>>
>> I have created some patches on the top of this series to clean this file more.
>> And There is no reason to put this checking here. You can simply put it to
>> code above and instead of wrong_parms just return CMD_RET_USAGE.
>
> I thought of putting the validation of received arguments here, that’s why I placed it here.
> Also, used wrong_parms just to maintain consistency with other command handling.
>
> Are you taking care of this in your series, if so, will leave it as is in this series. I think it would be
> better if you can move this in your cleanup patches on top of this series if it didn’t break any
> functionality.
I have not a problem with this.
M
More information about the U-Boot
mailing list