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 AB867C77B70 for ; Mon, 17 Apr 2023 09:54:27 +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=bT6vDtkylS24ec12jRq50o2gRYPqp50RCjiB2aN/GKU=; b=fuCGiymakTT1Pu 8mlR3RNlmuqUFDGLxdjK6Um0omRFojkVFBK3GGUCwxEsZ1E8Lcf+N5K2N0dGR0V2vhuXdZdYWfUpu koXMpTaynJeymOUhfhOgep4EJXtn4Rsjhp4LDNXb8hujo/g2utsm7KiAE0Xm/eMLxAOrO3onRhHhL NZM5KwcVbK4GcrKa0CgnCq5fxArgZbHQrizgsCsL+bC8HD39WYtvibeBRSQ3dQ7VnB0EYnBCxTazn Uvq/DaebqWcXWQSV7AkbjzCyKanmBl4FoQGiofidRuVsN2FyZY8XdFGQ1wiPcSLqvDq+imKes1M9u hzPl/lha2cjwKlQzENJA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1poLYw-00FdcC-1C; Mon, 17 Apr 2023 09:54:18 +0000 Received: from mail-ed1-x529.google.com ([2a00:1450:4864:20::529]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1poLYr-00Fdb9-0S; Mon, 17 Apr 2023 09:54:15 +0000 Received: by mail-ed1-x529.google.com with SMTP id 4fb4d7f45d1cf-504efe702d5so3625974a12.3; Mon, 17 Apr 2023 02:54:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1681725251; x=1684317251; 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=O0Be3KZ80ormPnApJ2YeiF153NcsJsioYWb5rEh94Ko=; b=AeZsDLKRN9FF9f5z95VIO6HvFKa/K9o/ApQuknKIEjwLK2HNuhh9bbotNWccZHEQRG w7tWaSR7FZpelKUetthK4XXCmJp0H1QN2upMcoPl31nczDC+FZYB80LSFRcwr+s+lWQ4 e7z8XXHpVdkC8dLMjStalodlVOS/GN636ULCv3goZhiJlSHJTzUunm4VJRSfAM5buKGH 2rgtZMWWoM8m00Dj36ojOZx7pFp/64ZbVndw5n9zYHs4JWZQOoEF5C3Dw1rq8fZGUqo1 tKt+Qm3k5C1VICnoLl0Ftd7581WMKKXK07vBcrF8faswBhR23vwwhHPoFn48mkq3bFK1 T1OA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681725251; x=1684317251; 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=O0Be3KZ80ormPnApJ2YeiF153NcsJsioYWb5rEh94Ko=; b=fHlO3oHBsnjvK/M+7chmTdlXBrMqxReQPTw9ZVhjuZObkD05sJU0FFSJkCmWZzQoIj VN1zUDVhzhEFjsO7Kh9eVHsjrNkAvW1y1W2GoVIQWfiTZjcSRbY3E8pFAF5nz8OM0vzr t/t6w1Z/+E1nXfdU+qiAInK3fmMU3TlBaUphnUl2hLFoCHyLm6+UCH6nIzpd/nD8t2F5 OUhJEWIahq524GoMHc67nAKp5y9bHHeZRXnD0QhV0B8Rs1vZLmnhbf3O274LFrr5wUA7 hsNGeQBQ1PJG+DFUl90Q95eQkqXnZd79xQwIg/ji8KCEkN1SbMlj6mWlgpFY1CYKq8N0 YNPQ== X-Gm-Message-State: AAQBX9eyk7VTrlP6c9MzHyKsS00sjVMSTDJ2F8L0wT2HDloHawAy5ms+ M9+abl45pVtEAyNinu4infU= X-Google-Smtp-Source: AKy350ZS8M3fkFbw/Gv1f5uCCpkmRF+EtdUOZFc/oNOZ5X73IkA4smHB5oZrPiU+/8lwQN/VOt6VGA== X-Received: by 2002:a05:6402:202f:b0:504:b324:9ec3 with SMTP id ay15-20020a056402202f00b00504b3249ec3mr12662613edb.1.1681725250767; Mon, 17 Apr 2023 02:54:10 -0700 (PDT) Received: from ?IPV6:2a01:c22:770d:1c00:59f1:1548:39fc:ccd5? (dynamic-2a01-0c22-770d-1c00-59f1-1548-39fc-ccd5.c22.pool.telefonica.de. [2a01:c22:770d:1c00:59f1:1548:39fc:ccd5]) by smtp.googlemail.com with ESMTPSA id v16-20020a1709064e9000b0094f663bced2sm1753436eju.33.2023.04.17.02.54.09 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 17 Apr 2023 02:54:10 -0700 (PDT) Message-ID: <73a52391-b380-e491-0e96-5c51c7be487c@gmail.com> Date: Mon, 17 Apr 2023 11:53:58 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.10.0 Content-Language: en-US To: neil.armstrong@linaro.org, Jerome Brunet , Martin Blumenstingl , Neil Armstrong , Kevin Hilman , =?UTF-8?Q?Uwe_Kleine-K=c3=b6nig?= , "thierry.reding@gmail.com" Cc: "linux-arm-kernel@lists.infradead.org" , "open list:ARM/Amlogic Meson..." , linux-pwm@vger.kernel.org References: <9faca2e6-b7a1-4748-7eb0-48f8064e323e@gmail.com> From: Heiner Kallweit Subject: Re: [PATCH v4 4/4] pwm: meson: make full use of common clock framework In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230417_025413_187247_E2DC0047 X-CRM114-Status: GOOD ( 34.11 ) 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 T24gMTcuMDQuMjAyMyAwOToyMywgTmVpbCBBcm1zdHJvbmcgd3JvdGU6Cj4gT24gMTMvMDQvMjAy MyAwNzo1NCwgSGVpbmVyIEthbGx3ZWl0IHdyb3RlOgo+PiBOZXdlciB2ZXJzaW9ucyBvZiB0aGUg UFdNIGJsb2NrIHVzZSBhIGNvcmUgY2xvY2sgd2l0aCBleHRlcm5hbCBtdXgsCj4+IGRpdmlkZXIs IGFuZCBnYXRlLiBUaGVzZSBjb21wb25lbnRzIGVpdGhlciBkb24ndCBleGlzdCBhbnkgbG9uZ2Vy IGluCj4+IHRoZSBQV00gYmxvY2ssIG9yIHRoZXkgYXJlIGJ5cGFzc2VkLgo+PiBUbyBtaW5pbWl6 ZSBuZWVkZWQgY2hhbmdlcyBmb3Igc3VwcG9ydGluZyB0aGUgbmV3IHZlcnNpb24sIHRoZSBpbnRl cm5hbAo+PiBkaXZpZGVyIGFuZCBnYXRlIHNob3VsZCBiZSBoYW5kbGVkIGJ5IENDRiB0b28uCj4+ Cj4+IEkgZGlkbid0IHNlZSBhIGdvb2Qgd2F5IHRvIHNwbGl0IHRoZSBwYXRjaCwgdGhlcmVmb3Jl IGl0J3Mgc29tZXdoYXQKPj4gYmlnZ2VyLiBXaGF0IGl0IGRvZXM6Cj4+Cj4+IC0gVGhlIGludGVy bmFsIG11eCBpcyBoYW5kbGVkIGJ5IENDRiBhbHJlYWR5LiBSZWdpc3RlciBhbHNvIGludGVybmFs Cj4+IMKgwqAgZGl2aWRlciBhbmQgZ2F0ZSB3aXRoIENDRiwgc28gdGhhdCB3ZSBoYXZlIG9uZSBy ZXByZXNlbnRhdGlvbiBvZiB0aGUKPj4gwqDCoCBpbnB1dCBjbG9jazogW211eF0gcGFyZW50IG9m IFtkaXZpZGVyXSBwYXJlbnQgb2YgW2dhdGVdCj4+IMKgwqAgLSBOb3cgdGhhdCBDQ0Ygc2VsZWN0 cyBhbiBhcHByb3ByaWF0ZSBtdXggcGFyZW50LCB3ZSBkb24ndCBuZWVkIHRoZQo+PiDCoMKgIERU LXByb3ZpZGVkIGRlZmF1bHQgcGFyZW50IGFueSBsb25nZXIuIEFjY29yZGluZ2x5IHdlIGNhbiBh bHNvIG9taXQKPj4gwqDCoCBzZXR0aW5nIHRoZSBtdXggcGFyZW50IGRpcmVjdGx5IGluIHRoZSBk cml2ZXIuCj4+IMKgwqAgLSBJbnN0ZWFkIG9mIG1hbnVhbGx5IGhhbmRsaW5nIHRoZSBwcmUtZGl2 IGRpdmlkZXIgdmFsdWUsIGxldCBDQ0YKPj4gwqDCoCBzZXQgdGhlIGlucHV0IGNsb2NrLiBUYXJn ZXRlZCBpbnB1dCBjbG9jayBmcmVxdWVuY3kgaXMKPj4gwqDCoCAweGZmZmYgKiAxL3BlcmlvZCBm b3IgYmVzdCBwcmVjaXNpb24uCj4+IMKgwqAgLSBGb3IgdGhlICJpbnZlcnRlZCBwd20gZGlzYWJs ZWQiIHNjZW5hcmlvIHRhcmdldCBhbiBpbnB1dCBjbG9jawo+PiDCoMKgIGZyZXF1ZW5jeSBvZiAx R0h6LiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgcmVtYWluaW5nIGxvdyBwdWxzZXMKPj4gwqDCoCBo YXZlIG1pbmltdW0gbGVuZ3RoLgo+Pgo+PiBJIGRvbid0IGhhdmUgaHcgd2l0aCB0aGUgb2xkIFBX TSBibG9jaywgdGhlcmVmb3JlIEkgY291bGRuJ3QgdGVzdCB0aGlzCj4+IHBhdGNoLiBXaXRoIHRo ZSBub3QgeWV0IGluY2x1ZGVkIGV4dGVuc2lvbiBmb3IgdGhlIG5ldyBQV00gYmxvY2sKPj4gKGNo YW5uZWwtPmNsayBjb21pbmcgZGlyZWN0bHkgZnJvbSBnZXRfY2xrKGV4dGVybmFsX2NsaykpIEkg ZGlkbid0Cj4+IG5vdGljZSBhbnkgcHJvYmxlbS4gTXkgc3lzdGVtIHVzZXMgUFdNIGZvciB0aGUg Q1BVIHZvbHRhZ2UgcmVndWxhdG9yCj4+IGFuZCBmb3IgdGhlIFNESU8gMzJrSHogY2xvY2suCj4+ Cj4+IE5vdGU6IFRoZSBjbG9jayBnYXRlIGluIHRoZSBvbGQgUFdNIGJsb2NrIGlzIHBlcm1hbmVu dGx5IGRpc2FibGVkLgo+PiBUaGlzIHNlZW1zIHRvIGluZGljYXRlIHRoYXQgaXQncyBub3QgdXNl ZCBieSB0aGUgbmV3IFBXTSBibG9jay4KPj4KPj4gVGVzdGVkLWJ5OiBNYXJ0aW4gQmx1bWVuc3Rp bmdsIDxtYXJ0aW4uYmx1bWVuc3RpbmdsQGdvb2dsZW1haWwuY29tPgo+PiBTaWduZWQtb2ZmLWJ5 OiBIZWluZXIgS2FsbHdlaXQgPGhrYWxsd2VpdDFAZ21haWwuY29tPgo+PiAtLS0KPj4gQ2hhbmdl cyB0byBSRlQvUkZDIHZlcnNpb246Cj4+IC0gdXNlIHBhcmVudF9od3MgaW5zdGVhZCBvZiBwYXJl bnRfbmFtZXMgZm9yIGRpdi9nYXRlIGNsb2NrCj4+IC0gdXNlIGRldm1fY2xrX2h3X3JlZ2lzdGVy IHdoZXJlIHRoZSBzdHJ1Y3QgY2xrICogcmV0dXJuZWQgYnkKPj4gwqDCoCBkZXZtX2Nsa19yZWdp c3RlciBpc24ndCBuZWVkZWQKPj4KPj4gdjI6Cj4+IC0gYWRkIHBhdGNoIDEKPj4gLSBhZGQgcGF0 Y2ggMwo+PiAtIHN3aXRjaCB0byB1c2luZyBjbGtfcGFyZW50X2RhdGEgaW4gYWxsIHJlbGV2YW50 IHBsYWNlcwo+PiB2MzoKPj4gLSBhZGQgZmxhZyBDTEtfSUdOT1JFX1VOVVNFRAo+PiB2NDoKPj4g LSByZW1vdmUgdmFyaWFibGUgdG1wIGluIG1lc29uX3B3bV9nZXRfc3RhdGUKPj4gLSBkb24ndCB1 c2UgZGVwcmVjYXRlZCBmdW5jdGlvbiBkZXZtX2Nsa19yZWdpc3Rlcgo+PiAtLS0KPj4gwqAgZHJp dmVycy9wd20vcHdtLW1lc29uLmMgfCAxNDIgKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0t LS0tLS0tLS0tLQo+PiDCoCAxIGZpbGUgY2hhbmdlZCwgODMgaW5zZXJ0aW9ucygrKSwgNTkgZGVs ZXRpb25zKC0pCj4+Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3B3bS9wd20tbWVzb24uYyBiL2Ry aXZlcnMvcHdtL3B3bS1tZXNvbi5jCj4+IGluZGV4IDQwYTg3MDlmZi4uODBhYzcxY2JjIDEwMDY0 NAo+PiAtLS0gYS9kcml2ZXJzL3B3bS9wd20tbWVzb24uYwo+PiArKysgYi9kcml2ZXJzL3B3bS9w d20tbWVzb24uYwo+PiBAQCAtNTEsNyArNTEsNyBAQAo+PiDCoCAjZGVmaW5lIFJFR19NSVNDX0FC wqDCoMKgwqDCoMKgwqAgMHg4Cj4+IMKgICNkZWZpbmUgTUlTQ19CX0NMS19FTsKgwqDCoMKgwqDC oMKgIDIzCj4+IMKgICNkZWZpbmUgTUlTQ19BX0NMS19FTsKgwqDCoMKgwqDCoMKgIDE1Cj4+IC0j ZGVmaW5lIE1JU0NfQ0xLX0RJVl9NQVNLwqDCoMKgIDB4N2YKPj4gKyNkZWZpbmUgTUlTQ19DTEtf RElWX1dJRFRIwqDCoMKgIDcKPj4gwqAgI2RlZmluZSBNSVNDX0JfQ0xLX0RJVl9TSElGVMKgwqDC oCAxNgo+PiDCoCAjZGVmaW5lIE1JU0NfQV9DTEtfRElWX1NISUZUwqDCoMKgIDgKPj4gwqAgI2Rl ZmluZSBNSVNDX0JfQ0xLX1NFTF9TSElGVMKgwqDCoCA2Cj4+IEBAIC04NywxMiArODcsMTMgQEAg c3RhdGljIHN0cnVjdCBtZXNvbl9wd21fY2hhbm5lbF9kYXRhIHsKPj4gwqAgfTsKPj4gwqAgwqAg c3RydWN0IG1lc29uX3B3bV9jaGFubmVsIHsKPj4gK8KgwqDCoCB1bnNpZ25lZCBsb25nIHJhdGU7 Cj4+IMKgwqDCoMKgwqAgdW5zaWduZWQgaW50IGhpOwo+PiDCoMKgwqDCoMKgIHVuc2lnbmVkIGlu dCBsbzsKPj4gLcKgwqDCoCB1OCBwcmVfZGl2Owo+PiDCoCAtwqDCoMKgIHN0cnVjdCBjbGsgKmNs a19wYXJlbnQ7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGNsa19tdXggbXV4Owo+PiArwqDCoMKgIHN0 cnVjdCBjbGtfZGl2aWRlciBkaXY7Cj4+ICvCoMKgwqAgc3RydWN0IGNsa19nYXRlIGdhdGU7Cj4+ IMKgwqDCoMKgwqAgc3RydWN0IGNsayAqY2xrOwo+PiDCoCB9Owo+PiDCoCBAQCAtMTI1LDE2ICsx MjYsNiBAQCBzdGF0aWMgaW50IG1lc29uX3B3bV9yZXF1ZXN0KHN0cnVjdCBwd21fY2hpcCAqY2hp cCwgc3RydWN0IHB3bV9kZXZpY2UgKnB3bSkKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgZGV2aWNlICpk ZXYgPSBjaGlwLT5kZXY7Cj4+IMKgwqDCoMKgwqAgaW50IGVycjsKPj4gwqAgLcKgwqDCoCBpZiAo Y2hhbm5lbC0+Y2xrX3BhcmVudCkgewo+PiAtwqDCoMKgwqDCoMKgwqAgZXJyID0gY2xrX3NldF9w YXJlbnQoY2hhbm5lbC0+Y2xrLCBjaGFubmVsLT5jbGtfcGFyZW50KTsKPj4gLcKgwqDCoMKgwqDC oMKgIGlmIChlcnIgPCAwKSB7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRldl9lcnIoZGV2 LCAiZmFpbGVkIHRvIHNldCBwYXJlbnQgJXMgZm9yICVzOiAlZFxuIiwKPj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBfX2Nsa19nZXRfbmFtZShjaGFubmVsLT5jbGtfcGFyZW50KSwK Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBfX2Nsa19nZXRfbmFtZShjaGFubmVs LT5jbGspLCBlcnIpOwo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gZXJyOwo+PiAt wqDCoMKgwqDCoMKgwqAgfQo+PiAtwqDCoMKgIH0KPj4gLQo+PiDCoMKgwqDCoMKgIGVyciA9IGNs a19wcmVwYXJlX2VuYWJsZShjaGFubmVsLT5jbGspOwo+PiDCoMKgwqDCoMKgIGlmIChlcnIgPCAw KSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKGRldiwgImZhaWxlZCB0byBlbmFibGUg Y2xvY2sgJXM6ICVkXG4iLAo+PiBAQCAtMTU3LDggKzE0OCw5IEBAIHN0YXRpYyBpbnQgbWVzb25f cHdtX2NhbGMoc3RydWN0IG1lc29uX3B3bSAqbWVzb24sIHN0cnVjdCBwd21fZGV2aWNlICpwd20s Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25zdCBzdHJ1Y3QgcHdtX3N0YXRl ICpzdGF0ZSkKPj4gwqAgewo+PiDCoMKgwqDCoMKgIHN0cnVjdCBtZXNvbl9wd21fY2hhbm5lbCAq Y2hhbm5lbCA9ICZtZXNvbi0+Y2hhbm5lbHNbcHdtLT5od3B3bV07Cj4+IC3CoMKgwqAgdW5zaWdu ZWQgaW50IGR1dHksIHBlcmlvZCwgcHJlX2RpdiwgY250LCBkdXR5X2NudDsKPj4gK8KgwqDCoCB1 bnNpZ25lZCBpbnQgZHV0eSwgcGVyaW9kLCBjbnQsIGR1dHlfY250Owo+PiDCoMKgwqDCoMKgIHVu c2lnbmVkIGxvbmcgZmluX2ZyZXE7Cj4+ICvCoMKgwqAgdTY0IGZyZXE7Cj4+IMKgIMKgwqDCoMKg wqAgZHV0eSA9IHN0YXRlLT5kdXR5X2N5Y2xlOwo+PiDCoMKgwqDCoMKgIHBlcmlvZCA9IHN0YXRl LT5wZXJpb2Q7Cj4+IEBAIC0xNjYsNyArMTU4LDExIEBAIHN0YXRpYyBpbnQgbWVzb25fcHdtX2Nh bGMoc3RydWN0IG1lc29uX3B3bSAqbWVzb24sIHN0cnVjdCBwd21fZGV2aWNlICpwd20sCj4+IMKg wqDCoMKgwqAgaWYgKHN0YXRlLT5wb2xhcml0eSA9PSBQV01fUE9MQVJJVFlfSU5WRVJTRUQpCj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCBkdXR5ID0gcGVyaW9kIC0gZHV0eTsKPj4gwqAgLcKgwqDCoCBm aW5fZnJlcSA9IGNsa19nZXRfcmF0ZShjaGFubmVsLT5jbGspOwo+PiArwqDCoMKgIGZyZXEgPSBk aXY2NF91NjQoTlNFQ19QRVJfU0VDICogKHU2NCkweGZmZmYsIHBlcmlvZCk7Cj4+ICvCoMKgwqAg aWYgKGZyZXEgPiBVTE9OR19NQVgpCj4+ICvCoMKgwqDCoMKgwqDCoCBmcmVxID0gVUxPTkdfTUFY Owo+PiArCj4+ICvCoMKgwqAgZmluX2ZyZXEgPSBjbGtfcm91bmRfcmF0ZShjaGFubmVsLT5jbGss IGZyZXEpOwo+PiDCoMKgwqDCoMKgIGlmIChmaW5fZnJlcSA9PSAwKSB7Cj4+IMKgwqDCoMKgwqDC oMKgwqDCoCBkZXZfZXJyKG1lc29uLT5jaGlwLmRldiwgImludmFsaWQgc291cmNlIGNsb2NrIGZy ZXF1ZW5jeVxuIik7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4gQEAg LTE3NCw0NiArMTcwLDM1IEBAIHN0YXRpYyBpbnQgbWVzb25fcHdtX2NhbGMoc3RydWN0IG1lc29u X3B3bSAqbWVzb24sIHN0cnVjdCBwd21fZGV2aWNlICpwd20sCj4+IMKgIMKgwqDCoMKgwqAgZGV2 X2RiZyhtZXNvbi0+Y2hpcC5kZXYsICJmaW5fZnJlcTogJWx1IEh6XG4iLCBmaW5fZnJlcSk7Cj4+ IMKgIC3CoMKgwqAgcHJlX2RpdiA9IGRpdjY0X3U2NChmaW5fZnJlcSAqICh1NjQpcGVyaW9kLCBO U0VDX1BFUl9TRUMgKiAweGZmZmZMTCk7Cj4+IC3CoMKgwqAgaWYgKHByZV9kaXYgPiBNSVNDX0NM S19ESVZfTUFTSykgewo+PiAtwqDCoMKgwqDCoMKgwqAgZGV2X2VycihtZXNvbi0+Y2hpcC5kZXYs ICJ1bmFibGUgdG8gZ2V0IHBlcmlvZCBwcmVfZGl2XG4iKTsKPj4gLcKgwqDCoMKgwqDCoMKgIHJl dHVybiAtRUlOVkFMOwo+PiAtwqDCoMKgIH0KPj4gLQo+PiAtwqDCoMKgIGNudCA9IGRpdjY0X3U2 NChmaW5fZnJlcSAqICh1NjQpcGVyaW9kLCBOU0VDX1BFUl9TRUMgKiAocHJlX2RpdiArIDEpKTsK Pj4gK8KgwqDCoCBjbnQgPSBkaXY2NF91NjQoZmluX2ZyZXEgKiAodTY0KXBlcmlvZCwgTlNFQ19Q RVJfU0VDKTsKPj4gwqDCoMKgwqDCoCBpZiAoY250ID4gMHhmZmZmKSB7Cj4+IMKgwqDCoMKgwqDC oMKgwqDCoCBkZXZfZXJyKG1lc29uLT5jaGlwLmRldiwgInVuYWJsZSB0byBnZXQgcGVyaW9kIGNu dFxuIik7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4gwqDCoMKgwqDC oCB9Cj4+IMKgIC3CoMKgwqAgZGV2X2RiZyhtZXNvbi0+Y2hpcC5kZXYsICJwZXJpb2Q9JXUgcHJl X2Rpdj0ldSBjbnQ9JXVcbiIsIHBlcmlvZCwKPj4gLcKgwqDCoMKgwqDCoMKgIHByZV9kaXYsIGNu dCk7Cj4+ICvCoMKgwqAgZGV2X2RiZyhtZXNvbi0+Y2hpcC5kZXYsICJwZXJpb2Q9JXUgY250PSV1 XG4iLCBwZXJpb2QsIGNudCk7Cj4+IMKgIMKgwqDCoMKgwqAgaWYgKGR1dHkgPT0gcGVyaW9kKSB7 Cj4+IC3CoMKgwqDCoMKgwqDCoCBjaGFubmVsLT5wcmVfZGl2ID0gcHJlX2RpdjsKPj4gwqDCoMKg wqDCoMKgwqDCoMKgIGNoYW5uZWwtPmhpID0gY250Owo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgY2hh bm5lbC0+bG8gPSAwOwo+PiDCoMKgwqDCoMKgIH0gZWxzZSBpZiAoZHV0eSA9PSAwKSB7Cj4+IC3C oMKgwqDCoMKgwqDCoCBjaGFubmVsLT5wcmVfZGl2ID0gcHJlX2RpdjsKPj4gwqDCoMKgwqDCoMKg wqDCoMKgIGNoYW5uZWwtPmhpID0gMDsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGNoYW5uZWwtPmxv ID0gY250Owo+PiDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4+IC3CoMKgwqDCoMKgwqDCoCAvKiBUaGVu IGNoZWNrIGlzIHdlIGNhbiBoYXZlIHRoZSBkdXR5IHdpdGggdGhlIHNhbWUgcHJlX2RpdiAqLwo+ PiAtwqDCoMKgwqDCoMKgwqAgZHV0eV9jbnQgPSBkaXY2NF91NjQoZmluX2ZyZXEgKiAodTY0KWR1 dHksCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIE5TRUNfUEVS X1NFQyAqIChwcmVfZGl2ICsgMSkpOwo+PiArwqDCoMKgwqDCoMKgwqAgZHV0eV9jbnQgPSBkaXY2 NF91NjQoZmluX2ZyZXEgKiAodTY0KWR1dHksIE5TRUNfUEVSX1NFQyk7Cj4+IMKgwqDCoMKgwqDC oMKgwqDCoCBpZiAoZHV0eV9jbnQgPiAweGZmZmYpIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgZGV2X2VycihtZXNvbi0+Y2hpcC5kZXYsICJ1bmFibGUgdG8gZ2V0IGR1dHkgY3ljbGVc biIpOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4gwqDC oMKgwqDCoMKgwqDCoMKgIH0KPj4gwqAgLcKgwqDCoMKgwqDCoMKgIGRldl9kYmcobWVzb24tPmNo aXAuZGV2LCAiZHV0eT0ldSBwcmVfZGl2PSV1IGR1dHlfY250PSV1XG4iLAo+PiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBkdXR5LCBwcmVfZGl2LCBkdXR5X2NudCk7Cj4+ICvCoMKgwqDCoMKgwqDC oCBkZXZfZGJnKG1lc29uLT5jaGlwLmRldiwgImR1dHk9JXUgZHV0eV9jbnQ9JXVcbiIsIGR1dHks IGR1dHlfY250KTsKPj4gwqAgLcKgwqDCoMKgwqDCoMKgIGNoYW5uZWwtPnByZV9kaXYgPSBwcmVf ZGl2Owo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgY2hhbm5lbC0+aGkgPSBkdXR5X2NudDsKPj4gwqDC oMKgwqDCoMKgwqDCoMKgIGNoYW5uZWwtPmxvID0gY250IC0gZHV0eV9jbnQ7Cj4+IMKgwqDCoMKg wqAgfQo+PiDCoCArwqDCoMKgIGNoYW5uZWwtPnJhdGUgPSBmaW5fZnJlcTsKPj4gKwo+PiDCoMKg wqDCoMKgIHJldHVybiAwOwo+PiDCoCB9Cj4+IMKgIEBAIC0yMjMsMTYgKzIwOCwxNSBAQCBzdGF0 aWMgdm9pZCBtZXNvbl9wd21fZW5hYmxlKHN0cnVjdCBtZXNvbl9wd20gKm1lc29uLCBzdHJ1Y3Qg cHdtX2RldmljZSAqcHdtKQo+PiDCoMKgwqDCoMKgIHN0cnVjdCBtZXNvbl9wd21fY2hhbm5lbF9k YXRhICpjaGFubmVsX2RhdGE7Cj4+IMKgwqDCoMKgwqAgdW5zaWduZWQgbG9uZyBmbGFnczsKPj4g wqDCoMKgwqDCoCB1MzIgdmFsdWU7Cj4+ICvCoMKgwqAgaW50IGVycjsKPj4gwqAgwqDCoMKgwqDC oCBjaGFubmVsX2RhdGEgPSAmbWVzb25fcHdtX3Blcl9jaGFubmVsX2RhdGFbcHdtLT5od3B3bV07 Cj4+IMKgIC3CoMKgwqAgc3Bpbl9sb2NrX2lycXNhdmUoJm1lc29uLT5sb2NrLCBmbGFncyk7Cj4+ ICvCoMKgwqAgZXJyID0gY2xrX3NldF9yYXRlKGNoYW5uZWwtPmNsaywgY2hhbm5lbC0+cmF0ZSk7 Cj4+ICvCoMKgwqAgaWYgKGVycikKPj4gK8KgwqDCoMKgwqDCoMKgIGRldl9lcnIobWVzb24tPmNo aXAuZGV2LCAic2V0dGluZyBjbG9jayByYXRlIGZhaWxlZFxuIik7Cj4+IMKgIC3CoMKgwqAgdmFs dWUgPSByZWFkbChtZXNvbi0+YmFzZSArIFJFR19NSVNDX0FCKTsKPj4gLcKgwqDCoCB2YWx1ZSAm PSB+KE1JU0NfQ0xLX0RJVl9NQVNLIDw8IGNoYW5uZWxfZGF0YS0+Y2xrX2Rpdl9zaGlmdCk7Cj4+ IC3CoMKgwqAgdmFsdWUgfD0gY2hhbm5lbC0+cHJlX2RpdiA8PCBjaGFubmVsX2RhdGEtPmNsa19k aXZfc2hpZnQ7Cj4+IC3CoMKgwqAgdmFsdWUgfD0gQklUKGNoYW5uZWxfZGF0YS0+Y2xrX2VuX2Jp dCk7Cj4+IC3CoMKgwqAgd3JpdGVsKHZhbHVlLCBtZXNvbi0+YmFzZSArIFJFR19NSVNDX0FCKTsK Pj4gK8KgwqDCoCBzcGluX2xvY2tfaXJxc2F2ZSgmbWVzb24tPmxvY2ssIGZsYWdzKTsKPj4gwqAg wqDCoMKgwqDCoCB2YWx1ZSA9IEZJRUxEX1BSRVAoUFdNX0hJR0hfTUFTSywgY2hhbm5lbC0+aGkp IHwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIEZJRUxEX1BSRVAoUFdNX0xPV19NQVNLLCBjaGFubmVs LT5sbyk7Cj4+IEBAIC0yNzEsMTYgKzI1NSwxNiBAQCBzdGF0aWMgaW50IG1lc29uX3B3bV9hcHBs eShzdHJ1Y3QgcHdtX2NoaXAgKmNoaXAsIHN0cnVjdCBwd21fZGV2aWNlICpwd20sCj4+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg KiBUaGlzIElQIGJsb2NrIHJldmlzaW9uIGRvZXNuJ3QgaGF2ZSBhbiAiYWx3YXlzIGhpZ2giCj4+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBzZXR0aW5nIHdoaWNoIHdlIGNhbiB1c2Ug Zm9yICJpbnZlcnRlZCBkaXNhYmxlZCIuCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBJ bnN0ZWFkIHdlIGFjaGlldmUgdGhpcyB1c2luZyB0aGUgc2FtZSBzZXR0aW5ncwo+PiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICogdGhhdCB3ZSB1c2UgYSBwcmVfZGl2IG9mIDAgKHRvIGdldCB0 aGUgc2hvcnRlc3QKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIHBvc3NpYmxlIGR1cmF0 aW9uIGZvciBvbmUgImNvdW50IikgYW5kCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBJ bnN0ZWFkIHdlIGFjaGlldmUgdGhpcyBieSBzZXR0aW5nIGFuIGFyYml0cmFyeSwKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAqIHZlcnkgaGlnaCBmcmVxdWVuY3ksIHJlc3VsdGluZyBpbiB0 aGUgc2hvcnRlc3QKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIHBvc3NpYmxlIGR1cmF0 aW9uIGZvciBvbmUgImNvdW50IiBhbmQKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAq ICJwZXJpb2QgPT0gZHV0eV9jeWNsZSIuIFRoaXMgcmVzdWx0cyBpbiBhIHNpZ25hbAo+PiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogd2hpY2ggaXMgTE9XIGZvciBvbmUgImNvdW50Iiwg d2hpbGUgYmVpbmcgSElHSCBmb3IKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIHRo ZSByZXN0IG9mIHRoZSAoc28gdGhlIHNpZ25hbCBpcyBISUdIIGZvciBzbGlnaHRseQo+PiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogbGVzcyB0aGFuIDEwMCUgb2YgdGhlIHBlcmlvZCwg YnV0IHRoaXMgaXMgdGhlIGJlc3QKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIHdl IGNhbiBhY2hpZXZlKS4KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqLwo+PiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBjaGFubmVsLT5wcmVfZGl2ID0gMDsKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgY2hhbm5lbC0+cmF0ZSA9IDEwMDAwMDAwMDA7Cj4+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGNoYW5uZWwtPmhpID0gfjA7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGNoYW5uZWwtPmxvID0gMDsKPiAKPiBUaGlzIGxvb2tzIGxpa2UgYSByZWFsbHkgYmFkIGlk ZWEuLi4gcGxlYXNlIGRvbid0IGRvIHRoYXQgYW5kIGluc3RlYWQgaW50cm9kdWNlCj4gc29tZSBw aW5jdHJsIHN0YXRlcyB3aGVyZSB3ZSBzZXQgdGhlIFBXTSBwaW4gYXMgR1BJTyBtb2RlIGhpZ2gv bG93IHN0YXRlIGxpa2Ugd2UKPiBkaWQgZm9yIFNQSToKPiBodHRwczovL2xvcmUua2VybmVsLm9y Zy9yLzIwMjIxMDA0LXVwLWFtbC1maXgtc3BpLXY0LTItMDM0MmQ4ZTEwYzQ5QGJheWxpYnJlLmNv bQo+IAoKVGhlcmUncyBubyBiZWhhdmlvciBjaGFuZ2UgaW4gdGhpcyBwYXRjaCBzZXQuIFNvIG15 IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB5b3UnZApsaWtlIHRvIGNoYW5nZSB0aGUgY3VycmVudCBi ZWhhdmlvciBpbmRlcGVuZGVudCBvZiB0aGUgQ0NGLXJlbGF0ZWQgY2hhbmdlcy4KCkZvciB0aGUg dXBkYXRlZCBQV00gYmxvY2sgKGF0IGxlYXN0IGZvciBTOTA1WDMsIG5vdCBzdXJlIHdpdGggd2hp Y2ggZmFtaWx5IEFtbG9naWMKZXh0ZW5kZWQgdGhlIFBXTSBibG9jaykgd2UgaGF2ZSBhbiBpbnRl Z3JhdGVkIG9wdGlvbiB0byBhY2hpZXZlIGNvbnN0YW50IGxvdy9oaWdoCm91dHB1dC4gSXQncyBq dXN0IG5vdCBpbXBsZW1lbnRlZCB5ZXQsIGl0J3Mgc29tZXRoaW5nIEkgbWF5IGRvIGFzIG5leHQg c3RlcC4KVGhlIGV4dGVuZGVkIFBXTSBibG9jayBhZGRlZCBuZXcgYml0cyBwd21fQS9CX2NvbnN0 YW50X2VuIHRoYXQgcHJldmVudCB0aGUgZGVmYXVsdAppbmNyZW1lbnQgb2YgdGhlIGhpL2xvIHBl cmlvZC4gQnkgc3VwcG9ydGluZyB0aGVzZSBiaXRzIHdlIGNhbiBhY2hpZXZlIHZhbHVlIDAKZm9y IGhpL2xvLgpJTU8gdGhhdCdzIGVhc2llciB0aGFuIGFkZGluZyBwaW5jdHJsIGhhbmRsaW5nLiBU aGUgcmVtYWluaW5nIHF1ZXN0aW9uIHdvdWxkIGJlCndoZXRoZXIgaXQncyB3b3J0aCBpdCB0byBh ZGQgcGluY3RybCBoYW5kbGluZyBqdXN0IGZvciB0aGUgbGVnYWN5IHZlcnNpb24gb2YgdGhlClBX TSBibG9jay4KCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpsaW51eC1hbWxvZ2ljIG1haWxpbmcgbGlzdApsaW51eC1hbWxvZ2ljQGxpc3RzLmluZnJhZGVh ZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1h bWxvZ2ljCg== 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 97B4EC77B72 for ; Mon, 17 Apr 2023 09:56:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229744AbjDQJ4T (ORCPT ); Mon, 17 Apr 2023 05:56:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57910 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229588AbjDQJ4S (ORCPT ); Mon, 17 Apr 2023 05:56:18 -0400 Received: from mail-ed1-x530.google.com (mail-ed1-x530.google.com [IPv6:2a00:1450:4864:20::530]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 21F5B6A7C for ; Mon, 17 Apr 2023 02:55:48 -0700 (PDT) Received: by mail-ed1-x530.google.com with SMTP id 4fb4d7f45d1cf-50670cc3abfso2786525a12.1 for ; Mon, 17 Apr 2023 02:55:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1681725251; x=1684317251; 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=O0Be3KZ80ormPnApJ2YeiF153NcsJsioYWb5rEh94Ko=; b=AeZsDLKRN9FF9f5z95VIO6HvFKa/K9o/ApQuknKIEjwLK2HNuhh9bbotNWccZHEQRG w7tWaSR7FZpelKUetthK4XXCmJp0H1QN2upMcoPl31nczDC+FZYB80LSFRcwr+s+lWQ4 e7z8XXHpVdkC8dLMjStalodlVOS/GN636ULCv3goZhiJlSHJTzUunm4VJRSfAM5buKGH 2rgtZMWWoM8m00Dj36ojOZx7pFp/64ZbVndw5n9zYHs4JWZQOoEF5C3Dw1rq8fZGUqo1 tKt+Qm3k5C1VICnoLl0Ftd7581WMKKXK07vBcrF8faswBhR23vwwhHPoFn48mkq3bFK1 T1OA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681725251; x=1684317251; 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=O0Be3KZ80ormPnApJ2YeiF153NcsJsioYWb5rEh94Ko=; b=MT2TFGUhXJLSdwTfJvTDkJT+K830VDfT3LugQlYar+qpOuC+yadYPBcQGyyCm4E+Gx 6wrDAz9FAPI8sNPIzc/5f3HSRRB0crCe3mR/VGpAsKAC+3mgES3YjUp2GpLvwOFapsIO YzfIq+8xvh8MhaDwMEdvMT86GZv9WdC80xkRPPv0dieIuyNUa3b7EL4cNH4494X4n2A+ Ge/QCYekG5kyK2uyhvT5fJv/BRDodinjvkx+YfuyVfDu86zcL63L1vJhvSumKmVEHhO5 aTwx21X29RvGbo07g7nFcf1Uh+Yz921QhkwUdDg+W/Q/CJ5fGBmOcfEJShUHk9jw4itt /TIA== X-Gm-Message-State: AAQBX9ct+/peCs39yBtZy1KswN4pKEAvjNM50wDE/7NAv5vqKabYujtg 0XvwGoMeAR5nF8bgrtTUOM8yikZhwQg= X-Google-Smtp-Source: AKy350ZS8M3fkFbw/Gv1f5uCCpkmRF+EtdUOZFc/oNOZ5X73IkA4smHB5oZrPiU+/8lwQN/VOt6VGA== X-Received: by 2002:a05:6402:202f:b0:504:b324:9ec3 with SMTP id ay15-20020a056402202f00b00504b3249ec3mr12662613edb.1.1681725250767; Mon, 17 Apr 2023 02:54:10 -0700 (PDT) Received: from ?IPV6:2a01:c22:770d:1c00:59f1:1548:39fc:ccd5? (dynamic-2a01-0c22-770d-1c00-59f1-1548-39fc-ccd5.c22.pool.telefonica.de. [2a01:c22:770d:1c00:59f1:1548:39fc:ccd5]) by smtp.googlemail.com with ESMTPSA id v16-20020a1709064e9000b0094f663bced2sm1753436eju.33.2023.04.17.02.54.09 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 17 Apr 2023 02:54:10 -0700 (PDT) Message-ID: <73a52391-b380-e491-0e96-5c51c7be487c@gmail.com> Date: Mon, 17 Apr 2023 11:53:58 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.10.0 Content-Language: en-US To: neil.armstrong@linaro.org, Jerome Brunet , Martin Blumenstingl , Neil Armstrong , Kevin Hilman , =?UTF-8?Q?Uwe_Kleine-K=c3=b6nig?= , "thierry.reding@gmail.com" Cc: "linux-arm-kernel@lists.infradead.org" , "open list:ARM/Amlogic Meson..." , linux-pwm@vger.kernel.org References: <9faca2e6-b7a1-4748-7eb0-48f8064e323e@gmail.com> From: Heiner Kallweit Subject: Re: [PATCH v4 4/4] pwm: meson: make full use of common clock framework In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-pwm@vger.kernel.org On 17.04.2023 09:23, Neil Armstrong wrote: > On 13/04/2023 07:54, Heiner Kallweit wrote: >> Newer versions of the PWM block use a core clock with external mux, >> divider, and gate. These components either don't exist any longer in >> the PWM block, or they are bypassed. >> To minimize needed changes for supporting the new version, the internal >> divider and gate should be handled by CCF too. >> >> I didn't see a good way to split the patch, therefore it's somewhat >> bigger. What it does: >> >> - The internal mux is handled by CCF already. Register also internal >>    divider and gate with CCF, so that we have one representation of the >>    input clock: [mux] parent of [divider] parent of [gate] >>    - Now that CCF selects an appropriate mux parent, we don't need the >>    DT-provided default parent any longer. Accordingly we can also omit >>    setting the mux parent directly in the driver. >>    - Instead of manually handling the pre-div divider value, let CCF >>    set the input clock. Targeted input clock frequency is >>    0xffff * 1/period for best precision. >>    - For the "inverted pwm disabled" scenario target an input clock >>    frequency of 1GHz. This ensures that the remaining low pulses >>    have minimum length. >> >> I don't have hw with the old PWM block, therefore I couldn't test this >> patch. With the not yet included extension for the new PWM block >> (channel->clk coming directly from get_clk(external_clk)) I didn't >> notice any problem. My system uses PWM for the CPU voltage regulator >> and for the SDIO 32kHz clock. >> >> Note: The clock gate in the old PWM block is permanently disabled. >> This seems to indicate that it's not used by the new PWM block. >> >> Tested-by: Martin Blumenstingl >> Signed-off-by: Heiner Kallweit >> --- >> Changes to RFT/RFC version: >> - use parent_hws instead of parent_names for div/gate clock >> - use devm_clk_hw_register where the struct clk * returned by >>    devm_clk_register isn't needed >> >> v2: >> - add patch 1 >> - add patch 3 >> - switch to using clk_parent_data in all relevant places >> v3: >> - add flag CLK_IGNORE_UNUSED >> v4: >> - remove variable tmp in meson_pwm_get_state >> - don't use deprecated function devm_clk_register >> --- >>   drivers/pwm/pwm-meson.c | 142 +++++++++++++++++++++++----------------- >>   1 file changed, 83 insertions(+), 59 deletions(-) >> >> diff --git a/drivers/pwm/pwm-meson.c b/drivers/pwm/pwm-meson.c >> index 40a8709ff..80ac71cbc 100644 >> --- a/drivers/pwm/pwm-meson.c >> +++ b/drivers/pwm/pwm-meson.c >> @@ -51,7 +51,7 @@ >>   #define REG_MISC_AB        0x8 >>   #define MISC_B_CLK_EN        23 >>   #define MISC_A_CLK_EN        15 >> -#define MISC_CLK_DIV_MASK    0x7f >> +#define MISC_CLK_DIV_WIDTH    7 >>   #define MISC_B_CLK_DIV_SHIFT    16 >>   #define MISC_A_CLK_DIV_SHIFT    8 >>   #define MISC_B_CLK_SEL_SHIFT    6 >> @@ -87,12 +87,13 @@ static struct meson_pwm_channel_data { >>   }; >>     struct meson_pwm_channel { >> +    unsigned long rate; >>       unsigned int hi; >>       unsigned int lo; >> -    u8 pre_div; >>   -    struct clk *clk_parent; >>       struct clk_mux mux; >> +    struct clk_divider div; >> +    struct clk_gate gate; >>       struct clk *clk; >>   }; >>   @@ -125,16 +126,6 @@ static int meson_pwm_request(struct pwm_chip *chip, struct pwm_device *pwm) >>       struct device *dev = chip->dev; >>       int err; >>   -    if (channel->clk_parent) { >> -        err = clk_set_parent(channel->clk, channel->clk_parent); >> -        if (err < 0) { >> -            dev_err(dev, "failed to set parent %s for %s: %d\n", >> -                __clk_get_name(channel->clk_parent), >> -                __clk_get_name(channel->clk), err); >> -            return err; >> -        } >> -    } >> - >>       err = clk_prepare_enable(channel->clk); >>       if (err < 0) { >>           dev_err(dev, "failed to enable clock %s: %d\n", >> @@ -157,8 +148,9 @@ static int meson_pwm_calc(struct meson_pwm *meson, struct pwm_device *pwm, >>                 const struct pwm_state *state) >>   { >>       struct meson_pwm_channel *channel = &meson->channels[pwm->hwpwm]; >> -    unsigned int duty, period, pre_div, cnt, duty_cnt; >> +    unsigned int duty, period, cnt, duty_cnt; >>       unsigned long fin_freq; >> +    u64 freq; >>         duty = state->duty_cycle; >>       period = state->period; >> @@ -166,7 +158,11 @@ static int meson_pwm_calc(struct meson_pwm *meson, struct pwm_device *pwm, >>       if (state->polarity == PWM_POLARITY_INVERSED) >>           duty = period - duty; >>   -    fin_freq = clk_get_rate(channel->clk); >> +    freq = div64_u64(NSEC_PER_SEC * (u64)0xffff, period); >> +    if (freq > ULONG_MAX) >> +        freq = ULONG_MAX; >> + >> +    fin_freq = clk_round_rate(channel->clk, freq); >>       if (fin_freq == 0) { >>           dev_err(meson->chip.dev, "invalid source clock frequency\n"); >>           return -EINVAL; >> @@ -174,46 +170,35 @@ 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; >> -    } >> - >> -    cnt = div64_u64(fin_freq * (u64)period, NSEC_PER_SEC * (pre_div + 1)); >> +    cnt = div64_u64(fin_freq * (u64)period, NSEC_PER_SEC); >>       if (cnt > 0xffff) { >>           dev_err(meson->chip.dev, "unable to get period cnt\n"); >>           return -EINVAL; >>       } >>   -    dev_dbg(meson->chip.dev, "period=%u pre_div=%u cnt=%u\n", period, >> -        pre_div, cnt); >> +    dev_dbg(meson->chip.dev, "period=%u cnt=%u\n", period, cnt); >>         if (duty == period) { >> -        channel->pre_div = pre_div; >>           channel->hi = cnt; >>           channel->lo = 0; >>       } else if (duty == 0) { >> -        channel->pre_div = pre_div; >>           channel->hi = 0; >>           channel->lo = cnt; >>       } else { >> -        /* Then check is we can have the duty with the same pre_div */ >> -        duty_cnt = div64_u64(fin_freq * (u64)duty, >> -                     NSEC_PER_SEC * (pre_div + 1)); >> +        duty_cnt = div64_u64(fin_freq * (u64)duty, NSEC_PER_SEC); >>           if (duty_cnt > 0xffff) { >>               dev_err(meson->chip.dev, "unable to get duty cycle\n"); >>               return -EINVAL; >>           } >>   -        dev_dbg(meson->chip.dev, "duty=%u pre_div=%u duty_cnt=%u\n", >> -            duty, pre_div, duty_cnt); >> +        dev_dbg(meson->chip.dev, "duty=%u duty_cnt=%u\n", duty, duty_cnt); >>   -        channel->pre_div = pre_div; >>           channel->hi = duty_cnt; >>           channel->lo = cnt - duty_cnt; >>       } >>   +    channel->rate = fin_freq; >> + >>       return 0; >>   } >>   @@ -223,16 +208,15 @@ static void meson_pwm_enable(struct meson_pwm *meson, struct pwm_device *pwm) >>       struct meson_pwm_channel_data *channel_data; >>       unsigned long flags; >>       u32 value; >> +    int err; >>         channel_data = &meson_pwm_per_channel_data[pwm->hwpwm]; >>   -    spin_lock_irqsave(&meson->lock, flags); >> +    err = clk_set_rate(channel->clk, channel->rate); >> +    if (err) >> +        dev_err(meson->chip.dev, "setting clock rate failed\n"); >>   -    value = readl(meson->base + REG_MISC_AB); >> -    value &= ~(MISC_CLK_DIV_MASK << channel_data->clk_div_shift); >> -    value |= channel->pre_div << channel_data->clk_div_shift; >> -    value |= BIT(channel_data->clk_en_bit); >> -    writel(value, meson->base + REG_MISC_AB); >> +    spin_lock_irqsave(&meson->lock, flags); >>         value = FIELD_PREP(PWM_HIGH_MASK, channel->hi) | >>           FIELD_PREP(PWM_LOW_MASK, channel->lo); >> @@ -271,16 +255,16 @@ static int meson_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm, >>               /* >>                * This IP block revision doesn't have an "always high" >>                * setting which we can use for "inverted disabled". >> -             * Instead we achieve this using the same settings >> -             * that we use a pre_div of 0 (to get the shortest >> -             * possible duration for one "count") and >> +             * Instead we achieve this by setting an arbitrary, >> +             * very high frequency, resulting in the shortest >> +             * possible duration for one "count" and >>                * "period == duty_cycle". This results in a signal >>                * which is LOW for one "count", while being HIGH for >>                * the rest of the (so the signal is HIGH for slightly >>                * less than 100% of the period, but this is the best >>                * we can achieve). >>                */ >> -            channel->pre_div = 0; >> +            channel->rate = 1000000000; >>               channel->hi = ~0; >>               channel->lo = 0; > > This looks like a really bad idea... please don't do that and instead introduce > some pinctrl states where we set the PWM pin as GPIO mode high/low state like we > did for SPI: > https://lore.kernel.org/r/20221004-up-aml-fix-spi-v4-2-0342d8e10c49@baylibre.com > There's no behavior change in this patch set. So my understanding is that you'd like to change the current behavior independent of the CCF-related changes. For the updated PWM block (at least for S905X3, not sure with which family Amlogic extended the PWM block) we have an integrated option to achieve constant low/high output. It's just not implemented yet, it's something I may do as next step. The extended PWM block added new bits pwm_A/B_constant_en that prevent the default increment of the hi/lo period. By supporting these bits we can achieve value 0 for hi/lo. IMO that's easier than adding pinctrl handling. The remaining question would be whether it's worth it to add pinctrl handling just for the legacy version of the PWM block. 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 46D8CC77B70 for ; Mon, 17 Apr 2023 09:55:13 +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=8CbX2IPjHTShz6737HY1L5+ikKg3/aLypUVMj1+hVoA=; b=Pte/Xsd81xMpeY 3B6jcPN4ycOoCSMYE+5czouGPuzowT9lTLN5or5jhQkawXbtBtGPfYxhVkIkC3OmjaqJs3umCja8l NhGEWfH2tLpOz/hMCrL4sOTIq/jdQE2zQzzQWRwj8Va8taDmIZZ3uQM1YQQRhYSF5PHoQ3bwE/Au7 F6eI6WUqMCpOrFx8tcz8JbdlUtxvnEzCBBl7YrDgLOlQ/cu52hCKQ9UlKHK6dXT2Z8P5bj1+MmyEA jxquJG9klHaZSsm6jAHxI4tljMsfGD51FOyl3N8IqFQWP3WdEgUbFHR/jp1qBagBB4xsPbhgdfjPS RWR+VToH3igyceK7Fkxw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1poLYv-00Fdbr-1Z; Mon, 17 Apr 2023 09:54:17 +0000 Received: from mail-ed1-x529.google.com ([2a00:1450:4864:20::529]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1poLYr-00Fdb9-0S; Mon, 17 Apr 2023 09:54:15 +0000 Received: by mail-ed1-x529.google.com with SMTP id 4fb4d7f45d1cf-504efe702d5so3625974a12.3; Mon, 17 Apr 2023 02:54:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1681725251; x=1684317251; 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=O0Be3KZ80ormPnApJ2YeiF153NcsJsioYWb5rEh94Ko=; b=AeZsDLKRN9FF9f5z95VIO6HvFKa/K9o/ApQuknKIEjwLK2HNuhh9bbotNWccZHEQRG w7tWaSR7FZpelKUetthK4XXCmJp0H1QN2upMcoPl31nczDC+FZYB80LSFRcwr+s+lWQ4 e7z8XXHpVdkC8dLMjStalodlVOS/GN636ULCv3goZhiJlSHJTzUunm4VJRSfAM5buKGH 2rgtZMWWoM8m00Dj36ojOZx7pFp/64ZbVndw5n9zYHs4JWZQOoEF5C3Dw1rq8fZGUqo1 tKt+Qm3k5C1VICnoLl0Ftd7581WMKKXK07vBcrF8faswBhR23vwwhHPoFn48mkq3bFK1 T1OA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681725251; x=1684317251; 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=O0Be3KZ80ormPnApJ2YeiF153NcsJsioYWb5rEh94Ko=; b=fHlO3oHBsnjvK/M+7chmTdlXBrMqxReQPTw9ZVhjuZObkD05sJU0FFSJkCmWZzQoIj VN1zUDVhzhEFjsO7Kh9eVHsjrNkAvW1y1W2GoVIQWfiTZjcSRbY3E8pFAF5nz8OM0vzr t/t6w1Z/+E1nXfdU+qiAInK3fmMU3TlBaUphnUl2hLFoCHyLm6+UCH6nIzpd/nD8t2F5 OUhJEWIahq524GoMHc67nAKp5y9bHHeZRXnD0QhV0B8Rs1vZLmnhbf3O274LFrr5wUA7 hsNGeQBQ1PJG+DFUl90Q95eQkqXnZd79xQwIg/ji8KCEkN1SbMlj6mWlgpFY1CYKq8N0 YNPQ== X-Gm-Message-State: AAQBX9eyk7VTrlP6c9MzHyKsS00sjVMSTDJ2F8L0wT2HDloHawAy5ms+ M9+abl45pVtEAyNinu4infU= X-Google-Smtp-Source: AKy350ZS8M3fkFbw/Gv1f5uCCpkmRF+EtdUOZFc/oNOZ5X73IkA4smHB5oZrPiU+/8lwQN/VOt6VGA== X-Received: by 2002:a05:6402:202f:b0:504:b324:9ec3 with SMTP id ay15-20020a056402202f00b00504b3249ec3mr12662613edb.1.1681725250767; Mon, 17 Apr 2023 02:54:10 -0700 (PDT) Received: from ?IPV6:2a01:c22:770d:1c00:59f1:1548:39fc:ccd5? (dynamic-2a01-0c22-770d-1c00-59f1-1548-39fc-ccd5.c22.pool.telefonica.de. [2a01:c22:770d:1c00:59f1:1548:39fc:ccd5]) by smtp.googlemail.com with ESMTPSA id v16-20020a1709064e9000b0094f663bced2sm1753436eju.33.2023.04.17.02.54.09 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 17 Apr 2023 02:54:10 -0700 (PDT) Message-ID: <73a52391-b380-e491-0e96-5c51c7be487c@gmail.com> Date: Mon, 17 Apr 2023 11:53:58 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.10.0 Content-Language: en-US To: neil.armstrong@linaro.org, Jerome Brunet , Martin Blumenstingl , Neil Armstrong , Kevin Hilman , =?UTF-8?Q?Uwe_Kleine-K=c3=b6nig?= , "thierry.reding@gmail.com" Cc: "linux-arm-kernel@lists.infradead.org" , "open list:ARM/Amlogic Meson..." , linux-pwm@vger.kernel.org References: <9faca2e6-b7a1-4748-7eb0-48f8064e323e@gmail.com> From: Heiner Kallweit Subject: Re: [PATCH v4 4/4] pwm: meson: make full use of common clock framework In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230417_025413_187247_E2DC0047 X-CRM114-Status: GOOD ( 34.11 ) 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 T24gMTcuMDQuMjAyMyAwOToyMywgTmVpbCBBcm1zdHJvbmcgd3JvdGU6Cj4gT24gMTMvMDQvMjAy MyAwNzo1NCwgSGVpbmVyIEthbGx3ZWl0IHdyb3RlOgo+PiBOZXdlciB2ZXJzaW9ucyBvZiB0aGUg UFdNIGJsb2NrIHVzZSBhIGNvcmUgY2xvY2sgd2l0aCBleHRlcm5hbCBtdXgsCj4+IGRpdmlkZXIs IGFuZCBnYXRlLiBUaGVzZSBjb21wb25lbnRzIGVpdGhlciBkb24ndCBleGlzdCBhbnkgbG9uZ2Vy IGluCj4+IHRoZSBQV00gYmxvY2ssIG9yIHRoZXkgYXJlIGJ5cGFzc2VkLgo+PiBUbyBtaW5pbWl6 ZSBuZWVkZWQgY2hhbmdlcyBmb3Igc3VwcG9ydGluZyB0aGUgbmV3IHZlcnNpb24sIHRoZSBpbnRl cm5hbAo+PiBkaXZpZGVyIGFuZCBnYXRlIHNob3VsZCBiZSBoYW5kbGVkIGJ5IENDRiB0b28uCj4+ Cj4+IEkgZGlkbid0IHNlZSBhIGdvb2Qgd2F5IHRvIHNwbGl0IHRoZSBwYXRjaCwgdGhlcmVmb3Jl IGl0J3Mgc29tZXdoYXQKPj4gYmlnZ2VyLiBXaGF0IGl0IGRvZXM6Cj4+Cj4+IC0gVGhlIGludGVy bmFsIG11eCBpcyBoYW5kbGVkIGJ5IENDRiBhbHJlYWR5LiBSZWdpc3RlciBhbHNvIGludGVybmFs Cj4+IMKgwqAgZGl2aWRlciBhbmQgZ2F0ZSB3aXRoIENDRiwgc28gdGhhdCB3ZSBoYXZlIG9uZSBy ZXByZXNlbnRhdGlvbiBvZiB0aGUKPj4gwqDCoCBpbnB1dCBjbG9jazogW211eF0gcGFyZW50IG9m IFtkaXZpZGVyXSBwYXJlbnQgb2YgW2dhdGVdCj4+IMKgwqAgLSBOb3cgdGhhdCBDQ0Ygc2VsZWN0 cyBhbiBhcHByb3ByaWF0ZSBtdXggcGFyZW50LCB3ZSBkb24ndCBuZWVkIHRoZQo+PiDCoMKgIERU LXByb3ZpZGVkIGRlZmF1bHQgcGFyZW50IGFueSBsb25nZXIuIEFjY29yZGluZ2x5IHdlIGNhbiBh bHNvIG9taXQKPj4gwqDCoCBzZXR0aW5nIHRoZSBtdXggcGFyZW50IGRpcmVjdGx5IGluIHRoZSBk cml2ZXIuCj4+IMKgwqAgLSBJbnN0ZWFkIG9mIG1hbnVhbGx5IGhhbmRsaW5nIHRoZSBwcmUtZGl2 IGRpdmlkZXIgdmFsdWUsIGxldCBDQ0YKPj4gwqDCoCBzZXQgdGhlIGlucHV0IGNsb2NrLiBUYXJn ZXRlZCBpbnB1dCBjbG9jayBmcmVxdWVuY3kgaXMKPj4gwqDCoCAweGZmZmYgKiAxL3BlcmlvZCBm b3IgYmVzdCBwcmVjaXNpb24uCj4+IMKgwqAgLSBGb3IgdGhlICJpbnZlcnRlZCBwd20gZGlzYWJs ZWQiIHNjZW5hcmlvIHRhcmdldCBhbiBpbnB1dCBjbG9jawo+PiDCoMKgIGZyZXF1ZW5jeSBvZiAx R0h6LiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgcmVtYWluaW5nIGxvdyBwdWxzZXMKPj4gwqDCoCBo YXZlIG1pbmltdW0gbGVuZ3RoLgo+Pgo+PiBJIGRvbid0IGhhdmUgaHcgd2l0aCB0aGUgb2xkIFBX TSBibG9jaywgdGhlcmVmb3JlIEkgY291bGRuJ3QgdGVzdCB0aGlzCj4+IHBhdGNoLiBXaXRoIHRo ZSBub3QgeWV0IGluY2x1ZGVkIGV4dGVuc2lvbiBmb3IgdGhlIG5ldyBQV00gYmxvY2sKPj4gKGNo YW5uZWwtPmNsayBjb21pbmcgZGlyZWN0bHkgZnJvbSBnZXRfY2xrKGV4dGVybmFsX2NsaykpIEkg ZGlkbid0Cj4+IG5vdGljZSBhbnkgcHJvYmxlbS4gTXkgc3lzdGVtIHVzZXMgUFdNIGZvciB0aGUg Q1BVIHZvbHRhZ2UgcmVndWxhdG9yCj4+IGFuZCBmb3IgdGhlIFNESU8gMzJrSHogY2xvY2suCj4+ Cj4+IE5vdGU6IFRoZSBjbG9jayBnYXRlIGluIHRoZSBvbGQgUFdNIGJsb2NrIGlzIHBlcm1hbmVu dGx5IGRpc2FibGVkLgo+PiBUaGlzIHNlZW1zIHRvIGluZGljYXRlIHRoYXQgaXQncyBub3QgdXNl ZCBieSB0aGUgbmV3IFBXTSBibG9jay4KPj4KPj4gVGVzdGVkLWJ5OiBNYXJ0aW4gQmx1bWVuc3Rp bmdsIDxtYXJ0aW4uYmx1bWVuc3RpbmdsQGdvb2dsZW1haWwuY29tPgo+PiBTaWduZWQtb2ZmLWJ5 OiBIZWluZXIgS2FsbHdlaXQgPGhrYWxsd2VpdDFAZ21haWwuY29tPgo+PiAtLS0KPj4gQ2hhbmdl cyB0byBSRlQvUkZDIHZlcnNpb246Cj4+IC0gdXNlIHBhcmVudF9od3MgaW5zdGVhZCBvZiBwYXJl bnRfbmFtZXMgZm9yIGRpdi9nYXRlIGNsb2NrCj4+IC0gdXNlIGRldm1fY2xrX2h3X3JlZ2lzdGVy IHdoZXJlIHRoZSBzdHJ1Y3QgY2xrICogcmV0dXJuZWQgYnkKPj4gwqDCoCBkZXZtX2Nsa19yZWdp c3RlciBpc24ndCBuZWVkZWQKPj4KPj4gdjI6Cj4+IC0gYWRkIHBhdGNoIDEKPj4gLSBhZGQgcGF0 Y2ggMwo+PiAtIHN3aXRjaCB0byB1c2luZyBjbGtfcGFyZW50X2RhdGEgaW4gYWxsIHJlbGV2YW50 IHBsYWNlcwo+PiB2MzoKPj4gLSBhZGQgZmxhZyBDTEtfSUdOT1JFX1VOVVNFRAo+PiB2NDoKPj4g LSByZW1vdmUgdmFyaWFibGUgdG1wIGluIG1lc29uX3B3bV9nZXRfc3RhdGUKPj4gLSBkb24ndCB1 c2UgZGVwcmVjYXRlZCBmdW5jdGlvbiBkZXZtX2Nsa19yZWdpc3Rlcgo+PiAtLS0KPj4gwqAgZHJp dmVycy9wd20vcHdtLW1lc29uLmMgfCAxNDIgKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0t LS0tLS0tLS0tLQo+PiDCoCAxIGZpbGUgY2hhbmdlZCwgODMgaW5zZXJ0aW9ucygrKSwgNTkgZGVs ZXRpb25zKC0pCj4+Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3B3bS9wd20tbWVzb24uYyBiL2Ry aXZlcnMvcHdtL3B3bS1tZXNvbi5jCj4+IGluZGV4IDQwYTg3MDlmZi4uODBhYzcxY2JjIDEwMDY0 NAo+PiAtLS0gYS9kcml2ZXJzL3B3bS9wd20tbWVzb24uYwo+PiArKysgYi9kcml2ZXJzL3B3bS9w d20tbWVzb24uYwo+PiBAQCAtNTEsNyArNTEsNyBAQAo+PiDCoCAjZGVmaW5lIFJFR19NSVNDX0FC wqDCoMKgwqDCoMKgwqAgMHg4Cj4+IMKgICNkZWZpbmUgTUlTQ19CX0NMS19FTsKgwqDCoMKgwqDC oMKgIDIzCj4+IMKgICNkZWZpbmUgTUlTQ19BX0NMS19FTsKgwqDCoMKgwqDCoMKgIDE1Cj4+IC0j ZGVmaW5lIE1JU0NfQ0xLX0RJVl9NQVNLwqDCoMKgIDB4N2YKPj4gKyNkZWZpbmUgTUlTQ19DTEtf RElWX1dJRFRIwqDCoMKgIDcKPj4gwqAgI2RlZmluZSBNSVNDX0JfQ0xLX0RJVl9TSElGVMKgwqDC oCAxNgo+PiDCoCAjZGVmaW5lIE1JU0NfQV9DTEtfRElWX1NISUZUwqDCoMKgIDgKPj4gwqAgI2Rl ZmluZSBNSVNDX0JfQ0xLX1NFTF9TSElGVMKgwqDCoCA2Cj4+IEBAIC04NywxMiArODcsMTMgQEAg c3RhdGljIHN0cnVjdCBtZXNvbl9wd21fY2hhbm5lbF9kYXRhIHsKPj4gwqAgfTsKPj4gwqAgwqAg c3RydWN0IG1lc29uX3B3bV9jaGFubmVsIHsKPj4gK8KgwqDCoCB1bnNpZ25lZCBsb25nIHJhdGU7 Cj4+IMKgwqDCoMKgwqAgdW5zaWduZWQgaW50IGhpOwo+PiDCoMKgwqDCoMKgIHVuc2lnbmVkIGlu dCBsbzsKPj4gLcKgwqDCoCB1OCBwcmVfZGl2Owo+PiDCoCAtwqDCoMKgIHN0cnVjdCBjbGsgKmNs a19wYXJlbnQ7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IGNsa19tdXggbXV4Owo+PiArwqDCoMKgIHN0 cnVjdCBjbGtfZGl2aWRlciBkaXY7Cj4+ICvCoMKgwqAgc3RydWN0IGNsa19nYXRlIGdhdGU7Cj4+ IMKgwqDCoMKgwqAgc3RydWN0IGNsayAqY2xrOwo+PiDCoCB9Owo+PiDCoCBAQCAtMTI1LDE2ICsx MjYsNiBAQCBzdGF0aWMgaW50IG1lc29uX3B3bV9yZXF1ZXN0KHN0cnVjdCBwd21fY2hpcCAqY2hp cCwgc3RydWN0IHB3bV9kZXZpY2UgKnB3bSkKPj4gwqDCoMKgwqDCoCBzdHJ1Y3QgZGV2aWNlICpk ZXYgPSBjaGlwLT5kZXY7Cj4+IMKgwqDCoMKgwqAgaW50IGVycjsKPj4gwqAgLcKgwqDCoCBpZiAo Y2hhbm5lbC0+Y2xrX3BhcmVudCkgewo+PiAtwqDCoMKgwqDCoMKgwqAgZXJyID0gY2xrX3NldF9w YXJlbnQoY2hhbm5lbC0+Y2xrLCBjaGFubmVsLT5jbGtfcGFyZW50KTsKPj4gLcKgwqDCoMKgwqDC oMKgIGlmIChlcnIgPCAwKSB7Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRldl9lcnIoZGV2 LCAiZmFpbGVkIHRvIHNldCBwYXJlbnQgJXMgZm9yICVzOiAlZFxuIiwKPj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBfX2Nsa19nZXRfbmFtZShjaGFubmVsLT5jbGtfcGFyZW50KSwK Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBfX2Nsa19nZXRfbmFtZShjaGFubmVs LT5jbGspLCBlcnIpOwo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gZXJyOwo+PiAt wqDCoMKgwqDCoMKgwqAgfQo+PiAtwqDCoMKgIH0KPj4gLQo+PiDCoMKgwqDCoMKgIGVyciA9IGNs a19wcmVwYXJlX2VuYWJsZShjaGFubmVsLT5jbGspOwo+PiDCoMKgwqDCoMKgIGlmIChlcnIgPCAw KSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKGRldiwgImZhaWxlZCB0byBlbmFibGUg Y2xvY2sgJXM6ICVkXG4iLAo+PiBAQCAtMTU3LDggKzE0OCw5IEBAIHN0YXRpYyBpbnQgbWVzb25f cHdtX2NhbGMoc3RydWN0IG1lc29uX3B3bSAqbWVzb24sIHN0cnVjdCBwd21fZGV2aWNlICpwd20s Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25zdCBzdHJ1Y3QgcHdtX3N0YXRl ICpzdGF0ZSkKPj4gwqAgewo+PiDCoMKgwqDCoMKgIHN0cnVjdCBtZXNvbl9wd21fY2hhbm5lbCAq Y2hhbm5lbCA9ICZtZXNvbi0+Y2hhbm5lbHNbcHdtLT5od3B3bV07Cj4+IC3CoMKgwqAgdW5zaWdu ZWQgaW50IGR1dHksIHBlcmlvZCwgcHJlX2RpdiwgY250LCBkdXR5X2NudDsKPj4gK8KgwqDCoCB1 bnNpZ25lZCBpbnQgZHV0eSwgcGVyaW9kLCBjbnQsIGR1dHlfY250Owo+PiDCoMKgwqDCoMKgIHVu c2lnbmVkIGxvbmcgZmluX2ZyZXE7Cj4+ICvCoMKgwqAgdTY0IGZyZXE7Cj4+IMKgIMKgwqDCoMKg wqAgZHV0eSA9IHN0YXRlLT5kdXR5X2N5Y2xlOwo+PiDCoMKgwqDCoMKgIHBlcmlvZCA9IHN0YXRl LT5wZXJpb2Q7Cj4+IEBAIC0xNjYsNyArMTU4LDExIEBAIHN0YXRpYyBpbnQgbWVzb25fcHdtX2Nh bGMoc3RydWN0IG1lc29uX3B3bSAqbWVzb24sIHN0cnVjdCBwd21fZGV2aWNlICpwd20sCj4+IMKg wqDCoMKgwqAgaWYgKHN0YXRlLT5wb2xhcml0eSA9PSBQV01fUE9MQVJJVFlfSU5WRVJTRUQpCj4+ IMKgwqDCoMKgwqDCoMKgwqDCoCBkdXR5ID0gcGVyaW9kIC0gZHV0eTsKPj4gwqAgLcKgwqDCoCBm aW5fZnJlcSA9IGNsa19nZXRfcmF0ZShjaGFubmVsLT5jbGspOwo+PiArwqDCoMKgIGZyZXEgPSBk aXY2NF91NjQoTlNFQ19QRVJfU0VDICogKHU2NCkweGZmZmYsIHBlcmlvZCk7Cj4+ICvCoMKgwqAg aWYgKGZyZXEgPiBVTE9OR19NQVgpCj4+ICvCoMKgwqDCoMKgwqDCoCBmcmVxID0gVUxPTkdfTUFY Owo+PiArCj4+ICvCoMKgwqAgZmluX2ZyZXEgPSBjbGtfcm91bmRfcmF0ZShjaGFubmVsLT5jbGss IGZyZXEpOwo+PiDCoMKgwqDCoMKgIGlmIChmaW5fZnJlcSA9PSAwKSB7Cj4+IMKgwqDCoMKgwqDC oMKgwqDCoCBkZXZfZXJyKG1lc29uLT5jaGlwLmRldiwgImludmFsaWQgc291cmNlIGNsb2NrIGZy ZXF1ZW5jeVxuIik7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4gQEAg LTE3NCw0NiArMTcwLDM1IEBAIHN0YXRpYyBpbnQgbWVzb25fcHdtX2NhbGMoc3RydWN0IG1lc29u X3B3bSAqbWVzb24sIHN0cnVjdCBwd21fZGV2aWNlICpwd20sCj4+IMKgIMKgwqDCoMKgwqAgZGV2 X2RiZyhtZXNvbi0+Y2hpcC5kZXYsICJmaW5fZnJlcTogJWx1IEh6XG4iLCBmaW5fZnJlcSk7Cj4+ IMKgIC3CoMKgwqAgcHJlX2RpdiA9IGRpdjY0X3U2NChmaW5fZnJlcSAqICh1NjQpcGVyaW9kLCBO U0VDX1BFUl9TRUMgKiAweGZmZmZMTCk7Cj4+IC3CoMKgwqAgaWYgKHByZV9kaXYgPiBNSVNDX0NM S19ESVZfTUFTSykgewo+PiAtwqDCoMKgwqDCoMKgwqAgZGV2X2VycihtZXNvbi0+Y2hpcC5kZXYs ICJ1bmFibGUgdG8gZ2V0IHBlcmlvZCBwcmVfZGl2XG4iKTsKPj4gLcKgwqDCoMKgwqDCoMKgIHJl dHVybiAtRUlOVkFMOwo+PiAtwqDCoMKgIH0KPj4gLQo+PiAtwqDCoMKgIGNudCA9IGRpdjY0X3U2 NChmaW5fZnJlcSAqICh1NjQpcGVyaW9kLCBOU0VDX1BFUl9TRUMgKiAocHJlX2RpdiArIDEpKTsK Pj4gK8KgwqDCoCBjbnQgPSBkaXY2NF91NjQoZmluX2ZyZXEgKiAodTY0KXBlcmlvZCwgTlNFQ19Q RVJfU0VDKTsKPj4gwqDCoMKgwqDCoCBpZiAoY250ID4gMHhmZmZmKSB7Cj4+IMKgwqDCoMKgwqDC oMKgwqDCoCBkZXZfZXJyKG1lc29uLT5jaGlwLmRldiwgInVuYWJsZSB0byBnZXQgcGVyaW9kIGNu dFxuIik7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4gwqDCoMKgwqDC oCB9Cj4+IMKgIC3CoMKgwqAgZGV2X2RiZyhtZXNvbi0+Y2hpcC5kZXYsICJwZXJpb2Q9JXUgcHJl X2Rpdj0ldSBjbnQ9JXVcbiIsIHBlcmlvZCwKPj4gLcKgwqDCoMKgwqDCoMKgIHByZV9kaXYsIGNu dCk7Cj4+ICvCoMKgwqAgZGV2X2RiZyhtZXNvbi0+Y2hpcC5kZXYsICJwZXJpb2Q9JXUgY250PSV1 XG4iLCBwZXJpb2QsIGNudCk7Cj4+IMKgIMKgwqDCoMKgwqAgaWYgKGR1dHkgPT0gcGVyaW9kKSB7 Cj4+IC3CoMKgwqDCoMKgwqDCoCBjaGFubmVsLT5wcmVfZGl2ID0gcHJlX2RpdjsKPj4gwqDCoMKg wqDCoMKgwqDCoMKgIGNoYW5uZWwtPmhpID0gY250Owo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgY2hh bm5lbC0+bG8gPSAwOwo+PiDCoMKgwqDCoMKgIH0gZWxzZSBpZiAoZHV0eSA9PSAwKSB7Cj4+IC3C oMKgwqDCoMKgwqDCoCBjaGFubmVsLT5wcmVfZGl2ID0gcHJlX2RpdjsKPj4gwqDCoMKgwqDCoMKg wqDCoMKgIGNoYW5uZWwtPmhpID0gMDsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIGNoYW5uZWwtPmxv ID0gY250Owo+PiDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4+IC3CoMKgwqDCoMKgwqDCoCAvKiBUaGVu IGNoZWNrIGlzIHdlIGNhbiBoYXZlIHRoZSBkdXR5IHdpdGggdGhlIHNhbWUgcHJlX2RpdiAqLwo+ PiAtwqDCoMKgwqDCoMKgwqAgZHV0eV9jbnQgPSBkaXY2NF91NjQoZmluX2ZyZXEgKiAodTY0KWR1 dHksCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIE5TRUNfUEVS X1NFQyAqIChwcmVfZGl2ICsgMSkpOwo+PiArwqDCoMKgwqDCoMKgwqAgZHV0eV9jbnQgPSBkaXY2 NF91NjQoZmluX2ZyZXEgKiAodTY0KWR1dHksIE5TRUNfUEVSX1NFQyk7Cj4+IMKgwqDCoMKgwqDC oMKgwqDCoCBpZiAoZHV0eV9jbnQgPiAweGZmZmYpIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgZGV2X2VycihtZXNvbi0+Y2hpcC5kZXYsICJ1bmFibGUgdG8gZ2V0IGR1dHkgY3ljbGVc biIpOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVJTlZBTDsKPj4gwqDC oMKgwqDCoMKgwqDCoMKgIH0KPj4gwqAgLcKgwqDCoMKgwqDCoMKgIGRldl9kYmcobWVzb24tPmNo aXAuZGV2LCAiZHV0eT0ldSBwcmVfZGl2PSV1IGR1dHlfY250PSV1XG4iLAo+PiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBkdXR5LCBwcmVfZGl2LCBkdXR5X2NudCk7Cj4+ICvCoMKgwqDCoMKgwqDC oCBkZXZfZGJnKG1lc29uLT5jaGlwLmRldiwgImR1dHk9JXUgZHV0eV9jbnQ9JXVcbiIsIGR1dHks IGR1dHlfY250KTsKPj4gwqAgLcKgwqDCoMKgwqDCoMKgIGNoYW5uZWwtPnByZV9kaXYgPSBwcmVf ZGl2Owo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgY2hhbm5lbC0+aGkgPSBkdXR5X2NudDsKPj4gwqDC oMKgwqDCoMKgwqDCoMKgIGNoYW5uZWwtPmxvID0gY250IC0gZHV0eV9jbnQ7Cj4+IMKgwqDCoMKg wqAgfQo+PiDCoCArwqDCoMKgIGNoYW5uZWwtPnJhdGUgPSBmaW5fZnJlcTsKPj4gKwo+PiDCoMKg wqDCoMKgIHJldHVybiAwOwo+PiDCoCB9Cj4+IMKgIEBAIC0yMjMsMTYgKzIwOCwxNSBAQCBzdGF0 aWMgdm9pZCBtZXNvbl9wd21fZW5hYmxlKHN0cnVjdCBtZXNvbl9wd20gKm1lc29uLCBzdHJ1Y3Qg cHdtX2RldmljZSAqcHdtKQo+PiDCoMKgwqDCoMKgIHN0cnVjdCBtZXNvbl9wd21fY2hhbm5lbF9k YXRhICpjaGFubmVsX2RhdGE7Cj4+IMKgwqDCoMKgwqAgdW5zaWduZWQgbG9uZyBmbGFnczsKPj4g wqDCoMKgwqDCoCB1MzIgdmFsdWU7Cj4+ICvCoMKgwqAgaW50IGVycjsKPj4gwqAgwqDCoMKgwqDC oCBjaGFubmVsX2RhdGEgPSAmbWVzb25fcHdtX3Blcl9jaGFubmVsX2RhdGFbcHdtLT5od3B3bV07 Cj4+IMKgIC3CoMKgwqAgc3Bpbl9sb2NrX2lycXNhdmUoJm1lc29uLT5sb2NrLCBmbGFncyk7Cj4+ ICvCoMKgwqAgZXJyID0gY2xrX3NldF9yYXRlKGNoYW5uZWwtPmNsaywgY2hhbm5lbC0+cmF0ZSk7 Cj4+ICvCoMKgwqAgaWYgKGVycikKPj4gK8KgwqDCoMKgwqDCoMKgIGRldl9lcnIobWVzb24tPmNo aXAuZGV2LCAic2V0dGluZyBjbG9jayByYXRlIGZhaWxlZFxuIik7Cj4+IMKgIC3CoMKgwqAgdmFs dWUgPSByZWFkbChtZXNvbi0+YmFzZSArIFJFR19NSVNDX0FCKTsKPj4gLcKgwqDCoCB2YWx1ZSAm PSB+KE1JU0NfQ0xLX0RJVl9NQVNLIDw8IGNoYW5uZWxfZGF0YS0+Y2xrX2Rpdl9zaGlmdCk7Cj4+ IC3CoMKgwqAgdmFsdWUgfD0gY2hhbm5lbC0+cHJlX2RpdiA8PCBjaGFubmVsX2RhdGEtPmNsa19k aXZfc2hpZnQ7Cj4+IC3CoMKgwqAgdmFsdWUgfD0gQklUKGNoYW5uZWxfZGF0YS0+Y2xrX2VuX2Jp dCk7Cj4+IC3CoMKgwqAgd3JpdGVsKHZhbHVlLCBtZXNvbi0+YmFzZSArIFJFR19NSVNDX0FCKTsK Pj4gK8KgwqDCoCBzcGluX2xvY2tfaXJxc2F2ZSgmbWVzb24tPmxvY2ssIGZsYWdzKTsKPj4gwqAg wqDCoMKgwqDCoCB2YWx1ZSA9IEZJRUxEX1BSRVAoUFdNX0hJR0hfTUFTSywgY2hhbm5lbC0+aGkp IHwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIEZJRUxEX1BSRVAoUFdNX0xPV19NQVNLLCBjaGFubmVs LT5sbyk7Cj4+IEBAIC0yNzEsMTYgKzI1NSwxNiBAQCBzdGF0aWMgaW50IG1lc29uX3B3bV9hcHBs eShzdHJ1Y3QgcHdtX2NoaXAgKmNoaXAsIHN0cnVjdCBwd21fZGV2aWNlICpwd20sCj4+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg KiBUaGlzIElQIGJsb2NrIHJldmlzaW9uIGRvZXNuJ3QgaGF2ZSBhbiAiYWx3YXlzIGhpZ2giCj4+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBzZXR0aW5nIHdoaWNoIHdlIGNhbiB1c2Ug Zm9yICJpbnZlcnRlZCBkaXNhYmxlZCIuCj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBJ bnN0ZWFkIHdlIGFjaGlldmUgdGhpcyB1c2luZyB0aGUgc2FtZSBzZXR0aW5ncwo+PiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgICogdGhhdCB3ZSB1c2UgYSBwcmVfZGl2IG9mIDAgKHRvIGdldCB0 aGUgc2hvcnRlc3QKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIHBvc3NpYmxlIGR1cmF0 aW9uIGZvciBvbmUgImNvdW50IikgYW5kCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBJ bnN0ZWFkIHdlIGFjaGlldmUgdGhpcyBieSBzZXR0aW5nIGFuIGFyYml0cmFyeSwKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAqIHZlcnkgaGlnaCBmcmVxdWVuY3ksIHJlc3VsdGluZyBpbiB0 aGUgc2hvcnRlc3QKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIHBvc3NpYmxlIGR1cmF0 aW9uIGZvciBvbmUgImNvdW50IiBhbmQKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAq ICJwZXJpb2QgPT0gZHV0eV9jeWNsZSIuIFRoaXMgcmVzdWx0cyBpbiBhIHNpZ25hbAo+PiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogd2hpY2ggaXMgTE9XIGZvciBvbmUgImNvdW50Iiwg d2hpbGUgYmVpbmcgSElHSCBmb3IKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIHRo ZSByZXN0IG9mIHRoZSAoc28gdGhlIHNpZ25hbCBpcyBISUdIIGZvciBzbGlnaHRseQo+PiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogbGVzcyB0aGFuIDEwMCUgb2YgdGhlIHBlcmlvZCwg YnV0IHRoaXMgaXMgdGhlIGJlc3QKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIHdl IGNhbiBhY2hpZXZlKS4KPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqLwo+PiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBjaGFubmVsLT5wcmVfZGl2ID0gMDsKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgY2hhbm5lbC0+cmF0ZSA9IDEwMDAwMDAwMDA7Cj4+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGNoYW5uZWwtPmhpID0gfjA7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGNoYW5uZWwtPmxvID0gMDsKPiAKPiBUaGlzIGxvb2tzIGxpa2UgYSByZWFsbHkgYmFkIGlk ZWEuLi4gcGxlYXNlIGRvbid0IGRvIHRoYXQgYW5kIGluc3RlYWQgaW50cm9kdWNlCj4gc29tZSBw aW5jdHJsIHN0YXRlcyB3aGVyZSB3ZSBzZXQgdGhlIFBXTSBwaW4gYXMgR1BJTyBtb2RlIGhpZ2gv bG93IHN0YXRlIGxpa2Ugd2UKPiBkaWQgZm9yIFNQSToKPiBodHRwczovL2xvcmUua2VybmVsLm9y Zy9yLzIwMjIxMDA0LXVwLWFtbC1maXgtc3BpLXY0LTItMDM0MmQ4ZTEwYzQ5QGJheWxpYnJlLmNv bQo+IAoKVGhlcmUncyBubyBiZWhhdmlvciBjaGFuZ2UgaW4gdGhpcyBwYXRjaCBzZXQuIFNvIG15 IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB5b3UnZApsaWtlIHRvIGNoYW5nZSB0aGUgY3VycmVudCBi ZWhhdmlvciBpbmRlcGVuZGVudCBvZiB0aGUgQ0NGLXJlbGF0ZWQgY2hhbmdlcy4KCkZvciB0aGUg dXBkYXRlZCBQV00gYmxvY2sgKGF0IGxlYXN0IGZvciBTOTA1WDMsIG5vdCBzdXJlIHdpdGggd2hp Y2ggZmFtaWx5IEFtbG9naWMKZXh0ZW5kZWQgdGhlIFBXTSBibG9jaykgd2UgaGF2ZSBhbiBpbnRl Z3JhdGVkIG9wdGlvbiB0byBhY2hpZXZlIGNvbnN0YW50IGxvdy9oaWdoCm91dHB1dC4gSXQncyBq dXN0IG5vdCBpbXBsZW1lbnRlZCB5ZXQsIGl0J3Mgc29tZXRoaW5nIEkgbWF5IGRvIGFzIG5leHQg c3RlcC4KVGhlIGV4dGVuZGVkIFBXTSBibG9jayBhZGRlZCBuZXcgYml0cyBwd21fQS9CX2NvbnN0 YW50X2VuIHRoYXQgcHJldmVudCB0aGUgZGVmYXVsdAppbmNyZW1lbnQgb2YgdGhlIGhpL2xvIHBl cmlvZC4gQnkgc3VwcG9ydGluZyB0aGVzZSBiaXRzIHdlIGNhbiBhY2hpZXZlIHZhbHVlIDAKZm9y IGhpL2xvLgpJTU8gdGhhdCdzIGVhc2llciB0aGFuIGFkZGluZyBwaW5jdHJsIGhhbmRsaW5nLiBU aGUgcmVtYWluaW5nIHF1ZXN0aW9uIHdvdWxkIGJlCndoZXRoZXIgaXQncyB3b3J0aCBpdCB0byBh ZGQgcGluY3RybCBoYW5kbGluZyBqdXN0IGZvciB0aGUgbGVnYWN5IHZlcnNpb24gb2YgdGhlClBX TSBibG9jay4KCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmlu ZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9s aW51eC1hcm0ta2VybmVsCg==