public inbox for linux-arm-kernel@lists.infradead.org 
 help / color / mirror / Atom feed
From: will.deacon@arm•com (Will Deacon)
To: linux-arm-kernel@lists•infradead.org
Subject: [PATCH v3 3/5] arm64: dts: Add support for Spreadtrum SC9836 SoC in dts and Makefile
Date: Fri, 28 Nov 2014 15:09:12 +0000	[thread overview]
Message-ID: <20141128150912.GI7144@arm.com> (raw)
In-Reply-To: <20141128150325.GC24370@e104818-lin.cambridge.arm.com>

On Fri, Nov 28, 2014 at 03:03:26PM +0000, Catalin Marinas wrote:
> On Fri, Nov 28, 2014 at 02:44:12PM +0000, Will Deacon wrote:
> > On Fri, Nov 28, 2014 at 02:35:32PM +0000, Mark Rutland wrote:
> > > On Fri, Nov 28, 2014 at 02:29:13PM +0000, Catalin Marinas wrote:
> > > > On Thu, Nov 27, 2014 at 01:43:09PM +0000, Mark Rutland wrote:
> > > > > On Thu, Nov 27, 2014 at 12:12:15PM +0000, Catalin Marinas wrote:
> > > > > > On Thu, Nov 27, 2014 at 11:50:43AM +0000, Mark Rutland wrote:
> > > > > > > On Tue, Nov 25, 2014 at 12:16:56PM +0000, Chunyan Zhang wrote:
> > > > > > > > +
> > > > > > > > +       timer {
> > > > > > > > +               compatible = "arm,armv8-timer";
> > > > > > > > +               interrupts = <1 13 0xff01>,
> > > > > > > > +                            <1 14 0xff01>,
> > > > > > > > +                            <1 11 0xff01>,
> > > > > > > > +                            <1 10 0xff01>;
> > > > > > > > +               clock-frequency = <26000000>;
> > > > > > > 
> > > > > > > Please remove the clock-frequency property. Your FW should initialise
> > > > > > > CNTFRQ_EL0 on all CPUs (certainly PSCI 0.2 requires that you do this).
> > > > > > 
> > > > > > Since this comes up regularly, I think we need a dev_warn() in the arch
> > > > > > timer driver when CONFIG_ARM64.
> > > > > 
> > > > > I'll ack such a patch ;)
> > > > 
> > > > How rude would this be?
> > > > 
> > > > diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c
> > > > index 2133f9d59d06..aaaf3433ccb9 100644
> > > > --- a/drivers/clocksource/arm_arch_timer.c
> > > > +++ b/drivers/clocksource/arm_arch_timer.c
> > > > @@ -371,7 +371,8 @@ arch_timer_detect_rate(void __iomem *cntbase, struct device_node *np)
> > > > 		return;
> > > >  
> > > > 	/* Try to determine the frequency from the device tree or CNTFRQ */
> > > > -	if (of_property_read_u32(np, "clock-frequency", &arch_timer_rate)) {
> > > > +	if (IS_ENABLED(CONFIG_ARM64) ||
> > > > +	    of_property_read_u32(np, "clock-frequency", &arch_timer_rate)) {
> > > > 		if (cntbase)
> > > > 			arch_timer_rate = readl_relaxed(cntbase + CNTFRQ);
> > > > 		else
> > > >
> > > 
> > > Probably too rude, given it doesn't WARN() the user.
> > 
> > We override broken hardware ID registers all the time in device-tree without
> > dumping stack. Why is this any different?
> 
> I'm not for dumping the stack, it's not relevant (just more noise).
> 
> > > We should be extremely loud if we see the clock-frequency property on an
> > > arm64 system. Whether or not we should ignore the property is another
> > > matter.
> > 
> > I don't really see the point in ignoring it. We will see broken hardware
> > [1] and this is just preventing ourselves from working around it. I'd much
> > rather have arch-timers with a "clock-frequence" property than have some
> > other timer instead because the kernel driver is being stubborn.
> 
> I agree that sooner or later we'll need a workaround (we already did for
> Juno). My point is that many consider such overriding behaviour to be
> the default - i.e. don't bother writing any sane value in CNTFRQ in
> firmware at boot because Linux can cope without. It gets worse when
> companies develop their firmware long before starting to upstream kernel
> patches, so too late to fix it.
> 
> > [1] A previous version of the Juno firmware, for example.
> 
> What about CONFIG_BROKEN_FIRMWARE, default off?

I'd rather have a `firmware test' module, which could be as noisy as it
likes when it finds issues like this. It could also do things like fuzz the
PSCI interface.

> In the meantime I think we can be more tolerant:
> 
> diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c
> index 2133f9d59d06..87f67a93fcc7 100644
> --- a/drivers/clocksource/arm_arch_timer.c
> +++ b/drivers/clocksource/arm_arch_timer.c
> @@ -376,6 +376,8 @@ arch_timer_detect_rate(void __iomem *cntbase, struct device_node *np)
>  			arch_timer_rate = readl_relaxed(cntbase + CNTFRQ);
>  		else
>  			arch_timer_rate = arch_timer_get_cntfrq();
> +	} else if (IS_ENABLED(CONFIG_ARM64)) {
> +		pr_warn("Architected timer frequency overridden by DT (broken firmware?)\n");
>  	}

That looks sensible. It would be interesting to print the value of CNTFRQ
too.

Will

  reply	other threads:[~2014-11-28 15:09 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <Sharkl64-v3>
2014-11-25 12:16 ` [PATCH v3 0/5] Add Spreadtrum Sharkl64 Platform support Chunyan Zhang
2014-11-25 12:16   ` [PATCH v3 1/5] Documentation: DT: Renamed of-serial.txt to 8250.txt Chunyan Zhang
2014-11-27 11:38     ` Mark Rutland
2014-11-27 12:08       ` Lyra Zhang
2014-11-25 12:16   ` [PATCH v3 2/5] Documentation: DT: Add bindings for Spreadtrum SoC Platform Chunyan Zhang
2014-11-25 12:52     ` Arnd Bergmann
2014-11-25 12:16   ` [PATCH v3 3/5] arm64: dts: Add support for Spreadtrum SC9836 SoC in dts and Makefile Chunyan Zhang
2014-11-27 11:50     ` Mark Rutland
2014-11-27 12:12       ` Catalin Marinas
2014-11-27 13:43         ` Mark Rutland
2014-11-28 14:29           ` Catalin Marinas
2014-11-28 14:35             ` Mark Rutland
2014-11-28 14:44               ` Will Deacon
2014-11-28 14:46                 ` Mark Rutland
2014-11-28 14:59                   ` Will Deacon
2014-11-28 14:50                 ` Mark Brown
2014-11-28 15:03                 ` Catalin Marinas
2014-11-28 15:09                   ` Will Deacon [this message]
2014-11-28 16:40                   ` Mark Rutland
2014-11-28 17:24                     ` Catalin Marinas
2014-12-03  2:35       ` Orson Zhai
2014-12-03  9:16       ` Lyra Zhang
2014-11-25 12:16   ` [PATCH v3 4/5] arm64: Add support for Spreadtrum's Sharkl64 Platform in Kconfig and defconfig Chunyan Zhang
2014-11-25 12:57     ` Arnd Bergmann
2014-11-26  3:08       ` Lyra Zhang
     [not found]       ` <CAAfSe-uoXOJ8=agCFuBnXhj7nBBTskQ=8_jMtv_SAjor2gfO2w@mail.gmail.com>
2014-11-26  9:00         ` Arnd Bergmann
2014-11-25 12:16   ` [PATCH v3 5/5] tty/serial: Add Spreadtrum sc9836-uart driver support Chunyan Zhang
2014-11-25 20:03     ` Greg KH
2014-11-27 11:05       ` Lyra Zhang
2014-11-26  9:48     ` Tobias Klauser
2014-11-27 11:39       ` Lyra Zhang
2014-11-26 12:33     ` One Thousand Gnomes
2014-11-28 10:13       ` Orson Zhai
2014-11-26 18:29     ` Murali Karicheri
2014-11-27 11:59       ` Lyra Zhang
2014-11-27 12:57         ` Arnd Bergmann
2014-11-27 15:23           ` Lyra Zhang
2014-11-27 15:34             ` One Thousand Gnomes
2014-11-27 15:36             ` Arnd Bergmann
2014-12-03  9:17       ` Lyra Zhang
2014-12-03  9:50         ` Arnd Bergmann
2014-12-03 10:11           ` Russell King - ARM Linux
2014-12-03 12:08             ` Lyra Zhang
2014-12-03 12:15           ` Lyra Zhang
2014-11-25 12:57   ` [PATCH v3 0/5] Add Spreadtrum Sharkl64 Platform support Mark Brown
2014-11-25 12:59   ` Arnd Bergmann
2014-11-27 12:03   ` Mark Rutland

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20141128150912.GI7144@arm.com \
    --to=will.deacon@arm$(echo .)com \
    --cc=linux-arm-kernel@lists$(echo .)infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox