Add the clock-names property in init_timer() to work-around Aspeed devicetrees from times prior to merging the Moxart/Aspeed and Faraday drivers.
Signed-off-by: Andrew Jeffery <and...@aj.id.au> --- Well, here's an implementation I knocked up. It's a fair chunk of code for marginal benefit. Joel is against it. At least it's something to debate. Tested under QEMU for both AST2400 and AST2500 SoCs. Cheers, Andrew arch/arm/Makefile | 1 + arch/arm/mach-aspeed/Makefile | 1 + arch/arm/mach-aspeed/aspeed.c | 73 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 arch/arm/mach-aspeed/Makefile create mode 100644 arch/arm/mach-aspeed/aspeed.c diff --git a/arch/arm/Makefile b/arch/arm/Makefile index ab30cc634d02..f3ed359e5b28 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile @@ -154,6 +154,7 @@ textofs-$(CONFIG_ARCH_AXXIA) := 0x00308000 machine-$(CONFIG_ARCH_ALPINE) += alpine machine-$(CONFIG_ARCH_ARTPEC) += artpec machine-$(CONFIG_ARCH_AT91) += at91 +machine-$(CONFIG_ARCH_ASPEED) += aspeed machine-$(CONFIG_ARCH_AXXIA) += axxia machine-$(CONFIG_ARCH_BCM) += bcm machine-$(CONFIG_ARCH_BERLIN) += berlin diff --git a/arch/arm/mach-aspeed/Makefile b/arch/arm/mach-aspeed/Makefile new file mode 100644 index 000000000000..de8cd76fcf5d --- /dev/null +++ b/arch/arm/mach-aspeed/Makefile @@ -0,0 +1 @@ +obj-y += aspeed.o diff --git a/arch/arm/mach-aspeed/aspeed.c b/arch/arm/mach-aspeed/aspeed.c new file mode 100644 index 000000000000..feaac8eb5d2d --- /dev/null +++ b/arch/arm/mach-aspeed/aspeed.c @@ -0,0 +1,73 @@ +/* + * Copyright 2017 IBM Corporation + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version + * 2 of the License, or (at your option) any later version. + */ + +#include <linux/clk-provider.h> +#include <linux/clocksource.h> +#include <linux/init.h> +#include <linux/of.h> +#include <linux/slab.h> +#include <asm/mach/arch.h> + +const char *aspeed_timer_compatibles[] = { + "aspeed,ast2400-timer", + "aspeed,ast2500-timer", + NULL, +}; + +/* + * For backwards compatibility with pre-4.13 devicetrees, populate the + * clock-names property in the clocksource node + */ +static void __init aspeed_timer_set_clock_names(void) +{ + const char **compatible = aspeed_timer_compatibles; + struct device_node *np; + + while (*compatible) { + for_each_compatible_node(np, NULL, *compatible) { + struct property *clock_names; + int rc; + + rc = of_property_count_strings(np, "clock-names"); + if (rc != -EINVAL) + continue; + + clock_names = kzalloc(sizeof(*clock_names), GFP_KERNEL); + + clock_names->name = kstrdup("clock-names", GFP_KERNEL); + clock_names->length = sizeof("PCLK"); + clock_names->value = kstrdup("PCLK", GFP_KERNEL); + + of_add_property(np, clock_names); + } + + compatible++; + } +} + +static void __init aspeed_init_time(void) +{ + aspeed_timer_set_clock_names(); + +#ifdef CONFIG_COMMON_CLK + of_clk_init(NULL); +#endif + timer_probe(); +} + +static const char *const aspeed_dt_match[] __initconst = { + "aspeed,ast2400", + "aspeed,ast2500", + NULL, +}; + +DT_MACHINE_START(aspeed_dt, "Aspeed SoC") + .init_time = aspeed_init_time, + .dt_compat = aspeed_dt_match, +MACHINE_END -- 2.11.0