X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=drivers%2Ffpga%2Ffpga.c;h=fe3dfa12335d59d4a737fc005b3ceb1bac71f3b1;hb=60c7facfc965af6ff8ea14ee26c9d49cd2d0ec22;hp=6aead27f16265e5a3f66973ec5343da1a156baeb;hpb=90d75d2efc376094b50d84de80e9cb8b3bcae032;p=oweals%2Fu-boot.git diff --git a/drivers/fpga/fpga.c b/drivers/fpga/fpga.c index 6aead27f16..fe3dfa1233 100644 --- a/drivers/fpga/fpga.c +++ b/drivers/fpga/fpga.c @@ -1,15 +1,17 @@ +// SPDX-License-Identifier: GPL-2.0+ /* * (C) Copyright 2002 * Rich Ireland, Enterasys Networks, rireland@enterasys.com. - * - * SPDX-License-Identifier: GPL-2.0+ */ /* Generic FPGA support */ #include /* core U-Boot definitions */ +#include +#include #include /* xilinx specific definitions */ #include /* altera specific definitions */ #include +#include /* Local definitions */ #ifndef CONFIG_MAX_FPGA_DEVICES @@ -148,20 +150,21 @@ int fpga_add(fpga_type devtype, void *desc) { int devnum = FPGA_INVALID_DEVICE; + if (!desc) { + printf("%s: NULL device descriptor\n", __func__); + return devnum; + } + if (next_desc < 0) { printf("%s: FPGA support not initialized!\n", __func__); } else if ((devtype > fpga_min_type) && (devtype < fpga_undefined)) { - if (desc) { - if (next_desc < CONFIG_MAX_FPGA_DEVICES) { - devnum = next_desc; - desc_table[next_desc].devtype = devtype; - desc_table[next_desc++].devdesc = desc; - } else { - printf("%s: Exceeded Max FPGA device count\n", - __func__); - } + if (next_desc < CONFIG_MAX_FPGA_DEVICES) { + devnum = next_desc; + desc_table[next_desc].devtype = devtype; + desc_table[next_desc++].devdesc = desc; } else { - printf("%s: NULL device descriptor\n", __func__); + printf("%s: Exceeded Max FPGA device count\n", + __func__); } } else { printf("%s: Unsupported FPGA type %d\n", __func__, devtype); @@ -217,6 +220,35 @@ int fpga_fsload(int devnum, const void *buf, size_t size, } #endif +#if defined(CONFIG_CMD_FPGA_LOAD_SECURE) +int fpga_loads(int devnum, const void *buf, size_t size, + struct fpga_secure_info *fpga_sec_info) +{ + int ret_val = FPGA_FAIL; + + const fpga_desc *desc = fpga_validate(devnum, buf, size, + (char *)__func__); + + if (desc) { + switch (desc->devtype) { + case fpga_xilinx: +#if defined(CONFIG_FPGA_XILINX) + ret_val = xilinx_loads(desc->devdesc, buf, size, + fpga_sec_info); +#else + fpga_no_sup((char *)__func__, "Xilinx devices"); +#endif + break; + default: + printf("%s: Invalid or unsupported device type %d\n", + __func__, desc->devtype); + } + } + + return ret_val; +} +#endif + /* * Generic multiplexing code */