In upstream devicetree, clk_boston is a child of syscon node and there is no "regmap" property for clk_boston node.
Try to check parent device first to look for syscon. Signed-off-by: Jiaxun Yang <jiaxun.y...@flygoat.com> --- drivers/clk/clk_boston.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/drivers/clk/clk_boston.c b/drivers/clk/clk_boston.c index 030ff7cc58ec..2e584ed867d5 100644 --- a/drivers/clk/clk_boston.c +++ b/drivers/clk/clk_boston.c @@ -64,11 +64,15 @@ static int clk_boston_of_to_plat(struct udevice *dev) struct udevice *syscon; int err; - err = uclass_get_device_by_phandle(UCLASS_SYSCON, dev, - "regmap", &syscon); - if (err) { - pr_err("unable to find syscon device\n"); - return err; + if (device_get_uclass_id(dev->parent) == UCLASS_SYSCON) { + syscon = dev->parent; + } else { + err = uclass_get_device_by_phandle(UCLASS_SYSCON, dev, + "regmap", &syscon); + if (err) { + pr_err("unable to find syscon device\n"); + return err; + } } state->regmap = syscon_get_regmap(syscon); @@ -94,4 +98,5 @@ U_BOOT_DRIVER(clk_boston) = { .of_to_plat = clk_boston_of_to_plat, .plat_auto = sizeof(struct clk_boston), .ops = &clk_boston_ops, + .flags = DM_FLAG_PRE_RELOC, }; -- 2.34.1