* [PATCH 1/2] raspi: support to read vc values via dt-2nd boot [not found] <20230801104417.8941-1-denis.osterland@gmail.com> @ 2023-08-02 10:49 ` Denis Osterland-Heim 2023-09-12 9:34 ` Ahmad Fatoum 2023-09-12 10:54 ` Sascha Hauer 2023-08-02 10:50 ` [PATCH 2/2] raspi: fixup additional vc created nodes Denis Osterland-Heim 1 sibling, 2 replies; 5+ messages in thread From: Denis Osterland-Heim @ 2023-08-02 10:49 UTC (permalink / raw) To: barebox; +Cc: Denis OSTERLAND-HEIM 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> --- arch/arm/boards/raspberry-pi/rpi-common.c | 32 ++++++++++++++--------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/arch/arm/boards/raspberry-pi/rpi-common.c b/arch/arm/boards/raspberry-pi/rpi-common.c index 56e7eebd61..2f525e7d70 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: %d\n", 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 file\n"); - - 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.3 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] raspi: support to read vc values via dt-2nd boot 2023-08-02 10:49 ` [PATCH 1/2] raspi: support to read vc values via dt-2nd boot Denis Osterland-Heim @ 2023-09-12 9:34 ` Ahmad Fatoum 2023-09-12 10:54 ` Sascha Hauer 1 sibling, 0 replies; 5+ messages in thread From: Ahmad Fatoum @ 2023-09-12 9:34 UTC (permalink / raw) To: Denis Osterland-Heim, barebox; +Cc: Denis OSTERLAND-HEIM On 02.08.23 12:49, Denis Osterland-Heim wrote: > 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 | 32 ++++++++++++++--------- > 1 file changed, 20 insertions(+), 12 deletions(-) > > diff --git a/arch/arm/boards/raspberry-pi/rpi-common.c > b/arch/arm/boards/raspberry-pi/rpi-common.c > index 56e7eebd61..2f525e7d70 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: > %d\n", > 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 file\n"); > - > - 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 > }, -- 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] 5+ messages in thread
* Re: [PATCH 1/2] raspi: support to read vc values via dt-2nd boot 2023-08-02 10:49 ` [PATCH 1/2] raspi: support to read vc values via dt-2nd boot Denis Osterland-Heim 2023-09-12 9:34 ` Ahmad Fatoum @ 2023-09-12 10:54 ` Sascha Hauer 1 sibling, 0 replies; 5+ messages in thread From: Sascha Hauer @ 2023-09-12 10:54 UTC (permalink / raw) To: Denis Osterland-Heim; +Cc: barebox, Denis OSTERLAND-HEIM Hi Denis, On Wed, Aug 02, 2023 at 12:49:54PM +0200, Denis Osterland-Heim wrote: > 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> > --- > arch/arm/boards/raspberry-pi/rpi-common.c | 32 ++++++++++++++--------- > 1 file changed, 20 insertions(+), 12 deletions(-) Sorry for not handling this earlier. I always forgot to trigger Ahmad to have a look at this patch. Now I did and he looked at it, but I can't apply as whitespaces are mangled. Please resend with proper formatting. Sascha -- 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] 5+ messages in thread
* [PATCH 2/2] raspi: fixup additional vc created nodes [not found] <20230801104417.8941-1-denis.osterland@gmail.com> 2023-08-02 10:49 ` [PATCH 1/2] raspi: support to read vc values via dt-2nd boot Denis Osterland-Heim @ 2023-08-02 10:50 ` Denis Osterland-Heim 2023-09-12 9:35 ` Ahmad Fatoum 1 sibling, 1 reply; 5+ messages in thread From: Denis Osterland-Heim @ 2023-08-02 10:50 UTC (permalink / raw) To: barebox; +Cc: Denis OSTERLAND-HEIM 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> --- arch/arm/boards/raspberry-pi/rpi-common.c | 38 +++++++++++++++++------ 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/arch/arm/boards/raspberry-pi/rpi-common.c b/arch/arm/boards/raspberry-pi/rpi-common.c index 2f525e7d70..9c85c85d14 100644 --- a/arch/arm/boards/raspberry-pi/rpi-common.c +++ b/arch/arm/boards/raspberry-pi/rpi-common.c @@ -264,19 +264,36 @@ 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 fdt\n", 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 +317,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 fdt\n"); 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.3 ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] raspi: fixup additional vc created nodes 2023-08-02 10:50 ` [PATCH 2/2] raspi: fixup additional vc created nodes Denis Osterland-Heim @ 2023-09-12 9:35 ` Ahmad Fatoum 0 siblings, 0 replies; 5+ messages in thread From: Ahmad Fatoum @ 2023-09-12 9:35 UTC (permalink / raw) To: Denis Osterland-Heim, barebox; +Cc: Denis OSTERLAND-HEIM On 02.08.23 12:50, 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 | 38 +++++++++++++++++------ > 1 file changed, 29 insertions(+), 9 deletions(-) > > diff --git a/arch/arm/boards/raspberry-pi/rpi-common.c > b/arch/arm/boards/raspberry-pi/rpi-common.c > index 2f525e7d70..9c85c85d14 100644 > --- a/arch/arm/boards/raspberry-pi/rpi-common.c > +++ b/arch/arm/boards/raspberry-pi/rpi-common.c > @@ -264,19 +264,36 @@ 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 fdt\n", 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 +317,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 fdt\n"); > 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"); -- 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] 5+ messages in thread
end of thread, other threads:[~2023-09-12 10:56 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <20230801104417.8941-1-denis.osterland@gmail.com> 2023-08-02 10:49 ` [PATCH 1/2] raspi: support to read vc values via dt-2nd boot Denis Osterland-Heim 2023-09-12 9:34 ` Ahmad Fatoum 2023-09-12 10:54 ` Sascha Hauer 2023-08-02 10:50 ` [PATCH 2/2] raspi: fixup additional vc created nodes Denis Osterland-Heim 2023-09-12 9:35 ` Ahmad Fatoum
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox