Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753813AbcKNNMb (ORCPT ); Mon, 14 Nov 2016 08:12:31 -0500 Received: from mail-db5eur01on0063.outbound.protection.outlook.com ([104.47.2.63]:60051 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751662AbcKNNM1 (ORCPT ); Mon, 14 Nov 2016 08:12:27 -0500 Authentication-Results: spf=pass (sender IP is 193.47.165.134) smtp.mailfrom=mellanox.com; vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=pass action=none header.from=mellanox.com; X-IncomingTopHeaderMarker: OriginalChecksum:;UpperCasedChecksum:;SizeAsReceived:1645;Count:21 From: Noam Camus To: , , CC: , , , Noam Camus Subject: [PATCH v6 2/3] clocksource: update "fn" at CLOCKSOURCE_OF_DECLARE() of nps400 timer Date: Mon, 14 Nov 2016 11:40:46 +0200 Message-ID: <1479116447-29483-3-git-send-email-noamca@mellanox.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1479116447-29483-1-git-send-email-noamca@mellanox.com> References: <1479116447-29483-1-git-send-email-noamca@mellanox.com> MIME-Version: 1.0 Content-Type: text/plain X-TM-AS-Product-Ver: SMEX-11.0.0.1191-8.000.1202-22520.000 X-TM-AS-Result: No--4.788900-8.000000-31 X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-IncomingHeaderCount: 21 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:193.47.165.134;IPV:NLI;CTRY:IL;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(7916002)(2980300002)(438002)(336003)(199003)(189002)(5001770100001)(36756003)(50466002)(2950100002)(48376002)(77096005)(586003)(305945005)(626004)(47776003)(87936001)(50986999)(5003940100001)(76176999)(92566002)(8936002)(86362001)(6666003)(189998001)(7846002)(49486002)(4326007)(4001430100002)(81156014)(356003)(50226002)(106466001)(2906002)(81166006)(33646002)(8676002)(5660300001)(107886002);DIR:OUT;SFP:1101;SCL:1;SRVR:DB5PR05MB1894;H:mtlcas13.mtl.com;FPR:;SPF:Pass;PTR:mail13.mellanox.com;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;DB3FFO11FD018;1:NwlmeVVABWJQbTHK+CMUVVdRjhA9tkdJmMq0cbubkmudB02DGx4oVOgM3H1rOWPPi+SiS3Ixanf3viWCo+L49DlXYbmZthEc4jCaV3FKxRgFcQIzpJOGH1418GQqSfd1/VT5aT6gIkZcEaybPLTdMuHmCgfMQuMt7jngKGHGvbJHDL04tRP15isSwt+fwiDNLticm+Klm8/Jp/gIpm6xsKII87vNwJmPXDfAWFfg+T9mWgH8sTZBCSUKXunVPdIQJu6Iqs1N6CZLoP5H3seTpjhfDIoIXVHRYEdJ6N7ka5V4wItb2/Pm2Xjjf34lIBoZmXV7WE04M6Kjia86/jRHCFjvtT7G7KyMgoBpAEEAtDK3Uv3IldhwKqmWOgXTHsw9Lq0UTV5Q1DRX807K5HT1GspIBu4w+O7dKVv9VD8hhyJ78Zz4+B5WoNIuM5+882is8LLgvCCvO2K5Kvl51n+u1zUt/ATxa3AO24lAckT4wPh1QvZFjL7eqUVGQWW7a0IBDJE73E4hjFXDMqSt+vU04XRxE8RZOrQjTE0zn1sbQM0A4pJZ/s1my2jUK0+St4c1GSNeqym4hkhNlgALrBafuw== X-Microsoft-Exchange-Diagnostics: 1;DB5PR05MB1894;2:nXEd8Xlm6tCI6meetaaPNY+0H1hqaT6VHbon51ZB9ykrcgzEJ6FLNHJiMDS/RMcucCZkC12GPA8h8iFsYjDV+dAf/Er2K5FVAsjCh6Ib8B+14KVrf580iJWS+i9PawG5UrLM7YiJqas9RDeg2X/VwNLIBr/JgPTl2Adfm3UrumI=;3:dT6tYnF/xwhP+CZim84NEaEIk58oqcOOl4BwCO8j+jQ+nMvX3TuMfCMfJP3ExoeE9GRJsbTbpI2tJChsInXq4fni+Udpw/7kCi/aTpBqrKff+R2vD7Hx2ZOvX5e0vvKioZEc8G2Qvi/eabTMMOT1hEuHkebi1sVzNkNWILRqY7Y8HfDDGSR8wT6/+E2sTqbO9Szs58lAlc/NCqnVN5yDI/ILMOc5IzjZcE3yZaoG5Xls2JBZsrXzRIIVvxrsl3cJJvk+ULJjum9tgZ0QKYPEO96NisTZzCO1EJMN1qKDZ5s= X-MS-Office365-Filtering-Correlation-Id: f5493f12-06fc-4ea9-34dd-08d40c725b8a X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(8251501002);SRVR:DB5PR05MB1894; X-Microsoft-Exchange-Diagnostics: 1;DB5PR05MB1894;25:BlebXdLNkO0QZxv3l1XLNmiOSZX1F0C2KIJucn9ENtW6Yq80Or0MvA9+piJ/601yP59mJqAlEeh8YyPt8zbXlsRFNxaicvxOskh0vBVJQFskl15C549ATa7VCAWTmx+qiLLhW/U7r0S4TeezJRwvNbZoXhOZGSSC51P8Y1zKiVU1I4sSt0pjTnS3wdwW19xx+MBvV9Mxq1zvZeNnNWdul8xn6c8pt0wvXnzkwunKlTLVTjes0gf9T7VlOouo1T2d8x0mDVea1Bk6Urhq3CPIHzvRda+1P5pNTxBH8UForfZkGPM4WPfDp80SWHT1JhFlYI8ARaf3sz0wAjhC3K8mxRDrLmn4cZhuwnf/CM2Jc+M/WKsNw6ra9J+YU+sKzW0+Cxcf6lupucPjhpvyATeilvCXnP+YeoUdFhIczDT/LWEmh6yXDe2bTCEnr9neMon/7SVBBl6qlhnJlav9nY8TQxrheBnQBJtOLlj8HHIW15BwIOfZ2wkvJcY49yid6Nh6julhRi3xoqVzwBk3uWIH6uT3IY78eZXsCC3T+4cpIXEMr4G680wM3MXa7BA6UQCCOteCjtxxcrXAW5/2LeqP6w4N6EWrmiwfjeTOoRwSI2sIUm3UCW7vwqYx99RexFLxf0XfJpK/NtyybqYBFgzSb/D/TKElzVeFi+5ZVAQFhmjm5RQsP9p/EBWMknKI2Ul9RZyo+g1Ic8ZAGfkjJZORWToZDvQXm6Tj7Fq0J+8VrdUcX7gCZzQhKBBlolzAsy/9ekQMAiG15qSMkj+R/HdqDFXTF1A4ufyqnynXNjh7xss= X-Microsoft-Exchange-Diagnostics: 1;DB5PR05MB1894;31:2LDoObA4c80Fe9lUOTvqw4v6vS8vj0Squn+5VQ5BO7V0YiZJ2YF9y2qksD6DVap1NYZ2VyI2tu2LwU2pd6bt4QHfej9+5cEzJEotGTzPe6S0mMn774EzZnUszWWSqpmf8YWDa47hIxAZIq5QlIUTzyBpIoTJtONIWfO87EYjJxO9p8wf8ChG65k7gyZGLFCwkE5XzVBXYKL0XRxoWwKCztSPB2i8pB7mf0KCBjePC/JnejNZ09kET3FTNacAavom;20:lkYZDzl869d3VfCVaTn/qaK3OlAn9FLDez3WaoP2Tmj4gW/aW2y6DeqkfRJXKTPrRxgPrdyqGBR3VWvvnKySYM7Hfh8v4AFHkoJZWK0w5I2ZGj8F2Sjr//L6DiPde3Ozkly/h0RZhlWXxrEshJIFtrvxjndu2bi7uc0eZTchEAmJm1GJzZzvHrrif1mhj9pokj+I6HtpgeW0u5Pkrzgs2gqM7l5PKAVsIOv+kAAN0d+aIRaY3vII6KLXn6xog3hR5O3QKQmGAxn9VM4uEcbR8IeyhxiCCi8cAbC5e5m3jhxZQ1Olu24qLlDPP5LDOfCvQxnJ1nRMgV7RgbJFFMzfR1Jv3TtHrk9rAE3hxrEXUg4iiXIfGFcQo/8pLJeAwW2RggG+s+5SFZzjyY+tcDxhuYzNYPzjLHei7TZLU95/eDRvZGhgvGuKeBDZ2hH6ha4CiFj88AH01EUfxe9PObY9tsdLZCwtTFhyVhXdjCBt9B3i6YZyDy8p3Joq8VYQKWr+ X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(788757137089); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6060326)(601004)(2401047)(8121501046)(5005006)(13018025)(13016025)(3002001)(10201501046)(6055026)(6061321);SRVR:DB5PR05MB1894;BCL:0;PCL:0;RULEID:;SRVR:DB5PR05MB1894; X-Microsoft-Exchange-Diagnostics: 1;DB5PR05MB1894;4:L7Ye8kOBhryk/qizkcYZKfoVxTSzS0++IBX6PG0LmESWSrlSaa8c/2PoAovFksK86/hA0H22KS/2QRlcRnC5EwpiAg1Feu5RZkmpSbUrVDgjNvlelKBd7p+JsIoGDhgxzPDtZvnuvfgIhbEV5f/DeaBa8TgqDDjoskBfTFD55azao+b6MF3VirbTMXrIr7cY/qbQ02JwtwZhTltnWjIAB0Y6Oy7895DAYsdwRAnYiq0RXY+B1LaNoyQPV7l9nD2WUYw8iyZ1vSnayQmiDnpjD+NXke1ixMdlaEmFRevkCtbIhAchoUAwze/tCb/PNa33JkyvtWyTHO6C4Gv3gUC5xhO6Bb5SJwXBbD7E3fg31Zjt9h8jMGMzbgForacde3DO/IXO7/a0NqmtY9AmLIiPmkUAM3+8XuQ5fIlZU9+L1UHB1RGWK2sgl7IRYtGqQlLanAFaCKdlMm+N10zQmJa/EZmfJO9Et7dtVIo1TCDpcKMSMWBLAvWfoNhIyXTCz9ad6bbL4y2Fb+e4Zx7moxShXg== X-Forefront-PRVS: 0126A32F74 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DB5PR05MB1894;23:3sBgrA6Js6RE6Jg1/1f6EehDgIp/UBc1nAirCWrBa?= =?us-ascii?Q?FHgwaWy0b9jQO+TzWpAhyCOdWjx2xKpxNHyjtBXqGiBJRIrsYJPTwzHB3EKX?= =?us-ascii?Q?pEAN/bFNqLxaYNDtg9XhR7xzDTJpPGmppBI1crE/ITKwz/RqfpnJuQAY2lBn?= =?us-ascii?Q?EImuPCB4ViY0ohgbbukstZ2loZ2tYdanZz93k1JYC9l8xoQKqK6HVbhu9cfE?= =?us-ascii?Q?z4Lm8tLU4LemVGfUu2Apxk9yJMiTo6wY2lUFL266SS0PwxcsrgmyMx4yams5?= =?us-ascii?Q?b0S19GqOX0kjTqYzuT8hpw9QS7q8m3CXSCYugDZNcOl5oXV9Z6dfwvu7AcaA?= =?us-ascii?Q?BPiUjE72SMtpZHzuH+mPtTVcOR9L3xmFH4r/2mbWvJfECZb742eMJhE8K+Tn?= =?us-ascii?Q?RcqJOYt28t4J7hi76Q5hkXWVdYJX/LoNszEg2Pgsjj7jo+aw8VRbDgi42IDG?= =?us-ascii?Q?wtuiU7f9dFQm9XxKhnaK6ylM8SJ0QFq7yOVcLYpj1OvnZu1/TeVhoc1kn1xt?= =?us-ascii?Q?K7ffgvmvn7Z5NyhzxX6nPuNRtATFraSVNhI/DOi/8wax7DeQZupfNAQglObb?= =?us-ascii?Q?vNk7cPila11ka12u4hT9tanf5ZXBxhgF9qc7R4BZkTYURdK2Pans+7g3lxEK?= =?us-ascii?Q?3E4YuNDAJshSGE0/utSRw5V+vO2VF/6+cQowgaRseOfhDiNjVVZ9pFwHHB5/?= =?us-ascii?Q?qs90hBG+fn2C3bzdokJD7Z4qps32FHqiWJSSfKVkJhmOJ3Ex2UeNy/S7h5Mq?= =?us-ascii?Q?Qvs4Adf0tvm6vv7bXfgVz0X7wMy8VQBtXTkC4Auftu29LSKTrpBI1E2qQPzx?= =?us-ascii?Q?TFGA2p+q/SkPY+xsy7nZ4M9ITWHw8/bpLINo9nVrn4ChqeOI71ywDHmN7VsN?= =?us-ascii?Q?Z2bcOHlrjYbPla+a063QhQTmmRyQdRvgnWjZCRSqTcoGbrQUEKOtGCEQIwMC?= =?us-ascii?Q?xf9AkIlQhjabFDsfpeTpm+0spAZ3FK+cgBs7hMwMTBzSnhLQgD49Ta2RFNXC?= =?us-ascii?Q?y0kav6Y/QIZ2YtpV8bXHnje?= X-Microsoft-Exchange-Diagnostics: 1;DB5PR05MB1894;6:LkjD8CPING2NSR/8xUBrIuNeNmpS3y9T9ycpfYq0rpkXy8leehGV8UMfbAU75NWClbLILxfGAxH34QervbPzlN/nrlaxIwuqx8/6jZdwjXmEbXsE4oCbYnnIpI/7JJs/jjv0rlwO9rVBcakOsq1SrKN7pLrxK2kDNSfdJwMcF3EqrpUBoaBtxCuSjEJnoF6BrbzXpLUvqMS15d8DCiePNFhJzFGXMKfqDbLqT7NKTd83DdzY1ZjqOpnFxRZcxJqRlkjzBTewFsnLNRLmC/cr7Au173OM/P3IqqEtuuJJgs2xZ4PWprGHWkS/kufeTI4cAG1YYAtZGYauQPNrAW27LM816zxDmVPcSwoVvdal5QfOt8NLY93s0AdrBFJ/Zz2P;5:TrBqWlMiY9cAsJ/TYhF5ABESd9lA+YmpMCJ1uyRCtT4AXx7cAM43KUkl0DsYcMyfihMS1gbmRzzG9J2shkFJi4L+3ub7IdX9e7F3Y+FrD+hgSSaqc6U0HKocrj1JyA/sSMozo24hqap5U5FwZu11Kw==;24:2e4tnr8uCk+bNbJhvA0aMKElrQKOWGTbynNZDOA95ARy4Mhddh2p7alD56ebmE97h7uU7orgcGR/LDNOlax09yFBOPeCfJXwtBaddhR3UZg= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DB5PR05MB1894;7:uFDr6EhGrovOW9cAlyNTJZSk/Xh8r/cySu+sfW6TXXW6aOO6bqfPyHRXyIoy29SJnMdqR80hMEq/43vz1OiSkBMUFg40I8Hws/0LprqP5oulxnMMYqNiX32YSlJIG+J4QLCZkKDhkVL3VhkH6dUImhGslrs4RNx4Ja1LgMPih+jIJaV8B4LwfJlOclTTCwoEnpPmI/IMtJer1kM1WbJE763YjmRmoTeIOdZKdxiM1qFvzhAZpWs88OEF3laeY08vmPNzME4GIzd/ypnXSGMeAKcPOtQNMkzTn49mfbLD1gMM2/aV2M0uK21EQ/bavnWN/oKYHAaDA9/ATR9Dvwe8vvrnWHY4/qbekMtYXYzdnBw= X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Nov 2016 09:41:06.3927 (UTC) X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=a652971c-7d2e-4d9b-a6a4-d149256f461b;Ip=[193.47.165.134];Helo=[mtlcas13.mtl.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR05MB1894 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3405 Lines: 119 From: Noam Camus nps_setup_clocksource() should take node as only argument as defined by typedef int (*of_init_fn_1_ret)(struct device_node *) Therefore need to replace: int __init nps_setup_clocksource(struct device_node *node, struct clk *clk) with int __init nps_setup_clocksource(struct device_node *node) This patch also serve as preparation for next patch which add support for clockevents to nps400. Specifically we add new function nps_get_timer_clk() to serve clocksource and later clockevent registration. Signed-off-by: Noam Camus --- drivers/clocksource/timer-nps.c | 65 +++++++++++++++++++++++--------------- 1 files changed, 39 insertions(+), 26 deletions(-) diff --git a/drivers/clocksource/timer-nps.c b/drivers/clocksource/timer-nps.c index 70c149a..0c8e21f 100644 --- a/drivers/clocksource/timer-nps.c +++ b/drivers/clocksource/timer-nps.c @@ -46,7 +46,35 @@ /* This array is per cluster of CPUs (Each NPS400 cluster got 256 CPUs) */ static void *nps_msu_reg_low_addr[NPS_CLUSTER_NUM] __read_mostly; -static unsigned long nps_timer_rate; +static int __init nps_get_timer_clk(struct device_node *node, + unsigned long *timer_freq, + struct clk **clk) +{ + int ret; + + *clk = of_clk_get(node, 0); + if (IS_ERR(*clk)) { + pr_err("timer missing clk"); + return PTR_ERR(*clk); + } + + ret = clk_prepare_enable(*clk); + if (ret) { + pr_err("Couldn't enable parent clk\n"); + clk_put(*clk); + return ret; + } + + *timer_freq = clk_get_rate(*clk); + if (!(*timer_freq)) { + pr_err("Couldn't get clk rate\n"); + clk_disable_unprepare(*clk); + clk_put(*clk); + return -EINVAL; + } + + return 0; +} static cycle_t nps_clksrc_read(struct clocksource *clksrc) { @@ -55,26 +83,24 @@ static cycle_t nps_clksrc_read(struct clocksource *clksrc) return (cycle_t)ioread32be(nps_msu_reg_low_addr[cluster]); } -static int __init nps_setup_clocksource(struct device_node *node, - struct clk *clk) +static int __init nps_setup_clocksource(struct device_node *node) { int ret, cluster; + struct clk *clk; + unsigned long nps_timer1_freq; + for (cluster = 0; cluster < NPS_CLUSTER_NUM; cluster++) nps_msu_reg_low_addr[cluster] = nps_host_reg((cluster << NPS_CLUSTER_OFFSET), - NPS_MSU_BLKID, NPS_MSU_TICK_LOW); + NPS_MSU_BLKID, NPS_MSU_TICK_LOW); - ret = clk_prepare_enable(clk); - if (ret) { - pr_err("Couldn't enable parent clock\n"); + ret = nps_get_timer_clk(node, &nps_timer1_freq, &clk); + if (ret) return ret; - } - nps_timer_rate = clk_get_rate(clk); - - ret = clocksource_mmio_init(nps_msu_reg_low_addr, "EZnps-tick", - nps_timer_rate, 301, 32, nps_clksrc_read); + ret = clocksource_mmio_init(nps_msu_reg_low_addr, "nps-tick", + nps_timer1_freq, 300, 32, nps_clksrc_read); if (ret) { pr_err("Couldn't register clock source.\n"); clk_disable_unprepare(clk); @@ -83,18 +109,5 @@ static int __init nps_setup_clocksource(struct device_node *node, return ret; } -static int __init nps_timer_init(struct device_node *node) -{ - struct clk *clk; - - clk = of_clk_get(node, 0); - if (IS_ERR(clk)) { - pr_err("Can't get timer clock.\n"); - return PTR_ERR(clk); - } - - return nps_setup_clocksource(node, clk); -} - CLOCKSOURCE_OF_DECLARE(ezchip_nps400_clksrc, "ezchip,nps400-timer", - nps_timer_init); + nps_setup_clocksource); -- 1.7.1