[U-Boot] [PATCH v1 0/2] clk: at91: Fix the wrong used class ID

This patch set is to fix the wrong used class ID. The class ID of the at91-pmc and at91-sckc driver should be UCLASS_SIMPLE_BUS, instead of UCLASS_CLK. And add an empty .ops callback for the clk_generic driver to avoid a wild pointer.
Wenyou Yang (2): clk: at91: Fix at91-pmc and at91-sckc's class ID clk: at91: Add .ops callback for clk_generic
drivers/clk/at91/pmc.c | 13 +++++-------- drivers/clk/at91/sckc.c | 17 +++++------------ 2 files changed, 10 insertions(+), 20 deletions(-)

The at91-pmc and at91-sckc aren't the clock providers, change their class ID from UCLASS_CLK to UCLASS_SIMPLE_BUS, they also don't need to bind the child nodes explicitly, the .post_bind callback of simple_bus uclass will do it for them.
Signed-off-by: Wenyou Yang wenyou.yang@atmel.com ---
drivers/clk/at91/pmc.c | 10 ++-------- drivers/clk/at91/sckc.c | 17 +++++------------ 2 files changed, 7 insertions(+), 20 deletions(-)
diff --git a/drivers/clk/at91/pmc.c b/drivers/clk/at91/pmc.c index a08d7e8..76ff387 100644 --- a/drivers/clk/at91/pmc.c +++ b/drivers/clk/at91/pmc.c @@ -14,21 +14,15 @@
DECLARE_GLOBAL_DATA_PTR;
-static int at91_pmc_bind(struct udevice *dev) -{ - return dm_scan_fdt_node(dev, gd->fdt_blob, dev->of_offset, false); -} - static const struct udevice_id at91_pmc_match[] = { { .compatible = "atmel,sama5d2-pmc" }, {} };
U_BOOT_DRIVER(at91_pmc) = { - .name = "at91-pmc-core", - .id = UCLASS_CLK, + .name = "at91-pmc", + .id = UCLASS_SIMPLE_BUS, .of_match = at91_pmc_match, - .bind = at91_pmc_bind, };
int at91_pmc_core_probe(struct udevice *dev) diff --git a/drivers/clk/at91/sckc.c b/drivers/clk/at91/sckc.c index b207611..6035e20 100644 --- a/drivers/clk/at91/sckc.c +++ b/drivers/clk/at91/sckc.c @@ -6,25 +6,18 @@ */
#include <common.h> -#include <clk-uclass.h> #include <dm/device.h> #include <dm/root.h>
DECLARE_GLOBAL_DATA_PTR;
-static int at91_sckc_clk_bind(struct udevice *dev) -{ - return dm_scan_fdt_node(dev, gd->fdt_blob, dev->of_offset, false); -} - -static const struct udevice_id at91_sckc_clk_match[] = { +static const struct udevice_id at91_sckc_match[] = { { .compatible = "atmel,at91sam9x5-sckc" }, {} };
-U_BOOT_DRIVER(at91_sckc_clk) = { - .name = "at91_sckc_clk", - .id = UCLASS_CLK, - .of_match = at91_sckc_clk_match, - .bind = at91_sckc_clk_bind, +U_BOOT_DRIVER(at91_sckc) = { + .name = "at91-sckc", + .id = UCLASS_SIMPLE_BUS, + .of_match = at91_sckc_match, };

On 08/30/2016 02:11 AM, Wenyou Yang wrote:
The at91-pmc and at91-sckc aren't the clock providers, change their class ID from UCLASS_CLK to UCLASS_SIMPLE_BUS, they also don't need to bind the child nodes explicitly, the .post_bind callback of simple_bus uclass will do it for them.
This patch, Acked-by: Stephen Warren swarren@nvidia.com

On 30 August 2016 at 02:11, Wenyou Yang wenyou.yang@atmel.com wrote:
The at91-pmc and at91-sckc aren't the clock providers, change their class ID from UCLASS_CLK to UCLASS_SIMPLE_BUS, they also don't need to bind the child nodes explicitly, the .post_bind callback of simple_bus uclass will do it for them.
Signed-off-by: Wenyou Yang wenyou.yang@atmel.com
drivers/clk/at91/pmc.c | 10 ++-------- drivers/clk/at91/sckc.c | 17 +++++------------ 2 files changed, 7 insertions(+), 20 deletions(-)
Reviewed-by: Simon Glass sjg@chromium.org

To avoid the wild pointer as NULL->of_xlate, add an empty .ops callback for the clk_generic driver.
Signed-off-by: Wenyou Yang wenyou.yang@atmel.com ---
drivers/clk/at91/pmc.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/drivers/clk/at91/pmc.c b/drivers/clk/at91/pmc.c index 76ff387..1043148 100644 --- a/drivers/clk/at91/pmc.c +++ b/drivers/clk/at91/pmc.c @@ -59,7 +59,10 @@ int at91_pmc_clk_node_bind(struct udevice *dev) return 0; }
+static struct clk_ops generic_clk_ops; + U_BOOT_DRIVER(clk_generic) = { .id = UCLASS_CLK, .name = "clk", + .ops = &generic_clk_ops, };

On 08/30/2016 02:11 AM, Wenyou Yang wrote:
To avoid the wild pointer as NULL->of_xlate, add an empty .ops callback for the clk_generic driver.
This shouldn't be needed. If this driver isn't a clock provider, and it cannot be a clock provider without implementing and clock ops, then nothing should be calling of_xlate through its ops pointer, and the driver shouldn't be a UCLASS_CLK.
participants (3)
-
Simon Glass
-
Stephen Warren
-
Wenyou Yang