Updates for RPi for 2026.04-rc4:

- board/raspberrypi: add bcm2712d0-rpi-5-b for Raspberry Pi 5
- board/raspberrypi: add multi-FDT support
- rpi: pass the Video Core logs DT parameter through
- pinctrl: bcm283x: Fix GPIO pull state register values for BCM2711
This commit is contained in:
Tom Rini 2026-03-12 16:10:46 -06:00
commit eefb822fb5
2 changed files with 74 additions and 41 deletions

View File

@ -94,120 +94,128 @@ struct efi_capsule_update_info update_info = {
*/
struct rpi_model {
const char *name;
const char *fdtfile;
const char * const *fdtfiles;
size_t fdtcount;
bool has_onboard_eth;
};
#define FDTFILES(...) \
(const char *[]){ __VA_ARGS__ }, \
sizeof((const char *[]){ __VA_ARGS__ }) / sizeof(const char *)
static const struct rpi_model rpi_model_unknown = {
"Unknown model",
DTB_DIR "bcm283x-rpi-other.dtb",
FDTFILES(DTB_DIR "bcm283x-rpi-other.dtb"),
false,
};
static const struct rpi_model rpi_models_new_scheme[] = {
[0x0] = {
"Model A",
DTB_DIR "bcm2835-rpi-a.dtb",
FDTFILES(DTB_DIR "bcm2835-rpi-a.dtb"),
false,
},
[0x1] = {
"Model B",
DTB_DIR "bcm2835-rpi-b.dtb",
FDTFILES(DTB_DIR "bcm2835-rpi-b.dtb"),
true,
},
[0x2] = {
"Model A+",
DTB_DIR "bcm2835-rpi-a-plus.dtb",
FDTFILES(DTB_DIR "bcm2835-rpi-a-plus.dtb"),
false,
},
[0x3] = {
"Model B+",
DTB_DIR "bcm2835-rpi-b-plus.dtb",
FDTFILES(DTB_DIR "bcm2835-rpi-b-plus.dtb"),
true,
},
[0x4] = {
"2 Model B",
DTB_DIR "bcm2836-rpi-2-b.dtb",
FDTFILES(DTB_DIR "bcm2836-rpi-2-b.dtb"),
true,
},
[0x6] = {
"Compute Module",
DTB_DIR "bcm2835-rpi-cm.dtb",
FDTFILES(DTB_DIR "bcm2835-rpi-cm.dtb"),
false,
},
[0x8] = {
"3 Model B",
DTB_DIR "bcm2837-rpi-3-b.dtb",
FDTFILES(DTB_DIR "bcm2837-rpi-3-b.dtb"),
true,
},
[0x9] = {
"Zero",
DTB_DIR "bcm2835-rpi-zero.dtb",
FDTFILES(DTB_DIR "bcm2835-rpi-zero.dtb"),
false,
},
[0xA] = {
"Compute Module 3",
DTB_DIR "bcm2837-rpi-cm3.dtb",
FDTFILES(DTB_DIR "bcm2837-rpi-cm3.dtb"),
false,
},
[0xC] = {
"Zero W",
DTB_DIR "bcm2835-rpi-zero-w.dtb",
FDTFILES(DTB_DIR "bcm2835-rpi-zero-w.dtb"),
false,
},
[0xD] = {
"3 Model B+",
DTB_DIR "bcm2837-rpi-3-b-plus.dtb",
FDTFILES(DTB_DIR "bcm2837-rpi-3-b-plus.dtb"),
true,
},
[0xE] = {
"3 Model A+",
DTB_DIR "bcm2837-rpi-3-a-plus.dtb",
FDTFILES(DTB_DIR "bcm2837-rpi-3-a-plus.dtb"),
false,
},
[0x10] = {
"Compute Module 3+",
DTB_DIR "bcm2837-rpi-cm3.dtb",
FDTFILES(DTB_DIR "bcm2837-rpi-cm3.dtb"),
false,
},
[0x11] = {
"4 Model B",
DTB_DIR "bcm2711-rpi-4-b.dtb",
FDTFILES(DTB_DIR "bcm2711-rpi-4-b.dtb"),
true,
},
[0x12] = {
"Zero 2 W",
DTB_DIR "bcm2837-rpi-zero-2-w.dtb",
FDTFILES(DTB_DIR "bcm2837-rpi-zero-2-w.dtb"),
false,
},
[0x13] = {
"400",
DTB_DIR "bcm2711-rpi-400.dtb",
FDTFILES(DTB_DIR "bcm2711-rpi-400.dtb"),
true,
},
[0x14] = {
"Compute Module 4",
DTB_DIR "bcm2711-rpi-cm4.dtb",
FDTFILES(DTB_DIR "bcm2711-rpi-cm4.dtb"),
true,
},
[0x17] = {
"5 Model B",
DTB_DIR "bcm2712-rpi-5-b.dtb",
FDTFILES(
[0] = DTB_DIR "bcm2712-rpi-5-b.dtb",
[1] = DTB_DIR "bcm2712d0-rpi-5-b.dtb"
),
true,
},
[0x18] = {
"Compute Module 5",
DTB_DIR "bcm2712-rpi-cm5-cm5io.dtb",
FDTFILES(DTB_DIR "bcm2712-rpi-cm5-cm5io.dtb"),
true,
},
[0x19] = {
"500",
DTB_DIR "bcm2712-rpi-500.dtb",
FDTFILES(DTB_DIR "bcm2712-rpi-500.dtb"),
true,
},
[0x1A] = {
"Compute Module 5 Lite",
DTB_DIR "bcm2712-rpi-cm5l-cm5io.dtb",
FDTFILES(DTB_DIR "bcm2712-rpi-cm5l-cm5io.dtb"),
true,
},
};
@ -215,87 +223,87 @@ static const struct rpi_model rpi_models_new_scheme[] = {
static const struct rpi_model rpi_models_old_scheme[] = {
[0x2] = {
"Model B",
DTB_DIR "bcm2835-rpi-b.dtb",
FDTFILES(DTB_DIR "bcm2835-rpi-b.dtb"),
true,
},
[0x3] = {
"Model B",
DTB_DIR "bcm2835-rpi-b.dtb",
FDTFILES(DTB_DIR "bcm2835-rpi-b.dtb"),
true,
},
[0x4] = {
"Model B rev2",
DTB_DIR "bcm2835-rpi-b-rev2.dtb",
FDTFILES(DTB_DIR "bcm2835-rpi-b-rev2.dtb"),
true,
},
[0x5] = {
"Model B rev2",
DTB_DIR "bcm2835-rpi-b-rev2.dtb",
FDTFILES(DTB_DIR "bcm2835-rpi-b-rev2.dtb"),
true,
},
[0x6] = {
"Model B rev2",
DTB_DIR "bcm2835-rpi-b-rev2.dtb",
FDTFILES(DTB_DIR "bcm2835-rpi-b-rev2.dtb"),
true,
},
[0x7] = {
"Model A",
DTB_DIR "bcm2835-rpi-a.dtb",
FDTFILES(DTB_DIR "bcm2835-rpi-a.dtb"),
false,
},
[0x8] = {
"Model A",
DTB_DIR "bcm2835-rpi-a.dtb",
FDTFILES(DTB_DIR "bcm2835-rpi-a.dtb"),
false,
},
[0x9] = {
"Model A",
DTB_DIR "bcm2835-rpi-a.dtb",
FDTFILES(DTB_DIR "bcm2835-rpi-a.dtb"),
false,
},
[0xd] = {
"Model B rev2",
DTB_DIR "bcm2835-rpi-b-rev2.dtb",
FDTFILES(DTB_DIR "bcm2835-rpi-b-rev2.dtb"),
true,
},
[0xe] = {
"Model B rev2",
DTB_DIR "bcm2835-rpi-b-rev2.dtb",
FDTFILES(DTB_DIR "bcm2835-rpi-b-rev2.dtb"),
true,
},
[0xf] = {
"Model B rev2",
DTB_DIR "bcm2835-rpi-b-rev2.dtb",
FDTFILES(DTB_DIR "bcm2835-rpi-b-rev2.dtb"),
true,
},
[0x10] = {
"Model B+",
DTB_DIR "bcm2835-rpi-b-plus.dtb",
FDTFILES(DTB_DIR "bcm2835-rpi-b-plus.dtb"),
true,
},
[0x11] = {
"Compute Module",
DTB_DIR "bcm2835-rpi-cm.dtb",
FDTFILES(DTB_DIR "bcm2835-rpi-cm.dtb"),
false,
},
[0x12] = {
"Model A+",
DTB_DIR "bcm2835-rpi-a-plus.dtb",
FDTFILES(DTB_DIR "bcm2835-rpi-a-plus.dtb"),
false,
},
[0x13] = {
"Model B+",
DTB_DIR "bcm2835-rpi-b-plus.dtb",
FDTFILES(DTB_DIR "bcm2835-rpi-b-plus.dtb"),
true,
},
[0x14] = {
"Compute Module",
DTB_DIR "bcm2835-rpi-cm.dtb",
FDTFILES(DTB_DIR "bcm2835-rpi-cm.dtb"),
false,
},
[0x15] = {
"Model A+",
DTB_DIR "bcm2835-rpi-a-plus.dtb",
FDTFILES(DTB_DIR "bcm2835-rpi-a-plus.dtb"),
false,
},
};
@ -361,11 +369,17 @@ int dram_init_banksize(void)
static void set_fdtfile(void)
{
const char *fdtfile;
int rev = revision & 0x0f;
if (env_get("fdtfile"))
return;
fdtfile = model->fdtfile;
/* set the first entry as default */
fdtfile = model->fdtfiles[0];
if (rev < model->fdtcount)
fdtfile = model->fdtfiles[rev];
env_set("fdtfile", fdtfile);
}
@ -608,6 +622,9 @@ void update_fdt_from_fw(void *fdt, void *fw_fdt)
/* warnings from the firmware (if any) */
copy_property(fdt, fw_fdt, "/chosen", "user-warnings");
/* firmware logs - used by the vclog utility */
copy_property(fdt, fw_fdt, "/chosen", "log");
/* address of the PHY device as provided by the firmware */
copy_property(fdt, fw_fdt, "ethernet0/mdio@e14/ethernet-phy@1", "reg");

View File

@ -30,6 +30,11 @@ struct bcm283x_pinctrl_priv {
#define MAX_PINS_PER_BANK 16
/* pull states for BCM2711 */
#define BCM2711_PULL_NONE 0
#define BCM2711_PULL_UP 1
#define BCM2711_PULL_DOWN 2
static void bcm2835_gpio_set_func_id(struct udevice *dev, unsigned int gpio,
int func)
{
@ -93,6 +98,17 @@ static void bcm2711_gpio_set_pull(struct udevice *dev, unsigned int gpio, int pu
u32 bit_shift;
u32 pull_bits;
if (!device_is_compatible(dev, "brcm,bcm2711-gpio"))
return;
/* BCM2711's pull values differ from BCM2835 */
if (pull == BCM2835_PUD_UP)
pull = BCM2711_PULL_UP;
else if (pull == BCM2835_PUD_DOWN)
pull = BCM2711_PULL_DOWN;
else
pull = BCM2711_PULL_NONE;
/* Findout which GPIO_PUP_PDN_CNTRL register to use */
reg_offset = BCM2711_GPPUD_CNTRL_REG0 + BCM2711_PUD_REG_OFFSET(gpio);