From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from codeconstruct.com.au (pi.codeconstruct.com.au [203.29.241.158]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A835813C8FF; Fri, 27 Jun 2025 01:54:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=203.29.241.158 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750989268; cv=none; b=KD+nxFpAtNVPBEArO1EdaWY4s/TCw5/WdzRgJ//XSoN38h7GlR95+JhY5itah/Ccr+WMIEQlmqaaQ4iDRxvLqF7rZQBY5awoSQowHBDiq/qmNIdpqIuLTFU4y/vuWcNkE2XKBwUjTvn2rQoJV2oGxppOL4Yi+J6ZwD3GrjZl5Hk= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750989268; c=relaxed/simple; bh=Es267rRXGE5VjzmtVxJncSw1FEz0XMXDDYpFqsXjyNA=; h=Message-ID:Subject:From:To:Date:In-Reply-To:References: Content-Type:MIME-Version; b=ETRHWRgsL8UhoE/M5Twp7D3nvQlNOtZDK6heztAyBfv/dJN2rnGVRZoZaIhEbA4FW5S0gzm3K/sV1nMLrRuTfypvfpwGC5x9sOnjlik3ceyrrzGaYLzCJ67T6CfLClrD02Mhew98RsGWvPGTo0weW4sJwB8jflHqko9ApIGLXYM= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=codeconstruct.com.au; spf=pass smtp.mailfrom=codeconstruct.com.au; dkim=pass (2048-bit key) header.d=codeconstruct.com.au header.i=@codeconstruct.com.au header.b=aXHmAF36; arc=none smtp.client-ip=203.29.241.158 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=codeconstruct.com.au Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=codeconstruct.com.au Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=codeconstruct.com.au header.i=@codeconstruct.com.au header.b="aXHmAF36" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=codeconstruct.com.au; s=2022a; t=1750989264; bh=Es267rRXGE5VjzmtVxJncSw1FEz0XMXDDYpFqsXjyNA=; h=Subject:From:To:Date:In-Reply-To:References; b=aXHmAF36FzIhrxG+54gPyEfxH4rI0cCegg+rRNlIw/Kpo1InaSIuLyoUI2NcTNJP7 X6gCS8hOG9OBBx3yhQrvRgK7cHteOPgZJHBDRWzzmNI9rIStKktOEzwk6GTNrfS8GB aJa1lGZthTl+HNFY16T9CyGpuCwG+RfJmP7aJHWUDXQKyv6hHk/tpvv440QhgOL9EN nqpfXaobGk8IirDskBsZGI83N9gaVnR2biiMjbqjPUif2gC1VLsHXJgF5NrCXRsNwd +B0iiP805uIlQCKbd/c3xAh5obEqJaPhlR8OaYEfR4F983bmlBLISzx0ipoo9Bl/ib 05+ZaHa3+Qd6A== Received: from [192.168.68.112] (unknown [180.150.112.166]) by mail.codeconstruct.com.au (Postfix) with ESMTPSA id 309796449F; Fri, 27 Jun 2025 09:54:24 +0800 (AWST) Message-ID: <91b94197dc245f70e3cbd05944e8ed3712b7fd25.camel@codeconstruct.com.au> Subject: Re: [PATCH v5 2/2] mailbox: aspeed: add mailbox driver for AST27XX series SoC From: Andrew Jeffery To: Jammy Huang , jassisinghbrar@gmail.com, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, joel@jms.id.au, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-aspeed@lists.ozlabs.org Date: Fri, 27 Jun 2025 11:24:23 +0930 In-Reply-To: <20250625073417.2395037-3-jammy_huang@aspeedtech.com> References: <20250625073417.2395037-1-jammy_huang@aspeedtech.com> <20250625073417.2395037-3-jammy_huang@aspeedtech.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.46.4-2 Precedence: bulk X-Mailing-List: devicetree@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 T24gV2VkLCAyMDI1LTA2LTI1IGF0IDE1OjM0ICswODAwLCBKYW1teSBIdWFuZyB3cm90ZToKPiBB ZGQgbWFpbGJveCBjb250cm9sbGVyIGRyaXZlciBmb3IgQVNUMjdYWCBTb0NzLCB3aGljaCBwcm92 aWRlcwo+IGluZGVwZW5kZW50IHR4L3J4IG1haWxib3ggYmV0d2VlbiBkaWZmZXJlbnQgcHJvY2Vz c29ycy4gVGhlcmUgYXJlIDQKPiBjaGFubmVscyBmb3IgZWFjaCB0eC9yeCBtYWlsYm94IGFuZCBl YWNoIGNoYW5uZWwgaGFzIGFuIDMyLWJ5dGUgRklGTy4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBKYW1t eSBIdWFuZyA8amFtbXlfaHVhbmdAYXNwZWVkdGVjaC5jb20+Cj4gLS0tCj4gwqBkcml2ZXJzL21h aWxib3gvS2NvbmZpZ8KgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDggKwo+IMKgZHJpdmVycy9t YWlsYm94L01ha2VmaWxlwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDIgKwo+IMKgZHJpdmVycy9t YWlsYm94L2FzdDI3MDAtbWFpbGJveC5jIHwgMjQwICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKwo+IMKgMyBmaWxlcyBjaGFuZ2VkLCAyNTAgaW5zZXJ0aW9ucygrKQo+IMKgY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvbWFpbGJveC9hc3QyNzAwLW1haWxib3guYwo+IAo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL21haWxib3gvS2NvbmZpZyBiL2RyaXZlcnMvbWFpbGJveC9LY29uZmlnCj4g aW5kZXggNjhlZWVkNjYwYTRhLi4xYzM4Y2Q1NzAwOTEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9t YWlsYm94L0tjb25maWcKPiArKysgYi9kcml2ZXJzL21haWxib3gvS2NvbmZpZwo+IEBAIC0zNDAs NCArMzQwLDEyIEBAIGNvbmZpZyBUSEVBRF9USDE1MjBfTUJPWAo+IMKgwqDCoMKgwqDCoMKgwqDC oCBrZXJuZWwgaXMgcnVubmluZywgYW5kIEU5MDIgY29yZSB1c2VkIGZvciBwb3dlciBtYW5hZ2Vt ZW50IGFtb25nIG90aGVyCj4gwqDCoMKgwqDCoMKgwqDCoMKgIHRoaW5ncy4KPiDCoAo+ICtjb25m aWcgQVNUMjcwMF9NQk9YCj4gK8KgwqDCoMKgwqDCoMKgdHJpc3RhdGUgIkFTUEVFRCBBU1QyNzAw IElQQyBkcml2ZXIiCj4gK8KgwqDCoMKgwqDCoMKgZGVwZW5kcyBvbiBBUkNIX0FTUEVFRCB8fCBD T01QSUxFX1RFU1QKPiArwqDCoMKgwqDCoMKgwqBoZWxwCj4gK8KgwqDCoMKgwqDCoMKgwqAgTWFp bGJveCBkcml2ZXIgaW1wbGVtZW50YXRpb24gZm9yIEFTUEVFRCBBU1QyN1hYIFNvQ3MuIFRoaXMg ZHJpdmVyCj4gK8KgwqDCoMKgwqDCoMKgwqAgY2FuIGJlIHVzZWQgdG8gc2VuZCBtZXNzYWdlIGJl dHdlZW4gZGlmZmVyZW50IHByb2Nlc3NvcnMgaW4gU29DLgo+ICvCoMKgwqDCoMKgwqDCoMKgIFRo ZSBkcml2ZXIgcHJvdmlkZXMgbWFpbGJveCBzdXBwb3J0IGZvciBzZW5kaW5nIGludGVycnVwdHMg dG8gdGhlCj4gK8KgwqDCoMKgwqDCoMKgwqAgY2xpZW50cy4gU2F5IFkgaGVyZSBpZiB5b3Ugd2Fu dCB0byBidWlsZCB0aGlzIGRyaXZlci4KPiDCoGVuZGlmCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv bWFpbGJveC9NYWtlZmlsZSBiL2RyaXZlcnMvbWFpbGJveC9NYWtlZmlsZQo+IGluZGV4IDEzYTM0 NDhiMzI3MS4uOWE5YWRkOWE3NTQ4IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvbWFpbGJveC9NYWtl ZmlsZQo+ICsrKyBiL2RyaXZlcnMvbWFpbGJveC9NYWtlZmlsZQo+IEBAIC03MiwzICs3Miw1IEBA IG9iai0kKENPTkZJR19RQ09NX0NQVUNQX01CT1gpwqArPSBxY29tLWNwdWNwLW1ib3gubwo+IMKg b2JqLSQoQ09ORklHX1FDT01fSVBDQynCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCs9 IHFjb20taXBjYy5vCj4gwqAKPiDCoG9iai0kKENPTkZJR19USEVBRF9USDE1MjBfTUJPWCnCoMKg wqDCoMKgwqDCoMKgKz0gbWFpbGJveC10aDE1MjAubwo+ICsKPiArb2JqLSQoQ09ORklHX0FTVDI3 MDBfTUJPWCnCoMKgwqDCoMKgKz0gYXN0MjcwMC1tYWlsYm94Lm8KPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9tYWlsYm94L2FzdDI3MDAtbWFpbGJveC5jIGIvZHJpdmVycy9tYWlsYm94L2FzdDI3MDAt bWFpbGJveC5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjU0 NzAwNTNmODEzOQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL21haWxib3gvYXN0Mjcw MC1tYWlsYm94LmMKPiBAQCAtMCwwICsxLDI0MCBAQAo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogR1BMLTIuMC1vbmx5Cj4gKy8qCj4gKyAqIENvcHlyaWdodCBBc3BlZWQgVGVjaG5vbG9n eSBJbmMuIChDKSAyMDI1LiBBbGwgcmlnaHRzIHJlc2VydmVkCj4gKyAqLwo+ICsKPiArI2luY2x1 ZGUgPGxpbnV4L2ludGVycnVwdC5oPgo+ICsjaW5jbHVkZSA8bGludXgvaW8uaD4KPiArI2luY2x1 ZGUgPGxpbnV4L2lvcG9sbC5oPgo+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gKyNpbmNs dWRlIDxsaW51eC9tYWlsYm94X2NvbnRyb2xsZXIuaD4KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVs ZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3Jt X2RldmljZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ICsKPiArLyogRWFjaCBiaXQg aW4gdGhlIHJlZ2lzdGVyIHJlcHJlc2VudHMgYW4gSVBDIElEICovCj4gKyNkZWZpbmUgSVBDUl9U WF9UUklHwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MDAKPiArI2RlZmluZSBJUENSX0VOQUJMRcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MDQKPiArI2RlZmluZSBJUENSX1NUQVRVU8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoDB4MDgKPiArI2RlZmluZcKgIFJYX0lSUShuKcKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgQklUKG4pCj4gKyNkZWZpbmXCoCBSWF9JUlFfTUFTS8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAweGYKPiArI2RlZmluZSBJUENSX0RBVEHCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgMHgxMAo+ICsKPiArc3RydWN0IGFzdDI3MDBfbWJveF9kYXRhIHsKPiArwqDCoMKgwqDCoMKg wqB1OCBudW1fY2hhbnM7Cj4gK8KgwqDCoMKgwqDCoMKgdTggbXNnX3NpemU7Cj4gK307Cj4gKwo+ ICtzdHJ1Y3QgYXN0MjcwMF9tYm94IHsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbWJveF9jb250 cm9sbGVyIG1ib3g7Cj4gK8KgwqDCoMKgwqDCoMKgdTggbXNnX3NpemU7Cj4gK8KgwqDCoMKgwqDC oMKgdm9pZCBfX2lvbWVtICp0eF9yZWdzOwo+ICvCoMKgwqDCoMKgwqDCoHZvaWQgX19pb21lbSAq cnhfcmVnczsKPiArwqDCoMKgwqDCoMKgwqBzcGlubG9ja190IGxvY2s7Cj4gK307Cj4gKwo+ICtz dGF0aWMgaW5saW5lIGludCBjaF9udW0oc3RydWN0IG1ib3hfY2hhbiAqY2hhbikKPiArewo+ICvC oMKgwqDCoMKgwqDCoHJldHVybiBjaGFuIC0gY2hhbi0+bWJveC0+Y2hhbnM7Cj4gK30KPiArCj4g K3N0YXRpYyBpbmxpbmUgYm9vbCBhc3QyNzAwX21ib3hfdHhfZG9uZShzdHJ1Y3QgYXN0MjcwMF9t Ym94ICptYiwgaW50IGlkeCkKPiArewo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAhKHJlYWRsKG1i LT50eF9yZWdzICsgSVBDUl9TVEFUVVMpICYgQklUKGlkeCkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aXJxcmV0dXJuX3QgYXN0MjcwMF9tYm94X2lycShpbnQgaXJxLCB2b2lkICpwKQo+ICt7Cj4gK8Kg wqDCoMKgwqDCoMKgc3RydWN0IGFzdDI3MDBfbWJveCAqbWIgPSBwOwo+ICvCoMKgwqDCoMKgwqDC oHZvaWQgX19pb21lbSAqZGF0YV9yZWc7Cj4gK8KgwqDCoMKgwqDCoMKgaW50IG51bV93b3JkczsK PiArwqDCoMKgwqDCoMKgwqB1MzIgKndvcmRfZGF0YTsKPiArwqDCoMKgwqDCoMKgwqB1MzIgc3Rh dHVzOwo+ICvCoMKgwqDCoMKgwqDCoGludCBuOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiBPbmx5 IGV4YW1pbmUgY2hhbm5lbHMgdGhhdCBhcmUgY3VycmVudGx5IGVuYWJsZWQuICovCj4gK8KgwqDC oMKgwqDCoMKgc3RhdHVzID0gcmVhZGwobWItPnJ4X3JlZ3MgKyBJUENSX0VOQUJMRSkgJgo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVhZGwobWItPnJ4X3JlZ3MgKyBJUENSX1NU QVRVUyk7CgpBbHNvIG5lZWQgdG8gbG9jayBvdmVyIHRoZXNlIHJlYWRzIHRvIGhhbmRsZSBjb25j dXJyZW50CnN0YXJ0dXAvc2h1dGRvd24/Cgo+ICsKPiArwqDCoMKgwqDCoMKgwqBpZiAoIShzdGF0 dXMgJiBSWF9JUlFfTUFTSykpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVy biBJUlFfTk9ORTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgZm9yIChuID0gMDsgbiA8IG1iLT5tYm94 Lm51bV9jaGFuczsgKytuKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHN0cnVj dCBtYm94X2NoYW4gKmNoYW4gPSAmbWItPm1ib3guY2hhbnNbbl07Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIShzdGF0dXMgJiBSWF9JUlEobikpKQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY29udGludWU7Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBSZWFkIHRoZSBtZXNzYWdlIGRhdGEgKi8K PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZm9yIChkYXRhX3JlZyA9IG1iLT5yeF9y ZWdzICsgSVBDUl9EQVRBICsgbWItPm1zZ19zaXplICogbiwKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgd29yZF9kYXRhID0gY2hhbi0+Y29uX3ByaXYsCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG51bV93b3JkcyA9IChtYi0+bXNnX3Np emUgLyBzaXplb2YodTMyKSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIG51bV93b3JkczsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg bnVtX3dvcmRzLS0sIGRhdGFfcmVnICs9IHNpemVvZih1MzIpLCB3b3JkX2RhdGErKykKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCp3b3JkX2RhdGEgPSBy ZWFkbChkYXRhX3JlZyk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtYm94 X2NoYW5fcmVjZWl2ZWRfZGF0YShjaGFuLCBjaGFuLT5jb25fcHJpdik7Cj4gKwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBUaGUgSVJRIGNhbiBiZSBjbGVhcmVkIG9ubHkgb25j ZSB0aGUgRklGTyBpcyBlbXB0eS4gKi8KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg d3JpdGVsKFJYX0lSUShuKSwgbWItPnJ4X3JlZ3MgKyBJUENSX1NUQVRVUyk7CgpDYW4gd2UgcmF0 aGVyIGNsZWFyIHRoZSBzdGF0dXMgb25jZSBvdXRzaWRlIHRoZSBsb29wIGltbWVkaWF0ZWx5IGJl Zm9yZQpyZXR1cm4/Cgp3cml0ZWwoc3RhdHVzLCBtYi0+cnhfcmVncyArIElQQ1JfU1RBVFVTKTsK Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gSVJRX0hBTkRM RUQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgYXN0MjcwMF9tYm94X3NlbmRfZGF0YShzdHJ1Y3Qg bWJveF9jaGFuICpjaGFuLCB2b2lkICpkYXRhKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0 IGFzdDI3MDBfbWJveCAqbWIgPSBkZXZfZ2V0X2RydmRhdGEoY2hhbi0+bWJveC0+ZGV2KTsKPiAr wqDCoMKgwqDCoMKgwqB2b2lkIF9faW9tZW0gKmRhdGFfcmVnOwo+ICvCoMKgwqDCoMKgwqDCoHUz MiAqd29yZF9kYXRhOwo+ICvCoMKgwqDCoMKgwqDCoGludCBudW1fd29yZHM7Cj4gK8KgwqDCoMKg wqDCoMKgaW50IGlkeCA9IGNoX251bShjaGFuKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYgKCEo cmVhZGwobWItPnR4X3JlZ3MgKyBJUENSX0VOQUJMRSkgJiBCSVQoaWR4KSkpIHsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X3dhcm4obWItPm1ib3guZGV2LCAiJXM6IENoLSVk IG5vdCBlbmFibGVkIHlldFxuIiwgX19mdW5jX18sIGlkeCk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldHVybiAtRUJVU1k7CgotRU5PREVWPyBJIHdvdWxkbid0IHNheSBpdCdz IGJ1c3kgaGVyZSA6KQoKPiArwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlm ICghKGFzdDI3MDBfbWJveF90eF9kb25lKG1iLCBpZHgpKSkgewo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBkZXZfd2FybihtYi0+bWJveC5kZXYsICIlczogQ2gtJWQgbGFzdCBkYXRh IGhhcyBub3QgZmluaXNoZWRcbiIsIF9fZnVuY19fLCBpZHgpOwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXR1cm4gLUVCVVNZOwo+ICvCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8Kg wqDCoMKgwqDCoMKgLyogV3JpdGUgdGhlIG1lc3NhZ2UgZGF0YSAqLwo+ICvCoMKgwqDCoMKgwqDC oGZvciAoZGF0YV9yZWcgPSBtYi0+dHhfcmVncyArIElQQ1JfREFUQSArIG1iLT5tc2dfc2l6ZSAq IGlkeCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB3b3JkX2RhdGEgPSAodTMyICopZGF0YSwK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBudW1fd29yZHMgPSAobWItPm1zZ19zaXplIC8gc2l6 ZW9mKHUzMikpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG51bV93b3JkczsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBudW1fd29yZHMtLSwgZGF0YV9yZWcgKz0gc2l6ZW9mKHUzMiksIHdv cmRfZGF0YSsrKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB3cml0ZWwoKndvcmRf ZGF0YSwgZGF0YV9yZWcpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqB3cml0ZWwoQklUKGlkeCksIG1i LT50eF9yZWdzICsgSVBDUl9UWF9UUklHKTsKPiArwqDCoMKgwqDCoMKgwqBkZXZfZGJnKG1iLT5t Ym94LmRldiwgIiVzOiBDaC0lZCBzZW50XG4iLCBfX2Z1bmNfXywgaWR4KTsKPiArCj4gK8KgwqDC oMKgwqDCoMKgcmV0dXJuIDA7Cj4gK30KPiArCgoqc25pcCoKCj4gKwo+ICtzdGF0aWMgaW50IGFz dDI3MDBfbWJveF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gK8Kg wqDCoMKgwqDCoMKgc3RydWN0IGFzdDI3MDBfbWJveCAqbWI7Cj4gK8KgwqDCoMKgwqDCoMKgY29u c3Qgc3RydWN0IGFzdDI3MDBfbWJveF9kYXRhICpkZXZfZGF0YTsKPiArwqDCoMKgwqDCoMKgwqBz dHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Owo+ICvCoMKgwqDCoMKgwqDCoGludCBpcnEs IHJldDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgaWYgKCFwZGV2LT5kZXYub2Zfbm9kZSkKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FTk9ERVY7Cj4gKwo+ICvCoMKgwqDC oMKgwqDCoGRldl9kYXRhID0gZGV2aWNlX2dldF9tYXRjaF9kYXRhKCZwZGV2LT5kZXYpOwo+ICsK PiArwqDCoMKgwqDCoMKgwqBtYiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWIpLCBHRlBf S0VSTkVMKTsKPiArwqDCoMKgwqDCoMKgwqBpZiAoIW1iKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gLUVOT01FTTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgbWItPm1ib3gu Y2hhbnMgPSBkZXZtX2tjYWxsb2MoJnBkZXYtPmRldiwgZGV2X2RhdGEtPm51bV9jaGFucywKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHNpemVvZigqbWItPm1ib3guY2hhbnMpLCBHRlBfS0VSTkVMKTsKPiAr wqDCoMKgwqDCoMKgwqBpZiAoIW1iLT5tYm94LmNoYW5zKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gLUVOT01FTTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyogY29uX3By aXYgb2YgZWFjaCBjaGFubmVsIGlzIHVzZWQgdG8gc3RvcmUgdGhlIG1lc3NhZ2UgcmVjZWl2ZWQg Ki8KPiArwqDCoMKgwqDCoMKgwqBmb3IgKGludCBpID0gMDsgaSA8IGRldl9kYXRhLT5udW1fY2hh bnM7IGkrKykgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBtYi0+bWJveC5jaGFu c1tpXS5jb25fcHJpdiA9IGRldm1fa2NhbGxvYyhkZXYsIGRldl9kYXRhLT5tc2dfc2l6ZSwKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBz aXplb2YodTgpLCBHRlBfS0VSTkVMKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg aWYgKCFtYi0+bWJveC5jaGFuc1tpXS5jb25fcHJpdikKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRU5PTUVNOwo+ICvCoMKgwqDCoMKgwqDC oH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbWIpOwo+ ICsKPiArwqDCoMKgwqDCoMKgwqBtYi0+dHhfcmVncyA9IGRldm1fcGxhdGZvcm1faW9yZW1hcF9y ZXNvdXJjZShwZGV2LCAwKTsKClNlZSB0aGUgdGhvdWdodCBhYm91dCByZWctbmFtZXMgb24gdGhl IGJpbmRpbmcuCgpBbmRyZXcK