summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom Rini <trini@konsulko.com>2021-04-27 08:24:10 -0400
committerTom Rini <trini@konsulko.com>2021-04-27 08:24:10 -0400
commit27af387e4fa7c04d27a92d5d374d81f2a8fa3cce (patch)
tree091c1c0638bb2ba4ea93f8e06ea7c3a52557fe73
parent3b589d70cdd0147fb5b5c865a31d63b8f0cd685d (diff)
parent67e69660781dac57f4a2347e4ae30d97698f245b (diff)
downloadu-boot-27af387e4fa7c04d27a92d5d374d81f2a8fa3cce.tar.gz
u-boot-27af387e4fa7c04d27a92d5d374d81f2a8fa3cce.tar.xz
u-boot-27af387e4fa7c04d27a92d5d374d81f2a8fa3cce.zip
Merge branch '2021-04-27-assorted-fixes'
- An assortment of bug fixes
-rw-r--r--Makefile5
-rw-r--r--arch/arm/lib/zimage.c12
-rw-r--r--arch/sandbox/dts/test.dts4
-rw-r--r--common/iomux.c8
-rw-r--r--drivers/pinctrl/pinctrl-single.c13
-rw-r--r--drivers/reset/reset-uclass.c2
-rw-r--r--fs/btrfs/inode.c16
-rw-r--r--test/dm/reset.c39
8 files changed, 75 insertions, 24 deletions
diff --git a/Makefile b/Makefile
index a0ab464ea9..404977efa5 100644
--- a/Makefile
+++ b/Makefile
@@ -1854,11 +1854,10 @@ define filechk_timestamp.h
endef
define filechk_defaultenv.h
- (grep -v '^#' | \
- grep -v '^$$' | \
+ ( { grep -v '^#' | grep -v '^$$' || true ; echo '' ; } | \
tr '\n' '\0' | \
sed -e 's/\\\x0\s*//g' | \
- xxd -i ; echo ", 0x00" ; )
+ xxd -i ; )
endef
define filechk_dt.h
diff --git a/arch/arm/lib/zimage.c b/arch/arm/lib/zimage.c
index 477ea94997..45e9c4506a 100644
--- a/arch/arm/lib/zimage.c
+++ b/arch/arm/lib/zimage.c
@@ -25,18 +25,16 @@ int bootz_setup(ulong image, ulong *start, ulong *end)
if (zi->zi_magic != LINUX_ARM_ZIMAGE_MAGIC &&
zi->zi_magic != BAREBOX_IMAGE_MAGIC) {
-#ifndef CONFIG_SPL_FRAMEWORK
- puts("zimage: Bad magic!\n");
-#endif
+ if (!IS_ENABLED(CONFIG_SPL_BUILD))
+ puts("zimage: Bad magic!\n");
return 1;
}
*start = zi->zi_start;
*end = zi->zi_end;
-#ifndef CONFIG_SPL_FRAMEWORK
- printf("Kernel image @ %#08lx [ %#08lx - %#08lx ]\n",
- image, *start, *end);
-#endif
+ if (!IS_ENABLED(CONFIG_SPL_BUILD))
+ printf("Kernel image @ %#08lx [ %#08lx - %#08lx ]\n",
+ image, *start, *end);
return 0;
}
diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts
index 48240aa26f..4fde923e9a 100644
--- a/arch/sandbox/dts/test.dts
+++ b/arch/sandbox/dts/test.dts
@@ -997,8 +997,8 @@
reset-ctl-test {
compatible = "sandbox,reset-ctl-test";
- resets = <&resetc 100>, <&resetc 2>;
- reset-names = "other", "test";
+ resets = <&resetc 100>, <&resetc 2>, <&resetc 20>, <&resetc 40>;
+ reset-names = "other", "test", "test2", "test3";
};
rng {
diff --git a/common/iomux.c b/common/iomux.c
index b9088aa3b5..c428f7110a 100644
--- a/common/iomux.c
+++ b/common/iomux.c
@@ -158,8 +158,12 @@ int iomux_replace_device(const int console, const char *old, const char *new)
return -ENOMEM;
}
- strcat(tmp, ",");
- strcat(tmp, name);
+ if (arg) {
+ strcat(tmp, ",");
+ strcat(tmp, name);
+ }
+ else
+ strcpy(tmp, name);
arg = tmp;
size = strlen(tmp) + 1;
diff --git a/drivers/pinctrl/pinctrl-single.c b/drivers/pinctrl/pinctrl-single.c
index 48bdd0f6f5..ebb7602dde 100644
--- a/drivers/pinctrl/pinctrl-single.c
+++ b/drivers/pinctrl/pinctrl-single.c
@@ -295,7 +295,7 @@ static int single_configure_pins(struct udevice *dev,
func->npins = 0;
for (n = 0; n < count; n++, pins++) {
offset = fdt32_to_cpu(pins->reg);
- if (offset < 0 || offset > pdata->offset) {
+ if (offset > pdata->offset) {
dev_err(dev, " invalid register offset 0x%x\n",
offset);
continue;
@@ -335,6 +335,10 @@ static int single_configure_bits(struct udevice *dev,
phys_addr_t reg;
u32 offset, val, mask, bit_pos, val_pos, mask_pos, submask;
+ /* If function mask is null, needn't enable it. */
+ if (!pdata->mask)
+ return 0;
+
npins_in_reg = pdata->width / priv->bits_per_pin;
func = single_allocate_function(dev, count * npins_in_reg);
if (IS_ERR(func))
@@ -344,7 +348,7 @@ static int single_configure_bits(struct udevice *dev,
func->npins = 0;
for (n = 0; n < count; n++, pins++) {
offset = fdt32_to_cpu(pins->reg);
- if (offset < 0 || offset > pdata->offset) {
+ if (offset > pdata->offset) {
dev_dbg(dev, " invalid register offset 0x%x\n",
offset);
continue;
@@ -469,6 +473,11 @@ static int single_probe(struct udevice *dev)
priv->npins = size / (pdata->width / BITS_PER_BYTE);
if (pdata->bits_per_mux) {
+ if (!pdata->mask) {
+ dev_err(dev, "function mask needs to be non-zero\n");
+ return -EINVAL;
+ }
+
priv->bits_per_pin = fls(pdata->mask);
priv->npins *= (pdata->width / priv->bits_per_pin);
}
diff --git a/drivers/reset/reset-uclass.c b/drivers/reset/reset-uclass.c
index 071c389ca0..ac89eaf098 100644
--- a/drivers/reset/reset-uclass.c
+++ b/drivers/reset/reset-uclass.c
@@ -95,7 +95,7 @@ int reset_get_by_index_nodev(ofnode node, int index,
int ret;
ret = ofnode_parse_phandle_with_args(node, "resets", "#reset-cells", 0,
- index > 0, &args);
+ index, &args);
return reset_get_by_index_tail(ret, node, &args, "resets",
index > 0, reset_ctl);
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 019d532a1a..2c2379303d 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -390,10 +390,16 @@ int btrfs_read_extent_inline(struct btrfs_path *path,
csize);
ret = btrfs_decompress(btrfs_file_extent_compression(leaf, fi),
cbuf, csize, dbuf, dsize);
- if (ret < 0 || ret != dsize) {
+ if (ret == (u32)-1) {
ret = -EIO;
goto out;
}
+ /*
+ * The compressed part ends before sector boundary, the remaining needs
+ * to be zeroed out.
+ */
+ if (ret < dsize)
+ memset(dbuf + ret, 0, dsize - ret);
memcpy(dest, dbuf, dsize);
ret = dsize;
out:
@@ -494,10 +500,16 @@ int btrfs_read_extent_reg(struct btrfs_path *path,
ret = btrfs_decompress(btrfs_file_extent_compression(leaf, fi), cbuf,
csize, dbuf, dsize);
- if (ret != dsize) {
+ if (ret == (u32)-1) {
ret = -EIO;
goto out;
}
+ /*
+ * The compressed part ends before sector boundary, the remaining needs
+ * to be zeroed out.
+ */
+ if (ret < dsize)
+ memset(dbuf + ret, 0, dsize - ret);
/* Then copy the needed part */
memcpy(dest, dbuf + btrfs_file_extent_offset(leaf, fi), len);
ret = len;
diff --git a/test/dm/reset.c b/test/dm/reset.c
index fc8e9250b0..9c00452336 100644
--- a/test/dm/reset.c
+++ b/test/dm/reset.c
@@ -24,18 +24,47 @@
static int dm_test_reset_base(struct unit_test_state *uts)
{
struct udevice *dev;
- struct reset_ctl reset_method1;
- struct reset_ctl reset_method2;
+ struct reset_ctl reset_method1, reset_method1_1;
+ struct reset_ctl reset_method2, reset_method2_1;
+ struct reset_ctl reset_method3, reset_method3_1;
+ struct reset_ctl reset_method4, reset_method4_1;
/* Get the device using the reset device */
ut_assertok(uclass_get_device_by_name(UCLASS_MISC, "reset-ctl-test",
&dev));
/* Get the same reset port in 2 different ways and compare */
- ut_assertok(reset_get_by_index(dev, 1, &reset_method1));
+ ut_assertok(reset_get_by_index(dev, 0, &reset_method1));
+ ut_assertok(reset_get_by_index_nodev(dev_ofnode(dev), 0,
+ &reset_method1_1));
+ ut_assertok(reset_get_by_index(dev, 1, &reset_method2));
ut_assertok(reset_get_by_index_nodev(dev_ofnode(dev), 1,
- &reset_method2));
- ut_asserteq(reset_method1.id, reset_method2.id);
+ &reset_method2_1));
+ ut_assertok(reset_get_by_index(dev, 2, &reset_method3));
+ ut_assertok(reset_get_by_index_nodev(dev_ofnode(dev), 2,
+ &reset_method3_1));
+ ut_assertok(reset_get_by_index(dev, 3, &reset_method4));
+ ut_assertok(reset_get_by_index_nodev(dev_ofnode(dev), 3,
+ &reset_method4_1));
+
+ ut_asserteq(reset_method1.id, reset_method1_1.id);
+ ut_asserteq(reset_method2.id, reset_method2_1.id);
+ ut_asserteq(reset_method3.id, reset_method3_1.id);
+ ut_asserteq(reset_method4.id, reset_method4_1.id);
+
+ ut_asserteq(true, reset_method1.id != reset_method2.id);
+ ut_asserteq(true, reset_method1.id != reset_method3.id);
+ ut_asserteq(true, reset_method1.id != reset_method4.id);
+ ut_asserteq(true, reset_method2.id != reset_method3.id);
+ ut_asserteq(true, reset_method2.id != reset_method4.id);
+ ut_asserteq(true, reset_method3.id != reset_method4.id);
+
+ ut_asserteq(true, reset_method1_1.id != reset_method2_1.id);
+ ut_asserteq(true, reset_method1_1.id != reset_method3_1.id);
+ ut_asserteq(true, reset_method1_1.id != reset_method4_1.id);
+ ut_asserteq(true, reset_method2_1.id != reset_method3_1.id);
+ ut_asserteq(true, reset_method2_1.id != reset_method4_1.id);
+ ut_asserteq(true, reset_method3_1.id != reset_method4_1.id);
return 0;
}