All of lore.kernel.org
 help / color / mirror / Atom feed
From: Fu Wei <fu.wei-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
To: Daniel Lezcano <daniel.lezcano-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
Cc: "Rafael J. Wysocki" <rjw-LthD3rsA81gm4RdzfppkhA@public.gmane.org>,
	Len Brown <lenb-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	Thomas Gleixner <tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>,
	Marc Zyngier <marc.zyngier-5wv7dgnIgG8@public.gmane.org>,
	Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>,
	Lorenzo Pieralisi
	<lorenzo.pieralisi-5wv7dgnIgG8@public.gmane.org>,
	Sudeep Holla <sudeep.holla-5wv7dgnIgG8@public.gmane.org>,
	Hanjun Guo <hanjun.guo-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
	Linaro ACPI Mailman List
	<linaro-acpi-cunTk1MwBs8s++Sfvej+rw@public.gmane.org>,
	Linux Kernel Mailing List
	<linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	ACPI Devel Maling List
	<linux-acpi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	rruigrok-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org, "Abdulhamid,
	Harb" <harba-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>,
	Christopher Covington
	<cov-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>,
	Timur Tabi <timur-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>,
	G Gregory
	<graeme.gregory-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
	Al Stone <al.stone-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
	Jon Masters <jcm-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
	Wei
Subject: Re: [PATCH v22 02/11] clocksource: arm_arch_timer: separate out device-tree code and remove arch_timer_detect_rate
Date: Wed, 29 Mar 2017 11:41:07 +0800	[thread overview]
Message-ID: <CADyBb7uD1OqpPZf+ADsgbWryCGMGE3GqXOxz_4+1RzC1Pqsccg@mail.gmail.com> (raw)
In-Reply-To: <20170328145814.GE2123@mai>

Hi Daniel,

Great thanks for your review, allow me to answer your question below:

On 28 March 2017 at 22:58, Daniel Lezcano <daniel.lezcano-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> wrote:
> On Wed, Mar 22, 2017 at 12:31:13AM +0800, fu.wei-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org wrote:
>> From: Fu Wei <fu.wei-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
>>
>> Currently, the counter frequency detection call(arch_timer_detect_rate)
>> includes getting the frequency from the device-tree property, the per-cpu
>> arch-timer and the memory-mapped (MMIO) timer interfaces.
>> But reading device-tree property will be needed only when system boot with
>> device-tree, and reading from the per-cpu arch-timer and the memory-mapped
>> (MMIO) timer interfaces will be needed only when the system initializes
>> the relevant timer.
>>
>> This patch separates out device-tree code, keep them in device-tree init
>> function, and removes arch_timer_detect_rate founction, then uses the
>> arch_timer_get_cntfrq and arch_timer_mem_get_cntfrq directly.
>>
>> Signed-off-by: Fu Wei <fu.wei-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
>> ---
>>  drivers/clocksource/arm_arch_timer.c | 58 +++++++++++++++++++-----------------
>>  1 file changed, 30 insertions(+), 28 deletions(-)
>>
>> diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c
>> index 843f923..29ca7d6 100644
>> --- a/drivers/clocksource/arm_arch_timer.c
>> +++ b/drivers/clocksource/arm_arch_timer.c
>> @@ -560,30 +560,6 @@ static u32 arch_timer_mem_get_cntfrq(void __iomem *cntbase)
>>       return readl_relaxed(cntbase + CNTFRQ);
>>  }
>>
>> -static void
>> -arch_timer_detect_rate(void __iomem *cntbase, struct device_node *np)
>> -{
>> -     /* Who has more than one independent system counter? */
>> -     if (arch_timer_rate)
>> -             return;
>> -
>> -     /*
>> -      * Try to determine the frequency from the device tree or CNTFRQ,
>> -      * if ACPI is enabled, get the frequency from CNTFRQ ONLY.
>> -      */
>> -     if (!acpi_disabled ||
>> -         of_property_read_u32(np, "clock-frequency", &arch_timer_rate)) {
>> -             if (cntbase)
>> -                     arch_timer_rate = arch_timer_mem_get_cntfrq(cntbase);
>> -             else
>> -                     arch_timer_rate = arch_timer_get_cntfrq();
>> -     }
>> -
>> -     /* Check the timer frequency. */
>> -     if (arch_timer_rate == 0)
>> -             pr_warn("frequency not available\n");
>> -}
>> -
>>  static void arch_timer_banner(unsigned type)
>>  {
>>       pr_info("%s%s%s timer(s) running at %lu.%02luMHz (%s%s%s).\n",
>> @@ -958,7 +934,17 @@ static int __init arch_timer_of_init(struct device_node *np)
>>       for (i = ARCH_TIMER_PHYS_SECURE_PPI; i < ARCH_TIMER_MAX_TIMER_PPI; i++)
>>               arch_timer_ppi[i] = irq_of_parse_and_map(np, i);
>>
>> -     arch_timer_detect_rate(NULL, np);
>> +     /*
>> +      * Try to determine the frequency from the device tree,
>> +      * if fail, get the frequency from the sysreg CNTFRQ.
>> +      */
>> +     if (!arch_timer_rate &&
>
> This variable is set only if "arm,armv7-timer" and "arm,armv7-timer-mem" are
> declared together in the DT, right ?
>
> Two declarations for a single variable ? Ignore the !arch_timer_rate.

In this function, we try to initialize per-CPU arm arch_timer by DT.
this "!arch_timer_rate" is for testing that if we have got system
counter frequency from the memory-mapped timer. If so, we just skip
getting the frequency from DT or sysreg cntfrq again.
This variable is set only if "arm,armv7-timer-mem" is initialized
earlier than "arm,armv7-timer", in another word, maybe the node of
"arm,armv7-timer-mem" is declared earlier than  "arm,armv7-timer-mem"
one in DT.

we do this check is for keeping the same init logic as before in the
DT, try to avoid any possibility of  breaking devices which boot by
DT.

>
>> +         of_property_read_u32(np, "clock-frequency", &arch_timer_rate))
>> +             arch_timer_rate = arch_timer_get_cntfrq();
>> +     if (!arch_timer_rate) {
>> +             pr_err(FW_BUG "frequency not available.\n");
>> +             return -EINVAL;
>> +     }
>
> Please, clarify this block, the conditions are unclear.

this "!arch_timer_rate" is for verifying that if the system counter
frequency we just got from DT or sysreg cntfrq is valid(non-zero).

So here, you can see I check arch_timer_rate twice, but they are for
different cases.

>
>>
>>       arch_timer_c3stop = !of_property_read_bool(np, "always-on");
>>
>> @@ -1069,7 +1055,19 @@ static int __init arch_timer_mem_init(struct device_node *np)
>>               goto out;
>>       }
>>
>> -     arch_timer_detect_rate(base, np);
>> +     /*
>> +      * Try to determine the frequency from the device tree,
>> +      * if fail, get the frequency from the CNTFRQ reg of MMIO timer.
>> +      */
>> +     if (!arch_timer_rate &&
>> +         of_property_read_u32(np, "clock-frequency", &arch_timer_rate))
>> +             arch_timer_rate = arch_timer_mem_get_cntfrq(base);
>> +     if (!arch_timer_rate) {
>> +             pr_err(FW_BUG "MMIO frequency not available.\n");
>> +             ret = -EINVAL;
>> +             goto out;
>> +     }
>> +
>>       ret = arch_timer_mem_register(base, irq);
>>       if (ret)
>>               goto out;
>> @@ -1130,8 +1128,12 @@ static int __init arch_timer_acpi_init(struct acpi_table_header *table)
>>               map_generic_timer_interrupt(gtdt->non_secure_el2_interrupt,
>>               gtdt->non_secure_el2_flags);
>>
>> -     /* Get the frequency from CNTFRQ */
>> -     arch_timer_detect_rate(NULL, NULL);
>> +     /* Get the frequency from the sysreg CNTFRQ */
>> +     arch_timer_rate = arch_timer_get_cntfrq();
>> +     if (!arch_timer_rate) {
>> +             pr_err(FW_BUG "frequency not available.\n");
>> +             return -EINVAL;
>> +     }
>>
>>       arch_timer_uses_ppi = arch_timer_select_ppi();
>>       if (!arch_timer_ppi[arch_timer_uses_ppi]) {
>> --
>> 2.9.3
>>
>
> --
>
>  <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



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat
--
To unsubscribe from this list: send the line "unsubscribe linux-watchdog" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

WARNING: multiple messages have this Message-ID (diff)
From: Fu Wei <fu.wei@linaro.org>
To: Daniel Lezcano <daniel.lezcano@linaro.org>
Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>,
	Len Brown <lenb@kernel.org>, Thomas Gleixner <tglx@linutronix.de>,
	Marc Zyngier <marc.zyngier@arm.com>,
	Mark Rutland <mark.rutland@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 v22 02/11] clocksource: arm_arch_timer: separate out device-tree code and remove arch_timer_detect_rate
Date: Wed, 29 Mar 2017 11:41:07 +0800	[thread overview]
Message-ID: <CADyBb7uD1OqpPZf+ADsgbWryCGMGE3GqXOxz_4+1RzC1Pqsccg@mail.gmail.com> (raw)
In-Reply-To: <20170328145814.GE2123@mai>

Hi Daniel,

Great thanks for your review, allow me to answer your question below:

On 28 March 2017 at 22:58, Daniel Lezcano <daniel.lezcano@linaro.org> wrote:
> On Wed, Mar 22, 2017 at 12:31:13AM +0800, fu.wei@linaro.org wrote:
>> From: Fu Wei <fu.wei@linaro.org>
>>
>> Currently, the counter frequency detection call(arch_timer_detect_rate)
>> includes getting the frequency from the device-tree property, the per-cpu
>> arch-timer and the memory-mapped (MMIO) timer interfaces.
>> But reading device-tree property will be needed only when system boot with
>> device-tree, and reading from the per-cpu arch-timer and the memory-mapped
>> (MMIO) timer interfaces will be needed only when the system initializes
>> the relevant timer.
>>
>> This patch separates out device-tree code, keep them in device-tree init
>> function, and removes arch_timer_detect_rate founction, then uses the
>> arch_timer_get_cntfrq and arch_timer_mem_get_cntfrq directly.
>>
>> Signed-off-by: Fu Wei <fu.wei@linaro.org>
>> ---
>>  drivers/clocksource/arm_arch_timer.c | 58 +++++++++++++++++++-----------------
>>  1 file changed, 30 insertions(+), 28 deletions(-)
>>
>> diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c
>> index 843f923..29ca7d6 100644
>> --- a/drivers/clocksource/arm_arch_timer.c
>> +++ b/drivers/clocksource/arm_arch_timer.c
>> @@ -560,30 +560,6 @@ static u32 arch_timer_mem_get_cntfrq(void __iomem *cntbase)
>>       return readl_relaxed(cntbase + CNTFRQ);
>>  }
>>
>> -static void
>> -arch_timer_detect_rate(void __iomem *cntbase, struct device_node *np)
>> -{
>> -     /* Who has more than one independent system counter? */
>> -     if (arch_timer_rate)
>> -             return;
>> -
>> -     /*
>> -      * Try to determine the frequency from the device tree or CNTFRQ,
>> -      * if ACPI is enabled, get the frequency from CNTFRQ ONLY.
>> -      */
>> -     if (!acpi_disabled ||
>> -         of_property_read_u32(np, "clock-frequency", &arch_timer_rate)) {
>> -             if (cntbase)
>> -                     arch_timer_rate = arch_timer_mem_get_cntfrq(cntbase);
>> -             else
>> -                     arch_timer_rate = arch_timer_get_cntfrq();
>> -     }
>> -
>> -     /* Check the timer frequency. */
>> -     if (arch_timer_rate == 0)
>> -             pr_warn("frequency not available\n");
>> -}
>> -
>>  static void arch_timer_banner(unsigned type)
>>  {
>>       pr_info("%s%s%s timer(s) running at %lu.%02luMHz (%s%s%s).\n",
>> @@ -958,7 +934,17 @@ static int __init arch_timer_of_init(struct device_node *np)
>>       for (i = ARCH_TIMER_PHYS_SECURE_PPI; i < ARCH_TIMER_MAX_TIMER_PPI; i++)
>>               arch_timer_ppi[i] = irq_of_parse_and_map(np, i);
>>
>> -     arch_timer_detect_rate(NULL, np);
>> +     /*
>> +      * Try to determine the frequency from the device tree,
>> +      * if fail, get the frequency from the sysreg CNTFRQ.
>> +      */
>> +     if (!arch_timer_rate &&
>
> This variable is set only if "arm,armv7-timer" and "arm,armv7-timer-mem" are
> declared together in the DT, right ?
>
> Two declarations for a single variable ? Ignore the !arch_timer_rate.

In this function, we try to initialize per-CPU arm arch_timer by DT.
this "!arch_timer_rate" is for testing that if we have got system
counter frequency from the memory-mapped timer. If so, we just skip
getting the frequency from DT or sysreg cntfrq again.
This variable is set only if "arm,armv7-timer-mem" is initialized
earlier than "arm,armv7-timer", in another word, maybe the node of
"arm,armv7-timer-mem" is declared earlier than  "arm,armv7-timer-mem"
one in DT.

we do this check is for keeping the same init logic as before in the
DT, try to avoid any possibility of  breaking devices which boot by
DT.

>
>> +         of_property_read_u32(np, "clock-frequency", &arch_timer_rate))
>> +             arch_timer_rate = arch_timer_get_cntfrq();
>> +     if (!arch_timer_rate) {
>> +             pr_err(FW_BUG "frequency not available.\n");
>> +             return -EINVAL;
>> +     }
>
> Please, clarify this block, the conditions are unclear.

this "!arch_timer_rate" is for verifying that if the system counter
frequency we just got from DT or sysreg cntfrq is valid(non-zero).

So here, you can see I check arch_timer_rate twice, but they are for
different cases.

>
>>
>>       arch_timer_c3stop = !of_property_read_bool(np, "always-on");
>>
>> @@ -1069,7 +1055,19 @@ static int __init arch_timer_mem_init(struct device_node *np)
>>               goto out;
>>       }
>>
>> -     arch_timer_detect_rate(base, np);
>> +     /*
>> +      * Try to determine the frequency from the device tree,
>> +      * if fail, get the frequency from the CNTFRQ reg of MMIO timer.
>> +      */
>> +     if (!arch_timer_rate &&
>> +         of_property_read_u32(np, "clock-frequency", &arch_timer_rate))
>> +             arch_timer_rate = arch_timer_mem_get_cntfrq(base);
>> +     if (!arch_timer_rate) {
>> +             pr_err(FW_BUG "MMIO frequency not available.\n");
>> +             ret = -EINVAL;
>> +             goto out;
>> +     }
>> +
>>       ret = arch_timer_mem_register(base, irq);
>>       if (ret)
>>               goto out;
>> @@ -1130,8 +1128,12 @@ static int __init arch_timer_acpi_init(struct acpi_table_header *table)
>>               map_generic_timer_interrupt(gtdt->non_secure_el2_interrupt,
>>               gtdt->non_secure_el2_flags);
>>
>> -     /* Get the frequency from CNTFRQ */
>> -     arch_timer_detect_rate(NULL, NULL);
>> +     /* Get the frequency from the sysreg CNTFRQ */
>> +     arch_timer_rate = arch_timer_get_cntfrq();
>> +     if (!arch_timer_rate) {
>> +             pr_err(FW_BUG "frequency not available.\n");
>> +             return -EINVAL;
>> +     }
>>
>>       arch_timer_uses_ppi = arch_timer_select_ppi();
>>       if (!arch_timer_ppi[arch_timer_uses_ppi]) {
>> --
>> 2.9.3
>>
>
> --
>
>  <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



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat

WARNING: multiple messages have this Message-ID (diff)
From: fu.wei@linaro.org (Fu Wei)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v22 02/11] clocksource: arm_arch_timer: separate out device-tree code and remove arch_timer_detect_rate
Date: Wed, 29 Mar 2017 11:41:07 +0800	[thread overview]
Message-ID: <CADyBb7uD1OqpPZf+ADsgbWryCGMGE3GqXOxz_4+1RzC1Pqsccg@mail.gmail.com> (raw)
In-Reply-To: <20170328145814.GE2123@mai>

Hi Daniel,

Great thanks for your review, allow me to answer your question below:

On 28 March 2017 at 22:58, Daniel Lezcano <daniel.lezcano@linaro.org> wrote:
> On Wed, Mar 22, 2017 at 12:31:13AM +0800, fu.wei at linaro.org wrote:
>> From: Fu Wei <fu.wei@linaro.org>
>>
>> Currently, the counter frequency detection call(arch_timer_detect_rate)
>> includes getting the frequency from the device-tree property, the per-cpu
>> arch-timer and the memory-mapped (MMIO) timer interfaces.
>> But reading device-tree property will be needed only when system boot with
>> device-tree, and reading from the per-cpu arch-timer and the memory-mapped
>> (MMIO) timer interfaces will be needed only when the system initializes
>> the relevant timer.
>>
>> This patch separates out device-tree code, keep them in device-tree init
>> function, and removes arch_timer_detect_rate founction, then uses the
>> arch_timer_get_cntfrq and arch_timer_mem_get_cntfrq directly.
>>
>> Signed-off-by: Fu Wei <fu.wei@linaro.org>
>> ---
>>  drivers/clocksource/arm_arch_timer.c | 58 +++++++++++++++++++-----------------
>>  1 file changed, 30 insertions(+), 28 deletions(-)
>>
>> diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c
>> index 843f923..29ca7d6 100644
>> --- a/drivers/clocksource/arm_arch_timer.c
>> +++ b/drivers/clocksource/arm_arch_timer.c
>> @@ -560,30 +560,6 @@ static u32 arch_timer_mem_get_cntfrq(void __iomem *cntbase)
>>       return readl_relaxed(cntbase + CNTFRQ);
>>  }
>>
>> -static void
>> -arch_timer_detect_rate(void __iomem *cntbase, struct device_node *np)
>> -{
>> -     /* Who has more than one independent system counter? */
>> -     if (arch_timer_rate)
>> -             return;
>> -
>> -     /*
>> -      * Try to determine the frequency from the device tree or CNTFRQ,
>> -      * if ACPI is enabled, get the frequency from CNTFRQ ONLY.
>> -      */
>> -     if (!acpi_disabled ||
>> -         of_property_read_u32(np, "clock-frequency", &arch_timer_rate)) {
>> -             if (cntbase)
>> -                     arch_timer_rate = arch_timer_mem_get_cntfrq(cntbase);
>> -             else
>> -                     arch_timer_rate = arch_timer_get_cntfrq();
>> -     }
>> -
>> -     /* Check the timer frequency. */
>> -     if (arch_timer_rate == 0)
>> -             pr_warn("frequency not available\n");
>> -}
>> -
>>  static void arch_timer_banner(unsigned type)
>>  {
>>       pr_info("%s%s%s timer(s) running at %lu.%02luMHz (%s%s%s).\n",
>> @@ -958,7 +934,17 @@ static int __init arch_timer_of_init(struct device_node *np)
>>       for (i = ARCH_TIMER_PHYS_SECURE_PPI; i < ARCH_TIMER_MAX_TIMER_PPI; i++)
>>               arch_timer_ppi[i] = irq_of_parse_and_map(np, i);
>>
>> -     arch_timer_detect_rate(NULL, np);
>> +     /*
>> +      * Try to determine the frequency from the device tree,
>> +      * if fail, get the frequency from the sysreg CNTFRQ.
>> +      */
>> +     if (!arch_timer_rate &&
>
> This variable is set only if "arm,armv7-timer" and "arm,armv7-timer-mem" are
> declared together in the DT, right ?
>
> Two declarations for a single variable ? Ignore the !arch_timer_rate.

In this function, we try to initialize per-CPU arm arch_timer by DT.
this "!arch_timer_rate" is for testing that if we have got system
counter frequency from the memory-mapped timer. If so, we just skip
getting the frequency from DT or sysreg cntfrq again.
This variable is set only if "arm,armv7-timer-mem" is initialized
earlier than "arm,armv7-timer", in another word, maybe the node of
"arm,armv7-timer-mem" is declared earlier than  "arm,armv7-timer-mem"
one in DT.

we do this check is for keeping the same init logic as before in the
DT, try to avoid any possibility of  breaking devices which boot by
DT.

>
>> +         of_property_read_u32(np, "clock-frequency", &arch_timer_rate))
>> +             arch_timer_rate = arch_timer_get_cntfrq();
>> +     if (!arch_timer_rate) {
>> +             pr_err(FW_BUG "frequency not available.\n");
>> +             return -EINVAL;
>> +     }
>
> Please, clarify this block, the conditions are unclear.

this "!arch_timer_rate" is for verifying that if the system counter
frequency we just got from DT or sysreg cntfrq is valid(non-zero).

So here, you can see I check arch_timer_rate twice, but they are for
different cases.

>
>>
>>       arch_timer_c3stop = !of_property_read_bool(np, "always-on");
>>
>> @@ -1069,7 +1055,19 @@ static int __init arch_timer_mem_init(struct device_node *np)
>>               goto out;
>>       }
>>
>> -     arch_timer_detect_rate(base, np);
>> +     /*
>> +      * Try to determine the frequency from the device tree,
>> +      * if fail, get the frequency from the CNTFRQ reg of MMIO timer.
>> +      */
>> +     if (!arch_timer_rate &&
>> +         of_property_read_u32(np, "clock-frequency", &arch_timer_rate))
>> +             arch_timer_rate = arch_timer_mem_get_cntfrq(base);
>> +     if (!arch_timer_rate) {
>> +             pr_err(FW_BUG "MMIO frequency not available.\n");
>> +             ret = -EINVAL;
>> +             goto out;
>> +     }
>> +
>>       ret = arch_timer_mem_register(base, irq);
>>       if (ret)
>>               goto out;
>> @@ -1130,8 +1128,12 @@ static int __init arch_timer_acpi_init(struct acpi_table_header *table)
>>               map_generic_timer_interrupt(gtdt->non_secure_el2_interrupt,
>>               gtdt->non_secure_el2_flags);
>>
>> -     /* Get the frequency from CNTFRQ */
>> -     arch_timer_detect_rate(NULL, NULL);
>> +     /* Get the frequency from the sysreg CNTFRQ */
>> +     arch_timer_rate = arch_timer_get_cntfrq();
>> +     if (!arch_timer_rate) {
>> +             pr_err(FW_BUG "frequency not available.\n");
>> +             return -EINVAL;
>> +     }
>>
>>       arch_timer_uses_ppi = arch_timer_select_ppi();
>>       if (!arch_timer_ppi[arch_timer_uses_ppi]) {
>> --
>> 2.9.3
>>
>
> --
>
>  <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



-- 
Best regards,

Fu Wei
Software Engineer
Red Hat

  reply	other threads:[~2017-03-29  3:41 UTC|newest]

Thread overview: 113+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-21 16:31 [PATCH v22 00/11] acpi, clocksource: add GTDT driver and GTDT support in arm_arch_timer fu.wei-QSEj5FYQhm4dnm+yROfE0A
2017-03-21 16:31 ` fu.wei at linaro.org
2017-03-21 16:31 ` fu.wei
2017-03-21 16:31 ` [PATCH v22 01/11] clocksource: arm_arch_timer: introduce a wrapper function to get the frequency from mmio fu.wei
2017-03-21 16:31   ` fu.wei at linaro.org
2017-03-21 16:31 ` [PATCH v22 02/11] clocksource: arm_arch_timer: separate out device-tree code and remove arch_timer_detect_rate fu.wei
2017-03-21 16:31   ` fu.wei at linaro.org
2017-03-28 14:58   ` Daniel Lezcano
2017-03-28 14:58     ` Daniel Lezcano
2017-03-28 14:58     ` Daniel Lezcano
2017-03-29  3:41     ` Fu Wei [this message]
2017-03-29  3:41       ` Fu Wei
2017-03-29  3:41       ` Fu Wei
2017-03-29  5:11       ` Fu Wei
2017-03-29  5:11         ` Fu Wei
2017-03-29  5:11         ` Fu Wei
     [not found]         ` <CADyBb7tzJAuvG73v6ZoBVO4ehCC3RMsc1pq5gKF2eQ94j6GXrg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-03-29 14:41           ` Daniel Lezcano
2017-03-29 14:41             ` Daniel Lezcano
2017-03-29 14:41             ` Daniel Lezcano
2017-03-29 15:01             ` Fu Wei
2017-03-29 15:01               ` Fu Wei
2017-03-29 15:01               ` Fu Wei
2017-03-21 16:31 ` [PATCH v22 03/11] clocksource: arm_arch_timer: refactor arch_timer_needs_probing fu.wei
2017-03-21 16:31   ` fu.wei at linaro.org
2017-03-28 15:02   ` Daniel Lezcano
2017-03-28 15:02     ` Daniel Lezcano
2017-03-28 15:02     ` Daniel Lezcano
2017-03-29 15:24     ` Mark Rutland
2017-03-29 15:24       ` Mark Rutland
2017-03-29 15:32       ` Daniel Lezcano
2017-03-29 15:32         ` Daniel Lezcano
2017-03-29 15:32         ` Daniel Lezcano
2017-03-21 16:31 ` [PATCH v22 05/11] clocksource: arm_arch_timer: introduce some new structs to prepare for GTDT fu.wei
2017-03-21 16:31   ` fu.wei at linaro.org
     [not found] ` <20170321163122.9183-1-fu.wei-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2017-03-21 16:31   ` [PATCH v22 04/11] clocksource: arm_arch_timer: move arch_timer_needs_of_probing into DT init call fu.wei-QSEj5FYQhm4dnm+yROfE0A
2017-03-21 16:31     ` fu.wei at linaro.org
2017-03-21 16:31     ` fu.wei
2017-03-21 16:31   ` [PATCH v22 06/11] clocksource: arm_arch_timer: refactor MMIO timer probing fu.wei-QSEj5FYQhm4dnm+yROfE0A
2017-03-21 16:31     ` fu.wei at linaro.org
2017-03-21 16:31     ` fu.wei
2017-03-21 16:31 ` [PATCH v22 07/11] acpi/arm64: Add GTDT table parse driver fu.wei
2017-03-21 16:31   ` fu.wei at linaro.org
2017-03-28 11:35   ` Lorenzo Pieralisi
2017-03-28 11:35     ` Lorenzo Pieralisi
2017-03-29  9:48     ` Fu Wei
2017-03-29  9:48       ` Fu Wei
2017-03-29  9:48       ` Fu Wei
2017-03-29 10:21       ` Lorenzo Pieralisi
2017-03-29 10:21         ` Lorenzo Pieralisi
2017-03-29 10:21         ` Lorenzo Pieralisi
2017-03-29 10:48         ` Fu Wei
2017-03-29 10:48           ` Fu Wei
2017-03-29 10:48           ` Fu Wei
2017-03-29 11:33           ` Lorenzo Pieralisi
2017-03-29 11:33             ` Lorenzo Pieralisi
2017-03-29 11:33             ` Lorenzo Pieralisi
2017-03-29 13:42             ` Fu Wei
2017-03-29 13:42               ` Fu Wei
2017-03-29 13:42               ` Fu Wei
     [not found]               ` <CADyBb7snT+fvZYDyjUW7ZCVLX-ha4VXYBhfZsi8a3wOeYtdHkQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-03-29 16:02                 ` Lorenzo Pieralisi
2017-03-29 16:02                   ` Lorenzo Pieralisi
2017-03-29 16:02                   ` Lorenzo Pieralisi
2017-03-29 14:29     ` Fu Wei
2017-03-29 14:29       ` Fu Wei
2017-03-29 14:29       ` Fu Wei
2017-03-29 14:31       ` Fu Wei
2017-03-29 14:31         ` Fu Wei
2017-03-29 14:31         ` Fu Wei
2017-03-29 15:19         ` Lorenzo Pieralisi
2017-03-29 15:19           ` Lorenzo Pieralisi
2017-03-29 15:19           ` Lorenzo Pieralisi
2017-03-21 16:31 ` [PATCH v22 08/11] clocksource: arm_arch_timer: simplify ACPI support code fu.wei
2017-03-21 16:31   ` fu.wei at linaro.org
2017-03-21 16:31   ` fu.wei
2017-03-21 16:31 ` [PATCH v22 09/11] acpi/arm64: Add memory-mapped timer support in GTDT driver fu.wei
2017-03-21 16:31   ` fu.wei at linaro.org
     [not found]   ` <20170321163122.9183-10-fu.wei-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2017-03-29 16:47     ` Lorenzo Pieralisi
2017-03-29 16:47       ` Lorenzo Pieralisi
2017-03-29 16:47       ` Lorenzo Pieralisi
2017-03-30  7:54       ` Fu Wei
2017-03-30  7:54         ` Fu Wei
2017-03-30  7:54         ` Fu Wei
2017-03-21 16:31 ` [PATCH v22 10/11] clocksource: arm_arch_timer: add GTDT support for memory-mapped timer fu.wei
2017-03-21 16:31   ` fu.wei at linaro.org
2017-03-21 16:31 ` [PATCH v22 11/11] acpi/arm64: Add SBSA Generic Watchdog support in GTDT driver fu.wei
2017-03-21 16:31   ` fu.wei at linaro.org
2017-03-21 16:31   ` fu.wei
2017-03-28 15:41   ` Lorenzo Pieralisi
2017-03-28 15:41     ` Lorenzo Pieralisi
2017-03-28 15:41     ` Lorenzo Pieralisi
2017-03-31  8:10     ` Fu Wei
2017-03-31  8:10       ` Fu Wei
2017-03-31  8:10       ` Fu Wei
2017-03-31 11:54       ` Lorenzo Pieralisi
2017-03-31 11:54         ` Lorenzo Pieralisi
2017-03-31 11:54         ` Lorenzo Pieralisi
2017-03-28 11:32 ` [PATCH v22 00/11] acpi, clocksource: add GTDT driver and GTDT support in arm_arch_timer Jon Masters
2017-03-28 11:32   ` Jon Masters
2017-03-28 12:34   ` Fu Wei
2017-03-28 12:34     ` Fu Wei
2017-03-28 12:34     ` Fu Wei
2017-03-28 13:05     ` Mark Rutland
2017-03-28 13:05       ` Mark Rutland
2017-03-28 13:05       ` Mark Rutland
2017-03-28 14:29       ` Fu Wei
2017-03-28 14:29         ` Fu Wei
2017-03-28 14:29         ` Fu Wei
2017-03-28 14:53         ` Mark Rutland
2017-03-28 14:53           ` Mark Rutland
2017-03-28 14:53           ` Mark Rutland
2017-03-31 17:55           ` Fu Wei
2017-03-31 17:55             ` Fu Wei
2017-03-31 17:55             ` 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=CADyBb7uD1OqpPZf+ADsgbWryCGMGE3GqXOxz_4+1RzC1Pqsccg@mail.gmail.com \
    --to=fu.wei-qsej5fyqhm4dnm+yrofe0a@public.gmane.org \
    --cc=al.stone-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
    --cc=cov-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org \
    --cc=daniel.lezcano-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
    --cc=graeme.gregory-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
    --cc=hanjun.guo-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
    --cc=harba-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org \
    --cc=jcm-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=lenb-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=linaro-acpi-cunTk1MwBs8s++Sfvej+rw@public.gmane.org \
    --cc=linux-acpi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=lorenzo.pieralisi-5wv7dgnIgG8@public.gmane.org \
    --cc=marc.zyngier-5wv7dgnIgG8@public.gmane.org \
    --cc=mark.rutland-5wv7dgnIgG8@public.gmane.org \
    --cc=rjw-LthD3rsA81gm4RdzfppkhA@public.gmane.org \
    --cc=rruigrok-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org \
    --cc=sudeep.holla-5wv7dgnIgG8@public.gmane.org \
    --cc=tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org \
    --cc=timur-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org \
    /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
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.