On 09.06.22 15:58, Sascha Hauer wrote: > On Thu, Jun 09, 2022 at 07:59:16AM +0200, Ahmad Fatoum wrote: >> Our Raspberry Pi block driver is a hack, but it works well enough for > > s/block/clock? aye. > > Sascha > >> older Rpis and just needs one more clock to support the SD-Card on the >> Raspberry Pi 4, so add that. In return, we remove bcm2835-cs, which we >> won't use on Raspberry Pi 4, because we'll leverage the ARM architected >> timer instead. >> >> Signed-off-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> >> --- >> arch/arm/mach-bcm283x/include/mach/mbox.h | 1 + >> drivers/clk/clk-rpi.c | 42 +++++++++++++++++------ >> 2 files changed, 32 insertions(+), 11 deletions(-) >> >> diff --git a/arch/arm/mach-bcm283x/include/mach/mbox.h b/arch/arm/mach-bcm283x/include/mach/mbox.h >> index a9f06512bc23..46f9dfc9ea65 100644 >> --- a/arch/arm/mach-bcm283x/include/mach/mbox.h >> +++ b/arch/arm/mach-bcm283x/include/mach/mbox.h >> @@ -273,6 +273,7 @@ struct bcm2835_mbox_tag_set_power_state { >> #define BCM2835_MBOX_CLOCK_ID_SDRAM 8 >> #define BCM2835_MBOX_CLOCK_ID_PIXEL 9 >> #define BCM2835_MBOX_CLOCK_ID_PWM 10 >> +#define BCM2835_MBOX_CLOCK_ID_EMMC2 12 >> >> struct bcm2835_mbox_tag_get_clock_rate { >> struct bcm2835_mbox_tag_hdr tag_hdr; >> diff --git a/drivers/clk/clk-rpi.c b/drivers/clk/clk-rpi.c >> index 59ae8e59bac5..71badc04c0f0 100644 >> --- a/drivers/clk/clk-rpi.c >> +++ b/drivers/clk/clk-rpi.c >> @@ -40,10 +40,29 @@ static struct clk *rpi_register_firmware_clock(u32 clock_id, const char *name) >> return clk_fixed(name, msg->get_clock_rate.body.resp.rate_hz); >> } >> >> -static int bcm2835_cprman_probe(struct device_d *dev) >> +static int bcm2835_cprman_init(struct device_d *dev) >> { >> struct clk *clk_cs; >> >> + clk_cs = clk_fixed("bcm2835-cs", 1 * 1000 * 1000); >> + clk_register_clkdev(clk_cs, NULL, "bcm2835-cs"); >> + >> + return 0; >> +} >> + >> +static int rpi_cprman_probe(struct device_d *dev) >> +{ >> + int (*init)(struct device_d *dev); >> + >> + init = device_get_match_data(dev); >> + if (init) { >> + int ret; >> + >> + ret = init(dev); >> + if (ret) >> + return ret; >> + } >> + >> clks[BCM2835_CLOCK_EMMC] = >> rpi_register_firmware_clock(BCM2835_MBOX_CLOCK_ID_EMMC, >> "bcm2835_mci0"); >> @@ -56,12 +75,15 @@ static int bcm2835_cprman_probe(struct device_d *dev) >> if (IS_ERR(clks[BCM2835_CLOCK_VPU])) >> return PTR_ERR(clks[BCM2835_CLOCK_VPU]); >> >> + clks[BCM2711_CLOCK_EMMC2] = >> + rpi_register_firmware_clock(BCM2835_MBOX_CLOCK_ID_EMMC2, >> + "bcm2711_emmc2"); >> + if (IS_ERR(clks[BCM2711_CLOCK_EMMC2])) >> + return PTR_ERR(clks[BCM2711_CLOCK_EMMC2]); >> + >> clks[BCM2835_CLOCK_UART] = clk_fixed("uart0-pl0110", 48 * 1000 * 1000); >> clk_register_clkdev(clks[BCM2835_CLOCK_UART], NULL, "uart0-pl0110"); >> >> - clk_cs = clk_fixed("bcm2835-cs", 1 * 1000 * 1000); >> - clk_register_clkdev(clk_cs, NULL, "bcm2835-cs"); >> - >> clk_data.clks = clks; >> clk_data.clk_num = BCM2711_CLOCK_END; >> of_clk_add_provider(dev->device_node, of_clk_src_onecell_get, &clk_data); >> @@ -70,16 +92,14 @@ static int bcm2835_cprman_probe(struct device_d *dev) >> } >> >> static __maybe_unused struct of_device_id bcm2835_cprman_dt_ids[] = { >> - { >> - .compatible = "brcm,bcm2835-cprman", >> - }, { >> - /* sentinel */ >> - } >> + { .compatible = "brcm,bcm2835-cprman", .data = bcm2835_cprman_init }, >> + { .compatible = "brcm,bcm2711-cprman" }, >> + { /* sentinel */ } >> }; >> >> static struct driver_d bcm2835_cprman_driver = { >> - .probe = bcm2835_cprman_probe, >> - .name = "bcm2835-cprman", >> + .probe = rpi_cprman_probe, >> + .name = "raspberrypi-cprman", >> .of_compatible = DRV_OF_COMPAT(bcm2835_cprman_dt_ids), >> }; >> core_platform_driver(bcm2835_cprman_driver); >> -- >> 2.30.2 >> >> >> _______________________________________________ >> barebox mailing list >> barebox@xxxxxxxxxxxxxxxxxxx >> http://lists.infradead.org/mailman/listinfo/barebox >> > -- 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 | _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox