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 97837C433F5 for ; Wed, 18 May 2022 11:20:51 +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-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To:Subject: 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=G00P2DArpTagTEO0x04hUVDHRNriO3cSC1P8X9vEZyU=; b=qN63bMAxQp2uRY +6QclcG4V6UonsKI3jYuglIIvX4/GAhLHOfaxNTlnWJDfJFjo9IGB4YoF8JeXk5PKJ1zFWEh/Q5Js eC3vNJiVaP/s0O1Qdb9BwhMs3qyjcnUUQ0HjZTh/WG4mnwd4Y9AJf/3CIcfRt79V/eNirI+xwFIvL RzH6Bnzj0ZYHtk3rSaZPa7woeAyE5kefEKpodLywbD3GxSAE3XWZCo918TkCcgafmH4Da/x750nAK AeiLAis7TFsrp+okg+MBVxHqN75p2XX+YYvFQqIQoTWZvctyIKjfQyF//H3LasxNkPKDmvSwLoIBg osmQ3aqMxdZtQfhq5vmA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nrHjQ-001U45-Qg; Wed, 18 May 2022 11:20:44 +0000 Received: from mail-wm1-x329.google.com ([2a00:1450:4864:20::329]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nrHiq-001Tjy-Dz; Wed, 18 May 2022 11:20:10 +0000 Received: by mail-wm1-x329.google.com with SMTP id v191-20020a1cacc8000000b00397001398c0so2985155wme.5; Wed, 18 May 2022 04:20:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=message-id:date:mime-version:user-agent:subject:content-language:to :cc:references:from:in-reply-to:content-transfer-encoding; bh=oifcGu/wBIFujV3M4+LF022wfIfIsx3++oPD8PzMcqY=; b=N9SNePuXf5WbjXfMxBu/yGNs4MutoJweY+6B+WtZgFHx4+//6BpHtFAN4vbxlkmSwW CprwhfMPBijt3VpJxQL3dn0rYsfD9W5nKSMj8CU40bMzyu/qvU5rNcE3HGrCTCvVgQEg TsqKZUCsmixVHVANdgxwShIJI+N4SW5CVWVPxT7JH61Oy9hPghK50wpgMm5rcx+t7B1C jzYsT6h7cyEvmCglzfCekVLGnLGsz215aUxNurb4A1wtIp6gt3GuTMa11jIGmXqmMWSZ Pqg3rr32gl0BJqmweQqNbTHphBMXPR5CiEQyS55C8CO115aaSe0b7l8e6kYDwB6zPBun Hdwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:to:cc:references:from:in-reply-to :content-transfer-encoding; bh=oifcGu/wBIFujV3M4+LF022wfIfIsx3++oPD8PzMcqY=; b=brGUYbSlKbZ1kdzxnRKEQIARr8I+1O5FftcNFfONlzK6Bz26BB9hhEbRszy/qkbG9E zdr2UadWDEAxOpx+Kgt72EebVrdLLzk8izNp72+SjueNustmWCJ83Nz8T88A7y0l78mi QlmcVvl8xvk40FGQ7AEX2+OOXZ865tMgujMCaP+z/hdjeBvKBTenVCHpa4B3Orcu5xuc 3OY+mNecomEnvtRP5/DmEl27yZBVNGGK4glxmL3cSYqekKBeGIy7cjb8dzKGTJ4fHtmt wB37/GGPJgb7X4DH5uMpW8XQcUIAs0EB9fpT4ZSYGUQc/N+V+OY6rcSfew7nvsr0rxFS oJqA== X-Gm-Message-State: AOAM530BK3ck4Llgg2mxWXb4YM7YmLWHxXgmC93UXXeDo3lt5jBK7BbT n4vGLWI7AOXMtmrBOHOKotg= X-Google-Smtp-Source: ABdhPJxTdoJHmZxhLXgmc4WLVrKyFQ/WkTPc6NtT1aGinrO7WxU3gZn55dFiMyzlWWrn0XGm3CEaXA== X-Received: by 2002:a05:600c:3d09:b0:394:7224:e6c4 with SMTP id bh9-20020a05600c3d0900b003947224e6c4mr25505459wmb.60.1652872803364; Wed, 18 May 2022 04:20:03 -0700 (PDT) Received: from [192.168.0.36] ([5.225.216.194]) by smtp.gmail.com with ESMTPSA id k13-20020a05600c1c8d00b003971fc23185sm1401427wms.20.2022.05.18.04.20.02 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 18 May 2022 04:20:02 -0700 (PDT) Message-ID: <084e5990-b970-360d-cef5-d9875a0e97b6@gmail.com> Date: Wed, 18 May 2022 13:20:01 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.8.1 Subject: Re: [PATCH v2 2/2] clocksource/drivers/timer-mediatek: Implement CPUXGPT timers Content-Language: en-US To: AngeloGioacchino Del Regno , Rob Herring Cc: daniel.lezcano@linaro.org, tglx@linutronix.de, krzysztof.kozlowski+dt@linaro.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, konrad.dybcio@somainline.org, marijn.suijten@somainline.org, martin.botka@somainline.org, ~postmarketos/upstreaming@lists.sr.ht, phone-devel@vger.kernel.org, paul.bouchara@somainline.org References: <20220509210741.12020-1-angelogioacchino.delregno@collabora.com> <20220509210741.12020-3-angelogioacchino.delregno@collabora.com> <20220517204705.GA1597201-robh@kernel.org> From: Matthias Brugger In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220518_042008_538830_418C3838 X-CRM114-Status: GOOD ( 45.56 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org CgpPbiAxOC8wNS8yMDIyIDEwOjA4LCBBbmdlbG9HaW9hY2NoaW5vIERlbCBSZWdubyB3cm90ZToK PiBJbCAxNy8wNS8yMiAyMjo0NywgUm9iIEhlcnJpbmcgaGEgc2NyaXR0bzoKPj4gT24gTW9uLCBN YXkgMDksIDIwMjIgYXQgMTE6MDc6NDBQTSArMDIwMCwgQW5nZWxvR2lvYWNjaGlubyBEZWwgUmVn bm8gd3JvdGU6Cj4+PiBTb21lIE1lZGlhVGVrIHBsYXRmb3JtcyB3aXRoIGEgYnVnZ3kgVHJ1c3Ra b25lIEFURiBmaXJtd2FyZSB3aWxsIG5vdAo+Pj4gaW5pdGlhbGl6ZSB0aGUgQUFyY2g2NCBTeXN0 ZW0gVGltZXIgY29ycmVjdGx5OiBpbiB0aGVzZSBjYXNlcywgdGhlCj4+PiBTeXN0ZW0gVGltZXIg YWRkcmVzcyBpcyBjb3JyZWN0bHkgcHJvZ3JhbW1lZCwgYXMgd2VsbCBhcyB0aGUgQ05URlJRX0VM MAo+Pj4gcmVnaXN0ZXIgKHJlYWRpbmcgMTNNSHosIGFzIGl0IHNob3VsZCBiZSksIGJ1dCB0aGUg YXNzaWduZWQgaGFyZHdhcmUKPj4+IHRpbWVycyBhcmUgbmV2ZXIgc3RhcnRlZCBiZWZvcmUgKG9y IGFmdGVyKSBib290aW5nIExpbnV4Lgo+Pgo+PiBJIGJlbGlldmUgdGhlIHVwc3RyZWFtIHBvc2l0 aW9uIGluIHJlZ2FyZHMgdG8gYXJjaCB0aW1lciB3b3JrLWFyb3VuZHMgaXMKPj4gZml4IHRoZSBm aXJtd2FyZS4KPj4KPiAKPiBIZWxsbyBSb2IsCj4gCj4gdW5mb3J0dW5hdGVseSwgdGhpcyBpcyBu b3QgcG9zc2libGUgZm9yIGFsbCBib2FyZHMgYW5kL29yIGFsbCBkZXZpY2VzOiB3aGlsZQo+IGl0 J3MgcmVhbGx5IHN0cmFpZ2h0Zm9yd2FyZCB0byBhZGQgYSByZWdpc3RlciB3cml0ZSBpbiBUcnVz dFpvbmUsIGFuZCBNVDY3OTUKPiBldmVuIGhhcyBBVEYgc3VwcG9ydCB1cHN0cmVhbSwgdGhlIG1h am9yIGJsb2NrZXIgZm9yIHRoaXMgaXMgY29uc3VtZXIgZGV2aWNlcy4KPiAKPiBUaGVyZSwgeW91 IGNhbm5vdCBzaW1wbHkgZmxhc2ggYSBuZXcgQVRGIGZpcm13YXJlIGJlY2F1c2Ugc29tZSBwYXJ0 aXRpb25zIGFuZAo+IHNvbWUgZmlybXdhcmVzIGFyZSBjaGVja2VkIGFnYWluc3QgYW4gb2J2aW91 c2x5IG5vdCBwdWJsaWMgT0VNIHNpZ25hdHVyZToKPiB0YWtpbmcgYXMgYW4gZXhhbXBsZSB0aGUg ZGV2aWNlIHRoYXQgSSdtIHVzaW5nIGZvciBkZXZlbG9wbWVudCAoYSBTb255IFhwZXJpYSBNNQo+ IHNtYXJ0cGhvbmUpLCBhIGZpcm13YXJlIGZpeCB3b3VsZCBpbXBseSB0aGF0IFNvbnkgbmVlZHMg dG8gcmVsZWFzZSBhIG5ldyBUWgo+IGZ3LCB3aGljaCBpcyBub3QgZ29pbmcgdG8gaGFwcGVuIGJl Y2F1c2UgdGhhdCBkZXZpY2Ugd2FzICphYmFuZG9uZWQqIHllYXJzIGFnby4KPiAKPiBUaG91Z2gs IFNvbnkgaXMgbm90IHRoZSBvbmx5IE9FTSB0aGF0IGlzIGFmZmVjdGVkIGJ5IHRoYXQgaXNzdWU6 IGFsbCBzbWFydHBob25lcwo+IGhhdmUgdGhpcyBzaWduYXR1cmUgY2hlY2sgYWdhaW5zdCB0aGUg T0VNJ3Mga2V5cywgd2hpY2ggaXMgOTkuOSUgb2YgdGhlIE1UNjc5NQo+IGJvYXJkcy4KPiBOb3cg dGhlcmUncyBhbHNvIGFub3RoZXIgY2F0Y2g6IE1UNjc5NSBpcyAqbm90KiB0aGUgb25seSBTb0Mg dGhhdCByZXF1aXJlcyB0aGlzCj4gZml4Li4uIGl0J3MgbWFueSBvdGhlcnMgYXMgd2VsbCwgYm90 aCBBUk0gYW5kIEFSTTY0LCBhbmQgdGhlIGNvdW50IGlzIHZlcnkgbGFyZ2UhCj4gLi4uYW5kIHRo ZXJlJ3MgbW9yZTogc29tZSBvZiB0aGUgT0VNcy9PRE1zIHRoYXQgcHJvZHVjZWQgTVQ2Nzk1IGRl dmljZXMgZG9uJ3QKPiBldmVuIGV4aXN0IGFueW1vcmUhISEKPiAKPiBIZW5jZSwgdGhlIG9ubHkg d2F5IHRvIGF2b2lkIHR1cm5pbmcgYSB2ZXJ5IGxhcmdlIHBpbGUgb2YgZWxlY3Ryb25pY3MgaW50 bwo+IGUtd2FzdGUgaXMgdG8gZ2l2ZSBhIG5ldyBsaWZlIHRvIHRob3NlIGFiYW5kb25lZCBkZWlj ZXMgYnkgYWN0dWFsbHkgcHJvdmlkaW5nCj4gYSB3YXkgdG8gYm9vdCB0aGVtIC0gYW5kIHRoaXMg aXMgdGhlIG9ubHkgd2F5LCBhcyB0aGlzIGNvbW1pdCBpcyBub3QganVzdAo+IGZvciBTTVAsIGJ1 dCBhbHNvIGZvciB0aGUgYm9vdCBDUFUsIGFuZCBMaW51eCB3b24ndCB3b3JrIHdpdGhvdXQuIEF0 IGFsbC4KPiAKPiBJZiB0aGVyZSB3YXMgYW55IHdheSB0byBnZXQgdGhlIGZpcm13YXJlIGZpeGVk LCBJIHdvdWxkJ3ZlIGdvbmUgZm9yIHRoYXQsCj4gYnV0IHRoaXMgaXMgKnJlYWxseSogdGhlIG9u bHkgb3B0aW9uLgo+IAoKSSBhZ3JlZSB3aXRoIEFuZ2Vsbywgd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0 aGF0IHdlIGNhbiBydW4gTGludXggb24gdGhlc2UgZGV2aWNlcywgCmFzIHRoZXkgYXJlIHRoZSBv bmx5IGF2YWlsYWJsZSBmb3IgdGhlIGdlbmVyYWwgcHVibGljLgoKQWN0dWFsbHkgd2Ugd2VyZSBm b3JjZWQgdG8gZG8gc29tZXRoaW5nIHNpbWlsYXIgZm9yIGFybTMyIGRldmljZXMgYXMgd2VsbCBb MV0uCgpSZWdhcmRzLApNYXR0aGlhcwoKWzFdIApodHRwczovL2dpdC5rZXJuZWwub3JnL3B1Yi9z Y20vbGludXgva2VybmVsL2dpdC90b3J2YWxkcy9saW51eC5naXQvdHJlZS9hcmNoL2FybS9tYWNo LW1lZGlhdGVrL21lZGlhdGVrLmM/aD12NS4xOC1yYzcjbjE5Cgo+IFJlZ2FyZHMsCj4gQW5nZWxv Cj4gCj4+IFJvYgo+Pgo+Pj4KPj4+IEluIHRoaXMgY29uZGl0aW9uLCBhbnkgY2FsbCB0byBmdW5j dGlvbiBnZXRfY3ljbGVzKCkgd2lsbCBiZSByZXR1cm5pbmcKPj4+IHplcm8sIGFzIENOVFZDVF9F TDAgd2lsbCBhbHdheXMgcmVhZCB6ZXJvLgo+Pj4KPj4+IE9uZSBjb21tb24gY3JpdGljYWwgc3lt cHRvbSBvZiB0aGF0IGlzIHRyeWluZyB0byB1c2UgdGhlIHVkZWxheSgpCj4+PiBmdW5jdGlvbiAo Y2FsbGluZyBfX2RlbGF5KCkpLCB3aGljaCBleGVjdXRlcyB0aGUgZm9sbG93aW5nIGxvb3A6Cj4+ Pgo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0YXJ0ID0gZ2V0X2N5Y2xlcygpOwo+Pj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHdoaWxlICgoZ2V0X2N5Y2xlcygpIC0gc3RhcnQpIDwg Y3ljbGVzKQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjcHVf cmVsYXgoKTsKPj4+Cj4+PiB3aGljaCwgd2hlbiBDTlRWQ1RfRUwwIGFsd2F5cyByZWFkcyB6ZXJv LCB0cmFuc2xhdGVzIHRvOgo+Pj4KPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB3aGlsZSgo MCAtIDApIDwgMCnCoCA9PT4gd2hpbGUoMCA8IDApCj4+Pgo+Pj4gLi4uIGdlbmVyYXRpbmcgYW4g aW5maW5pdGUgbG9vcCwgZXZlbiB0aG91Z2ggemVybyBpcyBuZXZlciBsZXNzCj4+PiB0aGFuIHpl cm8sIGJ1dCBhbHdheXMgZXF1YWwgdG8gaXQgKHRoaXMgaGFzIHRvIGJlIHJlc2VhcmNoZWQsCj4+ PiBidXQgaXQncyBvdXQgb2YgdGhlIHNjb3BlIG9mIHRoaXMgY29tbWl0KS4KPj4+Cj4+PiBUbyBm aXggdGhpcyBpc3N1ZSBvbiB0aGUgYWZmZWN0ZWQgTWVkaWFUZWsgcGxhdGZvcm1zLCB0aGUgc29s dXRpb24KPj4+IGlzIHRvIHNpbXBseSBzdGFydCB0aGUgdGltZXJzIHRoYXQgYXJlIGRlc2lnbmVk IHRvIGJlIFN5c3RlbSBUaW1lcihzKS4KPj4+IFRoZXNlIHRpbWVycywgZG93bnN0cmVhbSwgYXJl IGNhbGxlZCAiQ1BVWEdQVCIgYW5kIHRoZXJlIGlzIG9uZQo+Pj4gdGltZXIgcGVyIENQVSBjb3Jl OyBsdWNraWx5LCBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIHNldCBhIHN0YXJ0IGJpdAo+Pj4gb24g ZWFjaCBDUFVYIEdlbmVyYWwgUHVycG9zZSBUaW1lciwgYnV0IGl0J3MgY29udmVuaWVudGx5IGVu b3VnaCB0bzoKPj4+IMKgIC0gU2V0IHRoZSBjbG9jayBkaXZpZGVyIChpbnB1dCA9IDI2TUh6LCBk aXZpZGVyID0gMiwgb3V0cHV0ID0gMTNNSHopOwo+Pj4gwqAgLSBTZXQgdGhlIEVOQUJMRSBiaXQg b24gYSBnbG9iYWwgcmVnaXN0ZXIgKHN0YXJ0cyBhbGwgQ1BVWCB0aW1lcnMpLgo+Pj4KPj4+IFRo ZSBvbmx5IHNtYWxsIGh1cmRsZSB3aXRoIHRoaXMgc2V0dXAgaXMgdGhhdCBpdCdzIGFsbCBkb25l IHRocm91Z2gKPj4+IHRoZSBNQ1VTWVMgd3JhcHBlciwgd2hlcmUgaXQgaXMgbmVlZGVkLCBmb3Ig ZWFjaCByZWFkIG9yIHdyaXRlLCB0bwo+Pj4gc2VsZWN0IGEgcmVnaXN0ZXIgYWRkcmVzcyAoYnkg d3JpdGluZyBpdCB0byBhbiBpbmRleCByZWdpc3RlcikgYW5kCj4+PiB0aGVuIHRvIHBlcmZvcm0g YW55IFIvVyBvbiBhICJDT04iIHJlZ2lzdGVyLgo+Pj4KPj4+IEZvciBleGFtcGxlLCB3cml0aW5n ICIweDEiIHRvIHRoZSBDUFVYR1BUIHJlZ2lzdGVyIG9mZnNldCAweDQ6Cj4+PiAtIFdyaXRlIDB4 NCB0byBtY3VzeXMgSU5ERVggcmVnaXN0ZXIKPj4+IC0gV3JpdGUgMHgxIHRvIG1jdXN5cyBDT04g cmVnaXN0ZXIKPj4+Cj4+PiBSZWFkaW5nIGZyb20gQ1BVWEdQVCByZWdpc3RlciBvZmZzZXQgMHg0 Ogo+Pj4gLSBXcml0ZSAweDQgdG8gbWN1c3lzIElOREVYIHJlZ2lzdGVyCj4+PiAtIFJlYWQgbWN1 c3lzIENPTiByZWdpc3Rlci4KPj4+Cj4+PiBGaW5hbGx5LCBzdGFydGluZyB0aGlzIHRpbWVyIG1h a2VzIHBsYXRmb3JtcyBhZmZlY3RlZCBieSB0aGlzIGlzc3VlCj4+PiB0byB3b3JrIGNvcnJlY3Rs eS4KPj4+Cj4+PiBTaWduZWQtb2ZmLWJ5OiBBbmdlbG9HaW9hY2NoaW5vIERlbCBSZWdubyAKPj4+ IDxhbmdlbG9naW9hY2NoaW5vLmRlbHJlZ25vQGNvbGxhYm9yYS5jb20+Cj4+PiAtLS0KPj4+IMKg IGRyaXZlcnMvY2xvY2tzb3VyY2UvdGltZXItbWVkaWF0ZWsuYyB8IDExOSArKysrKysrKysrKysr KysrKysrKysrKysrKysKPj4+IMKgIDEgZmlsZSBjaGFuZ2VkLCAxMTkgaW5zZXJ0aW9ucygrKQo+ Pj4KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL3RpbWVyLW1lZGlhdGVrLmMg Cj4+PiBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvdGltZXItbWVkaWF0ZWsuYwo+Pj4gaW5kZXggN2Jj YjRhM2YyNmZiLi5hM2U5MDA0N2Y5YWMgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL2Nsb2Nrc291 cmNlL3RpbWVyLW1lZGlhdGVrLmMKPj4+ICsrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvdGltZXIt bWVkaWF0ZWsuYwo+Pj4gQEAgLTIyLDYgKzIyLDE5IEBACj4+PiDCoCAjZGVmaW5lIFRJTUVSX1NZ TkNfVElDS1PCoMKgwqDCoMKgwqDCoCAoMykKPj4+ICsvKiBjcHV4IG1jdXN5cyB3cmFwcGVyICov Cj4+PiArI2RlZmluZSBDUFVYX0NPTl9SRUfCoMKgwqDCoMKgwqDCoCAweDAKPj4+ICsjZGVmaW5l IENQVVhfSURYX1JFR8KgwqDCoMKgwqDCoMKgIDB4NAo+Pj4gKwo+Pj4gKy8qIGNwdXggKi8KPj4+ ICsjZGVmaW5lIENQVVhfSURYX0dMT0JBTF9DVFJMwqDCoMKgIDB4MAo+Pj4gKyAjZGVmaW5lIENQ VVhfRU5BQkxFwqDCoMKgwqDCoMKgwqAgQklUKDApCj4+PiArICNkZWZpbmUgQ1BVWF9DTEtfRElW X01BU0vCoMKgwqAgR0VOTUFTSygxMCwgOCkKPj4+ICsgI2RlZmluZSBDUFVYX0NMS19ESVYxwqDC oMKgwqDCoMKgwqAgQklUKDgpCj4+PiArICNkZWZpbmUgQ1BVWF9DTEtfRElWMsKgwqDCoMKgwqDC oMKgIEJJVCg5KQo+Pj4gKyAjZGVmaW5lIENQVVhfQ0xLX0RJVjTCoMKgwqDCoMKgwqDCoCBCSVQo MTApCj4+PiArI2RlZmluZSBDUFVYX0lEWF9HTE9CQUxfSVJRwqDCoMKgIDB4MzAKPj4+ICsKPj4+ IMKgIC8qIGdwdCAqLwo+Pj4gwqAgI2RlZmluZSBHUFRfSVJRX0VOX1JFR8KgwqDCoMKgwqDCoMKg wqDCoCAweDAwCj4+PiDCoCAjZGVmaW5lIEdQVF9JUlFfRU5BQkxFKHZhbCnCoMKgwqDCoCBCSVQo KHZhbCkgLSAxKQo+Pj4gQEAgLTcyLDYgKzg1LDU3IEBACj4+PiDCoCBzdGF0aWMgdm9pZCBfX2lv bWVtICpncHRfc2NoZWRfcmVnIF9fcmVhZF9tb3N0bHk7Cj4+PiArc3RhdGljIHUzMiBtdGtfY3B1 eF9yZWFkbCh1MzIgcmVnX2lkeCwgc3RydWN0IHRpbWVyX29mICp0bykKPj4+ICt7Cj4+PiArwqDC oMKgIHdyaXRlbChyZWdfaWR4LCB0aW1lcl9vZl9iYXNlKHRvKSArIENQVVhfSURYX1JFRyk7Cj4+ PiArwqDCoMKgIHJldHVybiByZWFkbCh0aW1lcl9vZl9iYXNlKHRvKSArIENQVVhfQ09OX1JFRyk7 Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIG10a19jcHV4X3dyaXRlbCh1MzIgdmFsLCB1 MzIgcmVnX2lkeCwgc3RydWN0IHRpbWVyX29mICp0bykKPj4+ICt7Cj4+PiArwqDCoMKgIHdyaXRl bChyZWdfaWR4LCB0aW1lcl9vZl9iYXNlKHRvKSArIENQVVhfSURYX1JFRyk7Cj4+PiArwqDCoMKg IHdyaXRlbCh2YWwsIHRpbWVyX29mX2Jhc2UodG8pICsgQ1BVWF9DT05fUkVHKTsKPj4+ICt9Cj4+ PiArCj4+PiArc3RhdGljIHZvaWQgbXRrX2NwdXhfZGlzYWJsZV9pcnEoc3RydWN0IHRpbWVyX29m ICp0bykKPj4+ICt7Cj4+PiArwqDCoMKgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmlycV9tYXNrID0g Y3B1bWFza19iaXRzKGNwdV9wb3NzaWJsZV9tYXNrKTsKPj4+ICvCoMKgwqAgdTMyIHZhbDsKPj4+ ICsKPj4+ICvCoMKgwqAgdmFsID0gbXRrX2NwdXhfcmVhZGwoQ1BVWF9JRFhfR0xPQkFMX0lSUSwg dG8pOwo+Pj4gK8KgwqDCoCB2YWwgJj0gfigqaXJxX21hc2spOwo+Pj4gK8KgwqDCoCBtdGtfY3B1 eF93cml0ZWwodmFsLCBDUFVYX0lEWF9HTE9CQUxfSVJRLCB0byk7Cj4+PiArfQo+Pj4gKwo+Pj4g K3N0YXRpYyB2b2lkIG10a19jcHV4X2VuYWJsZV9pcnEoc3RydWN0IHRpbWVyX29mICp0bykKPj4+ ICt7Cj4+PiArwqDCoMKgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmlycV9tYXNrID0gY3B1bWFza19i aXRzKGNwdV9wb3NzaWJsZV9tYXNrKTsKPj4+ICvCoMKgwqAgdTMyIHZhbDsKPj4+ICsKPj4+ICvC oMKgwqAgdmFsID0gbXRrX2NwdXhfcmVhZGwoQ1BVWF9JRFhfR0xPQkFMX0lSUSwgdG8pOwo+Pj4g K8KgwqDCoCB2YWwgfD0gKmlycV9tYXNrOwo+Pj4gK8KgwqDCoCBtdGtfY3B1eF93cml0ZWwodmFs LCBDUFVYX0lEWF9HTE9CQUxfSVJRLCB0byk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQg bXRrX2NwdXhfY2xrZXZ0X3NodXRkb3duKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNsa2V2 dCkKPj4+ICt7Cj4+PiArwqDCoMKgIC8qIENsZWFyIGFueSBpcnEgKi8KPj4+ICvCoMKgwqAgbXRr X2NwdXhfZGlzYWJsZV9pcnEodG9fdGltZXJfb2YoY2xrZXZ0KSk7Cj4+PiArCj4+PiArwqDCoMKg IC8qCj4+PiArwqDCoMKgwqAgKiBEaXNhYmxpbmcgQ1BVWEdQVCB0aW1lciB3aWxsIGNyYXNoIHRo ZSBwbGF0Zm9ybSwgZXNwZWNpYWxseQo+Pj4gK8KgwqDCoMKgICogaWYgVHJ1c3RlZCBGaXJtd2Fy ZSBpcyB1c2luZyBpdCAodXN1YWxseSwgZm9yIHNsZWVwIHN0YXRlcyksCj4+PiArwqDCoMKgwqAg KiBzbyB3ZSBvbmx5IG1hc2sgdGhlIElSUSBhbmQgY2FsbCBpdCBhIGRheS4KPj4+ICvCoMKgwqDC oCAqLwo+Pj4gK8KgwqDCoCByZXR1cm4gMDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCBt dGtfY3B1eF9jbGtldnRfcmVzdW1lKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNsa2V2dCkK Pj4+ICt7Cj4+PiArwqDCoMKgIG10a19jcHV4X2VuYWJsZV9pcnEodG9fdGltZXJfb2YoY2xrZXZ0 KSk7Cj4+PiArwqDCoMKgIHJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+IMKgIHN0YXRpYyB2b2lk IG10a19zeXN0X2Fja19pcnEoc3RydWN0IHRpbWVyX29mICp0bykKPj4+IMKgIHsKPj4+IMKgwqDC oMKgwqAgLyogQ2xlYXIgYW5kIGRpc2FibGUgaW50ZXJydXB0ICovCj4+PiBAQCAtMjgxLDYgKzM0 NSw2MCBAQCBzdGF0aWMgc3RydWN0IHRpbWVyX29mIHRvID0gewo+Pj4gwqDCoMKgwqDCoCB9LAo+ Pj4gwqAgfTsKPj4+ICtzdGF0aWMgaW50IF9faW5pdCBtdGtfY3B1eF9pbml0KHN0cnVjdCBkZXZp Y2Vfbm9kZSAqbm9kZSkKPj4+ICt7Cj4+PiArwqDCoMKgIHN0YXRpYyBzdHJ1Y3QgdGltZXJfb2Yg dG9fY3B1eDsKPj4+ICvCoMKgwqAgdTMyIGZyZXEsIHZhbDsKPj4+ICvCoMKgwqAgaW50IHJldDsK Pj4+ICsKPj4+ICvCoMKgwqAgLyoKPj4+ICvCoMKgwqDCoCAqIFRoZXJlIGFyZSBwZXItY3B1IGlu dGVycnVwdHMgZm9yIHRoZSBDUFVYIEdlbmVyYWwgUHVycG9zZSBUaW1lcgo+Pj4gK8KgwqDCoMKg ICogYnV0IHNpbmNlIHRoaXMgdGltZXIgZmVlZHMgdGhlIEFBcmNoNjQgU3lzdGVtIFRpbWVyIHdl IGNhbiByZWx5Cj4+PiArwqDCoMKgwqAgKiBvbiB0aGUgQ1BVIHRpbWVyIFBQSXMgYXMgd2VsbCwg c28gd2UgZG9uJ3QgZGVjbGFyZSBUSU1FUl9PRl9JUlEuCj4+PiArwqDCoMKgwqAgKi8KPj4+ICvC oMKgwqAgdG9fY3B1eC5mbGFncyA9IFRJTUVSX09GX0JBU0UgfCBUSU1FUl9PRl9DTE9DSzsKPj4+ ICvCoMKgwqAgdG9fY3B1eC5jbGtldnQubmFtZSA9ICJtdGstY3B1eGdwdCI7Cj4+PiArwqDCoMKg IHRvX2NwdXguY2xrZXZ0LnJhdGluZyA9IDEwOwo+Pj4gK8KgwqDCoCB0b19jcHV4LmNsa2V2dC5j cHVtYXNrID0gY3B1X3Bvc3NpYmxlX21hc2s7Cj4+PiArwqDCoMKgIHRvX2NwdXguY2xrZXZ0LnNl dF9zdGF0ZV9zaHV0ZG93biA9IG10a19jcHV4X2Nsa2V2dF9zaHV0ZG93bjsKPj4+ICvCoMKgwqAg dG9fY3B1eC5jbGtldnQudGlja19yZXN1bWUgPSBtdGtfY3B1eF9jbGtldnRfcmVzdW1lOwo+Pj4g Kwo+Pj4gK8KgwqDCoCAvKiBJZiB0aGlzIGZhaWxzLCBiYWQgdGhpbmdzIGFyZSBhYm91dCB0byBo YXBwZW4uLi4gKi8KPj4+ICvCoMKgwqAgcmV0ID0gdGltZXJfb2ZfaW5pdChub2RlLCAmdG9fY3B1 eCk7Cj4+PiArwqDCoMKgIGlmIChyZXQpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBXQVJOKDEsICJD YW5ub3Qgc3RhcnQgQ1BVWCB0aW1lcnMuXG4iKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4g cmV0Owo+Pj4gK8KgwqDCoCB9Cj4+PiArCj4+PiArwqDCoMKgIC8qCj4+PiArwqDCoMKgwqAgKiBD aGVjayBpZiB3ZSdyZSBnaXZlbiBhIGNsb2NrIHdpdGggdGhlIHJpZ2h0IGZyZXF1ZW5jeSBmb3Ig dGhpcwo+Pj4gK8KgwqDCoMKgICogdGltZXIsIG90aGVyd2lzZSB3YXJuIGJ1dCBrZWVwIGdvaW5n IHdpdGggdGhlIHNldHVwIGFueXdheSwgYXMKPj4+ICvCoMKgwqDCoCAqIHRoYXQgbWFrZXMgaXQg cG9zc2libGUgdG8gc3RpbGwgYm9vdCB0aGUga2VybmVsLCBldmVuIHRob3VnaAo+Pj4gK8KgwqDC oMKgICogaXQgbWF5IG5vdCB3b3JrIGNvcnJlY3RseSAocmFuZG9tIGxvY2t1cHMsIGV0YykuCj4+ PiArwqDCoMKgwqAgKiBUaGUgcmVhc29uIGJlaGluZCB0aGlzIGlzIHRoYXQgaGF2aW5nIGFuIGVh cmx5IFVBUlQgbWF5IG5vdCBiZQo+Pj4gK8KgwqDCoMKgICogcG9zc2libGUgZm9yIGV2ZXJ5b25l IGFuZCB0aGlzIGdpdmVzIGEgY2hhbmNlIHRvIHJldHJpZXZlIGttc2cKPj4+ICvCoMKgwqDCoCAq IGZvciBldmVudHVhbCBkZWJ1Z2dpbmcgZXZlbiBvbiBjb25zdW1lciBkZXZpY2VzLgo+Pj4gK8Kg wqDCoMKgICovCj4+PiArwqDCoMKgIGZyZXEgPSB0aW1lcl9vZl9yYXRlKCZ0b19jcHV4KTsKPj4+ ICvCoMKgwqAgaWYgKGZyZXEgPiAxMzAwMDAwMCkKPj4+ICvCoMKgwqDCoMKgwqDCoCBXQVJOKDEs ICJSZXF1ZXN0ZWQgdW5zdXBwb3J0ZWQgdGltZXIgZnJlcXVlbmN5ICV1XG4iLCBmcmVxKTsKPj4+ ICsKPj4+ICvCoMKgwqAgLyogQ2xvY2sgaW5wdXQgaXMgMjZNSHosIHNldCBESVYyIHRvIGFjaGll dmUgMTNNSHogY2xvY2sgKi8KPj4+ICvCoMKgwqAgdmFsID0gbXRrX2NwdXhfcmVhZGwoQ1BVWF9J RFhfR0xPQkFMX0NUUkwsICZ0b19jcHV4KTsKPj4+ICvCoMKgwqAgdmFsICY9IH5DUFVYX0NMS19E SVZfTUFTSzsKPj4+ICvCoMKgwqAgdmFsIHw9IENQVVhfQ0xLX0RJVjI7Cj4+PiArwqDCoMKgIG10 a19jcHV4X3dyaXRlbCh2YWwsIENQVVhfSURYX0dMT0JBTF9DVFJMLCAmdG9fY3B1eCk7Cj4+PiAr Cj4+PiArwqDCoMKgIC8qIEVuYWJsZSBhbGwgQ1BVWEdQVCB0aW1lcnMgKi8KPj4+ICvCoMKgwqAg dmFsID0gbXRrX2NwdXhfcmVhZGwoQ1BVWF9JRFhfR0xPQkFMX0NUUkwsICZ0b19jcHV4KTsKPj4+ ICvCoMKgwqAgbXRrX2NwdXhfd3JpdGVsKHZhbCB8IENQVVhfRU5BQkxFLCBDUFVYX0lEWF9HTE9C QUxfQ1RSTCwgJnRvX2NwdXgpOwo+Pj4gKwo+Pj4gK8KgwqDCoCBjbG9ja2V2ZW50c19jb25maWdf YW5kX3JlZ2lzdGVyKCZ0b19jcHV4LmNsa2V2dCwgdGltZXJfb2ZfcmF0ZSgmdG9fY3B1eCksCj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgVElNRVJfU1lOQ19USUNL UywgMHhmZmZmZmZmZik7Cj4+PiArCj4+PiArwqDCoMKgIHJldHVybiAwOwo+Pj4gK30KPj4+ICsK Pj4+IMKgIHN0YXRpYyBpbnQgX19pbml0IG10a19zeXN0X2luaXQoc3RydWN0IGRldmljZV9ub2Rl ICpub2RlKQo+Pj4gwqAgewo+Pj4gwqDCoMKgwqDCoCBpbnQgcmV0Owo+Pj4gQEAgLTMzOSwzICs0 NTcsNCBAQCBzdGF0aWMgaW50IF9faW5pdCBtdGtfZ3B0X2luaXQoc3RydWN0IGRldmljZV9ub2Rl ICpub2RlKQo+Pj4gwqAgfQo+Pj4gwqAgVElNRVJfT0ZfREVDTEFSRShtdGtfbXQ2NTc3LCAibWVk aWF0ZWssbXQ2NTc3LXRpbWVyIiwgbXRrX2dwdF9pbml0KTsKPj4+IMKgIFRJTUVSX09GX0RFQ0xB UkUobXRrX210Njc2NSwgIm1lZGlhdGVrLG10Njc2NS10aW1lciIsIG10a19zeXN0X2luaXQpOwo+ Pj4gK1RJTUVSX09GX0RFQ0xBUkUobXRrX210Njc5NSwgIm1lZGlhdGVrLG10Njc5NS1zeXN0aW1l ciIsIG10a19jcHV4X2luaXQpOwo+Pj4gLS0gCj4+PiAyLjM1LjEKPj4+Cj4+Pgo+IAo+IAoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXgtbWVkaWF0 ZWsgbWFpbGluZyBsaXN0CkxpbnV4LW1lZGlhdGVrQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDov L2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1tZWRpYXRlawo= 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 584C8C433F5 for ; Wed, 18 May 2022 11:20:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235544AbiERLUP (ORCPT ); Wed, 18 May 2022 07:20:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60590 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235551AbiERLUG (ORCPT ); Wed, 18 May 2022 07:20:06 -0400 Received: from mail-wm1-x331.google.com (mail-wm1-x331.google.com [IPv6:2a00:1450:4864:20::331]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F260817490B; Wed, 18 May 2022 04:20:04 -0700 (PDT) Received: by mail-wm1-x331.google.com with SMTP id n6-20020a05600c3b8600b0039492b44ce7so861094wms.5; Wed, 18 May 2022 04:20:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=message-id:date:mime-version:user-agent:subject:content-language:to :cc:references:from:in-reply-to:content-transfer-encoding; bh=oifcGu/wBIFujV3M4+LF022wfIfIsx3++oPD8PzMcqY=; b=N9SNePuXf5WbjXfMxBu/yGNs4MutoJweY+6B+WtZgFHx4+//6BpHtFAN4vbxlkmSwW CprwhfMPBijt3VpJxQL3dn0rYsfD9W5nKSMj8CU40bMzyu/qvU5rNcE3HGrCTCvVgQEg TsqKZUCsmixVHVANdgxwShIJI+N4SW5CVWVPxT7JH61Oy9hPghK50wpgMm5rcx+t7B1C jzYsT6h7cyEvmCglzfCekVLGnLGsz215aUxNurb4A1wtIp6gt3GuTMa11jIGmXqmMWSZ Pqg3rr32gl0BJqmweQqNbTHphBMXPR5CiEQyS55C8CO115aaSe0b7l8e6kYDwB6zPBun Hdwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:to:cc:references:from:in-reply-to :content-transfer-encoding; bh=oifcGu/wBIFujV3M4+LF022wfIfIsx3++oPD8PzMcqY=; b=Kb1cnWsAvUZgqYdFJnqHjcTqWeu5zBiH351FwujeKABYm2R3O1XrRvUzKMoaSZlnda /mH74seEQSAUlvWxjPiD8YBluTdLLv7sP9e9m0uW+L8ac8b6JZDfMIIXosJamjhHrlxk x7o6DoEgEOG1pF2uWKJ8tqHxEv7beDdWA8TuZMietJQYm3WJ3tls3bY03bFpZNAh4Mf7 BIjeOKaiGIwMxWCjhSnwtmjHaTRFeNPPXZyhJT+MPP7masulU8rOQLGR55pRTZEp5F7T 1FswVIuuaH6JqcjJFfGqetWtDiJbYiJt2sPiQTWGjcGTArz27m+66LYpjLrAfL2YOTqT TYCQ== X-Gm-Message-State: AOAM531p1vykeUKdm28vpl5UHlD7K4ocIC4lcfAnIHLxtWMJnMoaziRb g/EZ6oFVqliI2rmJujwa/ig= X-Google-Smtp-Source: ABdhPJxTdoJHmZxhLXgmc4WLVrKyFQ/WkTPc6NtT1aGinrO7WxU3gZn55dFiMyzlWWrn0XGm3CEaXA== X-Received: by 2002:a05:600c:3d09:b0:394:7224:e6c4 with SMTP id bh9-20020a05600c3d0900b003947224e6c4mr25505459wmb.60.1652872803364; Wed, 18 May 2022 04:20:03 -0700 (PDT) Received: from [192.168.0.36] ([5.225.216.194]) by smtp.gmail.com with ESMTPSA id k13-20020a05600c1c8d00b003971fc23185sm1401427wms.20.2022.05.18.04.20.02 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 18 May 2022 04:20:02 -0700 (PDT) Message-ID: <084e5990-b970-360d-cef5-d9875a0e97b6@gmail.com> Date: Wed, 18 May 2022 13:20:01 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.8.1 Subject: Re: [PATCH v2 2/2] clocksource/drivers/timer-mediatek: Implement CPUXGPT timers Content-Language: en-US To: AngeloGioacchino Del Regno , Rob Herring Cc: daniel.lezcano@linaro.org, tglx@linutronix.de, krzysztof.kozlowski+dt@linaro.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, konrad.dybcio@somainline.org, marijn.suijten@somainline.org, martin.botka@somainline.org, ~postmarketos/upstreaming@lists.sr.ht, phone-devel@vger.kernel.org, paul.bouchara@somainline.org References: <20220509210741.12020-1-angelogioacchino.delregno@collabora.com> <20220509210741.12020-3-angelogioacchino.delregno@collabora.com> <20220517204705.GA1597201-robh@kernel.org> From: Matthias Brugger In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: phone-devel@vger.kernel.org On 18/05/2022 10:08, AngeloGioacchino Del Regno wrote: > Il 17/05/22 22:47, Rob Herring ha scritto: >> On Mon, May 09, 2022 at 11:07:40PM +0200, AngeloGioacchino Del Regno wrote: >>> Some MediaTek platforms with a buggy TrustZone ATF firmware will not >>> initialize the AArch64 System Timer correctly: in these cases, the >>> System Timer address is correctly programmed, as well as the CNTFRQ_EL0 >>> register (reading 13MHz, as it should be), but the assigned hardware >>> timers are never started before (or after) booting Linux. >> >> I believe the upstream position in regards to arch timer work-arounds is >> fix the firmware. >> > > Hello Rob, > > unfortunately, this is not possible for all boards and/or all devices: while > it's really straightforward to add a register write in TrustZone, and MT6795 > even has ATF support upstream, the major blocker for this is consumer devices. > > There, you cannot simply flash a new ATF firmware because some partitions and > some firmwares are checked against an obviously not public OEM signature: > taking as an example the device that I'm using for development (a Sony Xperia M5 > smartphone), a firmware fix would imply that Sony needs to release a new TZ > fw, which is not going to happen because that device was *abandoned* years ago. > > Though, Sony is not the only OEM that is affected by that issue: all smartphones > have this signature check against the OEM's keys, which is 99.9% of the MT6795 > boards. > Now there's also another catch: MT6795 is *not* the only SoC that requires this > fix... it's many others as well, both ARM and ARM64, and the count is very large! > ...and there's more: some of the OEMs/ODMs that produced MT6795 devices don't > even exist anymore!!! > > Hence, the only way to avoid turning a very large pile of electronics into > e-waste is to give a new life to those abandoned deices by actually providing > a way to boot them - and this is the only way, as this commit is not just > for SMP, but also for the boot CPU, and Linux won't work without. At all. > > If there was any way to get the firmware fixed, I would've gone for that, > but this is *really* the only option. > I agree with Angelo, we should make sure that we can run Linux on these devices, as they are the only available for the general public. Actually we were forced to do something similar for arm32 devices as well [1]. Regards, Matthias [1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm/mach-mediatek/mediatek.c?h=v5.18-rc7#n19 > Regards, > Angelo > >> Rob >> >>> >>> In this condition, any call to function get_cycles() will be returning >>> zero, as CNTVCT_EL0 will always read zero. >>> >>> One common critical symptom of that is trying to use the udelay() >>> function (calling __delay()), which executes the following loop: >>> >>>              start = get_cycles(); >>>              while ((get_cycles() - start) < cycles) >>>                      cpu_relax(); >>> >>> which, when CNTVCT_EL0 always reads zero, translates to: >>> >>>              while((0 - 0) < 0)  ==> while(0 < 0) >>> >>> ... generating an infinite loop, even though zero is never less >>> than zero, but always equal to it (this has to be researched, >>> but it's out of the scope of this commit). >>> >>> To fix this issue on the affected MediaTek platforms, the solution >>> is to simply start the timers that are designed to be System Timer(s). >>> These timers, downstream, are called "CPUXGPT" and there is one >>> timer per CPU core; luckily, it is not necessary to set a start bit >>> on each CPUX General Purpose Timer, but it's conveniently enough to: >>>   - Set the clock divider (input = 26MHz, divider = 2, output = 13MHz); >>>   - Set the ENABLE bit on a global register (starts all CPUX timers). >>> >>> The only small hurdle with this setup is that it's all done through >>> the MCUSYS wrapper, where it is needed, for each read or write, to >>> select a register address (by writing it to an index register) and >>> then to perform any R/W on a "CON" register. >>> >>> For example, writing "0x1" to the CPUXGPT register offset 0x4: >>> - Write 0x4 to mcusys INDEX register >>> - Write 0x1 to mcusys CON register >>> >>> Reading from CPUXGPT register offset 0x4: >>> - Write 0x4 to mcusys INDEX register >>> - Read mcusys CON register. >>> >>> Finally, starting this timer makes platforms affected by this issue >>> to work correctly. >>> >>> Signed-off-by: AngeloGioacchino Del Regno >>> >>> --- >>>   drivers/clocksource/timer-mediatek.c | 119 +++++++++++++++++++++++++++ >>>   1 file changed, 119 insertions(+) >>> >>> diff --git a/drivers/clocksource/timer-mediatek.c >>> b/drivers/clocksource/timer-mediatek.c >>> index 7bcb4a3f26fb..a3e90047f9ac 100644 >>> --- a/drivers/clocksource/timer-mediatek.c >>> +++ b/drivers/clocksource/timer-mediatek.c >>> @@ -22,6 +22,19 @@ >>>   #define TIMER_SYNC_TICKS        (3) >>> +/* cpux mcusys wrapper */ >>> +#define CPUX_CON_REG        0x0 >>> +#define CPUX_IDX_REG        0x4 >>> + >>> +/* cpux */ >>> +#define CPUX_IDX_GLOBAL_CTRL    0x0 >>> + #define CPUX_ENABLE        BIT(0) >>> + #define CPUX_CLK_DIV_MASK    GENMASK(10, 8) >>> + #define CPUX_CLK_DIV1        BIT(8) >>> + #define CPUX_CLK_DIV2        BIT(9) >>> + #define CPUX_CLK_DIV4        BIT(10) >>> +#define CPUX_IDX_GLOBAL_IRQ    0x30 >>> + >>>   /* gpt */ >>>   #define GPT_IRQ_EN_REG          0x00 >>>   #define GPT_IRQ_ENABLE(val)     BIT((val) - 1) >>> @@ -72,6 +85,57 @@ >>>   static void __iomem *gpt_sched_reg __read_mostly; >>> +static u32 mtk_cpux_readl(u32 reg_idx, struct timer_of *to) >>> +{ >>> +    writel(reg_idx, timer_of_base(to) + CPUX_IDX_REG); >>> +    return readl(timer_of_base(to) + CPUX_CON_REG); >>> +} >>> + >>> +static void mtk_cpux_writel(u32 val, u32 reg_idx, struct timer_of *to) >>> +{ >>> +    writel(reg_idx, timer_of_base(to) + CPUX_IDX_REG); >>> +    writel(val, timer_of_base(to) + CPUX_CON_REG); >>> +} >>> + >>> +static void mtk_cpux_disable_irq(struct timer_of *to) >>> +{ >>> +    const unsigned long *irq_mask = cpumask_bits(cpu_possible_mask); >>> +    u32 val; >>> + >>> +    val = mtk_cpux_readl(CPUX_IDX_GLOBAL_IRQ, to); >>> +    val &= ~(*irq_mask); >>> +    mtk_cpux_writel(val, CPUX_IDX_GLOBAL_IRQ, to); >>> +} >>> + >>> +static void mtk_cpux_enable_irq(struct timer_of *to) >>> +{ >>> +    const unsigned long *irq_mask = cpumask_bits(cpu_possible_mask); >>> +    u32 val; >>> + >>> +    val = mtk_cpux_readl(CPUX_IDX_GLOBAL_IRQ, to); >>> +    val |= *irq_mask; >>> +    mtk_cpux_writel(val, CPUX_IDX_GLOBAL_IRQ, to); >>> +} >>> + >>> +static int mtk_cpux_clkevt_shutdown(struct clock_event_device *clkevt) >>> +{ >>> +    /* Clear any irq */ >>> +    mtk_cpux_disable_irq(to_timer_of(clkevt)); >>> + >>> +    /* >>> +     * Disabling CPUXGPT timer will crash the platform, especially >>> +     * if Trusted Firmware is using it (usually, for sleep states), >>> +     * so we only mask the IRQ and call it a day. >>> +     */ >>> +    return 0; >>> +} >>> + >>> +static int mtk_cpux_clkevt_resume(struct clock_event_device *clkevt) >>> +{ >>> +    mtk_cpux_enable_irq(to_timer_of(clkevt)); >>> +    return 0; >>> +} >>> + >>>   static void mtk_syst_ack_irq(struct timer_of *to) >>>   { >>>       /* Clear and disable interrupt */ >>> @@ -281,6 +345,60 @@ static struct timer_of to = { >>>       }, >>>   }; >>> +static int __init mtk_cpux_init(struct device_node *node) >>> +{ >>> +    static struct timer_of to_cpux; >>> +    u32 freq, val; >>> +    int ret; >>> + >>> +    /* >>> +     * There are per-cpu interrupts for the CPUX General Purpose Timer >>> +     * but since this timer feeds the AArch64 System Timer we can rely >>> +     * on the CPU timer PPIs as well, so we don't declare TIMER_OF_IRQ. >>> +     */ >>> +    to_cpux.flags = TIMER_OF_BASE | TIMER_OF_CLOCK; >>> +    to_cpux.clkevt.name = "mtk-cpuxgpt"; >>> +    to_cpux.clkevt.rating = 10; >>> +    to_cpux.clkevt.cpumask = cpu_possible_mask; >>> +    to_cpux.clkevt.set_state_shutdown = mtk_cpux_clkevt_shutdown; >>> +    to_cpux.clkevt.tick_resume = mtk_cpux_clkevt_resume; >>> + >>> +    /* If this fails, bad things are about to happen... */ >>> +    ret = timer_of_init(node, &to_cpux); >>> +    if (ret) { >>> +        WARN(1, "Cannot start CPUX timers.\n"); >>> +        return ret; >>> +    } >>> + >>> +    /* >>> +     * Check if we're given a clock with the right frequency for this >>> +     * timer, otherwise warn but keep going with the setup anyway, as >>> +     * that makes it possible to still boot the kernel, even though >>> +     * it may not work correctly (random lockups, etc). >>> +     * The reason behind this is that having an early UART may not be >>> +     * possible for everyone and this gives a chance to retrieve kmsg >>> +     * for eventual debugging even on consumer devices. >>> +     */ >>> +    freq = timer_of_rate(&to_cpux); >>> +    if (freq > 13000000) >>> +        WARN(1, "Requested unsupported timer frequency %u\n", freq); >>> + >>> +    /* Clock input is 26MHz, set DIV2 to achieve 13MHz clock */ >>> +    val = mtk_cpux_readl(CPUX_IDX_GLOBAL_CTRL, &to_cpux); >>> +    val &= ~CPUX_CLK_DIV_MASK; >>> +    val |= CPUX_CLK_DIV2; >>> +    mtk_cpux_writel(val, CPUX_IDX_GLOBAL_CTRL, &to_cpux); >>> + >>> +    /* Enable all CPUXGPT timers */ >>> +    val = mtk_cpux_readl(CPUX_IDX_GLOBAL_CTRL, &to_cpux); >>> +    mtk_cpux_writel(val | CPUX_ENABLE, CPUX_IDX_GLOBAL_CTRL, &to_cpux); >>> + >>> +    clockevents_config_and_register(&to_cpux.clkevt, timer_of_rate(&to_cpux), >>> +                    TIMER_SYNC_TICKS, 0xffffffff); >>> + >>> +    return 0; >>> +} >>> + >>>   static int __init mtk_syst_init(struct device_node *node) >>>   { >>>       int ret; >>> @@ -339,3 +457,4 @@ static int __init mtk_gpt_init(struct device_node *node) >>>   } >>>   TIMER_OF_DECLARE(mtk_mt6577, "mediatek,mt6577-timer", mtk_gpt_init); >>>   TIMER_OF_DECLARE(mtk_mt6765, "mediatek,mt6765-timer", mtk_syst_init); >>> +TIMER_OF_DECLARE(mtk_mt6795, "mediatek,mt6795-systimer", mtk_cpux_init); >>> -- >>> 2.35.1 >>> >>> > > 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 90EDCC433F5 for ; Wed, 18 May 2022 11:21:34 +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-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To:Subject: 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=xs4RybVTobEiQYVwHA2QFETrikBDsiOyxdSPrt2H0rs=; b=kKkWxevYiVYHov UbMurzJdGftx7wAmu/s14ax8qC21KabiLcM9tKNHnEc1vMVTQtsThLSffXfYUs3d4IIgPwa8W6M28 xBjnDsDUZjnx5Kfcff02i6nLlTUs6TWjJBtcB8QZKFu49lkETItINQ1wfOc5bJ4lJ4cVEhNYHqzWJ NsFskyx7vMZzRIDtPKTAWP5BTSR8NSMlhjvslLrKOVqG6Gwj45lg8Q/0Ay6/qq0lX5h0ukyNFYo12 DQ4TTSLe0Tzaqu3FL1+pVPC1jIgHz+rsYVHtM3NlAhAS/eYdIJRwi2FrnokAtk5pu46XUg3Qh4RIV 3sgMVUFoirELyGyE1Lcw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nrHiy-001Tp5-Oy; Wed, 18 May 2022 11:20:18 +0000 Received: from mail-wm1-x329.google.com ([2a00:1450:4864:20::329]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nrHiq-001Tjy-Dz; Wed, 18 May 2022 11:20:10 +0000 Received: by mail-wm1-x329.google.com with SMTP id v191-20020a1cacc8000000b00397001398c0so2985155wme.5; Wed, 18 May 2022 04:20:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=message-id:date:mime-version:user-agent:subject:content-language:to :cc:references:from:in-reply-to:content-transfer-encoding; bh=oifcGu/wBIFujV3M4+LF022wfIfIsx3++oPD8PzMcqY=; b=N9SNePuXf5WbjXfMxBu/yGNs4MutoJweY+6B+WtZgFHx4+//6BpHtFAN4vbxlkmSwW CprwhfMPBijt3VpJxQL3dn0rYsfD9W5nKSMj8CU40bMzyu/qvU5rNcE3HGrCTCvVgQEg TsqKZUCsmixVHVANdgxwShIJI+N4SW5CVWVPxT7JH61Oy9hPghK50wpgMm5rcx+t7B1C jzYsT6h7cyEvmCglzfCekVLGnLGsz215aUxNurb4A1wtIp6gt3GuTMa11jIGmXqmMWSZ Pqg3rr32gl0BJqmweQqNbTHphBMXPR5CiEQyS55C8CO115aaSe0b7l8e6kYDwB6zPBun Hdwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:to:cc:references:from:in-reply-to :content-transfer-encoding; bh=oifcGu/wBIFujV3M4+LF022wfIfIsx3++oPD8PzMcqY=; b=brGUYbSlKbZ1kdzxnRKEQIARr8I+1O5FftcNFfONlzK6Bz26BB9hhEbRszy/qkbG9E zdr2UadWDEAxOpx+Kgt72EebVrdLLzk8izNp72+SjueNustmWCJ83Nz8T88A7y0l78mi QlmcVvl8xvk40FGQ7AEX2+OOXZ865tMgujMCaP+z/hdjeBvKBTenVCHpa4B3Orcu5xuc 3OY+mNecomEnvtRP5/DmEl27yZBVNGGK4glxmL3cSYqekKBeGIy7cjb8dzKGTJ4fHtmt wB37/GGPJgb7X4DH5uMpW8XQcUIAs0EB9fpT4ZSYGUQc/N+V+OY6rcSfew7nvsr0rxFS oJqA== X-Gm-Message-State: AOAM530BK3ck4Llgg2mxWXb4YM7YmLWHxXgmC93UXXeDo3lt5jBK7BbT n4vGLWI7AOXMtmrBOHOKotg= X-Google-Smtp-Source: ABdhPJxTdoJHmZxhLXgmc4WLVrKyFQ/WkTPc6NtT1aGinrO7WxU3gZn55dFiMyzlWWrn0XGm3CEaXA== X-Received: by 2002:a05:600c:3d09:b0:394:7224:e6c4 with SMTP id bh9-20020a05600c3d0900b003947224e6c4mr25505459wmb.60.1652872803364; Wed, 18 May 2022 04:20:03 -0700 (PDT) Received: from [192.168.0.36] ([5.225.216.194]) by smtp.gmail.com with ESMTPSA id k13-20020a05600c1c8d00b003971fc23185sm1401427wms.20.2022.05.18.04.20.02 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 18 May 2022 04:20:02 -0700 (PDT) Message-ID: <084e5990-b970-360d-cef5-d9875a0e97b6@gmail.com> Date: Wed, 18 May 2022 13:20:01 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.8.1 Subject: Re: [PATCH v2 2/2] clocksource/drivers/timer-mediatek: Implement CPUXGPT timers Content-Language: en-US To: AngeloGioacchino Del Regno , Rob Herring Cc: daniel.lezcano@linaro.org, tglx@linutronix.de, krzysztof.kozlowski+dt@linaro.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, konrad.dybcio@somainline.org, marijn.suijten@somainline.org, martin.botka@somainline.org, ~postmarketos/upstreaming@lists.sr.ht, phone-devel@vger.kernel.org, paul.bouchara@somainline.org References: <20220509210741.12020-1-angelogioacchino.delregno@collabora.com> <20220509210741.12020-3-angelogioacchino.delregno@collabora.com> <20220517204705.GA1597201-robh@kernel.org> From: Matthias Brugger In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220518_042008_538830_418C3838 X-CRM114-Status: GOOD ( 45.56 ) 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org CgpPbiAxOC8wNS8yMDIyIDEwOjA4LCBBbmdlbG9HaW9hY2NoaW5vIERlbCBSZWdubyB3cm90ZToK PiBJbCAxNy8wNS8yMiAyMjo0NywgUm9iIEhlcnJpbmcgaGEgc2NyaXR0bzoKPj4gT24gTW9uLCBN YXkgMDksIDIwMjIgYXQgMTE6MDc6NDBQTSArMDIwMCwgQW5nZWxvR2lvYWNjaGlubyBEZWwgUmVn bm8gd3JvdGU6Cj4+PiBTb21lIE1lZGlhVGVrIHBsYXRmb3JtcyB3aXRoIGEgYnVnZ3kgVHJ1c3Ra b25lIEFURiBmaXJtd2FyZSB3aWxsIG5vdAo+Pj4gaW5pdGlhbGl6ZSB0aGUgQUFyY2g2NCBTeXN0 ZW0gVGltZXIgY29ycmVjdGx5OiBpbiB0aGVzZSBjYXNlcywgdGhlCj4+PiBTeXN0ZW0gVGltZXIg YWRkcmVzcyBpcyBjb3JyZWN0bHkgcHJvZ3JhbW1lZCwgYXMgd2VsbCBhcyB0aGUgQ05URlJRX0VM MAo+Pj4gcmVnaXN0ZXIgKHJlYWRpbmcgMTNNSHosIGFzIGl0IHNob3VsZCBiZSksIGJ1dCB0aGUg YXNzaWduZWQgaGFyZHdhcmUKPj4+IHRpbWVycyBhcmUgbmV2ZXIgc3RhcnRlZCBiZWZvcmUgKG9y IGFmdGVyKSBib290aW5nIExpbnV4Lgo+Pgo+PiBJIGJlbGlldmUgdGhlIHVwc3RyZWFtIHBvc2l0 aW9uIGluIHJlZ2FyZHMgdG8gYXJjaCB0aW1lciB3b3JrLWFyb3VuZHMgaXMKPj4gZml4IHRoZSBm aXJtd2FyZS4KPj4KPiAKPiBIZWxsbyBSb2IsCj4gCj4gdW5mb3J0dW5hdGVseSwgdGhpcyBpcyBu b3QgcG9zc2libGUgZm9yIGFsbCBib2FyZHMgYW5kL29yIGFsbCBkZXZpY2VzOiB3aGlsZQo+IGl0 J3MgcmVhbGx5IHN0cmFpZ2h0Zm9yd2FyZCB0byBhZGQgYSByZWdpc3RlciB3cml0ZSBpbiBUcnVz dFpvbmUsIGFuZCBNVDY3OTUKPiBldmVuIGhhcyBBVEYgc3VwcG9ydCB1cHN0cmVhbSwgdGhlIG1h am9yIGJsb2NrZXIgZm9yIHRoaXMgaXMgY29uc3VtZXIgZGV2aWNlcy4KPiAKPiBUaGVyZSwgeW91 IGNhbm5vdCBzaW1wbHkgZmxhc2ggYSBuZXcgQVRGIGZpcm13YXJlIGJlY2F1c2Ugc29tZSBwYXJ0 aXRpb25zIGFuZAo+IHNvbWUgZmlybXdhcmVzIGFyZSBjaGVja2VkIGFnYWluc3QgYW4gb2J2aW91 c2x5IG5vdCBwdWJsaWMgT0VNIHNpZ25hdHVyZToKPiB0YWtpbmcgYXMgYW4gZXhhbXBsZSB0aGUg ZGV2aWNlIHRoYXQgSSdtIHVzaW5nIGZvciBkZXZlbG9wbWVudCAoYSBTb255IFhwZXJpYSBNNQo+ IHNtYXJ0cGhvbmUpLCBhIGZpcm13YXJlIGZpeCB3b3VsZCBpbXBseSB0aGF0IFNvbnkgbmVlZHMg dG8gcmVsZWFzZSBhIG5ldyBUWgo+IGZ3LCB3aGljaCBpcyBub3QgZ29pbmcgdG8gaGFwcGVuIGJl Y2F1c2UgdGhhdCBkZXZpY2Ugd2FzICphYmFuZG9uZWQqIHllYXJzIGFnby4KPiAKPiBUaG91Z2gs IFNvbnkgaXMgbm90IHRoZSBvbmx5IE9FTSB0aGF0IGlzIGFmZmVjdGVkIGJ5IHRoYXQgaXNzdWU6 IGFsbCBzbWFydHBob25lcwo+IGhhdmUgdGhpcyBzaWduYXR1cmUgY2hlY2sgYWdhaW5zdCB0aGUg T0VNJ3Mga2V5cywgd2hpY2ggaXMgOTkuOSUgb2YgdGhlIE1UNjc5NQo+IGJvYXJkcy4KPiBOb3cg dGhlcmUncyBhbHNvIGFub3RoZXIgY2F0Y2g6IE1UNjc5NSBpcyAqbm90KiB0aGUgb25seSBTb0Mg dGhhdCByZXF1aXJlcyB0aGlzCj4gZml4Li4uIGl0J3MgbWFueSBvdGhlcnMgYXMgd2VsbCwgYm90 aCBBUk0gYW5kIEFSTTY0LCBhbmQgdGhlIGNvdW50IGlzIHZlcnkgbGFyZ2UhCj4gLi4uYW5kIHRo ZXJlJ3MgbW9yZTogc29tZSBvZiB0aGUgT0VNcy9PRE1zIHRoYXQgcHJvZHVjZWQgTVQ2Nzk1IGRl dmljZXMgZG9uJ3QKPiBldmVuIGV4aXN0IGFueW1vcmUhISEKPiAKPiBIZW5jZSwgdGhlIG9ubHkg d2F5IHRvIGF2b2lkIHR1cm5pbmcgYSB2ZXJ5IGxhcmdlIHBpbGUgb2YgZWxlY3Ryb25pY3MgaW50 bwo+IGUtd2FzdGUgaXMgdG8gZ2l2ZSBhIG5ldyBsaWZlIHRvIHRob3NlIGFiYW5kb25lZCBkZWlj ZXMgYnkgYWN0dWFsbHkgcHJvdmlkaW5nCj4gYSB3YXkgdG8gYm9vdCB0aGVtIC0gYW5kIHRoaXMg aXMgdGhlIG9ubHkgd2F5LCBhcyB0aGlzIGNvbW1pdCBpcyBub3QganVzdAo+IGZvciBTTVAsIGJ1 dCBhbHNvIGZvciB0aGUgYm9vdCBDUFUsIGFuZCBMaW51eCB3b24ndCB3b3JrIHdpdGhvdXQuIEF0 IGFsbC4KPiAKPiBJZiB0aGVyZSB3YXMgYW55IHdheSB0byBnZXQgdGhlIGZpcm13YXJlIGZpeGVk LCBJIHdvdWxkJ3ZlIGdvbmUgZm9yIHRoYXQsCj4gYnV0IHRoaXMgaXMgKnJlYWxseSogdGhlIG9u bHkgb3B0aW9uLgo+IAoKSSBhZ3JlZSB3aXRoIEFuZ2Vsbywgd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0 aGF0IHdlIGNhbiBydW4gTGludXggb24gdGhlc2UgZGV2aWNlcywgCmFzIHRoZXkgYXJlIHRoZSBv bmx5IGF2YWlsYWJsZSBmb3IgdGhlIGdlbmVyYWwgcHVibGljLgoKQWN0dWFsbHkgd2Ugd2VyZSBm b3JjZWQgdG8gZG8gc29tZXRoaW5nIHNpbWlsYXIgZm9yIGFybTMyIGRldmljZXMgYXMgd2VsbCBb MV0uCgpSZWdhcmRzLApNYXR0aGlhcwoKWzFdIApodHRwczovL2dpdC5rZXJuZWwub3JnL3B1Yi9z Y20vbGludXgva2VybmVsL2dpdC90b3J2YWxkcy9saW51eC5naXQvdHJlZS9hcmNoL2FybS9tYWNo LW1lZGlhdGVrL21lZGlhdGVrLmM/aD12NS4xOC1yYzcjbjE5Cgo+IFJlZ2FyZHMsCj4gQW5nZWxv Cj4gCj4+IFJvYgo+Pgo+Pj4KPj4+IEluIHRoaXMgY29uZGl0aW9uLCBhbnkgY2FsbCB0byBmdW5j dGlvbiBnZXRfY3ljbGVzKCkgd2lsbCBiZSByZXR1cm5pbmcKPj4+IHplcm8sIGFzIENOVFZDVF9F TDAgd2lsbCBhbHdheXMgcmVhZCB6ZXJvLgo+Pj4KPj4+IE9uZSBjb21tb24gY3JpdGljYWwgc3lt cHRvbSBvZiB0aGF0IGlzIHRyeWluZyB0byB1c2UgdGhlIHVkZWxheSgpCj4+PiBmdW5jdGlvbiAo Y2FsbGluZyBfX2RlbGF5KCkpLCB3aGljaCBleGVjdXRlcyB0aGUgZm9sbG93aW5nIGxvb3A6Cj4+ Pgo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0YXJ0ID0gZ2V0X2N5Y2xlcygpOwo+Pj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHdoaWxlICgoZ2V0X2N5Y2xlcygpIC0gc3RhcnQpIDwg Y3ljbGVzKQo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjcHVf cmVsYXgoKTsKPj4+Cj4+PiB3aGljaCwgd2hlbiBDTlRWQ1RfRUwwIGFsd2F5cyByZWFkcyB6ZXJv LCB0cmFuc2xhdGVzIHRvOgo+Pj4KPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB3aGlsZSgo MCAtIDApIDwgMCnCoCA9PT4gd2hpbGUoMCA8IDApCj4+Pgo+Pj4gLi4uIGdlbmVyYXRpbmcgYW4g aW5maW5pdGUgbG9vcCwgZXZlbiB0aG91Z2ggemVybyBpcyBuZXZlciBsZXNzCj4+PiB0aGFuIHpl cm8sIGJ1dCBhbHdheXMgZXF1YWwgdG8gaXQgKHRoaXMgaGFzIHRvIGJlIHJlc2VhcmNoZWQsCj4+ PiBidXQgaXQncyBvdXQgb2YgdGhlIHNjb3BlIG9mIHRoaXMgY29tbWl0KS4KPj4+Cj4+PiBUbyBm aXggdGhpcyBpc3N1ZSBvbiB0aGUgYWZmZWN0ZWQgTWVkaWFUZWsgcGxhdGZvcm1zLCB0aGUgc29s dXRpb24KPj4+IGlzIHRvIHNpbXBseSBzdGFydCB0aGUgdGltZXJzIHRoYXQgYXJlIGRlc2lnbmVk IHRvIGJlIFN5c3RlbSBUaW1lcihzKS4KPj4+IFRoZXNlIHRpbWVycywgZG93bnN0cmVhbSwgYXJl IGNhbGxlZCAiQ1BVWEdQVCIgYW5kIHRoZXJlIGlzIG9uZQo+Pj4gdGltZXIgcGVyIENQVSBjb3Jl OyBsdWNraWx5LCBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIHNldCBhIHN0YXJ0IGJpdAo+Pj4gb24g ZWFjaCBDUFVYIEdlbmVyYWwgUHVycG9zZSBUaW1lciwgYnV0IGl0J3MgY29udmVuaWVudGx5IGVu b3VnaCB0bzoKPj4+IMKgIC0gU2V0IHRoZSBjbG9jayBkaXZpZGVyIChpbnB1dCA9IDI2TUh6LCBk aXZpZGVyID0gMiwgb3V0cHV0ID0gMTNNSHopOwo+Pj4gwqAgLSBTZXQgdGhlIEVOQUJMRSBiaXQg b24gYSBnbG9iYWwgcmVnaXN0ZXIgKHN0YXJ0cyBhbGwgQ1BVWCB0aW1lcnMpLgo+Pj4KPj4+IFRo ZSBvbmx5IHNtYWxsIGh1cmRsZSB3aXRoIHRoaXMgc2V0dXAgaXMgdGhhdCBpdCdzIGFsbCBkb25l IHRocm91Z2gKPj4+IHRoZSBNQ1VTWVMgd3JhcHBlciwgd2hlcmUgaXQgaXMgbmVlZGVkLCBmb3Ig ZWFjaCByZWFkIG9yIHdyaXRlLCB0bwo+Pj4gc2VsZWN0IGEgcmVnaXN0ZXIgYWRkcmVzcyAoYnkg d3JpdGluZyBpdCB0byBhbiBpbmRleCByZWdpc3RlcikgYW5kCj4+PiB0aGVuIHRvIHBlcmZvcm0g YW55IFIvVyBvbiBhICJDT04iIHJlZ2lzdGVyLgo+Pj4KPj4+IEZvciBleGFtcGxlLCB3cml0aW5n ICIweDEiIHRvIHRoZSBDUFVYR1BUIHJlZ2lzdGVyIG9mZnNldCAweDQ6Cj4+PiAtIFdyaXRlIDB4 NCB0byBtY3VzeXMgSU5ERVggcmVnaXN0ZXIKPj4+IC0gV3JpdGUgMHgxIHRvIG1jdXN5cyBDT04g cmVnaXN0ZXIKPj4+Cj4+PiBSZWFkaW5nIGZyb20gQ1BVWEdQVCByZWdpc3RlciBvZmZzZXQgMHg0 Ogo+Pj4gLSBXcml0ZSAweDQgdG8gbWN1c3lzIElOREVYIHJlZ2lzdGVyCj4+PiAtIFJlYWQgbWN1 c3lzIENPTiByZWdpc3Rlci4KPj4+Cj4+PiBGaW5hbGx5LCBzdGFydGluZyB0aGlzIHRpbWVyIG1h a2VzIHBsYXRmb3JtcyBhZmZlY3RlZCBieSB0aGlzIGlzc3VlCj4+PiB0byB3b3JrIGNvcnJlY3Rs eS4KPj4+Cj4+PiBTaWduZWQtb2ZmLWJ5OiBBbmdlbG9HaW9hY2NoaW5vIERlbCBSZWdubyAKPj4+ IDxhbmdlbG9naW9hY2NoaW5vLmRlbHJlZ25vQGNvbGxhYm9yYS5jb20+Cj4+PiAtLS0KPj4+IMKg IGRyaXZlcnMvY2xvY2tzb3VyY2UvdGltZXItbWVkaWF0ZWsuYyB8IDExOSArKysrKysrKysrKysr KysrKysrKysrKysrKysKPj4+IMKgIDEgZmlsZSBjaGFuZ2VkLCAxMTkgaW5zZXJ0aW9ucygrKQo+ Pj4KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL3RpbWVyLW1lZGlhdGVrLmMg Cj4+PiBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvdGltZXItbWVkaWF0ZWsuYwo+Pj4gaW5kZXggN2Jj YjRhM2YyNmZiLi5hM2U5MDA0N2Y5YWMgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL2Nsb2Nrc291 cmNlL3RpbWVyLW1lZGlhdGVrLmMKPj4+ICsrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvdGltZXIt bWVkaWF0ZWsuYwo+Pj4gQEAgLTIyLDYgKzIyLDE5IEBACj4+PiDCoCAjZGVmaW5lIFRJTUVSX1NZ TkNfVElDS1PCoMKgwqDCoMKgwqDCoCAoMykKPj4+ICsvKiBjcHV4IG1jdXN5cyB3cmFwcGVyICov Cj4+PiArI2RlZmluZSBDUFVYX0NPTl9SRUfCoMKgwqDCoMKgwqDCoCAweDAKPj4+ICsjZGVmaW5l IENQVVhfSURYX1JFR8KgwqDCoMKgwqDCoMKgIDB4NAo+Pj4gKwo+Pj4gKy8qIGNwdXggKi8KPj4+ ICsjZGVmaW5lIENQVVhfSURYX0dMT0JBTF9DVFJMwqDCoMKgIDB4MAo+Pj4gKyAjZGVmaW5lIENQ VVhfRU5BQkxFwqDCoMKgwqDCoMKgwqAgQklUKDApCj4+PiArICNkZWZpbmUgQ1BVWF9DTEtfRElW X01BU0vCoMKgwqAgR0VOTUFTSygxMCwgOCkKPj4+ICsgI2RlZmluZSBDUFVYX0NMS19ESVYxwqDC oMKgwqDCoMKgwqAgQklUKDgpCj4+PiArICNkZWZpbmUgQ1BVWF9DTEtfRElWMsKgwqDCoMKgwqDC oMKgIEJJVCg5KQo+Pj4gKyAjZGVmaW5lIENQVVhfQ0xLX0RJVjTCoMKgwqDCoMKgwqDCoCBCSVQo MTApCj4+PiArI2RlZmluZSBDUFVYX0lEWF9HTE9CQUxfSVJRwqDCoMKgIDB4MzAKPj4+ICsKPj4+ IMKgIC8qIGdwdCAqLwo+Pj4gwqAgI2RlZmluZSBHUFRfSVJRX0VOX1JFR8KgwqDCoMKgwqDCoMKg wqDCoCAweDAwCj4+PiDCoCAjZGVmaW5lIEdQVF9JUlFfRU5BQkxFKHZhbCnCoMKgwqDCoCBCSVQo KHZhbCkgLSAxKQo+Pj4gQEAgLTcyLDYgKzg1LDU3IEBACj4+PiDCoCBzdGF0aWMgdm9pZCBfX2lv bWVtICpncHRfc2NoZWRfcmVnIF9fcmVhZF9tb3N0bHk7Cj4+PiArc3RhdGljIHUzMiBtdGtfY3B1 eF9yZWFkbCh1MzIgcmVnX2lkeCwgc3RydWN0IHRpbWVyX29mICp0bykKPj4+ICt7Cj4+PiArwqDC oMKgIHdyaXRlbChyZWdfaWR4LCB0aW1lcl9vZl9iYXNlKHRvKSArIENQVVhfSURYX1JFRyk7Cj4+ PiArwqDCoMKgIHJldHVybiByZWFkbCh0aW1lcl9vZl9iYXNlKHRvKSArIENQVVhfQ09OX1JFRyk7 Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyB2b2lkIG10a19jcHV4X3dyaXRlbCh1MzIgdmFsLCB1 MzIgcmVnX2lkeCwgc3RydWN0IHRpbWVyX29mICp0bykKPj4+ICt7Cj4+PiArwqDCoMKgIHdyaXRl bChyZWdfaWR4LCB0aW1lcl9vZl9iYXNlKHRvKSArIENQVVhfSURYX1JFRyk7Cj4+PiArwqDCoMKg IHdyaXRlbCh2YWwsIHRpbWVyX29mX2Jhc2UodG8pICsgQ1BVWF9DT05fUkVHKTsKPj4+ICt9Cj4+ PiArCj4+PiArc3RhdGljIHZvaWQgbXRrX2NwdXhfZGlzYWJsZV9pcnEoc3RydWN0IHRpbWVyX29m ICp0bykKPj4+ICt7Cj4+PiArwqDCoMKgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmlycV9tYXNrID0g Y3B1bWFza19iaXRzKGNwdV9wb3NzaWJsZV9tYXNrKTsKPj4+ICvCoMKgwqAgdTMyIHZhbDsKPj4+ ICsKPj4+ICvCoMKgwqAgdmFsID0gbXRrX2NwdXhfcmVhZGwoQ1BVWF9JRFhfR0xPQkFMX0lSUSwg dG8pOwo+Pj4gK8KgwqDCoCB2YWwgJj0gfigqaXJxX21hc2spOwo+Pj4gK8KgwqDCoCBtdGtfY3B1 eF93cml0ZWwodmFsLCBDUFVYX0lEWF9HTE9CQUxfSVJRLCB0byk7Cj4+PiArfQo+Pj4gKwo+Pj4g K3N0YXRpYyB2b2lkIG10a19jcHV4X2VuYWJsZV9pcnEoc3RydWN0IHRpbWVyX29mICp0bykKPj4+ ICt7Cj4+PiArwqDCoMKgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmlycV9tYXNrID0gY3B1bWFza19i aXRzKGNwdV9wb3NzaWJsZV9tYXNrKTsKPj4+ICvCoMKgwqAgdTMyIHZhbDsKPj4+ICsKPj4+ICvC oMKgwqAgdmFsID0gbXRrX2NwdXhfcmVhZGwoQ1BVWF9JRFhfR0xPQkFMX0lSUSwgdG8pOwo+Pj4g K8KgwqDCoCB2YWwgfD0gKmlycV9tYXNrOwo+Pj4gK8KgwqDCoCBtdGtfY3B1eF93cml0ZWwodmFs LCBDUFVYX0lEWF9HTE9CQUxfSVJRLCB0byk7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQg bXRrX2NwdXhfY2xrZXZ0X3NodXRkb3duKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNsa2V2 dCkKPj4+ICt7Cj4+PiArwqDCoMKgIC8qIENsZWFyIGFueSBpcnEgKi8KPj4+ICvCoMKgwqAgbXRr X2NwdXhfZGlzYWJsZV9pcnEodG9fdGltZXJfb2YoY2xrZXZ0KSk7Cj4+PiArCj4+PiArwqDCoMKg IC8qCj4+PiArwqDCoMKgwqAgKiBEaXNhYmxpbmcgQ1BVWEdQVCB0aW1lciB3aWxsIGNyYXNoIHRo ZSBwbGF0Zm9ybSwgZXNwZWNpYWxseQo+Pj4gK8KgwqDCoMKgICogaWYgVHJ1c3RlZCBGaXJtd2Fy ZSBpcyB1c2luZyBpdCAodXN1YWxseSwgZm9yIHNsZWVwIHN0YXRlcyksCj4+PiArwqDCoMKgwqAg KiBzbyB3ZSBvbmx5IG1hc2sgdGhlIElSUSBhbmQgY2FsbCBpdCBhIGRheS4KPj4+ICvCoMKgwqDC oCAqLwo+Pj4gK8KgwqDCoCByZXR1cm4gMDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGludCBt dGtfY3B1eF9jbGtldnRfcmVzdW1lKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNsa2V2dCkK Pj4+ICt7Cj4+PiArwqDCoMKgIG10a19jcHV4X2VuYWJsZV9pcnEodG9fdGltZXJfb2YoY2xrZXZ0 KSk7Cj4+PiArwqDCoMKgIHJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+IMKgIHN0YXRpYyB2b2lk IG10a19zeXN0X2Fja19pcnEoc3RydWN0IHRpbWVyX29mICp0bykKPj4+IMKgIHsKPj4+IMKgwqDC oMKgwqAgLyogQ2xlYXIgYW5kIGRpc2FibGUgaW50ZXJydXB0ICovCj4+PiBAQCAtMjgxLDYgKzM0 NSw2MCBAQCBzdGF0aWMgc3RydWN0IHRpbWVyX29mIHRvID0gewo+Pj4gwqDCoMKgwqDCoCB9LAo+ Pj4gwqAgfTsKPj4+ICtzdGF0aWMgaW50IF9faW5pdCBtdGtfY3B1eF9pbml0KHN0cnVjdCBkZXZp Y2Vfbm9kZSAqbm9kZSkKPj4+ICt7Cj4+PiArwqDCoMKgIHN0YXRpYyBzdHJ1Y3QgdGltZXJfb2Yg dG9fY3B1eDsKPj4+ICvCoMKgwqAgdTMyIGZyZXEsIHZhbDsKPj4+ICvCoMKgwqAgaW50IHJldDsK Pj4+ICsKPj4+ICvCoMKgwqAgLyoKPj4+ICvCoMKgwqDCoCAqIFRoZXJlIGFyZSBwZXItY3B1IGlu dGVycnVwdHMgZm9yIHRoZSBDUFVYIEdlbmVyYWwgUHVycG9zZSBUaW1lcgo+Pj4gK8KgwqDCoMKg ICogYnV0IHNpbmNlIHRoaXMgdGltZXIgZmVlZHMgdGhlIEFBcmNoNjQgU3lzdGVtIFRpbWVyIHdl IGNhbiByZWx5Cj4+PiArwqDCoMKgwqAgKiBvbiB0aGUgQ1BVIHRpbWVyIFBQSXMgYXMgd2VsbCwg c28gd2UgZG9uJ3QgZGVjbGFyZSBUSU1FUl9PRl9JUlEuCj4+PiArwqDCoMKgwqAgKi8KPj4+ICvC oMKgwqAgdG9fY3B1eC5mbGFncyA9IFRJTUVSX09GX0JBU0UgfCBUSU1FUl9PRl9DTE9DSzsKPj4+ ICvCoMKgwqAgdG9fY3B1eC5jbGtldnQubmFtZSA9ICJtdGstY3B1eGdwdCI7Cj4+PiArwqDCoMKg IHRvX2NwdXguY2xrZXZ0LnJhdGluZyA9IDEwOwo+Pj4gK8KgwqDCoCB0b19jcHV4LmNsa2V2dC5j cHVtYXNrID0gY3B1X3Bvc3NpYmxlX21hc2s7Cj4+PiArwqDCoMKgIHRvX2NwdXguY2xrZXZ0LnNl dF9zdGF0ZV9zaHV0ZG93biA9IG10a19jcHV4X2Nsa2V2dF9zaHV0ZG93bjsKPj4+ICvCoMKgwqAg dG9fY3B1eC5jbGtldnQudGlja19yZXN1bWUgPSBtdGtfY3B1eF9jbGtldnRfcmVzdW1lOwo+Pj4g Kwo+Pj4gK8KgwqDCoCAvKiBJZiB0aGlzIGZhaWxzLCBiYWQgdGhpbmdzIGFyZSBhYm91dCB0byBo YXBwZW4uLi4gKi8KPj4+ICvCoMKgwqAgcmV0ID0gdGltZXJfb2ZfaW5pdChub2RlLCAmdG9fY3B1 eCk7Cj4+PiArwqDCoMKgIGlmIChyZXQpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBXQVJOKDEsICJD YW5ub3Qgc3RhcnQgQ1BVWCB0aW1lcnMuXG4iKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4g cmV0Owo+Pj4gK8KgwqDCoCB9Cj4+PiArCj4+PiArwqDCoMKgIC8qCj4+PiArwqDCoMKgwqAgKiBD aGVjayBpZiB3ZSdyZSBnaXZlbiBhIGNsb2NrIHdpdGggdGhlIHJpZ2h0IGZyZXF1ZW5jeSBmb3Ig dGhpcwo+Pj4gK8KgwqDCoMKgICogdGltZXIsIG90aGVyd2lzZSB3YXJuIGJ1dCBrZWVwIGdvaW5n IHdpdGggdGhlIHNldHVwIGFueXdheSwgYXMKPj4+ICvCoMKgwqDCoCAqIHRoYXQgbWFrZXMgaXQg cG9zc2libGUgdG8gc3RpbGwgYm9vdCB0aGUga2VybmVsLCBldmVuIHRob3VnaAo+Pj4gK8KgwqDC oMKgICogaXQgbWF5IG5vdCB3b3JrIGNvcnJlY3RseSAocmFuZG9tIGxvY2t1cHMsIGV0YykuCj4+ PiArwqDCoMKgwqAgKiBUaGUgcmVhc29uIGJlaGluZCB0aGlzIGlzIHRoYXQgaGF2aW5nIGFuIGVh cmx5IFVBUlQgbWF5IG5vdCBiZQo+Pj4gK8KgwqDCoMKgICogcG9zc2libGUgZm9yIGV2ZXJ5b25l IGFuZCB0aGlzIGdpdmVzIGEgY2hhbmNlIHRvIHJldHJpZXZlIGttc2cKPj4+ICvCoMKgwqDCoCAq IGZvciBldmVudHVhbCBkZWJ1Z2dpbmcgZXZlbiBvbiBjb25zdW1lciBkZXZpY2VzLgo+Pj4gK8Kg wqDCoMKgICovCj4+PiArwqDCoMKgIGZyZXEgPSB0aW1lcl9vZl9yYXRlKCZ0b19jcHV4KTsKPj4+ ICvCoMKgwqAgaWYgKGZyZXEgPiAxMzAwMDAwMCkKPj4+ICvCoMKgwqDCoMKgwqDCoCBXQVJOKDEs ICJSZXF1ZXN0ZWQgdW5zdXBwb3J0ZWQgdGltZXIgZnJlcXVlbmN5ICV1XG4iLCBmcmVxKTsKPj4+ ICsKPj4+ICvCoMKgwqAgLyogQ2xvY2sgaW5wdXQgaXMgMjZNSHosIHNldCBESVYyIHRvIGFjaGll dmUgMTNNSHogY2xvY2sgKi8KPj4+ICvCoMKgwqAgdmFsID0gbXRrX2NwdXhfcmVhZGwoQ1BVWF9J RFhfR0xPQkFMX0NUUkwsICZ0b19jcHV4KTsKPj4+ICvCoMKgwqAgdmFsICY9IH5DUFVYX0NMS19E SVZfTUFTSzsKPj4+ICvCoMKgwqAgdmFsIHw9IENQVVhfQ0xLX0RJVjI7Cj4+PiArwqDCoMKgIG10 a19jcHV4X3dyaXRlbCh2YWwsIENQVVhfSURYX0dMT0JBTF9DVFJMLCAmdG9fY3B1eCk7Cj4+PiAr Cj4+PiArwqDCoMKgIC8qIEVuYWJsZSBhbGwgQ1BVWEdQVCB0aW1lcnMgKi8KPj4+ICvCoMKgwqAg dmFsID0gbXRrX2NwdXhfcmVhZGwoQ1BVWF9JRFhfR0xPQkFMX0NUUkwsICZ0b19jcHV4KTsKPj4+ ICvCoMKgwqAgbXRrX2NwdXhfd3JpdGVsKHZhbCB8IENQVVhfRU5BQkxFLCBDUFVYX0lEWF9HTE9C QUxfQ1RSTCwgJnRvX2NwdXgpOwo+Pj4gKwo+Pj4gK8KgwqDCoCBjbG9ja2V2ZW50c19jb25maWdf YW5kX3JlZ2lzdGVyKCZ0b19jcHV4LmNsa2V2dCwgdGltZXJfb2ZfcmF0ZSgmdG9fY3B1eCksCj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgVElNRVJfU1lOQ19USUNL UywgMHhmZmZmZmZmZik7Cj4+PiArCj4+PiArwqDCoMKgIHJldHVybiAwOwo+Pj4gK30KPj4+ICsK Pj4+IMKgIHN0YXRpYyBpbnQgX19pbml0IG10a19zeXN0X2luaXQoc3RydWN0IGRldmljZV9ub2Rl ICpub2RlKQo+Pj4gwqAgewo+Pj4gwqDCoMKgwqDCoCBpbnQgcmV0Owo+Pj4gQEAgLTMzOSwzICs0 NTcsNCBAQCBzdGF0aWMgaW50IF9faW5pdCBtdGtfZ3B0X2luaXQoc3RydWN0IGRldmljZV9ub2Rl ICpub2RlKQo+Pj4gwqAgfQo+Pj4gwqAgVElNRVJfT0ZfREVDTEFSRShtdGtfbXQ2NTc3LCAibWVk aWF0ZWssbXQ2NTc3LXRpbWVyIiwgbXRrX2dwdF9pbml0KTsKPj4+IMKgIFRJTUVSX09GX0RFQ0xB UkUobXRrX210Njc2NSwgIm1lZGlhdGVrLG10Njc2NS10aW1lciIsIG10a19zeXN0X2luaXQpOwo+ Pj4gK1RJTUVSX09GX0RFQ0xBUkUobXRrX210Njc5NSwgIm1lZGlhdGVrLG10Njc5NS1zeXN0aW1l ciIsIG10a19jcHV4X2luaXQpOwo+Pj4gLS0gCj4+PiAyLjM1LjEKPj4+Cj4+Pgo+IAo+IAoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtl cm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0 dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5l bAo=