* [PATCH v2 1/2] raspi: support to read vc values via dt-2nd boot [not found] <20230925110716.5370-1-denis.osterland@gmail.com> @ 2023-09-25 11:09 ` Denis Osterland-Heim 2023-09-25 11:10 ` [PATCH v2 2/2] raspi: fixup additional vc created nodes Denis Osterland-Heim 1 sibling, 0 replies; 4+ messages in thread From: Denis Osterland-Heim @ 2023-09-25 11:09 UTC (permalink / raw) To: barebox; +Cc: Denis OSTERLAND-HEIM, Ahmad Fatoum From: Denis OSTERLAND-HEIM <denis.osterland@diehl.com> In case of boot via dt-2nd pbl does not copy dtb, because it is not executed. With this patch the values were read and registered as fix-ups. It also adds a inif function that only fix-ups the ethernet MAC address. Signed-off-by: Denis OSTERLAND-HEIM <denis.osterland@diehl.com> Acked-by: Ahmad Fatoum <a.fatoum@pengutronix.de> --- arch/arm/boards/raspberry-pi/rpi-common.c | 30 ++++++++++++++--------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/arch/arm/boards/raspberry-pi/rpi-common.c b/arch/arm/boards/raspberry-pi/rpi-common.c index 56e7eebd61..ceafd55a56 100644 --- a/arch/arm/boards/raspberry-pi/rpi-common.c +++ b/arch/arm/boards/raspberry-pi/rpi-common.c @@ -110,6 +110,12 @@ static void rpi_add_led(void) led_set_trigger(LED_TRIGGER_HEARTBEAT, &l->led); } +static int rpi_eth_init(struct rpi_priv *priv) +{ + rpi_set_usbethaddr(); + return 0; +} + static int rpi_b_init(struct rpi_priv *priv) { rpi_leds[0].gpio = 16; @@ -276,16 +282,12 @@ static u32 rpi_boot_mode, rpi_boot_part; * Some parameters are defined here: * https://www.raspberrypi.com/documentation/computers/configuration.html#part4 */ -static void rpi_vc_fdt_parse(void *fdt) +static void rpi_vc_fdt_parse(struct device_node *root) { int ret; - struct device_node *root, *chosen, *bootloader, *memory; + struct device_node *chosen, *bootloader, *memory; char *str; - root = of_unflatten_dtb(fdt, INT_MAX); - if (IS_ERR(root)) - return; - str = of_read_vc_string(root, "serial-number"); if (str) { barebox_set_serial_number(str); @@ -363,7 +365,7 @@ static void rpi_vc_fdt_parse(void *fdt) return; } -static void rpi_vc_fdt(void) +static struct device_node *rpi_vc_fdt(void) { void *saved_vc_fdt; struct fdt_header *oftree; @@ -379,17 +381,17 @@ static void rpi_vc_fdt(void) if (oftree->totalsize) pr_err("there was an error copying fdt in pbl: %dn", be32_to_cpu(oftree- >totalsize)); - return; + return ERR_PTR(-EINVAL); } if (magic != FDT_MAGIC) - return; + return ERR_PTR(-EINVAL); size = be32_to_cpu(oftree->totalsize); if (write_file("/vc.dtb", saved_vc_fdt, size)) pr_err("failed to save videocore fdt to a filen"); - rpi_vc_fdt_parse(saved_vc_fdt); + return of_unflatten_dtb(saved_vc_fdt, INT_MAX); } static void rpi_set_kernel_name(void) { @@ -452,6 +454,7 @@ static int rpi_devices_probe(struct device *dev) const struct rpi_machine_data *dcfg; struct regulator *reg; struct rpi_priv *priv; + struct device_node *root; const char *name, *ptr; char *hostname; int ret; @@ -480,7 +483,8 @@ static int rpi_devices_probe(struct device *dev) bcm2835_register_fb(); armlinux_set_architecture(MACH_TYPE_BCM2708); rpi_env_init(); - rpi_vc_fdt(); + root = rpi_vc_fdt(); + rpi_vc_fdt_parse(IS_ERR(root) ? priv->dev->device_node : root); rpi_set_kernel_name(); if (dcfg && dcfg->init) @@ -599,6 +603,7 @@ static const struct rpi_machine_data rpi_3_ids[] = { .init = rpi_b_plus_init, }, { .hw_id = BCM2837_BOARD_REV_CM3, + .init = rpi_eth_init, }, { .hw_id = BCM2837B0_BOARD_REV_CM3_PLUS, }, { @@ -611,10 +616,13 @@ static const struct rpi_machine_data rpi_3_ids[] = { static const struct rpi_machine_data rpi_4_ids[] = { { .hw_id = BCM2711_BOARD_REV_4_B, + .init = rpi_eth_init, }, { .hw_id = BCM2711_BOARD_REV_400, + .init = rpi_eth_init, }, { .hw_id = BCM2711_BOARD_REV_CM4, + .init = rpi_eth_init, }, { .hw_id = U8_MAX }, -- 2.39.2 ^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v2 2/2] raspi: fixup additional vc created nodes [not found] <20230925110716.5370-1-denis.osterland@gmail.com> 2023-09-25 11:09 ` [PATCH v2 1/2] raspi: support to read vc values via dt-2nd boot Denis Osterland-Heim @ 2023-09-25 11:10 ` Denis Osterland-Heim 2024-02-19 19:14 ` Roland Hieber 1 sibling, 1 reply; 4+ messages in thread From: Denis Osterland-Heim @ 2023-09-25 11:10 UTC (permalink / raw) To: barebox; +Cc: Denis OSTERLAND-HEIM, Ahmad Fatoum From: Denis OSTERLAND-HEIM <denis.osterland@diehl.com> The video core creates some additional nodes. This code takes over this values. The /hat node is only there if an raspi hat with EEPROM is detected. Signed-off-by: Denis OSTERLAND-HEIM <denis.osterland@diehl.com> Acked-by: Ahmad Fatoum <a.fatoum@pengutronix.de> --- arch/arm/boards/raspberry-pi/rpi-common.c | 39 +++++++++++++++++------ 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/arch/arm/boards/raspberry-pi/rpi-common.c b/arch/arm/boards/raspberry-pi/rpi-common.c index ceafd55a56..713fad78c9 100644 --- a/arch/arm/boards/raspberry-pi/rpi-common.c +++ b/arch/arm/boards/raspberry-pi/rpi-common.c @@ -264,19 +264,37 @@ static enum reset_src_type rpi_decode_pm_rsts(struct device_node *chosen, static int rpi_vc_fdt_fixup(struct device_node *root, void *data) { - const struct device_node *vc_chosen = data; - struct device_node *chosen; + const struct device_node *vc_node = data; + struct device_node *node; + struct property *pp; - chosen = of_create_node(root, "/chosen"); - if (!chosen) + node = of_create_node(root, vc_node->full_name); + if (!node) return -ENOMEM; - of_copy_property(vc_chosen, "overlay_prefix", chosen); - of_copy_property(vc_chosen, "os_prefix", chosen); + for_each_property_of_node(vc_node, pp) + of_copy_property(vc_node, pp->name, node); return 0; } +static struct device_node *register_vc_fixup(struct device_node *root, + const char *path) +{ + struct device_node *ret, *tmp; + + ret = of_find_node_by_path_from(root, path); + if (ret) { + tmp = of_dup(ret); + tmp->full_name = xstrdup(ret->full_name); + of_register_fixup(rpi_vc_fdt_fixup, tmp); + } else { + pr_info("no '%s' node found in vc fdtn", path); + } + + return ret; +} + static u32 rpi_boot_mode, rpi_boot_part; /* Extract useful information from the VideoCore FDT we got. * Some parameters are defined here: @@ -300,14 +318,17 @@ static void rpi_vc_fdt_parse(struct device_node *root) free(str); } - chosen = of_find_node_by_path_from(root, "/chosen"); + register_vc_fixup(root, "/system"); + register_vc_fixup(root, "/axi"); + register_vc_fixup(root, "/reserved-memory"); + register_vc_fixup(root, "/hat"); + register_vc_fixup(root, "/chosen/bootloader"); + chosen = register_vc_fixup(root, "/chosen"); if (!chosen) { pr_err("no '/chosen' node found in vc fdtn"); goto out; } - of_register_fixup(rpi_vc_fdt_fixup, of_dup(chosen)); - bootloader = of_find_node_by_name(chosen, "bootloader"); str = of_read_vc_string(chosen, "bootargs"); -- 2.39.2 ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v2 2/2] raspi: fixup additional vc created nodes 2023-09-25 11:10 ` [PATCH v2 2/2] raspi: fixup additional vc created nodes Denis Osterland-Heim @ 2024-02-19 19:14 ` Roland Hieber 2024-02-19 21:42 ` Ahmad Fatoum 0 siblings, 1 reply; 4+ messages in thread From: Roland Hieber @ 2024-02-19 19:14 UTC (permalink / raw) To: Denis Osterland-Heim Cc: barebox, Denis OSTERLAND-HEIM, Ahmad Fatoum, Alexander Dahl Hi, On Mon, Sep 25, 2023 at 01:10:05PM +0200, Denis Osterland-Heim wrote: > From: Denis OSTERLAND-HEIM <denis.osterland@diehl.com> > > The video core creates some additional nodes. > This code takes over this values. > The /hat node is only there if an raspi hat with EEPROM is detected. > > Signed-off-by: Denis OSTERLAND-HEIM <denis.osterland@diehl.com> > Acked-by: Ahmad Fatoum <a.fatoum@pengutronix.de> > --- > arch/arm/boards/raspberry-pi/rpi-common.c | 39 +++++++++++++++++------ > 1 file changed, 30 insertions(+), 9 deletions(-) > > diff --git a/arch/arm/boards/raspberry-pi/rpi-common.c > b/arch/arm/boards/raspberry-pi/rpi-common.c > index ceafd55a56..713fad78c9 100644 > --- a/arch/arm/boards/raspberry-pi/rpi-common.c > +++ b/arch/arm/boards/raspberry-pi/rpi-common.c > @@ -264,19 +264,37 @@ static enum reset_src_type > rpi_decode_pm_rsts(struct device_node *chosen, > > static int rpi_vc_fdt_fixup(struct device_node *root, void *data) > { > - const struct device_node *vc_chosen = data; > - struct device_node *chosen; > + const struct device_node *vc_node = data; > + struct device_node *node; > + struct property *pp; > > - chosen = of_create_node(root, "/chosen"); > - if (!chosen) > + node = of_create_node(root, vc_node->full_name); > + if (!node) > return -ENOMEM; > > - of_copy_property(vc_chosen, "overlay_prefix", chosen); > - of_copy_property(vc_chosen, "os_prefix", chosen); > + for_each_property_of_node(vc_node, pp) > + of_copy_property(vc_node, pp->name, node); > > return 0; > } > > +static struct device_node *register_vc_fixup(struct device_node *root, > + const char *path) > +{ > + struct device_node *ret, *tmp; > + > + ret = of_find_node_by_path_from(root, path); > + if (ret) { > + tmp = of_dup(ret); > + tmp->full_name = xstrdup(ret->full_name); > + of_register_fixup(rpi_vc_fdt_fixup, tmp); > + } else { > + pr_info("no '%s' node found in vc fdtn", path); > + } > + > + return ret; > +} > + > static u32 rpi_boot_mode, rpi_boot_part; > /* Extract useful information from the VideoCore FDT we got. > * Some parameters are defined here: > @@ -300,14 +318,17 @@ static void rpi_vc_fdt_parse(struct device_node > *root) > free(str); > } > > - chosen = of_find_node_by_path_from(root, "/chosen"); > + register_vc_fixup(root, "/system"); > + register_vc_fixup(root, "/axi"); > + register_vc_fixup(root, "/reserved-memory"); > + register_vc_fixup(root, "/hat"); > + register_vc_fixup(root, "/chosen/bootloader"); > + chosen = register_vc_fixup(root, "/chosen"); This throws a lot of new warnings and errors on our RPi 3B: barebox 2024.01.0 #1 2024-02-01T00:00:00+00:00 Buildsystem version: DistroKit-2019.12.0-552-g775624b9f5d6 Board: Raspberry Pi 3 Model B deep-probe: supported due to raspberrypi,3-model-b netconsole: registered as netconsole-1 bcm2835-sdhost 3f202000.mmc@7e202000.of: registered as mci0 bcm2835_mci 3f300000.mmc@7e300000.of: registered as mci1 mci0: detected SD card version 2.0 mci0: registered disk0 state: New state registered 'state' state: Using bucket 0@0x00000000 malloc space: 0x1d87f620 -> 0x3b0fec3f (size 472.5 MiB) WARNING: no property 'serial-number' found in vc fdt's '' node no '/system' node found in vc fdt no '/axi' node found in vc fdt no '/hat' node found in vc fdt no '/chosen/bootloader' node found in vc fdt WARNING: no property 'bootargs' found in vc fdt's '/chosen' node WARNING: no property 'overlay_prefix' found in vc fdt's '/chosen' node WARNING: no property 'os_prefix' found in vc fdt's '/chosen' node WARNING: 'pm_rsts' value not found in vc fdt ERROR: Won't delete root device node environment load /boot/barebox.env: No such file or directory Maybe you have to create the partition. Do you have any idea what is going on here? I also don't see /vc.dtb, which should have been created. I have 'vc.kernel: kernel7.img' in the 'global' output, but nothing else starting with vc.*. - Roland > if (!chosen) { > pr_err("no '/chosen' node found in vc fdtn"); > goto out; > } > > - of_register_fixup(rpi_vc_fdt_fixup, of_dup(chosen)); > - > bootloader = of_find_node_by_name(chosen, "bootloader"); > > str = of_read_vc_string(chosen, "bootargs"); > -- > 2.39.2 > > -- Roland Hieber, Pengutronix e.K. | r.hieber@pengutronix.de | Steuerwalder Str. 21 | https://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v2 2/2] raspi: fixup additional vc created nodes 2024-02-19 19:14 ` Roland Hieber @ 2024-02-19 21:42 ` Ahmad Fatoum 0 siblings, 0 replies; 4+ messages in thread From: Ahmad Fatoum @ 2024-02-19 21:42 UTC (permalink / raw) To: Roland Hieber, Denis Osterland-Heim Cc: barebox, Denis OSTERLAND-HEIM, Alexander Dahl Hello Roland, On 19.02.24 20:14, Roland Hieber wrote: > Hi, > > On Mon, Sep 25, 2023 at 01:10:05PM +0200, Denis Osterland-Heim wrote: >> From: Denis OSTERLAND-HEIM <denis.osterland@diehl.com> >> >> The video core creates some additional nodes. >> This code takes over this values. >> The /hat node is only there if an raspi hat with EEPROM is detected. >> >> Signed-off-by: Denis OSTERLAND-HEIM <denis.osterland@diehl.com> >> Acked-by: Ahmad Fatoum <a.fatoum@pengutronix.de> >> --- >> arch/arm/boards/raspberry-pi/rpi-common.c | 39 +++++++++++++++++------ >> 1 file changed, 30 insertions(+), 9 deletions(-) >> >> diff --git a/arch/arm/boards/raspberry-pi/rpi-common.c >> b/arch/arm/boards/raspberry-pi/rpi-common.c >> index ceafd55a56..713fad78c9 100644 >> --- a/arch/arm/boards/raspberry-pi/rpi-common.c >> +++ b/arch/arm/boards/raspberry-pi/rpi-common.c >> @@ -264,19 +264,37 @@ static enum reset_src_type >> rpi_decode_pm_rsts(struct device_node *chosen, >> >> static int rpi_vc_fdt_fixup(struct device_node *root, void *data) >> { >> - const struct device_node *vc_chosen = data; >> - struct device_node *chosen; >> + const struct device_node *vc_node = data; >> + struct device_node *node; >> + struct property *pp; >> >> - chosen = of_create_node(root, "/chosen"); >> - if (!chosen) >> + node = of_create_node(root, vc_node->full_name); >> + if (!node) >> return -ENOMEM; >> >> - of_copy_property(vc_chosen, "overlay_prefix", chosen); >> - of_copy_property(vc_chosen, "os_prefix", chosen); >> + for_each_property_of_node(vc_node, pp) >> + of_copy_property(vc_node, pp->name, node); >> >> return 0; >> } >> >> +static struct device_node *register_vc_fixup(struct device_node *root, >> + const char *path) >> +{ >> + struct device_node *ret, *tmp; >> + >> + ret = of_find_node_by_path_from(root, path); >> + if (ret) { >> + tmp = of_dup(ret); >> + tmp->full_name = xstrdup(ret->full_name); >> + of_register_fixup(rpi_vc_fdt_fixup, tmp); >> + } else { >> + pr_info("no '%s' node found in vc fdtn", path); >> + } >> + >> + return ret; >> +} >> + >> static u32 rpi_boot_mode, rpi_boot_part; >> /* Extract useful information from the VideoCore FDT we got. >> * Some parameters are defined here: >> @@ -300,14 +318,17 @@ static void rpi_vc_fdt_parse(struct device_node >> *root) >> free(str); >> } >> >> - chosen = of_find_node_by_path_from(root, "/chosen"); >> + register_vc_fixup(root, "/system"); >> + register_vc_fixup(root, "/axi"); >> + register_vc_fixup(root, "/reserved-memory"); >> + register_vc_fixup(root, "/hat"); >> + register_vc_fixup(root, "/chosen/bootloader"); >> + chosen = register_vc_fixup(root, "/chosen"); > > This throws a lot of new warnings and errors on our RPi 3B: > > barebox 2024.01.0 #1 2024-02-01T00:00:00+00:00 > Buildsystem version: DistroKit-2019.12.0-552-g775624b9f5d6 > > Board: Raspberry Pi 3 Model B > deep-probe: supported due to raspberrypi,3-model-b > netconsole: registered as netconsole-1 > bcm2835-sdhost 3f202000.mmc@7e202000.of: registered as mci0 > bcm2835_mci 3f300000.mmc@7e300000.of: registered as mci1 > mci0: detected SD card version 2.0 > mci0: registered disk0 > state: New state registered 'state' > state: Using bucket 0@0x00000000 > malloc space: 0x1d87f620 -> 0x3b0fec3f (size 472.5 MiB) > WARNING: no property 'serial-number' found in vc fdt's '' node > no '/system' node found in vc fdt > no '/axi' node found in vc fdt > no '/hat' node found in vc fdt > no '/chosen/bootloader' node found in vc fdt > WARNING: no property 'bootargs' found in vc fdt's '/chosen' node > WARNING: no property 'overlay_prefix' found in vc fdt's '/chosen' node > WARNING: no property 'os_prefix' found in vc fdt's '/chosen' node > WARNING: 'pm_rsts' value not found in vc fdt > ERROR: Won't delete root device node > environment load /boot/barebox.env: No such file or directory > Maybe you have to create the partition. > > Do you have any idea what is going on here? > > I also don't see /vc.dtb, which should have been created. I have > 'vc.kernel: kernel7.img' in the 'global' output, but nothing else > starting with vc.*. I think that a non-existent /vc.dtb is expected if there's no DTs in the boot partition as is the case with DistroKit (except for rpi4) or if using barebox-dt-2nd.img. I think the info/warning messages should just be dropped. Cheers, Ahmad > > - Roland > >> if (!chosen) { >> pr_err("no '/chosen' node found in vc fdtn"); >> goto out; >> } >> >> - of_register_fixup(rpi_vc_fdt_fixup, of_dup(chosen)); >> - >> bootloader = of_find_node_by_name(chosen, "bootloader"); >> >> str = of_read_vc_string(chosen, "bootargs"); >> -- >> 2.39.2 >> >> > -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2024-02-19 21:43 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <20230925110716.5370-1-denis.osterland@gmail.com> 2023-09-25 11:09 ` [PATCH v2 1/2] raspi: support to read vc values via dt-2nd boot Denis Osterland-Heim 2023-09-25 11:10 ` [PATCH v2 2/2] raspi: fixup additional vc created nodes Denis Osterland-Heim 2024-02-19 19:14 ` Roland Hieber 2024-02-19 21:42 ` Ahmad Fatoum
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox