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? 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