[PATCH 3/5] ARM: rpi: rework rpi board init code
Marco Felsch
m.felsch at pengutronix.de
Wed Feb 8 01:18:25 PST 2023
Hi Daniel,
thanks for your patch.
On 23-02-07, Daniel Brát wrote:
> Rework of init for various rpi board variants. Primarily, ethernet and
> usb init have been generalized to better cover different variations and
> handling of board leds changed from adding and registering 'gpio_led'
> structures to fixing them in the device tree. This change also required
> moving the board init code from 'late_platform_driver' to
> 'coredevice_platform_driver' which in turn ment calling 'rpi_env_init'
> from separate late_initcall.
Is it possible to split that patch into smaller ones?
Regards,
Marco
>
> Signed-off-by: Daniel Brát <danek.brat at gmail.com>
> ---
> arch/arm/boards/raspberry-pi/rpi-common.c | 414 ++++++++++------------
> arch/arm/dts/bcm2711-rpi-4.dts | 5 +
> arch/arm/dts/bcm2835-rpi.dts | 1 +
> arch/arm/dts/bcm2836-rpi-2.dts | 4 +
> arch/arm/dts/bcm2837-rpi-3.dts | 5 +
> 5 files changed, 199 insertions(+), 230 deletions(-)
>
> diff --git a/arch/arm/boards/raspberry-pi/rpi-common.c b/arch/arm/boards/raspberry-pi/rpi-common.c
> index a8f180ae92..9bf6e0334d 100644
> --- a/arch/arm/boards/raspberry-pi/rpi-common.c
> +++ b/arch/arm/boards/raspberry-pi/rpi-common.c
> @@ -24,6 +24,7 @@
> #include <globalvar.h>
> #include <asm/system_info.h>
> #include <reset_source.h>
> +#include <dt-bindings/gpio/gpio.h>
>
> #include <mach/core.h>
> #include <mach/mbox.h>
> @@ -45,19 +46,21 @@ static const char * const boot_mode_names[] = {
> [0x7] = "http",
> };
>
> -struct rpi_priv;
> struct rpi_machine_data {
> - int (*init)(struct rpi_priv *priv);
> u8 hw_id;
> #define RPI_OLD_SCHEMA BIT(0)
> +#define RPI_SET_ETHADDR BIT(1)
> +#define RPI_SET_USB_OTG BIT(2)
> +#define RPI_LED_PWR_INV BIT(3)
> +#define RPI_LED_PWR_EXP BIT(4)
> +#define RPI_LED_ACT_INV BIT(5)
> +#define RPI_LED_ACT_EXP BIT(6)
> +#define RPI_LED_ANY_EXP (RPI_LED_PWR_EXP | RPI_LED_ACT_EXP)
> +#define RPI_LED_PWR_EXP_INV (RPI_LED_PWR_EXP | RPI_LED_PWR_INV)
> +#define RPI_LED_ACT_EXP_INV (RPI_LED_ACT_EXP | RPI_LED_ACT_INV)
> u8 flags;
> -};
> -
> -struct rpi_priv {
> - struct device *dev;
> - const struct rpi_machine_data *dcfg;
> - unsigned int hw_id;
> - const char *name;
> + int pwr_led_gpio;
> + int act_led_gpio;
> };
>
> static void rpi_set_serial_number(void)
> @@ -83,91 +86,74 @@ static void rpi_set_ethaddr(void)
> eth_register_ethaddr(0, mac);
> }
>
> -static void rpi_set_usbotg(const char *alias)
> +static void rpi_set_usbotg(void)
> {
> struct device_node *usb;
>
> - usb = of_find_node_by_alias(NULL, alias);
> + usb = of_find_node_by_alias(NULL, "usb0");
> if (usb)
> of_property_write_string(usb, "dr_mode", "otg");
> }
>
> -static struct gpio_led rpi_leds[] = {
> - {
> - .gpio = -EINVAL,
> - .led = {
> - .name = "ACT",
> - },
> - }, {
> - .gpio = -EINVAL,
> - .led = {
> - .name = "PWR",
> - },
> - },
> -};
> -
> -static void rpi_add_led(void)
> +static int of_rpi_led_set_gpio(struct device_node *led, u32 pin,
> + bool exp, bool inv)
> {
> - int i;
> - struct gpio_led *l;
> -
> - for (i = 0; i < ARRAY_SIZE(rpi_leds); i++) {
> - l = &rpi_leds[i];
> -
> - if (gpio_is_valid(l->gpio))
> - led_gpio_register(l);
> - }
> -
> - l = &rpi_leds[0];
> - if (gpio_is_valid(l->gpio))
> - led_set_trigger(LED_TRIGGER_HEARTBEAT, &l->led);
> -}
> + u32 gpios_prop[3];
> + struct device_node *gpio;
>
> -static int rpi_b_init(struct rpi_priv *priv)
> -{
> - rpi_leds[0].gpio = 16;
> - rpi_leds[0].active_low = 1;
> - rpi_set_ethaddr();
> -
> - return 0;
> -}
> -
> -static int rpi_b_plus_init(struct rpi_priv *priv)
> -{
> - rpi_leds[0].gpio = 47;
> - rpi_leds[1].gpio = 35;
> - rpi_set_ethaddr();
> + if (!led)
> + return -ENODEV;
>
> - return 0;
> -}
> + gpio = of_find_node_by_alias(NULL, exp ? "expgpio0" : "gpio0");
> + if (!gpio)
> + return -ENODEV;
>
> -static int rpi_0_init(struct rpi_priv *priv)
> -{
> - rpi_leds[0].gpio = 47;
> - rpi_set_usbotg("usb0");
> + gpios_prop[0] = gpio->phandle;
> + gpios_prop[1] = pin;
> + gpios_prop[2] = inv ? GPIO_ACTIVE_LOW : GPIO_ACTIVE_HIGH;
>
> - return 0;
> + return of_property_write_u32_array(led, "gpios", gpios_prop, 3);
> }
>
> -static int rpi_0_w_init(struct rpi_priv *priv)
> +static void rpi_add_leds(const struct rpi_machine_data *dcfg)
> {
> - struct device_node *np;
> - int ret;
> + int flags, led_pwr, led_act, led_cnt;
> + struct device_node *leds, *l;
>
> - rpi_0_init(priv);
> + if (!IS_ENABLED(CONFIG_OFDEVICE) || !IS_ENABLED(CONFIG_LED_GPIO_OF))
> + return;
>
> - np = of_find_node_by_path("/chosen");
> - if (!np)
> - return -ENODEV;
> + leds = of_find_node_by_path("/leds");
> + if (!leds)
> + return;
>
> - if (!of_device_enable_and_register_by_alias("serial1"))
> - return -ENODEV;
> + led_cnt = 0;
> + flags = dcfg->flags;
> + led_pwr = dcfg->pwr_led_gpio;
> + led_act = dcfg->act_led_gpio;
> +
> + l = of_get_child_by_name(leds, "led-pwr");
> + if (l) {
> + if (led_pwr >= 0 && !of_rpi_led_set_gpio(l, led_pwr,
> + flags & RPI_LED_PWR_EXP,
> + flags & RPI_LED_PWR_INV))
> + led_cnt++;
> + else
> + of_delete_node(l);
> + }
>
> - ret = of_property_write_string(np, "stdout-path", "serial1:115200n8");
> - if (ret)
> - return ret;
> + l = of_get_child_by_name(leds, "led-act");
> + if (l) {
> + if (led_act >= 0 && !of_rpi_led_set_gpio(l, led_act,
> + flags & RPI_LED_ACT_EXP,
> + flags & RPI_LED_ACT_INV))
> + led_cnt++;
> + else
> + of_delete_node(l);
> + }
>
> - return of_device_disable_by_alias("serial0");
> + if (led_cnt)
> + of_device_enable_and_register(leds);
> }
>
> static int rpi_mem_init(void)
> @@ -213,6 +199,7 @@ static int rpi_env_init(void)
>
> return 0;
> }
> +late_initcall(rpi_env_init);
>
> /* Some string properties in fdt passed to us from vc may be
> * malformed by not being null terminated, so just create and
> @@ -390,15 +377,22 @@ static void rpi_set_kernel_name(void) {
> }
> }
>
> -static const struct rpi_machine_data *rpi_get_dcfg(struct rpi_priv *priv)
> +static void rpi_set_hostname(struct device_d *dev)
> {
> - const struct rpi_machine_data *dcfg;
> + const char *name, *ptr;
> + char *hostname;
>
> - dcfg = of_device_get_match_data(priv->dev);
> - if (!dcfg) {
> - dev_err(priv->dev, "Unknown board. Not applying fixups\n");
> - return NULL;
> - }
> + name = of_device_get_match_compatible(dev);
> + ptr = strchr(name, ',');
> + hostname = basprintf("rpi-%s", ptr ? ptr + 1 : name);
> + barebox_set_hostname(hostname);
> + free(hostname);
> +}
> +
> +static const struct rpi_machine_data *rpi_get_dcfg(const struct rpi_machine_data *dcfg)
> +{
> + int ret;
> + u32 board_rev;
>
> /* Comments from u-boot:
> * For details of old-vs-new scheme, see:
> @@ -412,22 +406,26 @@ static const struct rpi_machine_data *rpi_get_dcfg(struct rpi_priv *priv)
> * http://www.raspberrypi.org/forums/viewtopic.php?f=31&t=20594
> */
>
> + ret = rpi_get_board_rev();
> + if (ret < 0)
> + return ERR_PTR(ret);
> + board_rev = ret;
> +
> for (; dcfg->hw_id != U8_MAX; dcfg++) {
> - if (priv->hw_id & 0x800000) {
> - if (dcfg->hw_id != ((priv->hw_id >> 4) & 0xff))
> + if (board_rev & BIT(23)) {
> + if (dcfg->hw_id != ((board_rev >> 4) & 0xff))
> continue;
> } else {
> if (!(dcfg->flags & RPI_OLD_SCHEMA))
> continue;
> - if (dcfg->hw_id != (priv->hw_id & 0xff))
> + if (dcfg->hw_id != (board_rev & 0xff))
> continue;
> }
>
> return dcfg;
> }
>
> - dev_err(priv->dev, "dcfg 0x%x for board_id doesn't match DT compatible\n",
> - priv->hw_id);
> + pr_err("dcfg 0x%x for board_id doesn't match DT compatible\n", board_rev);
> return ERR_PTR(-ENODEV);
> }
>
> @@ -435,42 +433,32 @@ static int rpi_devices_probe(struct device *dev)
> {
> const struct rpi_machine_data *dcfg;
> struct regulator *reg;
> - struct rpi_priv *priv;
> - const char *name, *ptr;
> - char *hostname;
> - int ret;
>
> - priv = xzalloc(sizeof(*priv));
> - priv->dev = dev;
> + dcfg = of_device_get_match_data(dev);
> + if (!dcfg)
> + dev_err(dev, "Unknown board, not applying fixups\n");
> + else {
> + dcfg = rpi_get_dcfg(dcfg);
> + if (IS_ERR(dcfg))
> + return PTR_ERR(dcfg);
>
> - ret = rpi_get_board_rev();
> - if (ret < 0)
> - goto free_priv;
> + rpi_add_leds(dcfg);
>
> - priv->hw_id = ret;
> + if (dcfg->flags & RPI_SET_ETHADDR)
> + rpi_set_ethaddr();
>
> - dcfg = rpi_get_dcfg(priv);
> - if (IS_ERR(dcfg))
> - goto free_priv;
> + if (dcfg->flags & RPI_SET_USB_OTG)
> + rpi_set_usbotg();
> + }
>
> - rpi_set_serial_number();
>
> - /* construct short recognizable host name */
> - name = of_device_get_match_compatible(priv->dev);
> - ptr = strchr(name, ',');
> - hostname = basprintf("rpi-%s", ptr ? ptr + 1 : name);
> - barebox_set_hostname(hostname);
> - free(hostname);
> + rpi_set_serial_number();
> + rpi_set_hostname(dev);
> + rpi_set_kernel_name();
>
> - rpi_add_led();
> bcm2835_register_fb();
> armlinux_set_architecture(MACH_TYPE_BCM2708);
> - rpi_env_init();
> rpi_vc_fdt();
> - rpi_set_kernel_name();
> -
> - if (dcfg && dcfg->init)
> - dcfg->init(priv);
>
> reg = regulator_get_name("bcm2835_usb");
> if (IS_ERR(reg))
> @@ -479,134 +467,95 @@ static int rpi_devices_probe(struct device *dev)
> regulator_enable(reg);
>
> return 0;
> -
> -free_priv:
> - kfree(priv);
> - return ret;
> }
>
> +#define RPI_ENTRY(_id, _pwr, _act, _flags) \
> + { \
> + .hw_id = _id, \
> + .pwr_led_gpio = _pwr, \
> + .act_led_gpio = _act, \
> + .flags = _flags, \
> + }
> +
> +#define RPI_ENTRY_OLD(_id, _pwr, _act, _flags) \
> + RPI_ENTRY(_id, _pwr, _act, (_flags) | RPI_OLD_SCHEMA)
> +
> +#if IS_ENABLED(CONFIG_MACH_RPI)
> static const struct rpi_machine_data rpi_1_ids[] = {
> - {
> - .hw_id = BCM2835_BOARD_REV_A_7,
> - .flags = RPI_OLD_SCHEMA,
> - }, {
> - .hw_id = BCM2835_BOARD_REV_A_8,
> - .flags = RPI_OLD_SCHEMA,
> - }, {
> - .hw_id = BCM2835_BOARD_REV_A_9,
> - .flags = RPI_OLD_SCHEMA,
> - }, {
> - .hw_id = BCM2835_BOARD_REV_A,
> - }, {
> - .hw_id = BCM2835_BOARD_REV_A_PLUS_12,
> - .flags = RPI_OLD_SCHEMA,
> - }, {
> - .hw_id = BCM2835_BOARD_REV_A_PLUS_15,
> - .flags = RPI_OLD_SCHEMA,
> - }, {
> - .hw_id = BCM2835_BOARD_REV_A_PLUS,
> - }, {
> - .hw_id = BCM2835_BOARD_REV_B_I2C1_4,
> - .flags = RPI_OLD_SCHEMA,
> - }, {
> - .hw_id = BCM2835_BOARD_REV_B_I2C1_5,
> - .flags = RPI_OLD_SCHEMA,
> - }, {
> - .hw_id = BCM2835_BOARD_REV_B_I2C1_6,
> - .flags = RPI_OLD_SCHEMA,
> - }, {
> - .hw_id = BCM2835_BOARD_REV_B,
> - }, {
> - .hw_id = BCM2835_BOARD_REV_B_I2C0_2,
> - .flags = RPI_OLD_SCHEMA,
> - }, {
> - .hw_id = BCM2835_BOARD_REV_B_I2C0_3,
> - .flags = RPI_OLD_SCHEMA,
> - }, {
> - .hw_id = BCM2835_BOARD_REV_B_REV2_d,
> - .flags = RPI_OLD_SCHEMA,
> - .init = rpi_b_init,
> - }, {
> - .hw_id = BCM2835_BOARD_REV_B_REV2_e,
> - .flags = RPI_OLD_SCHEMA,
> - .init = rpi_b_init,
> - }, {
> - .hw_id = BCM2835_BOARD_REV_B_REV2_f,
> - .flags = RPI_OLD_SCHEMA,
> - .init = rpi_b_init,
> - }, {
> - .hw_id = BCM2835_BOARD_REV_B_PLUS_10,
> - .flags = RPI_OLD_SCHEMA,
> - .init = rpi_b_plus_init,
> - }, {
> - .hw_id = BCM2835_BOARD_REV_B_PLUS_13,
> - .flags = RPI_OLD_SCHEMA,
> - .init = rpi_b_plus_init,
> - }, {
> - .hw_id = BCM2835_BOARD_REV_B_PLUS,
> - .init = rpi_b_plus_init,
> - }, {
> - .hw_id = BCM2835_BOARD_REV_CM_11,
> - .flags = RPI_OLD_SCHEMA,
> - }, {
> - .hw_id = BCM2835_BOARD_REV_CM_14,
> - .flags = RPI_OLD_SCHEMA,
> - }, {
> - .hw_id = BCM2835_BOARD_REV_CM1,
> - }, {
> - .hw_id = BCM2835_BOARD_REV_ZERO,
> - .init = rpi_0_init,
> - }, {
> - .hw_id = BCM2835_BOARD_REV_ZERO_W,
> - .init = rpi_0_w_init,
> - }, {
> - .hw_id = U8_MAX
> - },
> + /*
> + * New style of revision codes schemas
> + * Let's keep those first since they are probably more common
> + */
> + RPI_ENTRY(BCM2835_BOARD_REV_A, -1, 16, RPI_LED_ACT_INV),
> + RPI_ENTRY(BCM2835_BOARD_REV_A_PLUS, 35, 47, RPI_LED_ACT_INV),
> + RPI_ENTRY(BCM2835_BOARD_REV_B, -1, 16, RPI_LED_ACT_INV | RPI_SET_ETHADDR),
> + RPI_ENTRY(BCM2835_BOARD_REV_B_PLUS, 35, 47, RPI_SET_ETHADDR),
> + RPI_ENTRY(BCM2835_BOARD_REV_CM1, -1, 47, RPI_LED_ACT_INV),
> + RPI_ENTRY(BCM2835_BOARD_REV_ZERO, -1, 47, RPI_SET_USB_OTG),
> + RPI_ENTRY(BCM2835_BOARD_REV_ZERO_W, -1, 47, RPI_SET_USB_OTG | RPI_LED_ACT_INV),
> + /*
> + * Old style of revision codes
> + */
> + /* Raspberry Pi A */
> + RPI_ENTRY_OLD(BCM2835_BOARD_REV_A_7, -1, 16, RPI_LED_ACT_INV),
> + RPI_ENTRY_OLD(BCM2835_BOARD_REV_A_8, -1, 16, RPI_LED_ACT_INV),
> + RPI_ENTRY_OLD(BCM2835_BOARD_REV_A_9, -1, 16, RPI_LED_ACT_INV),
> + /* Raspberry Pi A+ */
> + RPI_ENTRY_OLD(BCM2835_BOARD_REV_A_PLUS_12, 35, 47, RPI_LED_ACT_INV),
> + RPI_ENTRY_OLD(BCM2835_BOARD_REV_A_PLUS_15, 35, 47, RPI_LED_ACT_INV),
> + /* Raspberry Pi B */
> + RPI_ENTRY_OLD(BCM2835_BOARD_REV_B_I2C1_4, -1, 16, RPI_LED_ACT_INV | RPI_SET_ETHADDR),
> + RPI_ENTRY_OLD(BCM2835_BOARD_REV_B_I2C1_5, -1, 16, RPI_LED_ACT_INV | RPI_SET_ETHADDR),
> + RPI_ENTRY_OLD(BCM2835_BOARD_REV_B_I2C1_6, -1, 16, RPI_LED_ACT_INV | RPI_SET_ETHADDR),
> + RPI_ENTRY_OLD(BCM2835_BOARD_REV_B_I2C0_2, -1, 16, RPI_LED_ACT_INV | RPI_SET_ETHADDR),
> + RPI_ENTRY_OLD(BCM2835_BOARD_REV_B_I2C0_3, -1, 16, RPI_LED_ACT_INV | RPI_SET_ETHADDR),
> + RPI_ENTRY_OLD(BCM2835_BOARD_REV_B_REV2_d, -1, 16, RPI_LED_ACT_INV | RPI_SET_ETHADDR),
> + RPI_ENTRY_OLD(BCM2835_BOARD_REV_B_REV2_e, -1, 16, RPI_LED_ACT_INV | RPI_SET_ETHADDR),
> + RPI_ENTRY_OLD(BCM2835_BOARD_REV_B_REV2_f, -1, 16, RPI_LED_ACT_INV | RPI_SET_ETHADDR),
> + /* Raspberry Pi B+ */
> + RPI_ENTRY_OLD(BCM2835_BOARD_REV_B_PLUS_10, 35, 47, RPI_SET_ETHADDR),
> + RPI_ENTRY_OLD(BCM2835_BOARD_REV_B_PLUS_13, 35, 47, RPI_SET_ETHADDR),
> + /* Raspberry Pi CM1 */
> + RPI_ENTRY_OLD(BCM2835_BOARD_REV_CM_11, -1, 47, RPI_LED_ACT_INV),
> + RPI_ENTRY_OLD(BCM2835_BOARD_REV_CM_14, -1, 47, RPI_LED_ACT_INV),
> + /* sentinel */
> + { .hw_id = U8_MAX }
> };
> +#endif
>
> +#if IS_ENABLED(CONFIG_MACH_RPI2)
> static const struct rpi_machine_data rpi_2_ids[] = {
> - {
> - .hw_id = BCM2836_BOARD_REV_2_B,
> - .init = rpi_b_plus_init,
> - }, {
> - .hw_id = U8_MAX
> - },
> + RPI_ENTRY(BCM2836_BOARD_REV_2_B, 35, 47, RPI_SET_ETHADDR),
> + /* sentinel */
> + { .hw_id = U8_MAX }
> };
> +#endif
>
> +#if IS_ENABLED(CONFIG_MACH_RPI3) | IS_ENABLED(CONFIG_MACH_RPI_CM3)
> static const struct rpi_machine_data rpi_3_ids[] = {
> - {
> - .hw_id = BCM2837B0_BOARD_REV_3A_PLUS,
> - .init = rpi_b_plus_init,
> - }, {
> - .hw_id = BCM2837_BOARD_REV_3_B,
> - .init = rpi_b_init,
> - }, {
> - .hw_id = BCM2837B0_BOARD_REV_3B_PLUS,
> - .init = rpi_b_plus_init,
> - }, {
> - .hw_id = BCM2837_BOARD_REV_CM3,
> - }, {
> - .hw_id = BCM2837B0_BOARD_REV_CM3_PLUS,
> - }, {
> - .hw_id = BCM2837B0_BOARD_REV_ZERO_2,
> - }, {
> - .hw_id = U8_MAX
> - },
> + RPI_ENTRY(BCM2837B0_BOARD_REV_3A_PLUS, 2, 29, RPI_LED_PWR_EXP_INV),
> + RPI_ENTRY(BCM2837_BOARD_REV_3_B, -1, 2, RPI_SET_ETHADDR | RPI_LED_ACT_EXP),
> + RPI_ENTRY(BCM2837B0_BOARD_REV_3B_PLUS, 2, 29, RPI_SET_ETHADDR | RPI_LED_PWR_EXP_INV),
> + RPI_ENTRY(BCM2837_BOARD_REV_CM3, -1, -1, 0),
> + RPI_ENTRY(BCM2837B0_BOARD_REV_CM3_PLUS, -1, -1, 0),
> + RPI_ENTRY(BCM2837B0_BOARD_REV_ZERO_2, -1, 29, RPI_LED_ACT_INV | RPI_SET_USB_OTG),
> + /* sentinel */
> + { .hw_id = U8_MAX }
> };
> +#endif
>
> +#if IS_ENABLED(CONFIG_MACH_RPI4)
> static const struct rpi_machine_data rpi_4_ids[] = {
> - {
> - .hw_id = BCM2711_BOARD_REV_4_B,
> - }, {
> - .hw_id = BCM2711_BOARD_REV_400,
> - }, {
> - .hw_id = BCM2711_BOARD_REV_CM4,
> - }, {
> - .hw_id = U8_MAX
> - },
> + RPI_ENTRY(BCM2711_BOARD_REV_4_B, 2, 42, RPI_LED_PWR_EXP_INV | RPI_SET_ETHADDR),
> + RPI_ENTRY(BCM2711_BOARD_REV_400, 42, -1, RPI_SET_ETHADDR),
> + RPI_ENTRY(BCM2711_BOARD_REV_CM4, 2, 42, RPI_LED_PWR_EXP_INV | RPI_SET_ETHADDR),
> + /* sentinel */
> + { .hw_id = U8_MAX }
> };
> +#endif
>
> static const struct of_device_id rpi_of_match[] = {
> +#if IS_ENABLED(CONFIG_MACH_RPI)
> /* BCM2835 based Boards */
> { .compatible = "raspberrypi,model-a", .data = rpi_1_ids },
> { .compatible = "raspberrypi,model-a-plus", .data = rpi_1_ids },
> @@ -618,23 +567,28 @@ static const struct of_device_id rpi_of_match[] = {
> { .compatible = "raspberrypi,compute-module", .data = rpi_1_ids },
> { .compatible = "raspberrypi,model-zero", .data = rpi_1_ids },
> { .compatible = "raspberrypi,model-zero-w", .data = rpi_1_ids },
> -
> +#endif
> +#if IS_ENABLED(CONFIG_MACH_RPI2)
> /* BCM2836 based Boards */
> { .compatible = "raspberrypi,2-model-b", .data = rpi_2_ids },
> -
> +#endif
> +#if IS_ENABLED(CONFIG_MACH_RPI3)
> /* BCM2837 based Boards */
> { .compatible = "raspberrypi,3-model-a-plus", .data = rpi_3_ids },
> { .compatible = "raspberrypi,3-model-b", .data = rpi_3_ids },
> { .compatible = "raspberrypi,3-model-b-plus", .data = rpi_3_ids },
> { .compatible = "raspberrypi,model-zero-2-w", .data = rpi_3_ids },
> +#endif
> +#if IS_ENABLED(CONFIG_MACH_RPI_CM3)
> { .compatible = "raspberrypi,3-compute-module", .data = rpi_3_ids },
> { .compatible = "raspberrypi,3-compute-module-lite", .data = rpi_3_ids },
> -
> +#endif
> +#if IS_ENABLED(CONFIG_MACH_RPI4)
> /* BCM2711 based Boards */
> { .compatible = "raspberrypi,4-model-b", .data = rpi_4_ids },
> { .compatible = "raspberrypi,4-compute-module", .data = rpi_4_ids },
> { .compatible = "raspberrypi,400", .data = rpi_4_ids },
> -
> +#endif
> { /* sentinel */ },
> };
> BAREBOX_DEEP_PROBE_ENABLE(rpi_of_match);
> @@ -644,4 +598,4 @@ static struct driver rpi_board_driver = {
> .probe = rpi_devices_probe,
> .of_compatible = DRV_OF_COMPAT(rpi_of_match),
> };
> -late_platform_driver(rpi_board_driver);
> +coredevice_platform_driver(rpi_board_driver);
> diff --git a/arch/arm/dts/bcm2711-rpi-4.dts b/arch/arm/dts/bcm2711-rpi-4.dts
> index 3c0caa73f8..e61514b236 100644
> --- a/arch/arm/dts/bcm2711-rpi-4.dts
> +++ b/arch/arm/dts/bcm2711-rpi-4.dts
> @@ -1,5 +1,10 @@
> #include <arm64/broadcom/bcm2711-rpi-4-b.dts>
>
> +&{/aliases} {
> + gpio0 = &gpio;
> + expgpio0 = &expgpio;
> +};
> +
> &{/memory at 0} {
> reg = <0x0 0x0 0x0>;
> };
> diff --git a/arch/arm/dts/bcm2835-rpi.dts b/arch/arm/dts/bcm2835-rpi.dts
> index 8d352a457d..f403b5485c 100644
> --- a/arch/arm/dts/bcm2835-rpi.dts
> +++ b/arch/arm/dts/bcm2835-rpi.dts
> @@ -2,6 +2,7 @@
>
> &{/aliases} {
> usb0 = &usb;
> + gpio0 = &gpio;
> };
>
> &{/memory at 0} {
> diff --git a/arch/arm/dts/bcm2836-rpi-2.dts b/arch/arm/dts/bcm2836-rpi-2.dts
> index c9106515ee..f211445e3b 100644
> --- a/arch/arm/dts/bcm2836-rpi-2.dts
> +++ b/arch/arm/dts/bcm2836-rpi-2.dts
> @@ -1,5 +1,9 @@
> #include <arm/bcm2836-rpi-2-b.dts>
>
> +&{/aliases} {
> + gpio0 = &gpio;
> +};
> +
> &{/memory at 0} {
> reg = <0x0 0x0>;
> };
> diff --git a/arch/arm/dts/bcm2837-rpi-3.dts b/arch/arm/dts/bcm2837-rpi-3.dts
> index 38d673aec4..588b77cd78 100644
> --- a/arch/arm/dts/bcm2837-rpi-3.dts
> +++ b/arch/arm/dts/bcm2837-rpi-3.dts
> @@ -1,5 +1,10 @@
> #include <arm64/broadcom/bcm2837-rpi-3-b.dts>
>
> +&{/aliases} {
> + gpio0 = &gpio;
> + expgpio0 = &expgpio;
> +};
> +
> &{/memory at 0} {
> reg = <0x0 0x0>;
> };
> --
> 2.34.1
>
>
>
More information about the barebox
mailing list