From mboxrd@z Thu Jan 1 00:00:00 1970 From: Anson Huang Subject: [PATCH V8 2/5] pwm: Add i.MX TPM PWM driver support Date: Thu, 21 Mar 2019 00:47:57 +0000 Message-ID: <1553128960-17923-3-git-send-email-Anson.Huang@nxp.com> References: <1553128960-17923-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: <1553128960-17923-1-git-send-email-Anson.Huang@nxp.com> Content-Language: en-US Content-ID: <20DCE4BB91073B45B512D583AAFFA8C8@eurprd04.prod.outlook.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.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 , "schnitzeltony@gmail.com" , "jan.tuerk@emtrion.com" , Robin Gong , "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 ZWQtb2ZmLWJ5OiBBbnNvbiBIdWFuZyA8QW5zb24uSHVhbmdAbnhwLmNvbT4NCi0tLQ0KY2hhbmdl cyBzaW5jZSBWNzoNCgktIGltcHJvdmUgcHJlc2NhbGUgY29tcHV0YXRpb247DQoJLSBpbXByb3Zl IHNvbWUgcmVnaXN0ZXIgZGVmaW5pdGlvbnM7DQoJLSByZW1vdmUgdW5uZWNlc3NhcnkgY2hlY2sg Zm9yIHBlcmlvZCBjb3VudCBjaGVjazsNCgktIGltcHJvdmUgZnVuY3Rpb24gcGFyYW1ldGVyIHRv IHVzZSBwb2ludGVyIGluc3RlYWQgb2YgdmFsdWU7DQotLS0NCiBkcml2ZXJzL3B3bS9LY29uZmln ICAgICAgIHwgIDExICsrDQogZHJpdmVycy9wd20vTWFrZWZpbGUgICAgICB8ICAgMSArDQogZHJp dmVycy9wd20vcHdtLWlteC10cG0uYyB8IDQzNSArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrDQogMyBmaWxlcyBjaGFuZ2VkLCA0NDcgaW5zZXJ0aW9ucygrKQ0K IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3B3bS9wd20taW14LXRwbS5jDQoNCmRpZmYgLS1n aXQgYS9kcml2ZXJzL3B3bS9LY29uZmlnIGIvZHJpdmVycy9wd20vS2NvbmZpZw0KaW5kZXggNTRm ODIzOC4uM2VhMDM5MSAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvcHdtL0tjb25maWcNCisrKyBiL2Ry aXZlcnMvcHdtL0tjb25maWcNCkBAIC0yMTAsNiArMjEwLDE3IEBAIGNvbmZpZyBQV01fSU1YMjcN CiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0 aGUgbW9kdWxlDQogCSAgd2lsbCBiZSBjYWxsZWQgcHdtLWlteDI3Lg0KIA0KK2NvbmZpZyBQV01f SU1YX1RQTQ0KKwl0cmlzdGF0ZSAiaS5NWCBUUE0gUFdNIHN1cHBvcnQiDQorCWRlcGVuZHMgb24g QVJDSF9NWEMgfHwgQ09NUElMRV9URVNUDQorCWRlcGVuZHMgb24gSEFWRV9DTEsgJiYgSEFTX0lP TUVNDQorCWhlbHANCisJICBHZW5lcmljIFBXTSBmcmFtZXdvcmsgZHJpdmVyIGZvciBpLk1YN1VM UCBUUE0gbW9kdWxlLCBUUE0ncyBmdWxsDQorCSAgbmFtZSBpcyBMb3cgUG93ZXIgVGltZXIvUHVs c2UgV2lkdGggTW9kdWxhdGlvbiBNb2R1bGUuDQorDQorCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZl ciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQ0KKwkgIHdpbGwgYmUgY2Fs bGVkIHB3bS1pbXgtdHBtLg0KKw0KIGNvbmZpZyBQV01fSlo0NzQwDQogCXRyaXN0YXRlICJJbmdl bmljIEpaNDd4eCBQV00gc3VwcG9ydCINCiAJZGVwZW5kcyBvbiBNQUNIX0lOR0VOSUMNCmRpZmYg LS1naXQgYS9kcml2ZXJzL3B3bS9NYWtlZmlsZSBiL2RyaXZlcnMvcHdtL01ha2VmaWxlDQppbmRl eCA0NDg4MjVlLi5jMzY4NTk5IDEwMDY0NA0KLS0tIGEvZHJpdmVycy9wd20vTWFrZWZpbGUNCisr KyBiL2RyaXZlcnMvcHdtL01ha2VmaWxlDQpAQCAtMTksNiArMTksNyBAQCBvYmotJChDT05GSUdf UFdNX0hJQlZUKQkJKz0gcHdtLWhpYnZ0Lm8NCiBvYmotJChDT05GSUdfUFdNX0lNRykJCSs9IHB3 bS1pbWcubw0KIG9iai0kKENPTkZJR19QV01fSU1YMSkJCSs9IHB3bS1pbXgxLm8NCiBvYmotJChD T05GSUdfUFdNX0lNWDI3KQkJKz0gcHdtLWlteDI3Lm8NCitvYmotJChDT05GSUdfUFdNX0lNWF9U UE0pCSs9IHB3bS1pbXgtdHBtLm8NCiBvYmotJChDT05GSUdfUFdNX0paNDc0MCkJKz0gcHdtLWp6 NDc0MC5vDQogb2JqLSQoQ09ORklHX1BXTV9MUDM5NDMpCSs9IHB3bS1scDM5NDMubw0KIG9iai0k KENPTkZJR19QV01fTFBDMThYWF9TQ1QpCSs9IHB3bS1scGMxOHh4LXNjdC5vDQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9wd20vcHdtLWlteC10cG0uYyBiL2RyaXZlcnMvcHdtL3B3bS1pbXgtdHBtLmMN Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi4wZWZlYTM2DQotLS0gL2Rldi9u dWxsDQorKysgYi9kcml2ZXJzL3B3bS9wd20taW14LXRwbS5jDQpAQCAtMCwwICsxLDQzNSBAQA0K Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQorLyoNCisgKiBDb3B5cmlnaHQg MjAxOC0yMDE5IE5YUC4NCisgKg0KKyAqIExpbWl0YXRpb25zOg0KKyAqIC0gVGhlIFRQTSBjb3Vu dGVyIGFuZCBwZXJpb2QgY291bnRlciBhcmUgc2hhcmVkIGJldHdlZW4NCisgKiAgIG11bHRpcGxl IGNoYW5uZWxzLCBzbyBhbGwgY2hhbm5lbHMgc2hvdWxkIHVzZSBzYW1lIHBlcmlvZA0KKyAqICAg c2V0dGluZ3MuDQorICovDQorDQorI2luY2x1ZGUgPGxpbnV4L2JpdGZpZWxkLmg+DQorI2luY2x1 ZGUgPGxpbnV4L2JpdG9wcy5oPg0KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4NCisjaW5jbHVkZSA8 bGludXgvZXJyLmg+DQorI2luY2x1ZGUgPGxpbnV4L2lvLmg+DQorI2luY2x1ZGUgPGxpbnV4L2xv ZzIuaD4NCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQorI2luY2x1ZGUgPGxpbnV4L29mLmg+ DQorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4NCisjaW5jbHVkZSA8bGludXgvcGxhdGZv cm1fZGV2aWNlLmg+DQorI2luY2x1ZGUgPGxpbnV4L3B3bS5oPg0KKyNpbmNsdWRlIDxsaW51eC9z bGFiLmg+DQorDQorI2RlZmluZSBQV01fSU1YX1RQTV9QQVJBTQkweDQNCisjZGVmaW5lIFBXTV9J TVhfVFBNX0dMT0JBTAkweDgNCisjZGVmaW5lIFBXTV9JTVhfVFBNX1NDCQkweDEwDQorI2RlZmlu ZSBQV01fSU1YX1RQTV9DTlQJCTB4MTQNCisjZGVmaW5lIFBXTV9JTVhfVFBNX01PRAkJMHgxOA0K KyNkZWZpbmUgUFdNX0lNWF9UUE1fQ25TQyhuKQkoMHgyMCArIChuKSAqIDB4OCkNCisjZGVmaW5l IFBXTV9JTVhfVFBNX0NuVihuKQkoMHgyNCArIChuKSAqIDB4OCkNCisNCisjZGVmaW5lIFBXTV9J TVhfVFBNX1BBUkFNX0NIQU4JCQlHRU5NQVNLKDcsIDApDQorDQorI2RlZmluZSBQV01fSU1YX1RQ TV9TQ19QUwkJCUdFTk1BU0soMiwgMCkNCisjZGVmaW5lIFBXTV9JTVhfVFBNX1NDX0NNT0QJCQlH RU5NQVNLKDQsIDMpDQorI2RlZmluZSBQV01fSU1YX1RQTV9TQ19DTU9EX0lOQ19FVkVSWV9DTEsJ RklFTERfUFJFUChQV01fSU1YX1RQTV9TQ19DTU9ELCAxKQ0KKyNkZWZpbmUgUFdNX0lNWF9UUE1f U0NfQ1BXTVMJCQlCSVQoNSkNCisNCisjZGVmaW5lIFBXTV9JTVhfVFBNX0NuU0NfQ0hGCUJJVCg3 KQ0KKyNkZWZpbmUgUFdNX0lNWF9UUE1fQ25TQ19NU0IJQklUKDUpDQorI2RlZmluZSBQV01fSU1Y X1RQTV9DblNDX01TQQlCSVQoNCkNCisNCisvKg0KKyAqIFRoZSByZWZlcmVuY2UgbWFudWFsIGRl c2NyaWJlcyB0aGlzIGZpZWxkIGFzIHR3byBzZXBhcmF0ZSBiaXRzLiBUaGUNCisgKiBzYW1hbnRp YyBvZiB0aGUgdHdvIGJpdHMgaXNuJ3Qgb3J0aG9nb25hbCB0aG91Z2gsIHNvIHRoZXkgYXJlIHRy ZWF0ZWQNCisgKiB0b2dldGhlciBhcyBhIDItYml0IGZpZWxkIGhlcmUuDQorICovDQorI2RlZmlu ZSBQV01fSU1YX1RQTV9DblNDX0VMUwlHRU5NQVNLKDMsIDIpDQorI2RlZmluZSBQV01fSU1YX1RQ TV9DblNDX0VMU19QT0xBUklUWV9JTlZFUlNFRAkweDENCisjZGVmaW5lIFBXTV9JTVhfVFBNX0Nu U0NfRUxTX0lOVkVSU0VECUZJRUxEX1BSRVAoUFdNX0lNWF9UUE1fQ25TQ19FTFMsIDEpDQorI2Rl ZmluZSBQV01fSU1YX1RQTV9DblNDX0VMU19OT1JNQUwJRklFTERfUFJFUChQV01fSU1YX1RQTV9D blNDX0VMUywgMikNCisNCisNCisjZGVmaW5lIFBXTV9JTVhfVFBNX01PRF9XSURUSAkxNg0KKyNk ZWZpbmUgUFdNX0lNWF9UUE1fTU9EX01PRAlHRU5NQVNLKFBXTV9JTVhfVFBNX01PRF9XSURUSCAt IDEsIDApDQorDQorc3RydWN0IGlteF90cG1fcHdtX2NoaXAgew0KKwlzdHJ1Y3QgcHdtX2NoaXAg Y2hpcDsNCisJc3RydWN0IGNsayAqY2xrOw0KKwl2b2lkIF9faW9tZW0gKmJhc2U7DQorCXN0cnVj dCBtdXRleCBsb2NrOw0KKwl1MzIgdXNlcl9jb3VudDsNCisJdTMyIGVuYWJsZV9jb3VudDsNCisJ dTMyIHJlYWxfcGVyaW9kOw0KK307DQorDQorc3RydWN0IGlteF90cG1fcHdtX3BhcmFtIHsNCisJ dTggcHJlc2NhbGU7DQorCXUzMiBtb2Q7DQorfTsNCisNCitzdGF0aWMgaW5saW5lIHN0cnVjdCBp bXhfdHBtX3B3bV9jaGlwICp0b19pbXhfdHBtX3B3bV9jaGlwKHN0cnVjdCBwd21fY2hpcCAqY2hp cCkNCit7DQorCXJldHVybiBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGlteF90cG1fcHdtX2No aXAsIGNoaXApOw0KK30NCisNCitzdGF0aWMgaW50IHB3bV9pbXhfdHBtX3JvdW5kX3N0YXRlKHN0 cnVjdCBwd21fY2hpcCAqY2hpcCwNCisJCQkJICAgc3RydWN0IGlteF90cG1fcHdtX3BhcmFtICpw LA0KKwkJCQkgICBzdHJ1Y3QgcHdtX3N0YXRlICpzdGF0ZSwNCisJCQkJICAgc3RydWN0IHB3bV9z dGF0ZSAqcmVhbF9zdGF0ZSkNCit7DQorCXN0cnVjdCBpbXhfdHBtX3B3bV9jaGlwICp0cG0gPSB0 b19pbXhfdHBtX3B3bV9jaGlwKGNoaXApOw0KKwl1MzIgcmF0ZSwgcHJlc2NhbGUsIHBlcmlvZF9j b3VudCwgY2xvY2tfdW5pdDsNCisJdTY0IHRtcDsNCisNCisJcmF0ZSA9IGNsa19nZXRfcmF0ZSh0 cG0tPmNsayk7DQorCXRtcCA9ICh1NjQpc3RhdGUtPnBlcmlvZCAqIHJhdGU7DQorCWNsb2NrX3Vu aXQgPSBESVZfUk9VTkRfQ0xPU0VTVF9VTEwodG1wLCBOU0VDX1BFUl9TRUMpOw0KKwlpZiAoY2xv Y2tfdW5pdCA8PSBQV01fSU1YX1RQTV9NT0RfTU9EKQ0KKwkJcHJlc2NhbGUgPSAwOw0KKwllbHNl DQorCQlwcmVzY2FsZSA9IGlsb2cyKGNsb2NrX3VuaXQpICsgMSAtIFBXTV9JTVhfVFBNX01PRF9X SURUSDsNCisNCisJaWYgKCghRklFTERfRklUKFBXTV9JTVhfVFBNX1NDX1BTLCBwcmVzY2FsZSkp KQ0KKwkJcmV0dXJuIC1FUkFOR0U7DQorCXAtPnByZXNjYWxlID0gcHJlc2NhbGU7DQorDQorCXBl cmlvZF9jb3VudCA9IChjbG9ja191bml0ICsgKCgxIDw8IHByZXNjYWxlKSA+PiAxKSkgPj4gcHJl c2NhbGU7DQorCXAtPm1vZCA9IHBlcmlvZF9jb3VudDsNCisNCisJLyogY2FsY3VsYXRlIHJlYWwg cGVyaW9kIEhXIGNhbiBzdXBwb3J0ICovDQorCXRtcCA9ICh1NjQpcGVyaW9kX2NvdW50IDw8IHBy ZXNjYWxlOw0KKwl0bXAgKj0gTlNFQ19QRVJfU0VDOw0KKwlyZWFsX3N0YXRlLT5wZXJpb2QgPSBE SVZfUk9VTkRfQ0xPU0VTVF9VTEwodG1wLCByYXRlKTsNCisNCisJLyoNCisJICogaWYgZXZlbnR1 YWxseSB0aGUgUFdNIG91dHB1dCBpcyBpbmFjdGl2ZSwgZWl0aGVyDQorCSAqIGR1dHkgY3ljbGUg aXMgMCBvciBzdGF0dXMgaXMgZGlzYWJsZWQsIG5lZWQgdG8NCisJICogbWFrZSBzdXJlIHRoZSBv dXRwdXQgcGluIGlzIGluYWN0aXZlLg0KKwkgKi8NCisJaWYgKCFzdGF0ZS0+ZW5hYmxlZCkNCisJ CXJlYWxfc3RhdGUtPmR1dHlfY3ljbGUgPSAwOw0KKwllbHNlDQorCQlyZWFsX3N0YXRlLT5kdXR5 X2N5Y2xlID0gc3RhdGUtPmR1dHlfY3ljbGU7DQorDQorCXJlYWxfc3RhdGUtPnBvbGFyaXR5ID0g c3RhdGUtPnBvbGFyaXR5Ow0KKwlyZWFsX3N0YXRlLT5lbmFibGVkID0gc3RhdGUtPmVuYWJsZWQ7 DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgdm9pZCBwd21faW14X3RwbV9zZXR1cF9w ZXJpb2Qoc3RydWN0IHB3bV9jaGlwICpjaGlwLA0KKwkJCQkgICAgIHN0cnVjdCBpbXhfdHBtX3B3 bV9wYXJhbSAqcCkNCit7DQorCXN0cnVjdCBpbXhfdHBtX3B3bV9jaGlwICp0cG0gPSB0b19pbXhf dHBtX3B3bV9jaGlwKGNoaXApOw0KKwl1MzIgdmFsLCBzYXZlZF9jbW9kLCBjdXJfcHJlc2NhbGU7 DQorDQorCS8qIG1ha2Ugc3VyZSBjb3VudGVyIGlzIGRpc2FibGVkIGZvciBwcm9ncmFtbWluZyBw cmVzY2FsZSAqLw0KKwl2YWwgPSByZWFkbCh0cG0tPmJhc2UgKyBQV01fSU1YX1RQTV9TQyk7DQor CXNhdmVkX2Ntb2QgPSBGSUVMRF9HRVQoUFdNX0lNWF9UUE1fU0NfQ01PRCwgdmFsKTsNCisJY3Vy X3ByZXNjYWxlID0gRklFTERfR0VUKFBXTV9JTVhfVFBNX1NDX1BTLCB2YWwpOw0KKwlpZiAoc2F2 ZWRfY21vZCAmJiBjdXJfcHJlc2NhbGUgIT0gcC0+cHJlc2NhbGUpIHsNCisJCXZhbCAmPSB+UFdN X0lNWF9UUE1fU0NfQ01PRDsNCisJCXdyaXRlbCh2YWwsIHRwbS0+YmFzZSArIFBXTV9JTVhfVFBN X1NDKTsNCisJfQ0KKw0KKwkvKiBzZXQgVFBNIGNvdW50ZXIgcHJlc2NhbGUgKi8NCisJdmFsICY9 IH5QV01fSU1YX1RQTV9TQ19QUzsNCisJdmFsIHw9IEZJRUxEX1BSRVAoUFdNX0lNWF9UUE1fU0Nf UFMsIHAtPnByZXNjYWxlKTsNCisJd3JpdGVsKHZhbCwgdHBtLT5iYXNlICsgUFdNX0lNWF9UUE1f U0MpOw0KKw0KKwkvKiByZXN0b3JlIHRoZSBjbG9jayBtb2RlIGlmIG5lY2Vzc2FyeSAqLw0KKwlp ZiAoc2F2ZWRfY21vZCAmJiBjdXJfcHJlc2NhbGUgIT0gcC0+cHJlc2NhbGUpIHsNCisJCXZhbCB8 PSBGSUVMRF9QUkVQKFBXTV9JTVhfVFBNX1NDX0NNT0QsIHNhdmVkX2Ntb2QpOw0KKwkJd3JpdGVs KHZhbCwgdHBtLT5iYXNlICsgUFdNX0lNWF9UUE1fU0MpOw0KKwl9DQorDQorCS8qDQorCSAqIHNl dCBwZXJpb2QgY291bnQ6DQorCSAqIGFjY29yZGluZyB0byBSTSwgdGhlIE1PRCByZWdpc3RlciBp cyB1cGRhdGVkIGltbWVkaWF0ZWx5DQorCSAqIGlmIENNT0RbMTowXSA9IDJiJzAwLiBpZiBDTU9E WzE6MF0gIT0gMmInMDAsIHRoZW4gTU9EDQorCSAqIHJlZ2lzdGVyIGlzIHVwZGF0ZWQgYWNjb3Jk aW5nIHRvIHRoZSBDUFdNUyBiaXQsIHRoYXQgaXM6DQorCSAqDQorCSAqIGlmIHRoZSBzZWxlY3Rl ZCBtb2RlIGlzIG5vdCBDUFdNIHRoZW4gTU9EIHJlZ2lzdGVyIGlzDQorCSAqIHVwZGF0ZWQgYWZ0 ZXIgTU9EIHJlZ2lzdGVyIHdhcyB3cml0dGVuIGFuZCB0aGUgVFBNDQorCSAqIGNvdW50ZXIgY2hh bmdlcyBmcm9tIE1PRCB0byB6ZXJvLg0KKwkgKg0KKwkgKiBpZiB0aGUgc2VsZWN0ZWQgbW9kZSBp cyBDUFdNIHRoZW4gTU9EIHJlZ2lzdGVyIGlzIHVwZGF0ZWQNCisJICogYWZ0ZXIgTU9EIHJlZ2lz dGVyIHdhcyB3cml0dGVuIGFuZCB0aGUgVFBNIGNvdW50ZXIgY2hhbmdlcw0KKwkgKiBmcm9tIE1P RCB0byAoTU9EIOKAkyAxKS4NCisJICovDQorCXdyaXRlbChwLT5tb2QsIHRwbS0+YmFzZSArIFBX TV9JTVhfVFBNX01PRCk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIHB3bV9pbXhfdHBtX2dldF9zdGF0 ZShzdHJ1Y3QgcHdtX2NoaXAgKmNoaXAsDQorCQkJCSAgc3RydWN0IHB3bV9kZXZpY2UgKnB3bSwN CisJCQkJICBzdHJ1Y3QgcHdtX3N0YXRlICpzdGF0ZSkNCit7DQorCXN0cnVjdCBpbXhfdHBtX3B3 bV9jaGlwICp0cG0gPSB0b19pbXhfdHBtX3B3bV9jaGlwKGNoaXApOw0KKwl1MzIgcmF0ZSwgdmFs LCBwcmVzY2FsZTsNCisJdTY0IHRtcDsNCisNCisJLyogZ2V0IHBlcmlvZCAqLw0KKwlzdGF0ZS0+ cGVyaW9kID0gdHBtLT5yZWFsX3BlcmlvZDsNCisNCisJLyogZ2V0IGR1dHkgY3ljbGUgKi8NCisJ cmF0ZSA9IGNsa19nZXRfcmF0ZSh0cG0tPmNsayk7DQorCXZhbCA9IHJlYWRsKHRwbS0+YmFzZSAr IFBXTV9JTVhfVFBNX1NDKTsNCisJcHJlc2NhbGUgPSBGSUVMRF9HRVQoUFdNX0lNWF9UUE1fU0Nf UFMsIHZhbCk7DQorCXRtcCA9IHJlYWRsKHRwbS0+YmFzZSArIFBXTV9JTVhfVFBNX0NuVihwd20t Pmh3cHdtKSk7DQorCXRtcCA9ICh0bXAgPDwgcHJlc2NhbGUpICogTlNFQ19QRVJfU0VDOw0KKwlz dGF0ZS0+ZHV0eV9jeWNsZSA9IERJVl9ST1VORF9DTE9TRVNUX1VMTCh0bXAsIHJhdGUpOw0KKw0K KwkvKiBnZXQgcG9sYXJpdHkgKi8NCisJdmFsID0gcmVhZGwodHBtLT5iYXNlICsgUFdNX0lNWF9U UE1fQ25TQyhwd20tPmh3cHdtKSk7DQorCWlmIChGSUVMRF9HRVQoUFdNX0lNWF9UUE1fQ25TQ19F TFMsIHZhbCkgPT0NCisJICAgIFBXTV9JTVhfVFBNX0NuU0NfRUxTX1BPTEFSSVRZX0lOVkVSU0VE KQ0KKwkJc3RhdGUtPnBvbGFyaXR5ID0gUFdNX1BPTEFSSVRZX0lOVkVSU0VEOw0KKwllbHNlDQor CQkvKg0KKwkJICogQXNzdW1lIHJlc2VydmVkIHZhbHVlcyAoMmIwMCBhbmQgMmIxMSkgdG8geWll bGQNCisJCSAqIG5vcm1hbCBwb2xhcml0eS4NCisJCSAqLw0KKwkJc3RhdGUtPnBvbGFyaXR5ID0g UFdNX1BPTEFSSVRZX05PUk1BTDsNCisNCisJLyogZ2V0IGNoYW5uZWwgc3RhdHVzICovDQorCXN0 YXRlLT5lbmFibGVkID0gRklFTERfR0VUKFBXTV9JTVhfVFBNX0NuU0NfRUxTLCB2YWwpID8gdHJ1 ZSA6IGZhbHNlOw0KK30NCisNCitzdGF0aWMgdm9pZCBwd21faW14X3RwbV9hcHBseV9odyhzdHJ1 Y3QgcHdtX2NoaXAgKmNoaXAsDQorCQkJCSBzdHJ1Y3QgcHdtX2RldmljZSAqcHdtLA0KKwkJCQkg c3RydWN0IHB3bV9zdGF0ZSAqc3RhdGUpDQorew0KKwlzdHJ1Y3QgaW14X3RwbV9wd21fY2hpcCAq dHBtID0gdG9faW14X3RwbV9wd21fY2hpcChjaGlwKTsNCisJc3RydWN0IHB3bV9zdGF0ZSBjOw0K Kwl1MzIgdmFsLCBzY192YWw7DQorCXU2NCB0bXA7DQorDQorCXB3bV9pbXhfdHBtX2dldF9zdGF0 ZShjaGlwLCBwd20sICZjKTsNCisNCisJaWYgKHN0YXRlLT5kdXR5X2N5Y2xlICE9IGMuZHV0eV9j eWNsZSkgew0KKwkJLyogc2V0IGR1dHkgY291bnRlciAqLw0KKwkJdG1wID0gcmVhZGwodHBtLT5i YXNlICsgUFdNX0lNWF9UUE1fTU9EKSAmIFBXTV9JTVhfVFBNX01PRF9NT0Q7DQorCQl0bXAgKj0g c3RhdGUtPmR1dHlfY3ljbGU7DQorCQl2YWwgPSBESVZfUk9VTkRfQ0xPU0VTVF9VTEwodG1wLCBz dGF0ZS0+cGVyaW9kKTsNCisJCXdyaXRlbCh2YWwsIHRwbS0+YmFzZSArIFBXTV9JTVhfVFBNX0Nu Vihwd20tPmh3cHdtKSk7DQorCX0NCisNCisJaWYgKHN0YXRlLT5lbmFibGVkICE9IGMuZW5hYmxl ZCkgew0KKwkJLyoNCisJCSAqIHNldCBwb2xhcml0eSAoZm9yIGVkZ2UtYWxpZ25lZCBQV00gbW9k ZXMpDQorCQkgKg0KKwkJICogRUxTWzE6MF0gPSAyYjEwIHlpZWxkcyBub3JtYWwgcG9sYXJpdHkg YmVoYXZpb3VyLA0KKwkJICogRUxTWzE6MF0gPSAyYjAxIHlpZWxkcyBpbnZlcnNlZCBwb2xhcml0 eS4NCisJCSAqIFRoZSBvdGhlciB2YWx1ZXMgYXJlIHJlc2VydmVkLg0KKwkJICoNCisJCSAqIHBv bGFyaXR5IHNldHRpbmdzIHdpbGwgZW5hYmxlZC9kaXNhYmxlIG91dHB1dCBzdGF0dXMNCisJCSAq IGltbWVkaWF0ZWx5LCBzbyBpZiB0aGUgY2hhbm5lbCBpcyBkaXNhYmxlZCwgbmVlZCB0bw0KKwkJ ICogbWFrZSBzdXJlIE1TQS9NU0IvRUxTIGFyZSBzZXQgdG8gMCB3aGljaCBtZWFucyBjaGFubmVs DQorCQkgKiBkaXNhYmxlZC4NCisJCSAqLw0KKwkJdmFsID0gcmVhZGwodHBtLT5iYXNlICsgUFdN X0lNWF9UUE1fQ25TQyhwd20tPmh3cHdtKSk7DQorCQl2YWwgJj0gfihQV01fSU1YX1RQTV9DblND X0VMUyB8IFBXTV9JTVhfVFBNX0NuU0NfTVNBIHwNCisJCQkgUFdNX0lNWF9UUE1fQ25TQ19NU0Ip Ow0KKwkJc2NfdmFsID0gcmVhZGwodHBtLT5iYXNlICsgUFdNX0lNWF9UUE1fU0MpOw0KKwkJaWYg KHN0YXRlLT5lbmFibGVkKSB7DQorCQkJdmFsIHw9IFBXTV9JTVhfVFBNX0NuU0NfTVNCOw0KKwkJ CXZhbCB8PSAoc3RhdGUtPnBvbGFyaXR5ID09IFBXTV9QT0xBUklUWV9OT1JNQUwpID8NCisJCQkJ UFdNX0lNWF9UUE1fQ25TQ19FTFNfTk9STUFMIDoNCisJCQkJUFdNX0lNWF9UUE1fQ25TQ19FTFNf SU5WRVJTRUQ7DQorCQkJaWYgKCsrdHBtLT5lbmFibGVfY291bnQgPT0gMSkgew0KKwkJCQkvKiBz dGFydCBUUE0gY291bnRlciAqLw0KKwkJCQlzY192YWwgfD0gUFdNX0lNWF9UUE1fU0NfQ01PRF9J TkNfRVZFUllfQ0xLOw0KKwkJCQl3cml0ZWwoc2NfdmFsLCB0cG0tPmJhc2UgKyBQV01fSU1YX1RQ TV9TQyk7DQorCQkJfQ0KKwkJfSBlbHNlIHsNCisJCQlpZiAoLS10cG0tPmVuYWJsZV9jb3VudCA9 PSAwKSB7DQorCQkJCS8qIHN0b3AgVFBNIGNvdW50ZXIgKi8NCisJCQkJc2NfdmFsICY9IH5QV01f SU1YX1RQTV9TQ19DTU9EOw0KKwkJCQl3cml0ZWwoc2NfdmFsLCB0cG0tPmJhc2UgKyBQV01fSU1Y X1RQTV9TQyk7DQorCQkJfQ0KKwkJfQ0KKwkJd3JpdGVsKHZhbCwgdHBtLT5iYXNlICsgUFdNX0lN WF9UUE1fQ25TQyhwd20tPmh3cHdtKSk7DQorCX0NCit9DQorDQorc3RhdGljIGludCBwd21faW14 X3RwbV9hcHBseShzdHJ1Y3QgcHdtX2NoaXAgKmNoaXAsDQorCQkJICAgICAgc3RydWN0IHB3bV9k ZXZpY2UgKnB3bSwNCisJCQkgICAgIHN0cnVjdCBwd21fc3RhdGUgKnN0YXRlKQ0KK3sNCisJc3Ry dWN0IGlteF90cG1fcHdtX2NoaXAgKnRwbSA9IHRvX2lteF90cG1fcHdtX2NoaXAoY2hpcCk7DQor CXN0cnVjdCBpbXhfdHBtX3B3bV9wYXJhbSBwYXJhbTsNCisJc3RydWN0IHB3bV9zdGF0ZSByZWFs X3N0YXRlOw0KKwlpbnQgcmV0Ow0KKw0KKwlyZXQgPSBwd21faW14X3RwbV9yb3VuZF9zdGF0ZShj aGlwLCAmcGFyYW0sIHN0YXRlLCAmcmVhbF9zdGF0ZSk7DQorCWlmIChyZXQpDQorCQlyZXR1cm4g LUVJTlZBTDsNCisNCisJbXV0ZXhfbG9jaygmdHBtLT5sb2NrKTsNCisNCisJLyoNCisJICogVFBN IGNvdW50ZXIgaXMgc2hhcmVkIGJ5IG11bHRpcGxlIGNoYW5uZWxzLCBzbw0KKwkgKiBwcmVzY2Fs ZSBhbmQgcGVyaW9kIGNhbiBOT1QgYmUgbW9kaWZpZWQgd2hlbg0KKwkgKiB0aGVyZSBhcmUgbXVs dGlwbGUgY2hhbm5lbHMgaW4gdXNlIHdpdGggZGlmZmVyZW50DQorCSAqIHBlcmlvZCBzZXR0aW5n cy4NCisJICovDQorCWlmIChyZWFsX3N0YXRlLnBlcmlvZCAhPSB0cG0tPnJlYWxfcGVyaW9kKSB7 DQorCQlpZiAodHBtLT51c2VyX2NvdW50ID4gMSkgew0KKwkJCXJldCA9IC1FQlVTWTsNCisJCQln b3RvIGV4aXQ7DQorCQl9DQorDQorCQlwd21faW14X3RwbV9zZXR1cF9wZXJpb2QoY2hpcCwgJnBh cmFtKTsNCisJCXRwbS0+cmVhbF9wZXJpb2QgPSByZWFsX3N0YXRlLnBlcmlvZDsNCisJfQ0KKw0K Kwlwd21faW14X3RwbV9hcHBseV9odyhjaGlwLCBwd20sICZyZWFsX3N0YXRlKTsNCisNCitleGl0 Og0KKwltdXRleF91bmxvY2soJnRwbS0+bG9jayk7DQorDQorCXJldHVybiByZXQ7DQorfQ0KKw0K K3N0YXRpYyBpbnQgcHdtX2lteF90cG1fcmVxdWVzdChzdHJ1Y3QgcHdtX2NoaXAgKmNoaXAsIHN0 cnVjdCBwd21fZGV2aWNlICpwd20pDQorew0KKwlzdHJ1Y3QgaW14X3RwbV9wd21fY2hpcCAqdHBt ID0gdG9faW14X3RwbV9wd21fY2hpcChjaGlwKTsNCisNCisJbXV0ZXhfbG9jaygmdHBtLT5sb2Nr KTsNCisJdHBtLT51c2VyX2NvdW50Kys7DQorCW11dGV4X3VubG9jaygmdHBtLT5sb2NrKTsNCisN CisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIHB3bV9pbXhfdHBtX2ZyZWUoc3RydWN0 IHB3bV9jaGlwICpjaGlwLCBzdHJ1Y3QgcHdtX2RldmljZSAqcHdtKQ0KK3sNCisJc3RydWN0IGlt eF90cG1fcHdtX2NoaXAgKnRwbSA9IHRvX2lteF90cG1fcHdtX2NoaXAoY2hpcCk7DQorDQorCW11 dGV4X2xvY2soJnRwbS0+bG9jayk7DQorCXRwbS0+dXNlcl9jb3VudC0tOw0KKwltdXRleF91bmxv Y2soJnRwbS0+bG9jayk7DQorfQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHdtX29wcyBpbXhf dHBtX3B3bV9vcHMgPSB7DQorCS5yZXF1ZXN0ID0gcHdtX2lteF90cG1fcmVxdWVzdCwNCisJLmZy ZWUgPSBwd21faW14X3RwbV9mcmVlLA0KKwkuZ2V0X3N0YXRlID0gcHdtX2lteF90cG1fZ2V0X3N0 YXRlLA0KKwkuYXBwbHkgPSBwd21faW14X3RwbV9hcHBseSwNCisJLm93bmVyID0gVEhJU19NT0RV TEUsDQorfTsNCisNCitzdGF0aWMgaW50IHB3bV9pbXhfdHBtX3Byb2JlKHN0cnVjdCBwbGF0Zm9y bV9kZXZpY2UgKnBkZXYpDQorew0KKwlzdHJ1Y3QgaW14X3RwbV9wd21fY2hpcCAqdHBtOw0KKwlp bnQgcmV0Ow0KKwl1MzIgdmFsOw0KKw0KKwl0cG0gPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwg c2l6ZW9mKCp0cG0pLCBHRlBfS0VSTkVMKTsNCisJaWYgKCF0cG0pDQorCQlyZXR1cm4gLUVOT01F TTsNCisNCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgdHBtKTsNCisNCisJdHBtLT5iYXNl ID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDApOw0KKwlpZiAoSVNfRVJS KHRwbS0+YmFzZSkpDQorCQlyZXR1cm4gUFRSX0VSUih0cG0tPmJhc2UpOw0KKw0KKwl0cG0tPmNs ayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsNCisJaWYgKElTX0VSUih0cG0tPmNs aykpIHsNCisJCXJldCA9IFBUUl9FUlIodHBtLT5jbGspOw0KKwkJaWYgKHJldCAhPSAtRVBST0JF X0RFRkVSKQ0KKwkJCWRldl9lcnIoJnBkZXYtPmRldiwNCisJCQkJImZhaWxlZCB0byBnZXQgUFdN IGNsb2NrOiAlZFxuIiwgcmV0KTsNCisJCXJldHVybiByZXQ7DQorCX0NCisNCisJcmV0ID0gY2xr X3ByZXBhcmVfZW5hYmxlKHRwbS0+Y2xrKTsNCisJaWYgKHJldCkgew0KKwkJZGV2X2VycigmcGRl di0+ZGV2LA0KKwkJCSJmYWlsZWQgdG8gcHJlcGFyZSBvciBlbmFibGUgY2xvY2s6ICVkXG4iLCBy ZXQpOw0KKwkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwl0cG0tPmNoaXAuZGV2ID0gJnBkZXYtPmRl djsNCisJdHBtLT5jaGlwLm9wcyA9ICZpbXhfdHBtX3B3bV9vcHM7DQorCXRwbS0+Y2hpcC5iYXNl ID0gLTE7DQorCXRwbS0+Y2hpcC5vZl94bGF0ZSA9IG9mX3B3bV94bGF0ZV93aXRoX2ZsYWdzOw0K Kwl0cG0tPmNoaXAub2ZfcHdtX25fY2VsbHMgPSAzOw0KKw0KKwkvKiBnZXQgbnVtYmVyIG9mIGNo YW5uZWxzICovDQorCXZhbCA9IHJlYWRsKHRwbS0+YmFzZSArIFBXTV9JTVhfVFBNX1BBUkFNKTsN CisJdHBtLT5jaGlwLm5wd20gPSBGSUVMRF9HRVQoUFdNX0lNWF9UUE1fUEFSQU1fQ0hBTiwgdmFs KTsNCisNCisJbXV0ZXhfaW5pdCgmdHBtLT5sb2NrKTsNCisNCisJcmV0ID0gcHdtY2hpcF9hZGQo JnRwbS0+Y2hpcCk7DQorCWlmIChyZXQpIHsNCisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxl ZCB0byBhZGQgUFdNIGNoaXA6ICVkXG4iLCByZXQpOw0KKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJl KHRwbS0+Y2xrKTsNCisJfQ0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW50IHB3 bV9pbXhfdHBtX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KK3sNCisJc3Ry dWN0IGlteF90cG1fcHdtX2NoaXAgKnRwbSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOw0K KwlpbnQgcmV0ID0gcHdtY2hpcF9yZW1vdmUoJnRwbS0+Y2hpcCk7DQorDQorCWNsa19kaXNhYmxl X3VucHJlcGFyZSh0cG0tPmNsayk7DQorDQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBp bnQgX19tYXliZV91bnVzZWQgcHdtX2lteF90cG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYp DQorew0KKwlzdHJ1Y3QgaW14X3RwbV9wd21fY2hpcCAqdHBtID0gZGV2X2dldF9kcnZkYXRhKGRl dik7DQorDQorCWlmICh0cG0tPmVuYWJsZV9jb3VudCA+IDApDQorCQlyZXR1cm4gLUVCVVNZOw0K Kw0KKwljbGtfZGlzYWJsZV91bnByZXBhcmUodHBtLT5jbGspOw0KKw0KKwlyZXR1cm4gMDsNCit9 DQorDQorc3RhdGljIGludCBfX21heWJlX3VudXNlZCBwd21faW14X3RwbV9yZXN1bWUoc3RydWN0 IGRldmljZSAqZGV2KQ0KK3sNCisJc3RydWN0IGlteF90cG1fcHdtX2NoaXAgKnRwbSA9IGRldl9n ZXRfZHJ2ZGF0YShkZXYpOw0KKwlpbnQgcmV0ID0gMDsNCisNCisJcmV0ID0gY2xrX3ByZXBhcmVf ZW5hYmxlKHRwbS0+Y2xrKTsNCisJaWYgKHJldCkNCisJCWRldl9lcnIoZGV2LA0KKwkJCSJmYWls ZWQgdG8gcHJlcGFyZSBvciBlbmFibGUgY2xvY2s6ICVkXG4iLA0KKwkJCXJldCk7DQorDQorCXJl dHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhpbXhfdHBtX3B3bV9w bSwNCisJCQkgcHdtX2lteF90cG1fc3VzcGVuZCwgcHdtX2lteF90cG1fcmVzdW1lKTsNCisNCitz dGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBpbXhfdHBtX3B3bV9kdF9pZHNbXSA9IHsN CisJeyAuY29tcGF0aWJsZSA9ICJmc2wsaW14LXRwbSIsIH0sDQorCXsgLyogc2VudGluZWwgKi8g fQ0KK307DQorTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgaW14X3RwbV9wd21fZHRfaWRzKTsNCisN CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpbXhfdHBtX3B3bV9kcml2ZXIgPSB7DQor CS5kcml2ZXIgPSB7DQorCQkubmFtZSA9ICJpbXgtdHBtLXB3bSIsDQorCQkub2ZfbWF0Y2hfdGFi bGUgPSBpbXhfdHBtX3B3bV9kdF9pZHMsDQorCQkucG0gPSAmaW14X3RwbV9wd21fcG0sDQorCX0s DQorCS5wcm9iZQk9IHB3bV9pbXhfdHBtX3Byb2JlLA0KKwkucmVtb3ZlID0gcHdtX2lteF90cG1f cmVtb3ZlLA0KK307DQorbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihpbXhfdHBtX3B3bV9kcml2ZXIp Ow0KKw0KK01PRFVMRV9BVVRIT1IoIkFuc29uIEh1YW5nIDxBbnNvbi5IdWFuZ0BueHAuY29tPiIp Ow0KK01PRFVMRV9ERVNDUklQVElPTigiaS5NWCBUUE0gUFdNIERyaXZlciIpOw0KK01PRFVMRV9M SUNFTlNFKCJHUEwgdjIiKTsNCi0tIA0KMi43LjQNCg0KX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGlu dXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQu b3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=