Re: [PATCH] ARM: dts: Fix timer regression for beagleboard revision c
From: Daniel Lezcano
Date: Mon Nov 29 2021 - 05:24:14 EST
Hi Tony,
On 25/11/2021 15:48, Tony Lindgren wrote:
> Commit e428e250fde6 ("ARM: dts: Configure system timers for omap3")
> caused a timer regression for beagleboard revision c where the system
> clockevent stops working if omap3isp module is unloaded.
>
> Turns out we still have beagleboard revisions a-b4 capacitor c70 quirks
> applied that limit the usable timers for no good reason. This also affects
> the power management as we use the system clock instead of the 32k clock
> source.
>
> Let's fix the issue by adding a new omap3-beagle-ab4.dts for the old timer
> quirks. This allows us to remove the timer quirks for later beagleboard
> revisions. We also need to update the related timer quirk check for the
> correct compatible property.
>
> Fixes: e428e250fde6 ("ARM: dts: Configure system timers for omap3")
> Cc: linux-kernel@xxxxxxxxxxxxxxx
> Cc: Daniel Lezcano <daniel.lezcano@xxxxxxxxxx>
> Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> Cc: Rob Herring <robh+dt@xxxxxxxxxx>
> Reported-by: Jarkko Nikula <jarkko.nikula@xxxxxxxxxx>
> Signed-off-by: Tony Lindgren <tony@xxxxxxxxxxx>
> ---
> .../devicetree/bindings/arm/omap/omap.txt | 3 ++
> arch/arm/boot/dts/Makefile | 1 +
> arch/arm/boot/dts/omap3-beagle-ab4.dts | 47 +++++++++++++++++++
> arch/arm/boot/dts/omap3-beagle.dts | 33 -------------
> drivers/clocksource/timer-ti-dm-systimer.c | 2 +-
> 5 files changed, 52 insertions(+), 34 deletions(-)
> create mode 100644 arch/arm/boot/dts/omap3-beagle-ab4.dts
Usually, bindings DT and driver changes are separate patches
> diff --git a/Documentation/devicetree/bindings/arm/omap/omap.txt b/Documentation/devicetree/bindings/arm/omap/omap.txt
> --- a/Documentation/devicetree/bindings/arm/omap/omap.txt
> +++ b/Documentation/devicetree/bindings/arm/omap/omap.txt
> @@ -119,6 +119,9 @@ Boards (incomplete list of examples):
> - OMAP3 BeagleBoard : Low cost community board
> compatible = "ti,omap3-beagle", "ti,omap3430", "ti,omap3"
>
> +- OMAP3 BeagleBoard A to B4 : Early BeagleBoard revisions A to B4 with a timer quirk
> + compatible = "ti,omap3-beagle-ab4", "ti,omap3-beagle", "ti,omap3430", "ti,omap3"
> +
> - OMAP3 Tobi with Overo : Commercial expansion board with daughter board
> compatible = "gumstix,omap3-overo-tobi", "gumstix,omap3-overo", "ti,omap3430", "ti,omap3"
>
> diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
> --- a/arch/arm/boot/dts/Makefile
> +++ b/arch/arm/boot/dts/Makefile
> @@ -794,6 +794,7 @@ dtb-$(CONFIG_ARCH_OMAP3) += \
> logicpd-som-lv-37xx-devkit.dtb \
> omap3430-sdp.dtb \
> omap3-beagle.dtb \
> + omap3-beagle-ab4.dtb \
> omap3-beagle-xm.dtb \
> omap3-beagle-xm-ab.dtb \
> omap3-cm-t3517.dtb \
> diff --git a/arch/arm/boot/dts/omap3-beagle-ab4.dts b/arch/arm/boot/dts/omap3-beagle-ab4.dts
> new file mode 100644
> --- /dev/null
> +++ b/arch/arm/boot/dts/omap3-beagle-ab4.dts
> @@ -0,0 +1,47 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +/dts-v1/;
> +
> +#include "omap3-beagle.dts"
> +
> +/ {
> + model = "TI OMAP3 BeagleBoard A to B4";
> + compatible = "ti,omap3-beagle-ab4", "ti,omap3-beagle", "ti,omap3430", "ti,omap3";
> +};
> +
> +/*
> + * Workaround for capacitor C70 issue, see "Boards revision A and < B5"
> + * section at https://elinux.org/BeagleBoard_Community
> + */
> +
> +/* Unusable as clocksource because of unreliable oscillator */
> +&counter32k {
> + status = "disabled";
> +};
> +
> +/* Unusable as clockevent because of unreliable oscillator, allow to idle */
> +&timer1_target {
> + /delete-property/ti,no-reset-on-init;
> + /delete-property/ti,no-idle;
> + timer@0 {
> + /delete-property/ti,timer-alwon;
> + };
> +};
> +
> +/* Preferred always-on timer for clocksource */
> +&timer12_target {
> + ti,no-reset-on-init;
> + ti,no-idle;
> + timer@0 {
> + /* Always clocked by secure_32k_fck */
> + };
> +};
> +
> +/* Preferred timer for clockevent */
> +&timer2_target {
> + ti,no-reset-on-init;
> + ti,no-idle;
> + timer@0 {
> + assigned-clocks = <&gpt2_fck>;
> + assigned-clock-parents = <&sys_ck>;
> + };
> +};
> diff --git a/arch/arm/boot/dts/omap3-beagle.dts b/arch/arm/boot/dts/omap3-beagle.dts
> --- a/arch/arm/boot/dts/omap3-beagle.dts
> +++ b/arch/arm/boot/dts/omap3-beagle.dts
> @@ -308,39 +308,6 @@ &usbhsehci {
> phys = <0 &hsusb2_phy>;
> };
>
> -/* Unusable as clocksource because of unreliable oscillator */
> -&counter32k {
> - status = "disabled";
> -};
> -
> -/* Unusable as clockevent because if unreliable oscillator, allow to idle */
> -&timer1_target {
> - /delete-property/ti,no-reset-on-init;
> - /delete-property/ti,no-idle;
> - timer@0 {
> - /delete-property/ti,timer-alwon;
> - };
> -};
> -
> -/* Preferred always-on timer for clocksource */
> -&timer12_target {
> - ti,no-reset-on-init;
> - ti,no-idle;
> - timer@0 {
> - /* Always clocked by secure_32k_fck */
> - };
> -};
> -
> -/* Preferred timer for clockevent */
> -&timer2_target {
> - ti,no-reset-on-init;
> - ti,no-idle;
> - timer@0 {
> - assigned-clocks = <&gpt2_fck>;
> - assigned-clock-parents = <&sys_ck>;
> - };
> -};
> -
> &twl_gpio {
> ti,use-leds;
> /* pullups: BIT(1) */
> diff --git a/drivers/clocksource/timer-ti-dm-systimer.c b/drivers/clocksource/timer-ti-dm-systimer.c
> --- a/drivers/clocksource/timer-ti-dm-systimer.c
> +++ b/drivers/clocksource/timer-ti-dm-systimer.c
> @@ -241,7 +241,7 @@ static void __init dmtimer_systimer_assign_alwon(void)
> bool quirk_unreliable_oscillator = false;
>
> /* Quirk unreliable 32 KiHz oscillator with incomplete dts */
> - if (of_machine_is_compatible("ti,omap3-beagle") ||
> + if (of_machine_is_compatible("ti,omap3-beagle-ab4") ||
> of_machine_is_compatible("timll,omap3-devkit8000")) {
> quirk_unreliable_oscillator = true;
> counter_32k = -ENODEV;
>
--
<http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs
Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog