From 6de1daf64b1acc3d2249ceed34756435a1b13d98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pali=20Roh=C3=A1r?= <pali@kernel.org> Date: Mon, 12 Sep 2022 11:38:55 +0200 Subject: [PATCH 1/8] cmd: ubi: Add 'ubi list' command for printing list of all UBI volumes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit To allow easily iterate over all UBI volumes, add a new command which either print all user UBI volumes on output or set them into env variable. As UBI volumes can have arbitrary name/label, in most cases it is useful to iterate them by their numbers. This can be achieved by -numeric flag. This functionality is similar to already existing 'part list' command which prints partitions on formatted block device. Signed-off-by: Pali Rohár <pali@kernel.org> --- cmd/ubi.c | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/cmd/ubi.c b/cmd/ubi.c index fccbfdf48d..b61ae1efea 100644 --- a/cmd/ubi.c +++ b/cmd/ubi.c @@ -27,6 +27,7 @@ #include <ubi_uboot.h> #include <linux/errno.h> #include <jffs2/load_kernel.h> +#include <linux/log2.h> #undef ubi_msg #define ubi_msg(fmt, ...) printf("UBI: " fmt "\n", ##__VA_ARGS__) @@ -84,6 +85,70 @@ static int ubi_info(int layout) return 0; } +static int ubi_list(const char *var, int numeric) +{ + size_t namelen, len, size; + char *str, *str2; + int i; + + if (!var) { + for (i = 0; i < (ubi->vtbl_slots + 1); i++) { + if (!ubi->volumes[i]) + continue; + if (ubi->volumes[i]->vol_id >= UBI_INTERNAL_VOL_START) + continue; + printf("%d: %s\n", + ubi->volumes[i]->vol_id, + ubi->volumes[i]->name); + } + return 0; + } + + len = 0; + size = 16; + str = malloc(size); + if (!str) + return 1; + + for (i = 0; i < (ubi->vtbl_slots + 1); i++) { + if (!ubi->volumes[i]) + continue; + if (ubi->volumes[i]->vol_id >= UBI_INTERNAL_VOL_START) + continue; + + if (numeric) + namelen = 10; /* strlen(stringify(INT_MAX)) */ + else + namelen = strlen(ubi->volumes[i]->name); + + if (len + namelen + 1 > size) { + size = roundup_pow_of_two(len + namelen + 1) * 2; + str2 = realloc(str, size); + if (!str2) { + free(str); + return 1; + } + str = str2; + } + + if (len) + str[len++] = ' '; + + if (numeric) { + len += sprintf(str + len, "%d", ubi->volumes[i]->vol_id) + 1; + } else { + memcpy(str + len, ubi->volumes[i]->name, namelen); + len += namelen; + str[len] = 0; + } + } + + env_set(var, str); + free(str); + + return 0; +} + static int ubi_check_volumename(const struct ubi_volume *vol, char *name) { return strcmp(vol->name, name); @@ -586,6 +651,21 @@ static int do_ubi(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) return ubi_info(layout); } + if (strcmp(argv[1], "list") == 0) { + int numeric = 0; + if (argc >= 2 && argv[2][0] == '-') { + if (strcmp(argv[2], "-numeric") == 0) + numeric = 1; + else + return CMD_RET_USAGE; + } + if (!numeric && argc != 2 && argc != 3) + return CMD_RET_USAGE; + if (numeric && argc != 3 && argc != 4) + return CMD_RET_USAGE; + return ubi_list(argv[numeric ? 3 : 2], numeric); + } + if (strcmp(argv[1], "check") == 0) { if (argc > 2) return ubi_check(argv[2]); @@ -725,6 +805,11 @@ U_BOOT_CMD( " header offset)\n" "ubi info [l[ayout]]" " - Display volume and ubi layout information\n" + "ubi list [flags]" + " - print the list of volumes\n" + "ubi list [flags] <varname>" + " - set environment variable to the list of volumes" + " (flags can be -numeric)\n" "ubi check volumename" " - check if volumename exists\n" "ubi create[vol] volume [size] [type] [id] [--skipcheck]\n" From eebb967dce04426b5f4b5f4fda51fbf95dea4c32 Mon Sep 17 00:00:00 2001 From: Patrick Delaunay <patrick.delaunay@foss.st.com> Date: Fri, 30 Sep 2022 09:36:38 +0200 Subject: [PATCH 2/8] firmware: scmi: fix the multi channel support with CCF When the CCF is activated, the dev->parent is not necessary the reference to SCMI transport and the function devm_scmi_of_get_channel failed for the registered SCMI clock, child for protocol@14, the channel is null and the SCMI clock driver crash for any operations. This patch changes the first parameter of the ops of_get_channel(), aligned with other process_msg() to pass directly the good reference, i.e. parent result of find_scmi_transport_device(dev) which return the reference of the scmi transport device. Fixes: 8e96801aa6a ("firmware: scmi: add multi-channel support") Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com> --- drivers/firmware/scmi/mailbox_agent.c | 2 +- drivers/firmware/scmi/optee_agent.c | 2 +- drivers/firmware/scmi/scmi_agent-uclass.c | 2 +- drivers/firmware/scmi/smccc_agent.c | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/firmware/scmi/mailbox_agent.c b/drivers/firmware/scmi/mailbox_agent.c index 3efdab9e72..8277c18606 100644 --- a/drivers/firmware/scmi/mailbox_agent.c +++ b/drivers/firmware/scmi/mailbox_agent.c @@ -96,7 +96,7 @@ static int setup_channel(struct udevice *dev, struct scmi_mbox_channel *chan) static int scmi_mbox_get_channel(struct udevice *dev, struct scmi_channel **channel) { - struct scmi_mbox_channel *base_chan = dev_get_plat(dev->parent); + struct scmi_mbox_channel *base_chan = dev_get_plat(dev); struct scmi_mbox_channel *chan; int ret; diff --git a/drivers/firmware/scmi/optee_agent.c b/drivers/firmware/scmi/optee_agent.c index 2b2b8c1670..db927fb214 100644 --- a/drivers/firmware/scmi/optee_agent.c +++ b/drivers/firmware/scmi/optee_agent.c @@ -326,7 +326,7 @@ static int setup_channel(struct udevice *dev, struct scmi_optee_channel *chan) static int scmi_optee_get_channel(struct udevice *dev, struct scmi_channel **channel) { - struct scmi_optee_channel *base_chan = dev_get_plat(dev->parent); + struct scmi_optee_channel *base_chan = dev_get_plat(dev); struct scmi_optee_channel *chan; u32 channel_id; int ret; diff --git a/drivers/firmware/scmi/scmi_agent-uclass.c b/drivers/firmware/scmi/scmi_agent-uclass.c index c3f3d1f440..8f48de30c8 100644 --- a/drivers/firmware/scmi/scmi_agent-uclass.c +++ b/drivers/firmware/scmi/scmi_agent-uclass.c @@ -137,7 +137,7 @@ int devm_scmi_of_get_channel(struct udevice *dev, struct scmi_channel **channel) return -ENODEV; if (transport_dev_ops(parent)->of_get_channel) - return transport_dev_ops(parent)->of_get_channel(dev, channel); + return transport_dev_ops(parent)->of_get_channel(parent, channel); /* Drivers without a get_channel operator don't need a channel ref */ *channel = NULL; diff --git a/drivers/firmware/scmi/smccc_agent.c b/drivers/firmware/scmi/smccc_agent.c index bc2eb67335..6a52cd75d6 100644 --- a/drivers/firmware/scmi/smccc_agent.c +++ b/drivers/firmware/scmi/smccc_agent.c @@ -83,7 +83,7 @@ static int setup_channel(struct udevice *dev, struct scmi_smccc_channel *chan) static int scmi_smccc_get_channel(struct udevice *dev, struct scmi_channel **channel) { - struct scmi_smccc_channel *base_chan = dev_get_plat(dev->parent); + struct scmi_smccc_channel *base_chan = dev_get_plat(dev); struct scmi_smccc_channel *chan; u32 func_id; int ret; From 0b154c8e8c726c68a28847aaa93756f0612995dc Mon Sep 17 00:00:00 2001 From: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> Date: Sat, 1 Oct 2022 21:42:35 +0200 Subject: [PATCH 3/8] test: run setexpr test only on sandbox The test relies on memory being available at 0x0. This in not valid for many boards. Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> Reviewed-by: Simon Glass <sjg@chromium.org> --- test/cmd/Makefile | 2 ++ test/cmd_ut.c | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/test/cmd/Makefile b/test/cmd/Makefile index b7b9bd43f6..f2a5f4ed80 100644 --- a/test/cmd/Makefile +++ b/test/cmd/Makefile @@ -15,5 +15,7 @@ obj-$(CONFIG_CMD_LOADM) += loadm.o obj-$(CONFIG_CMD_MEM_SEARCH) += mem_search.o obj-$(CONFIG_CMD_PINMUX) += pinmux.o obj-$(CONFIG_CMD_PWM) += pwm.o +ifdef CONFIG_SANDBOX obj-$(CONFIG_CMD_SETEXPR) += setexpr.o +endif obj-$(CONFIG_CMD_TEMPERATURE) += temperature.o diff --git a/test/cmd_ut.c b/test/cmd_ut.c index 11c219b48a..99e53dddc1 100644 --- a/test/cmd_ut.c +++ b/test/cmd_ut.c @@ -62,7 +62,7 @@ static struct cmd_tbl cmd_ut_sub[] = { U_BOOT_CMD_MKENT(log, CONFIG_SYS_MAXARGS, 1, do_ut_log, "", ""), #endif U_BOOT_CMD_MKENT(mem, CONFIG_SYS_MAXARGS, 1, do_ut_mem, "", ""), -#ifdef CONFIG_CMD_SETEXPR +#if defined(CONFIG_SANDBOX) && defined(CONFIG_CMD_SETEXPR) U_BOOT_CMD_MKENT(setexpr, CONFIG_SYS_MAXARGS, 1, do_ut_setexpr, "", ""), #endif From ce1df11bf4ed029cedf7d6b6bbf429ca50cd8161 Mon Sep 17 00:00:00 2001 From: Robert Marko <robert.marko@sartura.hr> Date: Fri, 7 Oct 2022 11:52:44 +0200 Subject: [PATCH 4/8] smem: msm: add missing <linux/sizes.h> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MSM SMEM driver is currently missing <linux/sizes.h> header and throws the following compile error: drivers/smem/msm_smem.c: In function ‘qcom_smem_get_ptable’: drivers/smem/msm_smem.c:635:71: error: ‘SZ_4K’ undeclared (first use in this function) 635 | ptable = smem->regions[0].virt_base + smem->regions[0].size - SZ_4K; Signed-off-by: Robert Marko <robert.marko@sartura.hr> Cc: luka.perkov@sartura.hr --- drivers/smem/msm_smem.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/smem/msm_smem.c b/drivers/smem/msm_smem.c index 6395b61b0d..17ee6c837c 100644 --- a/drivers/smem/msm_smem.c +++ b/drivers/smem/msm_smem.c @@ -18,6 +18,7 @@ #include <linux/err.h> #include <linux/ioport.h> #include <linux/io.h> +#include <linux/sizes.h> #include <smem.h> DECLARE_GLOBAL_DATA_PTR; From fa1f99a521d2e5fd6fd4c8ecf5ffd24ecafcf75b Mon Sep 17 00:00:00 2001 From: Andrew Davis <afd@ti.com> Date: Fri, 7 Oct 2022 15:35:31 -0500 Subject: [PATCH 5/8] tools: k3_gen_x509_cert: Do not print SWRV on build This matches the others here. Signed-off-by: Andrew Davis <afd@ti.com> --- tools/k3_gen_x509_cert.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/k3_gen_x509_cert.sh b/tools/k3_gen_x509_cert.sh index 029247c105..d9cde07417 100755 --- a/tools/k3_gen_x509_cert.sh +++ b/tools/k3_gen_x509_cert.sh @@ -238,7 +238,7 @@ gen_cert() { #echo " IMAGE_SIZE = $BIN_SIZE" #echo " CERT_TYPE = $CERTTYPE" #echo " DEBUG_TYPE = $DEBUG_TYPE" - echo " SWRV = $SWRV" + #echo " SWRV = $SWRV" sed -e "s/TEST_IMAGE_LENGTH/$BIN_SIZE/" \ -e "s/TEST_IMAGE_SHA_VAL/$SHA_VAL/" \ -e "s/TEST_CERT_TYPE/$CERTTYPE/" \ From 34803205ebb4a049fd8c3e3f885ba440a9fb585e Mon Sep 17 00:00:00 2001 From: Ignacio Zamora <nachopitt@gmail.com> Date: Sat, 8 Oct 2022 09:50:56 -0500 Subject: [PATCH 6/8] Fix typo in CONFIG_USBNET_DEVADDR Fix typo that was caused by the same feature being split in to 2 different configuration options. Replace CONFIG_USBNET_DEVADDR with CONFIG_USBNET_DEV_ADDR Signed-off-by: Ignacio Zamora <nachopitt@gmail.com> --- drivers/usb/gadget/Kconfig | 2 +- drivers/usb/gadget/ether.c | 2 +- include/configs/warp7.h | 2 -- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig index da9c9e3f10..e8da73c788 100644 --- a/drivers/usb/gadget/Kconfig +++ b/drivers/usb/gadget/Kconfig @@ -241,7 +241,7 @@ config USB_ETH_RNDIS endchoice -config USBNET_DEVADDR +config USBNET_DEV_ADDR string "USB Gadget Ethernet device mac address" default "de:ad:be:ef:00:01" help diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c index abb5332f13..6ce389de9f 100644 --- a/drivers/usb/gadget/ether.c +++ b/drivers/usb/gadget/ether.c @@ -2620,7 +2620,7 @@ static int usb_eth_probe(struct udevice *dev) priv->netdev = dev; l_priv = priv; - get_ether_addr(CONFIG_USBNET_DEVADDR, pdata->enetaddr); + get_ether_addr(CONFIG_USBNET_DEV_ADDR, pdata->enetaddr); eth_env_set_enetaddr("usbnet_devaddr", pdata->enetaddr); return 0; diff --git a/include/configs/warp7.h b/include/configs/warp7.h index 7e9b25b07b..a9cc859535 100644 --- a/include/configs/warp7.h +++ b/include/configs/warp7.h @@ -100,8 +100,6 @@ /* USB Device Firmware Update support */ #define DFU_DEFAULT_POLL_TIMEOUT 300 -#define CONFIG_USBNET_DEV_ADDR "de:ad:be:af:00:01" - /* Environment variable name to represent HAB enable state */ #define HAB_ENABLED_ENVNAME "hab_enabled" From 767ecc5f9ff932c2f8361238d50c1dc6e7d07dce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pali=20Roh=C3=A1r?= <pali@kernel.org> Date: Sun, 9 Oct 2022 15:12:09 +0200 Subject: [PATCH 7/8] Nokia RX-51: Remove CONFIG_UBI_SIZE MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CONFIG_UBI_SIZE option is not used, so remove it. Signed-off-by: Pali Rohár <pali@kernel.org> --- include/configs/nokia_rx51.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/include/configs/nokia_rx51.h b/include/configs/nokia_rx51.h index 97aafc5f72..a88cfe77d5 100644 --- a/include/configs/nokia_rx51.h +++ b/include/configs/nokia_rx51.h @@ -31,8 +31,6 @@ #define V_OSCK 26000000 /* Clock output from T2 */ #define V_SCLK (V_OSCK >> 1) -#define CONFIG_UBI_SIZE (512 << 10) - /* * Hardware drivers */ From edb47d612fe9ddca77cd583f14c71517f065405f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pali=20Roh=C3=A1r?= <pali@kernel.org> Date: Sun, 9 Oct 2022 21:38:25 +0200 Subject: [PATCH 8/8] Nokia RX-51: Fix double space key press MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Space key is indicated by two different bits. Some HW models indicate press of space key only by the first bit. Qemu indicates it by both bits at the same time, which is currently interpreted by u-boot as double key press. Fix this issue by setting first bit when only second is set (to support HW models which indicate press only by second bit) and always clearing second bit before processing to not report double space key press. Signed-off-by: Pali Rohár <pali@kernel.org> --- board/nokia/rx51/rx51.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/board/nokia/rx51/rx51.c b/board/nokia/rx51/rx51.c index 9548c3c7be..c1b4b91b60 100644 --- a/board/nokia/rx51/rx51.c +++ b/board/nokia/rx51/rx51.c @@ -561,7 +561,7 @@ static const char keymap[] = { 'q', 'o', 'p', ',', '\b', 0, 'a', 's', 'w', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'e', '.', 0, '\r', 0, 'z', 'x', 'c', - 'r', 'v', 'b', 'n', 'm', ' ', ' ', 0, + 'r', 'v', 'b', 'n', 'm', ' ', 0, 0, 't', 0, 0, 0, 0, 0, 0, 0, 'y', 0, 0, 0, 0, 0, 0, 0, 'u', 0, 0, 0, 0, 0, 0, 0, @@ -691,6 +691,10 @@ static int rx51_kp_tstc(struct udevice *dev) mods = keys[4] >> 4; keys[4] &= 0x0f; + /* space key is indicated by two different bits */ + keys[3] |= (keys[3] & (1 << 6)) >> 1; + keys[3] &= ~(1 << 6); + for (c = 0; c < 8; c++) { /* get newly pressed keys only */