From mboxrd@z Thu Jan 1 00:00:00 1970 From: Anson Huang Subject: [PATCH V12 2/5] pwm: Add i.MX TPM PWM driver support Date: Thu, 9 May 2019 13:29:29 +0000 Message-ID: <1557408252-21281-3-git-send-email-Anson.Huang@nxp.com> References: <1557408252-21281-1-git-send-email-Anson.Huang@nxp.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1557408252-21281-1-git-send-email-Anson.Huang@nxp.com> Content-Language: en-US Content-ID: <7528E1D2B156DA4784BF50ED0ECAD812@eurprd04.prod.outlook.com> Sender: linux-kernel-owner@vger.kernel.org To: "thierry.reding@gmail.com" , "robh+dt@kernel.org" , "mark.rutland@arm.com" , "shawnguo@kernel.org" , "s.hauer@pengutronix.de" , "kernel@pengutronix.de" , "festevam@gmail.com" , "linux@armlinux.org.uk" , "otavio@ossystems.com.br" , Leonard Crestez , Robin Gong , "schnitzeltony@gmail.com" , "u.kleine-koenig@pengutronix.de" , "jan.tuerk@emtrion.com" , "linux-pwm@vger.kernel.org" , "devicetree@vger.kernel.org" Cc: dl-linux-imx List-Id: devicetree@vger.kernel.org aS5NWDdVTFAgaGFzIFRQTShMb3cgUG93ZXIgVGltZXIvUHVsc2UgV2lkdGggTW9kdWxhdGlvbiBN b2R1bGUpDQppbnNpZGUsIGl0IGNhbiBzdXBwb3J0IG11bHRpcGxlIFBXTSBjaGFubmVscywgYWxs IHRoZSBjaGFubmVscw0Kc2hhcmUgc2FtZSBjb3VudGVyIGFuZCBwZXJpb2Qgc2V0dGluZywgYnV0 IGVhY2ggY2hhbm5lbCBjYW4NCmNvbmZpZ3VyZSBpdHMgZHV0eSBhbmQgcG9sYXJpdHkgaW5kZXBl bmRlbnRseS4NCg0KVGhlcmUgYXJlIHNldmVyYWwgVFBNIG1vZHVsZXMgaW4gaS5NWDdVTFAsIHRo ZSBudW1iZXIgb2YgY2hhbm5lbHMNCmluIFRQTSBtb2R1bGVzIGFyZSBkaWZmZXJlbnQsIGl0IGNh biBiZSByZWFkIGZyb20gZWFjaCBUUE0gbW9kdWxlJ3MNClBBUkFNIHJlZ2lzdGVyLg0KDQpTaWdu ZWQtb2ZmLWJ5OiBBbnNvbiBIdWFuZyA8QW5zb24uSHVhbmdAbnhwLmNvbT4NClJldmlld2VkLWJ5 OiBVd2UgS2xlaW5lLUvDtm5pZyA8dS5rbGVpbmUta29lbmlnQHBlbmd1dHJvbml4LmRlPg0KLS0t DQpDaGFuZ2VzIHNpbmNlIFYxMToNCgktIE9OTFkgYWRkIGZ1bmN0aW9uIGNvbW1lbnQgdG8gcHdt X2lteF90cG1fcm91bmRfc3RhdGUoKSwgbm8gY29kZSBjaGFuZ2UuDQotLS0NCiBkcml2ZXJzL3B3 bS9LY29uZmlnICAgICAgIHwgIDExICsrDQogZHJpdmVycy9wd20vTWFrZWZpbGUgICAgICB8ICAg MSArDQogZHJpdmVycy9wd20vcHdtLWlteC10cG0uYyB8IDQ0OCArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrDQogMyBmaWxlcyBjaGFuZ2VkLCA0NjAgaW5zZXJ0 aW9ucygrKQ0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3B3bS9wd20taW14LXRwbS5jDQoN CmRpZmYgLS1naXQgYS9kcml2ZXJzL3B3bS9LY29uZmlnIGIvZHJpdmVycy9wd20vS2NvbmZpZw0K aW5kZXggYzA1NGJkMS4uMTMxMWI1NDAgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL3B3bS9LY29uZmln DQorKysgYi9kcml2ZXJzL3B3bS9LY29uZmlnDQpAQCAtMjEwLDYgKzIxMCwxNyBAQCBjb25maWcg UFdNX0lNWDI3DQogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3Nl IE0gaGVyZTogdGhlIG1vZHVsZQ0KIAkgIHdpbGwgYmUgY2FsbGVkIHB3bS1pbXgyNy4NCiANCitj b25maWcgUFdNX0lNWF9UUE0NCisJdHJpc3RhdGUgImkuTVggVFBNIFBXTSBzdXBwb3J0Ig0KKwlk ZXBlbmRzIG9uIEFSQ0hfTVhDIHx8IENPTVBJTEVfVEVTVA0KKwlkZXBlbmRzIG9uIEhBVkVfQ0xL ICYmIEhBU19JT01FTQ0KKwloZWxwDQorCSAgR2VuZXJpYyBQV00gZnJhbWV3b3JrIGRyaXZlciBm b3IgaS5NWDdVTFAgVFBNIG1vZHVsZSwgVFBNJ3MgZnVsbA0KKwkgIG5hbWUgaXMgTG93IFBvd2Vy IFRpbWVyL1B1bHNlIFdpZHRoIE1vZHVsYXRpb24gTW9kdWxlLg0KKw0KKwkgIFRvIGNvbXBpbGUg dGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUNCisJICB3 aWxsIGJlIGNhbGxlZCBwd20taW14LXRwbS4NCisNCiBjb25maWcgUFdNX0paNDc0MA0KIAl0cmlz dGF0ZSAiSW5nZW5pYyBKWjQ3eHggUFdNIHN1cHBvcnQiDQogCWRlcGVuZHMgb24gTUFDSF9JTkdF TklDDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wd20vTWFrZWZpbGUgYi9kcml2ZXJzL3B3bS9NYWtl ZmlsZQ0KaW5kZXggNDQ4ODI1ZS4uYzM2ODU5OSAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvcHdtL01h a2VmaWxlDQorKysgYi9kcml2ZXJzL3B3bS9NYWtlZmlsZQ0KQEAgLTE5LDYgKzE5LDcgQEAgb2Jq LSQoQ09ORklHX1BXTV9ISUJWVCkJCSs9IHB3bS1oaWJ2dC5vDQogb2JqLSQoQ09ORklHX1BXTV9J TUcpCQkrPSBwd20taW1nLm8NCiBvYmotJChDT05GSUdfUFdNX0lNWDEpCQkrPSBwd20taW14MS5v DQogb2JqLSQoQ09ORklHX1BXTV9JTVgyNykJCSs9IHB3bS1pbXgyNy5vDQorb2JqLSQoQ09ORklH X1BXTV9JTVhfVFBNKQkrPSBwd20taW14LXRwbS5vDQogb2JqLSQoQ09ORklHX1BXTV9KWjQ3NDAp CSs9IHB3bS1qejQ3NDAubw0KIG9iai0kKENPTkZJR19QV01fTFAzOTQzKQkrPSBwd20tbHAzOTQz Lm8NCiBvYmotJChDT05GSUdfUFdNX0xQQzE4WFhfU0NUKQkrPSBwd20tbHBjMTh4eC1zY3Qubw0K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHdtL3B3bS1pbXgtdHBtLmMgYi9kcml2ZXJzL3B3bS9wd20t aW14LXRwbS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uNjJmMWVjMg0K LS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9wd20vcHdtLWlteC10cG0uYw0KQEAgLTAsMCAr MSw0NDggQEANCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KKy8qDQorICog Q29weXJpZ2h0IDIwMTgtMjAxOSBOWFAuDQorICoNCisgKiBMaW1pdGF0aW9uczoNCisgKiAtIFRo ZSBUUE0gY291bnRlciBhbmQgcGVyaW9kIGNvdW50ZXIgYXJlIHNoYXJlZCBiZXR3ZWVuDQorICog ICBtdWx0aXBsZSBjaGFubmVscywgc28gYWxsIGNoYW5uZWxzIHNob3VsZCB1c2Ugc2FtZSBwZXJp b2QNCisgKiAgIHNldHRpbmdzLg0KKyAqIC0gQ2hhbmdlcyB0byBwb2xhcml0eSBjYW5ub3QgYmUg bGF0Y2hlZCBhdCB0aGUgdGltZSBvZiB0aGUNCisgKiAgIG5leHQgcGVyaW9kIHN0YXJ0Lg0KKyAq IC0gQ2hhbmdpbmcgcGVyaW9kIGFuZCBkdXR5IGN5Y2xlIHRvZ2V0aGVyIGlzbid0IGF0b21pYywN CisgKiAgIHdpdGggdGhlIHdyb25nIHRpbWluZyBpdCBtaWdodCBoYXBwZW4gdGhhdCBhIHBlcmlv ZCBpcw0KKyAqICAgcHJvZHVjZWQgd2l0aCBvbGQgZHV0eSBjeWNsZSBidXQgbmV3IHBlcmlvZCBz ZXR0aW5ncy4NCisgKi8NCisNCisjaW5jbHVkZSA8bGludXgvYml0ZmllbGQuaD4NCisjaW5jbHVk ZSA8bGludXgvYml0b3BzLmg+DQorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KKyNpbmNsdWRlIDxs aW51eC9lcnIuaD4NCisjaW5jbHVkZSA8bGludXgvaW8uaD4NCisjaW5jbHVkZSA8bGludXgvbG9n Mi5oPg0KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCisjaW5jbHVkZSA8bGludXgvb2YuaD4N CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPg0KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9y bV9kZXZpY2UuaD4NCisjaW5jbHVkZSA8bGludXgvcHdtLmg+DQorI2luY2x1ZGUgPGxpbnV4L3Ns YWIuaD4NCisNCisjZGVmaW5lIFBXTV9JTVhfVFBNX1BBUkFNCTB4NA0KKyNkZWZpbmUgUFdNX0lN WF9UUE1fR0xPQkFMCTB4OA0KKyNkZWZpbmUgUFdNX0lNWF9UUE1fU0MJCTB4MTANCisjZGVmaW5l IFBXTV9JTVhfVFBNX0NOVAkJMHgxNA0KKyNkZWZpbmUgUFdNX0lNWF9UUE1fTU9ECQkweDE4DQor I2RlZmluZSBQV01fSU1YX1RQTV9DblNDKG4pCSgweDIwICsgKG4pICogMHg4KQ0KKyNkZWZpbmUg UFdNX0lNWF9UUE1fQ25WKG4pCSgweDI0ICsgKG4pICogMHg4KQ0KKw0KKyNkZWZpbmUgUFdNX0lN WF9UUE1fUEFSQU1fQ0hBTgkJCUdFTk1BU0soNywgMCkNCisNCisjZGVmaW5lIFBXTV9JTVhfVFBN X1NDX1BTCQkJR0VOTUFTSygyLCAwKQ0KKyNkZWZpbmUgUFdNX0lNWF9UUE1fU0NfQ01PRAkJCUdF Tk1BU0soNCwgMykNCisjZGVmaW5lIFBXTV9JTVhfVFBNX1NDX0NNT0RfSU5DX0VWRVJZX0NMSwlG SUVMRF9QUkVQKFBXTV9JTVhfVFBNX1NDX0NNT0QsIDEpDQorI2RlZmluZSBQV01fSU1YX1RQTV9T Q19DUFdNUwkJCUJJVCg1KQ0KKw0KKyNkZWZpbmUgUFdNX0lNWF9UUE1fQ25TQ19DSEYJQklUKDcp DQorI2RlZmluZSBQV01fSU1YX1RQTV9DblNDX01TQglCSVQoNSkNCisjZGVmaW5lIFBXTV9JTVhf VFBNX0NuU0NfTVNBCUJJVCg0KQ0KKw0KKy8qDQorICogVGhlIHJlZmVyZW5jZSBtYW51YWwgZGVz Y3JpYmVzIHRoaXMgZmllbGQgYXMgdHdvIHNlcGFyYXRlIGJpdHMuIFRoZQ0KKyAqIHNlbWFudGlj IG9mIHRoZSB0d28gYml0cyBpc24ndCBvcnRob2dvbmFsIHRob3VnaCwgc28gdGhleSBhcmUgdHJl YXRlZA0KKyAqIHRvZ2V0aGVyIGFzIGEgMi1iaXQgZmllbGQgaGVyZS4NCisgKi8NCisjZGVmaW5l IFBXTV9JTVhfVFBNX0NuU0NfRUxTCUdFTk1BU0soMywgMikNCisjZGVmaW5lIFBXTV9JTVhfVFBN X0NuU0NfRUxTX0lOVkVSU0VECUZJRUxEX1BSRVAoUFdNX0lNWF9UUE1fQ25TQ19FTFMsIDEpDQor I2RlZmluZSBQV01fSU1YX1RQTV9DblNDX0VMU19OT1JNQUwJRklFTERfUFJFUChQV01fSU1YX1RQ TV9DblNDX0VMUywgMikNCisNCisNCisjZGVmaW5lIFBXTV9JTVhfVFBNX01PRF9XSURUSAkxNg0K KyNkZWZpbmUgUFdNX0lNWF9UUE1fTU9EX01PRAlHRU5NQVNLKFBXTV9JTVhfVFBNX01PRF9XSURU SCAtIDEsIDApDQorDQorc3RydWN0IGlteF90cG1fcHdtX2NoaXAgew0KKwlzdHJ1Y3QgcHdtX2No aXAgY2hpcDsNCisJc3RydWN0IGNsayAqY2xrOw0KKwl2b2lkIF9faW9tZW0gKmJhc2U7DQorCXN0 cnVjdCBtdXRleCBsb2NrOw0KKwl1MzIgdXNlcl9jb3VudDsNCisJdTMyIGVuYWJsZV9jb3VudDsN CisJdTMyIHJlYWxfcGVyaW9kOw0KK307DQorDQorc3RydWN0IGlteF90cG1fcHdtX3BhcmFtIHsN CisJdTggcHJlc2NhbGU7DQorCXUzMiBtb2Q7DQorCXUzMiB2YWw7DQorfTsNCisNCitzdGF0aWMg aW5saW5lIHN0cnVjdCBpbXhfdHBtX3B3bV9jaGlwICp0b19pbXhfdHBtX3B3bV9jaGlwKHN0cnVj dCBwd21fY2hpcCAqY2hpcCkNCit7DQorCXJldHVybiBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0 IGlteF90cG1fcHdtX2NoaXAsIGNoaXApOw0KK30NCisNCisvKg0KKyAqIFRoaXMgZnVuY3Rpb24g ZGV0ZXJtaW5lcyBmb3IgYSBnaXZlbiBwd21fc3RhdGUgKnN0YXRlIHRoYXQgYSBjb25zdW1lcg0K KyAqIG1pZ2h0IHJlcXVlc3QgdGhlIHB3bV9zdGF0ZSAqcmVhbF9zdGF0ZSB0aGF0IGV2ZW50dWFs bHkgaXMgaW1wbGVtZW50ZWQNCisgKiBieSB0aGUgaGFyZHdhcmUgYW5kIHRoZSBuZWNlc3Nhcnkg cmVnaXN0ZXIgdmFsdWVzIChpbiAqcCkgdG8gYWNoaWV2ZQ0KKyAqIHRoaXMuDQorICovDQorc3Rh dGljIGludCBwd21faW14X3RwbV9yb3VuZF9zdGF0ZShzdHJ1Y3QgcHdtX2NoaXAgKmNoaXAsDQor CQkJCSAgIHN0cnVjdCBpbXhfdHBtX3B3bV9wYXJhbSAqcCwNCisJCQkJICAgc3RydWN0IHB3bV9z dGF0ZSAqcmVhbF9zdGF0ZSwNCisJCQkJICAgc3RydWN0IHB3bV9zdGF0ZSAqc3RhdGUpDQorew0K KwlzdHJ1Y3QgaW14X3RwbV9wd21fY2hpcCAqdHBtID0gdG9faW14X3RwbV9wd21fY2hpcChjaGlw KTsNCisJdTMyIHJhdGUsIHByZXNjYWxlLCBwZXJpb2RfY291bnQsIGNsb2NrX3VuaXQ7DQorCXU2 NCB0bXA7DQorDQorCXJhdGUgPSBjbGtfZ2V0X3JhdGUodHBtLT5jbGspOw0KKwl0bXAgPSAodTY0 KXN0YXRlLT5wZXJpb2QgKiByYXRlOw0KKwljbG9ja191bml0ID0gRElWX1JPVU5EX0NMT1NFU1Rf VUxMKHRtcCwgTlNFQ19QRVJfU0VDKTsNCisJaWYgKGNsb2NrX3VuaXQgPD0gUFdNX0lNWF9UUE1f TU9EX01PRCkNCisJCXByZXNjYWxlID0gMDsNCisJZWxzZQ0KKwkJcHJlc2NhbGUgPSBpbG9nMihj bG9ja191bml0KSArIDEgLSBQV01fSU1YX1RQTV9NT0RfV0lEVEg7DQorDQorCWlmICgoIUZJRUxE X0ZJVChQV01fSU1YX1RQTV9TQ19QUywgcHJlc2NhbGUpKSkNCisJCXJldHVybiAtRVJBTkdFOw0K KwlwLT5wcmVzY2FsZSA9IHByZXNjYWxlOw0KKw0KKwlwZXJpb2RfY291bnQgPSAoY2xvY2tfdW5p dCArICgoMSA8PCBwcmVzY2FsZSkgPj4gMSkpID4+IHByZXNjYWxlOw0KKwlwLT5tb2QgPSBwZXJp b2RfY291bnQ7DQorDQorCS8qIGNhbGN1bGF0ZSByZWFsIHBlcmlvZCBIVyBjYW4gc3VwcG9ydCAq Lw0KKwl0bXAgPSAodTY0KXBlcmlvZF9jb3VudCA8PCBwcmVzY2FsZTsNCisJdG1wICo9IE5TRUNf UEVSX1NFQzsNCisJcmVhbF9zdGF0ZS0+cGVyaW9kID0gRElWX1JPVU5EX0NMT1NFU1RfVUxMKHRt cCwgcmF0ZSk7DQorDQorCS8qDQorCSAqIGlmIGV2ZW50dWFsbHkgdGhlIFBXTSBvdXRwdXQgaXMg aW5hY3RpdmUsIGVpdGhlcg0KKwkgKiBkdXR5IGN5Y2xlIGlzIDAgb3Igc3RhdHVzIGlzIGRpc2Fi bGVkLCBuZWVkIHRvDQorCSAqIG1ha2Ugc3VyZSB0aGUgb3V0cHV0IHBpbiBpcyBpbmFjdGl2ZS4N CisJICovDQorCWlmICghc3RhdGUtPmVuYWJsZWQpDQorCQlyZWFsX3N0YXRlLT5kdXR5X2N5Y2xl ID0gMDsNCisJZWxzZQ0KKwkJcmVhbF9zdGF0ZS0+ZHV0eV9jeWNsZSA9IHN0YXRlLT5kdXR5X2N5 Y2xlOw0KKw0KKwl0bXAgPSAodTY0KXAtPm1vZCAqIHJlYWxfc3RhdGUtPmR1dHlfY3ljbGU7DQor CXAtPnZhbCA9IERJVl9ST1VORF9DTE9TRVNUX1VMTCh0bXAsIHJlYWxfc3RhdGUtPnBlcmlvZCk7 DQorDQorCXJlYWxfc3RhdGUtPnBvbGFyaXR5ID0gc3RhdGUtPnBvbGFyaXR5Ow0KKwlyZWFsX3N0 YXRlLT5lbmFibGVkID0gc3RhdGUtPmVuYWJsZWQ7DQorDQorCXJldHVybiAwOw0KK30NCisNCitz dGF0aWMgdm9pZCBwd21faW14X3RwbV9nZXRfc3RhdGUoc3RydWN0IHB3bV9jaGlwICpjaGlwLA0K KwkJCQkgIHN0cnVjdCBwd21fZGV2aWNlICpwd20sDQorCQkJCSAgc3RydWN0IHB3bV9zdGF0ZSAq c3RhdGUpDQorew0KKwlzdHJ1Y3QgaW14X3RwbV9wd21fY2hpcCAqdHBtID0gdG9faW14X3RwbV9w d21fY2hpcChjaGlwKTsNCisJdTMyIHJhdGUsIHZhbCwgcHJlc2NhbGU7DQorCXU2NCB0bXA7DQor DQorCS8qIGdldCBwZXJpb2QgKi8NCisJc3RhdGUtPnBlcmlvZCA9IHRwbS0+cmVhbF9wZXJpb2Q7 DQorDQorCS8qIGdldCBkdXR5IGN5Y2xlICovDQorCXJhdGUgPSBjbGtfZ2V0X3JhdGUodHBtLT5j bGspOw0KKwl2YWwgPSByZWFkbCh0cG0tPmJhc2UgKyBQV01fSU1YX1RQTV9TQyk7DQorCXByZXNj YWxlID0gRklFTERfR0VUKFBXTV9JTVhfVFBNX1NDX1BTLCB2YWwpOw0KKwl0bXAgPSByZWFkbCh0 cG0tPmJhc2UgKyBQV01fSU1YX1RQTV9DblYocHdtLT5od3B3bSkpOw0KKwl0bXAgPSAodG1wIDw8 IHByZXNjYWxlKSAqIE5TRUNfUEVSX1NFQzsNCisJc3RhdGUtPmR1dHlfY3ljbGUgPSBESVZfUk9V TkRfQ0xPU0VTVF9VTEwodG1wLCByYXRlKTsNCisNCisJLyogZ2V0IHBvbGFyaXR5ICovDQorCXZh bCA9IHJlYWRsKHRwbS0+YmFzZSArIFBXTV9JTVhfVFBNX0NuU0MocHdtLT5od3B3bSkpOw0KKwlp ZiAoKHZhbCAmIFBXTV9JTVhfVFBNX0NuU0NfRUxTKSA9PSBQV01fSU1YX1RQTV9DblNDX0VMU19J TlZFUlNFRCkNCisJCXN0YXRlLT5wb2xhcml0eSA9IFBXTV9QT0xBUklUWV9JTlZFUlNFRDsNCisJ ZWxzZQ0KKwkJLyoNCisJCSAqIEFzc3VtZSByZXNlcnZlZCB2YWx1ZXMgKDJiMDAgYW5kIDJiMTEp IHRvIHlpZWxkDQorCQkgKiBub3JtYWwgcG9sYXJpdHkuDQorCQkgKi8NCisJCXN0YXRlLT5wb2xh cml0eSA9IFBXTV9QT0xBUklUWV9OT1JNQUw7DQorDQorCS8qIGdldCBjaGFubmVsIHN0YXR1cyAq Lw0KKwlzdGF0ZS0+ZW5hYmxlZCA9IEZJRUxEX0dFVChQV01fSU1YX1RQTV9DblNDX0VMUywgdmFs KSA/IHRydWUgOiBmYWxzZTsNCit9DQorDQorLyogdGhpcyBmdW5jdGlvbiBpcyBzdXBwb3NlZCB0 byBiZSBjYWxsZWQgd2l0aCBtdXRleCBob2xkICovDQorc3RhdGljIGludCBwd21faW14X3RwbV9h cHBseV9odyhzdHJ1Y3QgcHdtX2NoaXAgKmNoaXAsDQorCQkJCXN0cnVjdCBpbXhfdHBtX3B3bV9w YXJhbSAqcCwNCisJCQkJc3RydWN0IHB3bV9zdGF0ZSAqc3RhdGUsDQorCQkJCXN0cnVjdCBwd21f ZGV2aWNlICpwd20pDQorew0KKwlzdHJ1Y3QgaW14X3RwbV9wd21fY2hpcCAqdHBtID0gdG9faW14 X3RwbV9wd21fY2hpcChjaGlwKTsNCisJYm9vbCBwZXJpb2RfdXBkYXRlID0gZmFsc2U7DQorCWJv b2wgZHV0eV91cGRhdGUgPSBmYWxzZTsNCisJdTMyIHZhbCwgY21vZCwgY3VyX3ByZXNjYWxlOw0K Kwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7DQorCXN0cnVjdCBwd21fc3RhdGUgYzsNCisNCisJaWYg KHN0YXRlLT5wZXJpb2QgIT0gdHBtLT5yZWFsX3BlcmlvZCkgew0KKwkJLyoNCisJCSAqIFRQTSBj b3VudGVyIGlzIHNoYXJlZCBieSBtdWx0aXBsZSBjaGFubmVscywgc28NCisJCSAqIHByZXNjYWxl IGFuZCBwZXJpb2QgY2FuIE5PVCBiZSBtb2RpZmllZCB3aGVuDQorCQkgKiB0aGVyZSBhcmUgbXVs dGlwbGUgY2hhbm5lbHMgaW4gdXNlIHdpdGggZGlmZmVyZW50DQorCQkgKiBwZXJpb2Qgc2V0dGlu Z3MuDQorCQkgKi8NCisJCWlmICh0cG0tPnVzZXJfY291bnQgPiAxKQ0KKwkJCXJldHVybiAtRUJV U1k7DQorDQorCQl2YWwgPSByZWFkbCh0cG0tPmJhc2UgKyBQV01fSU1YX1RQTV9TQyk7DQorCQlj bW9kID0gRklFTERfR0VUKFBXTV9JTVhfVFBNX1NDX0NNT0QsIHZhbCk7DQorCQljdXJfcHJlc2Nh bGUgPSBGSUVMRF9HRVQoUFdNX0lNWF9UUE1fU0NfUFMsIHZhbCk7DQorCQlpZiAoY21vZCAmJiBj dXJfcHJlc2NhbGUgIT0gcC0+cHJlc2NhbGUpDQorCQkJcmV0dXJuIC1FQlVTWTsNCisNCisJCS8q IHNldCBUUE0gY291bnRlciBwcmVzY2FsZSAqLw0KKwkJdmFsICY9IH5QV01fSU1YX1RQTV9TQ19Q UzsNCisJCXZhbCB8PSBGSUVMRF9QUkVQKFBXTV9JTVhfVFBNX1NDX1BTLCBwLT5wcmVzY2FsZSk7 DQorCQl3cml0ZWwodmFsLCB0cG0tPmJhc2UgKyBQV01fSU1YX1RQTV9TQyk7DQorDQorCQkvKg0K KwkJICogc2V0IHBlcmlvZCBjb3VudDoNCisJCSAqIGlmIHRoZSBQV00gaXMgZGlzYWJsZWQgKENN T0RbMTowXSA9IDJiMDApLCB0aGVuIE1PRCByZWdpc3Rlcg0KKwkJICogaXMgdXBkYXRlZCB3aGVu IE1PRCByZWdpc3RlciBpcyB3cml0dGVuLg0KKwkJICoNCisJCSAqIGlmIHRoZSBQV00gaXMgZW5h YmxlZCAoQ01PRFsxOjBdIOKJoCAyYjAwKSwgdGhlIHBlcmlvZCBsZW5ndGgNCisJCSAqIGlzIGxh dGNoZWQgaW50byBoYXJkd2FyZSB3aGVuIHRoZSBuZXh0IHBlcmlvZCBzdGFydHMuDQorCQkgKi8N CisJCXdyaXRlbChwLT5tb2QsIHRwbS0+YmFzZSArIFBXTV9JTVhfVFBNX01PRCk7DQorCQl0cG0t PnJlYWxfcGVyaW9kID0gc3RhdGUtPnBlcmlvZDsNCisJCXBlcmlvZF91cGRhdGUgPSB0cnVlOw0K Kwl9DQorDQorCXB3bV9pbXhfdHBtX2dldF9zdGF0ZShjaGlwLCBwd20sICZjKTsNCisNCisJLyog cG9sYXJpdHkgaXMgTk9UIGFsbG93ZWQgdG8gYmUgY2hhbmdlZCBpZiBQV00gaXMgYWN0aXZlICov DQorCWlmIChjLmVuYWJsZWQgJiYgYy5wb2xhcml0eSAhPSBzdGF0ZS0+cG9sYXJpdHkpDQorCQly ZXR1cm4gLUVCVVNZOw0KKw0KKwlpZiAoc3RhdGUtPmR1dHlfY3ljbGUgIT0gYy5kdXR5X2N5Y2xl KSB7DQorCQkvKg0KKwkJICogc2V0IGNoYW5uZWwgdmFsdWU6DQorCQkgKiBpZiB0aGUgUFdNIGlz IGRpc2FibGVkIChDTU9EWzE6MF0gPSAyYjAwKSwgdGhlbiBDblYgcmVnaXN0ZXINCisJCSAqIGlz IHVwZGF0ZWQgd2hlbiBDblYgcmVnaXN0ZXIgaXMgd3JpdHRlbi4NCisJCSAqDQorCQkgKiBpZiB0 aGUgUFdNIGlzIGVuYWJsZWQgKENNT0RbMTowXSDiiaAgMmIwMCksIHRoZSBkdXR5IGxlbmd0aA0K KwkJICogaXMgbGF0Y2hlZCBpbnRvIGhhcmR3YXJlIHdoZW4gdGhlIG5leHQgcGVyaW9kIHN0YXJ0 cy4NCisJCSAqLw0KKwkJd3JpdGVsKHAtPnZhbCwgdHBtLT5iYXNlICsgUFdNX0lNWF9UUE1fQ25W KHB3bS0+aHdwd20pKTsNCisJCWR1dHlfdXBkYXRlID0gdHJ1ZTsNCisJfQ0KKw0KKwkvKiBtYWtl IHN1cmUgTU9EICYgQ25WIHJlZ2lzdGVycyBhcmUgdXBkYXRlZCAqLw0KKwlpZiAocGVyaW9kX3Vw ZGF0ZSB8fCBkdXR5X3VwZGF0ZSkgew0KKwkJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19q aWZmaWVzKHRwbS0+cmVhbF9wZXJpb2QgLw0KKwkJCQkJCSAgICAgTlNFQ19QRVJfTVNFQyArIDEp Ow0KKwkJd2hpbGUgKHJlYWRsKHRwbS0+YmFzZSArIFBXTV9JTVhfVFBNX01PRCkgIT0gcC0+bW9k DQorCQkgICAgICAgfHwgcmVhZGwodHBtLT5iYXNlICsgUFdNX0lNWF9UUE1fQ25WKHB3bS0+aHdw d20pKQ0KKwkJICAgICAgICE9IHAtPnZhbCkgew0KKwkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMs IHRpbWVvdXQpKQ0KKwkJCQlyZXR1cm4gLUVUSU1FOw0KKwkJCWNwdV9yZWxheCgpOw0KKwkJfQ0K Kwl9DQorDQorCS8qDQorCSAqIHBvbGFyaXR5IHNldHRpbmdzIHdpbGwgZW5hYmxlZC9kaXNhYmxl IG91dHB1dCBzdGF0dXMNCisJICogaW1tZWRpYXRlbHksIHNvIGlmIHRoZSBjaGFubmVsIGlzIGRp c2FibGVkLCBuZWVkIHRvDQorCSAqIG1ha2Ugc3VyZSBNU0EvTVNCL0VMUyBhcmUgc2V0IHRvIDAg d2hpY2ggbWVhbnMgY2hhbm5lbA0KKwkgKiBkaXNhYmxlZC4NCisJICovDQorCXZhbCA9IHJlYWRs KHRwbS0+YmFzZSArIFBXTV9JTVhfVFBNX0NuU0MocHdtLT5od3B3bSkpOw0KKwl2YWwgJj0gfihQ V01fSU1YX1RQTV9DblNDX0VMUyB8IFBXTV9JTVhfVFBNX0NuU0NfTVNBIHwNCisJCSBQV01fSU1Y X1RQTV9DblNDX01TQik7DQorCWlmIChzdGF0ZS0+ZW5hYmxlZCkgew0KKwkJLyoNCisJCSAqIHNl dCBwb2xhcml0eSAoZm9yIGVkZ2UtYWxpZ25lZCBQV00gbW9kZXMpDQorCQkgKg0KKwkJICogRUxT WzE6MF0gPSAyYjEwIHlpZWxkcyBub3JtYWwgcG9sYXJpdHkgYmVoYXZpb3VyLA0KKwkJICogRUxT WzE6MF0gPSAyYjAxIHlpZWxkcyBpbnZlcnNlZCBwb2xhcml0eS4NCisJCSAqIFRoZSBvdGhlciB2 YWx1ZXMgYXJlIHJlc2VydmVkLg0KKwkJICovDQorCQl2YWwgfD0gUFdNX0lNWF9UUE1fQ25TQ19N U0I7DQorCQl2YWwgfD0gKHN0YXRlLT5wb2xhcml0eSA9PSBQV01fUE9MQVJJVFlfTk9STUFMKSA/ DQorCQkJUFdNX0lNWF9UUE1fQ25TQ19FTFNfTk9STUFMIDoNCisJCQlQV01fSU1YX1RQTV9DblND X0VMU19JTlZFUlNFRDsNCisJfQ0KKwl3cml0ZWwodmFsLCB0cG0tPmJhc2UgKyBQV01fSU1YX1RQ TV9DblNDKHB3bS0+aHdwd20pKTsNCisNCisJLyogY29udHJvbCB0aGUgY291bnRlciBzdGF0dXMg Ki8NCisJaWYgKHN0YXRlLT5lbmFibGVkICE9IGMuZW5hYmxlZCkgew0KKwkJdmFsID0gcmVhZGwo dHBtLT5iYXNlICsgUFdNX0lNWF9UUE1fU0MpOw0KKwkJaWYgKHN0YXRlLT5lbmFibGVkKSB7DQor CQkJaWYgKCsrdHBtLT5lbmFibGVfY291bnQgPT0gMSkNCisJCQkJdmFsIHw9IFBXTV9JTVhfVFBN X1NDX0NNT0RfSU5DX0VWRVJZX0NMSzsNCisJCX0gZWxzZSB7DQorCQkJaWYgKC0tdHBtLT5lbmFi bGVfY291bnQgPT0gMCkNCisJCQkJdmFsICY9IH5QV01fSU1YX1RQTV9TQ19DTU9EOw0KKwkJfQ0K KwkJd3JpdGVsKHZhbCwgdHBtLT5iYXNlICsgUFdNX0lNWF9UUE1fU0MpOw0KKwl9DQorDQorCXJl dHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IHB3bV9pbXhfdHBtX2FwcGx5KHN0cnVjdCBwd21f Y2hpcCAqY2hpcCwNCisJCQkgICAgIHN0cnVjdCBwd21fZGV2aWNlICpwd20sDQorCQkJICAgICBz dHJ1Y3QgcHdtX3N0YXRlICpzdGF0ZSkNCit7DQorCXN0cnVjdCBpbXhfdHBtX3B3bV9jaGlwICp0 cG0gPSB0b19pbXhfdHBtX3B3bV9jaGlwKGNoaXApOw0KKwlzdHJ1Y3QgaW14X3RwbV9wd21fcGFy YW0gcGFyYW07DQorCXN0cnVjdCBwd21fc3RhdGUgcmVhbF9zdGF0ZTsNCisJaW50IHJldDsNCisN CisJcmV0ID0gcHdtX2lteF90cG1fcm91bmRfc3RhdGUoY2hpcCwgJnBhcmFtLCAmcmVhbF9zdGF0 ZSwgc3RhdGUpOw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJbXV0ZXhfbG9jaygm dHBtLT5sb2NrKTsNCisJcmV0ID0gcHdtX2lteF90cG1fYXBwbHlfaHcoY2hpcCwgJnBhcmFtLCAm cmVhbF9zdGF0ZSwgcHdtKTsNCisJbXV0ZXhfdW5sb2NrKCZ0cG0tPmxvY2spOw0KKw0KKwlyZXR1 cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW50IHB3bV9pbXhfdHBtX3JlcXVlc3Qoc3RydWN0IHB3 bV9jaGlwICpjaGlwLCBzdHJ1Y3QgcHdtX2RldmljZSAqcHdtKQ0KK3sNCisJc3RydWN0IGlteF90 cG1fcHdtX2NoaXAgKnRwbSA9IHRvX2lteF90cG1fcHdtX2NoaXAoY2hpcCk7DQorDQorCW11dGV4 X2xvY2soJnRwbS0+bG9jayk7DQorCXRwbS0+dXNlcl9jb3VudCsrOw0KKwltdXRleF91bmxvY2so JnRwbS0+bG9jayk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgdm9pZCBwd21faW14 X3RwbV9mcmVlKHN0cnVjdCBwd21fY2hpcCAqY2hpcCwgc3RydWN0IHB3bV9kZXZpY2UgKnB3bSkN Cit7DQorCXN0cnVjdCBpbXhfdHBtX3B3bV9jaGlwICp0cG0gPSB0b19pbXhfdHBtX3B3bV9jaGlw KGNoaXApOw0KKw0KKwltdXRleF9sb2NrKCZ0cG0tPmxvY2spOw0KKwl0cG0tPnVzZXJfY291bnQt LTsNCisJbXV0ZXhfdW5sb2NrKCZ0cG0tPmxvY2spOw0KK30NCisNCitzdGF0aWMgY29uc3Qgc3Ry dWN0IHB3bV9vcHMgaW14X3RwbV9wd21fb3BzID0gew0KKwkucmVxdWVzdCA9IHB3bV9pbXhfdHBt X3JlcXVlc3QsDQorCS5mcmVlID0gcHdtX2lteF90cG1fZnJlZSwNCisJLmdldF9zdGF0ZSA9IHB3 bV9pbXhfdHBtX2dldF9zdGF0ZSwNCisJLmFwcGx5ID0gcHdtX2lteF90cG1fYXBwbHksDQorCS5v d25lciA9IFRISVNfTU9EVUxFLA0KK307DQorDQorc3RhdGljIGludCBwd21faW14X3RwbV9wcm9i ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KK3sNCisJc3RydWN0IGlteF90cG1fcHdt X2NoaXAgKnRwbTsNCisJaW50IHJldDsNCisJdTMyIHZhbDsNCisNCisJdHBtID0gZGV2bV9remFs bG9jKCZwZGV2LT5kZXYsIHNpemVvZigqdHBtKSwgR0ZQX0tFUk5FTCk7DQorCWlmICghdHBtKQ0K KwkJcmV0dXJuIC1FTk9NRU07DQorDQorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHRwbSk7 DQorDQorCXRwbS0+YmFzZSA9IGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZShwZGV2LCAw KTsNCisJaWYgKElTX0VSUih0cG0tPmJhc2UpKQ0KKwkJcmV0dXJuIFBUUl9FUlIodHBtLT5iYXNl KTsNCisNCisJdHBtLT5jbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7DQorCWlm IChJU19FUlIodHBtLT5jbGspKSB7DQorCQlyZXQgPSBQVFJfRVJSKHRwbS0+Y2xrKTsNCisJCWlm IChyZXQgIT0gLUVQUk9CRV9ERUZFUikNCisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsDQorCQkJCSJm YWlsZWQgdG8gZ2V0IFBXTSBjbG9jazogJWRcbiIsIHJldCk7DQorCQlyZXR1cm4gcmV0Ow0KKwl9 DQorDQorCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZSh0cG0tPmNsayk7DQorCWlmIChyZXQpIHsN CisJCWRldl9lcnIoJnBkZXYtPmRldiwNCisJCQkiZmFpbGVkIHRvIHByZXBhcmUgb3IgZW5hYmxl IGNsb2NrOiAlZFxuIiwgcmV0KTsNCisJCXJldHVybiByZXQ7DQorCX0NCisNCisJdHBtLT5jaGlw LmRldiA9ICZwZGV2LT5kZXY7DQorCXRwbS0+Y2hpcC5vcHMgPSAmaW14X3RwbV9wd21fb3BzOw0K Kwl0cG0tPmNoaXAuYmFzZSA9IC0xOw0KKwl0cG0tPmNoaXAub2ZfeGxhdGUgPSBvZl9wd21feGxh dGVfd2l0aF9mbGFnczsNCisJdHBtLT5jaGlwLm9mX3B3bV9uX2NlbGxzID0gMzsNCisNCisJLyog Z2V0IG51bWJlciBvZiBjaGFubmVscyAqLw0KKwl2YWwgPSByZWFkbCh0cG0tPmJhc2UgKyBQV01f SU1YX1RQTV9QQVJBTSk7DQorCXRwbS0+Y2hpcC5ucHdtID0gRklFTERfR0VUKFBXTV9JTVhfVFBN X1BBUkFNX0NIQU4sIHZhbCk7DQorDQorCW11dGV4X2luaXQoJnRwbS0+bG9jayk7DQorDQorCXJl dCA9IHB3bWNoaXBfYWRkKCZ0cG0tPmNoaXApOw0KKwlpZiAocmV0KSB7DQorCQlkZXZfZXJyKCZw ZGV2LT5kZXYsICJmYWlsZWQgdG8gYWRkIFBXTSBjaGlwOiAlZFxuIiwgcmV0KTsNCisJCWNsa19k aXNhYmxlX3VucHJlcGFyZSh0cG0tPmNsayk7DQorCX0NCisNCisJcmV0dXJuIHJldDsNCit9DQor DQorc3RhdGljIGludCBwd21faW14X3RwbV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikNCit7DQorCXN0cnVjdCBpbXhfdHBtX3B3bV9jaGlwICp0cG0gPSBwbGF0Zm9ybV9nZXRf ZHJ2ZGF0YShwZGV2KTsNCisJaW50IHJldCA9IHB3bWNoaXBfcmVtb3ZlKCZ0cG0tPmNoaXApOw0K Kw0KKwljbGtfZGlzYWJsZV91bnByZXBhcmUodHBtLT5jbGspOw0KKw0KKwlyZXR1cm4gcmV0Ow0K K30NCisNCitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIHB3bV9pbXhfdHBtX3N1c3BlbmQoc3Ry dWN0IGRldmljZSAqZGV2KQ0KK3sNCisJc3RydWN0IGlteF90cG1fcHdtX2NoaXAgKnRwbSA9IGRl dl9nZXRfZHJ2ZGF0YShkZXYpOw0KKw0KKwlpZiAodHBtLT5lbmFibGVfY291bnQgPiAwKQ0KKwkJ cmV0dXJuIC1FQlVTWTsNCisNCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHRwbS0+Y2xrKTsNCisN CisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgcHdtX2lteF90 cG1fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikNCit7DQorCXN0cnVjdCBpbXhfdHBtX3B3bV9j aGlwICp0cG0gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCisJaW50IHJldCA9IDA7DQorDQorCXJl dCA9IGNsa19wcmVwYXJlX2VuYWJsZSh0cG0tPmNsayk7DQorCWlmIChyZXQpDQorCQlkZXZfZXJy KGRldiwNCisJCQkiZmFpbGVkIHRvIHByZXBhcmUgb3IgZW5hYmxlIGNsb2NrOiAlZFxuIiwNCisJ CQlyZXQpOw0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgU0lNUExFX0RFVl9QTV9P UFMoaW14X3RwbV9wd21fcG0sDQorCQkJIHB3bV9pbXhfdHBtX3N1c3BlbmQsIHB3bV9pbXhfdHBt X3Jlc3VtZSk7DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgaW14X3RwbV9w d21fZHRfaWRzW10gPSB7DQorCXsgLmNvbXBhdGlibGUgPSAiZnNsLGlteDd1bHAtcHdtIiwgfSwN CisJeyAvKiBzZW50aW5lbCAqLyB9DQorfTsNCitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBpbXhf dHBtX3B3bV9kdF9pZHMpOw0KKw0KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGlteF90 cG1fcHdtX2RyaXZlciA9IHsNCisJLmRyaXZlciA9IHsNCisJCS5uYW1lID0gImlteDd1bHAtdHBt LXB3bSIsDQorCQkub2ZfbWF0Y2hfdGFibGUgPSBpbXhfdHBtX3B3bV9kdF9pZHMsDQorCQkucG0g PSAmaW14X3RwbV9wd21fcG0sDQorCX0sDQorCS5wcm9iZQk9IHB3bV9pbXhfdHBtX3Byb2JlLA0K KwkucmVtb3ZlID0gcHdtX2lteF90cG1fcmVtb3ZlLA0KK307DQorbW9kdWxlX3BsYXRmb3JtX2Ry aXZlcihpbXhfdHBtX3B3bV9kcml2ZXIpOw0KKw0KK01PRFVMRV9BVVRIT1IoIkFuc29uIEh1YW5n IDxBbnNvbi5IdWFuZ0BueHAuY29tPiIpOw0KK01PRFVMRV9ERVNDUklQVElPTigiaS5NWCBUUE0g UFdNIERyaXZlciIpOw0KK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsNCi0tIA0KMi43LjQNCg0K