From 86786bdba34e1f3e1651de7e75e2612049d6af4c Mon Sep 17 00:00:00 2001 From: Michal Simek Date: Fri, 27 Jun 2025 11:02:11 +0200 Subject: [PATCH 01/12] xilinx: zynqmp: Remove PSCI_RESET from mini configurations There is no reason to call reset in these size constrained configurations that's why remove it to get some space. Signed-off-by: Michal Simek Link: https://lore.kernel.org/r/cb5189d676852cad7ab3c0691490b2d0dac618b4.1751014928.git.michal.simek@amd.com --- configs/xilinx_zynqmp_mini_defconfig | 1 + configs/xilinx_zynqmp_mini_emmc0_defconfig | 1 + configs/xilinx_zynqmp_mini_emmc1_defconfig | 1 + configs/xilinx_zynqmp_mini_nand_defconfig | 1 + configs/xilinx_zynqmp_mini_nand_single_defconfig | 1 + 5 files changed, 5 insertions(+) diff --git a/configs/xilinx_zynqmp_mini_defconfig b/configs/xilinx_zynqmp_mini_defconfig index f164580c501..41444271f0d 100644 --- a/configs/xilinx_zynqmp_mini_defconfig +++ b/configs/xilinx_zynqmp_mini_defconfig @@ -11,6 +11,7 @@ CONFIG_DEFAULT_DEVICE_TREE="zynqmp-mini" CONFIG_SYS_LOAD_ADDR=0x8000000 CONFIG_XILINX_MINI=y CONFIG_SYS_MEM_RSVD_FOR_MMU=y +# CONFIG_PSCI_RESET is not set CONFIG_SYS_MEMTEST_START=0x00000000 CONFIG_SYS_MEMTEST_END=0x00001000 CONFIG_REMAKE_ELF=y diff --git a/configs/xilinx_zynqmp_mini_emmc0_defconfig b/configs/xilinx_zynqmp_mini_emmc0_defconfig index 8a8a9b0b463..369d480fd1f 100644 --- a/configs/xilinx_zynqmp_mini_emmc0_defconfig +++ b/configs/xilinx_zynqmp_mini_emmc0_defconfig @@ -16,6 +16,7 @@ CONFIG_SPL_BSS_MAX_SIZE=0x80000 CONFIG_SYS_LOAD_ADDR=0x8000000 CONFIG_SPL=y CONFIG_XILINX_MINI=y +# CONFIG_PSCI_RESET is not set CONFIG_REMAKE_ELF=y # CONFIG_MP is not set # CONFIG_EFI_LOADER is not set diff --git a/configs/xilinx_zynqmp_mini_emmc1_defconfig b/configs/xilinx_zynqmp_mini_emmc1_defconfig index 3fc4f2f9b86..2b415b8f727 100644 --- a/configs/xilinx_zynqmp_mini_emmc1_defconfig +++ b/configs/xilinx_zynqmp_mini_emmc1_defconfig @@ -16,6 +16,7 @@ CONFIG_SPL_BSS_MAX_SIZE=0x80000 CONFIG_SYS_LOAD_ADDR=0x8000000 CONFIG_SPL=y CONFIG_XILINX_MINI=y +# CONFIG_PSCI_RESET is not set CONFIG_REMAKE_ELF=y # CONFIG_MP is not set # CONFIG_EFI_LOADER is not set diff --git a/configs/xilinx_zynqmp_mini_nand_defconfig b/configs/xilinx_zynqmp_mini_nand_defconfig index cfcb4321b1f..c7271899bdf 100644 --- a/configs/xilinx_zynqmp_mini_nand_defconfig +++ b/configs/xilinx_zynqmp_mini_nand_defconfig @@ -11,6 +11,7 @@ CONFIG_ENV_SIZE=0x80 CONFIG_DEFAULT_DEVICE_TREE="zynqmp-mini-nand" CONFIG_SYS_LOAD_ADDR=0x8000000 CONFIG_XILINX_MINI=y +# CONFIG_PSCI_RESET is not set CONFIG_REMAKE_ELF=y # CONFIG_MP is not set CONFIG_FIT=y diff --git a/configs/xilinx_zynqmp_mini_nand_single_defconfig b/configs/xilinx_zynqmp_mini_nand_single_defconfig index 9af0b717ba9..bb9cd882340 100644 --- a/configs/xilinx_zynqmp_mini_nand_single_defconfig +++ b/configs/xilinx_zynqmp_mini_nand_single_defconfig @@ -11,6 +11,7 @@ CONFIG_ENV_SIZE=0x80 CONFIG_DEFAULT_DEVICE_TREE="zynqmp-mini-nand" CONFIG_SYS_LOAD_ADDR=0x8000000 CONFIG_XILINX_MINI=y +# CONFIG_PSCI_RESET is not set CONFIG_REMAKE_ELF=y # CONFIG_MP is not set CONFIG_FIT=y From f08dcc55243f4af9e8edc0a1c48cfee06e6a0cd3 Mon Sep 17 00:00:00 2001 From: Pieter Van Trappen Date: Tue, 8 Jul 2025 17:24:46 +0200 Subject: [PATCH 02/12] cmd: fpga: improve user feedback in case of bitstream load failure In cmd/fpga.c, change some `debug` calls to `log_err` for important user feedback and use CMD_RET_FAILURE in favor of CMD_RET_USAGE due to its long output which hides the actual, useful return message. Change the remaining `debug` calls to `log_debug`. Remove all 'fpga:' and __func__ strings as log_* has this covered. For `do_fpga_loads`, move up the `do_fpga_check_params` call for more consistent command output; use a constant instead of multiple '5' use. In drivers/fpga/zynq*.c, change 'up to' to 'above' which corrects this confusing/wrong statement. Signed-off-by: Pieter Van Trappen Link: https://lore.kernel.org/r/20250708152455.1214487-2-vtpieter@gmail.com Signed-off-by: Michal Simek --- cmd/fpga.c | 99 +++++++++++++++++++++-------------------- drivers/fpga/zynqmppl.c | 4 +- drivers/fpga/zynqpl.c | 4 +- 3 files changed, 54 insertions(+), 53 deletions(-) diff --git a/cmd/fpga.c b/cmd/fpga.c index 9dc7b63db5d..9cc51f04698 100644 --- a/cmd/fpga.c +++ b/cmd/fpga.c @@ -28,7 +28,7 @@ static long do_fpga_get_device(char *arg) if (dev == FPGA_INVALID_DEVICE && arg) dev = simple_strtol(arg, NULL, 16); - debug("%s: device = %ld\n", __func__, dev); + log_debug("device = %ld\n", dev); return dev; } @@ -40,26 +40,26 @@ static int do_fpga_check_params(long *dev, long *fpga_data, size_t *data_size, size_t local_data_size; long local_fpga_data; - debug("%s %d, %d\n", __func__, argc, cmdtp->maxargs); + log_debug("%d, %d\n", argc, cmdtp->maxargs); if (argc != cmdtp->maxargs) { - debug("fpga: incorrect parameters passed\n"); - return CMD_RET_USAGE; + log_err("Incorrect number of parameters passed\n"); + return CMD_RET_FAILURE; } *dev = do_fpga_get_device(argv[0]); local_fpga_data = simple_strtol(argv[1], NULL, 16); if (!local_fpga_data) { - debug("fpga: zero fpga_data address\n"); - return CMD_RET_USAGE; + log_err("Zero fpga_data address\n"); + return CMD_RET_FAILURE; } *fpga_data = local_fpga_data; local_data_size = hextoul(argv[2], NULL); if (!local_data_size) { - debug("fpga: zero size\n"); - return CMD_RET_USAGE; + log_err("Zero size\n"); + return CMD_RET_FAILURE; } *data_size = local_data_size; @@ -70,51 +70,52 @@ static int do_fpga_check_params(long *dev, long *fpga_data, size_t *data_size, static int do_fpga_loads(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) { + struct fpga_secure_info fpga_sec_info; + const int pos_userkey = 5; size_t data_size = 0; long fpga_data, dev; int ret; - struct fpga_secure_info fpga_sec_info; memset(&fpga_sec_info, 0, sizeof(fpga_sec_info)); - if (argc < 5) { - debug("fpga: incorrect parameters passed\n"); - return CMD_RET_USAGE; + if (argc < pos_userkey) { + log_err("Too few parameters passed\n"); + return CMD_RET_FAILURE; } - if (argc == 6) + if (argc == pos_userkey + 1) fpga_sec_info.userkey_addr = (u8 *)(uintptr_t) - simple_strtoull(argv[5], + simple_strtoull(argv[pos_userkey], NULL, 16); else /* * If 6th parameter is not passed then do_fpga_check_params * will get 5 instead of expected 6 which means that function - * return CMD_RET_USAGE. Increase number of params +1 to pass + * return CMD_RET_FAILURE. Increase number of params +1 to pass * this. */ argc++; + ret = do_fpga_check_params(&dev, &fpga_data, &data_size, + cmdtp, argc, argv); + if (ret) + return ret; + fpga_sec_info.encflag = (u8)hextoul(argv[4], NULL); fpga_sec_info.authflag = (u8)hextoul(argv[3], NULL); if (fpga_sec_info.authflag >= FPGA_NO_ENC_OR_NO_AUTH && fpga_sec_info.encflag >= FPGA_NO_ENC_OR_NO_AUTH) { - debug("fpga: Use for NonSecure bitstream\n"); - return CMD_RET_USAGE; + log_err("Use for NonSecure bitstream\n"); + return CMD_RET_FAILURE; } if (fpga_sec_info.encflag == FPGA_ENC_USR_KEY && !fpga_sec_info.userkey_addr) { - debug("fpga: User key not provided\n"); - return CMD_RET_USAGE; + log_err("User key not provided\n"); + return CMD_RET_FAILURE; } - ret = do_fpga_check_params(&dev, &fpga_data, &data_size, - cmdtp, argc, argv); - if (ret) - return ret; - return fpga_loads(dev, (void *)fpga_data, data_size, &fpga_sec_info); } #endif @@ -245,23 +246,23 @@ static int do_fpga_loadmk(struct cmd_tbl *cmdtp, int flag, int argc, ulong dev = do_fpga_get_device(argv[0]); char *datastr = env_get("fpgadata"); - debug("fpga: argc %x, dev %lx, datastr %s\n", argc, dev, datastr); + log_debug("argc %x, dev %lx, datastr %s\n", argc, dev, datastr); if (dev == FPGA_INVALID_DEVICE) { - debug("fpga: Invalid fpga device\n"); - return CMD_RET_USAGE; + log_err("Invalid fpga device\n"); + return CMD_RET_FAILURE; } if (argc == 0 && !datastr) { - debug("fpga: No datastr passed\n"); - return CMD_RET_USAGE; + log_err("No datastr passed\n"); + return CMD_RET_FAILURE; } if (argc == 2) { datastr = argv[1]; - debug("fpga: Full command with two args\n"); + log_debug("Full command with two args\n"); } else if (argc == 1 && !datastr) { - debug("fpga: Dev is setup - fpgadata passed\n"); + log_debug("Dev is setup - fpgadata passed\n"); datastr = argv[0]; } @@ -269,20 +270,20 @@ static int do_fpga_loadmk(struct cmd_tbl *cmdtp, int flag, int argc, if (fit_parse_subimage(datastr, (ulong)fpga_data, &fit_addr, &fit_uname)) { fpga_data = (void *)fit_addr; - debug("* fpga: subimage '%s' from FIT image ", - fit_uname); - debug("at 0x%08lx\n", fit_addr); + log_debug("* fpga: subimage '%s' from FIT image ", + fit_uname); + log_debug("at 0x%08lx\n", fit_addr); } else #endif { fpga_data = (void *)hextoul(datastr, NULL); - debug("* fpga: cmdline image address = 0x%08lx\n", - (ulong)fpga_data); + log_debug("* fpga: cmdline image address = 0x%08lx\n", + (ulong)fpga_data); } - debug("%s: fpga_data = 0x%lx\n", __func__, (ulong)fpga_data); + log_debug("fpga_data = 0x%lx\n", (ulong)fpga_data); if (!fpga_data) { - puts("Zero fpga_data address\n"); - return CMD_RET_USAGE; + log_err("Zero fpga_data address\n"); + return CMD_RET_FAILURE; } switch (genimg_get_format(fpga_data)) { @@ -303,13 +304,13 @@ static int do_fpga_loadmk(struct cmd_tbl *cmdtp, int flag, int argc, if (gunzip((void *)data, ~0UL, (void *)image_buf, &image_size) != 0) { - puts("GUNZIP: error\n"); + log_err("Gunzip error\n"); return CMD_RET_FAILURE; } data_size = image_size; #else - puts("Gunzip image is not supported\n"); - return 1; + log_err("Gunzip image is not supported\n"); + return CMD_RET_FAILURE; #endif } else { data = (ulong)image_get_data(hdr); @@ -327,12 +328,12 @@ static int do_fpga_loadmk(struct cmd_tbl *cmdtp, int flag, int argc, const void *fit_data; if (!fit_uname) { - puts("No FIT subimage unit name\n"); + log_err("No FIT subimage unit name\n"); return CMD_RET_FAILURE; } if (fit_check_format(fit_hdr, IMAGE_SIZE_INVAL)) { - puts("Bad FIT image format\n"); + log_err("Bad FIT image format\n"); return CMD_RET_FAILURE; } @@ -348,7 +349,7 @@ static int do_fpga_loadmk(struct cmd_tbl *cmdtp, int flag, int argc, } #endif default: - puts("** Unknown image type\n"); + log_err("Unknown image type\n"); return CMD_RET_FAILURE; } } @@ -390,16 +391,16 @@ static int do_fpga_wrapper(struct cmd_tbl *cmdtp, int flag, int argc, fpga_cmd = find_cmd_tbl(argv[1], fpga_commands, ARRAY_SIZE(fpga_commands)); if (!fpga_cmd) { - debug("fpga: non existing command\n"); - return CMD_RET_USAGE; + log_err("Non existing command\n"); + return CMD_RET_FAILURE; } argc -= 2; argv += 2; if (argc > fpga_cmd->maxargs) { - debug("fpga: more parameters passed\n"); - return CMD_RET_USAGE; + log_err("Too many parameters passed\n"); + return CMD_RET_FAILURE; } ret = fpga_cmd->cmd(fpga_cmd, flag, argc, argv); diff --git a/drivers/fpga/zynqmppl.c b/drivers/fpga/zynqmppl.c index 2b62bbbe3cf..1199b249e36 100644 --- a/drivers/fpga/zynqmppl.c +++ b/drivers/fpga/zynqmppl.c @@ -191,8 +191,8 @@ static int zynqmp_validate_bitstream(xilinx_desc *desc, const void *buf, } if ((ulong)buf < SZ_1M) { - printf("%s: Bitstream has to be placed up to 1MB (%px)\n", - __func__, buf); + log_err("Bitstream has to be placed above 1MB (%px)\n", + buf); return FPGA_FAIL; } diff --git a/drivers/fpga/zynqpl.c b/drivers/fpga/zynqpl.c index 3e86d854a01..5a37a33b0a7 100644 --- a/drivers/fpga/zynqpl.c +++ b/drivers/fpga/zynqpl.c @@ -360,8 +360,8 @@ static int zynq_validate_bitstream(xilinx_desc *desc, const void *buf, } if ((u32)buf < SZ_1M) { - printf("%s: Bitstream has to be placed up to 1MB (%x)\n", - __func__, (u32)buf); + log_err("Bitstream has to be placed above 1MB (%x)\n", + (u32)buf); return FPGA_FAIL; } From 5d74cf2204d48b9a0900fcd2173e807e16ad0fb2 Mon Sep 17 00:00:00 2001 From: Pieter Van Trappen Date: Tue, 8 Jul 2025 17:24:47 +0200 Subject: [PATCH 03/12] drivers: fpga: add Kconfig dependency FPGA_SOCFPGA requires ARCH_SOCFPGA cause socfpga.c contains arch/arm/mach-socfpga/* include macros. Signed-off-by: Pieter Van Trappen Link: https://lore.kernel.org/r/20250708152455.1214487-3-vtpieter@gmail.com Signed-off-by: Michal Simek --- drivers/fpga/Kconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/fpga/Kconfig b/drivers/fpga/Kconfig index 62cb77b098c..9456ca3149a 100644 --- a/drivers/fpga/Kconfig +++ b/drivers/fpga/Kconfig @@ -15,6 +15,7 @@ config FPGA_ALTERA config FPGA_SOCFPGA bool "Enable Gen5 and Arria10 common FPGA drivers" + depends on ARCH_SOCFPGA select FPGA_ALTERA help Say Y here to enable the Gen5 and Arria10 common FPGA driver From 53a10c8ce996dff088fe4afecf0ea446acba854b Mon Sep 17 00:00:00 2001 From: Pieter Van Trappen Date: Tue, 8 Jul 2025 17:24:48 +0200 Subject: [PATCH 04/12] drivers: fpga: correct compiler errors and warnings Errors reported by GCC 14.2 when enabling FPGA commands and drivers. Also many style fixes as reported by checkpatch.pl on the diffs. Most changes in stratixII.c which has been reorganized as well to avoid the top function prototypes. No functional changes. Signed-off-by: Pieter Van Trappen Link: https://lore.kernel.org/r/20250708152455.1214487-4-vtpieter@gmail.com Signed-off-by: Michal Simek --- cmd/fpga.c | 2 +- drivers/fpga/ACEX1K.c | 1 + drivers/fpga/ivm_core.c | 1 + drivers/fpga/lattice.c | 4 +- drivers/fpga/spartan2.c | 1 + drivers/fpga/stratixII.c | 132 ++++++++++++++++++--------------------- drivers/fpga/stratixv.c | 2 +- drivers/fpga/versalpl.c | 1 - drivers/fpga/virtex2.c | 2 + include/stratixII.h | 6 +- 10 files changed, 73 insertions(+), 79 deletions(-) diff --git a/cmd/fpga.c b/cmd/fpga.c index 9cc51f04698..d51c380d7b3 100644 --- a/cmd/fpga.c +++ b/cmd/fpga.c @@ -302,7 +302,7 @@ static int do_fpga_loadmk(struct cmd_tbl *cmdtp, int flag, int argc, data = image_get_load(hdr); - if (gunzip((void *)data, ~0UL, (void *)image_buf, + if (gunzip((void *)data, ~0U, (void *)image_buf, &image_size) != 0) { log_err("Gunzip error\n"); return CMD_RET_FAILURE; diff --git a/drivers/fpga/ACEX1K.c b/drivers/fpga/ACEX1K.c index 3de9011ac06..e1514fc56d0 100644 --- a/drivers/fpga/ACEX1K.c +++ b/drivers/fpga/ACEX1K.c @@ -14,6 +14,7 @@ #include #include /* ACEX device family */ #include +#include /* Note: The assumption is that we cannot possibly run fast enough to * overrun the device (the Slave Parallel mode can free run at 50MHz). diff --git a/drivers/fpga/ivm_core.c b/drivers/fpga/ivm_core.c index 3c9a01e5110..4ab5dab250a 100644 --- a/drivers/fpga/ivm_core.c +++ b/drivers/fpga/ivm_core.c @@ -33,6 +33,7 @@ #include #include #include +#include #define vme_out_char(c) printf("%c", c) #define vme_out_hex(c) printf("%x", c) diff --git a/drivers/fpga/lattice.c b/drivers/fpga/lattice.c index 3f481e38565..29cf2f60974 100644 --- a/drivers/fpga/lattice.c +++ b/drivers/fpga/lattice.c @@ -350,8 +350,8 @@ int lattice_info(Lattice_desc *desc) printf("Unsupported interface type, %d\n", desc->iface); } - printf("Device Size: \t%d bytes\n", - desc->size); + printf("Device Size: \t%zu bytes\n", + desc->size); if (desc->iface_fns) { printf("Device Function Table @ 0x%p\n", diff --git a/drivers/fpga/spartan2.c b/drivers/fpga/spartan2.c index 906649ea181..792e4033428 100644 --- a/drivers/fpga/spartan2.c +++ b/drivers/fpga/spartan2.c @@ -9,6 +9,7 @@ #include /* core U-Boot definitions */ #include #include /* Spartan-II device family */ +#include /* Note: The assumption is that we cannot possibly run fast enough to * overrun the device (the Slave Parallel mode can free run at 50MHz). diff --git a/drivers/fpga/stratixII.c b/drivers/fpga/stratixII.c index 73fecd9dca5..3f984385316 100644 --- a/drivers/fpga/stratixII.c +++ b/drivers/fpga/stratixII.c @@ -5,92 +5,41 @@ */ #include +#include #include -int StratixII_ps_fpp_load (Altera_desc * desc, void *buf, size_t bsize, - int isSerial, int isSecure); -int StratixII_ps_fpp_dump (Altera_desc * desc, void *buf, size_t bsize); - /****************************************************************/ /* Stratix II Generic Implementation */ -int StratixII_load (Altera_desc * desc, void *buf, size_t bsize) +int StratixII_ps_fpp_dump(Altera_desc *desc, const void *buf, size_t bsize) { - int ret_val = FPGA_FAIL; - - switch (desc->iface) { - case passive_serial: - ret_val = StratixII_ps_fpp_load (desc, buf, bsize, 1, 0); - break; - case fast_passive_parallel: - ret_val = StratixII_ps_fpp_load (desc, buf, bsize, 0, 0); - break; - case fast_passive_parallel_security: - ret_val = StratixII_ps_fpp_load (desc, buf, bsize, 0, 1); - break; - - /* Add new interface types here */ - default: - printf ("%s: Unsupported interface type, %d\n", __FUNCTION__, - desc->iface); - } - return ret_val; -} - -int StratixII_dump (Altera_desc * desc, void *buf, size_t bsize) -{ - int ret_val = FPGA_FAIL; - - switch (desc->iface) { - case passive_serial: - case fast_passive_parallel: - case fast_passive_parallel_security: - ret_val = StratixII_ps_fpp_dump (desc, buf, bsize); - break; - /* Add new interface types here */ - default: - printf ("%s: Unsupported interface type, %d\n", __FUNCTION__, - desc->iface); - } - return ret_val; -} - -int StratixII_info (Altera_desc * desc) -{ - return FPGA_SUCCESS; -} - -int StratixII_ps_fpp_dump (Altera_desc * desc, void *buf, size_t bsize) -{ - printf ("Stratix II Fast Passive Parallel dump is not implemented\n"); + printf("Stratix II Fast Passive Parallel dump is not implemented\n"); return FPGA_FAIL; } -int StratixII_ps_fpp_load (Altera_desc * desc, void *buf, size_t bsize, - int isSerial, int isSecure) +int StratixII_ps_fpp_load(Altera_desc *desc, const void *buf, size_t bsize, + int isSerial, int isSecure) { altera_board_specific_func *fns; int cookie; int ret_val = FPGA_FAIL; int bytecount; - char *buff = buf; + const char *buff = buf; int i; if (!desc) { - printf ("%s(%d) Altera_desc missing\n", __FUNCTION__, __LINE__); + log_err("Altera_desc missing\n"); return FPGA_FAIL; } if (!buff) { - printf ("%s(%d) buffer is missing\n", __FUNCTION__, __LINE__); + log_err("buffer is missing\n"); return FPGA_FAIL; } if (!bsize) { - printf ("%s(%d) size is zero\n", __FUNCTION__, __LINE__); + log_err("size is zero\n"); return FPGA_FAIL; } if (!desc->iface_fns) { - printf - ("%s(%d) Altera_desc function interface table is missing\n", - __FUNCTION__, __LINE__); + log_err("Altera_desc function interface table is missing\n"); return FPGA_FAIL; } fns = (altera_board_specific_func *) (desc->iface_fns); @@ -99,9 +48,7 @@ int StratixII_ps_fpp_load (Altera_desc * desc, void *buf, size_t bsize, if (! (fns->config && fns->status && fns->done && fns->data && fns->abort)) { - printf - ("%s(%d) Missing some function in the function interface table\n", - __FUNCTION__, __LINE__); + log_err("Missing some function in the function interface table\n"); return FPGA_FAIL; } @@ -124,13 +71,12 @@ int StratixII_ps_fpp_load (Altera_desc * desc, void *buf, size_t bsize, bytecount = 0; fns->clk (0, 1, cookie); - printf ("loading to fpga "); + printf("loading to fpga "); while (bytecount < bsize) { /* 3.1 check stratix has not signaled us an error */ if (fns->status (cookie) != 1) { - printf - ("\n%s(%d) Stratix failed (byte transferred till failure 0x%x)\n", - __FUNCTION__, __LINE__, bytecount); + log_err("\nStratix failed (byte transferred till failure 0x%x)\n", + bytecount); fns->abort (cookie); return FPGA_FAIL; } @@ -162,7 +108,7 @@ int StratixII_ps_fpp_load (Altera_desc * desc, void *buf, size_t bsize, /* 3.5 while clk is deasserted it is safe to print some progress indication */ if ((bytecount % (bsize / 100)) == 0) { - printf ("\b\b\b%02d\%", bytecount * 100 / bsize); + printf("\b\b\b%02zu\%%", bytecount * 100 / bsize); } } @@ -170,11 +116,11 @@ int StratixII_ps_fpp_load (Altera_desc * desc, void *buf, size_t bsize, fns->clk (1, 1, cookie); udelay(100); if (!fns->done (cookie)) { - printf (" error!.\n"); + printf(" error!.\n"); fns->abort (cookie); return FPGA_FAIL; } else { - printf ("\b\b\b done.\n"); + printf("\b\b\b done.\n"); } /* 5. call lower layer post configuration */ @@ -187,3 +133,47 @@ int StratixII_ps_fpp_load (Altera_desc * desc, void *buf, size_t bsize, return FPGA_SUCCESS; } + +int StratixII_load(Altera_desc *desc, const void *buf, size_t size) +{ + int ret_val = FPGA_FAIL; + + switch (desc->iface) { + case passive_serial: + ret_val = StratixII_ps_fpp_load(desc, buf, size, 1, 0); + break; + case fast_passive_parallel: + ret_val = StratixII_ps_fpp_load(desc, buf, size, 0, 0); + break; + case fast_passive_parallel_security: + ret_val = StratixII_ps_fpp_load(desc, buf, size, 0, 1); + break; + + /* Add new interface types here */ + default: + log_err("Unsupported interface type, %d\n", desc->iface); + } + return ret_val; +} + +int StratixII_dump(Altera_desc *desc, const void *buf, size_t bsize) +{ + int ret_val = FPGA_FAIL; + + switch (desc->iface) { + case passive_serial: + case fast_passive_parallel: + case fast_passive_parallel_security: + ret_val = StratixII_ps_fpp_dump(desc, buf, bsize); + break; + /* Add new interface types here */ + default: + log_err("Unsupported interface type, %d\n", desc->iface); + } + return ret_val; +} + +int StratixII_info(Altera_desc *desc) +{ + return FPGA_SUCCESS; +} diff --git a/drivers/fpga/stratixv.c b/drivers/fpga/stratixv.c index 372f16d92d1..4b251994598 100644 --- a/drivers/fpga/stratixv.c +++ b/drivers/fpga/stratixv.c @@ -48,7 +48,7 @@ int stratixv_load(Altera_desc *desc, const void *rbf_data, size_t rbf_size) int spi_dev; int ret = 0; - if ((u32)rbf_data & 0x3) { + if ((size_t)rbf_data & 0x3) { puts("FPGA: Unaligned data, realign to 32bit boundary.\n"); return -EINVAL; } diff --git a/drivers/fpga/versalpl.c b/drivers/fpga/versalpl.c index d691f135e89..624493ad838 100644 --- a/drivers/fpga/versalpl.c +++ b/drivers/fpga/versalpl.c @@ -6,7 +6,6 @@ #include #include -#include #include #include #include diff --git a/drivers/fpga/virtex2.c b/drivers/fpga/virtex2.c index 8e2c12bb58b..805cbac8082 100644 --- a/drivers/fpga/virtex2.c +++ b/drivers/fpga/virtex2.c @@ -19,6 +19,7 @@ #include #include #include +#include /* * If the SelectMap interface can be overrun by the processor, enable @@ -301,6 +302,7 @@ static int virtex2_ssm_load(xilinx_desc *desc, const void *buf, size_t bsize) size_t bytecount = 0; unsigned char *data = (unsigned char *)buf; int cookie = desc->cookie; + unsigned long ts; ret_val = virtex2_slave_pre(fn, cookie); if (ret_val != FPGA_SUCCESS) diff --git a/include/stratixII.h b/include/stratixII.h index 3c06bb2955a..785cdf41cb8 100644 --- a/include/stratixII.h +++ b/include/stratixII.h @@ -6,8 +6,8 @@ #ifndef _STRATIXII_H_ #define _STRATIXII_H_ -extern int StratixII_load (Altera_desc * desc, void *image, size_t size); -extern int StratixII_dump (Altera_desc * desc, void *buf, size_t bsize); -extern int StratixII_info (Altera_desc * desc); +int StratixII_load(Altera_desc *desc, const void *buf, size_t size); +int StratixII_dump(Altera_desc *desc, const void *buf, size_t bsize); +int StratixII_info(Altera_desc *desc); #endif /* _STRATIXII_H_ */ From 354b2a29ec40d643c8a0facf5bfb4c66386e9391 Mon Sep 17 00:00:00 2001 From: Pieter Van Trappen Date: Tue, 8 Jul 2025 17:24:49 +0200 Subject: [PATCH 05/12] drivers: fpga: cleanup printf usage Remove `fpga_no_sup` to get rid of Werror=unused-function when all FPGA configurations are enabled. Swap all printf calls to log_* as this is now preferred and includes the calling __func__. Signed-off-by: Pieter Van Trappen Link: https://lore.kernel.org/r/20250708152455.1214487-5-vtpieter@gmail.com Signed-off-by: Michal Simek --- drivers/fpga/fpga.c | 103 +++++++++++++++++------------------------- drivers/fpga/xilinx.c | 2 +- include/fpga.h | 2 +- 3 files changed, 44 insertions(+), 63 deletions(-) diff --git a/drivers/fpga/fpga.c b/drivers/fpga/fpga.c index f88267e01b6..2297fefd149 100644 --- a/drivers/fpga/fpga.c +++ b/drivers/fpga/fpga.c @@ -16,20 +16,6 @@ static int next_desc = FPGA_INVALID_DEVICE; static fpga_desc desc_table[CONFIG_MAX_FPGA_DEVICES]; -/* - * fpga_no_sup - * 'no support' message function - */ -static void fpga_no_sup(char *fn, char *msg) -{ - if (fn && msg) - printf("%s: No support for %s.\n", fn, msg); - else if (msg) - printf("No support for %s.\n", msg); - else - printf("No FPGA support!\n"); -} - /* fpga_get_desc * map a device number to a descriptor */ @@ -39,8 +25,8 @@ const fpga_desc *fpga_get_desc(int devnum) if ((devnum >= 0) && (devnum < next_desc)) { desc = &desc_table[devnum]; - debug("%s: found fpga descriptor #%d @ 0x%p\n", - __func__, devnum, desc); + log_debug("found fpga descriptor #%d @ 0x%p\n", + devnum, desc); } return desc; @@ -51,15 +37,15 @@ const fpga_desc *fpga_get_desc(int devnum) * generic parameter checking code */ const fpga_desc *fpga_validate(int devnum, const void *buf, - size_t bsize, char *fn) + size_t bsize) { const fpga_desc *desc = fpga_get_desc(devnum); if (!desc) - printf("%s: Invalid device number %d\n", fn, devnum); + log_err("Invalid device number %d\n", devnum); if (!buf) { - printf("%s: Null buffer.\n", fn); + log_err("Null buffer.\n"); return NULL; } return desc; @@ -75,40 +61,40 @@ static int fpga_dev_info(int devnum) const fpga_desc *desc = fpga_get_desc(devnum); if (desc) { - debug("%s: Device Descriptor @ 0x%p\n", - __func__, desc->devdesc); + log_info("Device Descriptor @ 0x%p\n", + desc->devdesc); switch (desc->devtype) { case fpga_xilinx: #if defined(CONFIG_FPGA_XILINX) - printf("Xilinx Device\nDescriptor @ 0x%p\n", desc); + log_info("Xilinx Device\nDescriptor @ 0x%p\n", desc); ret_val = xilinx_info(desc->devdesc); #else - fpga_no_sup((char *)__func__, "Xilinx devices"); + log_err("No support for Xilinx devices.\n"); #endif break; case fpga_altera: #if defined(CONFIG_FPGA_ALTERA) - printf("Altera Device\nDescriptor @ 0x%p\n", desc); + log_info("Altera Device\nDescriptor @ 0x%p\n", desc); ret_val = altera_info(desc->devdesc); #else - fpga_no_sup((char *)__func__, "Altera devices"); + log_err("No support for Altera devices.\n"); #endif break; case fpga_lattice: #if defined(CONFIG_FPGA_LATTICE) - printf("Lattice Device\nDescriptor @ 0x%p\n", desc); + log_info("Lattice Device\nDescriptor @ 0x%p\n", desc); ret_val = lattice_info(desc->devdesc); #else - fpga_no_sup((char *)__func__, "Lattice devices"); + log_err("No support for Lattice devices.\n"); #endif break; default: - printf("%s: Invalid or unsupported device type %d\n", - __func__, desc->devtype); + log_err("Invalid or unsupported device type %d\n", + desc->devtype); } } else { - printf("%s: Invalid device number %d\n", __func__, devnum); + log_err("Invalid device number %d\n", devnum); } return ret_val; @@ -144,23 +130,22 @@ int fpga_add(fpga_type devtype, void *desc) int devnum = FPGA_INVALID_DEVICE; if (!desc) { - printf("%s: NULL device descriptor\n", __func__); + log_err("NULL device descriptor\n"); return devnum; } if (next_desc < 0) { - printf("%s: FPGA support not initialized!\n", __func__); + log_err("FPGA support not initialized!\n"); } else if ((devtype > fpga_min_type) && (devtype < fpga_undefined)) { 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__); + log_err("Exceeded Max FPGA device count\n"); } } else { - printf("%s: Unsupported FPGA type %d\n", __func__, devtype); + log_err("Unsupported FPGA type %d\n", devtype); } return devnum; @@ -181,7 +166,7 @@ int __weak fpga_is_partial_data(int devnum, size_t img_len) int __weak fpga_loadbitstream(int devnum, char *fpgadata, size_t size, bitstream_type bstype) { - printf("Bitstream support not implemented for this FPGA device\n"); + log_err("Bitstream support not implemented for this FPGA device\n"); return FPGA_FAIL; } @@ -190,8 +175,7 @@ int fpga_fsload(int devnum, const void *buf, size_t size, fpga_fs_info *fpga_fsinfo) { int ret_val = FPGA_FAIL; /* assume failure */ - const fpga_desc *desc = fpga_validate(devnum, buf, size, - (char *)__func__); + const fpga_desc *desc = fpga_validate(devnum, buf, size); if (desc) { switch (desc->devtype) { @@ -200,12 +184,12 @@ int fpga_fsload(int devnum, const void *buf, size_t size, ret_val = xilinx_loadfs(desc->devdesc, buf, size, fpga_fsinfo); #else - fpga_no_sup((char *)__func__, "Xilinx devices"); + log_err("No support for Xilinx devices.\n"); #endif break; default: - printf("%s: Invalid or unsupported device type %d\n", - __func__, desc->devtype); + log_err("Invalid or unsupported device type %d\n", + desc->devtype); } } @@ -219,8 +203,7 @@ int fpga_loads(int devnum, const void *buf, size_t size, { int ret_val = FPGA_FAIL; - const fpga_desc *desc = fpga_validate(devnum, buf, size, - (char *)__func__); + const fpga_desc *desc = fpga_validate(devnum, buf, size); if (desc) { switch (desc->devtype) { @@ -229,12 +212,12 @@ int fpga_loads(int devnum, const void *buf, size_t size, ret_val = xilinx_loads(desc->devdesc, buf, size, fpga_sec_info); #else - fpga_no_sup((char *)__func__, "Xilinx devices"); + log_err("No support for Xilinx devices.\n"); #endif break; default: - printf("%s: Invalid or unsupported device type %d\n", - __func__, desc->devtype); + log_err("Invalid or unsupported device type %d\n", + desc->devtype); } } @@ -265,8 +248,7 @@ int fpga_load(int devnum, const void *buf, size_t bsize, bitstream_type bstype, { int ret_val = FPGA_FAIL; /* assume failure */ int ret_notify; - const fpga_desc *desc = fpga_validate(devnum, buf, bsize, - (char *)__func__); + const fpga_desc *desc = fpga_validate(devnum, buf, bsize); if (desc) { switch (desc->devtype) { @@ -275,26 +257,26 @@ int fpga_load(int devnum, const void *buf, size_t bsize, bitstream_type bstype, ret_val = xilinx_load(desc->devdesc, buf, bsize, bstype, flags); #else - fpga_no_sup((char *)__func__, "Xilinx devices"); + log_err("No support for Xilinx devices.\n"); #endif break; case fpga_altera: #if defined(CONFIG_FPGA_ALTERA) ret_val = altera_load(desc->devdesc, buf, bsize); #else - fpga_no_sup((char *)__func__, "Altera devices"); + log_err("No support for Altera devices.\n"); #endif break; case fpga_lattice: #if defined(CONFIG_FPGA_LATTICE) ret_val = lattice_load(desc->devdesc, buf, bsize); #else - fpga_no_sup((char *)__func__, "Lattice devices"); + log_err("No support for Lattice devices.\n"); #endif break; default: - printf("%s: Invalid or unsupported device type %d\n", - __func__, desc->devtype); + log_err("Invalid or unsupported device type %d\n", + desc->devtype); } } @@ -312,8 +294,7 @@ int fpga_load(int devnum, const void *buf, size_t bsize, bitstream_type bstype, int fpga_dump(int devnum, const void *buf, size_t bsize) { int ret_val = FPGA_FAIL; /* assume failure */ - const fpga_desc *desc = fpga_validate(devnum, buf, bsize, - (char *)__func__); + const fpga_desc *desc = fpga_validate(devnum, buf, bsize); if (desc) { switch (desc->devtype) { @@ -321,26 +302,26 @@ int fpga_dump(int devnum, const void *buf, size_t bsize) #if defined(CONFIG_FPGA_XILINX) ret_val = xilinx_dump(desc->devdesc, buf, bsize); #else - fpga_no_sup((char *)__func__, "Xilinx devices"); + log_err("No support for Xilinx devices.\n"); #endif break; case fpga_altera: #if defined(CONFIG_FPGA_ALTERA) ret_val = altera_dump(desc->devdesc, buf, bsize); #else - fpga_no_sup((char *)__func__, "Altera devices"); + log_err("No support for Altera devices.\n"); #endif break; case fpga_lattice: #if defined(CONFIG_FPGA_LATTICE) ret_val = lattice_dump(desc->devdesc, buf, bsize); #else - fpga_no_sup((char *)__func__, "Lattice devices"); + log_err("No support for Lattice devices.\n"); #endif break; default: - printf("%s: Invalid or unsupported device type %d\n", - __func__, desc->devtype); + log_err("Invalid or unsupported device type %d\n", + desc->devtype); } } @@ -363,7 +344,7 @@ int fpga_info(int devnum) return FPGA_SUCCESS; } else { - printf("%s: No FPGA devices available.\n", __func__); + log_err("No FPGA devices available.\n"); return FPGA_FAIL; } } diff --git a/drivers/fpga/xilinx.c b/drivers/fpga/xilinx.c index c46513226d9..28c68faba55 100644 --- a/drivers/fpga/xilinx.c +++ b/drivers/fpga/xilinx.c @@ -49,7 +49,7 @@ int fpga_loadbitstream(int devnum, char *fpgadata, size_t size, dataptr = (unsigned char *)fpgadata; /* Find out fpga_description */ - desc = fpga_validate(devnum, dataptr, 0, (char *)__func__); + desc = fpga_validate(devnum, dataptr, 0); /* Assign xilinx device description */ xdesc = desc->devdesc; diff --git a/include/fpga.h b/include/fpga.h index 4cc44164b2f..a144238e66a 100644 --- a/include/fpga.h +++ b/include/fpga.h @@ -79,7 +79,7 @@ int fpga_loadbitstream(int devnum, char *fpgadata, size_t size, int fpga_dump(int devnum, const void *buf, size_t bsize); int fpga_info(int devnum); const fpga_desc *fpga_validate(int devnum, const void *buf, - size_t bsize, char *fn); + size_t bsize); int fpga_compatible2flag(int devnum, const char *compatible); #endif /* _FPGA_H_ */ From ac48a75ac1f37b1d6d6a3462a2d77a3d22d5ec6e Mon Sep 17 00:00:00 2001 From: Pieter Van Trappen Date: Tue, 8 Jul 2025 17:24:50 +0200 Subject: [PATCH 06/12] drivers: fpga: fix function declaration without a prototype As reported by clang 20.1, fix multiple of the following: drivers/fpga/ivm_core.c:593:23: error: a function declaration without a prototype is deprecated in all versions of C [-Werror,-Wstrict-prototypes] 593 | long int ispVMDataSize() | ^ | void Also fix the following warning from checkpatch.pl: WARNING: Prefer 'long' over 'long int' as the int is unnecessary Signed-off-by: Pieter Van Trappen Link: https://lore.kernel.org/r/20250708152455.1214487-6-vtpieter@gmail.com Signed-off-by: Michal Simek --- drivers/fpga/ivm_core.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/fpga/ivm_core.c b/drivers/fpga/ivm_core.c index 4ab5dab250a..37d5c5ec9ec 100644 --- a/drivers/fpga/ivm_core.c +++ b/drivers/fpga/ivm_core.c @@ -292,7 +292,7 @@ unsigned short g_usLVDSPairCount; */ static signed char ispVMDataCode(void); -static long int ispVMDataSize(void); +static long ispVMDataSize(void); static void ispVMData(unsigned char *Data); static signed char ispVMShift(signed char Code); static signed char ispVMAmble(signed char Code); @@ -590,7 +590,7 @@ void ispVMFreeMem(void) * */ -long int ispVMDataSize() +long ispVMDataSize(void) { /* 09/11/07 NN added local variables initialization */ long int iSize = 0; @@ -615,7 +615,7 @@ long int ispVMDataSize() * */ -signed char ispVMCode() +signed char ispVMCode(void) { /* 09/11/07 NN added local variables initialization */ unsigned short iRepeatSize = 0; @@ -1114,7 +1114,7 @@ signed char ispVMCode() * */ -signed char ispVMDataCode() +signed char ispVMDataCode(void) { /* 09/11/07 NN added local variables initialization */ signed char cDataByte = 0; @@ -2476,7 +2476,7 @@ void ispVMStateMachine(signed char cNextJTAGState) * */ -void ispVMStart() +void ispVMStart(void) { #ifdef DEBUG printf("// ISPVM EMBEDDED ADDED\n"); @@ -2505,7 +2505,7 @@ void ispVMStart() * */ -void ispVMEnd() +void ispVMEnd(void) { #ifdef DEBUG printf("// ISPVM EMBEDDED ADDED\n"); From d9f17545434e5e3ca41b6f585ef8777529f33829 Mon Sep 17 00:00:00 2001 From: Pieter Van Trappen Date: Tue, 8 Jul 2025 17:24:51 +0200 Subject: [PATCH 07/12] configs: enable FPGA commands and drivers at sandbox_defconfig Enable to facilitate compiler checks on most FPGA-related sources. Signed-off-by: Pieter Van Trappen Link: https://lore.kernel.org/r/20250708152455.1214487-7-vtpieter@gmail.com Signed-off-by: Michal Simek --- configs/sandbox_defconfig | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig index 2eba02e1f07..f2af4e54cef 100644 --- a/configs/sandbox_defconfig +++ b/configs/sandbox_defconfig @@ -77,6 +77,11 @@ CONFIG_CMD_MX_CYCLIC=y CONFIG_CMD_MEMTEST=y CONFIG_CMD_CLK=y CONFIG_CMD_DEMO=y +CONFIG_CMD_FPGA_LOADP=y +CONFIG_CMD_FPGA_LOADBP=y +CONFIG_CMD_FPGA_LOADFS=y +CONFIG_CMD_FPGA_LOADMK=y +CONFIG_CMD_FPGA_LOAD_SECURE=y CONFIG_CMD_GPIO=y CONFIG_CMD_GPIO_READ=y CONFIG_CMD_PWM=y @@ -197,6 +202,21 @@ CONFIG_SANDBOX_DMA=y CONFIG_FASTBOOT_FLASH=y CONFIG_FASTBOOT_FLASH_MMC_DEV=0 CONFIG_ARM_FFA_TRANSPORT=y +CONFIG_FPGA_ALTERA=y +CONFIG_FPGA_STRATIX_II=y +CONFIG_FPGA_STRATIX_V=y +CONFIG_FPGA_ACEX1K=y +CONFIG_FPGA_CYCLON2=y +CONFIG_FPGA_LATTICE=y +CONFIG_FPGA_XILINX=y +CONFIG_FPGA_VERSALPL=y +CONFIG_FPGA_SPARTAN2=y +CONFIG_FPGA_SPARTAN3=y +CONFIG_FPGA_VIRTEX2=y +CONFIG_SYS_FPGA_CHECK_BUSY=y +CONFIG_SYS_FPGA_CHECK_CTRLC=y +CONFIG_DM_FPGA=y +CONFIG_SANDBOX_FPGA=y CONFIG_GPIO_HOG=y CONFIG_DM_GPIO_LOOKUP_LABEL=y CONFIG_QCOM_PMIC_GPIO=y From 62c2c5d2479801f8d9a8c2e4c2d07c564010ea33 Mon Sep 17 00:00:00 2001 From: Venkatesh Yadav Abbarapu Date: Thu, 17 Jul 2025 10:16:32 +0530 Subject: [PATCH 08/12] gpio: zynq: Fix the documentation warning in zynq_gpio_get_bank_pin The 'dev' parameter in the zynq_gpio_get_bank_pin function was not described in its kernel-doc comment block, leading to a Sparse warning. drivers/gpio/zynq_gpio.c:194: warning: Function parameter or member 'dev' not described in 'zynq_gpio_get_bank_pin' Add a description for the 'dev' parameter to satisfy the documentation requirements and improve code clarity for this function. Signed-off-by: Venkatesh Yadav Abbarapu Link: https://lore.kernel.org/r/20250717044632.1353588-1-venkatesh.abbarapu@amd.com Signed-off-by: Michal Simek --- drivers/gpio/zynq_gpio.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/gpio/zynq_gpio.c b/drivers/gpio/zynq_gpio.c index 7db58c70663..ef4f33f84e9 100644 --- a/drivers/gpio/zynq_gpio.c +++ b/drivers/gpio/zynq_gpio.c @@ -184,6 +184,7 @@ static const struct zynq_platform_data zynq_gpio_def = { * pin * @bank_pin_num: an output parameter used to return pin number within a bank * for the given gpio pin + * @dev: Pointer to our device structure. * * Returns the bank number and pin offset within the bank. */ From ee56866f11c9a64b15470ba7165399068818d269 Mon Sep 17 00:00:00 2001 From: Venkatesh Yadav Abbarapu Date: Thu, 17 Jul 2025 10:18:55 +0530 Subject: [PATCH 09/12] net: xilinx: Fix kernel-doc for axi_mrmac function parameters The kernel-doc comment for the axi_mrmac_recv function was missing the colon (':') after the '@packetp' parameter tag. The kernel-doc comment for the axi_mrmac_free_pkt function was missing the colon (':') after the 'length' parameter tag. This caused a Sparse warnings regarding the 'packetp' and 'length' parameters not being described. Fix the formatting to align with kernel-doc standards and resolve the warning. drivers/net/xilinx_axi_mrmac.c:357: warning: Function parameter or member 'packetp' not described in 'axi_mrmac_recv' drivers/net/xilinx_axi_mrmac.c:411: warning: Function parameter or member 'length' not described in 'axi_mrmac_free_pkt' Signed-off-by: Venkatesh Yadav Abbarapu Link: https://lore.kernel.org/r/20250717044855.1359443-1-venkatesh.abbarapu@amd.com Signed-off-by: Michal Simek --- drivers/net/xilinx_axi_mrmac.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/xilinx_axi_mrmac.c b/drivers/net/xilinx_axi_mrmac.c index 555651937f8..56f877c20a6 100644 --- a/drivers/net/xilinx_axi_mrmac.c +++ b/drivers/net/xilinx_axi_mrmac.c @@ -346,7 +346,7 @@ static bool isrxready(struct axi_mrmac_priv *priv) * axi_mrmac_recv - MRMAC Rx function * @dev: udevice structure * @flags: flags from network stack - * @packetp pointer to received data + * @packetp: pointer to received data * * Return: received data length on success, negative value on errors * @@ -399,7 +399,7 @@ static int axi_mrmac_recv(struct udevice *dev, int flags, uchar **packetp) * axi_mrmac_free_pkt - MRMAC free packet function * @dev: udevice structure * @packet: receive buffer pointer - * @length received data length + * @length: received data length * * Return: 0 on success, negative value on errors * From e6345dfc2a5c86e66cac3372152e3295cfaf1ee2 Mon Sep 17 00:00:00 2001 From: Prasanth Babu Mantena Date: Wed, 16 Jul 2025 12:34:07 +0530 Subject: [PATCH 10/12] Revert "spi: cadence_qspi: Fix odd byte write issue in STIG mode" The buffer that is being used to write into the flash needs to be handled properly with padding of 0xFF. The place that this is done can be at a more generic place like spi-nor core. This reverts commit cd9123507003e07b13e61d72e14e493bb338e827. Signed-off-by: Prasanth Babu Mantena Reviewed-by: Neha Malcom Francis Reviewed-by: Venkatesh Yadav Abbarapu Link: https://lore.kernel.org/r/20250716070407.2082524-1-p-mantena@ti.com Signed-off-by: Michal Simek --- drivers/spi/cadence_qspi_apb.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/drivers/spi/cadence_qspi_apb.c b/drivers/spi/cadence_qspi_apb.c index 6f89d3add5d..4696c09f754 100644 --- a/drivers/spi/cadence_qspi_apb.c +++ b/drivers/spi/cadence_qspi_apb.c @@ -558,9 +558,6 @@ int cadence_qspi_apb_command_write(struct cadence_spi_priv *priv, void *reg_base = priv->regbase; u8 opcode; - if (priv->dtr) - txlen += txlen & 1; - if (priv->dtr) opcode = op->cmd.opcode >> 8; else From 7ad14936e3fd22aaf26f4853fc530d915c6c94f7 Mon Sep 17 00:00:00 2001 From: Michal Simek Date: Fri, 18 Jul 2025 09:04:32 +0200 Subject: [PATCH 11/12] arm64: zynqmp: Let fit-dtb.blob generated all the time There is a value to generate fit-dtb.blob even for cases without SPL because flows with FSBL also require it. Reviewed-by: Neha Malcom Francis Signed-off-by: Michal Simek Link: https://lore.kernel.org/r/c2952da3c064d67821cd166d2392db39c1d23b2c.1752822270.git.michal.simek@amd.com --- arch/arm/dts/zynqmp-binman-som.dts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/arm/dts/zynqmp-binman-som.dts b/arch/arm/dts/zynqmp-binman-som.dts index a70123feead..469b94bbde6 100644 --- a/arch/arm/dts/zynqmp-binman-som.dts +++ b/arch/arm/dts/zynqmp-binman-som.dts @@ -20,7 +20,6 @@ binman: binman { multiple-images; -#ifdef CONFIG_SPL fit-dtb.blob { filename = "fit-dtb.blob"; pad-byte = <0>; @@ -109,6 +108,7 @@ }; }; +#ifdef CONFIG_SPL /* Generation in a static way */ itb { filename = U_BOOT_ITB_FILENAME; From 27fa1e2c1794cc589d72d485488c0bbb3b877f09 Mon Sep 17 00:00:00 2001 From: Michal Simek Date: Fri, 18 Jul 2025 10:12:34 +0200 Subject: [PATCH 12/12] firmware: zynqmp: Simplify power-domain driver bind CONFIG_IS_ENABLED macro is covering CONFIG_POWER_DOMAIN or CONFIG_SPL_POWER_DOMAIN Kconfig symbols based on build target which simplify logic around binding power domain driver. Signed-off-by: Michal Simek Link: https://lore.kernel.org/r/c75627e92eeaffedf0f7e682edd4f6f39f0b5706.1752826352.git.michal.simek@amd.com --- drivers/firmware/firmware-zynqmp.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/drivers/firmware/firmware-zynqmp.c b/drivers/firmware/firmware-zynqmp.c index d18ae523b6b..e07ec3929b2 100644 --- a/drivers/firmware/firmware-zynqmp.c +++ b/drivers/firmware/firmware-zynqmp.c @@ -500,11 +500,8 @@ static int zynqmp_firmware_bind(struct udevice *dev) if (!smc_call_handler) return -EINVAL; - if ((IS_ENABLED(CONFIG_XPL_BUILD) && - IS_ENABLED(CONFIG_SPL_POWER_DOMAIN) && - IS_ENABLED(CONFIG_ZYNQMP_POWER_DOMAIN)) || - (!IS_ENABLED(CONFIG_XPL_BUILD) && - IS_ENABLED(CONFIG_ZYNQMP_POWER_DOMAIN))) { + if (CONFIG_IS_ENABLED(POWER_DOMAIN) && + IS_ENABLED(CONFIG_ZYNQMP_POWER_DOMAIN)) { ret = device_bind_driver_to_node(dev, "zynqmp_power_domain", "zynqmp_power_domain", dev_ofnode(dev), &child);