From: guohanjun@huawei.com (Hanjun Guo)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v3 5/6] arm64: arch_timer: apci: Introduce a generic aquirk framework for erratum
Date: Mon, 14 Nov 2016 16:12:16 +0800 [thread overview]
Message-ID: <582971E0.4070403@huawei.com> (raw)
In-Reply-To: <1478264794-14652-5-git-send-email-dingtianhong@huawei.com>
On 2016/11/4 21:06, Ding Tianhong wrote:
> From: Hanjun Guo <hanjun.guo@linaro.org>
>
> Introduce a general quirk framework for each timer erratum in ACPI,
> which use the oem information in GTDT table for platform specific erratums.
> The struct gtdt_arch_timer_fixup is introduced to record the oem
> information to match the quirk and handle the erratum.
>
> v3: Introduce a generic aquick framework for erratum in ACPI mode.
>
> Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
> Signed-off-by: Ding Tianhong <dingtianhong@huawei.com>
> ---
> drivers/clocksource/arm_arch_timer.c | 37 ++++++++++++++++++++++++++++++++++++
> 1 file changed, 37 insertions(+)
>
> diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c
> index 3d59af1..9bc93e5 100644
> --- a/drivers/clocksource/arm_arch_timer.c
> +++ b/drivers/clocksource/arm_arch_timer.c
> @@ -1068,6 +1068,40 @@ CLOCKSOURCE_OF_DECLARE(armv7_arch_timer_mem, "arm,armv7-timer-mem",
> arch_timer_mem_init);
>
> #ifdef CONFIG_ACPI
> +struct gtdt_arch_timer_fixup {
> + char oem_id[ACPI_OEM_ID_SIZE];
> + char oem_table_id[ACPI_OEM_TABLE_ID_SIZE];
> + u32 oem_revision;
> +
> + /* quirk handler for arch timer erratum */
> + void (*handler)(u32 erratum);
> + u32 erratum;
Hmm, I think we just use
void *context;
and we convert it in the platform specific handler, then this struct
can be reused for other type of quirks.
> +};
> +
> +/* note: this needs to be updated according to the doc of OEM ID
> + * and TABLE ID for different board.
> + */
> +struct gtdt_arch_timer_fixup arch_timer_quirks[] __initdata = {
> +};
> +
> +void __init arch_timer_acpi_quirks_handler(char *oem_id,
> + char *oem_table_id,
> + u32 oem_revision)
> +{
> + struct gtdt_arch_timer_fixup *quirks = arch_timer_quirks;
> + int i;
> +
> + for (i = 0; i < ARRAY_SIZE(arch_timer_quirks); i++, quirks++) {
> + if (!memcmp(quirks->oem_id, oem_id, ACPI_OEM_ID_SIZE) &&
> + !memcmp(quirks->oem_table_id, oem_table_id, ACPI_OEM_TABLE_ID_SIZE) &&
> + quirks->oem_revision == oem_revision) {
> + if (quirks->handler && quirks->erratum)
> + quirks->handler(quirks->erratum);
> + break;
we can't just break because we have multi quirks for different handlers.
Thanks
Hanjun
WARNING: multiple messages have this Message-ID (diff)
From: Hanjun Guo <guohanjun@huawei.com>
To: Ding Tianhong <dingtianhong@huawei.com>,
catalin.marinas@arm.com, will.deacon@arm.com,
marc.zyngier@arm.com, mark.rutland@arm.com, oss@buserror.net,
devicetree@vger.kernel.org, shawnguo@kernel.org,
stuart.yoder@nxp.com, linux-arm-kernel@lists.infradead.org,
linuxarm@huawei.com, hanjun.guo@linaro.org
Subject: Re: [PATCH v3 5/6] arm64: arch_timer: apci: Introduce a generic aquirk framework for erratum
Date: Mon, 14 Nov 2016 16:12:16 +0800 [thread overview]
Message-ID: <582971E0.4070403@huawei.com> (raw)
In-Reply-To: <1478264794-14652-5-git-send-email-dingtianhong@huawei.com>
On 2016/11/4 21:06, Ding Tianhong wrote:
> From: Hanjun Guo <hanjun.guo@linaro.org>
>
> Introduce a general quirk framework for each timer erratum in ACPI,
> which use the oem information in GTDT table for platform specific erratums.
> The struct gtdt_arch_timer_fixup is introduced to record the oem
> information to match the quirk and handle the erratum.
>
> v3: Introduce a generic aquick framework for erratum in ACPI mode.
>
> Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
> Signed-off-by: Ding Tianhong <dingtianhong@huawei.com>
> ---
> drivers/clocksource/arm_arch_timer.c | 37 ++++++++++++++++++++++++++++++++++++
> 1 file changed, 37 insertions(+)
>
> diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c
> index 3d59af1..9bc93e5 100644
> --- a/drivers/clocksource/arm_arch_timer.c
> +++ b/drivers/clocksource/arm_arch_timer.c
> @@ -1068,6 +1068,40 @@ CLOCKSOURCE_OF_DECLARE(armv7_arch_timer_mem, "arm,armv7-timer-mem",
> arch_timer_mem_init);
>
> #ifdef CONFIG_ACPI
> +struct gtdt_arch_timer_fixup {
> + char oem_id[ACPI_OEM_ID_SIZE];
> + char oem_table_id[ACPI_OEM_TABLE_ID_SIZE];
> + u32 oem_revision;
> +
> + /* quirk handler for arch timer erratum */
> + void (*handler)(u32 erratum);
> + u32 erratum;
Hmm, I think we just use
void *context;
and we convert it in the platform specific handler, then this struct
can be reused for other type of quirks.
> +};
> +
> +/* note: this needs to be updated according to the doc of OEM ID
> + * and TABLE ID for different board.
> + */
> +struct gtdt_arch_timer_fixup arch_timer_quirks[] __initdata = {
> +};
> +
> +void __init arch_timer_acpi_quirks_handler(char *oem_id,
> + char *oem_table_id,
> + u32 oem_revision)
> +{
> + struct gtdt_arch_timer_fixup *quirks = arch_timer_quirks;
> + int i;
> +
> + for (i = 0; i < ARRAY_SIZE(arch_timer_quirks); i++, quirks++) {
> + if (!memcmp(quirks->oem_id, oem_id, ACPI_OEM_ID_SIZE) &&
> + !memcmp(quirks->oem_table_id, oem_table_id, ACPI_OEM_TABLE_ID_SIZE) &&
> + quirks->oem_revision == oem_revision) {
> + if (quirks->handler && quirks->erratum)
> + quirks->handler(quirks->erratum);
> + break;
we can't just break because we have multi quirks for different handlers.
Thanks
Hanjun
next prev parent reply other threads:[~2016-11-14 8:12 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-04 13:06 [PATCH v3 1/6] arm64: arch_timer: Add device tree binding for hisilicon-161601 erratum Ding Tianhong
2016-11-04 13:06 ` Ding Tianhong
2016-11-04 13:06 ` [PATCH v3 2/6] arm64: arch_timer: Introduce a generic erratum handing mechanism for fsl-a008585 Ding Tianhong
2016-11-04 13:06 ` Ding Tianhong
2016-11-04 18:20 ` Scott Wood
2016-11-04 18:20 ` Scott Wood
2016-11-04 18:55 ` Will Deacon
2016-11-04 18:55 ` Will Deacon
2016-11-04 13:06 ` [PATCH v3 3/6] arm64: arch_timer: Work around Erratum Hisilicon-161601 Ding Tianhong
2016-11-04 13:06 ` Ding Tianhong
2016-11-04 13:06 ` [PATCH v3 4/6] arm64: arch timer: Add timer erratum property for Hip05-d02 and Hip06-d03 Ding Tianhong
2016-11-04 13:06 ` Ding Tianhong
2016-11-04 13:06 ` [PATCH v3 5/6] arm64: arch_timer: apci: Introduce a generic aquirk framework for erratum Ding Tianhong
2016-11-04 13:06 ` Ding Tianhong
2016-11-14 8:12 ` Hanjun Guo [this message]
2016-11-14 8:12 ` Hanjun Guo
2016-11-14 11:15 ` Ding Tianhong
2016-11-14 11:15 ` Ding Tianhong
2016-11-04 13:06 ` [PATCH v3 6/6] arm64: arch_timer: acpi: add hisi timer errata data Ding Tianhong
2016-11-04 13:06 ` Ding Tianhong
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=582971E0.4070403@huawei.com \
--to=guohanjun@huawei.com \
--cc=linux-arm-kernel@lists.infradead.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.