From mboxrd@z Thu Jan 1 00:00:00 1970 From: Anson Huang Subject: [PATCH V11 2/5] pwm: Add i.MX TPM PWM driver support Date: Wed, 10 Apr 2019 01:47:40 +0000 Message-ID: <1554860547-18237-3-git-send-email-Anson.Huang@nxp.com> References: <1554860547-18237-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: <1554860547-18237-1-git-send-email-Anson.Huang@nxp.com> Content-Language: en-US Content-ID: 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" , "stefan@agner.ch" , "otavio@ossystems.com.br" , Leonard Crestez , Robin Gong , "u.kleine-koenig@pengutronix.de" , "linux-pwm@vger.kernel.org" , "devicetree@vger.kernel.org" , linux-arm-kernel@lists.infradead.org Cc: dl-linux-imx List-Id: devicetree@vger.kernel.org aS5NWDdVTFAgaGFzIFRQTShMb3cgUG93ZXIgVGltZXIvUHVsc2UgV2lkdGggTW9kdWxhdGlvbiBN b2R1bGUpDQppbnNpZGUsIGl0IGNhbiBzdXBwb3J0IG11bHRpcGxlIFBXTSBjaGFubmVscywgYWxs IHRoZSBjaGFubmVscw0Kc2hhcmUgc2FtZSBjb3VudGVyIGFuZCBwZXJpb2Qgc2V0dGluZywgYnV0 IGVhY2ggY2hhbm5lbCBjYW4NCmNvbmZpZ3VyZSBpdHMgZHV0eSBhbmQgcG9sYXJpdHkgaW5kZXBl bmRlbnRseS4NCg0KVGhlcmUgYXJlIHNldmVyYWwgVFBNIG1vZHVsZXMgaW4gaS5NWDdVTFAsIHRo ZSBudW1iZXIgb2YgY2hhbm5lbHMNCmluIFRQTSBtb2R1bGVzIGFyZSBkaWZmZXJlbnQsIGl0IGNh biBiZSByZWFkIGZyb20gZWFjaCBUUE0gbW9kdWxlJ3MNClBBUkFNIHJlZ2lzdGVyLg0KDQpTaWdu ZWQtb2ZmLWJ5OiBBbnNvbiBIdWFuZyA8QW5zb24uSHVhbmdAbnhwLmNvbT4NCi0tLQ0KQ2hhbmdl cyBzaW5jZSBWMTA6DQoJLSByZW1vdmUgY2hhbm5lbCBwcml2YXRlIGRhdGEgd2hpY2ggaXMgT05M WSBmb3Igc3RvcmluZyBwb2xhcml0eSwganVzdCByZWFkIGl0IGZyb20gSFcgcmVnaXN0ZXI7DQoJ LSBpbXByb3ZlIHB3bV9pbXhfdHBtX3JvdW5kX3N0YXRlKCkgYW5kIHB3bV9pbXhfdHBtX2FwcGx5 X2h3KCkgcGFyYW1ldGVycyBzZXF1ZW5jZTsNCgktIGltcHJvdmUgY29tbWVudHMgZm9yIHBvbGFy aXR5IHNldHRpbmc7DQoJLSByZWZ1c2UgcG9sYXJpdHkgY2hhbmdlIGlmIFBXTSBpcyBhY3RpdmUu DQotLS0NCiBkcml2ZXJzL3B3bS9LY29uZmlnICAgICAgIHwgIDExICsrDQogZHJpdmVycy9wd20v TWFrZWZpbGUgICAgICB8ICAgMSArDQogZHJpdmVycy9wd20vcHdtLWlteC10cG0uYyB8IDQ0MiAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQogMyBmaWxlcyBj aGFuZ2VkLCA0NTQgaW5zZXJ0aW9ucygrKQ0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3B3 bS9wd20taW14LXRwbS5jDQoNCmRpZmYgLS1naXQgYS9kcml2ZXJzL3B3bS9LY29uZmlnIGIvZHJp dmVycy9wd20vS2NvbmZpZw0KaW5kZXggYzA1NGJkMS4uMTMxMWI1NDAgMTAwNjQ0DQotLS0gYS9k cml2ZXJzL3B3bS9LY29uZmlnDQorKysgYi9kcml2ZXJzL3B3bS9LY29uZmlnDQpAQCAtMjEwLDYg KzIxMCwxNyBAQCBjb25maWcgUFdNX0lNWDI3DQogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBh cyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQ0KIAkgIHdpbGwgYmUgY2FsbGVk IHB3bS1pbXgyNy4NCiANCitjb25maWcgUFdNX0lNWF9UUE0NCisJdHJpc3RhdGUgImkuTVggVFBN IFBXTSBzdXBwb3J0Ig0KKwlkZXBlbmRzIG9uIEFSQ0hfTVhDIHx8IENPTVBJTEVfVEVTVA0KKwlk ZXBlbmRzIG9uIEhBVkVfQ0xLICYmIEhBU19JT01FTQ0KKwloZWxwDQorCSAgR2VuZXJpYyBQV00g ZnJhbWV3b3JrIGRyaXZlciBmb3IgaS5NWDdVTFAgVFBNIG1vZHVsZSwgVFBNJ3MgZnVsbA0KKwkg IG5hbWUgaXMgTG93IFBvd2VyIFRpbWVyL1B1bHNlIFdpZHRoIE1vZHVsYXRpb24gTW9kdWxlLg0K Kw0KKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6 IHRoZSBtb2R1bGUNCisJICB3aWxsIGJlIGNhbGxlZCBwd20taW14LXRwbS4NCisNCiBjb25maWcg UFdNX0paNDc0MA0KIAl0cmlzdGF0ZSAiSW5nZW5pYyBKWjQ3eHggUFdNIHN1cHBvcnQiDQogCWRl cGVuZHMgb24gTUFDSF9JTkdFTklDDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wd20vTWFrZWZpbGUg Yi9kcml2ZXJzL3B3bS9NYWtlZmlsZQ0KaW5kZXggNDQ4ODI1ZS4uYzM2ODU5OSAxMDA2NDQNCi0t LSBhL2RyaXZlcnMvcHdtL01ha2VmaWxlDQorKysgYi9kcml2ZXJzL3B3bS9NYWtlZmlsZQ0KQEAg LTE5LDYgKzE5LDcgQEAgb2JqLSQoQ09ORklHX1BXTV9ISUJWVCkJCSs9IHB3bS1oaWJ2dC5vDQog b2JqLSQoQ09ORklHX1BXTV9JTUcpCQkrPSBwd20taW1nLm8NCiBvYmotJChDT05GSUdfUFdNX0lN WDEpCQkrPSBwd20taW14MS5vDQogb2JqLSQoQ09ORklHX1BXTV9JTVgyNykJCSs9IHB3bS1pbXgy Ny5vDQorb2JqLSQoQ09ORklHX1BXTV9JTVhfVFBNKQkrPSBwd20taW14LXRwbS5vDQogb2JqLSQo Q09ORklHX1BXTV9KWjQ3NDApCSs9IHB3bS1qejQ3NDAubw0KIG9iai0kKENPTkZJR19QV01fTFAz OTQzKQkrPSBwd20tbHAzOTQzLm8NCiBvYmotJChDT05GSUdfUFdNX0xQQzE4WFhfU0NUKQkrPSBw d20tbHBjMTh4eC1zY3Qubw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHdtL3B3bS1pbXgtdHBtLmMg Yi9kcml2ZXJzL3B3bS9wd20taW14LXRwbS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXgg MDAwMDAwMC4uOTM0OWY0Zg0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9wd20vcHdtLWlt eC10cG0uYw0KQEAgLTAsMCArMSw0NDIgQEANCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMA0KKy8qDQorICogQ29weXJpZ2h0IDIwMTgtMjAxOSBOWFAuDQorICoNCisgKiBMaW1p dGF0aW9uczoNCisgKiAtIFRoZSBUUE0gY291bnRlciBhbmQgcGVyaW9kIGNvdW50ZXIgYXJlIHNo YXJlZCBiZXR3ZWVuDQorICogICBtdWx0aXBsZSBjaGFubmVscywgc28gYWxsIGNoYW5uZWxzIHNo b3VsZCB1c2Ugc2FtZSBwZXJpb2QNCisgKiAgIHNldHRpbmdzLg0KKyAqIC0gQ2hhbmdlcyB0byBw b2xhcml0eSBjYW5ub3QgYmUgbGF0Y2hlZCBhdCB0aGUgdGltZSBvZiB0aGUNCisgKiAgIG5leHQg cGVyaW9kIHN0YXJ0Lg0KKyAqIC0gQ2hhbmdpbmcgcGVyaW9kIGFuZCBkdXR5IGN5Y2xlIHRvZ2V0 aGVyIGlzbid0IGF0b21pYywNCisgKiAgIHdpdGggdGhlIHdyb25nIHRpbWluZyBpdCBtaWdodCBo YXBwZW4gdGhhdCBhIHBlcmlvZCBpcw0KKyAqICAgcHJvZHVjZWQgd2l0aCBvbGQgZHV0eSBjeWNs ZSBidXQgbmV3IHBlcmlvZCBzZXR0aW5ncy4NCisgKi8NCisNCisjaW5jbHVkZSA8bGludXgvYml0 ZmllbGQuaD4NCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+DQorI2luY2x1ZGUgPGxpbnV4L2Ns ay5oPg0KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4NCisjaW5jbHVkZSA8bGludXgvaW8uaD4NCisj aW5jbHVkZSA8bGludXgvbG9nMi5oPg0KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCisjaW5j bHVkZSA8bGludXgvb2YuaD4NCisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPg0KKyNpbmNs dWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCisjaW5jbHVkZSA8bGludXgvcHdtLmg+DQor I2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4NCisNCisjZGVmaW5lIFBXTV9JTVhfVFBNX1BBUkFNCTB4 NA0KKyNkZWZpbmUgUFdNX0lNWF9UUE1fR0xPQkFMCTB4OA0KKyNkZWZpbmUgUFdNX0lNWF9UUE1f U0MJCTB4MTANCisjZGVmaW5lIFBXTV9JTVhfVFBNX0NOVAkJMHgxNA0KKyNkZWZpbmUgUFdNX0lN WF9UUE1fTU9ECQkweDE4DQorI2RlZmluZSBQV01fSU1YX1RQTV9DblNDKG4pCSgweDIwICsgKG4p ICogMHg4KQ0KKyNkZWZpbmUgUFdNX0lNWF9UUE1fQ25WKG4pCSgweDI0ICsgKG4pICogMHg4KQ0K Kw0KKyNkZWZpbmUgUFdNX0lNWF9UUE1fUEFSQU1fQ0hBTgkJCUdFTk1BU0soNywgMCkNCisNCisj ZGVmaW5lIFBXTV9JTVhfVFBNX1NDX1BTCQkJR0VOTUFTSygyLCAwKQ0KKyNkZWZpbmUgUFdNX0lN WF9UUE1fU0NfQ01PRAkJCUdFTk1BU0soNCwgMykNCisjZGVmaW5lIFBXTV9JTVhfVFBNX1NDX0NN T0RfSU5DX0VWRVJZX0NMSwlGSUVMRF9QUkVQKFBXTV9JTVhfVFBNX1NDX0NNT0QsIDEpDQorI2Rl ZmluZSBQV01fSU1YX1RQTV9TQ19DUFdNUwkJCUJJVCg1KQ0KKw0KKyNkZWZpbmUgUFdNX0lNWF9U UE1fQ25TQ19DSEYJQklUKDcpDQorI2RlZmluZSBQV01fSU1YX1RQTV9DblNDX01TQglCSVQoNSkN CisjZGVmaW5lIFBXTV9JTVhfVFBNX0NuU0NfTVNBCUJJVCg0KQ0KKw0KKy8qDQorICogVGhlIHJl ZmVyZW5jZSBtYW51YWwgZGVzY3JpYmVzIHRoaXMgZmllbGQgYXMgdHdvIHNlcGFyYXRlIGJpdHMu IFRoZQ0KKyAqIHNlbWFudGljIG9mIHRoZSB0d28gYml0cyBpc24ndCBvcnRob2dvbmFsIHRob3Vn aCwgc28gdGhleSBhcmUgdHJlYXRlZA0KKyAqIHRvZ2V0aGVyIGFzIGEgMi1iaXQgZmllbGQgaGVy ZS4NCisgKi8NCisjZGVmaW5lIFBXTV9JTVhfVFBNX0NuU0NfRUxTCUdFTk1BU0soMywgMikNCisj ZGVmaW5lIFBXTV9JTVhfVFBNX0NuU0NfRUxTX0lOVkVSU0VECUZJRUxEX1BSRVAoUFdNX0lNWF9U UE1fQ25TQ19FTFMsIDEpDQorI2RlZmluZSBQV01fSU1YX1RQTV9DblNDX0VMU19OT1JNQUwJRklF TERfUFJFUChQV01fSU1YX1RQTV9DblNDX0VMUywgMikNCisNCisNCisjZGVmaW5lIFBXTV9JTVhf VFBNX01PRF9XSURUSAkxNg0KKyNkZWZpbmUgUFdNX0lNWF9UUE1fTU9EX01PRAlHRU5NQVNLKFBX TV9JTVhfVFBNX01PRF9XSURUSCAtIDEsIDApDQorDQorc3RydWN0IGlteF90cG1fcHdtX2NoaXAg ew0KKwlzdHJ1Y3QgcHdtX2NoaXAgY2hpcDsNCisJc3RydWN0IGNsayAqY2xrOw0KKwl2b2lkIF9f aW9tZW0gKmJhc2U7DQorCXN0cnVjdCBtdXRleCBsb2NrOw0KKwl1MzIgdXNlcl9jb3VudDsNCisJ dTMyIGVuYWJsZV9jb3VudDsNCisJdTMyIHJlYWxfcGVyaW9kOw0KK307DQorDQorc3RydWN0IGlt eF90cG1fcHdtX3BhcmFtIHsNCisJdTggcHJlc2NhbGU7DQorCXUzMiBtb2Q7DQorCXUzMiB2YWw7 DQorfTsNCisNCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpbXhfdHBtX3B3bV9jaGlwICp0b19pbXhf dHBtX3B3bV9jaGlwKHN0cnVjdCBwd21fY2hpcCAqY2hpcCkNCit7DQorCXJldHVybiBjb250YWlu ZXJfb2YoY2hpcCwgc3RydWN0IGlteF90cG1fcHdtX2NoaXAsIGNoaXApOw0KK30NCisNCitzdGF0 aWMgaW50IHB3bV9pbXhfdHBtX3JvdW5kX3N0YXRlKHN0cnVjdCBwd21fY2hpcCAqY2hpcCwNCisJ CQkJICAgc3RydWN0IGlteF90cG1fcHdtX3BhcmFtICpwLA0KKwkJCQkgICBzdHJ1Y3QgcHdtX3N0 YXRlICpyZWFsX3N0YXRlLA0KKwkJCQkgICBzdHJ1Y3QgcHdtX3N0YXRlICpzdGF0ZSkNCit7DQor CXN0cnVjdCBpbXhfdHBtX3B3bV9jaGlwICp0cG0gPSB0b19pbXhfdHBtX3B3bV9jaGlwKGNoaXAp Ow0KKwl1MzIgcmF0ZSwgcHJlc2NhbGUsIHBlcmlvZF9jb3VudCwgY2xvY2tfdW5pdDsNCisJdTY0 IHRtcDsNCisNCisJcmF0ZSA9IGNsa19nZXRfcmF0ZSh0cG0tPmNsayk7DQorCXRtcCA9ICh1NjQp c3RhdGUtPnBlcmlvZCAqIHJhdGU7DQorCWNsb2NrX3VuaXQgPSBESVZfUk9VTkRfQ0xPU0VTVF9V TEwodG1wLCBOU0VDX1BFUl9TRUMpOw0KKwlpZiAoY2xvY2tfdW5pdCA8PSBQV01fSU1YX1RQTV9N T0RfTU9EKQ0KKwkJcHJlc2NhbGUgPSAwOw0KKwllbHNlDQorCQlwcmVzY2FsZSA9IGlsb2cyKGNs b2NrX3VuaXQpICsgMSAtIFBXTV9JTVhfVFBNX01PRF9XSURUSDsNCisNCisJaWYgKCghRklFTERf RklUKFBXTV9JTVhfVFBNX1NDX1BTLCBwcmVzY2FsZSkpKQ0KKwkJcmV0dXJuIC1FUkFOR0U7DQor CXAtPnByZXNjYWxlID0gcHJlc2NhbGU7DQorDQorCXBlcmlvZF9jb3VudCA9IChjbG9ja191bml0 ICsgKCgxIDw8IHByZXNjYWxlKSA+PiAxKSkgPj4gcHJlc2NhbGU7DQorCXAtPm1vZCA9IHBlcmlv ZF9jb3VudDsNCisNCisJLyogY2FsY3VsYXRlIHJlYWwgcGVyaW9kIEhXIGNhbiBzdXBwb3J0ICov DQorCXRtcCA9ICh1NjQpcGVyaW9kX2NvdW50IDw8IHByZXNjYWxlOw0KKwl0bXAgKj0gTlNFQ19Q RVJfU0VDOw0KKwlyZWFsX3N0YXRlLT5wZXJpb2QgPSBESVZfUk9VTkRfQ0xPU0VTVF9VTEwodG1w LCByYXRlKTsNCisNCisJLyoNCisJICogaWYgZXZlbnR1YWxseSB0aGUgUFdNIG91dHB1dCBpcyBp bmFjdGl2ZSwgZWl0aGVyDQorCSAqIGR1dHkgY3ljbGUgaXMgMCBvciBzdGF0dXMgaXMgZGlzYWJs ZWQsIG5lZWQgdG8NCisJICogbWFrZSBzdXJlIHRoZSBvdXRwdXQgcGluIGlzIGluYWN0aXZlLg0K KwkgKi8NCisJaWYgKCFzdGF0ZS0+ZW5hYmxlZCkNCisJCXJlYWxfc3RhdGUtPmR1dHlfY3ljbGUg PSAwOw0KKwllbHNlDQorCQlyZWFsX3N0YXRlLT5kdXR5X2N5Y2xlID0gc3RhdGUtPmR1dHlfY3lj bGU7DQorDQorCXRtcCA9ICh1NjQpcC0+bW9kICogcmVhbF9zdGF0ZS0+ZHV0eV9jeWNsZTsNCisJ cC0+dmFsID0gRElWX1JPVU5EX0NMT1NFU1RfVUxMKHRtcCwgcmVhbF9zdGF0ZS0+cGVyaW9kKTsN CisNCisJcmVhbF9zdGF0ZS0+cG9sYXJpdHkgPSBzdGF0ZS0+cG9sYXJpdHk7DQorCXJlYWxfc3Rh dGUtPmVuYWJsZWQgPSBzdGF0ZS0+ZW5hYmxlZDsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0 YXRpYyB2b2lkIHB3bV9pbXhfdHBtX2dldF9zdGF0ZShzdHJ1Y3QgcHdtX2NoaXAgKmNoaXAsDQor CQkJCSAgc3RydWN0IHB3bV9kZXZpY2UgKnB3bSwNCisJCQkJICBzdHJ1Y3QgcHdtX3N0YXRlICpz dGF0ZSkNCit7DQorCXN0cnVjdCBpbXhfdHBtX3B3bV9jaGlwICp0cG0gPSB0b19pbXhfdHBtX3B3 bV9jaGlwKGNoaXApOw0KKwl1MzIgcmF0ZSwgdmFsLCBwcmVzY2FsZTsNCisJdTY0IHRtcDsNCisN CisJLyogZ2V0IHBlcmlvZCAqLw0KKwlzdGF0ZS0+cGVyaW9kID0gdHBtLT5yZWFsX3BlcmlvZDsN CisNCisJLyogZ2V0IGR1dHkgY3ljbGUgKi8NCisJcmF0ZSA9IGNsa19nZXRfcmF0ZSh0cG0tPmNs ayk7DQorCXZhbCA9IHJlYWRsKHRwbS0+YmFzZSArIFBXTV9JTVhfVFBNX1NDKTsNCisJcHJlc2Nh bGUgPSBGSUVMRF9HRVQoUFdNX0lNWF9UUE1fU0NfUFMsIHZhbCk7DQorCXRtcCA9IHJlYWRsKHRw bS0+YmFzZSArIFBXTV9JTVhfVFBNX0NuVihwd20tPmh3cHdtKSk7DQorCXRtcCA9ICh0bXAgPDwg cHJlc2NhbGUpICogTlNFQ19QRVJfU0VDOw0KKwlzdGF0ZS0+ZHV0eV9jeWNsZSA9IERJVl9ST1VO RF9DTE9TRVNUX1VMTCh0bXAsIHJhdGUpOw0KKw0KKwkvKiBnZXQgcG9sYXJpdHkgKi8NCisJdmFs ID0gcmVhZGwodHBtLT5iYXNlICsgUFdNX0lNWF9UUE1fQ25TQyhwd20tPmh3cHdtKSk7DQorCWlm ICgodmFsICYgUFdNX0lNWF9UUE1fQ25TQ19FTFMpID09IFBXTV9JTVhfVFBNX0NuU0NfRUxTX0lO VkVSU0VEKQ0KKwkJc3RhdGUtPnBvbGFyaXR5ID0gUFdNX1BPTEFSSVRZX0lOVkVSU0VEOw0KKwll bHNlDQorCQkvKg0KKwkJICogQXNzdW1lIHJlc2VydmVkIHZhbHVlcyAoMmIwMCBhbmQgMmIxMSkg dG8geWllbGQNCisJCSAqIG5vcm1hbCBwb2xhcml0eS4NCisJCSAqLw0KKwkJc3RhdGUtPnBvbGFy aXR5ID0gUFdNX1BPTEFSSVRZX05PUk1BTDsNCisNCisJLyogZ2V0IGNoYW5uZWwgc3RhdHVzICov DQorCXN0YXRlLT5lbmFibGVkID0gRklFTERfR0VUKFBXTV9JTVhfVFBNX0NuU0NfRUxTLCB2YWwp ID8gdHJ1ZSA6IGZhbHNlOw0KK30NCisNCisvKiB0aGlzIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRv IGJlIGNhbGxlZCB3aXRoIG11dGV4IGhvbGQgKi8NCitzdGF0aWMgaW50IHB3bV9pbXhfdHBtX2Fw cGx5X2h3KHN0cnVjdCBwd21fY2hpcCAqY2hpcCwNCisJCQkJc3RydWN0IGlteF90cG1fcHdtX3Bh cmFtICpwLA0KKwkJCQlzdHJ1Y3QgcHdtX3N0YXRlICpzdGF0ZSwNCisJCQkJc3RydWN0IHB3bV9k ZXZpY2UgKnB3bSkNCit7DQorCXN0cnVjdCBpbXhfdHBtX3B3bV9jaGlwICp0cG0gPSB0b19pbXhf dHBtX3B3bV9jaGlwKGNoaXApOw0KKwlib29sIHBlcmlvZF91cGRhdGUgPSBmYWxzZTsNCisJYm9v bCBkdXR5X3VwZGF0ZSA9IGZhbHNlOw0KKwl1MzIgdmFsLCBjbW9kLCBjdXJfcHJlc2NhbGU7DQor CXVuc2lnbmVkIGxvbmcgdGltZW91dDsNCisJc3RydWN0IHB3bV9zdGF0ZSBjOw0KKw0KKwlpZiAo c3RhdGUtPnBlcmlvZCAhPSB0cG0tPnJlYWxfcGVyaW9kKSB7DQorCQkvKg0KKwkJICogVFBNIGNv dW50ZXIgaXMgc2hhcmVkIGJ5IG11bHRpcGxlIGNoYW5uZWxzLCBzbw0KKwkJICogcHJlc2NhbGUg YW5kIHBlcmlvZCBjYW4gTk9UIGJlIG1vZGlmaWVkIHdoZW4NCisJCSAqIHRoZXJlIGFyZSBtdWx0 aXBsZSBjaGFubmVscyBpbiB1c2Ugd2l0aCBkaWZmZXJlbnQNCisJCSAqIHBlcmlvZCBzZXR0aW5n cy4NCisJCSAqLw0KKwkJaWYgKHRwbS0+dXNlcl9jb3VudCA+IDEpDQorCQkJcmV0dXJuIC1FQlVT WTsNCisNCisJCXZhbCA9IHJlYWRsKHRwbS0+YmFzZSArIFBXTV9JTVhfVFBNX1NDKTsNCisJCWNt b2QgPSBGSUVMRF9HRVQoUFdNX0lNWF9UUE1fU0NfQ01PRCwgdmFsKTsNCisJCWN1cl9wcmVzY2Fs ZSA9IEZJRUxEX0dFVChQV01fSU1YX1RQTV9TQ19QUywgdmFsKTsNCisJCWlmIChjbW9kICYmIGN1 cl9wcmVzY2FsZSAhPSBwLT5wcmVzY2FsZSkNCisJCQlyZXR1cm4gLUVCVVNZOw0KKw0KKwkJLyog c2V0IFRQTSBjb3VudGVyIHByZXNjYWxlICovDQorCQl2YWwgJj0gflBXTV9JTVhfVFBNX1NDX1BT Ow0KKwkJdmFsIHw9IEZJRUxEX1BSRVAoUFdNX0lNWF9UUE1fU0NfUFMsIHAtPnByZXNjYWxlKTsN CisJCXdyaXRlbCh2YWwsIHRwbS0+YmFzZSArIFBXTV9JTVhfVFBNX1NDKTsNCisNCisJCS8qDQor CQkgKiBzZXQgcGVyaW9kIGNvdW50Og0KKwkJICogaWYgdGhlIFBXTSBpcyBkaXNhYmxlZCAoQ01P RFsxOjBdID0gMmIwMCksIHRoZW4gTU9EIHJlZ2lzdGVyDQorCQkgKiBpcyB1cGRhdGVkIHdoZW4g TU9EIHJlZ2lzdGVyIGlzIHdyaXR0ZW4uDQorCQkgKg0KKwkJICogaWYgdGhlIFBXTSBpcyBlbmFi bGVkIChDTU9EWzE6MF0g4omgIDJiMDApLCB0aGUgcGVyaW9kIGxlbmd0aA0KKwkJICogaXMgbGF0 Y2hlZCBpbnRvIGhhcmR3YXJlIHdoZW4gdGhlIG5leHQgcGVyaW9kIHN0YXJ0cy4NCisJCSAqLw0K KwkJd3JpdGVsKHAtPm1vZCwgdHBtLT5iYXNlICsgUFdNX0lNWF9UUE1fTU9EKTsNCisJCXRwbS0+ cmVhbF9wZXJpb2QgPSBzdGF0ZS0+cGVyaW9kOw0KKwkJcGVyaW9kX3VwZGF0ZSA9IHRydWU7DQor CX0NCisNCisJcHdtX2lteF90cG1fZ2V0X3N0YXRlKGNoaXAsIHB3bSwgJmMpOw0KKw0KKwkvKiBw b2xhcml0eSBpcyBOT1QgYWxsb3dlZCB0byBiZSBjaGFuZ2VkIGlmIFBXTSBpcyBhY3RpdmUgKi8N CisJaWYgKGMuZW5hYmxlZCAmJiBjLnBvbGFyaXR5ICE9IHN0YXRlLT5wb2xhcml0eSkNCisJCXJl dHVybiAtRUJVU1k7DQorDQorCWlmIChzdGF0ZS0+ZHV0eV9jeWNsZSAhPSBjLmR1dHlfY3ljbGUp IHsNCisJCS8qDQorCQkgKiBzZXQgY2hhbm5lbCB2YWx1ZToNCisJCSAqIGlmIHRoZSBQV00gaXMg ZGlzYWJsZWQgKENNT0RbMTowXSA9IDJiMDApLCB0aGVuIENuViByZWdpc3Rlcg0KKwkJICogaXMg dXBkYXRlZCB3aGVuIENuViByZWdpc3RlciBpcyB3cml0dGVuLg0KKwkJICoNCisJCSAqIGlmIHRo ZSBQV00gaXMgZW5hYmxlZCAoQ01PRFsxOjBdIOKJoCAyYjAwKSwgdGhlIGR1dHkgbGVuZ3RoDQor CQkgKiBpcyBsYXRjaGVkIGludG8gaGFyZHdhcmUgd2hlbiB0aGUgbmV4dCBwZXJpb2Qgc3RhcnRz Lg0KKwkJICovDQorCQl3cml0ZWwocC0+dmFsLCB0cG0tPmJhc2UgKyBQV01fSU1YX1RQTV9DblYo cHdtLT5od3B3bSkpOw0KKwkJZHV0eV91cGRhdGUgPSB0cnVlOw0KKwl9DQorDQorCS8qIG1ha2Ug c3VyZSBNT0QgJiBDblYgcmVnaXN0ZXJzIGFyZSB1cGRhdGVkICovDQorCWlmIChwZXJpb2RfdXBk YXRlIHx8IGR1dHlfdXBkYXRlKSB7DQorCQl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2pp ZmZpZXModHBtLT5yZWFsX3BlcmlvZCAvDQorCQkJCQkJICAgICBOU0VDX1BFUl9NU0VDICsgMSk7 DQorCQl3aGlsZSAocmVhZGwodHBtLT5iYXNlICsgUFdNX0lNWF9UUE1fTU9EKSAhPSBwLT5tb2QN CisJCSAgICAgICB8fCByZWFkbCh0cG0tPmJhc2UgKyBQV01fSU1YX1RQTV9DblYocHdtLT5od3B3 bSkpDQorCQkgICAgICAgIT0gcC0+dmFsKSB7DQorCQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywg dGltZW91dCkpDQorCQkJCXJldHVybiAtRVRJTUU7DQorCQkJY3B1X3JlbGF4KCk7DQorCQl9DQor CX0NCisNCisJLyoNCisJICogcG9sYXJpdHkgc2V0dGluZ3Mgd2lsbCBlbmFibGVkL2Rpc2FibGUg b3V0cHV0IHN0YXR1cw0KKwkgKiBpbW1lZGlhdGVseSwgc28gaWYgdGhlIGNoYW5uZWwgaXMgZGlz YWJsZWQsIG5lZWQgdG8NCisJICogbWFrZSBzdXJlIE1TQS9NU0IvRUxTIGFyZSBzZXQgdG8gMCB3 aGljaCBtZWFucyBjaGFubmVsDQorCSAqIGRpc2FibGVkLg0KKwkgKi8NCisJdmFsID0gcmVhZGwo dHBtLT5iYXNlICsgUFdNX0lNWF9UUE1fQ25TQyhwd20tPmh3cHdtKSk7DQorCXZhbCAmPSB+KFBX TV9JTVhfVFBNX0NuU0NfRUxTIHwgUFdNX0lNWF9UUE1fQ25TQ19NU0EgfA0KKwkJIFBXTV9JTVhf VFBNX0NuU0NfTVNCKTsNCisJaWYgKHN0YXRlLT5lbmFibGVkKSB7DQorCQkvKg0KKwkJICogc2V0 IHBvbGFyaXR5IChmb3IgZWRnZS1hbGlnbmVkIFBXTSBtb2RlcykNCisJCSAqDQorCQkgKiBFTFNb MTowXSA9IDJiMTAgeWllbGRzIG5vcm1hbCBwb2xhcml0eSBiZWhhdmlvdXIsDQorCQkgKiBFTFNb MTowXSA9IDJiMDEgeWllbGRzIGludmVyc2VkIHBvbGFyaXR5Lg0KKwkJICogVGhlIG90aGVyIHZh bHVlcyBhcmUgcmVzZXJ2ZWQuDQorCQkgKi8NCisJCXZhbCB8PSBQV01fSU1YX1RQTV9DblNDX01T QjsNCisJCXZhbCB8PSAoc3RhdGUtPnBvbGFyaXR5ID09IFBXTV9QT0xBUklUWV9OT1JNQUwpID8N CisJCQlQV01fSU1YX1RQTV9DblNDX0VMU19OT1JNQUwgOg0KKwkJCVBXTV9JTVhfVFBNX0NuU0Nf RUxTX0lOVkVSU0VEOw0KKwl9DQorCXdyaXRlbCh2YWwsIHRwbS0+YmFzZSArIFBXTV9JTVhfVFBN X0NuU0MocHdtLT5od3B3bSkpOw0KKw0KKwkvKiBjb250cm9sIHRoZSBjb3VudGVyIHN0YXR1cyAq Lw0KKwlpZiAoc3RhdGUtPmVuYWJsZWQgIT0gYy5lbmFibGVkKSB7DQorCQl2YWwgPSByZWFkbCh0 cG0tPmJhc2UgKyBQV01fSU1YX1RQTV9TQyk7DQorCQlpZiAoc3RhdGUtPmVuYWJsZWQpIHsNCisJ CQlpZiAoKyt0cG0tPmVuYWJsZV9jb3VudCA9PSAxKQ0KKwkJCQl2YWwgfD0gUFdNX0lNWF9UUE1f U0NfQ01PRF9JTkNfRVZFUllfQ0xLOw0KKwkJfSBlbHNlIHsNCisJCQlpZiAoLS10cG0tPmVuYWJs ZV9jb3VudCA9PSAwKQ0KKwkJCQl2YWwgJj0gflBXTV9JTVhfVFBNX1NDX0NNT0Q7DQorCQl9DQor CQl3cml0ZWwodmFsLCB0cG0tPmJhc2UgKyBQV01fSU1YX1RQTV9TQyk7DQorCX0NCisNCisJcmV0 dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgcHdtX2lteF90cG1fYXBwbHkoc3RydWN0IHB3bV9j aGlwICpjaGlwLA0KKwkJCSAgICAgc3RydWN0IHB3bV9kZXZpY2UgKnB3bSwNCisJCQkgICAgIHN0 cnVjdCBwd21fc3RhdGUgKnN0YXRlKQ0KK3sNCisJc3RydWN0IGlteF90cG1fcHdtX2NoaXAgKnRw bSA9IHRvX2lteF90cG1fcHdtX2NoaXAoY2hpcCk7DQorCXN0cnVjdCBpbXhfdHBtX3B3bV9wYXJh bSBwYXJhbTsNCisJc3RydWN0IHB3bV9zdGF0ZSByZWFsX3N0YXRlOw0KKwlpbnQgcmV0Ow0KKw0K KwlyZXQgPSBwd21faW14X3RwbV9yb3VuZF9zdGF0ZShjaGlwLCAmcGFyYW0sICZyZWFsX3N0YXRl LCBzdGF0ZSk7DQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwltdXRleF9sb2NrKCZ0 cG0tPmxvY2spOw0KKwlyZXQgPSBwd21faW14X3RwbV9hcHBseV9odyhjaGlwLCAmcGFyYW0sICZy ZWFsX3N0YXRlLCBwd20pOw0KKwltdXRleF91bmxvY2soJnRwbS0+bG9jayk7DQorDQorCXJldHVy biByZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgcHdtX2lteF90cG1fcmVxdWVzdChzdHJ1Y3QgcHdt X2NoaXAgKmNoaXAsIHN0cnVjdCBwd21fZGV2aWNlICpwd20pDQorew0KKwlzdHJ1Y3QgaW14X3Rw bV9wd21fY2hpcCAqdHBtID0gdG9faW14X3RwbV9wd21fY2hpcChjaGlwKTsNCisNCisJbXV0ZXhf bG9jaygmdHBtLT5sb2NrKTsNCisJdHBtLT51c2VyX2NvdW50Kys7DQorCW11dGV4X3VubG9jaygm dHBtLT5sb2NrKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIHB3bV9pbXhf dHBtX2ZyZWUoc3RydWN0IHB3bV9jaGlwICpjaGlwLCBzdHJ1Y3QgcHdtX2RldmljZSAqcHdtKQ0K K3sNCisJc3RydWN0IGlteF90cG1fcHdtX2NoaXAgKnRwbSA9IHRvX2lteF90cG1fcHdtX2NoaXAo Y2hpcCk7DQorDQorCW11dGV4X2xvY2soJnRwbS0+bG9jayk7DQorCXRwbS0+dXNlcl9jb3VudC0t Ow0KKwltdXRleF91bmxvY2soJnRwbS0+bG9jayk7DQorfQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgcHdtX29wcyBpbXhfdHBtX3B3bV9vcHMgPSB7DQorCS5yZXF1ZXN0ID0gcHdtX2lteF90cG1f cmVxdWVzdCwNCisJLmZyZWUgPSBwd21faW14X3RwbV9mcmVlLA0KKwkuZ2V0X3N0YXRlID0gcHdt X2lteF90cG1fZ2V0X3N0YXRlLA0KKwkuYXBwbHkgPSBwd21faW14X3RwbV9hcHBseSwNCisJLm93 bmVyID0gVEhJU19NT0RVTEUsDQorfTsNCisNCitzdGF0aWMgaW50IHB3bV9pbXhfdHBtX3Byb2Jl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQorew0KKwlzdHJ1Y3QgaW14X3RwbV9wd21f Y2hpcCAqdHBtOw0KKwlpbnQgcmV0Ow0KKwl1MzIgdmFsOw0KKw0KKwl0cG0gPSBkZXZtX2t6YWxs b2MoJnBkZXYtPmRldiwgc2l6ZW9mKCp0cG0pLCBHRlBfS0VSTkVMKTsNCisJaWYgKCF0cG0pDQor CQlyZXR1cm4gLUVOT01FTTsNCisNCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgdHBtKTsN CisNCisJdHBtLT5iYXNlID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDAp Ow0KKwlpZiAoSVNfRVJSKHRwbS0+YmFzZSkpDQorCQlyZXR1cm4gUFRSX0VSUih0cG0tPmJhc2Up Ow0KKw0KKwl0cG0tPmNsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsNCisJaWYg KElTX0VSUih0cG0tPmNsaykpIHsNCisJCXJldCA9IFBUUl9FUlIodHBtLT5jbGspOw0KKwkJaWYg KHJldCAhPSAtRVBST0JFX0RFRkVSKQ0KKwkJCWRldl9lcnIoJnBkZXYtPmRldiwNCisJCQkJImZh aWxlZCB0byBnZXQgUFdNIGNsb2NrOiAlZFxuIiwgcmV0KTsNCisJCXJldHVybiByZXQ7DQorCX0N CisNCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHRwbS0+Y2xrKTsNCisJaWYgKHJldCkgew0K KwkJZGV2X2VycigmcGRldi0+ZGV2LA0KKwkJCSJmYWlsZWQgdG8gcHJlcGFyZSBvciBlbmFibGUg Y2xvY2s6ICVkXG4iLCByZXQpOw0KKwkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwl0cG0tPmNoaXAu ZGV2ID0gJnBkZXYtPmRldjsNCisJdHBtLT5jaGlwLm9wcyA9ICZpbXhfdHBtX3B3bV9vcHM7DQor CXRwbS0+Y2hpcC5iYXNlID0gLTE7DQorCXRwbS0+Y2hpcC5vZl94bGF0ZSA9IG9mX3B3bV94bGF0 ZV93aXRoX2ZsYWdzOw0KKwl0cG0tPmNoaXAub2ZfcHdtX25fY2VsbHMgPSAzOw0KKw0KKwkvKiBn ZXQgbnVtYmVyIG9mIGNoYW5uZWxzICovDQorCXZhbCA9IHJlYWRsKHRwbS0+YmFzZSArIFBXTV9J TVhfVFBNX1BBUkFNKTsNCisJdHBtLT5jaGlwLm5wd20gPSBGSUVMRF9HRVQoUFdNX0lNWF9UUE1f UEFSQU1fQ0hBTiwgdmFsKTsNCisNCisJbXV0ZXhfaW5pdCgmdHBtLT5sb2NrKTsNCisNCisJcmV0 ID0gcHdtY2hpcF9hZGQoJnRwbS0+Y2hpcCk7DQorCWlmIChyZXQpIHsNCisJCWRldl9lcnIoJnBk ZXYtPmRldiwgImZhaWxlZCB0byBhZGQgUFdNIGNoaXA6ICVkXG4iLCByZXQpOw0KKwkJY2xrX2Rp c2FibGVfdW5wcmVwYXJlKHRwbS0+Y2xrKTsNCisJfQ0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisN CitzdGF0aWMgaW50IHB3bV9pbXhfdHBtX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQ0KK3sNCisJc3RydWN0IGlteF90cG1fcHdtX2NoaXAgKnRwbSA9IHBsYXRmb3JtX2dldF9k cnZkYXRhKHBkZXYpOw0KKwlpbnQgcmV0ID0gcHdtY2hpcF9yZW1vdmUoJnRwbS0+Y2hpcCk7DQor DQorCWNsa19kaXNhYmxlX3VucHJlcGFyZSh0cG0tPmNsayk7DQorDQorCXJldHVybiByZXQ7DQor fQ0KKw0KK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgcHdtX2lteF90cG1fc3VzcGVuZChzdHJ1 Y3QgZGV2aWNlICpkZXYpDQorew0KKwlzdHJ1Y3QgaW14X3RwbV9wd21fY2hpcCAqdHBtID0gZGV2 X2dldF9kcnZkYXRhKGRldik7DQorDQorCWlmICh0cG0tPmVuYWJsZV9jb3VudCA+IDApDQorCQly ZXR1cm4gLUVCVVNZOw0KKw0KKwljbGtfZGlzYWJsZV91bnByZXBhcmUodHBtLT5jbGspOw0KKw0K KwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBfX21heWJlX3VudXNlZCBwd21faW14X3Rw bV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQ0KK3sNCisJc3RydWN0IGlteF90cG1fcHdtX2No aXAgKnRwbSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KKwlpbnQgcmV0ID0gMDsNCisNCisJcmV0 ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHRwbS0+Y2xrKTsNCisJaWYgKHJldCkNCisJCWRldl9lcnIo ZGV2LA0KKwkJCSJmYWlsZWQgdG8gcHJlcGFyZSBvciBlbmFibGUgY2xvY2s6ICVkXG4iLA0KKwkJ CXJldCk7DQorDQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBTSU1QTEVfREVWX1BNX09Q UyhpbXhfdHBtX3B3bV9wbSwNCisJCQkgcHdtX2lteF90cG1fc3VzcGVuZCwgcHdtX2lteF90cG1f cmVzdW1lKTsNCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBpbXhfdHBtX3B3 bV9kdF9pZHNbXSA9IHsNCisJeyAuY29tcGF0aWJsZSA9ICJmc2wsaW14N3VscC1wd20iLCB9LA0K Kwl7IC8qIHNlbnRpbmVsICovIH0NCit9Ow0KK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGlteF90 cG1fcHdtX2R0X2lkcyk7DQorDQorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaW14X3Rw bV9wd21fZHJpdmVyID0gew0KKwkuZHJpdmVyID0gew0KKwkJLm5hbWUgPSAiaW14N3VscC10cG0t cHdtIiwNCisJCS5vZl9tYXRjaF90YWJsZSA9IGlteF90cG1fcHdtX2R0X2lkcywNCisJCS5wbSA9 ICZpbXhfdHBtX3B3bV9wbSwNCisJfSwNCisJLnByb2JlCT0gcHdtX2lteF90cG1fcHJvYmUsDQor CS5yZW1vdmUgPSBwd21faW14X3RwbV9yZW1vdmUsDQorfTsNCittb2R1bGVfcGxhdGZvcm1fZHJp dmVyKGlteF90cG1fcHdtX2RyaXZlcik7DQorDQorTU9EVUxFX0FVVEhPUigiQW5zb24gSHVhbmcg PEFuc29uLkh1YW5nQG54cC5jb20+Iik7DQorTU9EVUxFX0RFU0NSSVBUSU9OKCJpLk1YIFRQTSBQ V00gRHJpdmVyIik7DQorTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOw0KLS0gDQoyLjcuNA0KDQo=