[PATCH 1/9] ARM: rpi: move model initialisation to rpi-common
Sascha Hauer
s.hauer at pengutronix.de
Thu Mar 2 00:11:50 PST 2017
On Wed, Mar 01, 2017 at 03:31:29PM +0100, Lucas Stach wrote:
> From: Enrico Joerns <ejo at pengutronix.de>
>
> The Raspberry PIs use different versions schemes for the older and newer
> variants. The decoding arrays for these schemes were split up in rpi.c
> and rpi2.c. This is not required, as the appropriate versioning scheme
> can be determined programmatically.
>
> Signed-off-by: Enrico Joerns <ejo at pengutronix.de>
> Signed-off-by: Lucas Stach <l.stach at pengutronix.de>
> ---
> lst: remove SoC string
> ---
> arch/arm/boards/raspberry-pi/Makefile | 2 --
> arch/arm/boards/raspberry-pi/rpi-common.c | 57 ++++++++++++++++++++++++++-----
> arch/arm/boards/raspberry-pi/rpi.c | 44 ------------------------
> arch/arm/boards/raspberry-pi/rpi.h | 3 --
> arch/arm/boards/raspberry-pi/rpi2.c | 21 ------------
> 5 files changed, 48 insertions(+), 79 deletions(-)
> delete mode 100644 arch/arm/boards/raspberry-pi/rpi.c
> delete mode 100644 arch/arm/boards/raspberry-pi/rpi2.c
Applied, thanks
Sascha
>
> diff --git a/arch/arm/boards/raspberry-pi/Makefile b/arch/arm/boards/raspberry-pi/Makefile
> index 7a3d7de241f0..a3e93eb73a32 100644
> --- a/arch/arm/boards/raspberry-pi/Makefile
> +++ b/arch/arm/boards/raspberry-pi/Makefile
> @@ -1,4 +1,2 @@
> obj-$(CONFIG_MACH_RPI_COMMON) += rpi-common.o
> -obj-$(CONFIG_MACH_RPI) += rpi.o
> -obj-$(CONFIG_MACH_RPI2) += rpi2.o
> lwl-y += lowlevel.o
> diff --git a/arch/arm/boards/raspberry-pi/rpi-common.c b/arch/arm/boards/raspberry-pi/rpi-common.c
> index 147fce9952ab..7441c06437dd 100644
> --- a/arch/arm/boards/raspberry-pi/rpi-common.c
> +++ b/arch/arm/boards/raspberry-pi/rpi-common.c
> @@ -146,6 +146,13 @@ void rpi_add_led(void)
> led_set_trigger(LED_TRIGGER_HEARTBEAT, &l->led);
> }
>
> +void rpi_b_init(void)
> +{
> + rpi_leds[0].gpio = 16;
> + rpi_leds[0].active_low = 1;
> + rpi_set_usbethaddr();
> +}
> +
> void rpi_b_plus_init(void)
> {
> rpi_leds[0].gpio = 47;
> @@ -153,12 +160,39 @@ void rpi_b_plus_init(void)
> rpi_set_usbethaddr();
> }
>
> +/* See comments in mbox.h for data source */
> +const struct rpi_model rpi_models_old_scheme[] = {
> + RPI_MODEL(0, "Unknown model", NULL),
> + RPI_MODEL(BCM2835_BOARD_REV_B_I2C0_2, "Model B (no P5)", rpi_b_init),
> + RPI_MODEL(BCM2835_BOARD_REV_B_I2C0_3, "Model B (no P5)", rpi_b_init),
> + RPI_MODEL(BCM2835_BOARD_REV_B_I2C1_4, "Model B", rpi_b_init),
> + RPI_MODEL(BCM2835_BOARD_REV_B_I2C1_5, "Model B", rpi_b_init),
> + RPI_MODEL(BCM2835_BOARD_REV_B_I2C1_6, "Model B", rpi_b_init),
> + RPI_MODEL(BCM2835_BOARD_REV_A_7, "Model A", NULL),
> + RPI_MODEL(BCM2835_BOARD_REV_A_8, "Model A", NULL),
> + RPI_MODEL(BCM2835_BOARD_REV_A_9, "Model A", NULL),
> + RPI_MODEL(BCM2835_BOARD_REV_B_REV2_d, "Model B rev2", rpi_b_init),
> + RPI_MODEL(BCM2835_BOARD_REV_B_REV2_e, "Model B rev2", rpi_b_init),
> + RPI_MODEL(BCM2835_BOARD_REV_B_REV2_f, "Model B rev2", rpi_b_init),
> + RPI_MODEL(BCM2835_BOARD_REV_B_PLUS, "Model B+", rpi_b_plus_init),
> + RPI_MODEL(BCM2835_BOARD_REV_CM, "Compute Module", NULL),
> + RPI_MODEL(BCM2835_BOARD_REV_A_PLUS, "Model A+", NULL),
> +};
> +
> +const struct rpi_model rpi_models_new_scheme[] = {
> + RPI_MODEL(0, "Unknown model", NULL),
> + RPI_MODEL(BCM2836_BOARD_REV_2_B, "2 Model B", rpi_b_plus_init),
> +};
> +
> static int rpi_board_rev = 0;
> +const struct rpi_model *model;
>
> static void rpi_get_board_rev(void)
> {
> int ret;
> char *name;
> + const struct rpi_model *rpi_models;
> + size_t rpi_models_size;
>
> BCM2835_MBOX_STACK_ALIGN(struct msg_get_board_rev, msg);
> BCM2835_MBOX_INIT_HDR(msg);
> @@ -183,10 +217,17 @@ static void rpi_get_board_rev(void)
> * http://www.raspberrypi.org/forums/viewtopic.php?f=31&t=20594
> */
> rpi_board_rev = msg->get_board_rev.body.resp.rev;
> - if (rpi_board_rev & 0x800000)
> + if (rpi_board_rev & 0x800000) {
> rpi_board_rev = (rpi_board_rev >> 4) & 0xff;
> - else
> + rpi_models = rpi_models_new_scheme;
> + rpi_models_size = ARRAY_SIZE(rpi_models_new_scheme);
> +
> + } else {
> rpi_board_rev &= 0xff;
> + rpi_models = rpi_models_old_scheme;
> + rpi_models_size = ARRAY_SIZE(rpi_models_old_scheme);
> + }
> +
> if (rpi_board_rev >= rpi_models_size) {
> printf("RPI: Board rev %u outside known range\n",
> rpi_board_rev);
> @@ -201,8 +242,8 @@ static void rpi_get_board_rev(void)
> if (!rpi_board_rev)
> goto unknown_rev;
>
> - name = basprintf("RaspberryPi %s %s",
> - rpi_models[rpi_board_rev].name, rpi_model_string);
> + model = &rpi_models[rpi_board_rev];
> + name = basprintf("RaspberryPi %s", model->name);
> barebox_set_model(name);
> free(name);
>
> @@ -210,17 +251,15 @@ static void rpi_get_board_rev(void)
>
> unknown_rev:
> rpi_board_rev = 0;
> - name = basprintf("RaspberryPi %s", rpi_model_string);
> - barebox_set_model(name);
> - free(name);
> + barebox_set_model("RaspberryPi (unknown rev)");
> }
>
> static void rpi_model_init(void)
> {
> - if (!rpi_models[rpi_board_rev].init)
> + if (!model->init)
> return;
>
> - rpi_models[rpi_board_rev].init();
> + model->init();
> rpi_add_led();
> }
>
> diff --git a/arch/arm/boards/raspberry-pi/rpi.c b/arch/arm/boards/raspberry-pi/rpi.c
> deleted file mode 100644
> index dd2ad7f5a519..000000000000
> --- a/arch/arm/boards/raspberry-pi/rpi.c
> +++ /dev/null
> @@ -1,44 +0,0 @@
> -/*
> - * Copyright (C) 2009 Carlo Caione <carlo at carlocaione.org>
> - *
> - * This program is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU General Public License as
> - * published by the Free Software Foundation; either version 2 of
> - * the License, or (at your option) any later version.
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> - * GNU General Public License for more details.
> - *
> - */
> -
> -#include "rpi.h"
> -
> -static void rpi_b_init(void)
> -{
> - rpi_leds[0].gpio = 16;
> - rpi_leds[0].active_low = 1;
> - rpi_set_usbethaddr();
> -}
> -
> -/* See comments in mbox.h for data source */
> -const struct rpi_model rpi_models[] = {
> - RPI_MODEL(0, "Unknown model", NULL),
> - RPI_MODEL(BCM2835_BOARD_REV_B_I2C0_2, "Model B (no P5)", rpi_b_init),
> - RPI_MODEL(BCM2835_BOARD_REV_B_I2C0_3, "Model B (no P5)", rpi_b_init),
> - RPI_MODEL(BCM2835_BOARD_REV_B_I2C1_4, "Model B", rpi_b_init),
> - RPI_MODEL(BCM2835_BOARD_REV_B_I2C1_5, "Model B", rpi_b_init),
> - RPI_MODEL(BCM2835_BOARD_REV_B_I2C1_6, "Model B", rpi_b_init),
> - RPI_MODEL(BCM2835_BOARD_REV_A_7, "Model A", NULL),
> - RPI_MODEL(BCM2835_BOARD_REV_A_8, "Model A", NULL),
> - RPI_MODEL(BCM2835_BOARD_REV_A_9, "Model A", NULL),
> - RPI_MODEL(BCM2835_BOARD_REV_B_REV2_d, "Model B rev2", rpi_b_init),
> - RPI_MODEL(BCM2835_BOARD_REV_B_REV2_e, "Model B rev2", rpi_b_init),
> - RPI_MODEL(BCM2835_BOARD_REV_B_REV2_f, "Model B rev2", rpi_b_init),
> - RPI_MODEL(BCM2835_BOARD_REV_B_PLUS, "Model B+", rpi_b_plus_init),
> - RPI_MODEL(BCM2835_BOARD_REV_CM, "Compute Module", NULL),
> - RPI_MODEL(BCM2835_BOARD_REV_A_PLUS, "Model A+", NULL),
> -};
> -const size_t rpi_models_size = ARRAY_SIZE(rpi_models);
> -const char *rpi_model_string = "(BCM2835/ARM1176JZF-S)";
> diff --git a/arch/arm/boards/raspberry-pi/rpi.h b/arch/arm/boards/raspberry-pi/rpi.h
> index 739cdee1b3ae..dd32fee80950 100644
> --- a/arch/arm/boards/raspberry-pi/rpi.h
> +++ b/arch/arm/boards/raspberry-pi/rpi.h
> @@ -17,9 +17,6 @@ struct rpi_model {
> void (*init)(void);
> };
>
> -extern const struct rpi_model rpi_models[];
> -extern const size_t rpi_models_size;
> -extern const char *rpi_model_string;
> extern struct gpio_led rpi_leds[];
>
> void rpi_b_plus_init(void);
> diff --git a/arch/arm/boards/raspberry-pi/rpi2.c b/arch/arm/boards/raspberry-pi/rpi2.c
> deleted file mode 100644
> index 2cfc06f8a6a9..000000000000
> --- a/arch/arm/boards/raspberry-pi/rpi2.c
> +++ /dev/null
> @@ -1,21 +0,0 @@
> -/*
> - * This program is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU General Public License as
> - * published by the Free Software Foundation; either version 2 of
> - * the License, or (at your option) any later version.
> - *
> - * This program is distributed in the hope that it will be useful,
> - * but WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> - * GNU General Public License for more details.
> - *
> - */
> -
> -#include "rpi.h"
> -
> -const struct rpi_model rpi_models[] = {
> - RPI_MODEL(0, "Unknown model", NULL),
> - RPI_MODEL(BCM2836_BOARD_REV_2_B, "2 Model B", rpi_b_plus_init),
> -};
> -const size_t rpi_models_size = ARRAY_SIZE(rpi_models);
> -const char *rpi_model_string = "(BCM2836/CORTEX-A7)";
> --
> 2.11.0
>
>
> _______________________________________________
> barebox mailing list
> barebox at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox
>
--
Pengutronix e.K. | |
Industrial Linux Solutions | http://www.pengutronix.de/ |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
More information about the barebox
mailing list