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 A3285C433F5 for ; Wed, 2 Mar 2022 17:55:41 +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:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=kvh+8TSdXnFo2FYCYjTaFpeqKmd7SQkKij3KXtcltO0=; b=YGwYfizIFh1r9A GCcuivWvK9o2l9BEcifGpnCZnPiOkMHUHdi28w04C512wXFuJt2c2yqn9MnJf754m6bTYwQnj46jv OqHSYOXKu4YwP9CXHcVk8XhkHYglx5kHBHD3/RzY5Er80CMoRRzBKtkrZe/JAXK+GBGKi+Q88QQ5W D4zxw3ERpRkYVM2bxM8jiDidAvncXZmnPGcWIBiigvAc+TtjkBwqNsfc16mYpbPB5KAW6YSdhUZ6h ZGzZgarKEmOLYVmwcKsAHZkb/pr+NT2QaCbonB8HX3sqPgYascK0IG1Pe4+0TVFrj8C5aF3CoTs4H 9n+KswUPhM82zAFHcOxQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nPTAW-003flA-JG; Wed, 02 Mar 2022 17:53:45 +0000 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nPSq4-003ZXB-3R; Wed, 02 Mar 2022 17:32:38 +0000 Received: from pps.filterd (m0098404.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 222FsGka007696; Wed, 2 Mar 2022 17:32:17 GMT Received: from ppma04ams.nl.ibm.com (63.31.33a9.ip4.static.sl-reverse.com [169.51.49.99]) by mx0a-001b2d01.pphosted.com with ESMTP id 3ejbmdt347-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 02 Mar 2022 17:32:17 +0000 Received: from pps.filterd (ppma04ams.nl.ibm.com [127.0.0.1]) by ppma04ams.nl.ibm.com (8.16.1.2/8.16.1.2) with SMTP id 222HDEOO008064; Wed, 2 Mar 2022 17:31:32 GMT Received: from b06cxnps4075.portsmouth.uk.ibm.com (d06relay12.portsmouth.uk.ibm.com [9.149.109.197]) by ppma04ams.nl.ibm.com with ESMTP id 3egbj1amgb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 02 Mar 2022 17:31:32 +0000 Received: from d06av26.portsmouth.uk.ibm.com (d06av26.portsmouth.uk.ibm.com [9.149.105.62]) by b06cxnps4075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 222HVUcL52560168 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 2 Mar 2022 17:31:30 GMT Received: from d06av26.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id E8644AE05D; Wed, 2 Mar 2022 17:31:29 +0000 (GMT) Received: from d06av26.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 47283AE053; Wed, 2 Mar 2022 17:31:29 +0000 (GMT) Received: from smtp.tlslab.ibm.com (unknown [9.101.4.1]) by d06av26.portsmouth.uk.ibm.com (Postfix) with SMTP; Wed, 2 Mar 2022 17:31:29 +0000 (GMT) Received: from yukon.ibmuc.com (unknown [9.171.58.125]) by smtp.tlslab.ibm.com (Postfix) with ESMTP id D5A44220294; Wed, 2 Mar 2022 18:31:27 +0100 (CET) From: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= To: linux-spi@vger.kernel.org, linux-mtd@lists.infradead.org Cc: Mark Brown , Tudor Ambarus , Pratyush Yadav , Miquel Raynal , Richard Weinberger , Vignesh Raghavendra , linux-aspeed@lists.ozlabs.org, Joel Stanley , Andrew Jeffery , Chin-Ting Kuo , devicetree@vger.kernel.org, Rob Herring , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Subject: [PATCH v2 09/10] spi: aspeed: Calibrate read timings Date: Wed, 2 Mar 2022 18:31:13 +0100 Message-Id: <20220302173114.927476-10-clg@kaod.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220302173114.927476-1-clg@kaod.org> References: <20220302173114.927476-1-clg@kaod.org> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: ZXhUlMTkXE1PhM-OkQSsU8806hwG-SBo X-Proofpoint-GUID: ZXhUlMTkXE1PhM-OkQSsU8806hwG-SBo X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.816,Hydra:6.0.425,FMLib:17.11.64.514 definitions=2022-03-02_12,2022-02-26_01,2022-02-23_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1034 impostorscore=0 phishscore=0 lowpriorityscore=0 spamscore=0 bulkscore=0 adultscore=0 mlxlogscore=999 malwarescore=0 priorityscore=1501 mlxscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2201110000 definitions=main-2203020076 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220302_093236_244359_E09A53F9 X-CRM114-Status: GOOD ( 32.83 ) 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 VG8gYWNjb21tb2RhdGUgdGhlIGRpZmZlcmVudCByZXNwb25zZSB0aW1lIG9mIFNQSSB0cmFuc2Zl cnMgb24gZGlmZmVyZW50CmJvYXJkcyBhbmQgZGlmZmVyZW50IFNQSSBOT1IgZGV2aWNlcywgdGhl IEFzcGVlZCBjb250cm9sbGVycyBwcm92aWRlIGEKc2V0IG9mIFJlYWQgVGltaW5nIENvbXBlbnNh dGlvbiByZWdpc3RlcnMgdG8gdHVuZSB0aGUgdGltaW5nIGRlbGF5cwpkZXBlbmRpbmcgb24gdGhl IGZyZXF1ZW5jeSBiZWluZyB1c2VkLiBUaGUgQVNUMjYwMCBTb0MgaGFzIG9uZSBvZgp0aGVzZSBy ZWdpc3RlcnMgcGVyIGRldmljZS4gT24gdGhlIEFTVDI1MDAgYW5kIEFTVDI0MDAgU29DcywgdGhl CnRpbWluZyByZWdpc3RlciBpcyBzaGFyZWQgYnkgYWxsIGRldmljZXMgd2hpY2ggaXMgYSBiaXQg cHJvYmxlbWF0aWMgdG8KZ2V0IGdvb2QgcmVzdWx0cyBvdGhlciB0aGFuIGZvciBvbmUgZGV2aWNl LgoKVGhlIGFsZ29yaXRobSBmaXJzdCByZWFkcyBhIGdvbGRlbiBidWZmZXIgYXQgbG93IHNwZWVk IGFuZCB0aGVuIHBlcmZvcm1zCnJlYWRzIHdpdGggZGlmZmVyZW50IGNsb2NrcyBhbmQgZGVsYXkg Y3ljbGUgc2V0dGluZ3MgdG8gZmluZCBhIGJyZWFraW5nCnBvaW50LiBUaGlzIHNlbGVjdHMgYSBk ZWZhdWx0IGdvb2QgZnJlcXVlbmN5IGZvciB0aGUgQ0V4IGNvbnRyb2wgcmVnaXN0ZXIuClRoZSBj dXJyZW50IHNldHRpbmdzIGFyZSBiaXQgb3B0aW1pc3RpYyBhcyB3ZSBwaWNrIHRoZSBmaXJzdCBk ZWxheSBnaXZpbmcKZ29vZCByZXN1bHRzLiBBIHNhZmVyIGFwcHJvYWNoIHdvdWxkIGJlIHRvIGRl dGVybWluZSBhbiBpbnRlcnZhbCBhbmQKY2hvb3NlIHRoZSBtaWRkbGUgdmFsdWUuCgpDYWxpYnJh dGlvbiBpcyBwZXJmb3JtZWQgd2hlbiB0aGUgZGlyZWN0IG1hcHBpbmcgZm9yIHJlYWRzIGlzIGNy ZWF0ZWQuClNpbmNlIHRoZSB1bmRlcmx5aW5nIHNwaS1ub3Igb2JqZWN0IG5lZWRzIHRvIGJlIGlu aXRpYWxpemVkIHRvIGNyZWF0ZQp0aGUgc3BpX21lbSBvcGVyYXRpb24gZm9yIGRpcmVjdCBtYXBw aW5nLCB3ZSBzaG91bGQgYmUgZmluZS4gSGF2aW5nIGEKc3BlY2lmaWMgQVBJIHdvdWxkIGNsYXJp ZnkgdGhlIHJlcXVpcmVtZW50cyB0aG91Z2guCgpDYzogUHJhdHl1c2ggWWFkYXYgPHAueWFkYXZA dGkuY29tPgpTaWduZWQtb2ZmLWJ5OiBDw6lkcmljIExlIEdvYXRlciA8Y2xnQGthb2Qub3JnPgot LS0KIGRyaXZlcnMvc3BpL3NwaS1hc3BlZWQtc21jLmMgfCAyODEgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCAyODEgaW5zZXJ0aW9ucygrKQoKZGlm ZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1hc3BlZWQtc21jLmMgYi9kcml2ZXJzL3NwaS9zcGkt YXNwZWVkLXNtYy5jCmluZGV4IDhjNmQ3Zjc5ZDk3Zi4uZGNlMjVkZmU2OTEzIDEwMDY0NAotLS0g YS9kcml2ZXJzL3NwaS9zcGktYXNwZWVkLXNtYy5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1hc3Bl ZWQtc21jLmMKQEAgLTM1LDYgKzM1LDggQEAKICNkZWZpbmUgICBDVFJMX0lPX0FERFJFU1NfNEIJ CUJJVCgxMykJLyogQVNUMjQwMCBTUEkgb25seSAqLwogI2RlZmluZSAgIENUUkxfSU9fRFVNTVlf U0VUKGR1bW15KQkJCQkJXAogCSgoKCgoZHVtbXkpID4+IDIpICYgMHgxKSA8PCAxNCkgfCAoKChk dW1teSkgJiAweDMpIDw8IDYpKQorI2RlZmluZSAgIENUUkxfRlJFUV9TRUxfU0hJRlQJCTgKKyNk ZWZpbmUgICBDVFJMX0ZSRVFfU0VMX01BU0sJCUdFTk1BU0soMTEsIENUUkxfRlJFUV9TRUxfU0hJ RlQpCiAjZGVmaW5lICAgQ1RSTF9DRV9TVE9QX0FDVElWRQkJQklUKDIpCiAjZGVmaW5lICAgQ1RS TF9JT19NT0RFX0NNRF9NQVNLCQlHRU5NQVNLKDEsIDApCiAjZGVmaW5lICAgQ1RSTF9JT19NT0RF X05PUk1BTAkJMHgwCkBAIC00Nyw2ICs0OSw5IEBACiAvKiBDRXggQWRkcmVzcyBEZWNvZGluZyBS YW5nZSBSZWdpc3RlciAqLwogI2RlZmluZSBDRTBfU0VHTUVOVF9BRERSX1JFRwkJMHgzMAogCisv KiBDRXggUmVhZCB0aW1pbmcgY29tcGVuc2F0aW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIENFMF9U SU1JTkdfQ09NUEVOU0FUSU9OX1JFRwkweDk0CisKIGVudW0gYXNwZWVkX3NwaV9jdGxfcmVnX3Zh bHVlIHsKIAlBU1BFRURfU1BJX0JBU0UsCiAJQVNQRUVEX1NQSV9SRUFELApAQCAtNzIsMTAgKzc3 LDE1IEBAIHN0cnVjdCBhc3BlZWRfc3BpX2RhdGEgewogCWJvb2wJaGFzdHlwZTsKIAl1MzIJbW9k ZV9iaXRzOwogCXUzMgl3ZTA7CisJdTMyCXRpbWluZzsKKwl1MzIJaGNsa19tYXNrOworCXUzMglo ZGl2X21heDsKIAogCXUzMiAoKnNlZ21lbnRfc3RhcnQpKHN0cnVjdCBhc3BlZWRfc3BpICphc3Bp LCB1MzIgcmVnKTsKIAl1MzIgKCpzZWdtZW50X2VuZCkoc3RydWN0IGFzcGVlZF9zcGkgKmFzcGks IHUzMiByZWcpOwogCXUzMiAoKnNlZ21lbnRfcmVnKShzdHJ1Y3QgYXNwZWVkX3NwaSAqYXNwaSwg dTMyIHN0YXJ0LCB1MzIgZW5kKTsKKwlpbnQgKCpjYWxpYnJhdGUpKHN0cnVjdCBhc3BlZWRfc3Bp X2NoaXAgKmNoaXAsIHUzMiBoZGl2LAorCQkJIGNvbnN0IHU4ICpnb2xkZW5fYnVmLCB1OCAqdGVz dF9idWYpOwogfTsKIAogI2RlZmluZSBBU1BFRURfU1BJX01BWF9OVU1fQ1MJNQpAQCAtNTE5LDYg KzUyOSw4IEBAIHN0YXRpYyBpbnQgYXNwZWVkX3NwaV9jaGlwX2FkanVzdF93aW5kb3coc3RydWN0 IGFzcGVlZF9zcGlfY2hpcCAqY2hpcCwKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBhc3Bl ZWRfc3BpX2RvX2NhbGlicmF0aW9uKHN0cnVjdCBhc3BlZWRfc3BpX2NoaXAgKmNoaXApOworCiBz dGF0aWMgaW50IGFzcGVlZF9zcGlfZGlybWFwX2NyZWF0ZShzdHJ1Y3Qgc3BpX21lbV9kaXJtYXBf ZGVzYyAqZGVzYykKIHsKIAlzdHJ1Y3QgYXNwZWVkX3NwaSAqYXNwaSA9IHNwaV9jb250cm9sbGVy X2dldF9kZXZkYXRhKGRlc2MtPm1lbS0+c3BpLT5tYXN0ZXIpOwpAQCAtNTY3LDYgKzU3OSw4IEBA IHN0YXRpYyBpbnQgYXNwZWVkX3NwaV9kaXJtYXBfY3JlYXRlKHN0cnVjdCBzcGlfbWVtX2Rpcm1h cF9kZXNjICpkZXNjKQogCWNoaXAtPmN0bF92YWxbQVNQRUVEX1NQSV9SRUFEXSA9IGN0bF92YWw7 CiAJd3JpdGVsKGNoaXAtPmN0bF92YWxbQVNQRUVEX1NQSV9SRUFEXSwgY2hpcC0+Y3RsKTsKIAor CXJldCA9IGFzcGVlZF9zcGlfZG9fY2FsaWJyYXRpb24oY2hpcCk7CisKIAlkZXZfaW5mbyhhc3Bp LT5kZXYsICJDRSVkIHJlYWQgYnVzd2lkdGg6JWQgWzB4JTA4eF1cbiIsCiAJCSBjaGlwLT5jcywg b3AtPmRhdGEuYnVzd2lkdGgsIGNoaXAtPmN0bF92YWxbQVNQRUVEX1NQSV9SRUFEXSk7CiAKQEAg LTgxNCw2ICs4MjgsMjQ5IEBAIHN0YXRpYyB1MzIgYXNwZWVkX3NwaV9zZWdtZW50X2FzdDI2MDBf cmVnKHN0cnVjdCBhc3BlZWRfc3BpICphc3BpLAogCQkoKGVuZCAtIDEpICYgQVNUMjYwMF9TRUdf QUREUl9NQVNLKTsKIH0KIAorLyoKKyAqIFJlYWQgdGltaW5nIGNvbXBlbnNhdGlvbiBzZXF1ZW5j ZXMKKyAqLworCisjZGVmaW5lIENBTElCUkFURV9CVUZfU0laRSBTWl8xNksKKworc3RhdGljIGJv b2wgYXNwZWVkX3NwaV9jaGVja19yZWFkcyhzdHJ1Y3QgYXNwZWVkX3NwaV9jaGlwICpjaGlwLAor CQkJCSAgIGNvbnN0IHU4ICpnb2xkZW5fYnVmLCB1OCAqdGVzdF9idWYpCit7CisJaW50IGk7CisK Kwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQltZW1jcHlfZnJvbWlvKHRlc3RfYnVmLCBj aGlwLT5haGJfYmFzZSwgQ0FMSUJSQVRFX0JVRl9TSVpFKTsKKwkJaWYgKG1lbWNtcCh0ZXN0X2J1 ZiwgZ29sZGVuX2J1ZiwgQ0FMSUJSQVRFX0JVRl9TSVpFKSAhPSAwKSB7CisjaWYgZGVmaW5lZChW RVJCT1NFX0RFQlVHKQorCQkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoREVWSUNFX05BTUUgIiAgZmFp bDogIiwgRFVNUF9QUkVGSVhfTk9ORSwKKwkJCQkJICAgICB0ZXN0X2J1ZiwgMHgxMDApOworI2Vu ZGlmCisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisJcmV0dXJuIHRydWU7Cit9CisKKyNkZWZp bmUgRlJFQURfVFBBU1MoaSkJKCgoaSkgLyAyKSB8ICgoKGkpICYgMSkgPyAwIDogOCkpCisKKy8q CisgKiBUaGUgdGltaW5nIHJlZ2lzdGVyIGlzIHNoYXJlZCBieSBhbGwgZGV2aWNlcy4gT25seSB1 cGRhdGUgZm9yIENFMC4KKyAqLworc3RhdGljIGludCBhc3BlZWRfc3BpX2NhbGlicmF0ZShzdHJ1 Y3QgYXNwZWVkX3NwaV9jaGlwICpjaGlwLCB1MzIgaGRpdiwKKwkJCQljb25zdCB1OCAqZ29sZGVu X2J1ZiwgdTggKnRlc3RfYnVmKQoreworCXN0cnVjdCBhc3BlZWRfc3BpICphc3BpID0gY2hpcC0+ YXNwaTsKKwljb25zdCBzdHJ1Y3QgYXNwZWVkX3NwaV9kYXRhICpkYXRhID0gYXNwaS0+ZGF0YTsK KwlpbnQgaTsKKwlpbnQgZ29vZF9wYXNzID0gLTEsIHBhc3NfY291bnQgPSAwOworCXUzMiBzaGlm dCA9IChoZGl2IC0gMSkgPDwgMjsKKwl1MzIgbWFzayA9IH4oMHhmdSA8PCBzaGlmdCk7CisJdTMy IGZyZWFkX3RpbWluZ192YWwgPSAwOworCisJLyogVHJ5IEhDTEsgZGVsYXkgMC4uNSwgZWFjaCBv bmUgd2l0aC93aXRob3V0IGRlbGF5IGFuZCBsb29rIGZvciBhCisJICogZ29vZCBwYWlyLgorCSAq LworCWZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7CisJCWJvb2wgcGFzczsKKworCQlpZiAoY2hp cC0+Y3MgPT0gMCkgeworCQkJZnJlYWRfdGltaW5nX3ZhbCAmPSBtYXNrOworCQkJZnJlYWRfdGlt aW5nX3ZhbCB8PSBGUkVBRF9UUEFTUyhpKSA8PCBzaGlmdDsKKwkJCXdyaXRlbChmcmVhZF90aW1p bmdfdmFsLCBhc3BpLT5yZWdzICsgZGF0YS0+dGltaW5nKTsKKwkJfQorCQlwYXNzID0gYXNwZWVk X3NwaV9jaGVja19yZWFkcyhjaGlwLCBnb2xkZW5fYnVmLCB0ZXN0X2J1Zik7CisJCWRldl9kYmco YXNwaS0+ZGV2LAorCQkJIiAgKiBbJTA4eF0gJWQgSENMSyBkZWxheSwgJWRucyBESSBkZWxheSA6 ICVzIiwKKwkJCWZyZWFkX3RpbWluZ192YWwsIGkgLyAyLCAoaSAmIDEpID8gMCA6IDQsCisJCQlw YXNzID8gIlBBU1MiIDogIkZBSUwiKTsKKwkJaWYgKHBhc3MpIHsKKwkJCXBhc3NfY291bnQrKzsK KwkJCWlmIChwYXNzX2NvdW50ID09IDMpIHsKKwkJCQlnb29kX3Bhc3MgPSBpIC0gMTsKKwkJCQli cmVhazsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXBhc3NfY291bnQgPSAwOworCQl9CisJfQorCisJ LyogTm8gZ29vZCBzZXR0aW5nIGZvciB0aGlzIGZyZXF1ZW5jeSAqLworCWlmIChnb29kX3Bhc3Mg PCAwKQorCQlyZXR1cm4gLTE7CisKKwkvKiBXZSBoYXZlIGF0IGxlYXN0IG9uZSBwYXNzIG9mIG1h cmdpbiwgbGV0J3MgdXNlIGZpcnN0IHBhc3MgKi8KKwlpZiAoY2hpcC0+Y3MgPT0gMCkgeworCQlm cmVhZF90aW1pbmdfdmFsICY9IG1hc2s7CisJCWZyZWFkX3RpbWluZ192YWwgfD0gRlJFQURfVFBB U1MoZ29vZF9wYXNzKSA8PCBzaGlmdDsKKwkJd3JpdGVsKGZyZWFkX3RpbWluZ192YWwsIGFzcGkt PnJlZ3MgKyBkYXRhLT50aW1pbmcpOworCX0KKwlkZXZfZGJnKGFzcGktPmRldiwgIiAqIC0+IGdv b2QgaXMgcGFzcyAlZCBbMHglMDh4XSIsCisJCWdvb2RfcGFzcywgZnJlYWRfdGltaW5nX3ZhbCk7 CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBib29sIGFzcGVlZF9zcGlfY2hlY2tfY2FsaWJfZGF0 YShjb25zdCB1OCAqdGVzdF9idWYsIHUzMiBzaXplKQoreworCWNvbnN0IHUzMiAqdGIzMiA9IChj b25zdCB1MzIgKil0ZXN0X2J1ZjsKKwl1MzIgaSwgY250ID0gMDsKKworCS8qIFdlIGNoZWNrIGlm IHdlIGhhdmUgZW5vdWdoIHdvcmRzIHRoYXQgYXJlIG5laXRoZXIgYWxsIDAKKwkgKiBub3IgYWxs IDEncyBzbyB0aGUgY2FsaWJyYXRpb24gY2FuIGJlIGNvbnNpZGVyZWQgdmFsaWQuCisJICoKKwkg KiBJIHVzZSBhbiBhcmJpdHJhcnkgdGhyZXNob2xkIGZvciBub3cgb2YgNjQKKwkgKi8KKwlzaXpl ID4+PSAyOworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJaWYgKHRiMzJbaV0gIT0g MCAmJiB0YjMyW2ldICE9IDB4ZmZmZmZmZmYpCisJCQljbnQrKzsKKwl9CisJcmV0dXJuIGNudCA+ PSA2NDsKK30KKworc3RhdGljIGNvbnN0IHUzMiBhc3BlZWRfc3BpX2hjbGtfZGl2c1tdID0gewor CTB4ZiwgLyogSENMSyAqLworCTB4NywgLyogSENMSy8yICovCisJMHhlLCAvKiBIQ0xLLzMgKi8K KwkweDYsIC8qIEhDTEsvNCAqLworCTB4ZCwgLyogSENMSy81ICovCit9OworCisjZGVmaW5lIEFT UEVFRF9TUElfSENMS19ESVYoaSkgXAorCShhc3BlZWRfc3BpX2hjbGtfZGl2c1soaSkgLSAxXSA8 PCBDVFJMX0ZSRVFfU0VMX1NISUZUKQorCitzdGF0aWMgaW50IGFzcGVlZF9zcGlfZG9fY2FsaWJy YXRpb24oc3RydWN0IGFzcGVlZF9zcGlfY2hpcCAqY2hpcCkKK3sKKwlzdHJ1Y3QgYXNwZWVkX3Nw aSAqYXNwaSA9IGNoaXAtPmFzcGk7CisJY29uc3Qgc3RydWN0IGFzcGVlZF9zcGlfZGF0YSAqZGF0 YSA9IGFzcGktPmRhdGE7CisJdTMyIGFoYl9mcmVxID0gYXNwaS0+Y2xrX2ZyZXE7CisJdTMyIG1h eF9mcmVxID0gY2hpcC0+Y2xrX2ZyZXE7CisJdTMyIGN0bF92YWw7CisJdTggKmdvbGRlbl9idWYg PSBOVUxMOworCXU4ICp0ZXN0X2J1ZiA9IE5VTEw7CisJaW50IGksIHJjLCBiZXN0X2RpdiA9IC0x OworCisJZGV2X2RiZyhhc3BpLT5kZXYsICJjYWxjdWxhdGUgdGltaW5nIGNvbXBlbnNhdGlvbiAt IEFIQiBmcmVxOiAlZCBNSHoiLAorCQlhaGJfZnJlcSAvIDEwMDAwMDApOworCisJLyoKKwkgKiB1 c2UgdGhlIHJlbGF0ZWQgbG93IGZyZXF1ZW5jeSB0byBnZXQgY2hlY2sgY2FsaWJyYXRpb24gZGF0 YQorCSAqIGFuZCBnZXQgZ29sZGVuIGRhdGEuCisJICovCisJY3RsX3ZhbCA9IGNoaXAtPmN0bF92 YWxbQVNQRUVEX1NQSV9SRUFEXSAmIGRhdGEtPmhjbGtfbWFzazsKKwl3cml0ZWwoY3RsX3ZhbCwg Y2hpcC0+Y3RsKTsKKworCXRlc3RfYnVmID0ga3phbGxvYyhDQUxJQlJBVEVfQlVGX1NJWkUgKiAy LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRlc3RfYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWdv bGRlbl9idWYgPSB0ZXN0X2J1ZiArIENBTElCUkFURV9CVUZfU0laRTsKKworCW1lbWNweV9mcm9t aW8oZ29sZGVuX2J1ZiwgY2hpcC0+YWhiX2Jhc2UsIENBTElCUkFURV9CVUZfU0laRSk7CisJaWYg KCFhc3BlZWRfc3BpX2NoZWNrX2NhbGliX2RhdGEoZ29sZGVuX2J1ZiwgQ0FMSUJSQVRFX0JVRl9T SVpFKSkgeworCQlkZXZfaW5mbyhhc3BpLT5kZXYsICJDYWxpYnJhdGlvbiBhcmVhIHRvbyB1bmlm b3JtLCB1c2luZyBsb3cgc3BlZWQiKTsKKwkJZ290byBub19jYWxpYjsKKwl9CisKKyNpZiBkZWZp bmVkKFZFUkJPU0VfREVCVUcpCisJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoREVWSUNFX05BTUUgIiAg Z29vZDogIiwgRFVNUF9QUkVGSVhfTk9ORSwKKwkJCSAgICAgZ29sZGVuX2J1ZiwgMHgxMDApOwor I2VuZGlmCisKKwkvKiBOb3cgd2UgaXRlcmF0ZSB0aGUgSENMSyBkaXZpZGVycyB1bnRpbCB3ZSBm aW5kIG91ciBicmVha2luZyBwb2ludCAqLworCWZvciAoaSA9IEFSUkFZX1NJWkUoYXNwZWVkX3Nw aV9oY2xrX2RpdnMpOyBpID4gZGF0YS0+aGRpdl9tYXggLSAxOyBpLS0pIHsKKwkJdTMyIHR2LCBm cmVxOworCisJCWZyZXEgPSBhaGJfZnJlcSAvIGk7CisJCWlmIChmcmVxID4gbWF4X2ZyZXEpCisJ CQljb250aW51ZTsKKworCQkvKiBTZXQgdGhlIHRpbWluZyAqLworCQl0diA9IGNoaXAtPmN0bF92 YWxbQVNQRUVEX1NQSV9SRUFEXSB8IEFTUEVFRF9TUElfSENMS19ESVYoaSk7CisJCXdyaXRlbCh0 diwgY2hpcC0+Y3RsKTsKKwkJZGV2X2RiZyhhc3BpLT5kZXYsICJUcnlpbmcgSENMSy8lZCBbJTA4 eF0gLi4uIiwgaSwgdHYpOworCQlyYyA9IGRhdGEtPmNhbGlicmF0ZShjaGlwLCBpLCBnb2xkZW5f YnVmLCB0ZXN0X2J1Zik7CisJCWlmIChyYyA9PSAwKQorCQkJYmVzdF9kaXYgPSBpOworCX0KKwor CS8qIE5vdGhpbmcgZm91bmQgPyAqLworCWlmIChiZXN0X2RpdiA8IDApIHsKKwkJZGV2X3dhcm4o YXNwaS0+ZGV2LCAiTm8gZ29vZCBmcmVxdWVuY3ksIHVzaW5nIGR1bWIgc2xvdyIpOworCX0gZWxz ZSB7CisJCWRldl9kYmcoYXNwaS0+ZGV2LCAiRm91bmQgZ29vZCByZWFkIHRpbWluZ3MgYXQgSENM Sy8lZCIsIGJlc3RfZGl2KTsKKworCQkvKiBSZWNvcmQgdGhlIGZyZXEgKi8KKwkJZm9yIChpID0g MDsgaSA8IEFTUEVFRF9TUElfTUFYOyBpKyspCisJCQljaGlwLT5jdGxfdmFsW2ldID0gKGNoaXAt PmN0bF92YWxbaV0gJiBkYXRhLT5oY2xrX21hc2spIHwKKwkJCQlBU1BFRURfU1BJX0hDTEtfRElW KGJlc3RfZGl2KTsKKwl9CisKK25vX2NhbGliOgorCXdyaXRlbChjaGlwLT5jdGxfdmFsW0FTUEVF RF9TUElfUkVBRF0sIGNoaXAtPmN0bCk7CisJa2ZyZWUodGVzdF9idWYpOworCXJldHVybiAwOwor fQorCisjZGVmaW5lIFRJTUlOR19ERUxBWV9ESQkJQklUKDMpCisjZGVmaW5lIFRJTUlOR19ERUxB WV9IQ1lDTEVfTUFYCTUKKyNkZWZpbmUgVElNSU5HX1JFR19BU1QyNjAwKGNoaXApCQkJCVwKKwko KGNoaXApLT5hc3BpLT5yZWdzICsgKGNoaXApLT5hc3BpLT5kYXRhLT50aW1pbmcgKwlcCisJIChj aGlwKS0+Y3MgKiA0KQorCitzdGF0aWMgaW50IGFzcGVlZF9zcGlfYXN0MjYwMF9jYWxpYnJhdGUo c3RydWN0IGFzcGVlZF9zcGlfY2hpcCAqY2hpcCwgdTMyIGhkaXYsCisJCQkJCWNvbnN0IHU4ICpn b2xkZW5fYnVmLCB1OCAqdGVzdF9idWYpCit7CisJc3RydWN0IGFzcGVlZF9zcGkgKmFzcGkgPSBj aGlwLT5hc3BpOworCWludCBoY3ljbGU7CisJdTMyIHNoaWZ0ID0gKGhkaXYgLSAyKSA8PCAzOwor CXUzMiBtYXNrID0gfigweGZ1IDw8IHNoaWZ0KTsKKwl1MzIgZnJlYWRfdGltaW5nX3ZhbCA9IDA7 CisKKwlmb3IgKGhjeWNsZSA9IDA7IGhjeWNsZSA8PSBUSU1JTkdfREVMQVlfSENZQ0xFX01BWDsg aGN5Y2xlKyspIHsKKwkJaW50IGRlbGF5X25zOworCQlib29sIHBhc3MgPSBmYWxzZTsKKworCQlm cmVhZF90aW1pbmdfdmFsICY9IG1hc2s7CisJCWZyZWFkX3RpbWluZ192YWwgfD0gaGN5Y2xlIDw8 IHNoaWZ0OworCisJCS8qIG5vIERJIGlucHV0IGRlbGF5IGZpcnN0ICAqLworCQl3cml0ZWwoZnJl YWRfdGltaW5nX3ZhbCwgVElNSU5HX1JFR19BU1QyNjAwKGNoaXApKTsKKwkJcGFzcyA9IGFzcGVl ZF9zcGlfY2hlY2tfcmVhZHMoY2hpcCwgZ29sZGVuX2J1ZiwgdGVzdF9idWYpOworCQlkZXZfZGJn KGFzcGktPmRldiwKKwkJCSIgICogWyUwOHhdICVkIEhDTEsgZGVsYXksIERJIGRlbGF5IG5vbmUg OiAlcyIsCisJCQlmcmVhZF90aW1pbmdfdmFsLCBoY3ljbGUsIHBhc3MgPyAiUEFTUyIgOiAiRkFJ TCIpOworCQlpZiAocGFzcykKKwkJCXJldHVybiAwOworCisJCS8qIEFkZCBESSBpbnB1dCBkZWxh eXMgICovCisJCWZyZWFkX3RpbWluZ192YWwgJj0gbWFzazsKKwkJZnJlYWRfdGltaW5nX3ZhbCB8 PSAoVElNSU5HX0RFTEFZX0RJIHwgaGN5Y2xlKSA8PCBzaGlmdDsKKworCQlmb3IgKGRlbGF5X25z ID0gMDsgZGVsYXlfbnMgPCAweDEwOyBkZWxheV9ucysrKSB7CisJCQlmcmVhZF90aW1pbmdfdmFs ICY9IH4oMHhmIDw8ICg0ICsgc2hpZnQpKTsKKwkJCWZyZWFkX3RpbWluZ192YWwgfD0gZGVsYXlf bnMgPDwgKDQgKyBzaGlmdCk7CisKKwkJCXdyaXRlbChmcmVhZF90aW1pbmdfdmFsLCBUSU1JTkdf UkVHX0FTVDI2MDAoY2hpcCkpOworCQkJcGFzcyA9IGFzcGVlZF9zcGlfY2hlY2tfcmVhZHMoY2hp cCwgZ29sZGVuX2J1ZiwgdGVzdF9idWYpOworCQkJZGV2X2RiZyhhc3BpLT5kZXYsCisJCQkJIiAg KiBbJTA4eF0gJWQgSENMSyBkZWxheSwgREkgZGVsYXkgJWQuJWRucyA6ICVzIiwKKwkJCQlmcmVh ZF90aW1pbmdfdmFsLCBoY3ljbGUsIChkZWxheV9ucyArIDEpIC8gMiwKKwkJCQkoZGVsYXlfbnMg KyAxKSAmIDEgPyA1IDogNSwgcGFzcyA/ICJQQVNTIiA6ICJGQUlMIik7CisJCQkvKgorCQkJICog VE9ETzogVGhpcyBpcyBvcHRpbWlzdGljLiBXZSBzaG91bGQgbG9vaworCQkJICogZm9yIGEgd29y a2luZyBpbnRlcnZhbCBhbmQgc2F2ZSB0aGUgbWlkZGxlCisJCQkgKiB2YWx1ZSBpbiB0aGUgcmVh ZCB0aW1pbmcgcmVnaXN0ZXIuCisJCQkgKi8KKwkJCWlmIChwYXNzKQorCQkJCXJldHVybiAwOwor CQl9CisJfQorCisJLyogTm8gZ29vZCBzZXR0aW5nIGZvciB0aGlzIGZyZXF1ZW5jeSAqLworCXJl dHVybiAtMTsKK30KKwogLyoKICAqIFBsYXRmb3JtIGRlZmluaXRpb25zCiAgKi8KQEAgLTgyMiw2 ICsxMDc5LDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXNwZWVkX3NwaV9kYXRhIGFzdDI0MDBf Zm1jX2RhdGEgPSB7CiAJLmhhc3R5cGUgICAgICAgPSB0cnVlLAogCS53ZTAJICAgICAgID0gMTYs CiAJLmN0bDAJICAgICAgID0gQ0UwX0NUUkxfUkVHLAorCS50aW1pbmcJICAgICAgID0gQ0UwX1RJ TUlOR19DT01QRU5TQVRJT05fUkVHLAorCS5oY2xrX21hc2sgICAgID0gMHhmZmZmZjBmZiwKKwku aGRpdl9tYXggICAgICA9IDEsCisJLmNhbGlicmF0ZSAgICAgPSBhc3BlZWRfc3BpX2NhbGlicmF0 ZSwKIAkuc2VnbWVudF9zdGFydCA9IGFzcGVlZF9zcGlfc2VnbWVudF9zdGFydCwKIAkuc2VnbWVu dF9lbmQgICA9IGFzcGVlZF9zcGlfc2VnbWVudF9lbmQsCiAJLnNlZ21lbnRfcmVnICAgPSBhc3Bl ZWRfc3BpX3NlZ21lbnRfcmVnLApAQCAtODMyLDYgKzEwOTMsMTAgQEAgc3RhdGljIGNvbnN0IHN0 cnVjdCBhc3BlZWRfc3BpX2RhdGEgYXN0MjQwMF9zcGlfZGF0YSA9IHsKIAkuaGFzdHlwZSAgICAg ICA9IGZhbHNlLAogCS53ZTAJICAgICAgID0gMCwKIAkuY3RsMAkgICAgICAgPSAweDA0LAorCS50 aW1pbmcJICAgICAgID0gMHgxNCwKKwkuaGNsa19tYXNrICAgICA9IDB4ZmZmZmYwZmYsCisJLmhk aXZfbWF4ICAgICAgPSAxLAorCS5jYWxpYnJhdGUgICAgID0gYXNwZWVkX3NwaV9jYWxpYnJhdGUs CiAJLyogTm8gc2VnbWVudCByZWdpc3RlcnMgKi8KIH07CiAKQEAgLTg0MCw2ICsxMTA1LDEwIEBA IHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXNwZWVkX3NwaV9kYXRhIGFzdDI1MDBfZm1jX2RhdGEgPSB7 CiAJLmhhc3R5cGUgICAgICAgPSB0cnVlLAogCS53ZTAJICAgICAgID0gMTYsCiAJLmN0bDAJICAg ICAgID0gQ0UwX0NUUkxfUkVHLAorCS50aW1pbmcJICAgICAgID0gQ0UwX1RJTUlOR19DT01QRU5T QVRJT05fUkVHLAorCS5oY2xrX21hc2sgICAgID0gMHhmZmZmZjBmZiwKKwkuaGRpdl9tYXggICAg ICA9IDEsCisJLmNhbGlicmF0ZSAgICAgPSBhc3BlZWRfc3BpX2NhbGlicmF0ZSwKIAkuc2VnbWVu dF9zdGFydCA9IGFzcGVlZF9zcGlfc2VnbWVudF9zdGFydCwKIAkuc2VnbWVudF9lbmQgICA9IGFz cGVlZF9zcGlfc2VnbWVudF9lbmQsCiAJLnNlZ21lbnRfcmVnICAgPSBhc3BlZWRfc3BpX3NlZ21l bnRfcmVnLApAQCAtODUwLDYgKzExMTksMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhc3BlZWRf c3BpX2RhdGEgYXN0MjUwMF9zcGlfZGF0YSA9IHsKIAkuaGFzdHlwZSAgICAgICA9IGZhbHNlLAog CS53ZTAJICAgICAgID0gMTYsCiAJLmN0bDAJICAgICAgID0gQ0UwX0NUUkxfUkVHLAorCS50aW1p bmcJICAgICAgID0gQ0UwX1RJTUlOR19DT01QRU5TQVRJT05fUkVHLAorCS5oY2xrX21hc2sgICAg ID0gMHhmZmZmZjBmZiwKKwkuaGRpdl9tYXggICAgICA9IDEsCisJLmNhbGlicmF0ZSAgICAgPSBh c3BlZWRfc3BpX2NhbGlicmF0ZSwKIAkuc2VnbWVudF9zdGFydCA9IGFzcGVlZF9zcGlfc2VnbWVu dF9zdGFydCwKIAkuc2VnbWVudF9lbmQgICA9IGFzcGVlZF9zcGlfc2VnbWVudF9lbmQsCiAJLnNl Z21lbnRfcmVnICAgPSBhc3BlZWRfc3BpX3NlZ21lbnRfcmVnLApAQCAtODYxLDYgKzExMzQsMTAg QEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhc3BlZWRfc3BpX2RhdGEgYXN0MjYwMF9mbWNfZGF0YSA9 IHsKIAkubW9kZV9iaXRzICAgICA9IFNQSV9SWF9RVUFEIHwgU1BJX1JYX1FVQUQsCiAJLndlMAkg ICAgICAgPSAxNiwKIAkuY3RsMAkgICAgICAgPSBDRTBfQ1RSTF9SRUcsCisJLnRpbWluZwkgICAg ICAgPSBDRTBfVElNSU5HX0NPTVBFTlNBVElPTl9SRUcsCisJLmhjbGtfbWFzayAgICAgPSAweGYw ZmZmMGZmLAorCS5oZGl2X21heCAgICAgID0gMiwKKwkuY2FsaWJyYXRlICAgICA9IGFzcGVlZF9z cGlfYXN0MjYwMF9jYWxpYnJhdGUsCiAJLnNlZ21lbnRfc3RhcnQgPSBhc3BlZWRfc3BpX3NlZ21l bnRfYXN0MjYwMF9zdGFydCwKIAkuc2VnbWVudF9lbmQgICA9IGFzcGVlZF9zcGlfc2VnbWVudF9h c3QyNjAwX2VuZCwKIAkuc2VnbWVudF9yZWcgICA9IGFzcGVlZF9zcGlfc2VnbWVudF9hc3QyNjAw X3JlZywKQEAgLTg3Miw2ICsxMTQ5LDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXNwZWVkX3Nw aV9kYXRhIGFzdDI2MDBfc3BpX2RhdGEgPSB7CiAJLm1vZGVfYml0cyAgICAgPSBTUElfUlhfUVVB RCB8IFNQSV9SWF9RVUFELAogCS53ZTAJICAgICAgID0gMTYsCiAJLmN0bDAJICAgICAgID0gQ0Uw X0NUUkxfUkVHLAorCS50aW1pbmcJICAgICAgID0gQ0UwX1RJTUlOR19DT01QRU5TQVRJT05fUkVH LAorCS5oY2xrX21hc2sgICAgID0gMHhmMGZmZjBmZiwKKwkuaGRpdl9tYXggICAgICA9IDIsCisJ LmNhbGlicmF0ZSAgICAgPSBhc3BlZWRfc3BpX2FzdDI2MDBfY2FsaWJyYXRlLAogCS5zZWdtZW50 X3N0YXJ0ID0gYXNwZWVkX3NwaV9zZWdtZW50X2FzdDI2MDBfc3RhcnQsCiAJLnNlZ21lbnRfZW5k ICAgPSBhc3BlZWRfc3BpX3NlZ21lbnRfYXN0MjYwMF9lbmQsCiAJLnNlZ21lbnRfcmVnICAgPSBh c3BlZWRfc3BpX3NlZ21lbnRfYXN0MjYwMF9yZWcsCi0tIAoyLjM0LjEKCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxp bmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3Rz LmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==