From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1041618AbdDUSHO (ORCPT ); Fri, 21 Apr 2017 14:07:14 -0400 Received: from mail-db5eur01on0095.outbound.protection.outlook.com ([104.47.2.95]:58871 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1423285AbdDUSGk (ORCPT ); Fri, 21 Apr 2017 14:06:40 -0400 Authentication-Results: kernel.org; dkim=none (message not signed) header.d=none;kernel.org; dmarc=none action=none header.from=axentia.se; Subject: Re: [PATCH v13 03/10] mux: minimal mux subsystem and gpio-based mux controller To: Philipp Zabel References: <1492101794-13444-1-git-send-email-peda@axentia.se> <1492101794-13444-4-git-send-email-peda@axentia.se> <1492784582.2364.10.camel@pengutronix.de> <9e3d48c4-0dbc-3e80-c653-b0357abf1d6f@axentia.se> <1492785664.2364.13.camel@pengutronix.de> CC: Mark Rutland , , Lars-Peter Clausen , , Wolfram Sang , , Greg Kroah-Hartman , Jonathan Corbet , , , Paul Gortmaker , Rob Herring , , Peter Meerwald-Stadler , Hartmut Knaack , Colin Ian King , Andrew Morton , Jonathan Cameron From: Peter Rosin Organization: Axentia Technologies AB Message-ID: <6bc3120a-81dd-3b6c-d246-559a3c072969@axentia.se> Date: Fri, 21 Apr 2017 16:55:18 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: <1492785664.2364.13.camel@pengutronix.de> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Originating-IP: [81.224.171.159] X-ClientProxiedBy: DB6PR0501CA0027.eurprd05.prod.outlook.com (10.168.78.141) To HE1PR0202MB2554.eurprd02.prod.outlook.com (10.168.184.7) X-MS-Office365-Filtering-Correlation-Id: d1e73dc5-7cf5-4801-9632-08d488c67173 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131423075);SRVR:HE1PR0202MB2554; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0202MB2554;3:4xX3LxtApP/CnuZFJGlmAmRqX+LeNNMetwzztCCQFvaVUL8dv4RqQ8INIwY9NYiBtoP0LfXNTmeA5Rx5zXoYYhtRKwQR4QU0CO47jTRCeEjy/9lI2FAKHP/7asqOcT5uM+n2+WE2YjFXk9nnsVXPEZQHhNooZW5kYxCZhZSGvnQ8gadjDHMnsuXVxEQZulBCvGidB3a3POmogCuD+kPuMjXjNLYUpbDICNWuxJn49XpMnj24I4n8vmMNuMGel+8DSIK0AHLsphsPpKtWtf/vtA1cC1qdzsiDacXqIPHtAfcFliLuY+oALvLk4dSY7b3I;25:IaZ97nBx9P9nqulMcL8IBQvOJttQQHvTUDZpjT2u7ylBiuLApWTxdZafoueKMAhW7XMPDlv++lTGCIb+m+TQt4IRyhX2ShwaaXaE46aieNKPU8r8YlOEjzMp/WipMLjIkXlNzSeLuhCs8/GoPoGp9793IdaQKEzxr8y67qj4TEbD+y5IqBGL9AasC5KMOqiAuPfc1kNvXPhVon4uf/k+kE5XsxNXo5K2jVf5KUjkoAMfyLmn1qboKFa2Mo3JkYr3O7bBN+ECZEAFPufcjdvEAYogB9LbzYBAthCDX3dpk2PEzLrfNhObFSwGAp5kEccdszzhdsNQ0xF4erE+QE8RQ19RxYW+Gh1oEx110cnwBNueWP4mryl0wa/SkMk+lrl3CG5NQZgQaKwwN5pGhEfa6xUYYgPrMoNnjEIxA9KLmLe71K8+U/eD0wTgSTT1l+CmWw1Jo5UHKAQsgzOlwdp53A== X-Microsoft-Exchange-Diagnostics: 1;HE1PR0202MB2554;31:NYoXSy9/3yRZ9Zb/kO4YiurSxA07u6/S9wuh+TVmrW4Jm1XpNl8S0sSuZ5ELUHJuQKiE9Jm92xAc1jxs5RnVUPzl7YD7m2ClRpRe64xkP4kwdjQTRxXGNP5fLuzOvfk4mzNDRwkz0IjRUhp/MquJHaCUkDW7N3Tb5RtUcnipNaMI/2Ib1HAUe8UocRg5Ap6vsNaOaK9WEJ7p6QLz5LQ58xsOYbrVoX+2gJUSYF1ZaOqgiAo2P/pxRxcKbkf663wOp9TWnj4SEADeFfeAQjZUuroeOc7BbfQ8kJh9rRzggZE= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040450)(601004)(2401047)(8121501046)(5005006)(10201501046)(93006095)(93001095)(3002001)(6041248)(20161123555025)(20161123564025)(2016111802025)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(20161123562025)(6043046)(6072148);SRVR:HE1PR0202MB2554;BCL:0;PCL:0;RULEID:;SRVR:HE1PR0202MB2554; X-Microsoft-Exchange-Diagnostics: 1;HE1PR0202MB2554;4:veOVTwhI0qY2tAgEn3ADH3mRC13i0Rq3iAVAuATqy2vLVfwwxr8Rpm5kJpdxxFsKSJoT/2urkRRxO6HUFAWU4yZOR7ucm+JCSiulPZTqt3RsH7L4tDH89o1mz5kq3+uw7V6CMvJc/dsu2vf1csOt8jSF5+yZpUE6THf/UEf4rjENX5wb5H6cM/5ftzGjGxXSiyiOLJ1ycsIsJMTVy+SSVTZZM//paOZqkPN8CYH54Oa8q9ks6l+jdiIE6VyEUk+qw42JKJWK1ZZwpgT3i2+1/GIdmRzxGex8qQEEf1+emfEWtbU8zq6wPb8btgUEjDjERycMRUR7qAVDLJWPO0CLQsKmvuZlSJgxI/LJJZ3y4C4h/rS3wNa9o5PDKQq7VZPInw3ZiN0WFJIcfT4bN2xgxgG+hFB3JBiqw5xxKvS2A3BvQAo31v7frKmHxesySQydpjjh2s+eA2M64BG0PLU++hDa6T9lUIZmsYfFOrFyiix8UIPL2X+c2DJHPP6BYBWJBo3r1wgel5nsuZRnG+F0rDosDzgBH/rNVpYUUVYEqNb9uU6+Qc7pO+Pz31DMcnl8MIlKXcDXbt0A/2ivzQ1Dt9YcJ9jwb2gjg6o9K379Q8bHd5Ijt9aQ50Kwkk27qPKmhCZfiWBzNWMqpYljQ/dfEr7xhDUxhdXJPfX2oSYY0mqazCSrbRSIxJf4igMmhwVdpEwDE6SzmJxruEHnyfRovu37qlri+KrRgrK2VSyigqMtV+8BGXMC5ArnlqePJPlvIqll2h+efHX2kB1wSf/VMA== X-Forefront-PRVS: 02843AA9E0 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(6049001)(39410400002)(39400400002)(39830400002)(39450400003)(377424004)(24454002)(117156002)(54906002)(64126003)(31686004)(50986999)(7736002)(8676002)(2950100002)(6666003)(53936002)(81166006)(6246003)(42186005)(6916009)(33646002)(54356999)(25786009)(4326008)(38730400002)(6486002)(77096006)(110136004)(93886004)(53546009)(76176999)(3260700006)(229853002)(74482002)(90366009)(8666007)(4001350100001)(66066001)(189998001)(50466002)(5660300001)(2906002)(83506001)(6116002)(36756003)(3846002)(86362001)(305945005)(47776003)(7416002)(230700001)(31696002)(23676002)(42262002);DIR:OUT;SFP:1102;SCL:1;SRVR:HE1PR0202MB2554;H:[192.168.0.125];FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtIRTFQUjAyMDJNQjI1NTQ7MjM6YWFTNGxBSkJGd2lQU1UwcURQRmgwamNK?= =?utf-8?B?UkkxUUNYNnUxSk0rNktHQ3JmTGR2VE02eHZiNWZTNVhpc2o0cDlmalMyRUJ5?= =?utf-8?B?Z0JOUFAvZm1td3MwWFFEa3poM1NLUWtjMTBQTHpvK0NDa3ZERkV0d09QWkRH?= =?utf-8?B?Vi9LR09CamdLR0YyV1J0QmNqelVVOTFnZkk3WXllc2JyZy9QZ25vUU5udk8z?= =?utf-8?B?OWVMcjBvQ3ZLQjlSTmcrODNWUlk5czlwMHRmM0YrMWZ6ZnZBMVAwbDlUcG1y?= =?utf-8?B?cUhXVlUrWVFwNkN1bXJ3RkNMVXRtRTJyTEVDQjV3clhncE1aVGpST1UxUTdF?= =?utf-8?B?QlZYMkRyTGZ2V0xEZ2NnWVNYY3NtWWd4WU1mZXRrb05JN1hhdnduRHcwZzNR?= =?utf-8?B?UnVXNy9hSkhNWElpRkNPOUt6dWhsZWVJbjFZZUZSSVhkNjNSczV1YXZCUk5L?= =?utf-8?B?a3A5ZnhESGhXc2c3eGlWNVZVRjRaOUhEQ1phczlkSTF2VWplN1lMZERaQ0NC?= =?utf-8?B?UmsrbTVnSHM2a2FTMUMza0Nham5OUFprMUNlYzJvS3dFYUJHcTFGWGp6QzJX?= =?utf-8?B?Q1ExZE9YaDR0ZEp0VEkvSTNVc05OSVJjL0FnYkpyeXZHRWNySzB5SjVZcmZG?= =?utf-8?B?UmlZYmEzVDhTamJCVFNSK2lQOFNHQjN1Qm5BdUNnK2RIemZwamNUS0R0ZVMx?= =?utf-8?B?ajhNYnlOKzhlUHgvdnBBZWRrOHBpV0FzNVRxZVB0L2tJU0NUdjFxK3lSNzh0?= =?utf-8?B?NW1vK3ErMkJ2TmxjcEgzK2F0STUveXBzQy9sWXllL0xsVFl6RDF6VTNUVFgr?= =?utf-8?B?M1BtNVltQVZHWkljbmNOVDdmT2ZQL1Z2Ynp2ZGpQU1VHUDE4cG1tSHRpOHJC?= =?utf-8?B?TUV0RXhXSGQvSFZMYUFHSnI1ajVVWEVYVTZSU0ZaVjBxdEFhcXkxTDJHejJh?= =?utf-8?B?ZkpmU1p1ZHlNUmYySWZYNnBTaDFkbElUdUdxUmNKN0JPR0pCRHJRcWpmWko3?= =?utf-8?B?c1BhSmE2dEJ5MzlPR2svdGw0UW11TVRNdWgxaDdjOUdueHlCVFZCV0psMjdC?= =?utf-8?B?T1U4ZVpPUSt2SUwrNEhtQ3ZRbU9lV3NHZFZ2aEJqOUwrdjRhRTl3aEJBaFM0?= =?utf-8?B?UlZjbktHeVhXZ1pNRmlUeU1nNDlJSW5WbkpJQzJvUkw3dU5YY1ZMOXdtcGxx?= =?utf-8?B?U0ZaajlsbnFqejNFa3VBREkyZW1mV3lDRmRkQWUydVoxbCt4bE9wOVkyblhS?= =?utf-8?B?NGZlNVp6ZmkvdWJ0WDNFQXZmMHZVQUswRmZvNXdBZzhhTGNTOFpYZWVUR1dD?= =?utf-8?B?ZnVhUkpjd3I1TUc0M2Rkb0lUMDN6YnpvWU9BeEJ4OUpCL2o1S2hXYmFiY1M5?= =?utf-8?B?MUZMTVJia1RHZ25WZk1HMmtmb0prMDYreDlUTWljQzR5ZHpFTmZiWnBjUWNO?= =?utf-8?B?a1ZoZ21sQnB0Q2FSbmtIWUZUQW1QQmxYaVJmd3dEWmRZRnVSek5Cd2ZWMU8z?= =?utf-8?B?THdiM0U3QUJncUlIc2p1b1kyMW9taGR5TUxnWHhzZzJFSEtkL29CY3Y3dURS?= =?utf-8?B?R3dpcStXajJCekF4VzF6VG9PMVFFSC9zVmJNdHEvTnQ3Vlh3WUM0V2MrelNX?= =?utf-8?B?eHZWTnMyN1YvMVpZWHJZUEVyZFNaQkdMa1JUNXFvSGQxUnNzSXVwaXJBRkIx?= =?utf-8?B?Wmp3eE5YOUJvR3FpdWRKK1lkSC9GZFh4d1R1TXlqMkhUUmlkSnZhV1RyTldI?= =?utf-8?B?RVhJUE9kRUxFMktwL3dDYVNxRU9iREkvTjJLaEFKZi9GREJWb0x5VzNyLzE3?= =?utf-8?B?emoxSytzWVhRYjN3dXBaTk5PSTROaEJHREl3WjVNTVdpdEw1MWhyamNZQUlm?= =?utf-8?Q?/pRZnWC4VN9t4=3D?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR0202MB2554;6:pw6yU3hZV60+JEICa3Suj6Em0BhSuQnU6+ZmgV2j3N1Q6E5VVSpc61pAOeAAVhhbkxhmADbziGAT6VVbBtVgHA/whzvHJuGxRLk/FtTdeHXh+wlYetwDOXVw5i75JFn44+wVQcgqtCjTy4DIo9jWYZJpzfRRqrUfMDB5neK+Dj+bmZTbhOoiOvTohUORs1vyTYZJRp4uG7axQULnkCmTTYbD41ykW6lJksIltDB6//L+99uV5Gp9zmjWdYOOxKmxhAUXMf8M1J1pMRNEDBjinjylHtKdUmkmilPxOSAgsXBl5thtcmeRdO/LIQFmcZ+BmCfFKX8ZmRmSgPOQaL/Q1dJWYuKOKL9kW7AMtwYK53Z7jMeKTzWWxI1Rkf/YovlaryID7EWsSGAKe1hokj1JXsl3hQRSCCVGaqClaZsqBRQrMjLSIMCI7JmUsBzmXIq5YAuxHbleIb37cIe1kbJvHm8Q2IKj2gcRw1HXRVtLuv70e3M7yP6JHDN6A1JsZ6WXj6Jwp8R5LtY8fgfUwNie1w==;5:uWXn51EYIPsE2YfSa4CecEMrCPiU31/jFevPw9dKRTJTwGkssSNKoN0LVxnykU+a+M49ohyk+fk1gPONHBgqJHhOKUxPvXZwbKYdqZus8s/Y0Vf5Hu1y9A/HdgaOdYYRFShQkuMvINh8I3QfmBoOsQ==;24:i329uBBmjs28/OGvNkO+foZoW9d0prC6lKIGhjP1ipRL40lHF0UundnmKJXcIXVwuIozuIgH72EJ9p7NZGdpt2U16a5GOeMthNEiUElalWE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;HE1PR0202MB2554;7:NeqBHd+RU53vCrMDXyOtAQ5u51yXeLHBhmSCkvIbSD/9+C3Xb+kSpt4kCUiMgnx6s0eTOLfvZZWbUSwffTK/oKQJAxi33cUztoThMBBYPbeCBTOCuY5k4Ll/qlyqJf2HksaXbN3nC8H5Khn7tuSiY0JSWACx3fXTAHpCTau85PrHkxp1ptGb7NNlHLuEVNWTW5qBJAfnGqjbAyckeT8QgxAdCx/x1t72ZBML2OXsS8Qlo5+xItDQpHP2CmNbT4bjirOTRMnMsAgl1Nx/ipnPd3JEHkz4mlncLz1H4CtEzzC5+NpUBwRTbJZ+jTLPPZE0Pa9MJ3iKKbUp4vkY2UcAiQ== X-OriginatorOrg: axentia.se X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Apr 2017 14:55:22.6662 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0202MB2554 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2017-04-21 16:41, Philipp Zabel wrote: > On Fri, 2017-04-21 at 16:32 +0200, Peter Rosin wrote: >> On 2017-04-21 16:23, Philipp Zabel wrote: >>> On Thu, 2017-04-13 at 18:43 +0200, Peter Rosin wrote: >>> [...] >>>> +int mux_chip_register(struct mux_chip *mux_chip) >>>> +{ >>>> + int i; >>>> + int ret; >>>> + >>>> + for (i = 0; i < mux_chip->controllers; ++i) { >>>> + struct mux_control *mux = &mux_chip->mux[i]; >>>> + >>>> + if (mux->idle_state == mux->cached_state) >>>> + continue; >>> >>> I think this should be changed to >>> >>> - if (mux->idle_state == mux->cached_state) >>> + if (mux->idle_state == mux->cached_state || >>> + mux->idle_state == MUX_IDLE_AS_IS) >>> continue; >>> >>> or the following mux_control_set will be called with state == >>> MUX_IDLE_AS_IS. Alternatively, mux_control_set should return when passed >>> this value. >> >> That cannot happen because ->cached_state is initialized to -1 >> in mux_chip_alloc, so should always be == MUX_IDLE_AS_IS when >> registering. And drivers are not supposed to touch ->cached_state. >> I.e., ->cached_state is "owned" by the core. > > So this was caused by me filling cached_state from register reads in the > mmio driver. Makes me wonder why I am not allowed to do this, though, if > I am able to read back the initial state? You gain fairly little by reading back the original state. If the mux should idle-as-is, you can avoid a maximum of one mux update if the first consumer happens to starts by requesting the previously active state. Similarly, if the mux should idle in a specific state, you can avoid a maximum of one mux update. In both cases it costs one unconditional read of the mux state. Sure, in some cases reads are cheaper than writes, but I didn't think support for seeding the cache was worth it. Is it worth it? Cheers, peda