From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758212AbbJVWNn (ORCPT ); Thu, 22 Oct 2015 18:13:43 -0400 Received: from mail-bn1bon0066.outbound.protection.outlook.com ([157.56.111.66]:55648 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1756487AbbJVWNk (ORCPT ); Thu, 22 Oct 2015 18:13:40 -0400 Authentication-Results: spf=pass (sender IP is 149.199.60.100) smtp.mailfrom=xilinx.com; grandegger.com; dkim=none (message not signed) header.d=none;grandegger.com; dmarc=bestguesspass action=none header.from=xilinx.com; Date: Thu, 22 Oct 2015 15:13:20 -0700 From: =?utf-8?B?U8O2cmVu?= Brinkmann To: Kedareswara rao Appana CC: , , , , , , , , Kedareswara rao Appana Subject: Re: [PATCH v6] can: xilinx: Convert to runtime_pm Message-ID: <20151022221320.GQ5257@xsjsorenbubuntu> References: <1445489120-10933-1-git-send-email-appanad@xilinx.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <1445489120-10933-1-git-send-email-appanad@xilinx.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-TM-AS-Product-Ver: IMSS-7.1.0.1224-8.0.0.1202-21894.005 X-TM-AS-User-Approved-Sender: Yes;Yes X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;BY2FFO11FD038;1:HY+dOa92aPKXlMkXHWqt6kJOw8YGGZ1KWigsWv76VqHp6yFwtEJbjRUbV+tfy6AVJPgyfHAphrgL9urvJ0Ly1brUMFqCVO/IGN6RDhnepyeWohnrznJPim+Nf8jlYhHhqYt6zoemByOG7MQBAKxD6AZ1qDsU4XbFpEpdBvj99F1efWeIYnbiMvOYdz+3FaOjQtJ5yuAndEH/nHX0hhPffQMdI+ONKO2wzg0dPOmDd8914hNwhbx2aAp9SEIN2eGcKbd+eBjHk6MkaNvteJHvBtujiaUQOeGUkwgpOmX2RcObK/M1Ilm8shA4kzakRnnFqg1V1sPHyio+jHthsvRnY8yvxY8tombtGxAglx7zyAh/1mcI3De+mpJlzYG2d0H1JUTQOvhkLXx7XRSkfMRZJ3ArnoN59fQWDG27vnvy/C8= X-Forefront-Antispam-Report: CIP:149.199.60.100;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(2980300002)(438002)(24454002)(164054003)(189002)(199003)(377424004)(5007970100001)(92566002)(4001450100002)(83506001)(50466002)(76176999)(11100500001)(5008740100001)(50986999)(6806005)(2950100001)(86362001)(4001150100001)(33716001)(85202003)(54356999)(106466001)(4001350100001)(85182001)(189998001)(16796002)(36386004)(47776003)(76506005)(77096005)(57986006)(63266004)(110136002)(107886002)(23676002)(33656002)(19580405001)(81156007)(5001960100002)(19580395003)(87936001)(107986001)(5001870100001)(4001430100001);DIR:OUT;SFP:1101;SCL:1;SRVR:BY2FFO11HUB038;H:xsj-pvapsmtpgw02;FPR:;SPF:Pass;PTR:unknown-60-100.xilinx.com,xapps1.xilinx.com;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BY2FFO11HUB038;2:wc8juEctUZBYpAFu1Q/qcyXR+bk+xo2yd3wVZ98ieQBA+dLeGS74CysIksFK+rxGNjeq6zJ5mOrt2lKyyy72fUgH0c0MNgbcIUn/kKjt4cmdD+LFu+cyw/p5oCn87M6HeKJ6SGz+8s2a52yJLj3+xDhD6r7KrPVfsH9iPtiyjas=;3:tHc8EoosPMkCiraPIApxLhChHUWwRLzKy9s0zS7H2fpWtCYadlcLuN8fReJQvKc2D7ElbOGzfHLwcU4j+otWRyl/6aE6o+jQZRMO7Uc+sbFFg51AiumldkQD6JHAt5HL/MokQRt0WXYCoCHPH4Yq4/YumPHy1Brt8VT9C/L7bJMgSEDaQD9O0/zA1s+Ti1KXEPv6fCVXg2qM5byOz4OLo1VZR1Pyvspnm563PIR8uyY/y2+akLk9QkbLv1A4ljCfu9Y/l7K7fKm8MhYhtBfXIg==;25:TQIwJRwpaCU/+oGD544VkBLKhw5ugDtA08HbwgBib2iRgKhQk4kCACIdFa7Gw0oIiLjzCfTg/Z7YUJvslhYCWv0DkC1WKFY7QUHTvzq/LfSB8aLQdr/6FE095kDyPUltOEYpo6ePH6GIgrdPHYF8Ccmu9s0RwJsS/f/jHr0lS4As46uVqGPkpWFpShft4JcjzSudRJT8CBbkwMWxE/95GCV96OsXY5JnQRJzsiUGfbVu4+CxZX8tm3TF2nSGyh2uisFD9/4i18WaUnoTVJf2Ng== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(8251501001);SRVR:BY2FFO11HUB038; X-Microsoft-Exchange-Diagnostics: 1;BY2FFO11HUB038;20:rJxgRcVnHz9zCeLii9ErGYPyoHj2/qYUZrb7nBc4QUBavVc9Z5WHYry8U34xdrEcELS9IDfpOylCLcItkEjOwgowRt4EpAtMYPz64mzCDhiF8PisQ7/1JmVpPml8CLEQ76TEo7WdsPaWuuz9ooy4IU0/ZHyNly75zGVDS9clI5sU0lJ3zwsb0wG0sIe6s4h5RUnFQY0fFh0FpSTeqlYL6OX8uMwcnRri4Azx8GXauZuMju5qKhdXbHKBOlaXhENiLbx9HZqPBhJOwpou3ig0QwSH4GJwbirRTPK26gBeQ2b1sm7rUEg3Hef1N2N0xfEHzWjHHE7vv837Swwh19iZuueiL/mNWRSa6Hk3pBWQbI2NgjYdvNO7jpuUNTg4DjWu984wel1WH6JhSrT3yRfv5xkQhoVZOi9/fWfxLKpNMcXJwWY8KFTz/h87/2weElUF50933QUsJKDCo3ibkFp3FaX9Q2dshTKvvo/yWO7WQJuaYDXdV+j59HitYN8w0gBn;4:68gHT+K/OHlx3CyyQxJMC2MOsTIWDm699zOKJGxryQeyVeZPOCzRd4urZlmbk0CvUvA1g5fARB5eAun+3OUelyVHfLPq5KkLb7GGKhIUhTdWVTH0hh2+Gt4c8Fv+jz89p3BBwckQ6TLtqe/CrfVUv/NVgR5OowguJ5bKFoGxACUaHPunkd0kYE9hPb+X3Em80qPTVvVoA8tXhQIe47DXZu24btu5CPAcL2MxuOAUXMwUKsWLQdCFSKhJdiD9tbGO4rGLWpXIqiOgEJS68oacpmNr/0WFKqwq1sajok3KfmuG5V9nBVADJx5VO1PRVc5EhEEdYXfGOaNtTYyc8Dm7ukuk11AeTbS5jqX1eu6ifwSBZWzHUS34yQ7yzw6xw+uGDDPd55pD7+8x+C/BGKQWhincr8wb+uJEFdJ7LKVyEpc= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(192813158149592); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(8121501046)(520078)(5005006)(3002001)(10201501014)(102215026)(10115024);SRVR:BY2FFO11HUB038;BCL:0;PCL:0;RULEID:;SRVR:BY2FFO11HUB038; X-Forefront-PRVS: 0737B96801 X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtCWTJGRk8xMUhVQjAzODsyMzpUd0YveEdkZnM0Y3VVYzVNZW15bVVvYnFv?= =?utf-8?B?eFZQbVhGV295bzZ6ZDYvNFhaMjBOT25sYU9FSE1xWFRZcWVmRGxTZU9xaVV4?= =?utf-8?B?QnhqMFUwUFVkVWl4cmZDSUY0ZWgwMlJnK3RvWkYvZDNzYmxqS21ZZGd5WkFM?= =?utf-8?B?UER3VFdTQ2JrYmFOQlRySURoUEp3NUxlNVY3d0pHcXZMbTVveWxIaW15MFY4?= =?utf-8?B?ZWlUNkEzZC9zVTBGWTZ1SzIrM0Q2MkVGUTdaZlBQSWJJNEphUkN2YU1QQ29p?= =?utf-8?B?Q05aWkZXeHNYb3hZSnhVM0tFd2ZCbVZyek5Ec0JScHVmam1iUzVSMlFOK1pm?= =?utf-8?B?bGhaRkx2cUo4NWZ5c0ViMk5JMTJEdGppZkl2bElTODhnODd3alFaQS9MSDNl?= =?utf-8?B?QXQ3TVI0bk9Pd3RscFhFbFZwWnNKRnkxemRhY2hVUmlXZ2s4bmx5VkloSHBX?= =?utf-8?B?aUhYUkhURUhCMzRXUzNZeWIvK0lieUZLZ3FnYlMwNDFBS1N1VzFhemNOM1pO?= =?utf-8?B?amxpbEh0dU5jRlFwdjYxeEYvY2ExT3pWd1VRVzIvUHU1OTJJeG93UEtHR25T?= =?utf-8?B?R1hxWGw1aE05TEZKZklNTE1adHhwZEVXNEI4Vzk1c01XUHc2d3IyNjdlcktr?= =?utf-8?B?eFRMQ1pBb3BmaWpCYlhHZk9hcnhmN2xUQm5yM2dvS1B5ZWFUNnJMRGFLd2Yz?= =?utf-8?B?eFBnaUQ1djB0eFA1ellOWFltN3dncHQ1a3M2M3p2VzY4TFVjdzM0WXR6eDRK?= =?utf-8?B?ZGlEdmswMXZ4a1ZFVm04RmV1TEZIUWNOMlMzVWQ3OW5GVG9XeXM2dGpqN0Zv?= =?utf-8?B?Z01WNWtHZzR0bzQ5OThrTDlXT2pnUGFrRmwwNDNZQkhUYVFqa1l4S1UyQzc5?= =?utf-8?B?dmxLam4yRXNoTkk1eVprT1RyS2hXYnFPRVYwNzhLUlNsWjRIUXl3UVZqUGFY?= =?utf-8?B?WjVxNXpyZjBKVEFWVUx4Q0ZvZ3Y4UXovQ2VPNTB1TENEQTFIVzQzcUJrNjJF?= =?utf-8?B?TGUwQUxQa1RaMXBpUkJtNHhzY1pDVC9CWDY5bTJqM3NjUGZrOGVOY1RwcHEx?= =?utf-8?B?SGlZZEVORVM5Tm0xWUFOWEFkVWlsakhGek1QdVA5QlljYkVvNFJINWtuUjE3?= =?utf-8?B?eml4Mk1DOWE1SHNTdU9HR1ptVzN2N1JSRFU3Ymk0b3J6eDB6ZnZlclFRUlZs?= =?utf-8?B?TWY4Qlg0WENiZXRuZUtqVExSR0E3MllWWEY2WmQvOVZLRXVDdjViOTEya2pM?= =?utf-8?B?R1lvejR6ZjI0MS9ha1dpNWNVdVYyd3BXTU1JWmgyZ0hpdFlDN254OCtNN2NN?= =?utf-8?B?cFdsd2x1WFJpdVRQcXE3SUZzQUJYcDYxR0lHVTlORjE1NktWUXlhNjRIMmFm?= =?utf-8?B?WWVueGNRU0JoSXRLTUtpZ3MzamFBOUxYK1R6ZVo5WllhS0xoK1BIYTdwNjRE?= =?utf-8?B?NlA2aHArVmluWGhqU2JURmJpVy9rUTdoTzRJVEtDbDMxVHBhWkFyQk1SbFla?= =?utf-8?B?S1JWUGFTK1BqRVROOUMxOVZzL2lTLzBpZnVTNnJ1aTErdnhGQit5b01menFW?= =?utf-8?B?Rk5iVTd2Z1NNNlFiYjNSdXB4ekxHNi9XckVpN2pMMC9RSlBGckNRUkxkVnhZ?= =?utf-8?B?MEo0ZjBQSTZTT1JHMUxSOG9iazlZd05SMHdEMmdHeVNGSXdkTjJMK0E2c05C?= =?utf-8?Q?tgKVaOm6XER8JP2j0Ea7tbdDkR22MY0MqPsjzZTo?= X-Microsoft-Exchange-Diagnostics: 1;BY2FFO11HUB038;5:UbFQkvJjLHc1zJIjTLTjlNOQAilGHR8JgpTIGCEyET4uNTD7Xt/WZDh1LZ4ztGu3Ukqxq9QLGzqi/24PaEj4zlCORqHPVcDvmeW+Y641FTvb/8tX0YfndgxAeqHbfQXLZrB8Itp7unISAeBid7K1/A==;24:w5O9Tn1SXuSLMe1MJjuje1itayQDLA6aA392HHLbiNcBXBMUN0peFjYAqlsaxhPJ5wU5pV3cig8a/ggXInmR/CA6VlBSTu0Arp/Vm9axndk= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Oct 2015 22:13:37.0734 (UTC) X-MS-Exchange-CrossTenant-Id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=657af505-d5df-48d0-8300-c31994686c5c;Ip=[149.199.60.100];Helo=[xsj-pvapsmtpgw02] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2FFO11HUB038 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Kedar, On Thu, 2015-10-22 at 10:15AM +0530, Kedareswara rao Appana wrote: > Instead of enabling/disabling clocks at several locations in the driver, > Use the runtime_pm framework. This consolidates the actions for runtime PM > In the appropriate callbacks and makes the driver more readable and mantainable. > > Signed-off-by: Kedareswara rao Appana [...] > /** > * xcan_probe - Platform registration call > @@ -1072,7 +1103,7 @@ static int xcan_probe(struct platform_device *pdev) > return -ENOMEM; > > priv = netdev_priv(ndev); > - priv->dev = ndev; > + priv->dev = &pdev->dev; > priv->can.bittiming_const = &xcan_bittiming_const; > priv->can.do_set_mode = xcan_do_set_mode; > priv->can.do_get_berr_counter = xcan_get_berr_counter; > @@ -1114,21 +1145,30 @@ static int xcan_probe(struct platform_device *pdev) > } > } > > - ret = clk_prepare_enable(priv->can_clk); > + ret = clk_prepare(priv->can_clk); > if (ret) { > dev_err(&pdev->dev, "unable to enable device clock\n"); > goto err_free; > } > > - ret = clk_prepare_enable(priv->bus_clk); > + ret = clk_prepare(priv->bus_clk); Are these clk_prepare calls needed here? The runtime PM calls do clk_prepare_enable and clk_disable_unprepare. > if (ret) { > dev_err(&pdev->dev, "unable to enable bus clock\n"); > - goto err_unprepare_disable_dev; > + goto err_unprepare_dev; > } > > priv->write_reg = xcan_write_reg_le; > priv->read_reg = xcan_read_reg_le; > > + pm_runtime_irq_safe(&pdev->dev); > + pm_runtime_enable(&pdev->dev); > + ret = pm_runtime_get_sync(&pdev->dev); > + if (ret < 0) { > + netdev_err(ndev, "%s: pm_runtime_get failed(%d)\n", > + __func__, ret); > + goto err_unprepare_busclk; > + } > + > if (priv->read_reg(priv, XCAN_SR_OFFSET) != XCAN_SR_CONFIG_MASK) { > priv->write_reg = xcan_write_reg_be; > priv->read_reg = xcan_read_reg_be; > @@ -1141,22 +1181,26 @@ static int xcan_probe(struct platform_device *pdev) > ret = register_candev(ndev); > if (ret) { > dev_err(&pdev->dev, "fail to register failed (err=%d)\n", ret); > - goto err_unprepare_disable_busclk; > + goto err_disableclks; > } > > devm_can_led_init(ndev); > - clk_disable_unprepare(priv->bus_clk); > - clk_disable_unprepare(priv->can_clk); > + > + pm_runtime_put(&pdev->dev); > + > netdev_dbg(ndev, "reg_base=0x%p irq=%d clock=%d, tx fifo depth:%d\n", > priv->reg_base, ndev->irq, priv->can.clock.freq, > priv->tx_max); > > return 0; > > -err_unprepare_disable_busclk: > - clk_disable_unprepare(priv->bus_clk); > -err_unprepare_disable_dev: > - clk_disable_unprepare(priv->can_clk); > +err_disableclks: > + pm_runtime_put(priv->dev); > +err_unprepare_busclk: > + pm_runtime_disable(&pdev->dev); > + clk_unprepare(priv->bus_clk); > +err_unprepare_dev: > + clk_unprepare(priv->can_clk); > err_free: > free_candev(ndev); > err: > @@ -1175,11 +1219,11 @@ static int xcan_remove(struct platform_device *pdev) > struct net_device *ndev = platform_get_drvdata(pdev); > struct xcan_priv *priv = netdev_priv(ndev); > > - if (set_reset_mode(ndev) < 0) > - netdev_err(ndev, "mode resetting failed!\n"); > - > unregister_candev(ndev); > + pm_runtime_disable(&pdev->dev); > netif_napi_del(&priv->napi); > + clk_unprepare(priv->bus_clk); > + clk_unprepare(priv->can_clk); I think this can go away when the prepare calls in probe go away. Thanks, Sören