From patchwork Fri Jan 17 12:25:13 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hanjun Guo X-Patchwork-Id: 3504311 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 67E0A9F169 for ; Fri, 17 Jan 2014 13:01:00 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id A5EFF20131 for ; Fri, 17 Jan 2014 13:00:55 +0000 (UTC) Received: from casper.infradead.org (casper.infradead.org [85.118.1.10]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 5BA5A2012F for ; Fri, 17 Jan 2014 13:00:54 +0000 (UTC) Received: from merlin.infradead.org ([2001:4978:20e::2]) by casper.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1W492W-0004Hj-L5; Fri, 17 Jan 2014 13:00:48 +0000 Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1W492U-0008In-80; Fri, 17 Jan 2014 13:00:46 +0000 Received: from mail-pb0-f47.google.com ([209.85.160.47]) by merlin.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1W492R-0008Hr-1A for linux-arm-kernel@lists.infradead.org; Fri, 17 Jan 2014 13:00:43 +0000 Received: by mail-pb0-f47.google.com with SMTP id um1so4067353pbc.34 for ; Fri, 17 Jan 2014 05:00:20 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=FGSH+MSIzcG3HZOOUR1i/aTAqKrVo+9WYUG42OjAeNc=; b=a8/6wQqNMD0fyfGF1/PDOBlGnhCBW3xp/mr2694HC5UHNeT3YDJ/WGMhA0EGb9rP1l 5ncsznaq+V70z0SGUH6d0LSYPfAXl32HPAGfMPeRA7dIFM+Egps2B5nfZxB643IOeGSP d053Vt2jXxpqH87Wh3lkPxCJaRIVzYVirWbcxmmW0YS+3E6V+Kfae/G3cktyTHV0i7oB ju7VDRv2EOZZDg+7LA2HmbfOFgSYiHpIuQL/041Q6knPa97nPkdKy8QBG/vHZw6igo0E f4F3vf20Lzg8LXpQi4i6y7Kz7wqzHkOJgtk2gSruHHXZbwsiWsiUOlGUqN5p62RBPll+ i84Q== X-Gm-Message-State: ALoCoQnZeYfLE32tGv4wUtiv1evQ/Sb7KxdSRkayCqF4aYtRPuauUnLXgcDlJEQElKvvyAB7TnIN X-Received: by 10.68.242.68 with SMTP id wo4mr2059612pbc.32.1389963620347; Fri, 17 Jan 2014 05:00:20 -0800 (PST) Received: from localhost ([218.17.215.175]) by mx.google.com with ESMTPSA id kk1sm22672700pbd.22.2014.01.17.04.57.19 for (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Fri, 17 Jan 2014 05:00:19 -0800 (PST) From: Hanjun Guo To: "Rafael J. Wysocki" , Catalin Marinas , Will Deacon , Russell King - ARM Linux Subject: [PATCH 19/20] clocksource / ACPI: Introduce clocksource_acpi_init() using CLOCKSOURCE_ACPI_DECLARE Date: Fri, 17 Jan 2014 20:25:13 +0800 Message-Id: <1389961514-13562-20-git-send-email-hanjun.guo@linaro.org> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1389961514-13562-1-git-send-email-hanjun.guo@linaro.org> References: <1389961514-13562-1-git-send-email-hanjun.guo@linaro.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20140117_080043_157976_A1A28035 X-CRM114-Status: GOOD ( 18.12 ) X-Spam-Score: -1.8 (-) Cc: Mark Rutland , Matthew Garrett , linaro-kernel@lists.linaro.org, Arnd Bergmann , Rob Herring , Linus Walleij , Olof Johansson , linux-kernel@vger.kernel.org, linaro-acpi@lists.linaro.org, linux-acpi@vger.kernel.org, Amit Daniel Kachhap , Hanjun Guo , patches@linaro.org, Grant Likely , Bjorn Helgaas , linux-arm-kernel@lists.infradead.org, Charles.Garcia-Tobin@arm.com X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-3.7 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, RCVD_IN_SORBS_WEB, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP acpi_table_parse() will find table with table id and run handler on it. So we use CLOCKSOURCE_ACPI_DECLARE to decalare timer tables and glue its handler, then initialize them in clocksource_acpi_init(). Signed-off-by: Hanjun Guo Signed-off-by: Amit Daniel Kachhap --- drivers/clocksource/Makefile | 1 + drivers/clocksource/arm_arch_timer.c | 1 + drivers/clocksource/clksrc-acpi.c | 36 ++++++++++++++++++++++++++++++++++ include/linux/clocksource.h | 3 +++ 4 files changed, 41 insertions(+) create mode 100644 drivers/clocksource/clksrc-acpi.c diff --git a/drivers/clocksource/Makefile b/drivers/clocksource/Makefile index 33621ef..2304c99 100644 --- a/drivers/clocksource/Makefile +++ b/drivers/clocksource/Makefile @@ -1,4 +1,5 @@ obj-$(CONFIG_CLKSRC_OF) += clksrc-of.o +obj-$(CONFIG_ACPI) += clksrc-acpi.o obj-$(CONFIG_ATMEL_TCB_CLKSRC) += tcb_clksrc.o obj-$(CONFIG_X86_CYCLONE_TIMER) += cyclone.o obj-$(CONFIG_X86_PM_TIMER) += acpi_pm.o diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c index 1fa5f67..6489037 100644 --- a/drivers/clocksource/arm_arch_timer.c +++ b/drivers/clocksource/arm_arch_timer.c @@ -738,6 +738,7 @@ void __init arch_timer_acpi_init(struct acpi_table_header *table) arch_timers_present |= ARCH_CP15_TIMER; arch_timer_init(); } +CLOCKSOURCE_ACPI_DECLARE(armv8_arch_timer, "GTDT", arch_timer_acpi_init); #endif static void __init arch_timer_mem_init(struct device_node *np) diff --git a/drivers/clocksource/clksrc-acpi.c b/drivers/clocksource/clksrc-acpi.c new file mode 100644 index 0000000..41efc83 --- /dev/null +++ b/drivers/clocksource/clksrc-acpi.c @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2014, Hanjun Guo + * Copyright (c) 2014, Amit Daniel Kachhap + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include +#include +#include + +extern struct acpi_device_id __clksrc_acpi_table[]; + +static const struct acpi_device_id __clksrc_acpi_table_sentinel + __used __section(__clksrc_acpi_table_end); + +void __init clocksource_acpi_init(void) +{ + const struct acpi_device_id *id; + acpi_tbl_table_handler init_func; + + for (id = __clksrc_acpi_table; id->id[0]; id++) { + init_func = (acpi_tbl_table_handler)id->driver_data; + acpi_table_parse(id->id, init_func); + } +} diff --git a/include/linux/clocksource.h b/include/linux/clocksource.h index 1d500cf..9bee8b3 100644 --- a/include/linux/clocksource.h +++ b/include/linux/clocksource.h @@ -361,12 +361,15 @@ static inline void clocksource_of_init(void) {} #endif #ifdef CONFIG_ACPI +extern void clocksource_acpi_init(void); + #define CLOCKSOURCE_ACPI_DECLARE(name, compat, fn) \ static const struct acpi_device_id __clksrc_acpi_table_##name \ __used __section(__clksrc_acpi_table) \ = { .id = compat, \ .driver_data = (kernel_ulong_t)fn } #else +static inline void clocksource_acpi_init(void) { return; } #define CLOCKSOURCE_ACPI_DECLARE(name, compat, fn) #endif