From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 7B2F9C76195 for ; Mon, 27 Mar 2023 17:00:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:Subject:From:References:Cc: To:MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=kAQu9R1ONEigUmycyd2csJiLN1bvajQmxSEtixF2EKc=; b=umvKGYFS6a9i3D C4l5Hba2nMvbT7Aa7LiZzvcCFU4shWc+0QH8SakN4Btsig8pJB5WCVwxjHSv0jsEOBAc89bsqeK5G ShRbko4vavhdMw3tRDttL63p/gv/ySIQf0kmRhF62Vdn08iVlf+18/pMmUX7jqGhevdl3BIp0ntPw DaS6PqCylopm/kfUPoQlMwxjzp+G4XenKylvVLkgAAaQAYLiucE7c4e/18+EDFoz6/HKiz9+W/W3s 3eFCn1LJFZJLfsw3fipR7tqxVWeXcXMLPuD/sJ3FG64HQgswpnVmh97Echo8HXWysuMKLsGsI9f0J Nz6zldHqD0Flv4FbEtxg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1pgqD8-00Bny5-2h; Mon, 27 Mar 2023 17:00:46 +0000 Received: from mail-ed1-x533.google.com ([2a00:1450:4864:20::533]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1pgqD4-00BnxJ-2I; Mon, 27 Mar 2023 17:00:44 +0000 Received: by mail-ed1-x533.google.com with SMTP id ew6so38920912edb.7; Mon, 27 Mar 2023 10:00:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1679936441; h=content-transfer-encoding:in-reply-to:subject:from:references:cc:to :content-language:user-agent:mime-version:date:message-id:from:to:cc :subject:date:message-id:reply-to; bh=sPebmcGvKPuiIF1WigjecPK4Lynxv5uNfa44AS9EEuI=; b=Jg8AalIJn5rXKUDX5zwt+3bVouPsFckGcO+hxwbeXCqYTnlIXYre29u0UG6NXcMNea 6YbbPiv48FTGByPKduZ3y6BxTwn9oHOLNi5Dlgs8wzQrieKkXz0X7rqR6dhK/5LS0tyl IX6gEd95zh4Zv2SbtlKdM9UK5UI7RCGWMz4Hl32btFZwOvOhNWVBs6eO3Z3x52jHQBQ8 cwlhTqi/BrN4OnjTflZ1ZOxS/Ggv+JYYfbPiIXu08aEwEvwbad9AvSJNoNiDbCK+TmXy e11HJlTkZFk7NzWs2xZLNu2rCwNDBjujBxLvxdTp1m9PO+FrJV6CPpHLe/u7cmdSs/9q cpsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679936441; h=content-transfer-encoding:in-reply-to:subject:from:references:cc:to :content-language:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=sPebmcGvKPuiIF1WigjecPK4Lynxv5uNfa44AS9EEuI=; b=rdHc0xLN3LW5wYvYaA+rhiv8h4Nw8ejQfJyedm63Ab3p6v8QtBSo7v3gztsKirYPGo lZ/qTDd08vrdYxY3XVeGnAGGW3BHXqhMpKLz0X0e7oEbc0JNBXxxR5/utSNzguLOHGUz m4tp0PBjQrcnw8oXcsjEBeUXnn2AVjNKjkzH/AcE/kVmthEiGAOBqcvYynwSVxTgd0M0 EIZZz3Z2vd/XTZG6BhtXLxLEGnpYCZQsQuCb2eVw3Ccy+f1SBlh/eTFxkRG2vHbot/BA pqnPgF/8eTLTqUtk4PQCIXZ34Dm8MxfyHnp8rdh6L0Q0OIVlhzpNRkRNHsvCkucUIQia c+ag== X-Gm-Message-State: AAQBX9dd/98pBLJUp6OHztuTWbgBqUgBt5hpC2CSjO9ZuCLsHy1kONhF iJpm78ggHc6LGDURaCrZbIU0P8bEfZg= X-Google-Smtp-Source: AKy350aYlCm+pZrAYFjmv/DHFHxv9TEvq+ezeh0Z7s6CilpjJ/IyOtB/DMAoIxvTtDhf34zNaPWbGg== X-Received: by 2002:a17:906:e8c:b0:8b2:7564:dfd5 with SMTP id p12-20020a1709060e8c00b008b27564dfd5mr12765360ejf.60.1679936440657; Mon, 27 Mar 2023 10:00:40 -0700 (PDT) Received: from ?IPV6:2a02:3100:91f1:2a00:c022:d3da:60a9:9c00? (dynamic-2a02-3100-91f1-2a00-c022-d3da-60a9-9c00.310.pool.telefonica.de. [2a02:3100:91f1:2a00:c022:d3da:60a9:9c00]) by smtp.googlemail.com with ESMTPSA id h25-20020a1709063c1900b008e8e975e185sm14192054ejg.32.2023.03.27.10.00.39 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 27 Mar 2023 10:00:40 -0700 (PDT) Message-ID: <45dbd1d4-a2b8-af33-beec-64906c0e98da@gmail.com> Date: Mon, 27 Mar 2023 19:00:35 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.9.0 Content-Language: en-US To: neil.armstrong@linaro.org, "thierry.reding@gmail.com" , =?UTF-8?Q?Uwe_Kleine-K=c3=b6nig?= , Neil Armstrong , Kevin Hilman , Jerome Brunet , Martin Blumenstingl Cc: linux-pwm@vger.kernel.org, "linux-arm-kernel@lists.infradead.org" , "open list:ARM/Amlogic Meson..." References: <3492657f-6cc2-5828-b153-30c609a92783@linaro.org> From: Heiner Kallweit Subject: Re: [PATCH] pwm: meson: add support for S4 chip family In-Reply-To: <3492657f-6cc2-5828-b153-30c609a92783@linaro.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230327_100042_750344_B7B4CB68 X-CRM114-Status: GOOD ( 36.18 ) X-BeenThere: linux-amlogic@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org T24gMjcuMDMuMjAyMyAwOTozMywgTmVpbCBBcm1zdHJvbmcgd3JvdGU6Cj4gT24gMjQvMDMvMjAy MyAyMzoyMywgSGVpbmVyIEthbGx3ZWl0IHdyb3RlOgo+PiBUaGlzIGFkZHMgcHdtIHN1cHBvcnQg Zm9yIChhdCBsZWFzdCkgdGhlIHM0IGNoaXAgZmFtaWx5LiBUaGUgZXh0ZW5zaW9uCj4+IGlzIGJh c2VkIG9uIHRoZSB2ZW5kb3IgZHJpdmVyIHRoYXQgY2FuIGJlIGZvdW5kIGF0IFswXS4gVGhlcmUg dGhlCj4+IHZlcnNpb24gd2l0aCB0aGUgbmV3IGNsb2NrIGhhbmRsaW5nIGlzIGNhbGxlZCBtZXNv bi12Mi1wd20uCj4+IENlbnRyYWwgY2hhbmdlIGlzIHRoYXQgdGhlIGNsb2NrIGlzIG5vdyBmdWxs eSBwcm92aWRlZCBieSB0aGUgU29DIGNsb2NrCj4+IGNvcmUuIFRoZSBtdWx0aXBsZXhlciBpc24n dCBhbnkgbG9uZ2VyIHBhcnQgb2YgdGhlIHB3bSBibG9jay4KPj4KPj4gVGhpcyB3YXMgdGVzdGVk IG9uIGEgc2MyLWJhc2VkIHN5c3RlbSB0aGF0IHVzZXMgdGhlIHNhbWUgcHdtIGJsb2NrLgo+Pgo+ PiBbMF0gaHR0cHM6Ly9naXRodWIuY29tL2toYWRhcy9saW51eC9ibG9iL2toYWRhcy12aW1zLTUu NC55L2RyaXZlcnMvcHdtL3B3bS1tZXNvbi5jCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IEhlaW5lciBL YWxsd2VpdCA8aGthbGx3ZWl0MUBnbWFpbC5jb20+Cj4+IC0tLQo+PiBBZGRpbmcgdGhlIGFtbG9n aWMsbWVzb24tczQtcHdtIGNvbXBhdGlibGUgdG8gdGhlIGRvY3VtZW50YXRpb24gd2FzIHBhcnQK Pj4gb2YgdGhlIHlhbWwgY29udmVyc2lvbiBhbHJlYWR5Lgo+PiAtLS0KPj4gwqAgZHJpdmVycy9w d20vcHdtLW1lc29uLmMgfCAzOCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0t LQo+PiDCoCAxIGZpbGUgY2hhbmdlZCwgMzQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkK Pj4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHdtL3B3bS1tZXNvbi5jIGIvZHJpdmVycy9wd20v cHdtLW1lc29uLmMKPj4gaW5kZXggMTZkNzljYTVkLi43YTkzZmRhZGEgMTAwNjQ0Cj4+IC0tLSBh L2RyaXZlcnMvcHdtL3B3bS1tZXNvbi5jCj4+ICsrKyBiL2RyaXZlcnMvcHdtL3B3bS1tZXNvbi5j Cj4+IEBAIC05OCw2ICs5OCw3IEBAIHN0cnVjdCBtZXNvbl9wd21fY2hhbm5lbCB7Cj4+IMKgIHN0 cnVjdCBtZXNvbl9wd21fZGF0YSB7Cj4+IMKgwqDCoMKgwqAgY29uc3QgY2hhciAqIGNvbnN0ICpw YXJlbnRfbmFtZXM7Cj4+IMKgwqDCoMKgwqAgdW5zaWduZWQgaW50IG51bV9wYXJlbnRzOwo+PiAr wqDCoMKgIHVuc2lnbmVkIGludCBleHRfY2xrOjE7Cj4gCj4gRHJvcCB0aGUgOjEsIHRoZSBjb21w aWxlciB3aWxsIGFsaWduIHRoZSBzdHJ1Y3Qgc2l6ZSB0byB0aGUgcmVnaXN0ZXIgc2l6ZSwgc28g c2ltcGx5IHVzZSB1bnNpZ25lZCBpbnQgb3IgYm9vbC4KPiAKSGF2aW5nIG9uZSBmbGFnIG9ubHkg aXQgZG9lc24ndCByZWFsbHkgbWFrZSBhIGRpZmZlcmVuY2UsIHJpZ2h0LgpJIGNob3NlIHRoaXMg c2luZ2xlIGJpdCBiZWNhdXNlIGluIGZ1dHVyZSB0aGVyZSBtYXkgY29tZSBhbm90aGVyIGZsYWcs CnRoZW4gaGF2aW5nIHRoZW0gaW4gb25lIGJpdGZpZWxkIHdvdWxkIGJlIGFkdmFudGFnZW91cy4K CkFsc28gaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2Nv ZGluZy1zdHlsZS5yc3QKUGFydCAiMTcpIFVzaW5nIGJvb2wiIHByZWZlcnMgYml0cyBmb3IgYm9v bCB2YWx1ZXMgaW4gc3RydWN0cywgZXZlbiB0aG91Z2gKdGhlIG1lbnRpb25lZCB1c2UgY2FzZXMg bGlrZSBtdWx0aXBsZSBmbGFncyBkb24ndCBhcHBseSBoZXJlLgoKPiBJJ2QgdXNlIGEgYmV0dGVy IG5hbWUgZm9yIHRoYXQsIGxpa2U6IG5vX211eF9ibGssIHB3bV9jbGtfaW5wdXQuLi4uCj4gCk9L Cgo+PiDCoCB9Owo+PiDCoCDCoCBzdHJ1Y3QgbWVzb25fcHdtIHsKPj4gQEAgLTE1OCw2ICsxNTks NyBAQCBzdGF0aWMgaW50IG1lc29uX3B3bV9jYWxjKHN0cnVjdCBtZXNvbl9wd20gKm1lc29uLCBz dHJ1Y3QgcHdtX2RldmljZSAqcHdtLAo+PiDCoMKgwqDCoMKgIHN0cnVjdCBtZXNvbl9wd21fY2hh bm5lbCAqY2hhbm5lbCA9ICZtZXNvbi0+Y2hhbm5lbHNbcHdtLT5od3B3bV07Cj4+IMKgwqDCoMKg wqAgdW5zaWduZWQgaW50IGR1dHksIHBlcmlvZCwgcHJlX2RpdiwgY250LCBkdXR5X2NudDsKPj4g wqDCoMKgwqDCoCB1bnNpZ25lZCBsb25nIGZpbl9mcmVxOwo+PiArwqDCoMKgIGludCBlcnI7Cj4+ IMKgIMKgwqDCoMKgwqAgZHV0eSA9IHN0YXRlLT5kdXR5X2N5Y2xlOwo+PiDCoMKgwqDCoMKgIHBl cmlvZCA9IHN0YXRlLT5wZXJpb2Q7Cj4+IEBAIC0xNjUsNiArMTY3LDE0IEBAIHN0YXRpYyBpbnQg bWVzb25fcHdtX2NhbGMoc3RydWN0IG1lc29uX3B3bSAqbWVzb24sIHN0cnVjdCBwd21fZGV2aWNl ICpwd20sCj4+IMKgwqDCoMKgwqAgaWYgKHN0YXRlLT5wb2xhcml0eSA9PSBQV01fUE9MQVJJVFlf SU5WRVJTRUQpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBkdXR5ID0gcGVyaW9kIC0gZHV0eTsKPj4g wqAgK8KgwqDCoCBpZiAobWVzb24tPmRhdGEtPmV4dF9jbGspIHsKPj4gK8KgwqDCoMKgwqDCoMKg IGVyciA9IGNsa19zZXRfcmF0ZShjaGFubmVsLT5jbGssIDB4ZmZmZlVMICogTlNFQ19QRVJfU0VD IC8gcGVyaW9kKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChlcnIpIHsKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgZGV2X2VycihtZXNvbi0+Y2hpcC5kZXYsICJmYWlsZWQgdG8gc2V0IHB3bSBj bG9jayByYXRlXG4iKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGVycjsKPj4g K8KgwqDCoMKgwqDCoMKgIH0KPiAKPiBJZiB0aGUgc2FtZSBNVVggYXJjaGl0ZWN0dXJlIGhhcyBi ZWVuIG1vdmVkIG91dCBvZiB0aGUgUFdNIHJlZ2lzdGVycywgdGhlbiB3aHkgd291bGQgeW91IGNh bGwKPiBzZXRfcmF0ZSA/IHdlIGRvbid0IGNhbGwgc2V0X3JhdGUgdG9kYXksIHNvIHdoeSBzaG91 bGQgd2UgPwo+IAo+IFRvZGF5IHRoZSBNVVggc2VsZWN0aW9uIGlzIHN0YXRpYyBkZXBlbmRpbmcg b24gdGhlIGNsayBuYW1lcyBzcGVjaWZpZWQgaW4gdGhlIGJpbmRpbmdzICh5ZXMgaXQncwo+IHJl YWxseSBub3QgdGhlIGdvb2Qgd2F5IHRvIGRvIHRoYXQsLi4uLikgYnV0IG5vdyB0aGUgTVVYIGlz IG91dHNpZGUgdGhlIFBXTSByZWdpc3RlcnMgYmxvY2sKPiB3ZSBzaG91bGQgc3RpY2sgdG8gdGhl IHNhbWUgYXJjaGl0ZWN0dXJlIGFuZCBtYXJrIHRoZSBNVVggYXMgTk9fUkVQQVJFTlQgYW5kIGlu c3RlYWQgb2YgdXNpbmcKPiBhIGJhZCBiaW5kaW5ncyBzcGVjaWZ5IHRoZSBNVVggcGFyZW50ICYg cmF0ZSBpbiBkdCB1c2luZyBhc3NpZ25lZC1jbGstcGFyZW50L3JhdGUuCj4gCj4gU28gcGxlYXNl IGRyb3AgdGhpcyBzZXRfcmF0ZSgpLgo+IApJbXBsaWNpdGx5IHRoZXJlJ3MgYSBzZXRfcmF0ZSgp IGFsc28gdG9kYXksIGJ5IHNldHRpbmcgdGhlIHByZV9kaXYgZGl2aWRlciB2YWx1ZS4KQnkgdGhl IHdheTogTm90IHN1cmUgd2h5IHRoZSBkaXZpZGVyIGlzbid0IGhhbmRsZWQgdmlhIENDRiwgbGlr ZSBlLmcuIGluIG1lc29uLWd4LW1tYy4KClRoZSBiZXN0IChmb3IgYWNoaWV2aW5nIGJlc3QgcHJl Y2lzaW9uKSBpbnB1dCBmcmVxdWVuY3kgaXMgMHhmZmZmIC8gcGVyaW9kLgpTbyB3ZSBzaG91bGQg ZG8gb3VyIGJlc3QgdG8gY29tZSBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB0aGlzIGZyZXF1ZW5j eS4KQnkgdXNpbmcgc2V0X3JhdGUoKSBDQ0Ygd2lsbCBjaG9vc2UgdGhlIG9wdGltYWwgbXV4IGlu cHV0IGFuZCBkaXZpZGVyIHZhbHVlLgpOb3Qgc3VyZSB3aHkgd2Ugc2hvdWxkIHJlc3RyaWN0IG91 cnNlbHZlcyB0byBvbmUgbXV4IHBhcmVudCBvbmx5LgpFLmcuIGZvciBhIHZlcnkgbG93IGR1dHkg Y3ljbGUgYSBoaWdoZXIgaW5wdXQgZnJlcXVlbmN5IHRoYW4gdGhlIHh0YWwgMjRNSHogbWF5IGJl IHByZWZlcmFibGUuCgpOb3Qgb25seSB0aGUgbXV4IGlzIG91dHNpZGUgdGhlIFBXTSBibG9jayBu b3csIGFsc28gdGhlIGRpdmlkZXIgKDggYml0IHdpZGUgaW5zdGVhZCBvZiA3IGJpdAphcyBvZiB0 b2RheSkuIFNvIHdlIG5lZWQgYSBzZXRfcmF0ZSgpIGFueXdheSB0byBzZXQgdGhlIGRpdmlkZXIg dmFsdWUuCldoYXQgSSBjYW4ndCBzYXkgaXMgd2hldGhlciB0aGUgaW50ZXJuYWwgZGl2aWRlciBz dGlsbCBleGlzdHMgKHRoZW4gZXh0ZXJuYWwgYW5kIGludGVybmFsCmRpdmlkZXIgd291bGQgYmUg Y2FzY2FkZWQpIG9yIGlzIHJlbW92ZWQgb3IgYnlwYXNzZWQuCkl0IHNlZW1zIGxpa2Ugd2hlbiBh ZGRpbmcgdGhlIGV4dGVybmFsIFBXTSBjbG9jayBmZWF0dXJlIEFtbG9naWMgZm9yZ290IHRvIHVw ZGF0ZQp0aGUgUFdNIGJsb2NrIGRvY3VtZW50YXRpb24sIGFzIHRoZXJlJ3Mgbm8gcmVmZXJlbmNl IGF0IGFsbCB0byB0aGUgbm93IGV4dGVybmFsIGlucHV0IGNsb2NrCihleGNlcHQgaW4gdGhlIGNs b2NrcyBzZWN0aW9uKS4KCj4+ICvCoMKgwqAgfQo+PiArCj4+IMKgwqDCoMKgwqAgZmluX2ZyZXEg PSBjbGtfZ2V0X3JhdGUoY2hhbm5lbC0+Y2xrKTsKPj4gwqDCoMKgwqDCoCBpZiAoZmluX2ZyZXEg PT0gMCkgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X2VycihtZXNvbi0+Y2hpcC5kZXYsICJp bnZhbGlkIHNvdXJjZSBjbG9jayBmcmVxdWVuY3lcbiIpOwo+PiBAQCAtMTczLDEwICsxODMsMTQg QEAgc3RhdGljIGludCBtZXNvbl9wd21fY2FsYyhzdHJ1Y3QgbWVzb25fcHdtICptZXNvbiwgc3Ry dWN0IHB3bV9kZXZpY2UgKnB3bSwKPj4gwqAgwqDCoMKgwqDCoCBkZXZfZGJnKG1lc29uLT5jaGlw LmRldiwgImZpbl9mcmVxOiAlbHUgSHpcbiIsIGZpbl9mcmVxKTsKPj4gwqAgLcKgwqDCoCBwcmVf ZGl2ID0gZGl2NjRfdTY0KGZpbl9mcmVxICogKHU2NClwZXJpb2QsIE5TRUNfUEVSX1NFQyAqIDB4 ZmZmZkxMKTsKPj4gLcKgwqDCoCBpZiAocHJlX2RpdiA+IE1JU0NfQ0xLX0RJVl9NQVNLKSB7Cj4+ IC3CoMKgwqDCoMKgwqDCoCBkZXZfZXJyKG1lc29uLT5jaGlwLmRldiwgInVuYWJsZSB0byBnZXQg cGVyaW9kIHByZV9kaXZcbiIpOwo+PiAtwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+ ICvCoMKgwqAgaWYgKG1lc29uLT5kYXRhLT5leHRfY2xrKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBw cmVfZGl2ID0gMDsKPj4gK8KgwqDCoCB9IGVsc2Ugewo+PiArwqDCoMKgwqDCoMKgwqAgcHJlX2Rp diA9IGRpdjY0X3U2NChmaW5fZnJlcSAqICh1NjQpcGVyaW9kLCBOU0VDX1BFUl9TRUMgKiAweGZm ZmZMTCk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocHJlX2RpdiA+IE1JU0NfQ0xLX0RJVl9NQVNL KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRldl9lcnIobWVzb24tPmNoaXAuZGV2LCAi dW5hYmxlIHRvIGdldCBwZXJpb2QgcHJlX2RpdlxuIik7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHJldHVybiAtRUlOVkFMOwo+PiArwqDCoMKgwqDCoMKgwqAgfQo+PiDCoMKgwqDCoMKgIH0K Pj4gwqAgwqDCoMKgwqDCoCBjbnQgPSBkaXY2NF91NjQoZmluX2ZyZXEgKiAodTY0KXBlcmlvZCwg TlNFQ19QRVJfU0VDICogKHByZV9kaXYgKyAxKSk7Cj4+IEBAIC00NDUsNiArNDU5LDEwIEBAIHN0 YXRpYyBjb25zdCBzdHJ1Y3QgbWVzb25fcHdtX2RhdGEgcHdtX2cxMmFfZWVfZGF0YSA9IHsKPj4g wqDCoMKgwqDCoCAubnVtX3BhcmVudHMgPSBBUlJBWV9TSVpFKHB3bV9nMTJhX2VlX3BhcmVudF9u YW1lcyksCj4+IMKgIH07Cj4+IMKgICtzdGF0aWMgY29uc3Qgc3RydWN0IG1lc29uX3B3bV9kYXRh IHB3bV9zNF9kYXRhID0gewo+PiArwqDCoMKgIC5leHRfY2xrID0gMSwKPj4gK307Cj4+ICsKPj4g wqAgc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWVzb25fcHdtX21hdGNoZXNbXSA9 IHsKPj4gwqDCoMKgwqDCoCB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCAuY29tcGF0aWJsZSA9ICJh bWxvZ2ljLG1lc29uOGItcHdtIiwKPj4gQEAgLTQ3OCw2ICs0OTYsMTAgQEAgc3RhdGljIGNvbnN0 IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWVzb25fcHdtX21hdGNoZXNbXSA9IHsKPj4gwqDCoMKgwqDC oMKgwqDCoMKgIC5jb21wYXRpYmxlID0gImFtbG9naWMsbWVzb24tZzEyYS1hby1wd20tY2QiLAo+ PiDCoMKgwqDCoMKgwqDCoMKgwqAgLmRhdGEgPSAmcHdtX2cxMmFfYW9fY2RfZGF0YQo+PiDCoMKg wqDCoMKgIH0sCj4+ICvCoMKgwqAgewo+PiArwqDCoMKgwqDCoMKgwqAgLmNvbXBhdGlibGUgPSAi YW1sb2dpYyxtZXNvbi1zNC1wd20iLAo+IAo+IFRoaXMgZGVzZXJ2ZWQgYSBiaW5kaW5ncyB1cGRh dGUsIGFuZCB3ZSBzaG91bGQgcGVyaGFwcyBzdGFydCBhIG5ldyBiaW5kaW5ncyBieSB1c2luZwo+ IG5ldyBjbG9jay1uYW1lcyAoIT0gY2xraW4wLzEpIHRvIGRpZmZlcmVudGlhdGUgZnJvbSB0aGUg b2xkIGJ1Z2d5IGJpbmRpbmdzLgo+IApXZSBjb3VsZCBzaW1wbHkgbmFtZSB0aGUgY2xvY2tzIHB3 bV9hLCBwd21fYi4gSWYgeW91IHRoaW5rIHRoaXMgY291bGQgYmUgY29uZnVzaW5nCmZvciBwd20g UFdNX0MvUFdNX0QsIHRoZW4gd2UgbWF5IHVzZSBwd20wIGFuZCBwd20xLgoKVGhlIGNoYW5nZWQg YmluZGluZyB3b3VsZCBoYXZlIHRvIHJlZmxlY3QgdGhhdCBub3cgYm90aCBpbnB1dCBjbG9ja3Mg Zm9yIGEgcHdtCmFyZSByZXF1aXJlZC4KCj4gTmVpbAo+IAo+PiArwqDCoMKgwqDCoMKgwqAgLmRh dGEgPSAmcHdtX3M0X2RhdGEKPj4gK8KgwqDCoCB9LAo+PiDCoMKgwqDCoMKgIHt9LAo+PiDCoCB9 Owo+PiDCoCBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtZXNvbl9wd21fbWF0Y2hlcyk7Cj4+IEBA IC00OTMsNiArNTE1LDE0IEBAIHN0YXRpYyBpbnQgbWVzb25fcHdtX2luaXRfY2hhbm5lbHMoc3Ry dWN0IG1lc29uX3B3bSAqbWVzb24pCj4+IMKgwqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IG1lc29u LT5jaGlwLm5wd207IGkrKykgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IG1lc29uX3B3 bV9jaGFubmVsICpjaGFubmVsID0gJm1lc29uLT5jaGFubmVsc1tpXTsKPj4gwqAgK8KgwqDCoMKg wqDCoMKgIGlmIChtZXNvbi0+ZGF0YS0+ZXh0X2Nsaykgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJjbGtpbiV1IiwgaSk7Cj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGNoYW5uZWwtPmNsayA9IGRldm1fY2xrX2dldChkZXYsIG5hbWUp Owo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoSVNfRVJSKGNoYW5uZWwtPmNsaykpCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIFBUUl9FUlIoY2hhbm5lbC0+ Y2xrKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29udGludWU7Cj4+ICvCoMKgwqDCoMKg wqDCoCB9Cj4+ICsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHNucHJpbnRmKG5hbWUsIHNpemVvZihu YW1lKSwgIiVzI211eCV1IiwgZGV2X25hbWUoZGV2KSwgaSk7Cj4+IMKgIMKgwqDCoMKgwqDCoMKg wqDCoCBpbml0Lm5hbWUgPSBuYW1lOwo+IAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmxpbnV4LWFtbG9naWMgbWFpbGluZyBsaXN0CmxpbnV4LWFtbG9n aWNAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2xpbnV4LWFtbG9naWMK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7A7FFC76195 for ; Mon, 27 Mar 2023 17:00:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229692AbjC0RAo (ORCPT ); Mon, 27 Mar 2023 13:00:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50918 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229751AbjC0RAn (ORCPT ); Mon, 27 Mar 2023 13:00:43 -0400 Received: from mail-ed1-x52d.google.com (mail-ed1-x52d.google.com [IPv6:2a00:1450:4864:20::52d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5CD1C30E3 for ; Mon, 27 Mar 2023 10:00:42 -0700 (PDT) Received: by mail-ed1-x52d.google.com with SMTP id y4so39066498edo.2 for ; Mon, 27 Mar 2023 10:00:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1679936441; h=content-transfer-encoding:in-reply-to:subject:from:references:cc:to :content-language:user-agent:mime-version:date:message-id:from:to:cc :subject:date:message-id:reply-to; bh=sPebmcGvKPuiIF1WigjecPK4Lynxv5uNfa44AS9EEuI=; b=Jg8AalIJn5rXKUDX5zwt+3bVouPsFckGcO+hxwbeXCqYTnlIXYre29u0UG6NXcMNea 6YbbPiv48FTGByPKduZ3y6BxTwn9oHOLNi5Dlgs8wzQrieKkXz0X7rqR6dhK/5LS0tyl IX6gEd95zh4Zv2SbtlKdM9UK5UI7RCGWMz4Hl32btFZwOvOhNWVBs6eO3Z3x52jHQBQ8 cwlhTqi/BrN4OnjTflZ1ZOxS/Ggv+JYYfbPiIXu08aEwEvwbad9AvSJNoNiDbCK+TmXy e11HJlTkZFk7NzWs2xZLNu2rCwNDBjujBxLvxdTp1m9PO+FrJV6CPpHLe/u7cmdSs/9q cpsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679936441; h=content-transfer-encoding:in-reply-to:subject:from:references:cc:to :content-language:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=sPebmcGvKPuiIF1WigjecPK4Lynxv5uNfa44AS9EEuI=; b=b6R0ohVWsCo8xCcQMVVykYlPf/HujxNtZIbeJMulDdxQ4nPd1T5DY0KuJfREi2YKZM yIuw/zqkO32ZuzLWtyKTFTJ4asJuvWhq2P/KZXf4mZbbhUgPhJC9YmcbIAeyNJRXmZLX +ZCtuhMLdLmTWKRuaNZjwCIUFLNu+Mtra0/7F96daZNjCqOxmgqpg4PkrMs8JeC3fiSt vPkMpuB0Y3ZRnprA9mdobXyGDhgmDS7l5xig1+xS37g4ahv9yMl9xp0D6hdjxYlzVxCm ttGgN9YqGte714ZRm8CH2v6IzWJuVw33aKElnNP8F/Gxoc+n36FIETxhwW83ybQfKWN/ VHFQ== X-Gm-Message-State: AAQBX9dsU0QPnjvyLBpne7qkS7vAiw3fdpHpbHihEiOm6eRlYx5GaPEJ xMGKchNqS9psHY8sT73IceE= X-Google-Smtp-Source: AKy350aYlCm+pZrAYFjmv/DHFHxv9TEvq+ezeh0Z7s6CilpjJ/IyOtB/DMAoIxvTtDhf34zNaPWbGg== X-Received: by 2002:a17:906:e8c:b0:8b2:7564:dfd5 with SMTP id p12-20020a1709060e8c00b008b27564dfd5mr12765360ejf.60.1679936440657; Mon, 27 Mar 2023 10:00:40 -0700 (PDT) Received: from ?IPV6:2a02:3100:91f1:2a00:c022:d3da:60a9:9c00? (dynamic-2a02-3100-91f1-2a00-c022-d3da-60a9-9c00.310.pool.telefonica.de. [2a02:3100:91f1:2a00:c022:d3da:60a9:9c00]) by smtp.googlemail.com with ESMTPSA id h25-20020a1709063c1900b008e8e975e185sm14192054ejg.32.2023.03.27.10.00.39 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 27 Mar 2023 10:00:40 -0700 (PDT) Message-ID: <45dbd1d4-a2b8-af33-beec-64906c0e98da@gmail.com> Date: Mon, 27 Mar 2023 19:00:35 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.9.0 Content-Language: en-US To: neil.armstrong@linaro.org, "thierry.reding@gmail.com" , =?UTF-8?Q?Uwe_Kleine-K=c3=b6nig?= , Neil Armstrong , Kevin Hilman , Jerome Brunet , Martin Blumenstingl Cc: linux-pwm@vger.kernel.org, "linux-arm-kernel@lists.infradead.org" , "open list:ARM/Amlogic Meson..." References: <3492657f-6cc2-5828-b153-30c609a92783@linaro.org> From: Heiner Kallweit Subject: Re: [PATCH] pwm: meson: add support for S4 chip family In-Reply-To: <3492657f-6cc2-5828-b153-30c609a92783@linaro.org> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-pwm@vger.kernel.org On 27.03.2023 09:33, Neil Armstrong wrote: > On 24/03/2023 23:23, Heiner Kallweit wrote: >> This adds pwm support for (at least) the s4 chip family. The extension >> is based on the vendor driver that can be found at [0]. There the >> version with the new clock handling is called meson-v2-pwm. >> Central change is that the clock is now fully provided by the SoC clock >> core. The multiplexer isn't any longer part of the pwm block. >> >> This was tested on a sc2-based system that uses the same pwm block. >> >> [0] https://github.com/khadas/linux/blob/khadas-vims-5.4.y/drivers/pwm/pwm-meson.c >> >> Signed-off-by: Heiner Kallweit >> --- >> Adding the amlogic,meson-s4-pwm compatible to the documentation was part >> of the yaml conversion already. >> --- >>   drivers/pwm/pwm-meson.c | 38 ++++++++++++++++++++++++++++++++++---- >>   1 file changed, 34 insertions(+), 4 deletions(-) >> >> diff --git a/drivers/pwm/pwm-meson.c b/drivers/pwm/pwm-meson.c >> index 16d79ca5d..7a93fdada 100644 >> --- a/drivers/pwm/pwm-meson.c >> +++ b/drivers/pwm/pwm-meson.c >> @@ -98,6 +98,7 @@ struct meson_pwm_channel { >>   struct meson_pwm_data { >>       const char * const *parent_names; >>       unsigned int num_parents; >> +    unsigned int ext_clk:1; > > Drop the :1, the compiler will align the struct size to the register size, so simply use unsigned int or bool. > Having one flag only it doesn't really make a difference, right. I chose this single bit because in future there may come another flag, then having them in one bitfield would be advantageous. Also https://www.kernel.org/doc/Documentation/process/coding-style.rst Part "17) Using bool" prefers bits for bool values in structs, even though the mentioned use cases like multiple flags don't apply here. > I'd use a better name for that, like: no_mux_blk, pwm_clk_input.... > OK >>   }; >>     struct meson_pwm { >> @@ -158,6 +159,7 @@ static int meson_pwm_calc(struct meson_pwm *meson, struct pwm_device *pwm, >>       struct meson_pwm_channel *channel = &meson->channels[pwm->hwpwm]; >>       unsigned int duty, period, pre_div, cnt, duty_cnt; >>       unsigned long fin_freq; >> +    int err; >>         duty = state->duty_cycle; >>       period = state->period; >> @@ -165,6 +167,14 @@ static int meson_pwm_calc(struct meson_pwm *meson, struct pwm_device *pwm, >>       if (state->polarity == PWM_POLARITY_INVERSED) >>           duty = period - duty; >>   +    if (meson->data->ext_clk) { >> +        err = clk_set_rate(channel->clk, 0xffffUL * NSEC_PER_SEC / period); >> +        if (err) { >> +            dev_err(meson->chip.dev, "failed to set pwm clock rate\n"); >> +            return err; >> +        } > > If the same MUX architecture has been moved out of the PWM registers, then why would you call > set_rate ? we don't call set_rate today, so why should we ? > > Today the MUX selection is static depending on the clk names specified in the bindings (yes it's > really not the good way to do that,....) but now the MUX is outside the PWM registers block > we should stick to the same architecture and mark the MUX as NO_REPARENT and instead of using > a bad bindings specify the MUX parent & rate in dt using assigned-clk-parent/rate. > > So please drop this set_rate(). > Implicitly there's a set_rate() also today, by setting the pre_div divider value. By the way: Not sure why the divider isn't handled via CCF, like e.g. in meson-gx-mmc. The best (for achieving best precision) input frequency is 0xffff / period. So we should do our best to come as close as possible to this frequency. By using set_rate() CCF will choose the optimal mux input and divider value. Not sure why we should restrict ourselves to one mux parent only. E.g. for a very low duty cycle a higher input frequency than the xtal 24MHz may be preferable. Not only the mux is outside the PWM block now, also the divider (8 bit wide instead of 7 bit as of today). So we need a set_rate() anyway to set the divider value. What I can't say is whether the internal divider still exists (then external and internal divider would be cascaded) or is removed or bypassed. It seems like when adding the external PWM clock feature Amlogic forgot to update the PWM block documentation, as there's no reference at all to the now external input clock (except in the clocks section). >> +    } >> + >>       fin_freq = clk_get_rate(channel->clk); >>       if (fin_freq == 0) { >>           dev_err(meson->chip.dev, "invalid source clock frequency\n"); >> @@ -173,10 +183,14 @@ static int meson_pwm_calc(struct meson_pwm *meson, struct pwm_device *pwm, >>         dev_dbg(meson->chip.dev, "fin_freq: %lu Hz\n", fin_freq); >>   -    pre_div = div64_u64(fin_freq * (u64)period, NSEC_PER_SEC * 0xffffLL); >> -    if (pre_div > MISC_CLK_DIV_MASK) { >> -        dev_err(meson->chip.dev, "unable to get period pre_div\n"); >> -        return -EINVAL; >> +    if (meson->data->ext_clk) { >> +        pre_div = 0; >> +    } else { >> +        pre_div = div64_u64(fin_freq * (u64)period, NSEC_PER_SEC * 0xffffLL); >> +        if (pre_div > MISC_CLK_DIV_MASK) { >> +            dev_err(meson->chip.dev, "unable to get period pre_div\n"); >> +            return -EINVAL; >> +        } >>       } >>         cnt = div64_u64(fin_freq * (u64)period, NSEC_PER_SEC * (pre_div + 1)); >> @@ -445,6 +459,10 @@ static const struct meson_pwm_data pwm_g12a_ee_data = { >>       .num_parents = ARRAY_SIZE(pwm_g12a_ee_parent_names), >>   }; >>   +static const struct meson_pwm_data pwm_s4_data = { >> +    .ext_clk = 1, >> +}; >> + >>   static const struct of_device_id meson_pwm_matches[] = { >>       { >>           .compatible = "amlogic,meson8b-pwm", >> @@ -478,6 +496,10 @@ static const struct of_device_id meson_pwm_matches[] = { >>           .compatible = "amlogic,meson-g12a-ao-pwm-cd", >>           .data = &pwm_g12a_ao_cd_data >>       }, >> +    { >> +        .compatible = "amlogic,meson-s4-pwm", > > This deserved a bindings update, and we should perhaps start a new bindings by using > new clock-names (!= clkin0/1) to differentiate from the old buggy bindings. > We could simply name the clocks pwm_a, pwm_b. If you think this could be confusing for pwm PWM_C/PWM_D, then we may use pwm0 and pwm1. The changed binding would have to reflect that now both input clocks for a pwm are required. > Neil > >> +        .data = &pwm_s4_data >> +    }, >>       {}, >>   }; >>   MODULE_DEVICE_TABLE(of, meson_pwm_matches); >> @@ -493,6 +515,14 @@ static int meson_pwm_init_channels(struct meson_pwm *meson) >>       for (i = 0; i < meson->chip.npwm; i++) { >>           struct meson_pwm_channel *channel = &meson->channels[i]; >>   +        if (meson->data->ext_clk) { >> +            snprintf(name, sizeof(name), "clkin%u", i); >> +            channel->clk = devm_clk_get(dev, name); >> +            if (IS_ERR(channel->clk)) >> +                return PTR_ERR(channel->clk); >> +            continue; >> +        } >> + >>           snprintf(name, sizeof(name), "%s#mux%u", dev_name(dev), i); >>             init.name = name; > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id BDF64C76195 for ; Mon, 27 Mar 2023 17:02:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:Subject:From:References:Cc: To:MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Ms3zk9LBo817cYoWxI6BQ3EPVdYCz9wDBom0TUL1KD4=; b=C4sX/6NPjedH99 5HOUFHy0xx5JoNiPsLuRzbAaxsD51yxPKZ2yQvcqGQ42IdFLHdMGZUQh3CnFOMsjNfFFNEq9tM1QA FnQwxLA3nIK41KvCXWHlS4gvvOh1YXiOKgIaKVlPf5MaNNmbFy58CSkeAgmWhquyoxeYg9aUbKlgX 5EYh0Rt+u9Pq2bDNBnKJpRG3vfXrJJ7jiyhJwsSPLqS0+QWeqVJQXnySFprO8c/RCt0Rx71QlSCtA 3e0J6AG4fEwO/iNv6ZjvA7SSY1CnDeCD58cC544DlT0z5jklBP98X9UpeiIDz+5XMFG3VQEdpEYIf Xg2b0oKxX/Dw9mgUxhpA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1pgqD7-00Bnxw-2x; Mon, 27 Mar 2023 17:00:45 +0000 Received: from mail-ed1-x533.google.com ([2a00:1450:4864:20::533]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1pgqD4-00BnxJ-2I; Mon, 27 Mar 2023 17:00:44 +0000 Received: by mail-ed1-x533.google.com with SMTP id ew6so38920912edb.7; Mon, 27 Mar 2023 10:00:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1679936441; h=content-transfer-encoding:in-reply-to:subject:from:references:cc:to :content-language:user-agent:mime-version:date:message-id:from:to:cc :subject:date:message-id:reply-to; bh=sPebmcGvKPuiIF1WigjecPK4Lynxv5uNfa44AS9EEuI=; b=Jg8AalIJn5rXKUDX5zwt+3bVouPsFckGcO+hxwbeXCqYTnlIXYre29u0UG6NXcMNea 6YbbPiv48FTGByPKduZ3y6BxTwn9oHOLNi5Dlgs8wzQrieKkXz0X7rqR6dhK/5LS0tyl IX6gEd95zh4Zv2SbtlKdM9UK5UI7RCGWMz4Hl32btFZwOvOhNWVBs6eO3Z3x52jHQBQ8 cwlhTqi/BrN4OnjTflZ1ZOxS/Ggv+JYYfbPiIXu08aEwEvwbad9AvSJNoNiDbCK+TmXy e11HJlTkZFk7NzWs2xZLNu2rCwNDBjujBxLvxdTp1m9PO+FrJV6CPpHLe/u7cmdSs/9q cpsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679936441; h=content-transfer-encoding:in-reply-to:subject:from:references:cc:to :content-language:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=sPebmcGvKPuiIF1WigjecPK4Lynxv5uNfa44AS9EEuI=; b=rdHc0xLN3LW5wYvYaA+rhiv8h4Nw8ejQfJyedm63Ab3p6v8QtBSo7v3gztsKirYPGo lZ/qTDd08vrdYxY3XVeGnAGGW3BHXqhMpKLz0X0e7oEbc0JNBXxxR5/utSNzguLOHGUz m4tp0PBjQrcnw8oXcsjEBeUXnn2AVjNKjkzH/AcE/kVmthEiGAOBqcvYynwSVxTgd0M0 EIZZz3Z2vd/XTZG6BhtXLxLEGnpYCZQsQuCb2eVw3Ccy+f1SBlh/eTFxkRG2vHbot/BA pqnPgF/8eTLTqUtk4PQCIXZ34Dm8MxfyHnp8rdh6L0Q0OIVlhzpNRkRNHsvCkucUIQia c+ag== X-Gm-Message-State: AAQBX9dd/98pBLJUp6OHztuTWbgBqUgBt5hpC2CSjO9ZuCLsHy1kONhF iJpm78ggHc6LGDURaCrZbIU0P8bEfZg= X-Google-Smtp-Source: AKy350aYlCm+pZrAYFjmv/DHFHxv9TEvq+ezeh0Z7s6CilpjJ/IyOtB/DMAoIxvTtDhf34zNaPWbGg== X-Received: by 2002:a17:906:e8c:b0:8b2:7564:dfd5 with SMTP id p12-20020a1709060e8c00b008b27564dfd5mr12765360ejf.60.1679936440657; Mon, 27 Mar 2023 10:00:40 -0700 (PDT) Received: from ?IPV6:2a02:3100:91f1:2a00:c022:d3da:60a9:9c00? (dynamic-2a02-3100-91f1-2a00-c022-d3da-60a9-9c00.310.pool.telefonica.de. [2a02:3100:91f1:2a00:c022:d3da:60a9:9c00]) by smtp.googlemail.com with ESMTPSA id h25-20020a1709063c1900b008e8e975e185sm14192054ejg.32.2023.03.27.10.00.39 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 27 Mar 2023 10:00:40 -0700 (PDT) Message-ID: <45dbd1d4-a2b8-af33-beec-64906c0e98da@gmail.com> Date: Mon, 27 Mar 2023 19:00:35 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.9.0 Content-Language: en-US To: neil.armstrong@linaro.org, "thierry.reding@gmail.com" , =?UTF-8?Q?Uwe_Kleine-K=c3=b6nig?= , Neil Armstrong , Kevin Hilman , Jerome Brunet , Martin Blumenstingl Cc: linux-pwm@vger.kernel.org, "linux-arm-kernel@lists.infradead.org" , "open list:ARM/Amlogic Meson..." References: <3492657f-6cc2-5828-b153-30c609a92783@linaro.org> From: Heiner Kallweit Subject: Re: [PATCH] pwm: meson: add support for S4 chip family In-Reply-To: <3492657f-6cc2-5828-b153-30c609a92783@linaro.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230327_100042_750344_B7B4CB68 X-CRM114-Status: GOOD ( 36.18 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gMjcuMDMuMjAyMyAwOTozMywgTmVpbCBBcm1zdHJvbmcgd3JvdGU6Cj4gT24gMjQvMDMvMjAy MyAyMzoyMywgSGVpbmVyIEthbGx3ZWl0IHdyb3RlOgo+PiBUaGlzIGFkZHMgcHdtIHN1cHBvcnQg Zm9yIChhdCBsZWFzdCkgdGhlIHM0IGNoaXAgZmFtaWx5LiBUaGUgZXh0ZW5zaW9uCj4+IGlzIGJh c2VkIG9uIHRoZSB2ZW5kb3IgZHJpdmVyIHRoYXQgY2FuIGJlIGZvdW5kIGF0IFswXS4gVGhlcmUg dGhlCj4+IHZlcnNpb24gd2l0aCB0aGUgbmV3IGNsb2NrIGhhbmRsaW5nIGlzIGNhbGxlZCBtZXNv bi12Mi1wd20uCj4+IENlbnRyYWwgY2hhbmdlIGlzIHRoYXQgdGhlIGNsb2NrIGlzIG5vdyBmdWxs eSBwcm92aWRlZCBieSB0aGUgU29DIGNsb2NrCj4+IGNvcmUuIFRoZSBtdWx0aXBsZXhlciBpc24n dCBhbnkgbG9uZ2VyIHBhcnQgb2YgdGhlIHB3bSBibG9jay4KPj4KPj4gVGhpcyB3YXMgdGVzdGVk IG9uIGEgc2MyLWJhc2VkIHN5c3RlbSB0aGF0IHVzZXMgdGhlIHNhbWUgcHdtIGJsb2NrLgo+Pgo+ PiBbMF0gaHR0cHM6Ly9naXRodWIuY29tL2toYWRhcy9saW51eC9ibG9iL2toYWRhcy12aW1zLTUu NC55L2RyaXZlcnMvcHdtL3B3bS1tZXNvbi5jCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IEhlaW5lciBL YWxsd2VpdCA8aGthbGx3ZWl0MUBnbWFpbC5jb20+Cj4+IC0tLQo+PiBBZGRpbmcgdGhlIGFtbG9n aWMsbWVzb24tczQtcHdtIGNvbXBhdGlibGUgdG8gdGhlIGRvY3VtZW50YXRpb24gd2FzIHBhcnQK Pj4gb2YgdGhlIHlhbWwgY29udmVyc2lvbiBhbHJlYWR5Lgo+PiAtLS0KPj4gwqAgZHJpdmVycy9w d20vcHdtLW1lc29uLmMgfCAzOCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0t LQo+PiDCoCAxIGZpbGUgY2hhbmdlZCwgMzQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkK Pj4KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHdtL3B3bS1tZXNvbi5jIGIvZHJpdmVycy9wd20v cHdtLW1lc29uLmMKPj4gaW5kZXggMTZkNzljYTVkLi43YTkzZmRhZGEgMTAwNjQ0Cj4+IC0tLSBh L2RyaXZlcnMvcHdtL3B3bS1tZXNvbi5jCj4+ICsrKyBiL2RyaXZlcnMvcHdtL3B3bS1tZXNvbi5j Cj4+IEBAIC05OCw2ICs5OCw3IEBAIHN0cnVjdCBtZXNvbl9wd21fY2hhbm5lbCB7Cj4+IMKgIHN0 cnVjdCBtZXNvbl9wd21fZGF0YSB7Cj4+IMKgwqDCoMKgwqAgY29uc3QgY2hhciAqIGNvbnN0ICpw YXJlbnRfbmFtZXM7Cj4+IMKgwqDCoMKgwqAgdW5zaWduZWQgaW50IG51bV9wYXJlbnRzOwo+PiAr wqDCoMKgIHVuc2lnbmVkIGludCBleHRfY2xrOjE7Cj4gCj4gRHJvcCB0aGUgOjEsIHRoZSBjb21w aWxlciB3aWxsIGFsaWduIHRoZSBzdHJ1Y3Qgc2l6ZSB0byB0aGUgcmVnaXN0ZXIgc2l6ZSwgc28g c2ltcGx5IHVzZSB1bnNpZ25lZCBpbnQgb3IgYm9vbC4KPiAKSGF2aW5nIG9uZSBmbGFnIG9ubHkg aXQgZG9lc24ndCByZWFsbHkgbWFrZSBhIGRpZmZlcmVuY2UsIHJpZ2h0LgpJIGNob3NlIHRoaXMg c2luZ2xlIGJpdCBiZWNhdXNlIGluIGZ1dHVyZSB0aGVyZSBtYXkgY29tZSBhbm90aGVyIGZsYWcs CnRoZW4gaGF2aW5nIHRoZW0gaW4gb25lIGJpdGZpZWxkIHdvdWxkIGJlIGFkdmFudGFnZW91cy4K CkFsc28gaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2Nv ZGluZy1zdHlsZS5yc3QKUGFydCAiMTcpIFVzaW5nIGJvb2wiIHByZWZlcnMgYml0cyBmb3IgYm9v bCB2YWx1ZXMgaW4gc3RydWN0cywgZXZlbiB0aG91Z2gKdGhlIG1lbnRpb25lZCB1c2UgY2FzZXMg bGlrZSBtdWx0aXBsZSBmbGFncyBkb24ndCBhcHBseSBoZXJlLgoKPiBJJ2QgdXNlIGEgYmV0dGVy IG5hbWUgZm9yIHRoYXQsIGxpa2U6IG5vX211eF9ibGssIHB3bV9jbGtfaW5wdXQuLi4uCj4gCk9L Cgo+PiDCoCB9Owo+PiDCoCDCoCBzdHJ1Y3QgbWVzb25fcHdtIHsKPj4gQEAgLTE1OCw2ICsxNTks NyBAQCBzdGF0aWMgaW50IG1lc29uX3B3bV9jYWxjKHN0cnVjdCBtZXNvbl9wd20gKm1lc29uLCBz dHJ1Y3QgcHdtX2RldmljZSAqcHdtLAo+PiDCoMKgwqDCoMKgIHN0cnVjdCBtZXNvbl9wd21fY2hh bm5lbCAqY2hhbm5lbCA9ICZtZXNvbi0+Y2hhbm5lbHNbcHdtLT5od3B3bV07Cj4+IMKgwqDCoMKg wqAgdW5zaWduZWQgaW50IGR1dHksIHBlcmlvZCwgcHJlX2RpdiwgY250LCBkdXR5X2NudDsKPj4g wqDCoMKgwqDCoCB1bnNpZ25lZCBsb25nIGZpbl9mcmVxOwo+PiArwqDCoMKgIGludCBlcnI7Cj4+ IMKgIMKgwqDCoMKgwqAgZHV0eSA9IHN0YXRlLT5kdXR5X2N5Y2xlOwo+PiDCoMKgwqDCoMKgIHBl cmlvZCA9IHN0YXRlLT5wZXJpb2Q7Cj4+IEBAIC0xNjUsNiArMTY3LDE0IEBAIHN0YXRpYyBpbnQg bWVzb25fcHdtX2NhbGMoc3RydWN0IG1lc29uX3B3bSAqbWVzb24sIHN0cnVjdCBwd21fZGV2aWNl ICpwd20sCj4+IMKgwqDCoMKgwqAgaWYgKHN0YXRlLT5wb2xhcml0eSA9PSBQV01fUE9MQVJJVFlf SU5WRVJTRUQpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBkdXR5ID0gcGVyaW9kIC0gZHV0eTsKPj4g wqAgK8KgwqDCoCBpZiAobWVzb24tPmRhdGEtPmV4dF9jbGspIHsKPj4gK8KgwqDCoMKgwqDCoMKg IGVyciA9IGNsa19zZXRfcmF0ZShjaGFubmVsLT5jbGssIDB4ZmZmZlVMICogTlNFQ19QRVJfU0VD IC8gcGVyaW9kKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChlcnIpIHsKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgZGV2X2VycihtZXNvbi0+Y2hpcC5kZXYsICJmYWlsZWQgdG8gc2V0IHB3bSBj bG9jayByYXRlXG4iKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGVycjsKPj4g K8KgwqDCoMKgwqDCoMKgIH0KPiAKPiBJZiB0aGUgc2FtZSBNVVggYXJjaGl0ZWN0dXJlIGhhcyBi ZWVuIG1vdmVkIG91dCBvZiB0aGUgUFdNIHJlZ2lzdGVycywgdGhlbiB3aHkgd291bGQgeW91IGNh bGwKPiBzZXRfcmF0ZSA/IHdlIGRvbid0IGNhbGwgc2V0X3JhdGUgdG9kYXksIHNvIHdoeSBzaG91 bGQgd2UgPwo+IAo+IFRvZGF5IHRoZSBNVVggc2VsZWN0aW9uIGlzIHN0YXRpYyBkZXBlbmRpbmcg b24gdGhlIGNsayBuYW1lcyBzcGVjaWZpZWQgaW4gdGhlIGJpbmRpbmdzICh5ZXMgaXQncwo+IHJl YWxseSBub3QgdGhlIGdvb2Qgd2F5IHRvIGRvIHRoYXQsLi4uLikgYnV0IG5vdyB0aGUgTVVYIGlz IG91dHNpZGUgdGhlIFBXTSByZWdpc3RlcnMgYmxvY2sKPiB3ZSBzaG91bGQgc3RpY2sgdG8gdGhl IHNhbWUgYXJjaGl0ZWN0dXJlIGFuZCBtYXJrIHRoZSBNVVggYXMgTk9fUkVQQVJFTlQgYW5kIGlu c3RlYWQgb2YgdXNpbmcKPiBhIGJhZCBiaW5kaW5ncyBzcGVjaWZ5IHRoZSBNVVggcGFyZW50ICYg cmF0ZSBpbiBkdCB1c2luZyBhc3NpZ25lZC1jbGstcGFyZW50L3JhdGUuCj4gCj4gU28gcGxlYXNl IGRyb3AgdGhpcyBzZXRfcmF0ZSgpLgo+IApJbXBsaWNpdGx5IHRoZXJlJ3MgYSBzZXRfcmF0ZSgp IGFsc28gdG9kYXksIGJ5IHNldHRpbmcgdGhlIHByZV9kaXYgZGl2aWRlciB2YWx1ZS4KQnkgdGhl IHdheTogTm90IHN1cmUgd2h5IHRoZSBkaXZpZGVyIGlzbid0IGhhbmRsZWQgdmlhIENDRiwgbGlr ZSBlLmcuIGluIG1lc29uLWd4LW1tYy4KClRoZSBiZXN0IChmb3IgYWNoaWV2aW5nIGJlc3QgcHJl Y2lzaW9uKSBpbnB1dCBmcmVxdWVuY3kgaXMgMHhmZmZmIC8gcGVyaW9kLgpTbyB3ZSBzaG91bGQg ZG8gb3VyIGJlc3QgdG8gY29tZSBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB0aGlzIGZyZXF1ZW5j eS4KQnkgdXNpbmcgc2V0X3JhdGUoKSBDQ0Ygd2lsbCBjaG9vc2UgdGhlIG9wdGltYWwgbXV4IGlu cHV0IGFuZCBkaXZpZGVyIHZhbHVlLgpOb3Qgc3VyZSB3aHkgd2Ugc2hvdWxkIHJlc3RyaWN0IG91 cnNlbHZlcyB0byBvbmUgbXV4IHBhcmVudCBvbmx5LgpFLmcuIGZvciBhIHZlcnkgbG93IGR1dHkg Y3ljbGUgYSBoaWdoZXIgaW5wdXQgZnJlcXVlbmN5IHRoYW4gdGhlIHh0YWwgMjRNSHogbWF5IGJl IHByZWZlcmFibGUuCgpOb3Qgb25seSB0aGUgbXV4IGlzIG91dHNpZGUgdGhlIFBXTSBibG9jayBu b3csIGFsc28gdGhlIGRpdmlkZXIgKDggYml0IHdpZGUgaW5zdGVhZCBvZiA3IGJpdAphcyBvZiB0 b2RheSkuIFNvIHdlIG5lZWQgYSBzZXRfcmF0ZSgpIGFueXdheSB0byBzZXQgdGhlIGRpdmlkZXIg dmFsdWUuCldoYXQgSSBjYW4ndCBzYXkgaXMgd2hldGhlciB0aGUgaW50ZXJuYWwgZGl2aWRlciBz dGlsbCBleGlzdHMgKHRoZW4gZXh0ZXJuYWwgYW5kIGludGVybmFsCmRpdmlkZXIgd291bGQgYmUg Y2FzY2FkZWQpIG9yIGlzIHJlbW92ZWQgb3IgYnlwYXNzZWQuCkl0IHNlZW1zIGxpa2Ugd2hlbiBh ZGRpbmcgdGhlIGV4dGVybmFsIFBXTSBjbG9jayBmZWF0dXJlIEFtbG9naWMgZm9yZ290IHRvIHVw ZGF0ZQp0aGUgUFdNIGJsb2NrIGRvY3VtZW50YXRpb24sIGFzIHRoZXJlJ3Mgbm8gcmVmZXJlbmNl IGF0IGFsbCB0byB0aGUgbm93IGV4dGVybmFsIGlucHV0IGNsb2NrCihleGNlcHQgaW4gdGhlIGNs b2NrcyBzZWN0aW9uKS4KCj4+ICvCoMKgwqAgfQo+PiArCj4+IMKgwqDCoMKgwqAgZmluX2ZyZXEg PSBjbGtfZ2V0X3JhdGUoY2hhbm5lbC0+Y2xrKTsKPj4gwqDCoMKgwqDCoCBpZiAoZmluX2ZyZXEg PT0gMCkgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X2VycihtZXNvbi0+Y2hpcC5kZXYsICJp bnZhbGlkIHNvdXJjZSBjbG9jayBmcmVxdWVuY3lcbiIpOwo+PiBAQCAtMTczLDEwICsxODMsMTQg QEAgc3RhdGljIGludCBtZXNvbl9wd21fY2FsYyhzdHJ1Y3QgbWVzb25fcHdtICptZXNvbiwgc3Ry dWN0IHB3bV9kZXZpY2UgKnB3bSwKPj4gwqAgwqDCoMKgwqDCoCBkZXZfZGJnKG1lc29uLT5jaGlw LmRldiwgImZpbl9mcmVxOiAlbHUgSHpcbiIsIGZpbl9mcmVxKTsKPj4gwqAgLcKgwqDCoCBwcmVf ZGl2ID0gZGl2NjRfdTY0KGZpbl9mcmVxICogKHU2NClwZXJpb2QsIE5TRUNfUEVSX1NFQyAqIDB4 ZmZmZkxMKTsKPj4gLcKgwqDCoCBpZiAocHJlX2RpdiA+IE1JU0NfQ0xLX0RJVl9NQVNLKSB7Cj4+ IC3CoMKgwqDCoMKgwqDCoCBkZXZfZXJyKG1lc29uLT5jaGlwLmRldiwgInVuYWJsZSB0byBnZXQg cGVyaW9kIHByZV9kaXZcbiIpOwo+PiAtwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FSU5WQUw7Cj4+ ICvCoMKgwqAgaWYgKG1lc29uLT5kYXRhLT5leHRfY2xrKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBw cmVfZGl2ID0gMDsKPj4gK8KgwqDCoCB9IGVsc2Ugewo+PiArwqDCoMKgwqDCoMKgwqAgcHJlX2Rp diA9IGRpdjY0X3U2NChmaW5fZnJlcSAqICh1NjQpcGVyaW9kLCBOU0VDX1BFUl9TRUMgKiAweGZm ZmZMTCk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocHJlX2RpdiA+IE1JU0NfQ0xLX0RJVl9NQVNL KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRldl9lcnIobWVzb24tPmNoaXAuZGV2LCAi dW5hYmxlIHRvIGdldCBwZXJpb2QgcHJlX2RpdlxuIik7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHJldHVybiAtRUlOVkFMOwo+PiArwqDCoMKgwqDCoMKgwqAgfQo+PiDCoMKgwqDCoMKgIH0K Pj4gwqAgwqDCoMKgwqDCoCBjbnQgPSBkaXY2NF91NjQoZmluX2ZyZXEgKiAodTY0KXBlcmlvZCwg TlNFQ19QRVJfU0VDICogKHByZV9kaXYgKyAxKSk7Cj4+IEBAIC00NDUsNiArNDU5LDEwIEBAIHN0 YXRpYyBjb25zdCBzdHJ1Y3QgbWVzb25fcHdtX2RhdGEgcHdtX2cxMmFfZWVfZGF0YSA9IHsKPj4g wqDCoMKgwqDCoCAubnVtX3BhcmVudHMgPSBBUlJBWV9TSVpFKHB3bV9nMTJhX2VlX3BhcmVudF9u YW1lcyksCj4+IMKgIH07Cj4+IMKgICtzdGF0aWMgY29uc3Qgc3RydWN0IG1lc29uX3B3bV9kYXRh IHB3bV9zNF9kYXRhID0gewo+PiArwqDCoMKgIC5leHRfY2xrID0gMSwKPj4gK307Cj4+ICsKPj4g wqAgc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWVzb25fcHdtX21hdGNoZXNbXSA9 IHsKPj4gwqDCoMKgwqDCoCB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCAuY29tcGF0aWJsZSA9ICJh bWxvZ2ljLG1lc29uOGItcHdtIiwKPj4gQEAgLTQ3OCw2ICs0OTYsMTAgQEAgc3RhdGljIGNvbnN0 IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWVzb25fcHdtX21hdGNoZXNbXSA9IHsKPj4gwqDCoMKgwqDC oMKgwqDCoMKgIC5jb21wYXRpYmxlID0gImFtbG9naWMsbWVzb24tZzEyYS1hby1wd20tY2QiLAo+ PiDCoMKgwqDCoMKgwqDCoMKgwqAgLmRhdGEgPSAmcHdtX2cxMmFfYW9fY2RfZGF0YQo+PiDCoMKg wqDCoMKgIH0sCj4+ICvCoMKgwqAgewo+PiArwqDCoMKgwqDCoMKgwqAgLmNvbXBhdGlibGUgPSAi YW1sb2dpYyxtZXNvbi1zNC1wd20iLAo+IAo+IFRoaXMgZGVzZXJ2ZWQgYSBiaW5kaW5ncyB1cGRh dGUsIGFuZCB3ZSBzaG91bGQgcGVyaGFwcyBzdGFydCBhIG5ldyBiaW5kaW5ncyBieSB1c2luZwo+ IG5ldyBjbG9jay1uYW1lcyAoIT0gY2xraW4wLzEpIHRvIGRpZmZlcmVudGlhdGUgZnJvbSB0aGUg b2xkIGJ1Z2d5IGJpbmRpbmdzLgo+IApXZSBjb3VsZCBzaW1wbHkgbmFtZSB0aGUgY2xvY2tzIHB3 bV9hLCBwd21fYi4gSWYgeW91IHRoaW5rIHRoaXMgY291bGQgYmUgY29uZnVzaW5nCmZvciBwd20g UFdNX0MvUFdNX0QsIHRoZW4gd2UgbWF5IHVzZSBwd20wIGFuZCBwd20xLgoKVGhlIGNoYW5nZWQg YmluZGluZyB3b3VsZCBoYXZlIHRvIHJlZmxlY3QgdGhhdCBub3cgYm90aCBpbnB1dCBjbG9ja3Mg Zm9yIGEgcHdtCmFyZSByZXF1aXJlZC4KCj4gTmVpbAo+IAo+PiArwqDCoMKgwqDCoMKgwqAgLmRh dGEgPSAmcHdtX3M0X2RhdGEKPj4gK8KgwqDCoCB9LAo+PiDCoMKgwqDCoMKgIHt9LAo+PiDCoCB9 Owo+PiDCoCBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtZXNvbl9wd21fbWF0Y2hlcyk7Cj4+IEBA IC00OTMsNiArNTE1LDE0IEBAIHN0YXRpYyBpbnQgbWVzb25fcHdtX2luaXRfY2hhbm5lbHMoc3Ry dWN0IG1lc29uX3B3bSAqbWVzb24pCj4+IMKgwqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IG1lc29u LT5jaGlwLm5wd207IGkrKykgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IG1lc29uX3B3 bV9jaGFubmVsICpjaGFubmVsID0gJm1lc29uLT5jaGFubmVsc1tpXTsKPj4gwqAgK8KgwqDCoMKg wqDCoMKgIGlmIChtZXNvbi0+ZGF0YS0+ZXh0X2Nsaykgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJjbGtpbiV1IiwgaSk7Cj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGNoYW5uZWwtPmNsayA9IGRldm1fY2xrX2dldChkZXYsIG5hbWUp Owo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoSVNfRVJSKGNoYW5uZWwtPmNsaykpCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIFBUUl9FUlIoY2hhbm5lbC0+ Y2xrKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29udGludWU7Cj4+ICvCoMKgwqDCoMKg wqDCoCB9Cj4+ICsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIHNucHJpbnRmKG5hbWUsIHNpemVvZihu YW1lKSwgIiVzI211eCV1IiwgZGV2X25hbWUoZGV2KSwgaSk7Cj4+IMKgIMKgwqDCoMKgwqDCoMKg wqDCoCBpbml0Lm5hbWUgPSBuYW1lOwo+IAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFy bS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK