summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile10
-rw-r--r--boot/image.c1
-rw-r--r--drivers/ata/ahci-pci.c2
-rw-r--r--drivers/firmware/scmi/scmi_agent-uclass.c5
-rw-r--r--fs/ext4/ext4_common.c21
-rw-r--r--fs/squashfs/sqfs.c2
-rw-r--r--include/image.h1
-rw-r--r--tools/.gitignore1
-rw-r--r--tools/Makefile4
-rw-r--r--tools/default_image.c11
-rw-r--r--tools/env/fw_env.c10
-rw-r--r--tools/fdtgrep.c8
-rw-r--r--tools/ifwitool.c46
-rw-r--r--tools/mkimage.c39
-rw-r--r--tools/printinitialenv.c44
15 files changed, 142 insertions, 63 deletions
diff --git a/Makefile b/Makefile
index 11efc418041..9ec2e12a06a 100644
--- a/Makefile
+++ b/Makefile
@@ -2439,11 +2439,13 @@ endif
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
quiet_cmd_genenv = GENENV $@
-cmd_genenv = $(OBJCOPY) --dump-section .rodata.default_environment=$@ env/common.o; \
- sed --in-place -e 's/\x00/\x0A/g' $@; sed --in-place -e '/^\s*$$/d' $@; \
- sort --field-separator== -k1,1 --stable $@ -o $@
+cmd_genenv = \
+ $(objtree)/tools/printinitialenv | \
+ sed -e '/^\s*$$/d' | \
+ sort --field-separator== -k1,1 --stable -o $@
-u-boot-initial-env: u-boot.bin
+u-boot-initial-env: $(env_h) FORCE
+ $(Q)$(MAKE) $(build)=tools $(objtree)/tools/printinitialenv
$(call if_changed,genenv)
# Consistency checks
diff --git a/boot/image.c b/boot/image.c
index b33d1dfc6b3..958dbf85347 100644
--- a/boot/image.c
+++ b/boot/image.c
@@ -180,6 +180,7 @@ static const table_entry_t uimage_type[] = {
{ IH_TYPE_COPRO, "copro", "Coprocessor Image"},
{ IH_TYPE_SUNXI_EGON, "sunxi_egon", "Allwinner eGON Boot Image" },
{ IH_TYPE_SUNXI_TOC0, "sunxi_toc0", "Allwinner TOC0 Boot Image" },
+ { IH_TYPE_FDT_LEGACY, "fdt_legacy", "legacy Image with Flat Device Tree ", },
{ -1, "", "", },
};
diff --git a/drivers/ata/ahci-pci.c b/drivers/ata/ahci-pci.c
index 797e0d570e8..5356b9d83d3 100644
--- a/drivers/ata/ahci-pci.c
+++ b/drivers/ata/ahci-pci.c
@@ -37,7 +37,7 @@ U_BOOT_DRIVER(ahci_pci) = {
static struct pci_device_id ahci_pci_supported[] = {
{ PCI_DEVICE_CLASS(PCI_CLASS_STORAGE_SATA_AHCI, ~0) },
- { PCI_DEVICE(0x1b21, 0x0611) },
+ { PCI_DEVICE(PCI_VENDOR_ID_ASMEDIA, 0x0611) },
{ PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x6121) },
{ PCI_DEVICE(PCI_VENDOR_ID_MARVELL, 0x6145) },
{},
diff --git a/drivers/firmware/scmi/scmi_agent-uclass.c b/drivers/firmware/scmi/scmi_agent-uclass.c
index 8f48de30c8c..9a32678617d 100644
--- a/drivers/firmware/scmi/scmi_agent-uclass.c
+++ b/drivers/firmware/scmi/scmi_agent-uclass.c
@@ -60,6 +60,7 @@ static int scmi_bind_protocols(struct udevice *dev)
{
int ret = 0;
ofnode node;
+ const char *name;
dev_for_each_subnode(node, dev) {
struct driver *drv = NULL;
@@ -71,6 +72,7 @@ static int scmi_bind_protocols(struct udevice *dev)
if (ofnode_read_u32(node, "reg", &protocol_id))
continue;
+ name = ofnode_get_name(node);
switch (protocol_id) {
case SCMI_PROTOCOL_ID_CLOCK:
if (IS_ENABLED(CONFIG_CLK_SCMI))
@@ -100,8 +102,7 @@ static int scmi_bind_protocols(struct udevice *dev)
continue;
}
- ret = device_bind(dev, drv, ofnode_get_name(node), NULL, node,
- NULL);
+ ret = device_bind(dev, drv, name, NULL, node, NULL);
if (ret)
break;
}
diff --git a/fs/ext4/ext4_common.c b/fs/ext4/ext4_common.c
index 1185cb2c046..f50de7c089e 100644
--- a/fs/ext4/ext4_common.c
+++ b/fs/ext4/ext4_common.c
@@ -850,15 +850,20 @@ end:
fail:
free(depth_dirname);
- free(parse_dirname);
- for (i = 0; i < depth; i++) {
- if (!ptr[i])
- break;
- free(ptr[i]);
+ if (parse_dirname)
+ free(parse_dirname);
+ if (ptr) {
+ for (i = 0; i < depth; i++) {
+ if (!ptr[i])
+ break;
+ free(ptr[i]);
+ }
+ free(ptr);
}
- free(ptr);
- free(parent_inode);
- free(first_inode);
+ if (parent_inode)
+ free(parent_inode);
+ if (first_inode)
+ free(first_inode);
return result_inode_no;
}
diff --git a/fs/squashfs/sqfs.c b/fs/squashfs/sqfs.c
index 74ca70c3ff4..42266219237 100644
--- a/fs/squashfs/sqfs.c
+++ b/fs/squashfs/sqfs.c
@@ -87,7 +87,7 @@ static int sqfs_calc_n_blks(__le64 start, __le64 end, u64 *offset)
u64 start_, table_size;
table_size = le64_to_cpu(end) - le64_to_cpu(start);
- start_ = le64_to_cpu(start) / ctxt.cur_dev->blksz;
+ start_ = lldiv(le64_to_cpu(start), ctxt.cur_dev->blksz);
*offset = le64_to_cpu(start) - (start_ * ctxt.cur_dev->blksz);
return DIV_ROUND_UP(table_size + *offset, ctxt.cur_dev->blksz);
diff --git a/include/image.h b/include/image.h
index 6f21dafba8c..b6a809834ad 100644
--- a/include/image.h
+++ b/include/image.h
@@ -229,6 +229,7 @@ enum image_type_t {
IH_TYPE_COPRO, /* Coprocessor Image for remoteproc*/
IH_TYPE_SUNXI_EGON, /* Allwinner eGON Boot Image */
IH_TYPE_SUNXI_TOC0, /* Allwinner TOC0 Boot Image */
+ IH_TYPE_FDT_LEGACY, /* Binary Flat Device Tree Blob in a Legacy Image */
IH_TYPE_COUNT, /* Number of image types */
};
diff --git a/tools/.gitignore b/tools/.gitignore
index d3a93ff294a..28e8ce2a07a 100644
--- a/tools/.gitignore
+++ b/tools/.gitignore
@@ -28,6 +28,7 @@
/mxsboot
/ncb
/prelink-riscv
+/printinitialenv
/proftool
/relocate-rela
/spl_size_limit
diff --git a/tools/Makefile b/tools/Makefile
index 26be0a7ba2e..80bc62befcb 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -275,6 +275,10 @@ clean-dirs := lib common
always := $(hostprogs-y)
+# Host tool to dump the currently configured default environment,
+# build it on demand, i.e. not add it to 'always'.
+hostprogs-y += printinitialenv
+
# Generated LCD/video logo
LOGO_H = $(objtree)/include/bmp_logo.h
LOGO_DATA_H = $(objtree)/include/bmp_logo_data.h
diff --git a/tools/default_image.c b/tools/default_image.c
index 4a067e65862..0ac3382003d 100644
--- a/tools/default_image.c
+++ b/tools/default_image.c
@@ -27,7 +27,8 @@ static struct legacy_img_hdr header;
static int image_check_image_types(uint8_t type)
{
if (((type > IH_TYPE_INVALID) && (type < IH_TYPE_FLATDT)) ||
- (type == IH_TYPE_KERNEL_NOLOAD) || (type == IH_TYPE_FIRMWARE_IVT))
+ (type == IH_TYPE_KERNEL_NOLOAD) || (type == IH_TYPE_FIRMWARE_IVT) ||
+ (type == IH_TYPE_FDT_LEGACY))
return EXIT_SUCCESS;
else
return EXIT_FAILURE;
@@ -94,6 +95,7 @@ static void image_set_header(void *ptr, struct stat *sbuf, int ifd,
uint32_t imagesize;
uint32_t ep;
uint32_t addr;
+ int type;
struct legacy_img_hdr *hdr = (struct legacy_img_hdr *)ptr;
checksum = crc32(0,
@@ -113,6 +115,11 @@ static void image_set_header(void *ptr, struct stat *sbuf, int ifd,
else
imagesize = sbuf->st_size - sizeof(struct legacy_img_hdr);
+ if (params->type == IH_TYPE_FDT_LEGACY)
+ type = IH_TYPE_FLATDT;
+ else
+ type = params->type;
+
if (params->os == IH_OS_TEE) {
addr = optee_image_get_load_addr(hdr);
ep = optee_image_get_entry_point(hdr);
@@ -127,7 +134,7 @@ static void image_set_header(void *ptr, struct stat *sbuf, int ifd,
image_set_dcrc(hdr, checksum);
image_set_os(hdr, params->os);
image_set_arch(hdr, params->arch);
- image_set_type(hdr, params->type);
+ image_set_type(hdr, type);
image_set_comp(hdr, params->comp);
image_set_name(hdr, params->imagename);
diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c
index c251e2e6ba7..c9a8774acef 100644
--- a/tools/env/fw_env.c
+++ b/tools/env/fw_env.c
@@ -1733,6 +1733,7 @@ static int find_nvmem_device(void)
while (!nvmem && (dent = readdir(dir))) {
FILE *fp;
+ size_t size;
if (!strcmp(dent->d_name, ".") || !strcmp(dent->d_name, "..")) {
continue;
@@ -1748,7 +1749,14 @@ static int find_nvmem_device(void)
continue;
}
- fread(buf, sizeof(buf), 1, fp);
+ size = fread(buf, sizeof(buf), 1, fp);
+ if (size != 1) {
+ fprintf(stderr,
+ "read failed about %s\n", comp);
+ fclose(fp);
+ return -EIO;
+ }
+
if (!strcmp(buf, "u-boot,env")) {
bytes = asprintf(&nvmem, "%s/%s/nvmem", path, dent->d_name);
diff --git a/tools/fdtgrep.c b/tools/fdtgrep.c
index 641d6a2e3e0..7eabcab4399 100644
--- a/tools/fdtgrep.c
+++ b/tools/fdtgrep.c
@@ -712,15 +712,19 @@ int utilfdt_read_err_len(const char *filename, char **buffp, off_t *len)
/* Loop until we have read everything */
buf = malloc(bufsize);
- if (!buf)
+ if (!buf) {
+ close(fd);
return -ENOMEM;
+ }
do {
/* Expand the buffer to hold the next chunk */
if (offset == bufsize) {
bufsize *= 2;
buf = realloc(buf, bufsize);
- if (!buf)
+ if (!buf) {
+ close(fd);
return -ENOMEM;
+ }
}
ret = read(fd, &buf[offset], bufsize - offset);
diff --git a/tools/ifwitool.c b/tools/ifwitool.c
index b2b06cc9219..31591863b2e 100644
--- a/tools/ifwitool.c
+++ b/tools/ifwitool.c
@@ -1441,23 +1441,20 @@ static void bpdt_fixup_write_buffer(struct buffer *buf)
size_t offset = 0;
- offset = fix_member(&h->signature, offset, sizeof(h->signature));
- offset = fix_member(&h->descriptor_count, offset,
- sizeof(h->descriptor_count));
- offset = fix_member(&h->bpdt_version, offset, sizeof(h->bpdt_version));
- offset = fix_member(&h->xor_redundant_block, offset,
- sizeof(h->xor_redundant_block));
- offset = fix_member(&h->ifwi_version, offset, sizeof(h->ifwi_version));
- offset = fix_member(&h->fit_tool_version, offset,
- sizeof(h->fit_tool_version));
+ offset = fix_member(&s, offset, sizeof(h->signature));
+ offset = fix_member(&s, offset, sizeof(h->descriptor_count));
+ offset = fix_member(&s, offset, sizeof(h->bpdt_version));
+ offset = fix_member(&s, offset, sizeof(h->xor_redundant_block));
+ offset = fix_member(&s, offset, sizeof(h->ifwi_version));
+ offset = fix_member(&s, offset, sizeof(h->fit_tool_version));
uint32_t i;
for (i = 0; i < count; i++) {
- offset = fix_member(&e[i].type, offset, sizeof(e[i].type));
- offset = fix_member(&e[i].flags, offset, sizeof(e[i].flags));
- offset = fix_member(&e[i].offset, offset, sizeof(e[i].offset));
- offset = fix_member(&e[i].size, offset, sizeof(e[i].size));
+ offset = fix_member(&s, offset, sizeof(e[i].type));
+ offset = fix_member(&s, offset, sizeof(e[i].flags));
+ offset = fix_member(&s, offset, sizeof(e[i].offset));
+ offset = fix_member(&s, offset, sizeof(e[i].size));
}
}
@@ -1628,6 +1625,8 @@ static void init_manifest_header(struct manifest_header *hdr, size_t size)
curr_time = time(NULL);
local_time = localtime(&curr_time);
+ assert(local_time != NULL);
+
strftime(buffer, sizeof(buffer), "0x%Y%m%d", local_time);
hdr->date = strtoul(buffer, NULL, 16);
@@ -1655,24 +1654,21 @@ static void subpart_dir_fixup_write_buffer(struct buffer *buf)
size_t count = h->num_entries;
size_t offset = 0;
- offset = fix_member(&h->marker, offset, sizeof(h->marker));
- offset = fix_member(&h->num_entries, offset, sizeof(h->num_entries));
- offset = fix_member(&h->header_version, offset,
- sizeof(h->header_version));
- offset = fix_member(&h->entry_version, offset,
- sizeof(h->entry_version));
- offset = fix_member(&h->header_length, offset,
- sizeof(h->header_length));
- offset = fix_member(&h->checksum, offset, sizeof(h->checksum));
+ offset = fix_member(&s, offset, sizeof(h->marker));
+ offset = fix_member(&s, offset, sizeof(h->num_entries));
+ offset = fix_member(&s, offset, sizeof(h->header_version));
+ offset = fix_member(&s, offset, sizeof(h->entry_version));
+ offset = fix_member(&s, offset, sizeof(h->header_length));
+ offset = fix_member(&s, offset, sizeof(h->checksum));
offset += sizeof(h->name);
uint32_t i;
for (i = 0; i < count; i++) {
offset += sizeof(e[i].name);
- offset = fix_member(&e[i].offset, offset, sizeof(e[i].offset));
- offset = fix_member(&e[i].length, offset, sizeof(e[i].length));
- offset = fix_member(&e[i].rsvd, offset, sizeof(e[i].rsvd));
+ offset = fix_member(&s, offset, sizeof(e[i].offset));
+ offset = fix_member(&s, offset, sizeof(e[i].length));
+ offset = fix_member(&s, offset, sizeof(e[i].rsvd));
}
}
diff --git a/tools/mkimage.c b/tools/mkimage.c
index 30c6df77081..8306861ce51 100644
--- a/tools/mkimage.c
+++ b/tools/mkimage.c
@@ -430,6 +430,25 @@ static void verify_image(const struct image_type_params *tparams)
(void)close(ifd);
}
+void copy_datafile(int ifd, char *file)
+{
+ if (!file)
+ return;
+ for (;;) {
+ char *sep = strchr(file, ':');
+
+ if (sep) {
+ *sep = '\0';
+ copy_file(ifd, file, 1);
+ *sep++ = ':';
+ file = sep;
+ } else {
+ copy_file(ifd, file, 0);
+ break;
+ }
+ }
+}
+
int main(int argc, char **argv)
{
int ifd = -1;
@@ -647,21 +666,7 @@ int main(int argc, char **argv)
file = NULL;
}
}
-
- file = params.datafile;
-
- for (;;) {
- char *sep = strchr(file, ':');
- if (sep) {
- *sep = '\0';
- copy_file (ifd, file, 1);
- *sep++ = ':';
- file = sep;
- } else {
- copy_file (ifd, file, 0);
- break;
- }
- }
+ copy_datafile(ifd, params.datafile);
} else if (params.type == IH_TYPE_PBLIMAGE) {
/* PBL has special Image format, implements its' own */
pbl_load_uboot(ifd, &params);
@@ -760,8 +765,8 @@ int main(int argc, char **argv)
if (tparams->set_header)
tparams->set_header (ptr, &sbuf, ifd, &params);
else {
- fprintf (stderr, "%s: Can't set header for %s: %s\n",
- params.cmdname, tparams->name, strerror(errno));
+ fprintf (stderr, "%s: Can't set header for %s\n",
+ params.cmdname, tparams->name);
exit (EXIT_FAILURE);
}
diff --git a/tools/printinitialenv.c b/tools/printinitialenv.c
new file mode 100644
index 00000000000..c58b234d679
--- /dev/null
+++ b/tools/printinitialenv.c
@@ -0,0 +1,44 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * (C) Copyright 2022
+ * Max Krummenacher, Toradex
+ *
+ * Snippets taken from tools/env/fw_env.c
+ *
+ * This prints the list of default environment variables as currently
+ * configured.
+ *
+ */
+
+#include <stdio.h>
+
+/* Pull in the current config to define the default environment */
+#include <linux/kconfig.h>
+
+#ifndef __ASSEMBLY__
+#define __ASSEMBLY__ /* get only #defines from config.h */
+#include <config.h>
+#undef __ASSEMBLY__
+#else
+#include <config.h>
+#endif
+
+#define DEFAULT_ENV_INSTANCE_STATIC
+#include <generated/environment.h>
+#include <env_default.h>
+
+int main(void)
+{
+ char *env, *nxt;
+
+ for (env = default_environment; *env; env = nxt + 1) {
+ for (nxt = env; *nxt; ++nxt) {
+ if (nxt >= &default_environment[sizeof(default_environment)]) {
+ fprintf(stderr, "## Error: environment not terminated\n");
+ return -1;
+ }
+ }
+ printf("%s\n", env);
+ }
+ return 0;
+}