Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935074AbcKWKNJ (ORCPT ); Wed, 23 Nov 2016 05:13:09 -0500 Received: from mail-eopbgr20109.outbound.protection.outlook.com ([40.107.2.109]:63807 "EHLO EUR02-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S934829AbcKWKNF (ORCPT ); Wed, 23 Nov 2016 05:13:05 -0500 X-Greylist: delayed 60803 seconds by postgrey-1.27 at vger.kernel.org; Wed, 23 Nov 2016 05:13:04 EST Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=peda@axentia.se; Subject: Re: [PATCH 0/2] pinctrl: sx150x: set multiple pins at once To: Neil Armstrong , References: <1479830762-1839-1-git-send-email-peda@axentia.se> <96d50f53-7497-932f-57e2-37fe6cfbafa5@baylibre.com> CC: Linus Walleij , Andrey Smirnov , From: Peter Rosin Organization: Axentia Technologies AB Message-ID: <859c1aa4-32bd-4d60-dfbf-4c8dfacd3dd6@axentia.se> Date: Wed, 23 Nov 2016 10:39:21 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 MIME-Version: 1.0 In-Reply-To: <96d50f53-7497-932f-57e2-37fe6cfbafa5@baylibre.com> Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: 7bit X-Originating-IP: [217.210.101.82] X-ClientProxiedBy: HE1PR08CA0012.eurprd08.prod.outlook.com (10.161.112.22) To DB6PR0201MB2310.eurprd02.prod.outlook.com (10.169.222.149) X-Microsoft-Exchange-Diagnostics: 1;DB6PR0201MB2310;2:NaViRZgHbNiCouWm8ly5jN0LpEv+83fj8tRQ+bv7kN0nVc3tCoukDjhAeUNbiLA8QFu+uC8WIBsSKgCRMhpVFFatVylNbdG9S1bBHH1Wor+u+cgGrOplqurvatS3qmzMBmz7ZLtP/a/88F4L3i2RRtcvqTy69QNqonSYoTDQW94=;3:ZN1R43BErAEgnC+reAjdNC50oNvHumPxUpJ/nz+NgRqbJI+sgh73109dfO7LOs1yOZl7efkuI7lHElb+RuG0Pp5It3IPXdag7Z235hqdoMgB70hfG7AlnqO1sE6ReITDV7Osnh35jU9qt9+xiI/GzyIuR1WLkNNS5o7wniU0L0M= X-MS-Office365-Filtering-Correlation-Id: cc560baa-7f16-44e5-8956-08d413849d9d X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:DB6PR0201MB2310; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0201MB2310;25:u7Vz2aMYwKzxYuADlqhE0yYcMBSjmmck8AroVvS676A6I8T+lJ+2RJjO2Vlk1WutCWO/3dvFNHz4wgqTsAALdRof+vlMECxclUgownjfgKXVoUXpVztnqgqZD7lgrs6Y/mmEo9MI1ZW0oZzryuAZqvOcfmXizyAs2+alDP/AV+YVOuEDGN6W3lxEEaKbcXju8+kiYIcw3el7fOdvv3loJ3Mi/gO5fpz+VVjpH8I8G6nPj2b5P5JYvXofcjon7ViD4+KmwySRc220nsrNsNmbhy9xYo846kakuSR6P2sqxNCVB9tCi1kLJS47xktW79HeiJUAA2kbmT9iPo5c7SKLnNl3NnnHmnQ/RKzAiPc1YFi2C2RRDq4apHOseE5iYxLjZK9krlsIAXk6UCHc6rQLCnEyGNYv0VXWePKpHK04oIxyWfyK330dOUQjNRhcJvyxQbyWTHdkIqyvsMtm8KgROmWjiCEuKZcZExbPqrUIjTvHl5Niuf3EQWCc96jlFwi8PJYSaxUk0UNthyYBnGX+lbRNbf5mmjkT16WXX6Y7qAXCApH3kuqM2bDTDz21zQbobeaJjFayxHzFqYXkHQig7ttk+Ryt7VwLWqeLakJhpBU4vxsi6tzhp05dXsZ8jVxl5R1jTiXi+Zmj13a2gqDzrD2kOz9EeI+pvvtRcwa78Z9yLEInEBeanfUQKke8Dne+GIFrZRYqISn1muDEn4n7sQbil4tlgDBBfyGkE8vwLdioHaN7f072mawUI9ocBzttoPlaZ++GOVpweojpPfEQAA== X-Microsoft-Exchange-Diagnostics: 1;DB6PR0201MB2310;31:yNxxIPS1VEb3ieTDh4zhgEu32vwv9e5O+11g321FA2tKmrwEGoJa+alKe0k4N/gVFFhPX69olFOZXQtOqpLJgOeHUmvGXlD7ql4ww4XEgMMfF+HNORW3weX06XDFo2HpMqs/fHu0TTxrUhxD/IWhMNezhUA0QxkfVZWJk7zQlg2gIV6JBkOo3M3Lwnq/RjFhg8jO98HPUA1MUJveMUzeXi4jWZzMy9WU2yfMo2cxaq5kf3++JmAlNrItD4vzXaxUccNCVzra5Em6k32h6BKqf4nprgadk+iP0rJ7qUh6dpg=;4:AcP9CCYr3S+D0bAhBtCdYdp5y1x2xJQZk2wG89KuZuLZmM6zVmz0t80WSVt4ly66ilO9Vx1Z/dLiOhPSqU4Plaz6sQBFaF8kp3sA9zDcmiZykYaqPNjY5BbhChXINMZFOzbnUl9mqg+Tx5K91PMEsElGMNdWyBZYTfyUQQO3Va2btFRTXOJaFyGR4/cdxIJ5Z9HZCQVMGpbRGiUeTl75FuhNz3W5zHShBGpnUxnSL16oAtin1rlgNETaLXEN0o/rKVTQbVtB5Ay1fvIuHv2QrMQS/JCwm3Uxme7A1iYzS+RZMBDTtKejDDRgLxtzG1FFyRCLVxeRBiQ+krFQbVRd3sBzjAWebo0MrbQff6V0wIqkaAlnitiw+KIszLXn/qFMaRV/7syVCLcMJrix+Hpv3JpPJ8T/UUyRmeI/GZeoeOhjuNwfRjUH1OdvkuXiCb7tkGPvqwhMmqRvDOmKntS9TVcqgvZjL3rNfIJOXG7CXGF/EWLUcH67JwKRxXpnInh2qJURZM2UD4RA2NzQMimhsdHEENkwhLKNMbzxNe/J/kU= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6045199)(6040307)(6060326)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6041248)(6061324)(2016111802025)(6043046)(6072148);SRVR:DB6PR0201MB2310;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0201MB2310; X-Forefront-PRVS: 013568035E X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6049001)(6009001)(7916002)(24454002)(37524003)(189002)(199003)(377424004)(377454003)(51914003)(42186005)(101416001)(54356999)(76176999)(97736004)(50986999)(31686004)(33646002)(5001770100001)(4001350100001)(36756003)(5660300001)(77096005)(65826007)(305945005)(7736002)(38730400001)(31696002)(47776003)(86362001)(229853002)(7846002)(65956001)(4001150100001)(65806001)(66066001)(117156001)(8676002)(50466002)(74482002)(230700001)(83506001)(68736007)(2950100002)(189998001)(81166006)(64126003)(81156014)(105586002)(106356001)(92566002)(39060400001)(6666003)(23746002)(3846002)(6116002)(4326007)(2906002)(42262002);DIR:OUT;SFP:1102;SCL:1;SRVR:DB6PR0201MB2310;H:[192.168.0.125];FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;DB6PR0201MB2310;23:MsM4Sjc46lBoiN5sCkzTiT7i7rF0lzygZQ2?= =?Windows-1252?Q?QEwAvbkVpbWiJ1qaPoAFNws1aeVhIgDacCcB7s6FDKv/rz/7kHd9BepK?= =?Windows-1252?Q?3TGBnSyFKXBwsCcv1TG8E0YEaBozWye/cjziSo53KBMAEJI2rsSQnIVe?= =?Windows-1252?Q?uuh2fl4I6BKT/fXiuSGtFdk094VTJsBJUIb3Rfp6EtceodvKkAIc+/1S?= =?Windows-1252?Q?xcsgqeD/+LS1+s53ga8hEKVaPS4PMspD9E71029THxIdJ7lJlrMkqDSw?= =?Windows-1252?Q?oIZ3trPRiaWGsTmsahzfDxw4YKtMPXVZdEOZLqoKW4PlyrgBcX2iBPNh?= =?Windows-1252?Q?EhR70rw8Ce3/OJ/Cz8Crij38Ej+9Z9dSgQK2TvF9UWPYtT716DMR7/BP?= =?Windows-1252?Q?HJolQXP72UbWF/ZWMaSiKs7P/NGgLNJSfV7lrj0OGhYaAM4AS6UUzoNA?= =?Windows-1252?Q?mezorNhZB3vQHEG+EqBi/Wl1eCCw+zEUrnETKopf8SZks/rcGKwF3kC2?= =?Windows-1252?Q?4osmyauU1dWDZUR8Q3aNr54W9cFn/nJaGuF3IG2cl4Smvncnhltfj7Me?= =?Windows-1252?Q?+SydEzo3mafd15iWUX2t+nH6zv/aeO1xCy8flDddTDt4IVJC2a4XHIDS?= =?Windows-1252?Q?bnprNql6ph2tGlY/NHOX3xDgP+4mel8VSacvO1C12+/IYACIYMQ8+T/i?= =?Windows-1252?Q?/jX2k4woCMEaKXjFZ0lHHR8HYcD3a8Pl1GNwCRoBMj1UyAC1K52iOf/k?= =?Windows-1252?Q?N0VwpHWn4/JZxxICzqHmc6JihUXotlvGs8Lx9AS0YiK719HSX+ZYrJ0u?= =?Windows-1252?Q?1BmT8Vd8ggHbb7/G6Ox5viz2MkIof/RT5PQiRVc8wnOFamRu/LKtS/Cv?= =?Windows-1252?Q?Mpf8BDB9emRqcmkoRUIOvLePoC5TVxn8BTJHrjlNrkTFHS7XiAKenyit?= =?Windows-1252?Q?Z+tjVGx+CrH+bqj6Ak4Hdl2tB3ZqztJQ7EGHbjpLqCvllaRM+VoITyLI?= =?Windows-1252?Q?sc87iVTEK1vBuu+juHuWOCGmpFgbm5PYhZf0SxWJNUp4eFbQaXrT4SDa?= =?Windows-1252?Q?cVLL6Bask7tBfK7Qu1FPl0ZXinr7FSVuKy0aPMg2mF5NdnpL702JyOg4?= =?Windows-1252?Q?P5BI816F2vvAOFO12fbqBUslSPUP5OFmtdGDhBjvhDE1Rj/PJda/hsyu?= =?Windows-1252?Q?Ys5PHIxPP0bxuQTC3SiBu/gWCr7TaMIWlui6W6nGc/oTTwjFYZRXMUIy?= =?Windows-1252?Q?GaVz2FOM1A4btyKF0uuvUZ+Hur6u926h9YwUzHB9S8WEuiJegk+d0IbG?= =?Windows-1252?Q?xuFPkqQrJmnMcftBH/HYDMi+K7VGg3TEi/l+QJCbT+VZDMW/55jdQ937?= =?Windows-1252?Q?zF/CkpahDMnF0Tt8IDLOjb7XyqBc8HN2DJUkrNwncUCpY6O/O8w80jWv?= =?Windows-1252?Q?m8AUYfHvJH/wTmWJ8rp3ClYIRZYiJTm5cwTZWx9W197lftudIyWoL/9E?= =?Windows-1252?Q?4NcUT9vvzdiTWk8zR6j70FxXLVv39qrK0RucWf3F4C8fwZ962evqdmQ7?= =?Windows-1252?Q?L0c9TqEAvlYgpNEkHWzD+HgvvkwOlkiBOxPdY?= X-Microsoft-Exchange-Diagnostics: 1;DB6PR0201MB2310;6:/VaA2vjSTier33a/cjQ4tR30rDC4naD02oOb1MJbp6hg6/2pPvxiTY5iPTfrZSwYjqtrP2NCbocJfqNqvLCxru5vQBrZ5je5exR544ZWH7+B/nOUjVAQgRBMYRmV8drEV14q3UldjJX9d7Zpscz+bBnw7vSOFT6RxS9d4B279wS7sK6cIUtdY/GyNxTl9X9UHj2oYCkEFD8QupbxvZVW9RCQSzAd0UtEIDRc/QULy/Od1IW84m75t7svaxnHvwRSCA5XvcOY71G9Fi2d4UkX3Nfw9wDCtx/A5t5WmwqME9IHbCnvfLx0M0WGqGxTkqY6oDNN0Qe4BQNfhu6Fly/L/EWAWQl51UOmaonAXK0jv8F+SOp1zItvri3gJdRKXdha;5:OqUGvHDDpJKG4zXs21NgTDE+t7VDdw6MMmXnFrLZ3gAATcVknwbbRft166eKfw1+PnKt4YB/Q1nrjc9D7nACy6C5D5AfkfmXhp8ZZr5WLWz1Xn1/y+kp3bajQmYuhfzidWixcRxDlxO1ckuQZ3I9UQ==;24:duslltBzwnWRx58JyMu/q5X17xmF7UFCr4EFE74n5tPXvJCX3MWd0/ui1IkVSATRKwQZdkvKzkzzK9uU0irzEghPW0vs4Xci4VNGNXCZr9k= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DB6PR0201MB2310;7:SS5/FRvLnAvgTVrEkmSyUObpaNKSZodZ44S7gAoLXd5VBwFIOQ4VbKAF3v/SJtnKcqDaFRr5moJHCmBxm1py1TsW9zNN3IpHQAOFsAM5C+iHwLGKBDA3A6Nt3gRrltFdFuVK67rpW2YZ+PEHwPdDJwNXrXEDD2gmnAhelxg63LtqyeUjDzifVZM7HIF46aJJFf01MhTZWswkV5CoWhr5wY4lD3xgSe0Hh7JqrdIOz1B7SIj9Av64/r64DNDnjd7gKizb0dmlsL2i3YxMjoV1/KmVfOFAAwnIUWbpCqohTXVm+gXBSsQFyjNX1/6DOJ5Dl8fVxE+JH9yLm1P44o0q7x7f1YQEIXadmjLLv7PKmeU= X-OriginatorOrg: axentia.se X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Nov 2016 09:39:25.9314 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0201MB2310 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2828 Lines: 69 On 2016-11-23 10:20, Neil Armstrong wrote: > On 11/22/2016 05:06 PM, Peter Rosin wrote: >> Hi! >> >> I have only tested this on an 8-bit sx1502, so I'm uncertain if >> the there needs to be locking for this to work as intended for >> the bigger chips with an oscio pin? Probably. >> >> So, I didn't add (or rather, removed) these lines at the end of >> sx150x_gpio_set_multiple() and made the op optional instead. >> >> if (*mask & pctl->oscio_mask) >> sx150x_gpio_oscio_set(pctl, *bits & pctl->oscio_mask); >> >> I mean, what happens if there are two users writing multiple pins >> where one of the pins is the oscio pin, and this happens concurrently? >> I get the feeling that there is nothing stopping interleaving in that >> case, and you could end up with the desired values from user 1 for the >> normal pins, and the desired value for the oscio pin from user 2. >> >> But for the easy case (no oscio) where the existing regmap locking >> holds, this is a nice speedup and desired behaviour without a lot >> of individual pin changes. >> >> Cheers, >> Peter >> >> Peter Rosin (2): >> pinctrl: sx150x: various spelling fixes and some white-space cleanup >> pinctrl: sx150x: support setting multiple pins at once >> >> drivers/pinctrl/pinctrl-sx150x.c | 50 ++++++++++++++++++++++++++++------------ >> 1 file changed, 35 insertions(+), 15 deletions(-) >> > > Hi Peter, > > Thanks for the patch, yes the oscio has a clearly separate register part of the clock management, > but it could be handled by the set_multiple by masking the oscio bit and managing it separately. That would require locking. If process one wants pin 0 as 1 and oscio as 1, and process two wants pin 0 as 0 and oscio as 0, and both processes issue these commands simultaneously. The gpio chip is, to my understanding, required to make sure that both pin 0 and oscio are both 0 or both 1 at the end of this. Without locking, that would not hold: process 1 process 2 regmap update to data reg. regmap update to data reg. regmap update to oscio reg. regmap update to oscio reg. Broken end result: pin 0 is 1 and oscio is 0. Each regmap access is locked, but individually. In this case we need locking to span two regmap accesses, which brings us to resurrect all the locking that Andrey removed, because we then need to lock *all* regmap accesses with an external lock to prevent other stuff from sneaking in between the above regmap access pairs. I did not want to add back all that locking, and had no need for it, so I left the exercise for someone else to complete. > Using a simple integer to store the oscio pin number (or -1 for 456 devices) would simplify the process. I'll send an update... Cheers, Peter