From: Fu Wei <fu.wei@linaro.org> To: Mark Rutland <mark.rutland@arm.com> Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>, Len Brown <lenb@kernel.org>, Daniel Lezcano <daniel.lezcano@linaro.org>, Thomas Gleixner <tglx@linutronix.de>, Marc Zyngier <marc.zyngier@arm.com>, Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>, Sudeep Holla <sudeep.holla@arm.com>, Hanjun Guo <hanjun.guo@linaro.org>, linux-arm-kernel@lists.infradead.org, Linaro ACPI Mailman List <linaro-acpi@lists.linaro.org>, Linux Kernel Mailing List <linux-kernel@vger.kernel.org>, ACPI Devel Maling List <linux-acpi@vger.kernel.org>, rruigrok@codeaurora.org, "Abdulhamid, Harb" <harba@codeaurora.org>, Christopher Covington <cov@codeaurora.org>, Timur Tabi <timur@codeaurora.org>, G Gregory <graeme.gregory@linaro.org>, Al Stone <al.stone@linaro.org>, Jon Masters <jcm@redhat.com>, Wei Huang <wei@redhat.com>, Arnd Bergmann <arnd@arndb.de>, Catalin Marinas <catalin.marinas@arm.com>, Will Deacon <will.deacon@arm.com>, Suravee Suthikulpanit <Suravee.Suthikulpanit@amd.com>, Leo Duran <leo.duran@amd.com>, Wim Van Sebroeck <wim@iguana.be>, Guenter Roeck <linux@roeck-us.net>, linux-watchdog@vger.kernel.org, Tomasz Nowicki <tn@semihalf.com>, Christoffer Dall <christoffer.dall@linaro.org>, Julien Grall <julien.grall@arm.com> Subject: Re: [PATCH v19 06/15] clocksource/drivers/arm_arch_timer: Rework counter frequency detection. Date: Wed, 18 Jan 2017 12:27:37 +0800 [thread overview] Message-ID: <CADyBb7tMaOJ9D-AYnaNP1OX8kkst7DCkVT0giB2HqdrjSpgX3A@mail.gmail.com> (raw) In-Reply-To: <20170116175025.GJ5908@leverpostej> Hi Mark, On 17 January 2017 at 01:50, Mark Rutland <mark.rutland@arm.com> wrote: > On Wed, Dec 21, 2016 at 02:45:54PM +0800, fu.wei@linaro.org wrote: >> From: Fu Wei <fu.wei@linaro.org> >> >> Currently, the counter frequency detection call(arch_timer_detect_rate) >> combines all the ways to get counter frequency: device-tree property, >> system coprocessor register, MMIO timer. But in the most of use cases, >> we don't need all the ways to try: >> For example, reading device-tree property will be needed only when >> system boot with device-tree, getting frequency from MMIO timer register >> will beneeded only when we init MMIO timer. >> >> This patch separates paths to determine frequency: >> Separate out device-tree code, keep them in device-tree init function. > > Splitting these out makes sense to me. OK , will do > >> Separate out the MMIO frequency and the sysreg frequency detection call, >> and use the appropriate one for the counter. > >> Signed-off-by: Fu Wei <fu.wei@linaro.org> >> Tested-by: Xiongfeng Wang <wangxiongfeng2@huawei.com> >> --- >> drivers/clocksource/arm_arch_timer.c | 49 +++++++++++++++++++++++------------- >> 1 file changed, 31 insertions(+), 18 deletions(-) >> >> diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c >> index c7b4482..9a1f138 100644 >> --- a/drivers/clocksource/arm_arch_timer.c >> +++ b/drivers/clocksource/arm_arch_timer.c >> @@ -488,27 +488,31 @@ static int arch_timer_starting_cpu(unsigned int cpu) >> return 0; >> } >> >> -static void >> -arch_timer_detect_rate(void __iomem *cntbase, struct device_node *np) >> +static void arch_timer_detect_rate(void) >> { >> - /* Who has more than one independent system counter? */ >> - if (arch_timer_rate) >> - return; >> + /* >> + * Try to get the timer frequency from >> + * cntfrq_el0(system coprocessor register). >> + */ >> + if (!arch_timer_rate) >> + arch_timer_rate = arch_timer_get_cntfrq(); >> + >> + /* Check the timer frequency. */ >> + if (!arch_timer_rate) >> + pr_warn("frequency not available\n"); >> +} >> >> +static void arch_timer_mem_detect_rate(void __iomem *cntbase) >> +{ >> /* >> - * Try to determine the frequency from the device tree or CNTFRQ, >> - * if ACPI is enabled, get the frequency from CNTFRQ ONLY. >> + * Try to determine the frequency from >> + * CNTFRQ in memory-mapped timer. >> */ >> - if (!acpi_disabled || >> - of_property_read_u32(np, "clock-frequency", &arch_timer_rate)) { >> - if (cntbase) >> - arch_timer_rate = readl_relaxed(cntbase + CNTFRQ); >> - else >> - arch_timer_rate = arch_timer_get_cntfrq(); >> - } >> + if (!arch_timer_rate) >> + arch_timer_rate = readl_relaxed(cntbase + CNTFRQ); >> >> /* Check the timer frequency. */ >> - if (arch_timer_rate == 0) >> + if (!arch_timer_rate) I think you mean this one, this is for keeping consistency with arch_timer_detect_rate. >> pr_warn("frequency not available\n"); >> } > > There's a subtle change in behaviour here. Previously for ACPI we'd only > ever use the sysreg CNTFRQ value for arch_timer_rate, whereas now we > might use the MMIO timer rate. Maybe that's not a big deal, but I will > need to think. > > Generally, the logic to determine the rate is fairly gnarly regardless. > > It would be nice if we could split the MMIO and sysreg rates entirely, Yes, I am doing this way, For sysreg rates, static void arch_timer_detect_rate(void) { /* * Try to get the timer frequency from * cntfrq_el0(system coprocessor register). */ if (!arch_timer_rate) arch_timer_rate = arch_timer_get_cntfrq(); /* Check the timer frequency. */ if (!arch_timer_rate) pr_warn("frequency not available\n"); } For MMIO timer, static void arch_timer_mem_detect_rate(void __iomem *cntbase) { /* * Try to determine the frequency from * CNTFRQ in memory-mapped timer. */ if (!arch_timer_rate) arch_timer_rate = readl_relaxed(cntbase + CNTFRQ); /* Check the timer frequency. */ if (!arch_timer_rate) pr_warn("frequency not available\n"); } in arch_time_*_init, only call arch_timer_detect_rate, in arch_timer_mem_init, only call arch_timer_mem_detect_rate. But you are right, this is fairly gnarly regardless. > and kill the implicit relationship between the two, or at least make one > canonical and warn if the two differ. So I think maybe we can do this: static void __arch_timer_determine_rate(u32 rate) { /* Check the timer frequency. */ if (!arch_timer_rate) if (rate) arch_timer_rate = rate; else pr_warn("frequency not available\n"); else if (arch_timer_rate != rate) pr_warn("got different frequency, keep original.\n"); } static void arch_timer_detect_rate(void) { /* * Try to get the timer frequency from * cntfrq_el0(system coprocessor register). */ __arch_timer_determine_rate(arch_timer_get_cntfrq()); } static void arch_timer_mem_detect_rate(void __iomem *cntbase) { /* * Try to get the timer frequency from * CNTFRQ in the MMIO timer. */ __arch_timer_determine_rate(readl_relaxed(cntbase + CNTFRQ)); } any thought? > > Thanks, > Mark. -- Best regards, Fu Wei Software Engineer Red Hat
next prev parent reply other threads:[~2017-01-18 4:27 UTC|newest] Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-12-21 6:45 [PATCH v19 00/15] acpi, clocksource: add GTDT driver and GTDT support in arm_arch_timer fu.wei 2016-12-21 6:45 ` [PATCH v19 01/15] clocksource/drivers/arm_arch_timer: Move enums and defines to header file fu.wei 2016-12-21 6:45 ` [PATCH v19 02/15] clocksource/drivers/arm_arch_timer: Add a new enum for spi type fu.wei 2016-12-21 6:45 ` [PATCH v19 03/15] clocksource/drivers/arm_arch_timer: Improve printk relevant code fu.wei 2016-12-21 6:45 ` [PATCH v19 04/15] clocksource/drivers/arm_arch_timer: rename some enums and defines fu.wei 2016-12-21 6:45 ` [PATCH v19 05/15] clocksource/drivers/arm_arch_timer: rework PPI determination fu.wei 2017-01-16 17:29 ` Mark Rutland 2017-01-17 23:49 ` Fu Wei 2016-12-21 6:45 ` [PATCH v19 06/15] clocksource/drivers/arm_arch_timer: Rework counter frequency detection fu.wei 2017-01-16 17:50 ` Mark Rutland 2017-01-18 4:27 ` Fu Wei [this message] 2016-12-21 6:45 ` [PATCH v19 07/15] clocksource/drivers/arm_arch_timer: Refactor arch_timer_needs_probing fu.wei 2016-12-21 6:45 ` [PATCH v19 08/15] clocksource/drivers/arm_arch_timer: move arch_timer_needs_of_probing into DT init call fu.wei 2016-12-21 6:45 ` [PATCH v19 09/15] clocksource/drivers/arm_arch_timer: Introduce some new structs to prepare for GTDT fu.wei 2016-12-21 6:45 ` [PATCH v19 10/15] clocksource/drivers/arm_arch_timer: Refactor the timer init code " fu.wei 2017-01-16 18:30 ` Mark Rutland 2017-01-17 10:30 ` Fu Wei 2017-01-17 10:39 ` Fu Wei 2017-01-17 12:18 ` Timur Tabi 2017-01-17 12:29 ` Mark Rutland 2017-01-17 13:22 ` Fu Wei 2016-12-21 6:45 ` [PATCH v19 11/15] acpi/arm64: Add GTDT table parse driver fu.wei 2016-12-21 6:46 ` [PATCH v19 12/15] clocksource/drivers/arm_arch_timer: Simplify ACPI support code fu.wei 2016-12-21 6:46 ` [PATCH v19 13/15] acpi/arm64: Add memory-mapped timer support in GTDT driver fu.wei 2016-12-21 6:46 ` [PATCH v19 14/15] clocksource/drivers/arm_arch_timer: Add GTDT support for memory-mapped timer fu.wei 2016-12-21 6:46 ` [PATCH v19 15/15] acpi/arm64: Add SBSA Generic Watchdog support in GTDT driver fu.wei 2017-01-16 6:26 ` [PATCH v19 00/15] acpi, clocksource: add GTDT driver and GTDT support in arm_arch_timer Fu Wei 2017-01-16 12:01 ` Mark Rutland 2017-01-16 12:04 ` Fu Wei 2017-01-16 17:00 ` Mark Rutland 2017-01-17 9:14 ` Fu Wei
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=CADyBb7tMaOJ9D-AYnaNP1OX8kkst7DCkVT0giB2HqdrjSpgX3A@mail.gmail.com \ --to=fu.wei@linaro.org \ --cc=Suravee.Suthikulpanit@amd.com \ --cc=al.stone@linaro.org \ --cc=arnd@arndb.de \ --cc=catalin.marinas@arm.com \ --cc=christoffer.dall@linaro.org \ --cc=cov@codeaurora.org \ --cc=daniel.lezcano@linaro.org \ --cc=graeme.gregory@linaro.org \ --cc=hanjun.guo@linaro.org \ --cc=harba@codeaurora.org \ --cc=jcm@redhat.com \ --cc=julien.grall@arm.com \ --cc=lenb@kernel.org \ --cc=leo.duran@amd.com \ --cc=linaro-acpi@lists.linaro.org \ --cc=linux-acpi@vger.kernel.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-watchdog@vger.kernel.org \ --cc=linux@roeck-us.net \ --cc=lorenzo.pieralisi@arm.com \ --cc=marc.zyngier@arm.com \ --cc=mark.rutland@arm.com \ --cc=rjw@rjwysocki.net \ --cc=rruigrok@codeaurora.org \ --cc=sudeep.holla@arm.com \ --cc=tglx@linutronix.de \ --cc=timur@codeaurora.org \ --cc=tn@semihalf.com \ --cc=wei@redhat.com \ --cc=will.deacon@arm.com \ --cc=wim@iguana.be \ --subject='Re: [PATCH v19 06/15] clocksource/drivers/arm_arch_timer: Rework counter frequency detection.' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).