From patchwork Wed Jun 13 11:32:29 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "\(Exiting\) Baolin Wang" X-Patchwork-Id: 138432 Delivered-To: patch@linaro.org Received: by 2002:a2e:970d:0:0:0:0:0 with SMTP id r13-v6csp597211lji; Wed, 13 Jun 2018 04:33:20 -0700 (PDT) X-Google-Smtp-Source: ADUXVKLabxoZQcpBsqdChH8hv5Ns44Y0KS+NiK7m2wjEOAV/WiZDhN+d+oQWp3ZyWqtrfIxNJdYG X-Received: by 2002:a65:6346:: with SMTP id p6-v6mr3730729pgv.281.1528889600348; Wed, 13 Jun 2018 04:33:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1528889600; cv=none; d=google.com; s=arc-20160816; b=OTzn/uLFUwzYF3VFH5jXk63vYiU9Kf+PLy82vyQ/4vtv0EyXnlL8vRK74STcKFviIA aFofgF/hTRrFdiYTTEqagAVa//E1p6eUSpp5yZ0KMWf9os6cdDVIavZo/u2r8jJJhDdn /86S9GA4QoVmea9H5ZUsh9wpASJwdR//kyPzFnjgwFEQvOR8SDKCF5GRXgdVOnL1Q1H7 5llkUynalNtAehv0gVHvstiQ3GIKHXS6OPChbb+J7q8TrGz1Cb7PfBTeQ4OZCCEKvvER HnOt9bY7JTZVocOSodPNHvsDjHDF/3I42WuhCAzTiqpgiL3aY0HdTXZaXOAa3ZLN2CWN q7nw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=rbU5Kc+UMHiFTPaKwxrTBrJN9tVZvI+zOz094tMtLDw=; b=oBAPSfi29RBTPBCwapL8F0GAoQnstlOU6oG3TgI/4ciZTde6jH7t9VY92hj5N/XZij WemJsBUFJTIGzKbMgJCuyF7WxCwoJUdRwvRQRc4FwophTC8NMTC+w8aB1RUihatAm0Fw w+Mfztfkk4zgMhYJpaLPeBhDHMMuKOoROAIXfXXfudOVuAas15pRINMV7N/cTCv5HlvQ siV6wqEq/DTiUDQMo7K3ftONcs1jTjyLm5oxEGt0d6wi7ytqlT1X1M9ZX2VHer+qD2Ed 5B5nN7DKH8csGgcbcVZs2WdMKtoYCypoKIqjg4UR7aR1eVX5ULj26MpPAddTnsrtwUQ7 vEbA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=DUOpp5nA; spf=pass (google.com: best guess record for domain of linux-omap-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-omap-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id c11-v6si2211148pgt.686.2018.06.13.04.33.20; Wed, 13 Jun 2018 04:33:20 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-omap-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=DUOpp5nA; spf=pass (google.com: best guess record for domain of linux-omap-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-omap-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935404AbeFMLdS (ORCPT + 5 others); Wed, 13 Jun 2018 07:33:18 -0400 Received: from mail-pl0-f65.google.com ([209.85.160.65]:46568 "EHLO mail-pl0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S935374AbeFMLdP (ORCPT ); Wed, 13 Jun 2018 07:33:15 -0400 Received: by mail-pl0-f65.google.com with SMTP id 30-v6so1371329pld.13 for ; Wed, 13 Jun 2018 04:33:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=ChAuc8lHvl/YQvwortB1kFZ67NvvCDDalDvR66fi15s=; b=DUOpp5nAmdrtHRyQb6PaSZNfAE3m6sZnlPGP1mmIAaHXGQp0FoXsqh51Vcw28Tw5xn fG0ENvQ0ssbmVGPyGu5b9cEr2UNxsC5JIcmUEYGFN5n1bVfJIo7vMhCpV1ZKsXvMBf4f D/bTyXn2tIZVgc9tlCNd0EgRE0byK1KWocuEw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; bh=ChAuc8lHvl/YQvwortB1kFZ67NvvCDDalDvR66fi15s=; b=nyXNoEYF41eSkCrty6lqAqyg828WjK4N57VFCFgcjIb+bSz3kjSZjdI02rO/h4X5/M OrUle804hqxGmTIOXvW1ZifuEoId4y0nzRumCnZhTpxTvFxvPELQCbplNz4y8d857Jil /NtUNb468+uBMy+IxaWzV+lwvpAnis9vQmRu+Eg3CeE+VS0tUr8iR6XzuZSFXoss5ykF 9ydKFZQbbqyh9RgbuF/hTBnxOOoVNuo0NgxVLwpdsL2hQfpDaGkqpZosE1O+3BYsprI0 pAxJ/zR5PIkCzawCgeAZH2B3AlxY4ZV2tvBz/wA57MYh5dGR0BmFZYVO8NKl6LnVhOCN dIYg== X-Gm-Message-State: APt69E2UY2txxAzEJknStYesEgTeU3wnonDbsTxZyMwPJssn8OO//WwJ GdIZKoayPh7eAtuLIc5HX22Xzg== X-Received: by 2002:a17:902:1127:: with SMTP id d36-v6mr4855932pla.267.1528889594807; Wed, 13 Jun 2018 04:33:14 -0700 (PDT) Received: from baolinwangubtpc.spreadtrum.com ([117.18.48.102]) by smtp.gmail.com with ESMTPSA id h8-v6sm2745370pgq.35.2018.06.13.04.33.05 (version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 13 Jun 2018 04:33:14 -0700 (PDT) From: Baolin Wang To: tglx@linutronix.de, john.stultz@linaro.org, daniel.lezcano@linaro.org, arnd@arndb.de, tony@atomide.com, aaro.koskinen@iki.fi, linux@armlinux.org.uk, mark.rutland@arm.com, marc.zyngier@arm.com Cc: baolin.wang@linaro.org, broonie@kernel.org, paulmck@linux.vnet.ibm.com, mlichvar@redhat.com, rdunlap@infradead.org, kstewart@linuxfoundation.org, gregkh@linuxfoundation.org, pombredanne@nexb.com, thierry.reding@gmail.com, jonathanh@nvidia.com, heiko@sntech.de, linus.walleij@linaro.org, viresh.kumar@linaro.org, mingo@kernel.org, hpa@zytor.com, peterz@infradead.org, douly.fnst@cn.fujitsu.com, len.brown@intel.com, rajvi.jingar@intel.com, alexandre.belloni@bootlin.com, x86@kernel.org, linux-arm-kernel@lists.infradead.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-omap@vger.kernel.org Subject: [PATCH 2/8] clocksource: sprd: Add one persistent timer for Spreadtrum platform Date: Wed, 13 Jun 2018 19:32:29 +0800 Message-Id: <95ec43d6f335e31d6e1da4eb0db522008728363b.1528878545.git.baolin.wang@linaro.org> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: References: In-Reply-To: References: Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org On Spreadtrum SC9860 platform, we need one persistent timer to calculate the suspend time to compensate the OS time. This patch registers one Spreadtrum AON timer as persistent timer, which runs at 32bit and periodic mode. Signed-off-by: Baolin Wang --- drivers/clocksource/Kconfig | 1 + drivers/clocksource/timer-sprd.c | 80 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+) -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig index dec0dd8..7f11c6c 100644 --- a/drivers/clocksource/Kconfig +++ b/drivers/clocksource/Kconfig @@ -455,6 +455,7 @@ config SPRD_TIMER depends on (ARCH_SPRD || COMPILE_TEST) default ARCH_SPRD select TIMER_OF + select PERSISTENT_CLOCK help Enables support for the Spreadtrum timer driver. diff --git a/drivers/clocksource/timer-sprd.c b/drivers/clocksource/timer-sprd.c index ef9ebea..c6f657a 100644 --- a/drivers/clocksource/timer-sprd.c +++ b/drivers/clocksource/timer-sprd.c @@ -3,8 +3,11 @@ * Copyright (C) 2017 Spreadtrum Communications Inc. */ +#include #include #include +#include +#include #include "timer-of.h" @@ -157,3 +160,80 @@ static int __init sprd_timer_init(struct device_node *np) } TIMER_OF_DECLARE(sc9860_timer, "sprd,sc9860-timer", sprd_timer_init); + +void __iomem *pbase; + +static u64 sprd_persistent_timer_read(void) +{ + return ~(u64)readl_relaxed(pbase + TIMER_VALUE_SHDW_LO) & + CLOCKSOURCE_MASK(32); +} + +static void sprd_persistent_timer_disable(void) +{ + sprd_timer_disable(pbase); +} + +static void sprd_persistent_timer_enable(void) +{ + sprd_timer_disable(pbase); + sprd_timer_update_counter(pbase, TIMER_VALUE_LO_MASK); + sprd_timer_enable(pbase, TIMER_CTL_PERIOD_MODE); +} + +static int __init sprd_persistent_timer_init(struct device_node *np) +{ + struct clk *clk; + u32 freq; + int ret; + + clk = of_clk_get(np, 0); + if (IS_ERR(clk)) { + pr_err("Can't get timer clock for %pOF\n", np); + return PTR_ERR(clk); + } + + ret = clk_prepare_enable(clk); + if (ret) { + pr_err("Failed to enable clock for %pOF\n", np); + clk_put(clk); + return ret; + } + + freq = clk_get_rate(clk); + if (!freq) { + pr_err("Failed to get clock rate for %pOF\n", np); + ret = -EINVAL; + goto clk_rate_err; + } + + pbase = of_io_request_and_map(np, 0, of_node_full_name(np)); + if (IS_ERR(pbase)) { + pr_err("Can't map timer registers for %pOF\n", np); + ret = PTR_ERR(pbase); + goto clk_rate_err; + } + + sprd_persistent_timer_enable(); + + ret = persistent_clock_init_and_register(sprd_persistent_timer_read, + CLOCKSOURCE_MASK(32), freq, 0); + if (ret) { + pr_err("Failed to register persistent clock for %pOF\n", np); + goto persist_err; + } + + return 0; + +persist_err: + sprd_persistent_timer_disable(); + iounmap(pbase); +clk_rate_err: + clk_disable_unprepare(clk); + clk_put(clk); + + return ret; +} + +TIMER_OF_DECLARE(sc9860_persistent_timer, "sprd,sc9860-persistent-timer", + sprd_persistent_timer_init); From patchwork Wed Jun 13 11:32:34 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "\(Exiting\) Baolin Wang" X-Patchwork-Id: 138437 Delivered-To: patch@linaro.org Received: by 2002:a2e:970d:0:0:0:0:0 with SMTP id r13-v6csp598069lji; Wed, 13 Jun 2018 04:34:07 -0700 (PDT) X-Google-Smtp-Source: ADUXVKJUwMXs7yzSW0xK2e4ez8NLKtPhpv6fmiQAyalWdzlMhBetNd0t1ur3Q3Xv6/L+/MHTv1g5 X-Received: by 2002:a17:902:ac1:: with SMTP id 59-v6mr4711005plp.36.1528889647110; Wed, 13 Jun 2018 04:34:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1528889647; cv=none; d=google.com; s=arc-20160816; b=MPDYg+vB5SBMzuLNlZIe/Odasbl4xNLPSb8lR7rHseq713Nt+aDWxWuGuVipqsMLrX Mv8UC9lIdhNb2Jea2nenlG4zJgee4trIOF+aOgns7xrRakKVDKtmBeB3vltdEIfhKdEN ACIKiRrEQEcmrMMZJG2x2gFY9qDNuCztbEJV/fHJ/wN31kWFw6hvOBPbimRxG/XNKava oB3Ruhcos5HaEhZKqPM0iiQGCq2pFl2RMnGHN2aFSljkzRidOJXsKedjgDzUuzS6COvn UGRKV/j/v+3S0VMFkldPGuQ0KYXDbVUox5QLvtx9N5YqTSkRNPRLR0qe91E0FoLXPW3s xEzA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:references :in-reply-to:message-id:date:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=Rt0KwPbYXZKnSTooKKPrjsk/i7mok6M2g0mPIeK26aY=; b=JirQfbmzU7Sno2kM0k743VWPEBgykF+S09N19kkA99Qxx1znsCJm9YG0bukp7MUyHd itSN3bQ9e30m9Q+irqLf6E69IMfQXWxBJ0Yc0UFlxnoaU2K11tWZsz4+n2t2pULZh/lq zWnias9ycPVQQHWMA6X4OsDETc7m1KnIUsF/vmWdP5wYk5gED2NJuJwhcKyWMm+WYo4H 0HmhoC6peF1K+ouofJiQYmqSRQ6ThftpHUisAr+Q/46eo4OZbMJbUR3RzrbmRV02qCtz j/txkehXhju+SOTdfpCING7F+u53q87CwI+f4CpypqA8R+bdTZP5dUxNRDWiRn9tm2RJ 1ZaQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=ZEpVWiWr; spf=pass (google.com: best guess record for domain of linux-omap-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-omap-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id m89-v6si2610935pfi.236.2018.06.13.04.34.06; Wed, 13 Jun 2018 04:34:07 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-omap-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@linaro.org header.s=google header.b=ZEpVWiWr; spf=pass (google.com: best guess record for domain of linux-omap-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-omap-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935494AbeFMLeE (ORCPT + 5 others); Wed, 13 Jun 2018 07:34:04 -0400 Received: from mail-pg0-f66.google.com ([74.125.83.66]:33946 "EHLO mail-pg0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S935497AbeFMLd6 (ORCPT ); Wed, 13 Jun 2018 07:33:58 -0400 Received: by mail-pg0-f66.google.com with SMTP id q4-v6so1153059pgr.1 for ; Wed, 13 Jun 2018 04:33:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=eYsaNDXipDe/lJhotbiCb787ugqu/85X8+2xC+bpmGQ=; b=ZEpVWiWrP7BA3MdccZkJpaRhQkH3n9pAVvH5/bFfXXkW51iMrGyt2iXRekl+tw0nxI LvR6KaRN9p8OErUhzSYvQSrUj8EvefINyX3KU4ETegdqyWOC8UnlZH5HUVCkSOHXJvH/ hFXnJPioHEiQSdQfRimDnXyAAIifQxb+IyRxw= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; bh=eYsaNDXipDe/lJhotbiCb787ugqu/85X8+2xC+bpmGQ=; b=BFYgCcglodW/gOQ/MzkzANQ2RgscvgpLST7vUC8E5H6mxufJQ3h53jbO2E2pkO9cxd hfWw9YHvmL6A1iWeL33gmC6r/KFL9NGIeDY6IQdPlCPrwhZ6/4fGrng4+R7aQIO/GjfW UYGiWXcYSxL5GxsZW7KnBOlezW4GDZi/QPOVWQ+BoA4AqtoWN+XhKpePD0/XnFg4U5Nd nHWMo3eSyxsozxhBjA6/USub/tjt4sGIgIN2wT8jFKGdnji1htUZW41FMH0y0p5RJrH5 W2bd62ijnzSRl8bQG+1+rlenZXUrIPlOVLakzvrvuen1aqBtyOgBDAhzPCLFzgsryV5V 3u5g== X-Gm-Message-State: APt69E0Z9v+/m6sJ8Bj7CKR466w3X0TLismG7bJodQ/WxyPnNK+srXY+ Jk9vEkfqcirGrtMlfH05Iowp9A== X-Received: by 2002:a65:6148:: with SMTP id o8-v6mr3707740pgv.93.1528889637833; Wed, 13 Jun 2018 04:33:57 -0700 (PDT) Received: from baolinwangubtpc.spreadtrum.com ([117.18.48.102]) by smtp.gmail.com with ESMTPSA id h8-v6sm2745370pgq.35.2018.06.13.04.33.49 (version=TLS1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 13 Jun 2018 04:33:57 -0700 (PDT) From: Baolin Wang To: tglx@linutronix.de, john.stultz@linaro.org, daniel.lezcano@linaro.org, arnd@arndb.de, tony@atomide.com, aaro.koskinen@iki.fi, linux@armlinux.org.uk, mark.rutland@arm.com, marc.zyngier@arm.com Cc: baolin.wang@linaro.org, broonie@kernel.org, paulmck@linux.vnet.ibm.com, mlichvar@redhat.com, rdunlap@infradead.org, kstewart@linuxfoundation.org, gregkh@linuxfoundation.org, pombredanne@nexb.com, thierry.reding@gmail.com, jonathanh@nvidia.com, heiko@sntech.de, linus.walleij@linaro.org, viresh.kumar@linaro.org, mingo@kernel.org, hpa@zytor.com, peterz@infradead.org, douly.fnst@cn.fujitsu.com, len.brown@intel.com, rajvi.jingar@intel.com, alexandre.belloni@bootlin.com, x86@kernel.org, linux-arm-kernel@lists.infradead.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-omap@vger.kernel.org Subject: [PATCH 7/8] x86: tsc: Register the persistent clock Date: Wed, 13 Jun 2018 19:32:34 +0800 Message-Id: <3010faf8a1dda56be4eac0d5aa393fbfb96f3077.1528878545.git.baolin.wang@linaro.org> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: References: In-Reply-To: References: Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org Register the tsc as one persistent clock to compensate the suspend time if the tsc clocksource is always available. Signed-off-by: Baolin Wang --- arch/x86/Kconfig | 1 + arch/x86/kernel/tsc.c | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+) -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 297789a..549dd01 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -200,6 +200,7 @@ config X86 select USER_STACKTRACE_SUPPORT select VIRT_TO_BUS select X86_FEATURE_NAMES if PROC_FS + select PERSISTENT_CLOCK config INSTRUCTION_DECODER def_bool y diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index 74392d9..cb4f495 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -1032,6 +1033,11 @@ static u64 read_tsc(struct clocksource *cs) return (u64)rdtsc_ordered(); } +static u64 notrace tsc_read_persistent_clock(void) +{ + return (u64)rdtsc_ordered(); +} + static void tsc_cs_mark_unstable(struct clocksource *cs) { if (tsc_unstable) @@ -1300,6 +1306,14 @@ static void tsc_refine_calibration_work(struct work_struct *work) if (boot_cpu_has(X86_FEATURE_ART)) art_related_clocksource = &clocksource_tsc; clocksource_register_khz(&clocksource_tsc, tsc_khz); + + if (clocksource_tsc.flags & CLOCK_SOURCE_SUSPEND_NONSTOP) { + persistent_clock_init_and_register(tsc_read_persistent_clock, + CLOCKSOURCE_MASK(64), + tsc_khz * 1000, 0); + persistent_clock_start_alarmtimer(); + } + unreg: clocksource_unregister(&clocksource_tsc_early); } @@ -1327,6 +1341,13 @@ static int __init init_tsc_clocksource(void) if (boot_cpu_has(X86_FEATURE_ART)) art_related_clocksource = &clocksource_tsc; clocksource_register_khz(&clocksource_tsc, tsc_khz); + + if (clocksource_tsc.flags & CLOCK_SOURCE_SUSPEND_NONSTOP) { + persistent_clock_init_and_register(tsc_read_persistent_clock, + CLOCKSOURCE_MASK(64), + tsc_khz * 1000, 0); + persistent_clock_start_alarmtimer(); + } unreg: clocksource_unregister(&clocksource_tsc_early); return 0;