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 811F6C433EF for ; Fri, 25 Mar 2022 10:28:36 +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=m95+Af4XVRy//qhM6txCZ7FIKqwpKdIZ5X5kP/zhmAw=; b=VSF7IqyVJYz6F+ nVHH/rvd2bsVBDDJI4RxEE8v6sv9O1SNKW2cuG9fceAQw1P55qxFBqU3mtPfF3fCybaA5F2Va60nC tsAo6uRpqtnrEqj+CHn1AY/1MNICV2bJwCJEHfwKm2u0QnQUNKtzQbNAr8Bom/uD0l4puQuZ2Y/Sl md3mAVULzIpf50z2RyZJW1sWS2ZiPBnokx29vQa2+FOOSBS1bqJ1ou9E0oMfYJ/jKO+QhuyCmy3ym bznnzMjWZ6m87+gxpT/KF02qifcE8Gv5PakIcUVooRlu64THcd+BQtk/YwsUVuVb+x5WD7YoBZ17a V8as5HbcMr897yg9g5jw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nXh9i-001iTr-96; Fri, 25 Mar 2022 10:26:55 +0000 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5] helo=mx0a-001b2d01.pphosted.com) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nXgt0-001cVk-1b; Fri, 25 Mar 2022 10:09:42 +0000 Received: from pps.filterd (m0098414.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.1.2/8.16.1.2) with SMTP id 22P7cbZ2030182; Fri, 25 Mar 2022 10:09:12 GMT Received: from pps.reinject (localhost [127.0.0.1]) by mx0b-001b2d01.pphosted.com with ESMTP id 3f0prmtf4d-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 25 Mar 2022 10:09:12 +0000 Received: from m0098414.ppops.net (m0098414.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.43/8.16.0.43) with SMTP id 22P9jvhZ026192; Fri, 25 Mar 2022 10:09:11 GMT Received: from ppma02fra.de.ibm.com (47.49.7a9f.ip4.static.sl-reverse.com [159.122.73.71]) by mx0b-001b2d01.pphosted.com with ESMTP id 3f0prmtf3k-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 25 Mar 2022 10:09:11 +0000 Received: from pps.filterd (ppma02fra.de.ibm.com [127.0.0.1]) by ppma02fra.de.ibm.com (8.16.1.2/8.16.1.2) with SMTP id 22P9xb16025181; Fri, 25 Mar 2022 10:09:09 GMT Received: from b06cxnps4075.portsmouth.uk.ibm.com (d06relay12.portsmouth.uk.ibm.com [9.149.109.197]) by ppma02fra.de.ibm.com with ESMTP id 3ew6t8u13u-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 25 Mar 2022 10:09:09 +0000 Received: from d06av21.portsmouth.uk.ibm.com (d06av21.portsmouth.uk.ibm.com [9.149.105.232]) by b06cxnps4075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 22PA97Z622544816 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 25 Mar 2022 10:09:07 GMT Received: from d06av21.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id DC10752052; Fri, 25 Mar 2022 10:09:06 +0000 (GMT) Received: from smtp.tlslab.ibm.com (unknown [9.101.4.1]) by d06av21.portsmouth.uk.ibm.com (Postfix) with SMTP id 362F652050; Fri, 25 Mar 2022 10:09:06 +0000 (GMT) Received: from yukon.ibmuc.com (unknown [9.171.95.248]) by smtp.tlslab.ibm.com (Postfix) with ESMTP id A72CC220121; Fri, 25 Mar 2022 11:09:04 +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?= , Tao Ren Subject: [PATCH v4 08/11] spi: aspeed: Calibrate read timings Date: Fri, 25 Mar 2022 11:08:46 +0100 Message-Id: <20220325100849.2019209-9-clg@kaod.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220325100849.2019209-1-clg@kaod.org> References: <20220325100849.2019209-1-clg@kaod.org> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: 7cGdesaM-QHzlE9TF1P1VVcUP25aDIq2 X-Proofpoint-GUID: yKkRBYpTcR8tnKycagmVSrc6eS3FjEp8 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.850,Hydra:6.0.425,FMLib:17.11.64.514 definitions=2022-03-25_02,2022-03-24_01,2022-02-23_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 mlxscore=0 bulkscore=0 malwarescore=0 spamscore=0 adultscore=0 suspectscore=0 mlxlogscore=999 clxscore=1034 phishscore=0 priorityscore=1501 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2202240000 definitions=main-2203250057 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220325_030938_363148_B2CEC6D1 X-CRM114-Status: GOOD ( 31.12 ) 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 IGZyZXF1ZW5jeSBiZWluZyB1c2VkLiBUaGUgQVNUMjYwMCBTb0MgaGFzIG9uZSBvZiB0aGVzZQpy ZWdpc3RlcnMgcGVyIGRldmljZS4gT24gdGhlIEFTVDI1MDAgYW5kIEFTVDI0MDAgU29DcywgdGhl IHRpbWluZwpyZWdpc3RlciBpcyBzaGFyZWQgYnkgYWxsIGRldmljZXMgd2hpY2ggaXMgcHJvYmxl bWF0aWMgdG8gZ2V0IGdvb2QKcmVzdWx0cyBvdGhlciB0aGFuIGZvciBvbmUgZGV2aWNlLgoKVGhl IGFsZ29yaXRobSBmaXJzdCByZWFkcyBhIGdvbGRlbiBidWZmZXIgYXQgbG93IHNwZWVkIGFuZCB0 aGVuIHBlcmZvcm1zCnJlYWRzIHdpdGggZGlmZmVyZW50IGNsb2NrcyBhbmQgZGVsYXkgY3ljbGUg c2V0dGluZ3MgdG8gZmluZCBhIGJyZWFraW5nCnBvaW50LiBUaGlzIHNlbGVjdHMgYSBkZWZhdWx0 IGdvb2QgZnJlcXVlbmN5IGZvciB0aGUgQ0V4IGNvbnRyb2wgcmVnaXN0ZXIuClRoZSBjdXJyZW50 IHNldHRpbmdzIGFyZSBhIGJpdCBvcHRpbWlzdGljIGFzIHdlIHBpY2sgdGhlIGZpcnN0IGRlbGF5 IGdpdmluZwpnb29kIHJlc3VsdHMuIEEgc2FmZXIgYXBwcm9hY2ggd291bGQgYmUgdG8gZGV0ZXJt aW5lIGFuIGludGVydmFsIGFuZApjaG9vc2UgdGhlIG1pZGRsZSB2YWx1ZS4KCkNhbGlicmF0aW9u IGlzIHBlcmZvcm1lZCB3aGVuIHRoZSBkaXJlY3QgbWFwcGluZyBmb3IgcmVhZHMgaXMgY3JlYXRl ZC4KU2luY2UgdGhlIHVuZGVybHlpbmcgc3BpLW5vciBvYmplY3QgbmVlZHMgdG8gYmUgaW5pdGlh bGl6ZWQgdG8gY3JlYXRlCnRoZSBzcGlfbWVtIG9wZXJhdGlvbiBmb3IgZGlyZWN0IG1hcHBpbmcs IHdlIHNob3VsZCBiZSBmaW5lLiBIYXZpbmcgYQpzcGVjaWZpYyBBUEkgd291bGQgY2xhcmlmeSB0 aGUgcmVxdWlyZW1lbnRzIHRob3VnaC4KCkNjOiBQcmF0eXVzaCBZYWRhdiA8cC55YWRhdkB0aS5j b20+ClJldmlld2VkLWJ5OiBKb2VsIFN0YW5sZXkgPGpvZWxAam1zLmlkLmF1PgpUZXN0ZWQtYnk6 IEpvZWwgU3RhbmxleSA8am9lbEBqbXMuaWQuYXU+ClRlc3RlZC1ieTogVGFvIFJlbiA8cmVudGFv LmJ1cHRAZ21haWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBDw6lkcmljIExlIEdvYXRlciA8Y2xnQGth b2Qub3JnPgotLS0KIGRyaXZlcnMvc3BpL3NwaS1hc3BlZWQtc21jLmMgfCAyODEgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCAyODEgaW5zZXJ0aW9u cygrKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1hc3BlZWQtc21jLmMgYi9kcml2ZXJz L3NwaS9zcGktYXNwZWVkLXNtYy5jCmluZGV4IDdmMzA2ZGE3YzQ0ZS4uNjYwNDUxNjY3YTM5IDEw MDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktYXNwZWVkLXNtYy5jCisrKyBiL2RyaXZlcnMvc3Bp L3NwaS1hc3BlZWQtc21jLmMKQEAgLTMzLDYgKzMzLDggQEAKICNkZWZpbmUgICBDVFJMX0lPX0FE RFJFU1NfNEIJCUJJVCgxMykJLyogQVNUMjQwMCBTUEkgb25seSAqLwogI2RlZmluZSAgIENUUkxf SU9fRFVNTVlfU0VUKGR1bW15KQkJCQkJXAogCSgoKCgoZHVtbXkpID4+IDIpICYgMHgxKSA8PCAx NCkgfCAoKChkdW1teSkgJiAweDMpIDw8IDYpKQorI2RlZmluZSAgIENUUkxfRlJFUV9TRUxfU0hJ RlQJCTgKKyNkZWZpbmUgICBDVFJMX0ZSRVFfU0VMX01BU0sJCUdFTk1BU0soMTEsIENUUkxfRlJF UV9TRUxfU0hJRlQpCiAjZGVmaW5lICAgQ1RSTF9DRV9TVE9QX0FDVElWRQkJQklUKDIpCiAjZGVm aW5lICAgQ1RSTF9JT19NT0RFX0NNRF9NQVNLCQlHRU5NQVNLKDEsIDApCiAjZGVmaW5lICAgQ1RS TF9JT19NT0RFX05PUk1BTAkJMHgwCkBAIC00NSw2ICs0Nyw5IEBACiAvKiBDRXggQWRkcmVzcyBE ZWNvZGluZyBSYW5nZSBSZWdpc3RlciAqLwogI2RlZmluZSBDRTBfU0VHTUVOVF9BRERSX1JFRwkJ MHgzMAogCisvKiBDRXggUmVhZCB0aW1pbmcgY29tcGVuc2F0aW9uIHJlZ2lzdGVyICovCisjZGVm aW5lIENFMF9USU1JTkdfQ09NUEVOU0FUSU9OX1JFRwkweDk0CisKIGVudW0gYXNwZWVkX3NwaV9j dGxfcmVnX3ZhbHVlIHsKIAlBU1BFRURfU1BJX0JBU0UsCiAJQVNQRUVEX1NQSV9SRUFELApAQCAt NzAsMTAgKzc1LDE1IEBAIHN0cnVjdCBhc3BlZWRfc3BpX2RhdGEgewogCWJvb2wJaGFzdHlwZTsK IAl1MzIJbW9kZV9iaXRzOwogCXUzMgl3ZTA7CisJdTMyCXRpbWluZzsKKwl1MzIJaGNsa19tYXNr OworCXUzMgloZGl2X21heDsKIAogCXUzMiAoKnNlZ21lbnRfc3RhcnQpKHN0cnVjdCBhc3BlZWRf c3BpICphc3BpLCB1MzIgcmVnKTsKIAl1MzIgKCpzZWdtZW50X2VuZCkoc3RydWN0IGFzcGVlZF9z cGkgKmFzcGksIHUzMiByZWcpOwogCXUzMiAoKnNlZ21lbnRfcmVnKShzdHJ1Y3QgYXNwZWVkX3Nw aSAqYXNwaSwgdTMyIHN0YXJ0LCB1MzIgZW5kKTsKKwlpbnQgKCpjYWxpYnJhdGUpKHN0cnVjdCBh c3BlZWRfc3BpX2NoaXAgKmNoaXAsIHUzMiBoZGl2LAorCQkJIGNvbnN0IHU4ICpnb2xkZW5fYnVm LCB1OCAqdGVzdF9idWYpOwogfTsKIAogI2RlZmluZSBBU1BFRURfU1BJX01BWF9OVU1fQ1MJNQpA QCAtNTE3LDYgKzUyNyw4IEBAIHN0YXRpYyBpbnQgYXNwZWVkX3NwaV9jaGlwX2FkanVzdF93aW5k b3coc3RydWN0IGFzcGVlZF9zcGlfY2hpcCAqY2hpcCwKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGlj IGludCBhc3BlZWRfc3BpX2RvX2NhbGlicmF0aW9uKHN0cnVjdCBhc3BlZWRfc3BpX2NoaXAgKmNo aXApOworCiBzdGF0aWMgaW50IGFzcGVlZF9zcGlfZGlybWFwX2NyZWF0ZShzdHJ1Y3Qgc3BpX21l bV9kaXJtYXBfZGVzYyAqZGVzYykKIHsKIAlzdHJ1Y3QgYXNwZWVkX3NwaSAqYXNwaSA9IHNwaV9j b250cm9sbGVyX2dldF9kZXZkYXRhKGRlc2MtPm1lbS0+c3BpLT5tYXN0ZXIpOwpAQCAtNTY1LDYg KzU3Nyw4IEBAIHN0YXRpYyBpbnQgYXNwZWVkX3NwaV9kaXJtYXBfY3JlYXRlKHN0cnVjdCBzcGlf bWVtX2Rpcm1hcF9kZXNjICpkZXNjKQogCWNoaXAtPmN0bF92YWxbQVNQRUVEX1NQSV9SRUFEXSA9 IGN0bF92YWw7CiAJd3JpdGVsKGNoaXAtPmN0bF92YWxbQVNQRUVEX1NQSV9SRUFEXSwgY2hpcC0+ Y3RsKTsKIAorCXJldCA9IGFzcGVlZF9zcGlfZG9fY2FsaWJyYXRpb24oY2hpcCk7CisKIAlkZXZf aW5mbyhhc3BpLT5kZXYsICJDRSVkIHJlYWQgYnVzd2lkdGg6JWQgWzB4JTA4eF1cbiIsCiAJCSBj aGlwLT5jcywgb3AtPmRhdGEuYnVzd2lkdGgsIGNoaXAtPmN0bF92YWxbQVNQRUVEX1NQSV9SRUFE XSk7CiAKQEAgLTgxMiw2ICs4MjYsMjQ5IEBAIHN0YXRpYyB1MzIgYXNwZWVkX3NwaV9zZWdtZW50 X2FzdDI2MDBfcmVnKHN0cnVjdCBhc3BlZWRfc3BpICphc3BpLAogCQkoKGVuZCAtIDEpICYgQVNU MjYwMF9TRUdfQUREUl9NQVNLKTsKIH0KIAorLyoKKyAqIFJlYWQgdGltaW5nIGNvbXBlbnNhdGlv biBzZXF1ZW5jZXMKKyAqLworCisjZGVmaW5lIENBTElCUkFURV9CVUZfU0laRSBTWl8xNksKKwor c3RhdGljIGJvb2wgYXNwZWVkX3NwaV9jaGVja19yZWFkcyhzdHJ1Y3QgYXNwZWVkX3NwaV9jaGlw ICpjaGlwLAorCQkJCSAgIGNvbnN0IHU4ICpnb2xkZW5fYnVmLCB1OCAqdGVzdF9idWYpCit7CisJ aW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQltZW1jcHlfZnJvbWlvKHRl c3RfYnVmLCBjaGlwLT5haGJfYmFzZSwgQ0FMSUJSQVRFX0JVRl9TSVpFKTsKKwkJaWYgKG1lbWNt cCh0ZXN0X2J1ZiwgZ29sZGVuX2J1ZiwgQ0FMSUJSQVRFX0JVRl9TSVpFKSAhPSAwKSB7CisjaWYg ZGVmaW5lZChWRVJCT1NFX0RFQlVHKQorCQkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoREVWSUNFX05B TUUgIiAgZmFpbDogIiwgRFVNUF9QUkVGSVhfTk9ORSwKKwkJCQkJICAgICB0ZXN0X2J1ZiwgMHgx MDApOworI2VuZGlmCisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisJcmV0dXJuIHRydWU7Cit9 CisKKyNkZWZpbmUgRlJFQURfVFBBU1MoaSkJKCgoaSkgLyAyKSB8ICgoKGkpICYgMSkgPyAwIDog OCkpCisKKy8qCisgKiBUaGUgdGltaW5nIHJlZ2lzdGVyIGlzIHNoYXJlZCBieSBhbGwgZGV2aWNl cy4gT25seSB1cGRhdGUgZm9yIENFMC4KKyAqLworc3RhdGljIGludCBhc3BlZWRfc3BpX2NhbGli cmF0ZShzdHJ1Y3QgYXNwZWVkX3NwaV9jaGlwICpjaGlwLCB1MzIgaGRpdiwKKwkJCQljb25zdCB1 OCAqZ29sZGVuX2J1ZiwgdTggKnRlc3RfYnVmKQoreworCXN0cnVjdCBhc3BlZWRfc3BpICphc3Bp ID0gY2hpcC0+YXNwaTsKKwljb25zdCBzdHJ1Y3QgYXNwZWVkX3NwaV9kYXRhICpkYXRhID0gYXNw aS0+ZGF0YTsKKwlpbnQgaTsKKwlpbnQgZ29vZF9wYXNzID0gLTEsIHBhc3NfY291bnQgPSAwOwor CXUzMiBzaGlmdCA9IChoZGl2IC0gMSkgPDwgMjsKKwl1MzIgbWFzayA9IH4oMHhmdSA8PCBzaGlm dCk7CisJdTMyIGZyZWFkX3RpbWluZ192YWwgPSAwOworCisJLyogVHJ5IEhDTEsgZGVsYXkgMC4u NSwgZWFjaCBvbmUgd2l0aC93aXRob3V0IGRlbGF5IGFuZCBsb29rIGZvciBhCisJICogZ29vZCBw YWlyLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7CisJCWJvb2wgcGFzczsKKwor CQlpZiAoY2hpcC0+Y3MgPT0gMCkgeworCQkJZnJlYWRfdGltaW5nX3ZhbCAmPSBtYXNrOworCQkJ ZnJlYWRfdGltaW5nX3ZhbCB8PSBGUkVBRF9UUEFTUyhpKSA8PCBzaGlmdDsKKwkJCXdyaXRlbChm cmVhZF90aW1pbmdfdmFsLCBhc3BpLT5yZWdzICsgZGF0YS0+dGltaW5nKTsKKwkJfQorCQlwYXNz ID0gYXNwZWVkX3NwaV9jaGVja19yZWFkcyhjaGlwLCBnb2xkZW5fYnVmLCB0ZXN0X2J1Zik7CisJ CWRldl9kYmcoYXNwaS0+ZGV2LAorCQkJIiAgKiBbJTA4eF0gJWQgSENMSyBkZWxheSwgJWRucyBE SSBkZWxheSA6ICVzIiwKKwkJCWZyZWFkX3RpbWluZ192YWwsIGkgLyAyLCAoaSAmIDEpID8gMCA6 IDQsCisJCQlwYXNzID8gIlBBU1MiIDogIkZBSUwiKTsKKwkJaWYgKHBhc3MpIHsKKwkJCXBhc3Nf Y291bnQrKzsKKwkJCWlmIChwYXNzX2NvdW50ID09IDMpIHsKKwkJCQlnb29kX3Bhc3MgPSBpIC0g MTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXBhc3NfY291bnQgPSAwOworCQl9 CisJfQorCisJLyogTm8gZ29vZCBzZXR0aW5nIGZvciB0aGlzIGZyZXF1ZW5jeSAqLworCWlmIChn b29kX3Bhc3MgPCAwKQorCQlyZXR1cm4gLTE7CisKKwkvKiBXZSBoYXZlIGF0IGxlYXN0IG9uZSBw YXNzIG9mIG1hcmdpbiwgbGV0J3MgdXNlIGZpcnN0IHBhc3MgKi8KKwlpZiAoY2hpcC0+Y3MgPT0g MCkgeworCQlmcmVhZF90aW1pbmdfdmFsICY9IG1hc2s7CisJCWZyZWFkX3RpbWluZ192YWwgfD0g RlJFQURfVFBBU1MoZ29vZF9wYXNzKSA8PCBzaGlmdDsKKwkJd3JpdGVsKGZyZWFkX3RpbWluZ192 YWwsIGFzcGktPnJlZ3MgKyBkYXRhLT50aW1pbmcpOworCX0KKwlkZXZfZGJnKGFzcGktPmRldiwg IiAqIC0+IGdvb2QgaXMgcGFzcyAlZCBbMHglMDh4XSIsCisJCWdvb2RfcGFzcywgZnJlYWRfdGlt aW5nX3ZhbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBib29sIGFzcGVlZF9zcGlfY2hlY2tf Y2FsaWJfZGF0YShjb25zdCB1OCAqdGVzdF9idWYsIHUzMiBzaXplKQoreworCWNvbnN0IHUzMiAq dGIzMiA9IChjb25zdCB1MzIgKil0ZXN0X2J1ZjsKKwl1MzIgaSwgY250ID0gMDsKKworCS8qIFdl IGNoZWNrIGlmIHdlIGhhdmUgZW5vdWdoIHdvcmRzIHRoYXQgYXJlIG5laXRoZXIgYWxsIDAKKwkg KiBub3IgYWxsIDEncyBzbyB0aGUgY2FsaWJyYXRpb24gY2FuIGJlIGNvbnNpZGVyZWQgdmFsaWQu CisJICoKKwkgKiBJIHVzZSBhbiBhcmJpdHJhcnkgdGhyZXNob2xkIGZvciBub3cgb2YgNjQKKwkg Ki8KKwlzaXplID4+PSAyOworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJaWYgKHRi MzJbaV0gIT0gMCAmJiB0YjMyW2ldICE9IDB4ZmZmZmZmZmYpCisJCQljbnQrKzsKKwl9CisJcmV0 dXJuIGNudCA+PSA2NDsKK30KKworc3RhdGljIGNvbnN0IHUzMiBhc3BlZWRfc3BpX2hjbGtfZGl2 c1tdID0geworCTB4ZiwgLyogSENMSyAqLworCTB4NywgLyogSENMSy8yICovCisJMHhlLCAvKiBI Q0xLLzMgKi8KKwkweDYsIC8qIEhDTEsvNCAqLworCTB4ZCwgLyogSENMSy81ICovCit9OworCisj ZGVmaW5lIEFTUEVFRF9TUElfSENMS19ESVYoaSkgXAorCShhc3BlZWRfc3BpX2hjbGtfZGl2c1so aSkgLSAxXSA8PCBDVFJMX0ZSRVFfU0VMX1NISUZUKQorCitzdGF0aWMgaW50IGFzcGVlZF9zcGlf ZG9fY2FsaWJyYXRpb24oc3RydWN0IGFzcGVlZF9zcGlfY2hpcCAqY2hpcCkKK3sKKwlzdHJ1Y3Qg YXNwZWVkX3NwaSAqYXNwaSA9IGNoaXAtPmFzcGk7CisJY29uc3Qgc3RydWN0IGFzcGVlZF9zcGlf ZGF0YSAqZGF0YSA9IGFzcGktPmRhdGE7CisJdTMyIGFoYl9mcmVxID0gYXNwaS0+Y2xrX2ZyZXE7 CisJdTMyIG1heF9mcmVxID0gY2hpcC0+Y2xrX2ZyZXE7CisJdTMyIGN0bF92YWw7CisJdTggKmdv bGRlbl9idWYgPSBOVUxMOworCXU4ICp0ZXN0X2J1ZiA9IE5VTEw7CisJaW50IGksIHJjLCBiZXN0 X2RpdiA9IC0xOworCisJZGV2X2RiZyhhc3BpLT5kZXYsICJjYWxjdWxhdGUgdGltaW5nIGNvbXBl bnNhdGlvbiAtIEFIQiBmcmVxOiAlZCBNSHoiLAorCQlhaGJfZnJlcSAvIDEwMDAwMDApOworCisJ LyoKKwkgKiB1c2UgdGhlIHJlbGF0ZWQgbG93IGZyZXF1ZW5jeSB0byBnZXQgY2hlY2sgY2FsaWJy YXRpb24gZGF0YQorCSAqIGFuZCBnZXQgZ29sZGVuIGRhdGEuCisJICovCisJY3RsX3ZhbCA9IGNo aXAtPmN0bF92YWxbQVNQRUVEX1NQSV9SRUFEXSAmIGRhdGEtPmhjbGtfbWFzazsKKwl3cml0ZWwo Y3RsX3ZhbCwgY2hpcC0+Y3RsKTsKKworCXRlc3RfYnVmID0ga3phbGxvYyhDQUxJQlJBVEVfQlVG X1NJWkUgKiAyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRlc3RfYnVmKQorCQlyZXR1cm4gLUVOT01F TTsKKworCWdvbGRlbl9idWYgPSB0ZXN0X2J1ZiArIENBTElCUkFURV9CVUZfU0laRTsKKworCW1l bWNweV9mcm9taW8oZ29sZGVuX2J1ZiwgY2hpcC0+YWhiX2Jhc2UsIENBTElCUkFURV9CVUZfU0la RSk7CisJaWYgKCFhc3BlZWRfc3BpX2NoZWNrX2NhbGliX2RhdGEoZ29sZGVuX2J1ZiwgQ0FMSUJS QVRFX0JVRl9TSVpFKSkgeworCQlkZXZfaW5mbyhhc3BpLT5kZXYsICJDYWxpYnJhdGlvbiBhcmVh IHRvbyB1bmlmb3JtLCB1c2luZyBsb3cgc3BlZWQiKTsKKwkJZ290byBub19jYWxpYjsKKwl9CisK KyNpZiBkZWZpbmVkKFZFUkJPU0VfREVCVUcpCisJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoREVWSUNF X05BTUUgIiAgZ29vZDogIiwgRFVNUF9QUkVGSVhfTk9ORSwKKwkJCSAgICAgZ29sZGVuX2J1Ziwg MHgxMDApOworI2VuZGlmCisKKwkvKiBOb3cgd2UgaXRlcmF0ZSB0aGUgSENMSyBkaXZpZGVycyB1 bnRpbCB3ZSBmaW5kIG91ciBicmVha2luZyBwb2ludCAqLworCWZvciAoaSA9IEFSUkFZX1NJWkUo YXNwZWVkX3NwaV9oY2xrX2RpdnMpOyBpID4gZGF0YS0+aGRpdl9tYXggLSAxOyBpLS0pIHsKKwkJ dTMyIHR2LCBmcmVxOworCisJCWZyZXEgPSBhaGJfZnJlcSAvIGk7CisJCWlmIChmcmVxID4gbWF4 X2ZyZXEpCisJCQljb250aW51ZTsKKworCQkvKiBTZXQgdGhlIHRpbWluZyAqLworCQl0diA9IGNo aXAtPmN0bF92YWxbQVNQRUVEX1NQSV9SRUFEXSB8IEFTUEVFRF9TUElfSENMS19ESVYoaSk7CisJ CXdyaXRlbCh0diwgY2hpcC0+Y3RsKTsKKwkJZGV2X2RiZyhhc3BpLT5kZXYsICJUcnlpbmcgSENM Sy8lZCBbJTA4eF0gLi4uIiwgaSwgdHYpOworCQlyYyA9IGRhdGEtPmNhbGlicmF0ZShjaGlwLCBp LCBnb2xkZW5fYnVmLCB0ZXN0X2J1Zik7CisJCWlmIChyYyA9PSAwKQorCQkJYmVzdF9kaXYgPSBp OworCX0KKworCS8qIE5vdGhpbmcgZm91bmQgPyAqLworCWlmIChiZXN0X2RpdiA8IDApIHsKKwkJ ZGV2X3dhcm4oYXNwaS0+ZGV2LCAiTm8gZ29vZCBmcmVxdWVuY3ksIHVzaW5nIGR1bWIgc2xvdyIp OworCX0gZWxzZSB7CisJCWRldl9kYmcoYXNwaS0+ZGV2LCAiRm91bmQgZ29vZCByZWFkIHRpbWlu Z3MgYXQgSENMSy8lZCIsIGJlc3RfZGl2KTsKKworCQkvKiBSZWNvcmQgdGhlIGZyZXEgKi8KKwkJ Zm9yIChpID0gMDsgaSA8IEFTUEVFRF9TUElfTUFYOyBpKyspCisJCQljaGlwLT5jdGxfdmFsW2ld ID0gKGNoaXAtPmN0bF92YWxbaV0gJiBkYXRhLT5oY2xrX21hc2spIHwKKwkJCQlBU1BFRURfU1BJ X0hDTEtfRElWKGJlc3RfZGl2KTsKKwl9CisKK25vX2NhbGliOgorCXdyaXRlbChjaGlwLT5jdGxf dmFsW0FTUEVFRF9TUElfUkVBRF0sIGNoaXAtPmN0bCk7CisJa2ZyZWUodGVzdF9idWYpOworCXJl dHVybiAwOworfQorCisjZGVmaW5lIFRJTUlOR19ERUxBWV9ESQkJQklUKDMpCisjZGVmaW5lIFRJ TUlOR19ERUxBWV9IQ1lDTEVfTUFYCTUKKyNkZWZpbmUgVElNSU5HX1JFR19BU1QyNjAwKGNoaXAp CQkJCVwKKwkoKGNoaXApLT5hc3BpLT5yZWdzICsgKGNoaXApLT5hc3BpLT5kYXRhLT50aW1pbmcg KwlcCisJIChjaGlwKS0+Y3MgKiA0KQorCitzdGF0aWMgaW50IGFzcGVlZF9zcGlfYXN0MjYwMF9j YWxpYnJhdGUoc3RydWN0IGFzcGVlZF9zcGlfY2hpcCAqY2hpcCwgdTMyIGhkaXYsCisJCQkJCWNv bnN0IHU4ICpnb2xkZW5fYnVmLCB1OCAqdGVzdF9idWYpCit7CisJc3RydWN0IGFzcGVlZF9zcGkg KmFzcGkgPSBjaGlwLT5hc3BpOworCWludCBoY3ljbGU7CisJdTMyIHNoaWZ0ID0gKGhkaXYgLSAy KSA8PCAzOworCXUzMiBtYXNrID0gfigweGZ1IDw8IHNoaWZ0KTsKKwl1MzIgZnJlYWRfdGltaW5n X3ZhbCA9IDA7CisKKwlmb3IgKGhjeWNsZSA9IDA7IGhjeWNsZSA8PSBUSU1JTkdfREVMQVlfSENZ Q0xFX01BWDsgaGN5Y2xlKyspIHsKKwkJaW50IGRlbGF5X25zOworCQlib29sIHBhc3MgPSBmYWxz ZTsKKworCQlmcmVhZF90aW1pbmdfdmFsICY9IG1hc2s7CisJCWZyZWFkX3RpbWluZ192YWwgfD0g aGN5Y2xlIDw8IHNoaWZ0OworCisJCS8qIG5vIERJIGlucHV0IGRlbGF5IGZpcnN0ICAqLworCQl3 cml0ZWwoZnJlYWRfdGltaW5nX3ZhbCwgVElNSU5HX1JFR19BU1QyNjAwKGNoaXApKTsKKwkJcGFz cyA9IGFzcGVlZF9zcGlfY2hlY2tfcmVhZHMoY2hpcCwgZ29sZGVuX2J1ZiwgdGVzdF9idWYpOwor CQlkZXZfZGJnKGFzcGktPmRldiwKKwkJCSIgICogWyUwOHhdICVkIEhDTEsgZGVsYXksIERJIGRl bGF5IG5vbmUgOiAlcyIsCisJCQlmcmVhZF90aW1pbmdfdmFsLCBoY3ljbGUsIHBhc3MgPyAiUEFT UyIgOiAiRkFJTCIpOworCQlpZiAocGFzcykKKwkJCXJldHVybiAwOworCisJCS8qIEFkZCBESSBp bnB1dCBkZWxheXMgICovCisJCWZyZWFkX3RpbWluZ192YWwgJj0gbWFzazsKKwkJZnJlYWRfdGlt aW5nX3ZhbCB8PSAoVElNSU5HX0RFTEFZX0RJIHwgaGN5Y2xlKSA8PCBzaGlmdDsKKworCQlmb3Ig KGRlbGF5X25zID0gMDsgZGVsYXlfbnMgPCAweDEwOyBkZWxheV9ucysrKSB7CisJCQlmcmVhZF90 aW1pbmdfdmFsICY9IH4oMHhmIDw8ICg0ICsgc2hpZnQpKTsKKwkJCWZyZWFkX3RpbWluZ192YWwg fD0gZGVsYXlfbnMgPDwgKDQgKyBzaGlmdCk7CisKKwkJCXdyaXRlbChmcmVhZF90aW1pbmdfdmFs LCBUSU1JTkdfUkVHX0FTVDI2MDAoY2hpcCkpOworCQkJcGFzcyA9IGFzcGVlZF9zcGlfY2hlY2tf cmVhZHMoY2hpcCwgZ29sZGVuX2J1ZiwgdGVzdF9idWYpOworCQkJZGV2X2RiZyhhc3BpLT5kZXYs CisJCQkJIiAgKiBbJTA4eF0gJWQgSENMSyBkZWxheSwgREkgZGVsYXkgJWQuJWRucyA6ICVzIiwK KwkJCQlmcmVhZF90aW1pbmdfdmFsLCBoY3ljbGUsIChkZWxheV9ucyArIDEpIC8gMiwKKwkJCQko ZGVsYXlfbnMgKyAxKSAmIDEgPyA1IDogNSwgcGFzcyA/ICJQQVNTIiA6ICJGQUlMIik7CisJCQkv KgorCQkJICogVE9ETzogVGhpcyBpcyBvcHRpbWlzdGljLiBXZSBzaG91bGQgbG9vaworCQkJICog Zm9yIGEgd29ya2luZyBpbnRlcnZhbCBhbmQgc2F2ZSB0aGUgbWlkZGxlCisJCQkgKiB2YWx1ZSBp biB0aGUgcmVhZCB0aW1pbmcgcmVnaXN0ZXIuCisJCQkgKi8KKwkJCWlmIChwYXNzKQorCQkJCXJl dHVybiAwOworCQl9CisJfQorCisJLyogTm8gZ29vZCBzZXR0aW5nIGZvciB0aGlzIGZyZXF1ZW5j eSAqLworCXJldHVybiAtMTsKK30KKwogLyoKICAqIFBsYXRmb3JtIGRlZmluaXRpb25zCiAgKi8K QEAgLTgyMCw2ICsxMDc3LDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXNwZWVkX3NwaV9kYXRh IGFzdDI0MDBfZm1jX2RhdGEgPSB7CiAJLmhhc3R5cGUgICAgICAgPSB0cnVlLAogCS53ZTAJICAg ICAgID0gMTYsCiAJLmN0bDAJICAgICAgID0gQ0UwX0NUUkxfUkVHLAorCS50aW1pbmcJICAgICAg ID0gQ0UwX1RJTUlOR19DT01QRU5TQVRJT05fUkVHLAorCS5oY2xrX21hc2sgICAgID0gMHhmZmZm ZjBmZiwKKwkuaGRpdl9tYXggICAgICA9IDEsCisJLmNhbGlicmF0ZSAgICAgPSBhc3BlZWRfc3Bp X2NhbGlicmF0ZSwKIAkuc2VnbWVudF9zdGFydCA9IGFzcGVlZF9zcGlfc2VnbWVudF9zdGFydCwK IAkuc2VnbWVudF9lbmQgICA9IGFzcGVlZF9zcGlfc2VnbWVudF9lbmQsCiAJLnNlZ21lbnRfcmVn ICAgPSBhc3BlZWRfc3BpX3NlZ21lbnRfcmVnLApAQCAtODMwLDYgKzEwOTEsMTAgQEAgc3RhdGlj IGNvbnN0IHN0cnVjdCBhc3BlZWRfc3BpX2RhdGEgYXN0MjQwMF9zcGlfZGF0YSA9IHsKIAkuaGFz dHlwZSAgICAgICA9IGZhbHNlLAogCS53ZTAJICAgICAgID0gMCwKIAkuY3RsMAkgICAgICAgPSAw eDA0LAorCS50aW1pbmcJICAgICAgID0gMHgxNCwKKwkuaGNsa19tYXNrICAgICA9IDB4ZmZmZmYw ZmYsCisJLmhkaXZfbWF4ICAgICAgPSAxLAorCS5jYWxpYnJhdGUgICAgID0gYXNwZWVkX3NwaV9j YWxpYnJhdGUsCiAJLyogTm8gc2VnbWVudCByZWdpc3RlcnMgKi8KIH07CiAKQEAgLTgzOCw2ICsx MTAzLDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXNwZWVkX3NwaV9kYXRhIGFzdDI1MDBfZm1j X2RhdGEgPSB7CiAJLmhhc3R5cGUgICAgICAgPSB0cnVlLAogCS53ZTAJICAgICAgID0gMTYsCiAJ LmN0bDAJICAgICAgID0gQ0UwX0NUUkxfUkVHLAorCS50aW1pbmcJICAgICAgID0gQ0UwX1RJTUlO R19DT01QRU5TQVRJT05fUkVHLAorCS5oY2xrX21hc2sgICAgID0gMHhmZmZmZjBmZiwKKwkuaGRp dl9tYXggICAgICA9IDEsCisJLmNhbGlicmF0ZSAgICAgPSBhc3BlZWRfc3BpX2NhbGlicmF0ZSwK IAkuc2VnbWVudF9zdGFydCA9IGFzcGVlZF9zcGlfc2VnbWVudF9zdGFydCwKIAkuc2VnbWVudF9l bmQgICA9IGFzcGVlZF9zcGlfc2VnbWVudF9lbmQsCiAJLnNlZ21lbnRfcmVnICAgPSBhc3BlZWRf c3BpX3NlZ21lbnRfcmVnLApAQCAtODQ4LDYgKzExMTcsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVj dCBhc3BlZWRfc3BpX2RhdGEgYXN0MjUwMF9zcGlfZGF0YSA9IHsKIAkuaGFzdHlwZSAgICAgICA9 IGZhbHNlLAogCS53ZTAJICAgICAgID0gMTYsCiAJLmN0bDAJICAgICAgID0gQ0UwX0NUUkxfUkVH LAorCS50aW1pbmcJICAgICAgID0gQ0UwX1RJTUlOR19DT01QRU5TQVRJT05fUkVHLAorCS5oY2xr X21hc2sgICAgID0gMHhmZmZmZjBmZiwKKwkuaGRpdl9tYXggICAgICA9IDEsCisJLmNhbGlicmF0 ZSAgICAgPSBhc3BlZWRfc3BpX2NhbGlicmF0ZSwKIAkuc2VnbWVudF9zdGFydCA9IGFzcGVlZF9z cGlfc2VnbWVudF9zdGFydCwKIAkuc2VnbWVudF9lbmQgICA9IGFzcGVlZF9zcGlfc2VnbWVudF9l bmQsCiAJLnNlZ21lbnRfcmVnICAgPSBhc3BlZWRfc3BpX3NlZ21lbnRfcmVnLApAQCAtODU5LDYg KzExMzIsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBhc3BlZWRfc3BpX2RhdGEgYXN0MjYwMF9m bWNfZGF0YSA9IHsKIAkubW9kZV9iaXRzICAgICA9IFNQSV9SWF9RVUFEIHwgU1BJX1JYX1FVQUQs CiAJLndlMAkgICAgICAgPSAxNiwKIAkuY3RsMAkgICAgICAgPSBDRTBfQ1RSTF9SRUcsCisJLnRp bWluZwkgICAgICAgPSBDRTBfVElNSU5HX0NPTVBFTlNBVElPTl9SRUcsCisJLmhjbGtfbWFzayAg ICAgPSAweGYwZmZmMGZmLAorCS5oZGl2X21heCAgICAgID0gMiwKKwkuY2FsaWJyYXRlICAgICA9 IGFzcGVlZF9zcGlfYXN0MjYwMF9jYWxpYnJhdGUsCiAJLnNlZ21lbnRfc3RhcnQgPSBhc3BlZWRf c3BpX3NlZ21lbnRfYXN0MjYwMF9zdGFydCwKIAkuc2VnbWVudF9lbmQgICA9IGFzcGVlZF9zcGlf c2VnbWVudF9hc3QyNjAwX2VuZCwKIAkuc2VnbWVudF9yZWcgICA9IGFzcGVlZF9zcGlfc2VnbWVu dF9hc3QyNjAwX3JlZywKQEAgLTg3MCw2ICsxMTQ3LDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qg YXNwZWVkX3NwaV9kYXRhIGFzdDI2MDBfc3BpX2RhdGEgPSB7CiAJLm1vZGVfYml0cyAgICAgPSBT UElfUlhfUVVBRCB8IFNQSV9SWF9RVUFELAogCS53ZTAJICAgICAgID0gMTYsCiAJLmN0bDAJICAg ICAgID0gQ0UwX0NUUkxfUkVHLAorCS50aW1pbmcJICAgICAgID0gQ0UwX1RJTUlOR19DT01QRU5T QVRJT05fUkVHLAorCS5oY2xrX21hc2sgICAgID0gMHhmMGZmZjBmZiwKKwkuaGRpdl9tYXggICAg ICA9IDIsCisJLmNhbGlicmF0ZSAgICAgPSBhc3BlZWRfc3BpX2FzdDI2MDBfY2FsaWJyYXRlLAog CS5zZWdtZW50X3N0YXJ0ID0gYXNwZWVkX3NwaV9zZWdtZW50X2FzdDI2MDBfc3RhcnQsCiAJLnNl Z21lbnRfZW5kICAgPSBhc3BlZWRfc3BpX3NlZ21lbnRfYXN0MjYwMF9lbmQsCiAJLnNlZ21lbnRf cmVnICAgPSBhc3BlZWRfc3BpX3NlZ21lbnRfYXN0MjYwMF9yZWcsCi0tIAoyLjM0LjEKCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2Vy bmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0 cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVs Cg==