v2023.07-rc5 regression: Image overlaps SPL
Fabio Estevam
festevam at gmail.com
Tue Jul 4 16:39:59 CEST 2023
Hi Francesco,
On Mon, Jul 3, 2023 at 5:49 PM Francesco Dolcini <francesco at dolcini.it> wrote:
> If I do this small partial revert
>
> --- a/arch/arm/dts/imx7d-colibri-eval-v3-u-boot.dtsi
> +++ b/arch/arm/dts/imx7d-colibri-eval-v3-u-boot.dtsi
> @@ -15,7 +15,8 @@
> pinctrl-0 = <&pinctrl_lcdif_dat
> &pinctrl_lcdif_ctrl>;
> display = <&display0>;
> - u-boot,dm-pre-reloc;
> + bootph-all;
I managed to reproduce the behavior on a imx7d-sabresd by doing:
--- a/board/freescale/mx7dsabresd/mx7dsabresd.c
+++ b/board/freescale/mx7dsabresd/mx7dsabresd.c
@@ -25,6 +25,7 @@
#include <i2c.h>
#include <asm/mach-imx/mxc_i2c.h>
#include <asm/arch/crm_regs.h>
+#include <fdt_support.h>
DECLARE_GLOBAL_DATA_PTR;
@@ -289,6 +290,20 @@ int power_init_board(void)
}
#endif
+int board_fix_fdt(void *rw_fdt_blob)
+{
+ int ret;
+
+ int offset = fdt_path_offset(rw_fdt_blob,
"/soc/bus at 30800000/usb at 30b20000");
+
+ ret = fdt_status_disabled(rw_fdt_blob, offset);
+
+ printf("******** offset is 0x%x\n", offset);
+ printf("******** ret is %d\n", ret);
+
+ return 0;
+}
+
int board_late_init(void)
--- a/configs/mx7dsabresd_defconfig
+++ b/configs/mx7dsabresd_defconfig
@@ -86,3 +86,4 @@ CONFIG_USB_GADGET_PRODUCT_NUM=0xa4a5
CONFIG_CI_UDC=y
CONFIG_USB_GADGET_DOWNLOAD=y
CONFIG_ERRNO_STR=y
+CONFIG_OF_BOARD_FIXUP=y
With top of tree U-Boot it fails with:
******** offset is 0x7ba4
******** ret is -3
If u-boot.dtsi gets smaller, for example, by reverting 0aea5dda2928
then it succeeds:
******** offset is 0x7988
******** ret is 0
> fdt_status_disabled() returns 0 again.
>
> With the current master, fdt_status_disabled() returns -3,
> -FDT_ERR_NOSPACE, and I assume I could just change my code to call
> fdt_increase_size() and call it done.
>
> However, what the reason for this different behavior triggered by that
> change in the *-u-boot.dtsi ? Is this expected?
>
> From a quick check multiple place in the code just disable/enable nodes
> or set properties without taking care of this, are those going to be
> affected by that commit that created the regression? Are those all
> buggy?
>
> $ git grep fdt_setprop |wc -l
> 461
>
> We have some helper around, for example
> arch/arm/mach-imx/imx8/fdt.c:disable_fdt_node(), but this is for example
> just specific on that file.
Here is my suggestion: let's increase the fdt size locally on your
board for now, just like turris_omnia.c:
--- a/board/toradex/colibri_imx7/colibri_imx7.c
+++ b/board/toradex/colibri_imx7/colibri_imx7.c
@@ -315,6 +315,15 @@ int board_fix_fdt(void *rw_fdt_blob)
if (is_cpu_type(MXC_CPU_MX7S)) {
int offset = fdt_path_offset(rw_fdt_blob,
"/soc/bus at 30800000/usb at 30b20000");
+ /*
+ * We're either adding status = "disabled" property, or changing
+ * status = "okay" to status = "disabled". In both cases we'll need more
+ * space. Increase the size a little.
+ */
+ if (fdt_increase_size(rw_fdt_blob, 32) < 0) {
+ printf("Cannot increase FDT size.\n");
+ return -ENOMEM;
+ }
return fdt_status_disabled(rw_fdt_blob, offset);
}
Then for the next cycle, we should plan on adding this
fdt_increase_size() into the common fdt_status_disabled().
Does it work?
More information about the U-Boot
mailing list