Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933593AbcKORYh (ORCPT ); Tue, 15 Nov 2016 12:24:37 -0500 Received: from mail-he1eur01on0061.outbound.protection.outlook.com ([104.47.0.61]:43376 "EHLO EUR01-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750772AbcKORYe (ORCPT ); Tue, 15 Nov 2016 12:24:34 -0500 X-Greylist: delayed 114509 seconds by postgrey-1.27 at vger.kernel.org; Tue, 15 Nov 2016 12:24:33 EST 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:1639;Count:21 From: Noam Camus To: , , CC: , , , Noam Camus Subject: [PATCH v7 2/3] clocksource: update "fn" at CLOCKSOURCE_OF_DECLARE() of nps400 timer Date: Tue, 15 Nov 2016 10:50:58 +0200 Message-ID: <1479199859-980-3-git-send-email-noamca@mellanox.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1479199859-980-1-git-send-email-noamca@mellanox.com> References: <1479199859-980-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)(189002)(199003)(6666003)(33646002)(7846002)(106466001)(2950100002)(305945005)(8676002)(81166006)(48376002)(356003)(189998001)(50986999)(77096005)(50466002)(76176999)(5003940100001)(50226002)(47776003)(81156014)(36756003)(5660300001)(8936002)(87936001)(4326007)(49486002)(92566002)(86362001)(5001770100001)(2906002)(626004)(107886002)(4001430100002);DIR:OUT;SFP:1101;SCL:1;SRVR:DB5PR05MB1893;H:mtlcas13.mtl.com;FPR:;SPF:Pass;PTR:mail13.mellanox.com;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;DB3FFO11FD020;1:/NE+0zb2TQeJBwBPZ/PgIzVG5IuK/G/tgXW2GieOpDCRPS8a7fwSJ++OpfzeABvQxBogJaGb2LpzV59omIIzY4OrerB65qeBpSlfaIGzIWIgGm9qzpeQFUlUHts3aON9J/y1PVax4I/ycHPRe3+3ss8rzawyI66U1Iw1h7J6nt0iSmhHvjJrPPmdcyItBZUjwchGcCbcBlLMngMXvTDABYWuxV0KgxxOIjg1ZrHEG2/o+IV1xK9iOB03ps7nlnlJlb321o7xZP7mjIV0Y7msdZ8XHQAF6KnbJDyZDvsHekBJZ/KmBRRd0nc6bBqIrCC5jpV1mWNx1seys/dt6562Yf4nsAsSQIUr6FniEh1JStwcOKOZu/5H0eNOKalQnKFtUMcDFjnGYwT66Spq0k4+q3fwiYs2gSzfQA2bwwutuOmTr8W7TRb5PGMaI+7b/DLLUqa+JiaBpQrlk3AO7scPqpOofAiMTfWfcRPojCajWkHBXV27xE/rJguHJ349nde7hUYIiFPGX1C7691+v+sLynozjT2NZLBdMMbCe9SKQHaxnTNQ5NcTXk3sgmb6+lXWZNlKApF4T/CZVRacANKk4A== X-Microsoft-Exchange-Diagnostics: 1;DB5PR05MB1893;2:nDNm/BZRD28/5ttGOgx4WTv3hBV2zpM+9hm4fKz1hXg51r6Ydj8wx6G5FvnHEvGdQat8RR/wwkHsWQNUcloQsCnf/7n7nXlYNocVork+wjBpBLatSUr7yEMymSaALxKEhvV4O9jgRvlo66QkFhpDJSJnVFDxcIpxlGD/X4NZvA0=;3:obVTXHowez+y3hHXuJDXTbU1/tqW1pPsTPjITKVgs6jd1LfznQyPDh181XeHAbnvu3klNdv0okFjNkFHLfL6u3Kq9fwc3pgCKu9FDnjAMMm6G7OwPRYYUrofWMtx3Z/b0k8DkfmF0NjJT7DnY4QxfjR+6OK4cE0aE53IaPqYrPhDR8teqMZRhLFNxeWF6p3WfQ9aKKi6f9A631Yx94Tg2J9h24bJZMLBGZ7o51C7DSdDC+eaKUyntKGNT7iDh54tvCyjsmeU3GNSDnX4zN/NMBrpRP79k7voA5ZqpcN2M4c= X-MS-Office365-Filtering-Correlation-Id: edd74a22-e5a2-474b-74e2-08d40d348ec9 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(8251501002);SRVR:DB5PR05MB1893; X-Microsoft-Exchange-Diagnostics: 1;DB5PR05MB1893;25:Yk2KwVX2YSInfz303qVhI7UdPGm0rqJ/f+WBAocDIgjvvCRVml6Vx8+gubW0Icm85MDHthdbVLp3eZVwPjBAOui6hmEqDvyOg4KxK8MTE/kNZb7SDxKJzpJbeGOZn63PWGosMRkViVm4Onp8+TFkbgP5K51NRGS+UJ3royttF2td0Kj40OuNkWIWQ/iufo4Eb23TMf5cCKsDvYFq5WwMAkwOzU4IoTVCNTe9dRgB2dSVSCBtT7W3OKA5JkSIIblNqfE5YObltOgRZ+Fjlkr/cbTBNVxgW4YUN/h9tvlMs8pnb3fPcSQDzrdBKGDpO19zJJFGUmqNNuOZtPmgtrujIt+GqXAOcPGbyPBsXnKZxaubastqDE4B3w/JlxqhbnQdkmsSnxOo+OzKo2VcN7oFNE6qIHeVcqVt8UtnQmUISjLYcOSCvkQAn6Yst7nOHdt/oHmrB3y8ev6ljZhHelgh+BEtbqQnBUX7Mq9VCe25GPev0/NFZuWFVA9jtxdenV7fS7NSnQ7i6D9bd/PbnsN1L8p7Cr08JmNMBa3Fnr7OXWg7drtdwnwJDHzpcdUpQtvDqJFI3clq2GDIiEvXg2WATY0T4T05NNjYHNpAVdxtzJIt6P5Q0ZH8QlQa8xdfOqmazJz5N7+NEWySw01W2ka8NI/VLwh9V8q0uvFPh4qt88bbuLlCvJW2eN2v5u3PRgPzYTzXwzuvCRs6b3JKT2BCeF0cr65zXpmcu79SlgLmZfSk51c5GCg0fVA5kPwLJwgSLr6YFUv+JjCORvgvEQ526Hfo/5YQju3AEVH7II2gIsgUQJNAppIUFOmR+bNPnUJdAnR9SsnFthiSwSZ8eP6qcw== X-Microsoft-Exchange-Diagnostics: 1;DB5PR05MB1893;31:vIz8+rVph1eMSG4JrGVlVFIwqiqSarLrIyK9BvqFbpzqihIpAstYEkcYCNjY8o1EmKSYNpGfXRBowfhkHi3UdOD9Imyjcx/Kke1sCaU6BdZO6Uj/80lodRxSWxqbNEzsg97tCt0/uGVh06lgILz06uSSujrvuzIbj3kfxi/V0YKVzgSLptz8r2enC7N324XJ25gegNcMDyimCpv602ScgcjKLj1GDfrnO/j98Vqr+tgrTI8C2MgI7OMK+Z8eNeOxsguwqdFb/DODWuQ+76I+ng==;20:CK66nCVKliJrti/TFSMmuUNZA3+SMVfCE+8mR6KZoKqoOOIXjYEqkVOAfnXIfP7z5GJLmmD8RjdDcCmQOI8prJK5QY8UFCBbdSh7Yj0AqgILTheRYgCwk32R2o5YIasfy1NubX9u+9RJYeq0UzT2mdi7A/J3bdo6UjkYs+n4BhgeEao8FGJ4rDzDvDP9dlmnbHlLu0a7THIOFJGKvwLjjiFMY+hEr7t7f4kAhCOEwZ+YksBL5ALGAyVbt4isewu0wLc/g/7xRQg4NQOaecIdrJlPWbNkXj+253sWtkBTyaD6C1gGgzTpT4DqJ2CTouFtQbr7+OKwdeKXxy/unH385WsHRIB4TO8vEV1k23n+jUTZqszxo9j5IDErq8ebAm/6o929F09cEKfFN4iomN9q3/zrWitU7UuzRkzVzHkElgDKNjHYTSAHFhX4sN+imd6mHIivh9RfjFPsLBrbCe8rwlgz1kGIMWRJqkSuNikRdGM+60+OWXPBu386ljVcfSVW 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)(13016025)(5005006)(8121501046)(13018025)(3002001)(10201501046)(6055026)(6061324);SRVR:DB5PR05MB1893;BCL:0;PCL:0;RULEID:;SRVR:DB5PR05MB1893; X-Microsoft-Exchange-Diagnostics: 1;DB5PR05MB1893;4:95wsYiyM6Imwv1fXr6MOc1485Y3fkY+oDXq4oq3VrOy72lVVWkqlpMA+wPiGACOG8OjpE8rQm+IkaeNBtSM/9uZq3K5v5XMBpUG2cKh5gv2/ljY+2VPYGMbyS2kS5CoS86FsRtytdzNPcEOkwLGlNSKpE70/Fmetq70dQBfqQuDil3DYGGQ3YjreNVADoiSg2Ky/IBoRxr3gn1XMP4VNogGoKXM1xIvvtdP4oXc75mFuB0Iw2D4/hxxuQ9Eb8SAD9I2xvOMEmM6P4py3Oi/3sK99sjsvcDN9DYsahkI2IWKiXsVRp5rfTtD+dpaAuJTYRuNxMR+sRPWgM5/13VgbySXdsaVsb2EfTRW8IQHHzDC8ju7DB6BoLCuX871njshJHjb5AIjZfTD9o4a4MymREhchgVPPevnxkgdRr9JBBXGOQ8rOYhmylYp+n6gi8wshapEjhUn3X/ryu+tOrTaURZHgNLa1JNO92JKmvRiEl8l0hVQL+ClKUi3jfyvMR5FYDWj/fvJTRO6NYj+UJfMjsQ== X-Forefront-PRVS: 012792EC17 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DB5PR05MB1893;23:ur04KoeNTfc+Iett4h2tkajLpI2G1fM+qGiSPXT45?= =?us-ascii?Q?vS7FiDFz3MskmgSEsDqJb4OmK8FS7vqg/0+G76A/MJgowGdDjXXQonqghG9V?= =?us-ascii?Q?N11rao0KXd5ZJ1uwUsOGWqLe5JWnx5QtUQWxQmRobTFNgyAGADywtHOidDPL?= =?us-ascii?Q?QpoxjyehNJCiJ3x9x+2AW9qagXlsetrTG720zMnpl+MwpzjsZtZEKTX8maxK?= =?us-ascii?Q?Hu5I8/RmihnLR8DANXlxgh9OWCpXZ0B3Hm5hfDEhb/34e7ver8MYttrVt0m0?= =?us-ascii?Q?3CzvdDg0H/mUn3tuzUBzHAcffqpxILYaTJlcLTaiV6Qb2iIdTCt0Hfhf8d58?= =?us-ascii?Q?R1QckuyM/ic9j5ZcGRB6nDJ+gKhpfptj5gHCT/u92BmH61dElfgsmKywMc6t?= =?us-ascii?Q?hAno8Nr/azYcNURsOUySFasAAFWZuJcsV6/Bv4JkWJtnLdcfYtwDRNiGuhoM?= =?us-ascii?Q?BT5WvY2w08Fpx1Ncewmgh6cQob63nC9yqFGDJURmX8dXu+x6eSogTXJeusWn?= =?us-ascii?Q?YCo5X8tbY03tjL6YPkIsSWzU/HfTmuNzG3Kzfvjlt4fp9LJ/fRN0EYl606nb?= =?us-ascii?Q?vXzbhV99003bryijFoHJgke91WUp9w3PYwk+aVXI76upaXAzJDML8XopM3Lj?= =?us-ascii?Q?yDZcwwzofbpWY4c/xQPOUp9UAtme8jywl6F5XOU+Xp/G4gq3ZbSOEZyvcJxa?= =?us-ascii?Q?AbLBifctXix8oVIVQ6habPkyhZi28yly0eS9FohbhupWk2MHUYttJRyud6jV?= =?us-ascii?Q?vpSRQwIJegEsB/ZLhNKUk4vqd0Q9Yhr0z2VPjYt25oHgbHbT6tZOFBhEt64e?= =?us-ascii?Q?kCH0SWfVJab3ryBuv/XxfJ3+Tqt9n5hYoJvQeOifIzPHrfOzPweTq9TJlx6S?= =?us-ascii?Q?t3cNso3toeEzXlJrLpVWukyvvUIOj/rKu2/EMaLjCq9U6bk1H+zNXyLhDVu+?= =?us-ascii?Q?6oGlTqqL3jnQVlNMKRN3keKsLAZRNY0c81xf2mGOFEq1lb1JwGuzqAOxfiKu?= =?us-ascii?Q?KY=3D?= X-Microsoft-Exchange-Diagnostics: 1;DB5PR05MB1893;6:ojWgryEFZkC4g0IF/CvMG0mAEuG1jCLB/usBJcjPoQMYz0hIORqXhMvcmETShJswML4HR/NDF4a0DjEIVQ1w2WDhafq6hIsde/1P4C/cn1gs3vbJbTsrbtXY73yzz6LbUVUTbsARvdoi5n/Xu8e7Y/WsWK+/BYQqhZYm/ViDzMU2VH3aQHX+YoAvvtUnrMson1dSA67HyAYdQ+Hn3u4oUAQJftdPJfMFezgISa7b7XHhRZyhe8YkmOAqw6XQ6y2qNmPQcz5p7blu/QuWE/8wbHkRolHDlWxbKKfpapt1FLqajAZfnHkjClYkrhvGQmsekOqzo+vpTMfxjaEtFVKmCBe3rUuiA4K/N+R1CgzEHMzgtUNp9Nn23jlzJRzsmPNM;5:UYckwj75sExSga/hvSEc6RwOOWjiKIMKKvZ5L7yz6/SrdfgsrygXvYI+wIJPzaxGXXr0Y7rc5tpajSod2OnrphUwm+xI+iNA/rg/WjGETuF71RlQv5+UFxOMkv0FQgjj7aMRxOLdpE5r2Um1KSVwiw==;24:Kv4Etz7XbqxwEX0+HYlO7l62Tgxv0muDQ4XHJ41Mhx09vFM+dnDlQv58ol7obMT9danfcCWWGl7zSzcUWuykbUgn6B45IQI+myjUXozTrs4= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DB5PR05MB1893;7:srTff9T2aZ1QXKcWPHhpelWpRaT/u94H2R0JDNcKPYDB1a80iZomkr2Cc7NWTT612VmTulgaAha9IEcLzUwtBwuzsdEeJG1M+9ra9V+bBrY88/TMzpZGlBfY/jGsDQ0AM8l73JlW0ORNGeauOQwUcvxW+yB7pqSErdcgqs1hC2VpbbMa7OIeoLajl1Y7GUhhg3rNKnDy6Rka7fYu9+JqVsdP5V+7lu+ADIzBtiy92Rh13thCw7dCaGoyRIGbKl/tlHiCezjkDHYqVFVGjr241uUif/P1wlMF8Wtgoh7qbtyqV7u/vGJSGBzbR2Xpk04zSnZWnma243QThr53k7Gi1E16tWLGFnNCWz/4h6s/USI= X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Nov 2016 08:51:14.8926 (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: DB5PR05MB1893 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