
Hi Simon,
sorry for late response i was offline a bit
W dniu 13.07.2021 o 22:17, Simon Glass pisze:
Hi Paweł,
On Tue, 13 Jul 2021 at 12:59, Paweł Jarosz paweljarosz3691@gmail.com wrote:
Add clock driver for rk3066 platform.
Signed-off-by: Paweł Jarosz paweljarosz3691@gmail.com Acked-by: Philipp Tomsich philipp.tomsich@vrull.eu
Changes since v1:
- updated to shifted masks
- moved clk init to tpl
Changes since v2:
- none
Changes since v3:
- none
Changes since v4:
- updated to current codebase
- fixed compilation errors
Changes since v5:
- various style changes
- added clk_enable/clk_disable support for nand and mmc clocks
- updated maintainer email
- renamed uint32_t to u32
- used #if IS_ENABLED macro instead #ifdef
.../include/asm/arch-rockchip/cru_rk3066.h | 203 +++++ drivers/clk/rockchip/Makefile | 1 + drivers/clk/rockchip/clk_rk3066.c | 704 ++++++++++++++++++ 3 files changed, 908 insertions(+) create mode 100644 arch/arm/include/asm/arch-rockchip/cru_rk3066.h create mode 100644 drivers/clk/rockchip/clk_rk3066.c
[..]
+static int rk3066_clk_of_to_plat(struct udevice *dev) +{ +#if !CONFIG_IS_ENABLED(OF_PLATDATA)
struct rk3066_clk_priv *priv = dev_get_priv(dev);
priv->cru = dev_read_addr_ptr(dev);
+#endif
return 0;
+}
+static int rk3066_clk_probe(struct udevice *dev) +{
struct rk3066_clk_priv *priv = dev_get_priv(dev);
priv->grf = syscon_get_first_range(ROCKCHIP_SYSCON_GRF);
if (IS_ERR(priv->grf))
return PTR_ERR(priv->grf);
+#if IS_ENABLED(CONFIG_TPL_BUILD)
Do you need that? The line below should take care of it.
Yep. Later rkclk_init and rkclk_configure_cpu should be only executed in TPL.
+#if CONFIG_IS_ENABLED(OF_PLATDATA)
struct rk3066_clk_plat *plat = dev_get_plat(dev);
priv->cru = map_sysmem(plat->dtd.reg[0], plat->dtd.reg[1]);
+#endif
rkclk_init(priv->cru, priv->grf);
/* Init CPU frequency */
rkclk_configure_cpu(priv->cru, priv->grf, APLL_SAFE_HZ);
+#endif
return 0;
+}
+static int rk3066_clk_bind(struct udevice *dev) +{
int ret;
struct udevice *sys_child;
struct sysreset_reg *priv;
/* The reset driver does not have a device node, so bind it here */
ret = device_bind_driver(dev, "rockchip_sysreset", "sysreset",
&sys_child);
if (ret) {
debug("Warning: No sysreset driver: ret=%d\n", ret);
} else {
priv = malloc(sizeof(struct sysreset_reg));
priv->glb_srst_fst_value = offsetof(struct rk3066_cru,
cru_glb_srst_fst_value);
priv->glb_srst_snd_value = offsetof(struct rk3066_cru,
cru_glb_srst_snd_value);
dev_set_priv(sys_child, priv);
}
+#if CONFIG_IS_ENABLED(RESET_ROCKCHIP)
Can you use if() instead of #if ?
Yes, but what is the difference? Sorry ... I don't know what to ask google to get the answer.
Is it in this case doing the same thing and just looking better?
Regards,
Paweł Jarosz
ret = offsetof(struct rk3066_cru, cru_softrst_con[0]);
ret = rockchip_reset_bind(dev, ret, 9);
if (ret)
debug("Warning: software reset driver bind failed\n");
+#endif
return 0;
+}
+static const struct udevice_id rk3066_clk_ids[] = {
{ .compatible = "rockchip,rk3066a-cru" },
{ }
+};
+U_BOOT_DRIVER(rockchip_rk3066a_cru) = {
.name = "rockchip_rk3066a_cru",
.id = UCLASS_CLK,
.of_match = rk3066_clk_ids,
.priv_auto = sizeof(struct rk3066_clk_priv),
.plat_auto = sizeof(struct rk3066_clk_plat),
.ops = &rk3066_clk_ops,
.bind = rk3066_clk_bind,
.of_to_plat = rk3066_clk_of_to_plat,
.probe = rk3066_clk_probe,
+};
2.32.0
Regards, Simon