From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Ajay Joshi" Subject: At91sam9260 slave mode operation Date: Fri, 31 Oct 2008 10:30:03 +0800 Message-ID: <4BCBC526CDA1EB4588989D38AA00E40A59C778@singapore.awox.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C93B00.94A6E037" Cc: Mohammad Arif , Raymond Picard To: Return-path: Content-class: urn:content-classes:message List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: spi-devel-general-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org List-Id: linux-spi.vger.kernel.org This is a multi-part message in MIME format. ------_=_NextPart_001_01C93B00.94A6E037 Content-Type: multipart/alternative; boundary="----_=_NextPart_002_01C93B00.94A6E037" ------_=_NextPart_002_01C93B00.94A6E037 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable =20 Hello, =20 I am using the ATMEL AT91SAM9260 controller. =20 I am able to use the SPI controller in this as a Master. But I have the need to make it work as a slave controller. =20 I am using the generic SPI device drivers (not the SPI subsystem) at91_spi.c and at91_spidev.c. In this I disabled the DMA mode of transfer(as a first step). I tried to receive one byte at a time. I have enabled the interrupt for RDRF. The interrupt does not arise unless the clock is enabled(which should not be since the data is sampled when SPCK is driven).=20 Hence there is no data. =20 Has anyone made Atmel SPI slave controller work?=20 =20 I have also attached the code for reference. =20 Regards Ajay =20 ------_=_NextPart_002_01C93B00.94A6E037 Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable

 

Hello,

  

      I am using the ATMEL = AT91SAM9260 controller.

 

      I am able to use the = SPI controller in this as a Master.

      But I have the need to = make it work as a slave controller.

      =

     I am using the generic SPI = device drivers (not the SPI subsystem) at91_spi.c and = at91_spidev.c.

     In this I disabled the DMA = mode of transfer(as a first step). I tried to receive one byte at a = time.

     I have enabled the interrupt = for RDRF. The interrupt does not arise unless the clock is enabled(which = should not be since the data is sampled when SPCK is driven). =

     Hence there is no = data.

 

     Has anyone made Atmel SPI = slave controller work?

  =    

     I have also attached the = code for reference.

 

Regards

Ajay

 

------_=_NextPart_002_01C93B00.94A6E037-- ------_=_NextPart_001_01C93B00.94A6E037 Content-Type: application/octet-stream; name="at91_spi_slave.c" Content-Transfer-Encoding: base64 Content-Description: at91_spi_slave.c Content-Disposition: attachment; filename="at91_spi_slave.c" I2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiNp bmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiNpbmNsdWRl IDxsaW51eC9jb21wbGV0aW9uLmg+CiNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KI2luY2x1 ZGUgPGxpbnV4L2Nsay5oPgojaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KCiNpbmNsdWRlIDxsaW51 eC9wbGF0Zm9ybV9kZXZpY2UuaD4KI2luY2x1ZGUgPGFzbS9pby5oPgojaW5jbHVkZSA8YXNtL3Nl bWFwaG9yZS5oPgoKI2luY2x1ZGUgPGFzbS9hcmNoL2F0OTFfc3BpLmg+CiNpbmNsdWRlIDxhc20v YXJjaC9hdDkxX3BkYy5oPgojaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KI2luY2x1ZGUgPGFz bS9hcmNoL3NwaS5oPgoKI2RlZmluZSBERUJVR19TUEkKCnN0YXRpYyBzdHJ1Y3Qgc3BpX2xvY2Fs IHNwaV9kZXZbTlJfU1BJX0RFVklDRVNdOwkvKiBzdGF0ZSBvZiB0aGUgU1BJIGRldmljZXMgKi8K c3RhdGljIGludCBzcGlfZW5hYmxlZCA9IDA7CnN0YXRpYyBzdHJ1Y3Qgc2VtYXBob3JlIHNwaV9s b2NrOwkJCS8qIHByb3RlY3QgYWNjZXNzIHRvIFNQSSBidXMgKi8Kc3RhdGljIGludCBjdXJyZW50 X2RldmljZSA9IC0xOwkJCQkvKiBjdXJyZW50bHkgc2VsZWN0ZWQgU1BJIGRldmljZSAqLwpzdGF0 aWMgc3RydWN0IGNsayAqc3BpX2NsazsJCQkJLyogU1BJIGNsb2NrICovCnN0YXRpYyB2b2lkIF9f aW9tZW0gKnNwaV9iYXNlOwkJCQkvKiBTUEkgcGVyaXBoZXJhbCBiYXNlLWFkZHJlc3MgKi8KCkRF Q0xBUkVfQ09NUExFVElPTih0cmFuc2Zlcl9jb21wbGV0ZSk7CgoKI2RlZmluZSBhdDkxX3NwaV9y ZWFkKHJlZykJCV9fcmF3X3JlYWRsKHNwaV9iYXNlICsgKHJlZykpCiNkZWZpbmUgYXQ5MV9zcGlf d3JpdGUocmVnLCB2YWwpCV9fcmF3X3dyaXRlbCgodmFsKSwgc3BpX2Jhc2UgKyAocmVnKSkKCgov KiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uICovCgovKgogKiBBY2Nlc3MgYW5kIGVuYWJsZSB0aGUgU1BJIGJ1 cy4KICogVGhpcyBNVVNUIGJlIGNhbGxlZCBiZWZvcmUgYW55IHRyYW5zZmVycyBhcmUgcGVyZm9y bWVkLgogKi8Kdm9pZCBzcGlfYWNjZXNzX2J1cyhzaG9ydCBkZXZpY2UpCnsKCS8qIEVuc3VyZSB0 aGF0IHJlcXVlc3RlZCBkZXZpY2UgaXMgdmFsaWQgKi8KCWlmICgoZGV2aWNlIDwgMCkgfHwgKGRl dmljZSA+PSBOUl9TUElfREVWSUNFUykpCgkJcGFuaWMoImF0OTFfc3BpOiBzcGlfYWNjZXNzX2J1 cyBjYWxsZWQgd2l0aCBpbnZhbGlkIGRldmljZSIpOwoKCWlmIChzcGlfZW5hYmxlZCA9PSAwKSB7 CgkJI2lmIDAKCQljbGtfZW5hYmxlKHNwaV9jbGspOwkJCQkvKiBFbmFibGUgUGVyaXBoZXJhbCBj bG9jayAqLwoJCSNlbmRpZgoJCS8vYXQ5MV9zcGlfd3JpdGUoQVQ5MV9TUElfQ1IsIEFUOTFfU1BJ X1NQSUVOKTsJLyogRW5hYmxlIFNQSSAqLwojaWZkZWYgREVCVUdfU1BJCgkJcHJpbnRrKCJTUEkg b25cbiIpOwojZW5kaWYKCX0KCXNwaV9lbmFibGVkKys7CgoJLyogTG9jayB0aGUgU1BJIGJ1cyAq LwoJZG93bigmc3BpX2xvY2spOwoJY3VycmVudF9kZXZpY2UgPSBkZXZpY2U7CgoJLyogQ29uZmln dXJlIFNQSSBidXMgZm9yIGRldmljZSAqLwoJLy9hdDkxX3NwaV93cml0ZShBVDkxX1NQSV9NUiwg QVQ5MV9TUElfTU9ERkRJUyB8IChzcGlfZGV2W2RldmljZV0ucGNzIDw8IDE2KSk7Cn0KCi8qCiAq IFJlbGlucXVpc2ggY29udHJvbCBvZiB0aGUgU1BJIGJ1cy4KICovCnZvaWQgc3BpX3JlbGVhc2Vf YnVzKHNob3J0IGRldmljZSkKewoJaWYgKGRldmljZSAhPSBjdXJyZW50X2RldmljZSkKCQlwYW5p YygiYXQ5MV9zcGk6IHNwaV9yZWxlYXNlIGNhbGxlZCB3aXRoIGludmFsaWQgZGV2aWNlIik7CgoJ LyogUmVsZWFzZSB0aGUgU1BJIGJ1cyAqLwoJY3VycmVudF9kZXZpY2UgPSAtMTsKCXVwKCZzcGlf bG9jayk7CgoJc3BpX2VuYWJsZWQtLTsKCWlmIChzcGlfZW5hYmxlZCA9PSAwKSB7CgkJLy9hdDkx X3NwaV93cml0ZShBVDkxX1NQSV9DUiwgQVQ5MV9TUElfU1BJRElTKTsJLyogRGlzYWJsZSBTUEkg Ki8KCQkjaWYgMAoJCWNsa19kaXNhYmxlKHNwaV9jbGspOwkJCQkvKiBEaXNhYmxlIFBlcmlwaGVy YWwgY2xvY2sgKi8KCQkjZW5kaWYKI2lmZGVmIERFQlVHX1NQSQoJCXByaW50aygiU1BJIG9mZlxu Iik7CiNlbmRpZgoJfQp9CgovKgogKiBQZXJmb3JtIGEgZGF0YSB0cmFuc2ZlciBvdmVyIHRoZSBT UEkgYnVzCiAqLwppbnQgc3BpX3RyYW5zZmVyKHN0cnVjdCBzcGlfdHJhbnNmZXJfbGlzdCogbGlz dCkKewoJc3RydWN0IHNwaV9sb2NhbCAqZGV2aWNlID0gKHN0cnVjdCBzcGlfbG9jYWwgKikgJnNw aV9kZXZbY3VycmVudF9kZXZpY2VdOwoJaW50IHR4X3NpemU7CgkjaWYgMAoJaWYgKCFsaXN0KQoJ CXBhbmljKCJhdDkxX3NwaTogc3BpX3RyYW5zZmVyIGNhbGxlZCB3aXRoIE5VTEwgdHJhbnNmZXIg bGlzdCIpOwoJaWYgKGN1cnJlbnRfZGV2aWNlID09IC0xKQoJCXBhbmljKCJhdDkxX3NwaTogc3Bp X3RyYW5zZmVyIGNhbGxlZCB3aXRob3V0IGFjcXVpcmluZyBidXMiKTsKCiNpZmRlZiBERUJVR19T UEkKCXByaW50aygiU1BJIHRyYW5zZmVyIHN0YXJ0IFslaV1cbiIsIGxpc3QtPm5yX3RyYW5zZmVy cyk7CiNlbmRpZgoKCS8qIElmIHdlIGFyZSBpbiAxNi1iaXQgbW9kZSwgd2UgbmVlZCB0byBtb2Rp Znkgd2hhdCB3ZSBwYXNzIHRvIHRoZSBQREMgKi8KCXR4X3NpemUgPSAoYXQ5MV9zcGlfcmVhZChB VDkxX1NQSV9DU1IoY3VycmVudF9kZXZpY2UpKSAmIEFUOTFfU1BJX0JJVFNfMTYpID8gMiA6IDE7 CgoJLyogU3RvcmUgdHJhbnNmZXIgbGlzdCAqLwoJZGV2aWNlLT54ZmVycyA9IGxpc3Q7CglsaXN0 LT5jdXJyID0gMDsKCgkvKiBBc3N1bWUgdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgdHJhbnNm ZXIgKi8KCWRldmljZS0+dHggPSBkbWFfbWFwX3NpbmdsZShOVUxMLCBsaXN0LT50eFswXSwgbGlz dC0+dHhsZW5bMF0sIERNQV9UT19ERVZJQ0UpOwoJZGV2aWNlLT5yeCA9IGRtYV9tYXBfc2luZ2xl KE5VTEwsIGxpc3QtPnJ4WzBdLCBsaXN0LT5yeGxlblswXSwgRE1BX0ZST01fREVWSUNFKTsKCgkv KiBQcm9ncmFtIFBEQyByZWdpc3RlcnMgKi8KCWF0OTFfc3BpX3dyaXRlKEFUOTFfUERDX1RQUiwg ZGV2aWNlLT50eCk7CglhdDkxX3NwaV93cml0ZShBVDkxX1BEQ19SUFIsIGRldmljZS0+cngpOwoJ YXQ5MV9zcGlfd3JpdGUoQVQ5MV9QRENfVENSLCBsaXN0LT50eGxlblswXSAvIHR4X3NpemUpOwoJ YXQ5MV9zcGlfd3JpdGUoQVQ5MV9QRENfUkNSLCBsaXN0LT5yeGxlblswXSAvIHR4X3NpemUpOwoK CS8qIElzIHRoZXJlIGEgc2Vjb25kIHRyYW5zZmVyPyAqLwoJaWYgKGxpc3QtPm5yX3RyYW5zZmVy cyA+IDEpIHsKCQlkZXZpY2UtPnR4bmV4dCA9IGRtYV9tYXBfc2luZ2xlKE5VTEwsIGxpc3QtPnR4 WzFdLCBsaXN0LT50eGxlblsxXSwgRE1BX1RPX0RFVklDRSk7CgkJZGV2aWNlLT5yeG5leHQgPSBk bWFfbWFwX3NpbmdsZShOVUxMLCBsaXN0LT5yeFsxXSwgbGlzdC0+cnhsZW5bMV0sIERNQV9GUk9N X0RFVklDRSk7CgoJCS8qIFByb2dyYW0gTmV4dCBQREMgcmVnaXN0ZXJzICovCgkJYXQ5MV9zcGlf d3JpdGUoQVQ5MV9QRENfVE5QUiwgZGV2aWNlLT50eG5leHQpOwoJCWF0OTFfc3BpX3dyaXRlKEFU OTFfUERDX1JOUFIsIGRldmljZS0+cnhuZXh0KTsKCQlhdDkxX3NwaV93cml0ZShBVDkxX1BEQ19U TkNSLCBsaXN0LT50eGxlblsxXSAvIHR4X3NpemUpOwoJCWF0OTFfc3BpX3dyaXRlKEFUOTFfUERD X1JOQ1IsIGxpc3QtPnJ4bGVuWzFdIC8gdHhfc2l6ZSk7Cgl9CgllbHNlIHsKCQlkZXZpY2UtPnR4 bmV4dCA9IDA7CgkJZGV2aWNlLT5yeG5leHQgPSAwOwoJCWF0OTFfc3BpX3dyaXRlKEFUOTFfUERD X1ROQ1IsIDApOwoJCWF0OTFfc3BpX3dyaXRlKEFUOTFfUERDX1JOQ1IsIDApOwoJfQoKCS8vIFRP RE86IElmIHdlIGFyZSBkb2luZyBjb25zZWN1dGl2ZSB0cmFuc2ZlcnMgKGF0IGhpZ2ggc3BlZWQs IG9yCgkvLyAgIHNtYWxsIGJ1ZmZlcnMpLCB0aGVuIGl0IG1pZ2h0IGJlIHdvcnRoIG1vZGlmeWlu ZyB0aGUgJ0RlbGF5IGJldHdlZW4KCS8vICAgQ29uc2VjdXRpdmUgVHJhbnNmZXJzJyBpbiB0aGUg Q1NSIHJlZ2lzdGVycy4KCS8vICAgVGhpcyBpcyBhbiBpc3N1ZSBpZiB3ZSBjYW5ub3QgY2hhaW4g dGhlIG5leHQgYnVmZmVyIGZhc3QgZW5vdWdoCgkvLyAgIGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxl ci4KCgkvKiBFbmFibGUgdHJhbnNtaXR0ZXIgYW5kIHJlY2VpdmVyICovCglhdDkxX3NwaV93cml0 ZShBVDkxX1BEQ19QVENSLCBBVDkxX1BEQ19SWFRFTiB8IEFUOTFfUERDX1RYVEVOKTsKCSNlbmRp ZiAKCWF0OTFfc3BpX3dyaXRlKEFUOTFfU1BJX0lFUiwgIEFUOTFfU1BJX1JEUkYpOwkJLyogZW5h YmxlIGJ1ZmZlciBjb21wbGV0ZSBpbnRlcnJ1cHQgKi8KCXdhaXRfZm9yX2NvbXBsZXRpb24oJnRy YW5zZmVyX2NvbXBsZXRlKTsKCiNpZmRlZiBERUJVR19TUEkKCXByaW50aygiU1BJIHRyYW5zZmVy IGVuZFxuIik7CiNlbmRpZgoKCXJldHVybiAwOwp9CgovKiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCgov KgogKiBIYW5kbGUgaW50ZXJydXB0cyBmcm9tIHRoZSBTUEkgY29udHJvbGxlci4KICovCnN0YXRp YyBpcnFyZXR1cm5fdCBhdDkxc3BpX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCnsK CXVuc2lnbmVkIGludCBzdGF0dXM7CglzdHJ1Y3Qgc3BpX2xvY2FsICpkZXZpY2UgPSAoc3RydWN0 IHNwaV9sb2NhbCAqKSAmc3BpX2RldltjdXJyZW50X2RldmljZV07CglzdHJ1Y3Qgc3BpX3RyYW5z ZmVyX2xpc3QgKmxpc3QgPSBkZXZpY2UtPnhmZXJzOwoJcHJpbnRrKCJTUEkgcmVhZCBkYXRhICV4 XG4iLGF0OTFfc3BpX3JlYWQoQVQ5MV9TUElfUkRSKSk7CgojaWZkZWYgREVCVUdfU1BJCglwcmlu dGsoIlNQSSBpbnRlcnJ1cHQgc3RhdHVzICV4XG4iLCBhdDkxX3NwaV9yZWFkKEFUOTFfU1BJX1NS KSAmIGF0OTFfc3BpX3JlYWQoQVQ5MV9TUElfSU1SKSk7CiNlbmRpZgoJYXQ5MV9zcGlfd3JpdGUo QVQ5MV9TUElfSURSLCBBVDkxX1NQSV9SRFJGKTsJCS8qIGRpc2FibGUgaW50ZXJydXB0ICovCgkv KiBEaXNhYmxlIHRyYW5zbWl0dGVyIGFuZCByZWNlaXZlciAqLwoJLy9hdDkxX3NwaV93cml0ZShB VDkxX1BEQ19QVENSLCBBVDkxX1BEQ19SWFRESVMgfCBBVDkxX1BEQ19UWFRESVMpOwoJLy9kZXZp Y2UtPnhmZXJzID0gTlVMTDsKCXByaW50aygiRGlzYWJsaW5nIHRyYW5zbWl0dGVyIGFuZCByZWNl aXZlciBcbiIpOwoJY29tcGxldGUoJnRyYW5zZmVyX2NvbXBsZXRlKTsKCXJldHVybiBJUlFfSEFO RExFRDsKCgkjaWYgMQoJLy9pZiAoIWxpc3QpCgkJLy9wYW5pYygiYXQ5MV9zcGk6IHNwaV9pbnRl cnJ1cHQgd2l0aCBhIE5VTEwgdHJhbnNmZXIgbGlzdCIpOwoKCXN0YXR1cyA9IGF0OTFfc3BpX3Jl YWQoQVQ5MV9TUElfU1IpICYgYXQ5MV9zcGlfcmVhZChBVDkxX1NQSV9JTVIpOwkvKiByZWFkIHN0 YXR1cyAqLwoKCWRtYV91bm1hcF9zaW5nbGUoTlVMTCwgZGV2aWNlLT50eCwgbGlzdC0+dHhsZW5b bGlzdC0+Y3Vycl0sIERNQV9UT19ERVZJQ0UpOwoJZG1hX3VubWFwX3NpbmdsZShOVUxMLCBkZXZp Y2UtPnJ4LCBsaXN0LT5yeGxlbltsaXN0LT5jdXJyXSwgRE1BX0ZST01fREVWSUNFKTsKCglkZXZp Y2UtPnR4ID0gZGV2aWNlLT50eG5leHQ7CS8qIG1vdmUgbmV4dCB0cmFuc2ZlciB0byBjdXJyZW50 IHRyYW5zZmVyICovCglkZXZpY2UtPnJ4ID0gZGV2aWNlLT5yeG5leHQ7CgoJbGlzdC0+Y3VyciA9 IGxpc3QtPmN1cnIgKyAxOwoJaWYgKGxpc3QtPmN1cnIgPT0gbGlzdC0+bnJfdHJhbnNmZXJzKSB7 CQkvKiBhbGwgdHJhbnNmZXJzIGNvbXBsZXRlICovCgkJYXQ5MV9zcGlfd3JpdGUoQVQ5MV9TUElf SURSLCBBVDkxX1NQSV9SRFJGIHwgQVQ5MV9TUElfRU5EUlgpOwkJLyogZGlzYWJsZSBpbnRlcnJ1 cHQgKi8KCQlwcmludGsoIlRyYW5zZmVyIENvbXBsZXRlIFxuIik7CgoJCS8qIERpc2FibGUgdHJh bnNtaXR0ZXIgYW5kIHJlY2VpdmVyICovCgkJYXQ5MV9zcGlfd3JpdGUoQVQ5MV9QRENfUFRDUiwg QVQ5MV9QRENfUlhURElTIHwgQVQ5MV9QRENfVFhURElTKTsKCgkJZGV2aWNlLT54ZmVycyA9IE5V TEw7CgkJY29tcGxldGUoJnRyYW5zZmVyX2NvbXBsZXRlKTsKCX0KCWVsc2UgaWYgKGxpc3QtPmN1 cnIrMSA9PSBsaXN0LT5ucl90cmFuc2ZlcnMpIHsJLyogbm8gbW9yZSBuZXh0IHRyYW5zZmVycyAq LwoJCWRldmljZS0+dHhuZXh0ID0gMDsKCQlkZXZpY2UtPnJ4bmV4dCA9IDA7CgkJYXQ5MV9zcGlf d3JpdGUoQVQ5MV9QRENfVE5DUiwgMCk7CgkJYXQ5MV9zcGlfd3JpdGUoQVQ5MV9QRENfUk5DUiwg MCk7Cgl9CgllbHNlIHsKCQlpbnQgaSA9IChsaXN0LT5jdXJyKSsxOwoKCQkvKiBJZiB3ZSBhcmUg aW4gMTYtYml0IG1vZGUsIHdlIG5lZWQgdG8gbW9kaWZ5IHdoYXQgd2UgcGFzcyB0byB0aGUgUERD ICovCgkJaW50IHR4X3NpemUgPSAoYXQ5MV9zcGlfcmVhZChBVDkxX1NQSV9DU1IoY3VycmVudF9k ZXZpY2UpKSAmIEFUOTFfU1BJX0JJVFNfMTYpID8gMiA6IDE7CgoJCWRldmljZS0+dHhuZXh0ID0g ZG1hX21hcF9zaW5nbGUoTlVMTCwgbGlzdC0+dHhbaV0sIGxpc3QtPnR4bGVuW2ldLCBETUFfVE9f REVWSUNFKTsKCQlkZXZpY2UtPnJ4bmV4dCA9IGRtYV9tYXBfc2luZ2xlKE5VTEwsIGxpc3QtPnJ4 W2ldLCBsaXN0LT5yeGxlbltpXSwgRE1BX0ZST01fREVWSUNFKTsKCQlhdDkxX3NwaV93cml0ZShB VDkxX1BEQ19UTlBSLCBkZXZpY2UtPnR4bmV4dCk7CgkJYXQ5MV9zcGlfd3JpdGUoQVQ5MV9QRENf Uk5QUiwgZGV2aWNlLT5yeG5leHQpOwoJCWF0OTFfc3BpX3dyaXRlKEFUOTFfUERDX1ROQ1IsIGxp c3QtPnR4bGVuW2ldIC8gdHhfc2l6ZSk7CgkJYXQ5MV9zcGlfd3JpdGUoQVQ5MV9QRENfUk5DUiwg bGlzdC0+cnhsZW5baV0gLyB0eF9zaXplKTsKCX0KCSNlbmRpZgoJcmV0dXJuIElSUV9IQU5ETEVE Owp9CgovKiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uICovCgovKgogKiBJbml0aWFsaXplIHRoZSBTUEkgY29u dHJvbGxlcgogKi8Kc3RhdGljIGludCBfX2luaXQgYXQ5MXNwaV9wcm9iZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQp7CglpbnQgaTsKCXVuc2lnbmVkIGxvbmcgc2NicjsKCXN0cnVjdCBy ZXNvdXJjZSAqcmVzOwoKCWluaXRfTVVURVgoJnNwaV9sb2NrKTsKCglyZXMgPSBwbGF0Zm9ybV9n ZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwoJaWYgKCFyZXMpCgkJcmV0dXJu IC1FTlhJTzsKCQkKCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5k IC0gcmVzLT5zdGFydCArIDEsICJhdG1lbF9zcGkiKSkKCQlyZXR1cm4gLUVCVVNZOwoKCXNwaV9i YXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKCWlm ICghc3BpX2Jhc2UpIHsKCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQg LSByZXMtPnN0YXJ0ICsgMSk7CgkJcmV0dXJuIC1FTk9NRU07Cgl9CgkKCXByaW50ayhLRVJOX0lO Rk8iXG5cblxuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cblxuXG4iKTsKCSNpZiAx CglzcGlfY2xrID0gY2xrX2dldChOVUxMLCAic3BpMF9jbGsiKTsKCWlmIChJU19FUlIoc3BpX2Ns aykpIHsKCQlwcmludGsoS0VSTl9FUlIgImF0OTFfc3BpOiBubyBjbG9jayBkZWZpbmVkXG4iKTsK CQlpb3VubWFwKHNwaV9iYXNlKTsKCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVz LT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CgkJcmV0dXJuIC1FTk9ERVY7Cgl9CgkjZW5kaWYKCWF0 OTFfc3BpX3dyaXRlKEFUOTFfU1BJX0NSLCBBVDkxX1NQSV9TV1JTVCk7CS8qIHNvZnR3YXJlIHJl c2V0IG9mIFNQSSBjb250cm9sbGVyICovCgkjaWYgMAoJLyoKCSAqIENhbGN1bGF0ZSB0aGUgY29y cmVjdCBTUEkgYmF1ZC1yYXRlIGRpdmlzb3IuCgkgKi8KCXNjYnIgPSBjbGtfZ2V0X3JhdGUoc3Bp X2NsaykgLyAoMiAqIERFRkFVTFRfU1BJX0NMSyk7CglzY2JyID0gc2NiciArIDE7CQkvKiByb3Vu ZCB1cCAqLwoKCXByaW50ayhLRVJOX0lORk8gImF0OTFfc3BpOiBCYXVkIHJhdGUgc2V0IHRvICVs ZFxuIiwgY2xrX2dldF9yYXRlKHNwaV9jbGspIC8gKDIgKiBzY2JyKSk7CgkKCS8qIFNldCBDaGlw IFNlbGVjdCByZWdpc3RlcnMgdG8gZ29vZCBkZWZhdWx0cyAqLwoJZm9yIChpID0gMDsgaSA8IDQ7 IGkrKykgewoJCWF0OTFfc3BpX3dyaXRlKEFUOTFfU1BJX0NTUihpKSwgQVQ5MV9TUElfQklUU184 IHwgKHNjYnIgPDwgOCkpOwoJfQoJI2VuZGlmCglhdDkxX3NwaV93cml0ZShBVDkxX1NQSV9DU1Io MCksIEFUOTFfU1BJX0NQT0wgfCBBVDkxX1NQSV9CSVRTXzggfCAoMTYgPDwgMTYpKTsKCglhdDkx X3NwaV93cml0ZShBVDkxX1BEQ19QVENSLCBBVDkxX1BEQ19SWFRESVMgfCBBVDkxX1BEQ19UWFRE SVMpOwoKCW1lbXNldCgmc3BpX2RldiwgMCwgc2l6ZW9mKHNwaV9kZXYpKTsKCXNwaV9kZXZbMF0u cGNzID0gMHhFOwoJc3BpX2RldlsxXS5wY3MgPSAweEQ7CglzcGlfZGV2WzJdLnBjcyA9IDB4QjsK CXNwaV9kZXZbM10ucGNzID0gMHg3OwoKCWlmIChyZXF1ZXN0X2lycShBVDkxU0FNOTI2MF9JRF9T UEkwLCBhdDkxc3BpX2ludGVycnVwdCwgMCwgInNwaSIsIE5VTEwpKSB7CgkJI2lmIDAKCQljbGtf cHV0KHNwaV9jbGspOwoJCSNlbmRpZgoJCWlvdW5tYXAoc3BpX2Jhc2UpOwoJCXJlbGVhc2VfbWVt X3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKCQlyZXR1cm4g LUVCVVNZOwoJfQoKCWF0OTFfc3BpX3dyaXRlKEFUOTFfU1BJX0NSLCBBVDkxX1NQSV9TUElFTik7 CQkvKiBFbmFibGUgU1BJICovCglhdDkxX3NwaV93cml0ZShBVDkxX1NQSV9NUiwgQVQ5MV9TUElf TU9ERkRJUyB8IChzcGlfZGV2WzBdLnBjcyA8PCAxNikpOwoKCXJldHVybiAwOwp9CgpzdGF0aWMg aW50IF9fZGV2ZXhpdCBhdDkxc3BpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 KQp7CglzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKCglhdDkxX3NwaV93cml0ZShBVDkxX1NQSV9DUiwg QVQ5MV9TUElfU1BJRElTKTsJCS8qIERpc2FibGUgU1BJICovCgkjaWYgMAoJY2xrX3B1dChzcGlf Y2xrKTsKCSNlbmRpZgoJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VS Q0VfTUVNLCAwKTsKCWlvdW5tYXAoc3BpX2Jhc2UpOwoJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+ c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOwoKCWZyZWVfaXJxKEFUOTFTQU05MjYw X0lEX1NQSTAsIDApOwoJcmV0dXJuIDA7Cn0KCnN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVy IGF0OTFzcGlfZHJpdmVyID0gewoJLnByb2JlCQk9IGF0OTFzcGlfcHJvYmUsCgkucmVtb3ZlCQk9 IF9fZGV2ZXhpdF9wKGF0OTFzcGlfcmVtb3ZlKSwKCS5kcml2ZXIJCT0gewoJCS5uYW1lCT0gImF0 bWVsX3NwaSIsCgkJLm93bmVyCT0gVEhJU19NT0RVTEUsCgl9LAp9OwoKc3RhdGljIGludCBfX2lu aXQgYXQ5MXNwaV9pbml0KHZvaWQpCnsKCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIo JmF0OTFzcGlfZHJpdmVyKTsKfQoKc3RhdGljIHZvaWQgX19leGl0IGF0OTFzcGlfZXhpdCh2b2lk KQp7CglwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXQ5MXNwaV9kcml2ZXIpOwp9Cgo= ------_=_NextPart_001_01C93B00.94A6E037 Content-Type: application/octet-stream; name="at91_spi_slave_dev.c" Content-Transfer-Encoding: base64 Content-Description: at91_spi_slave_dev.c Content-Disposition: attachment; filename="at91_spi_slave_dev.c" I2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgojaW5jbHVkZSA8bGludXgvaW5pdC5oPgojaW5jbHVk ZSA8bGludXgvc2xhYi5oPgojaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgojaW5jbHVkZSA8bGlu dXgvcGFnZW1hcC5oPgojaW5jbHVkZSA8YXNtL2FyY2gvc3BpLmg+CiNpZmRlZiBDT05GSUdfREVW RlNfRlMKI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgojZW5kaWYKCiNkZWZpbmUg REVCVUdfU1BJREVWCgojZGVmaW5lIFNQSV9TTEFWRV9NQUpPUgkJMTU0CS8qIHJlZ2lzdGVyZWQg ZGV2aWNlIG51bWJlciAqLwoKCiNkZWZpbmUgTU9aQVJUX1NMQVZFX0lPQ19NQUdJQyAgCQkweEQw CS8vIFRvIEJlIERlZmluZWQKI2RlZmluZSBNT1pBUlRfR0VUX0ZMT1dfQ09OVFJPTAkJCV9JT1co TU9aQVJUX1NMQVZFX0lPQ19NQUdJQywgMCxsb25nKQojZGVmaW5lIE1PWkFSVF9TRU5EX1JFQURf U0xBVkVfUkRZCQlfSU9XKE1PWkFSVF9TTEFWRV9JT0NfTUFHSUMsIDUsbG9uZykKI2RlZmluZSBN T1pBUlRfU0VORF9XUklURV9TTEFWRV9SRFkJCV9JT1coTU9aQVJUX1NMQVZFX0lPQ19NQUdJQywg Nixsb25nKQoKLyogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAqLwoKLyoKICogUmVhZCBvciBXcml0ZSB0byBT UEkgYnVzLgogKi8Kc3RhdGljIHNzaXplX3Qgc3Bpc2xhdmVkZXZfcmRfd3Ioc3RydWN0IGZpbGUg KmZpbGUsIGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZnNldCkKewoJdW5zaWdu ZWQgaW50IHNwaV9kZXZpY2UgPSAodW5zaWduZWQgaW50KSBmaWxlLT5wcml2YXRlX2RhdGE7CgoJ c3RydWN0IG1tX3N0cnVjdCAqIG1tOwoJc3RydWN0IHBhZ2UgKiogbWFwbGlzdDsKCXN0cnVjdCBz cGlfdHJhbnNmZXJfbGlzdCogbGlzdDsKCWludCAgICBwZ2NvdW50OwoKCXVuc2lnbmVkIGludCBv ZnMsIHBhZ2VsZW47CglpbnQgcmVzLCBpLCBlcnI7CglwcmludGsoIlxuSW4gJXMgOiAlcyA6ICVk XG4iLF9fRklMRV9fLF9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7IAoKCWlmICghY291bnQpIHsKCQly ZXR1cm4gMDsKCX0KCXByaW50aygiXG5JbiAlcyA6ICVzIDogJWRcbiIsX19GSUxFX18sX19GVU5D VElPTl9fLF9fTElORV9fKTsgCgkKCWxpc3QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3BpX3Ry YW5zZmVyX2xpc3QpLCBHRlBfS0VSTkVMKTsKCWlmICghbGlzdCkgewoJCXJldHVybiAtRU5PTUVN OwoJfQoJcHJpbnRrKCJcbkluICVzIDogJXMgOiAlZFxuIixfX0ZJTEVfXyxfX0ZVTkNUSU9OX18s X19MSU5FX18pOyAKCgltbSA9IGN1cnJlbnQtPm1tOwoKCXBnY291bnQgPSAoKHVuc2lnbmVkIGxv bmcpYnVmK2NvdW50K1BBR0VfU0laRS0xKS9QQUdFX1NJWkUgLSAodW5zaWduZWQgbG9uZylidWYv UEFHRV9TSVpFOwoKCWlmIChwZ2NvdW50ID49IE1BWF9TUElfVFJBTlNGRVJTKSB7CgkJa2ZyZWUo bGlzdCk7CgkJcmV0dXJuIC1FRkJJRzsKCX0KCXByaW50aygiXG5JbiAlcyA6ICVzIDogJWRcbiIs X19GSUxFX18sX19GVU5DVElPTl9fLF9fTElORV9fKTsgCgoJbWFwbGlzdCA9IGttYWxsb2MgKHBn Y291bnQgKiBzaXplb2YgKHN0cnVjdCBwYWdlICopLCBHRlBfS0VSTkVMKTsKCglpZiAoIW1hcGxp c3QpIHsKCQlrZnJlZShsaXN0KTsKCQlyZXR1cm4gLUVOT01FTTsKCX0KCXByaW50aygiXG5JbiAl cyA6ICVzIDogJWRcbiIsX19GSUxFX18sX19GVU5DVElPTl9fLF9fTElORV9fKTsgCglmbHVzaF9j YWNoZV9hbGwoKTsKCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKCWVycj0gZ2V0X3VzZXJfcGFn ZXMoY3VycmVudCwgbW0sICh1bnNpZ25lZCBsb25nKWJ1ZiwgcGdjb3VudCwgMSwgMCwgbWFwbGlz dCwgTlVMTCk7Cgl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwoKCWlmIChlcnIgPCAwKSB7CgkJa2Zy ZWUobGlzdCk7CgkJa2ZyZWUobWFwbGlzdCk7CgkJcmV0dXJuIGVycjsKCX0KCXByaW50aygiXG5J biAlcyA6ICVzIDogJWRcbiIsX19GSUxFX18sX19GVU5DVElPTl9fLF9fTElORV9fKTsgCglwZ2Nv dW50ID0gZXJyOwoKI2lmZGVmIERFQlVHX1NQSURFVgoJcHJpbnRrKCJzcGlzbGF2ZWRldl9yZF9y dzogJWkgJWlcbiIsIGNvdW50LCBwZ2NvdW50KTsKI2VuZGlmCgkvKiBTZXQgZGVmYXVsdCByZXR1 cm4gdmFsdWUgPSB0cmFuc2ZlciBsZW5ndGggKi8KCXJlcyA9IGNvdW50OwoKCS8qCgkgKiBBdCB0 aGlzIHBvaW50LCB0aGUgdmlydHVhbCBhcmVhIGJ1ZlswXSAuLiBidWZbY291bnQtMV0gd2lsbCBo YXZlCgkgKiBjb3JyZXNwb25kaW5nIHBhZ2VzIG1hcHBlZCBpbiB0aGUgcGh5c2ljYWwgbWVtb3J5 IGFuZCBsb2NrZWQgdW50aWwKCSAqIHdlIHVubWFwIHRoZSBraW9idWYuICBUaGUgcGFnZXMgY2Fu bm90IGJlIHN3YXBwZWQgb3V0IG9yIG1vdmVkCgkgKiBhcm91bmQuCgkgKi8KCW9mcyA9ICh1bnNp Z25lZCBsb25nKSBidWYgJiAoUEFHRV9TSVpFIC0xKTsKCXBhZ2VsZW4gPSBQQUdFX1NJWkUgLSBv ZnM7CglpZiAoY291bnQgPCBwYWdlbGVuKQoJCXBhZ2VsZW4gPSBjb3VudDsKCXByaW50aygiT2Zm c2V0IHRvIHJlYWQgJWRcbiIsb2ZzKTsKCWZvciAoaSA9IDA7IGkgPCBwZ2NvdW50OyBpKyspIHsK CQlmbHVzaF9kY2FjaGVfcGFnZShtYXBsaXN0W2ldKTsKCQlwcmludGsoIlxuSW4gJXMgOiAlcyA6 ICVkXG4iLF9fRklMRV9fLF9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7IAoKCQlsaXN0LT50eFtpXSA9 IGxpc3QtPnJ4W2ldID0gcGFnZV9hZGRyZXNzKG1hcGxpc3RbaV0pICsgb2ZzOwoJCWxpc3QtPnR4 bGVuW2ldID0gbGlzdC0+cnhsZW5baV0gPSBwYWdlbGVuOwoKI2lmZGVmIERFQlVHX1NQSURFVgoJ CXByaW50aygiICAlaTogJXggICglaSlcbiIsIGksIGxpc3QtPnR4W2ldLCBsaXN0LT50eGxlbltp XSk7CiNlbmRpZgoKCQlvZnMgPSAwOwkvKiBhbGwgc3Vic2VxdWVudCB0cmFuc2ZlcnMgc3RhcnQg YXQgYmVnaW5uaW5nIG9mIGEgcGFnZSAqLwoJCWNvdW50ID0gY291bnQgLSBwYWdlbGVuOwoJCXBh Z2VsZW4gPSAoY291bnQgPCBQQUdFX1NJWkUpID8gY291bnQgOiBQQUdFX1NJWkU7Cgl9CglsaXN0 LT5ucl90cmFuc2ZlcnMgPSBwZ2NvdW50OwoKCS8qIFBlcmZvcm0gdHJhbnNmZXIgb24gU1BJIGJ1 cyAqLwoJLy9wcmludGsoIlxuSW4gJXMgOiAlcyA6ICVkXG4iLF9fRklMRV9fLF9fRlVOQ1RJT05f XyxfX0xJTkVfXyk7IAoJLy9zcGlfYWNjZXNzX2J1cyhzcGlfZGV2aWNlKTsKCXByaW50aygiXG5J biAlcyA6ICVzIDogJWRcbiIsX19GSUxFX18sX19GVU5DVElPTl9fLF9fTElORV9fKTsgCglzcGlf dHJhbnNmZXIobGlzdCk7CgkvL3NwaV9yZWxlYXNlX2J1cyhzcGlfZGV2aWNlKTsKCS8vcHJpbnRr KCJcbkluICVzIDogJXMgOiAlZFxuIixfX0ZJTEVfXyxfX0ZVTkNUSU9OX18sX19MSU5FX18pOyAK Cgl3aGlsZSAocGdjb3VudC0tKSB7CgkJcGFnZV9jYWNoZV9yZWxlYXNlIChtYXBsaXN0W3BnY291 bnRdKTsKCX0KCWZsdXNoX2NhY2hlX2FsbCgpOwoKCWtmcmVlKG1hcGxpc3QpOwoJa2ZyZWUobGlz dCk7CgoJcmV0dXJuIHJlczsKfQoKc3RhdGljIGludCBzcGlzbGF2ZWRldl9pb2N0bChzdHJ1Y3Qg aW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWdu ZWQgbG9uZyBhcmcpCnsKCWludCBzcGlfZGV2aWNlID0gTUlOT1IoaW5vZGUtPmlfcmRldik7CgoJ cHJpbnRrKCJcbkluICVzIDogJXMgOiAlZFxuIixfX0ZJTEVfXyxfX0ZVTkNUSU9OX18sX19MSU5F X18pOyAKCWlmIChzcGlfZGV2aWNlID49IE5SX1NQSV9ERVZJQ0VTKQoJCXJldHVybiAtRU5PREVW OwoKCS8vIFRPRE86IFRoaXMgaW50ZXJmYWNlIGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUg U1BJIGJ1cy4KCQoJc3dpdGNoKGNtZCkgewoJCWNhc2UgTU9aQVJUX0dFVF9GTE9XX0NPTlRST0w6 CgkJCS8vIFRPRE8KCQkJYnJlYWsgOwoJCQoJCWNhc2UgTU9aQVJUX1NFTkRfUkVBRF9TTEFWRV9S RFk6CgkJCS8vIFRPRE8KCQkJYnJlYWsgOwoJCQoJCWNhc2UgTU9aQVJUX1NFTkRfV1JJVEVfU0xB VkVfUkRZOgoJCQkvLyBUT0RPCgkJCWJyZWFrOwoJCQoJCWRlZmF1bHQ6CgkJCXJldHVybiAtRU5P SU9DVExDTUQ7Cgl9CglyZXR1cm4gMDsKfQoKLyoKICogT3BlbiB0aGUgU1BJIGRldmljZQogKi8K c3RhdGljIGludCBzcGlzbGF2ZWRldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBm aWxlICpmaWxlKQp7Cgl1bnNpZ25lZCBpbnQgc3BpX2RldmljZSA9IE1JTk9SKGlub2RlLT5pX3Jk ZXYpOwoKCXByaW50aygiXG5JbiAlcyA6ICVzIDogJWRcbiIsX19GSUxFX18sX19GVU5DVElPTl9f LF9fTElORV9fKTsgCglwcmludGsoInNwaV9kZXZpY2UgJWQgLSBOUl9TUElfREVWSUNFUyAlZFxu IixzcGlfZGV2aWNlLE5SX1NQSV9ERVZJQ0VTKTsgCglpZiAoc3BpX2RldmljZSA+PSBOUl9TUElf REVWSUNFUykKCXsKCQlyZXR1cm4gLUVOT0RFVjsKCX0KCS8qCgkgKiAncHJpdmF0ZV9kYXRhJyBp cyBhY3R1YWxseSBhIHBvaW50ZXIsIGJ1dCB3ZSBvdmVybG9hZCBpdCB3aXRoIHRoZQoJICogdmFs dWUgd2Ugd2FudCB0byBzdG9yZS4KCSAqLwoJZmlsZS0+cHJpdmF0ZV9kYXRhID0gKHZvaWQgKilz cGlfZGV2aWNlOwoJcHJpbnRrKCJcbkluICVzIDogJXMgOiAlZFxuIixfX0ZJTEVfXyxfX0ZVTkNU SU9OX18sX19MSU5FX18pOyAKCXJldHVybiAwOwp9CgovKgogKiBDbG9zZSB0aGUgU1BJIGRldmlj ZQogKi8Kc3RhdGljIGludCBzcGlzbGF2ZWRldl9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBz dHJ1Y3QgZmlsZSAqZmlsZSkKewoJcHJpbnRrKCJcbkluICVzIDogJXMgOiAlZFxuIixfX0ZJTEVf XyxfX0ZVTkNUSU9OX18sX19MSU5FX18pOyAKCXJldHVybiAwOwp9CgovKiAuLi4uLi4uLi4uLi4u Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u Li4uICovCgpzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzcGlzbGF2ZWRldl9mb3BzID0g ewoJLm93bmVyCQk9IFRISVNfTU9EVUxFLAoJLmxsc2VlawkJPSBub19sbHNlZWssCgkucmVhZAkJ PSBzcGlzbGF2ZWRldl9yZF93ciwKCS53cml0ZQkJPSAoaW50ICgqKSAoc3RydWN0IGZpbGUgKmZp bGUsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZnNldCkpc3Bpc2xh dmVkZXZfcmRfd3IsCgkuaW9jdGwJCT0gc3Bpc2xhdmVkZXZfaW9jdGwsCgkub3BlbgkJPSBzcGlz bGF2ZWRldl9vcGVuLAoJLnJlbGVhc2UJPSBzcGlzbGF2ZWRldl9jbG9zZSwKfTsKCi8qCiAqIElu c3RhbGwgdGhlIFNQSSAvZGV2IGludGVyZmFjZSBkcml2ZXIKICovCnN0YXRpYyBpbnQgX19pbml0 IGF0OTFfc3Bpc2xhdmVkZXZfaW5pdCh2b2lkKQp7CglwcmludGsoIlxuSW4gJXMgOiAlcyA6ICVk XG4iLF9fRklMRV9fLF9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7IAojaWZkZWYgQ09ORklHX0RFVkZT X0ZTCglpbnQgaTsKI2VuZGlmCgoJaWYgKHJlZ2lzdGVyX2NocmRldihTUElfU0xBVkVfTUFKT1Is ICJzcGlfc2xhdmUiLCAmc3Bpc2xhdmVkZXZfZm9wcykpIHsKCQlwcmludGsoS0VSTl9FUlIgImF0 OTFfc3Bpc2xhdmVkZXY6IFVuYWJsZSB0byBnZXQgbWFqb3IgJWQgZm9yIFNQSSBidXNcbiIsIFNQ SV9TTEFWRV9NQUpPUik7CgkJcmV0dXJuIC1FSU87Cgl9CgllbHNlCgl7CgkJcHJpbnRrKCJSZWdp c3RlcmVkIGF0OTFfc3Bpc2xhdmVkZXYgTWFqb3I6ICVkXG4iLFNQSV9TTEFWRV9NQUpPUik7Cgl9 CgoJcHJpbnRrKEtFUk5fSU5GTyAiQVQ5MSBTUEkgZHJpdmVyIGxvYWRlZFxuIik7CgoJcmV0dXJu IDA7Cn0KCi8qCiAqIFJlbW92ZSB0aGUgU1BJIC9kZXYgaW50ZXJmYWNlIGRyaXZlcgogKi8Kc3Rh dGljIHZvaWQgX19leGl0IGF0OTFfc3Bpc2xhdmVkZXZfZXhpdCh2b2lkKQp7CglwcmludGsoIlxu SW4gJXMgOiAlcyA6ICVkXG4iLF9fRklMRV9fLF9fRlVOQ1RJT05fXyxfX0xJTkVfXyk7IAojaWZk ZWYgQ09ORklHX0RFVkZTX0ZTCglpbnQgaTsKCWZvciAoaSA9IDA7IGkgPCBOUl9TUElfREVWSUNF UzsgaSsrKSB7CgkJZGV2ZnNfcmVtb3ZlKCJzcGkvJWQiLCBpKTsKCX0KCglkZXZmc19yZW1vdmUo InNwaSIpOwojZW5kaWYKCglpZiAodW5yZWdpc3Rlcl9jaHJkZXYoU1BJX1NMQVZFX01BSk9SLCAi c3BpIikpIHsKCQlwcmludGsoS0VSTl9FUlIgImF0OTFfc3Bpc2xhdmVkZXY6IFVuYWJsZSB0byBy ZWxlYXNlIG1ham9yICVkIGZvciBTUEkgYnVzXG4iLCBTUElfU0xBVkVfTUFKT1IpOwoJCXJldHVy bjsKCX0KfQo= ------_=_NextPart_001_01C93B00.94A6E037 Content-Type: application/octet-stream; name="at91sam9260_devices.c" Content-Transfer-Encoding: base64 Content-Description: at91sam9260_devices.c Content-Disposition: attachment; filename="at91sam9260_devices.c" I2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgoKI2lu Y2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgojaW5jbHVkZSA8bGludXgvZGVsYXkuaD4K I2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CiNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CiNp bmNsdWRlIDxhc20vYXJjaC9hdDkxc2FtOTI2MC5oPgojaW5jbHVkZSA8YXNtL2FyY2gvYXQ5MXNh bTkyNjBfbWF0cml4Lmg+CiNpbmNsdWRlIDxhc20vYXJjaC9hdDkxc2FtOTI2eF9tYy5oPgojaW5j bHVkZSA8YXNtL2FyY2gvYXQ5MV9wbWMuaD4KI2luY2x1ZGUgImdlbmVyaWMuaCIKCiNkZWZpbmUg U1pfNTEyCTB4MDAwMDAyMDAKI2RlZmluZSBTWl8yNTYJMHgwMDAwMDEwMAojZGVmaW5lIFNaXzE2 CTB4MDAwMDAwMTAKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqICBVU0IgSG9zdAogKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAq LwoKI2lmIGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRCkgfHwgZGVmaW5lZChDT05GSUdfVVNC X09IQ0lfSENEX01PRFVMRSkKc3RhdGljIHU2NCBvaGNpX2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7 CnN0YXRpYyBzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEgdXNiaF9kYXRhOwoKc3RhdGljIHN0cnVjdCBy ZXNvdXJjZSB1c2JoX3Jlc291cmNlc1tdID0gewoJWzBdID0gewoJCS5zdGFydAk9IEFUOTFTQU05 MjYwX1VIUF9CQVNFLAoJCS5lbmQJPSBBVDkxU0FNOTI2MF9VSFBfQkFTRSArIFNaXzFNIC0gMSwK CQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKCX0sCglbMV0gPSB7CgkJLnN0YXJ0CT0gQVQ5MVNB TTkyNjBfSURfVUhQLAoJCS5lbmQJPSBBVDkxU0FNOTI2MF9JRF9VSFAsCgkJLmZsYWdzCT0gSU9S RVNPVVJDRV9JUlEsCgl9LAp9OwoKc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MV91 c2JoX2RldmljZSA9IHsKCS5uYW1lCQk9ICJhdDkxX29oY2kiLAoJLmlkCQk9IC0xLAoJLmRldgkJ PSB7CgkJCQkuZG1hX21hc2sJCT0gJm9oY2lfZG1hbWFzaywKCQkJCS5jb2hlcmVudF9kbWFfbWFz awk9IDB4ZmZmZmZmZmYsCgkJCQkucGxhdGZvcm1fZGF0YQkJPSAmdXNiaF9kYXRhLAoJfSwKCS5y ZXNvdXJjZQk9IHVzYmhfcmVzb3VyY2VzLAoJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVz YmhfcmVzb3VyY2VzKSwKfTsKCnZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV91c2JoKHN0cnVj dCBhdDkxX3VzYmhfZGF0YSAqZGF0YSkKewoJaWYgKCFkYXRhKQoJCXJldHVybjsKCgl1c2JoX2Rh dGEgPSAqZGF0YTsKCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MV91c2JoX2RldmljZSk7 Cn0KI2Vsc2UKdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3VzYmgoc3RydWN0IGF0OTFfdXNi aF9kYXRhICpkYXRhKSB7fQojZW5kaWYKCgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiAgVVNCIERldmljZSAo R2FkZ2V0KQogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX0FUOTEK c3RhdGljIHN0cnVjdCBhdDkxX3VkY19kYXRhIHVkY19kYXRhOwoKc3RhdGljIHN0cnVjdCByZXNv dXJjZSB1ZGNfcmVzb3VyY2VzW10gPSB7CglbMF0gPSB7CgkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjBf QkFTRV9VRFAsCgkJLmVuZAk9IEFUOTFTQU05MjYwX0JBU0VfVURQICsgU1pfMTZLIC0gMSwKCQku ZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKCX0sCglbMV0gPSB7CgkJLnN0YXJ0CT0gQVQ5MVNBTTky NjBfSURfVURQLAoJCS5lbmQJPSBBVDkxU0FNOTI2MF9JRF9VRFAsCgkJLmZsYWdzCT0gSU9SRVNP VVJDRV9JUlEsCgl9LAp9OwoKc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MV91ZGNf ZGV2aWNlID0gewoJLm5hbWUJCT0gImF0OTFfdWRjIiwKCS5pZAkJPSAtMSwKCS5kZXYJCT0gewoJ CQkJLnBsYXRmb3JtX2RhdGEJCT0gJnVkY19kYXRhLAoJfSwKCS5yZXNvdXJjZQk9IHVkY19yZXNv dXJjZXMsCgkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWRjX3Jlc291cmNlcyksCn07Cgp2 b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfdWRjKHN0cnVjdCBhdDkxX3VkY19kYXRhICpkYXRh KQp7CglpZiAoIWRhdGEpCgkJcmV0dXJuOwoKCWlmIChkYXRhLT52YnVzX3BpbikgewoJCWF0OTFf c2V0X2dwaW9faW5wdXQoZGF0YS0+dmJ1c19waW4sIDApOwoJCWF0OTFfc2V0X2RlZ2xpdGNoKGRh dGEtPnZidXNfcGluLCAxKTsKCX0KCgkvKiBQdWxsdXAgcGluIGlzIGhhbmRsZWQgaW50ZXJuYWxs eSBieSBVU0IgZGV2aWNlIHBlcmlwaGVyYWwgKi8KCgl1ZGNfZGF0YSA9ICpkYXRhOwoJcGxhdGZv cm1fZGV2aWNlX3JlZ2lzdGVyKCZhdDkxX3VkY19kZXZpY2UpOwp9CiNlbHNlCnZvaWQgX19pbml0 IGF0OTFfYWRkX2RldmljZV91ZGMoc3RydWN0IGF0OTFfdWRjX2RhdGEgKmRhdGEpIHt9CiNlbmRp ZgoKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCiAqICBFdGhlcm5ldAogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKI2lmIGRl ZmluZWQoQ09ORklHX01BQ0IpIHx8IGRlZmluZWQoQ09ORklHX01BQ0JfTU9EVUxFKQpzdGF0aWMg dTY0IGV0aF9kbWFtYXNrID0gMHhmZmZmZmZmZlVMOwpzdGF0aWMgc3RydWN0IGV0aF9wbGF0Zm9y bV9kYXRhIGV0aF9kYXRhOwoKc3RhdGljIHN0cnVjdCByZXNvdXJjZSBldGhfcmVzb3VyY2VzW10g PSB7CglbMF0gPSB7CgkJLnN0YXJ0CT0gQVQ5MVNBTTkyNjBfQkFTRV9FTUFDLAoJCS5lbmQJPSBB VDkxU0FNOTI2MF9CQVNFX0VNQUMgKyBTWl8xNksgLSAxLAoJCS5mbGFncwk9IElPUkVTT1VSQ0Vf TUVNLAoJfSwKCVsxXSA9IHsKCQkuc3RhcnQJPSBBVDkxU0FNOTI2MF9JRF9FTUFDLAoJCS5lbmQJ PSBBVDkxU0FNOTI2MF9JRF9FTUFDLAoJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAoJfSwKfTsK CnN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYwX2V0aF9kZXZpY2UgPSB7 CgkubmFtZQkJPSAibWFjYiIsCgkuaWQJCT0gLTEsCgkuZGV2CQk9IHsKCQkJCS5kbWFfbWFzawkJ PSAmZXRoX2RtYW1hc2ssCgkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSAweGZmZmZmZmZmLAoJCQkJ LnBsYXRmb3JtX2RhdGEJCT0gJmV0aF9kYXRhLAoJfSwKCS5yZXNvdXJjZQk9IGV0aF9yZXNvdXJj ZXMsCgkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZXRoX3Jlc291cmNlcyksCn07Cgp2b2lk IF9faW5pdCBhdDkxX2FkZF9kZXZpY2VfZXRoKHN0cnVjdCBldGhfcGxhdGZvcm1fZGF0YSAqZGF0 YSkKewoJaWYgKCFkYXRhKQoJCXJldHVybjsKCglpZiAoZGF0YS0+cGh5X2lycV9waW4pIHsKCQlh dDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnBoeV9pcnFfcGluLCAwKTsKCQlhdDkxX3NldF9kZWds aXRjaChkYXRhLT5waHlfaXJxX3BpbiwgMSk7Cgl9CgoJLyogUGlucyB1c2VkIGZvciBNSUkgYW5k IFJNSUkgKi8KCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTksIDApOwkvKiBFVFhDS19F UkVGQ0sgKi8KCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTcsIDApOwkvKiBFUlhEViAq LwoJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExNCwgMCk7CS8qIEVSWDAgKi8KCWF0OTFf c2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTUsIDApOwkvKiBFUlgxICovCglhdDkxX3NldF9BX3Bl cmlwaChBVDkxX1BJTl9QQTE4LCAwKTsJLyogRVJYRVIgKi8KCWF0OTFfc2V0X0FfcGVyaXBoKEFU OTFfUElOX1BBMTYsIDApOwkvKiBFVFhFTiAqLwoJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5f UEExMiwgMCk7CS8qIEVUWDAgKi8KCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTMsIDAp OwkvKiBFVFgxICovCglhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTIxLCAwKTsJLyogRU1E SU8gKi8KCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMjAsIDApOwkvKiBFTURDICovCgoJ aWYgKCFkYXRhLT5pc19ybWlpKSB7CgkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEyOCwg MCk7CS8qIEVDUlMgKi8KCQlhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTI5LCAwKTsJLyog RUNPTCAqLwoJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMjUsIDApOwkvKiBFUlgyICov CgkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEyNiwgMCk7CS8qIEVSWDMgKi8KCQlhdDkx X3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTI3LCAwKTsJLyogRVJYQ0sgKi8KCQlhdDkxX3NldF9C X3BlcmlwaChBVDkxX1BJTl9QQTIzLCAwKTsJLyogRVRYMiAqLwoJCWF0OTFfc2V0X0JfcGVyaXBo KEFUOTFfUElOX1BBMjQsIDApOwkvKiBFVFgzICovCgkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9Q SU5fUEEyMiwgMCk7CS8qIEVUWEVSICovCgl9CgoJZXRoX2RhdGEgPSAqZGF0YTsKCXBsYXRmb3Jt X2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjBfZXRoX2RldmljZSk7Cn0KI2Vsc2UKdm9pZCBf X2luaXQgYXQ5MV9hZGRfZGV2aWNlX2V0aChzdHJ1Y3QgZXRoX3BsYXRmb3JtX2RhdGEgKmRhdGEp IHt9CiNlbmRpZgoKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqICBNTUMgLyBTRAogKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAq LwoKI2lmIGRlZmluZWQoQ09ORklHX01NQ19BVDkxKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfQVQ5 MV9NT0RVTEUpCnN0YXRpYyB1NjQgbW1jX2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7CnN0YXRpYyBz dHJ1Y3QgYXQ5MV9tbWNfZGF0YSBtbWNfZGF0YTsKCnN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbW1j X3Jlc291cmNlc1tdID0gewoJWzBdID0gewoJCS5zdGFydAk9IEFUOTFTQU05MjYwX0JBU0VfTUNJ LAoJCS5lbmQJPSBBVDkxU0FNOTI2MF9CQVNFX01DSSArIFNaXzE2SyAtIDEsCgkJLmZsYWdzCT0g SU9SRVNPVVJDRV9NRU0sCgl9LAoJWzFdID0gewoJCS5zdGFydAk9IEFUOTFTQU05MjYwX0lEX01D SSwKCQkuZW5kCT0gQVQ5MVNBTTkyNjBfSURfTUNJLAoJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJR LAoJfSwKfTsKCnN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYwX21tY19k ZXZpY2UgPSB7CgkubmFtZQkJPSAiYXQ5MV9tY2kiLAoJLmlkCQk9IC0xLAoJLmRldgkJPSB7CgkJ CQkuZG1hX21hc2sJCT0gJm1tY19kbWFtYXNrLAoJCQkJLmNvaGVyZW50X2RtYV9tYXNrCT0gMHhm ZmZmZmZmZiwKCQkJCS5wbGF0Zm9ybV9kYXRhCQk9ICZtbWNfZGF0YSwKCX0sCgkucmVzb3VyY2UJ PSBtbWNfcmVzb3VyY2VzLAoJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG1tY19yZXNvdXJj ZXMpLAp9OwoKI2RlZmluZSBBVDkxX1NETU1DX1VTRV9FWFRFUk5BTF9QVUxMVVAKCnZvaWQgX19p bml0IGF0OTFfYWRkX2RldmljZV9tbWMoc3RydWN0IGF0OTFfbW1jX2RhdGEgKmRhdGEpCnsKI2lm ZGVmIEFUOTFfU0RNTUNfVVNFX0VYVEVSTkFMX1BVTExVUAoJaW50IHB1bGx1cCA9IDA7CiNlbHNl CglpbnQgcHVsbHVwID0gMTsKI2VuZGlmCQoJaWYgKCFkYXRhKQoJCXJldHVybjsKCgkvKiBpbnB1 dC9pcnEgKi8KCWlmIChkYXRhLT5kZXRfcGluKSB7Ci8vCQlhdDkxX3NldF9ncGlvX2lucHV0KGRh dGEtPmRldF9waW4sIDEpOwoJCWF0OTFfc2V0X2dwaW9faW5wdXQoZGF0YS0+ZGV0X3BpbiwgcHVs bHVwKTsJLy8gU0NSCgkJYXQ5MV9zZXRfZGVnbGl0Y2goZGF0YS0+ZGV0X3BpbiwgMSk7Cgl9Cglp ZiAoZGF0YS0+d3BfcGluKSB7Ci8vCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPndwX3Bpbiwg MSk7CgkJYXQ5MV9zZXRfZ3Bpb19pbnB1dChkYXRhLT53cF9waW4sIHB1bGx1cCk7CS8vIFNDUgoJ fQoJaWYgKGRhdGEtPnZjY19waW4pCgkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQoZGF0YS0+dmNjX3Bp biwgMCk7CgoJLyogQ0xLICovCglhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTgsIDApOwoJ CglpZiAoZGF0YS0+c2xvdF9iKSB7CgkJLyogQ01EICovCgkJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5 MV9QSU5fUEExLCBwdWxsdXApOwkvLyBTQ1IKCgkJLyogREFUMCwgbWF5YmUgREFUMS4uREFUMyAq LwoJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMCwgcHVsbHVwKTsJLy8gU0NSCgkJaWYg KGRhdGEtPndpcmU0KSB7CgkJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBNSwgcHVsbHVw KTsJLy8gU0NSCgkJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBNCwgcHVsbHVwKTsJLy8g U0NSCgkJCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BBMywgcHVsbHVwKTsJLy8gU0NSCgkJ fQoJfSBlbHNlIHsKCQkvKiBDTUQgKi8KCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTcs IDEpOwoKCQkvKiBEQVQwLCBtYXliZSBEQVQxLi5EQVQzICovCgkJYXQ5MV9zZXRfQV9wZXJpcGgo QVQ5MV9QSU5fUEE2LCAxKTsKCQlpZiAoZGF0YS0+d2lyZTQpIHsKCQkJYXQ5MV9zZXRfQV9wZXJp cGgoQVQ5MV9QSU5fUEE5LCAxKTsKCQkJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExMCwg MSk7CgkJCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMTEsIDEpOwoJCX0KCX0KCQoJbW1j X2RhdGEgPSAqZGF0YTsKCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjBfbW1j X2RldmljZSk7Cn0KI2Vsc2UKdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX21tYyhzdHJ1Y3Qg YXQ5MV9tbWNfZGF0YSAqZGF0YSkge30KI2VuZGlmCgoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogIE5BTkQg LyBTbWFydE1lZGlhCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgojaWYgZGVmaW5lZChDT05GSUdfTVREX05B TkRfQVQ5MSkgfHwgZGVmaW5lZChDT05GSUdfTVREX05BTkRfQVQ5MV9NT0RVTEUpCnN0YXRpYyBz dHJ1Y3QgYXQ5MV9uYW5kX2RhdGEgbmFuZF9kYXRhOwoKI2RlZmluZSBOQU5EX0JBU0UJQVQ5MV9D SElQU0VMRUNUXzMKCnN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbmFuZF9yZXNvdXJjZXNbXSA9IHsK CglbMF0gPSB7CgkJCS5zdGFydAk9IE5BTkRfQkFTRSwKCSNpZm5kZWYgTU9aQVJUX0JPQVJECgkJ CS5lbmQJPSBOQU5EX0JBU0UgKyBTWl84TSAtIDEsCgkjZWxzZQoJCQkuZW5kCT0gTkFORF9CQVNF ICsgU1pfMTZNIC0gMSwKCSNlbmRpZgoJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKCQl9LAoJ WzFdID0gewoJCQkuc3RhcnQJPSBBVDkxX0JBU0VfU1lTICsgQVQ5MV9FQ0MsCgkJCS5lbmQJPSBB VDkxX0JBU0VfU1lTICsgQVQ5MV9FQ0MgKyBTWl81MTIgLSAxLAoJCQkuZmxhZ3MJPSBJT1JFU09V UkNFX01FTSwKCQkgfQp9OwoKc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTky NjBfbmFuZF9kZXZpY2UgPSB7CgkubmFtZQkJPSAiYXQ5MV9uYW5kIiwKCS5pZAkJPSAtMSwKCS5k ZXYJCT0gewoJCQkJLnBsYXRmb3JtX2RhdGEJPSAmbmFuZF9kYXRhLAoJfSwKCS5yZXNvdXJjZQk9 IG5hbmRfcmVzb3VyY2VzLAoJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG5hbmRfcmVzb3Vy Y2VzKSwKfTsKCnZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9uYW5kKHN0cnVjdCBhdDkxX25h bmRfZGF0YSAqZGF0YSkKewoJdW5zaWduZWQgbG9uZyBjc2EsIG1vZGU7CgoJaWYgKCFkYXRhKQoJ CXJldHVybjsKCgljc2EgPSBhdDkxX3N5c19yZWFkKEFUOTFfTUFUUklYX0VCSUNTQSk7CglhdDkx X3N5c193cml0ZShBVDkxX01BVFJJWF9FQklDU0EsIGNzYSB8IEFUOTFfTUFUUklYX0NTM0FfU01D KTsKCgkvKiBzZXQgdGhlIGJ1cyBpbnRlcmZhY2UgY2hhcmFjdGVyaXN0aWNzICovCglhdDkxX3N5 c193cml0ZShBVDkxX1NNQ19TRVRVUCgzKSwgQVQ5MV9TTUNfTldFU0VUVVBfKDApIHwgQVQ5MV9T TUNfTkNTX1dSU0VUVVBfKDApCgkJCXwgQVQ5MV9TTUNfTlJEU0VUVVBfKDApIHwgQVQ5MV9TTUNf TkNTX1JEU0VUVVBfKDApKTsKCglhdDkxX3N5c193cml0ZShBVDkxX1NNQ19QVUxTRSgzKSwgQVQ5 MV9TTUNfTldFUFVMU0VfKDIpIHwgQVQ5MV9TTUNfTkNTX1dSUFVMU0VfKDUpCgkJCXwgQVQ5MV9T TUNfTlJEUFVMU0VfKDIpIHwgQVQ5MV9TTUNfTkNTX1JEUFVMU0VfKDUpKTsKCglhdDkxX3N5c193 cml0ZShBVDkxX1NNQ19DWUNMRSgzKSwgQVQ5MV9TTUNfTldFQ1lDTEVfKDcpIHwgQVQ5MV9TTUNf TlJEQ1lDTEVfKDcpKTsKCglpZiAoZGF0YS0+YnVzX3dpZHRoXzE2KQoJCW1vZGUgPSBBVDkxX1NN Q19EQldfMTY7CgllbHNlCgkJbW9kZSA9IEFUOTFfU01DX0RCV184OwoJYXQ5MV9zeXNfd3JpdGUo QVQ5MV9TTUNfTU9ERSgzKSwgbW9kZSB8IEFUOTFfU01DX1JFQURNT0RFIHwgQVQ5MV9TTUNfV1JJ VEVNT0RFIHwgQVQ5MV9TTUNfRVhOV01PREVfRElTQUJMRSB8IEFUOTFfU01DX1RERl8oMSkpOwoK CS8qIGVuYWJsZSBwaW4gKi8KCWlmIChkYXRhLT5lbmFibGVfcGluKQoJCWF0OTFfc2V0X2dwaW9f b3V0cHV0KGRhdGEtPmVuYWJsZV9waW4sIDEpOwoKCS8qIHJlYWR5L2J1c3kgcGluICovCglpZiAo ZGF0YS0+cmR5X3BpbikKCQlhdDkxX3NldF9ncGlvX2lucHV0KGRhdGEtPnJkeV9waW4sIDEpOwoK CS8qIGNhcmQgZGV0ZWN0IHBpbiAqLwoJaWYgKGRhdGEtPmRldF9waW4pCgkJYXQ5MV9zZXRfZ3Bp b19pbnB1dChkYXRhLT5kZXRfcGluLCAxKTsKCgluYW5kX2RhdGEgPSAqZGF0YTsKCXBsYXRmb3Jt X2RldmljZV9yZWdpc3RlcigmYXQ5MXNhbTkyNjBfbmFuZF9kZXZpY2UpOwp9CiNlbHNlCnZvaWQg X19pbml0IGF0OTFfYWRkX2RldmljZV9uYW5kKHN0cnVjdCBhdDkxX25hbmRfZGF0YSAqZGF0YSkg e30KI2VuZGlmCgoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogIFRXSSAoaTJjKQogKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAq LwoKI2lmIGRlZmluZWQoQ09ORklHX0kyQ19BVDkxKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfQVQ5 MV9NT0RVTEUpCgpzdGF0aWMgc3RydWN0IHJlc291cmNlIHR3aV9yZXNvdXJjZXNbXSA9IHsKCVsw XSA9IHsKCQkuc3RhcnQJPSBBVDkxU0FNOTI2MF9CQVNFX1RXSSwKCQkuZW5kCT0gQVQ5MVNBTTky NjBfQkFTRV9UV0kgKyBTWl8xNksgLSAxLAoJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAoJfSwK CVsxXSA9IHsKCQkuc3RhcnQJPSBBVDkxU0FNOTI2MF9JRF9UV0ksCgkJLmVuZAk9IEFUOTFTQU05 MjYwX0lEX1RXSSwKCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKCX0sCn07CgpzdGF0aWMgc3Ry dWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MF90d2lfZGV2aWNlID0gewoJLm5hbWUJCT0g ImF0OTFfaTJjIiwKCS5pZAkJPSAtMSwKCS5yZXNvdXJjZQk9IHR3aV9yZXNvdXJjZXMsCgkubnVt X3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodHdpX3Jlc291cmNlcyksCn07Cgp2b2lkIF9faW5pdCBh dDkxX2FkZF9kZXZpY2VfaTJjKHZvaWQpCnsKCS8qIHBpbnMgdXNlZCBmb3IgVFdJIGludGVyZmFj ZSAqLwoJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyMywgMCk7CQkvKiBUV0QgKi8KCWF0 OTFfc2V0X211bHRpX2RyaXZlKEFUOTFfUElOX1BBMjMsIDEpOwoKCWF0OTFfc2V0X0FfcGVyaXBo KEFUOTFfUElOX1BBMjQsIDApOwkJLyogVFdDSyAqLwoJYXQ5MV9zZXRfbXVsdGlfZHJpdmUoQVQ5 MV9QSU5fUEEyNCwgMSk7CgkKI2lmZGVmIE1PWkFSVF9CT0FSRAovLyBKTAoJLy9FbmFibGUgUENL MCBmb3IgQ29kZWMKCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMzAsIDApOwoJYXQ5MV9z ZXRfbXVsdGlfZHJpdmUoQVQ5MV9QSU5fUEIzMCwgMCk7CgkKCS8vRW5hYmxlIFBDSzEgZm9yIEZN CglhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjMxLCAwKTsKCWF0OTFfc2V0X211bHRpX2Ry aXZlKEFUOTFfUElOX1BCMzEsIDApOwoJCglhdDkxX3N5c193cml0ZShBVDkxX1BNQ19TQ0VSLCBB VDkxX1BNQ19QQ0swIHwgQVQ5MV9QTUNfUENLMSk7CiNlbmRpZgoKCXBsYXRmb3JtX2RldmljZV9y ZWdpc3RlcigmYXQ5MXNhbTkyNjBfdHdpX2RldmljZSk7Cn0KI2Vsc2UKdm9pZCBfX2luaXQgYXQ5 MV9hZGRfZGV2aWNlX2kyYyh2b2lkKSB7fQojZW5kaWYKCgovKiAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiAgU1BJ CiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICovCgovLyNpZiBkZWZpbmVkKENPTkZJR19TUElfQVRNRUwpIHx8IGRl ZmluZWQoQ09ORklHX1NQSV9BVE1FTF9NT0RVTEUpIHx8IGRlZmluZWQoQ09ORklHX01PWkFSVF9T TEFWRSkgLy90bXVsZ3VuZCAKI2lmIGRlZmluZWQoQ09ORklHX1NQSV9BVE1FTCkgfHwgZGVmaW5l ZChDT05GSUdfQVQ5MV9TUElfU0xBVkUpIHx8IGRlZmluZWQoQ09ORklHX0FUOTFfU1BJKSAvL2Fq b3NoaQpzdGF0aWMgdTY0IHNwaV9kbWFtYXNrID0gMHhmZmZmZmZmZlVMOwoKc3RhdGljIHN0cnVj dCByZXNvdXJjZSBzcGkwX3Jlc291cmNlc1tdID0gewoJWzBdID0gewoJCS5zdGFydAk9IEFUOTFT QU05MjYwX0JBU0VfU1BJMCwKCQkuZW5kCT0gQVQ5MVNBTTkyNjBfQkFTRV9TUEkwICsgU1pfMTZL IC0gMSwKCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKCX0sCglbMV0gPSB7CgkJLnN0YXJ0CT0g QVQ5MVNBTTkyNjBfSURfU1BJMCwKCQkuZW5kCT0gQVQ5MVNBTTkyNjBfSURfU1BJMCwKCQkuZmxh Z3MJPSBJT1JFU09VUkNFX0lSUSwKCX0sCn07CgpzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSBhdDkxc2FtOTI2MF9zcGkwX2RldmljZSA9IHsKCS5uYW1lCQk9ICJhdG1lbF9zcGkiLAoJLmlk CQk9IDAsCgkuZGV2CQk9IHsKCQkJCS5kbWFfbWFzawkJPSAmc3BpX2RtYW1hc2ssCgkJCQkuY29o ZXJlbnRfZG1hX21hc2sJPSAweGZmZmZmZmZmLAoJfSwKCS5yZXNvdXJjZQk9IHNwaTBfcmVzb3Vy Y2VzLAoJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNwaTBfcmVzb3VyY2VzKSwKfTsKCnN0 YXRpYyBjb25zdCB1bnNpZ25lZCBzcGkwX3N0YW5kYXJkX2NzWzRdID0geyBBVDkxX1BJTl9QQTMs IEFUOTFfUElOX1BDMTEsIEFUOTFfUElOX1BDMTYsIEFUOTFfUElOX1BDMTcgfTsKCnN0YXRpYyBz dHJ1Y3QgcmVzb3VyY2Ugc3BpMV9yZXNvdXJjZXNbXSA9IHsKCVswXSA9IHsKCQkuc3RhcnQJPSBB VDkxU0FNOTI2MF9CQVNFX1NQSTEsCgkJLmVuZAk9IEFUOTFTQU05MjYwX0JBU0VfU1BJMSArIFNa XzE2SyAtIDEsCgkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCgl9LAoJWzFdID0gewoJCS5zdGFy dAk9IEFUOTFTQU05MjYwX0lEX1NQSTEsCgkJLmVuZAk9IEFUOTFTQU05MjYwX0lEX1NQSTEsCgkJ LmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCgl9LAp9OwoKc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgYXQ5MXNhbTkyNjBfc3BpMV9kZXZpY2UgPSB7CgkubmFtZQkJPSAiYXRtZWxfc3BpIiwK CS5pZAkJPSAxLAoJLmRldgkJPSB7CgkJCQkuZG1hX21hc2sJCT0gJnNwaV9kbWFtYXNrLAoJCQkJ LmNvaGVyZW50X2RtYV9tYXNrCT0gMHhmZmZmZmZmZiwKCX0sCgkucmVzb3VyY2UJPSBzcGkxX3Jl c291cmNlcywKCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzcGkxX3Jlc291cmNlcyksCn07 CgpzdGF0aWMgY29uc3QgdW5zaWduZWQgc3BpMV9zdGFuZGFyZF9jc1s0XSA9IHsgQVQ5MV9QSU5f UEIzLCBBVDkxX1BJTl9QQzUsIEFUOTFfUElOX1BDNCwgQVQ5MV9QSU5fUEMzIH07Cgp2b2lkIF9f aW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3BpKHN0cnVjdCBzcGlfYm9hcmRfaW5mbyAqZGV2aWNlcywg aW50IG5yX2RldmljZXMpCnsKCWludCBpOwoJdW5zaWduZWQgbG9uZyBjc19waW47CglzaG9ydCBl bmFibGVfc3BpMCA9IDA7CglzaG9ydCBlbmFibGVfc3BpMSA9IDA7CgoJLyogQ2hvb3NlIFNQSSBj aGlwLXNlbGVjdHMgKi8KCWZvciAoaSA9IDA7IGkgPCBucl9kZXZpY2VzOyBpKyspIHsKCQlpZiAo ZGV2aWNlc1tpXS5jb250cm9sbGVyX2RhdGEpCgkJCWNzX3BpbiA9ICh1bnNpZ25lZCBsb25nKSBk ZXZpY2VzW2ldLmNvbnRyb2xsZXJfZGF0YTsKCQllbHNlIGlmIChkZXZpY2VzW2ldLmJ1c19udW0g PT0gMCkKCQkJY3NfcGluID0gc3BpMF9zdGFuZGFyZF9jc1tkZXZpY2VzW2ldLmNoaXBfc2VsZWN0 XTsKCQllbHNlCgkJCWNzX3BpbiA9IHNwaTFfc3RhbmRhcmRfY3NbZGV2aWNlc1tpXS5jaGlwX3Nl bGVjdF07CgoJCWlmIChkZXZpY2VzW2ldLmJ1c19udW0gPT0gMCkKCQkJZW5hYmxlX3NwaTAgPSAx OwoJCWVsc2UKCQkJZW5hYmxlX3NwaTEgPSAxOwoKCQkvKiBlbmFibGUgY2hpcC1zZWxlY3QgcGlu ICovCgkJI2lmbmRlZiBDT05GSUdfQVQ5MV9TUElfU0xBVkUKCQkgYXQ5MV9zZXRfZ3Bpb19vdXRw dXQoY3NfcGluLCAxKTsgLy90bXVsZ3VuZAoJCSNlbHNlIAoJCSBhdDkxX3NldF9ncGlvX2lucHV0 KGNzX3BpbiwgMCk7CgkJI2VuZGlmCgoJCS8qIHBhc3MgY2hpcC1zZWxlY3QgcGluIHRvIGRyaXZl ciAqLwoJCWRldmljZXNbaV0uY29udHJvbGxlcl9kYXRhID0gKHZvaWQgKikgY3NfcGluOwoJfQoK CQoJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oZGV2aWNlcywgbnJfZGV2aWNlcyk7CgkjaWZuZGVm IENPTkZJR19BVDkxX1NQSV9TTEFWRQoJLyogQ29uZmlndXJlIFNQSSBidXMoZXMpICovCglpZiAo ZW5hYmxlX3NwaTApIHsKCSAgCSBhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTMsIDEpOwkv KiBTUEkxX0NTICovIAoJCSBhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTAsIDApOwkvKiBT UEkwX01JU08gKi8KCQkgYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEExLCAwKTsJLyogU1BJ MF9NT1NJICovCgkJIGF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMiwgMCk7CS8qIFNQSTFf U1BDSyAqLwoJCSAKCQlhdDkxX2Nsb2NrX2Fzc29jaWF0ZSgic3BpMF9jbGsiLCAmYXQ5MXNhbTky NjBfc3BpMF9kZXZpY2UuZGV2LCAic3BpX2NsayIpOyAvL3RtdWxndW5kCgkJcGxhdGZvcm1fZGV2 aWNlX3JlZ2lzdGVyKCZhdDkxc2FtOTI2MF9zcGkwX2RldmljZSk7Cgl9CglpZiAoZW5hYmxlX3Nw aTEpIHsKCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjAsIDApOwkvKiBTUEkxX01JU08g Ki8KCQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjEsIDApOwkvKiBTUEkxX01PU0kgKi8K CQlhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjIsIDApOwkvKiBTUEkxX1NQQ0sgKi8KCgkJ YXQ5MV9jbG9ja19hc3NvY2lhdGUoInNwaTFfY2xrIiwgJmF0OTFzYW05MjYwX3NwaTFfZGV2aWNl LmRldiwgInNwaV9jbGsiKTsKCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYw X3NwaTFfZGV2aWNlKTsKCX0KCSNlbHNlCgkvKiBDb25maWd1cmUgU1BJIGJ1cyhlcykgKi8KCWlm IChlbmFibGVfc3BpMCkgewoJICAJIGF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMywgMSk7 CS8qIFNQSTFfQ1MgKi8gCgkJIGF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BBMCwgMCk7CS8q IFNQSTBfTUlTTyAqLwoJCSBhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQTEsIDApOwkvKiBT UEkwX01PU0kgKi8KCQkgYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEEyLCAwKTsJLyogU1BJ MV9TUENLICovCgkJIAoJCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJzcGkwX2NsayIsICZhdDkxc2Ft OTI2MF9zcGkwX2RldmljZS5kZXYsICJzcGlfY2xrIik7IC8vdG11bGd1bmQKCQlwbGF0Zm9ybV9k ZXZpY2VfcmVnaXN0ZXIoJmF0OTFzYW05MjYwX3NwaTBfZGV2aWNlKTsKCX0KCSNlbmRpZgp9CiNl bHNlCnZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zcGkoc3RydWN0IHNwaV9ib2FyZF9pbmZv ICpkZXZpY2VzLCBpbnQgbnJfZGV2aWNlcykgCnsKCXByaW50aygiRlVOQ1RJT046JXMgTElORSAl ZFxuIixfX0ZVTkNUSU9OX18sX19MSU5FX18pOwp9CiNlbmRpZgoKCi8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAq ICBTU0MKICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiNpZmRlZiBNT1pBUlRfQk9BUkQKLyoKLy9zdGF0aWMg c3RydWN0IGF0bWVsX2F0NzNjMjEzX2RhdGEgYXQ3M2MyMTNfZGF0YTsKc3RhdGljIHU2NCBzc2Nf ZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKCnN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc3NjX3Jlc291 cmNlc1tdID0gewoJWzBdID0gewoJCS5zdGFydAk9IEFUOTFTQU05MjYwX0JBU0VfU1NDLAoJCS5l bmQJPSBBVDkxU0FNOTI2MF9CQVNFX1NTQyArIFNaXzE2SyAtIDEsCgkJLmZsYWdzCT0gSU9SRVNP VVJDRV9NRU0sCgl9LAoJWzFdID0gewoJCS5zdGFydAk9IEFUOTFTQU05MjYwX0lEX1NTQywKCQku ZW5kCT0gQVQ5MVNBTTkyNjBfSURfU1NDLAoJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAoJfSwK fTsKCnN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFzYW05MjYwX3NzY19kZXZpY2Ug PSB7CgkubmFtZQkJPSAiYXQ5MV9zc2MiLAoJLmlkCQkJPSAtMSwKCS5kZXYJCT0gewoJCQkJLmRt YV9tYXNrCQkJPSAmc3NjX2RtYW1hc2ssCgkJCQkuY29oZXJlbnRfZG1hX21hc2sJPSAweGZmZmZm ZmZmLAovLwkJCQkucGxhdGZvcm1fZGF0YQkJPSAmYXQ3M2MyMTNfZGF0YSwKCX0sCgkucmVzb3Vy Y2UJPSBzc2NfcmVzb3VyY2VzLAoJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNzY19yZXNv dXJjZXMpLAp9OwoqLwp2b2lkIF9faW5pdCBhdDkxX2FkZF9kZXZpY2Vfc3NjKHZvaWQpCnsKLyoK CXN0cnVjdCBjbGsgKmF0NzNfY2xrOwoJc3RydWN0IGNsayAqc3NjX2NsazsKCXN0cnVjdCBjbGsg KnBhcmVudF9jbGs7CgoJLy8gU2V0IFNTQzEgSU8KCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElO X1BBMTcsIDApOwkJLy8gVEQxIAoJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEExOCwgMCk7 CQkvLyBURjEgCglhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTE5LCAwKTsJCS8vIFRLMSAK CgkvLyBBVDczQzIxMyBNQ0sgQ2xvY2sKCWF0OTFfc2V0X0JfcGVyaXBoKEFUOTFfUElOX1BCMzEs IDApOwkJLy8gUENLMiAKCglhdDczX2NsayA9IGNsa19nZXQoTlVMTCwgInBjazIiKTsKCXBhcmVu dF9jbGsgPSBjbGtfZ2V0KE5VTEwsICJwbGxhIik7CgljbGtfc2V0X3BhcmVudChhdDczX2Nsaywg cGFyZW50X2Nsayk7CgljbGtfc2V0X3JhdGUoYXQ3M19jbGssIDEyNDE2MDAwKTsKCWNsa19lbmFi bGUoYXQ3M19jbGspOwoKCXNzY19jbGsgPSBjbGtfZ2V0KE5VTEwsICJzc2MxX2NsayIpOwoJY2xr X2VuYWJsZShzc2NfY2xrKTsKCQoJYXQ3M2MyMTNfZGF0YS5zc2NfZGl2ICA9IDMyOyAgCglhdDcz YzIxM19kYXRhLmF0NzNfbWNrID0gYXQ3M19jbGs7ICAKKi8KLy8JcGxhdGZvcm1fZGV2aWNlX3Jl Z2lzdGVyKCZhdDkxc2FtOTI2MF9zc2NfZGV2aWNlKTsKfQojZWxzZQp2b2lkIF9faW5pdCBhdDkx X2FkZF9kZXZpY2Vfc3NjKHZvaWQpCXt9CiNlbmRpZgoKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqICBMRURz CiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICovCgojaWYgZGVmaW5lZChDT05GSUdfTEVEUykKdTggYXQ5MV9sZWRz X2NwdTsKdTggYXQ5MV9sZWRzX3RpbWVyOwoKdm9pZCBfX2luaXQgYXQ5MV9pbml0X2xlZHModTgg Y3B1X2xlZCwgdTggdGltZXJfbGVkKQp7CglhdDkxX2xlZHNfY3B1CT0gY3B1X2xlZDsKCWF0OTFf bGVkc190aW1lcgk9IHRpbWVyX2xlZDsKfQojZWxzZQp2b2lkIF9faW5pdCBhdDkxX2luaXRfbGVk cyh1OCBjcHVfbGVkLCB1OCB0aW1lcl9sZWQpIHt9CiNlbmRpZgoKCiNpZiBkZWZpbmVkKENPTkZJ R19ORVdfTEVEUykKCnN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF0OTFfbGVkcyA9IHsK CS5uYW1lCQk9ICJhdDkxX2xlZHMiLAoJLmlkCQk9IC0xLAp9OwoKdm9pZCBfX2luaXQgYXQ5MV9n cGlvX2xlZHMoc3RydWN0IGF0OTFfZ3Bpb19sZWQgKmxlZHMsIGludCBucikKewoJaWYgKCFucikK CQlyZXR1cm47CgoJYXQ5MV9sZWRzLmRldi5wbGF0Zm9ybV9kYXRhID0gbGVkczsKCglmb3IgKCA7 IG5yOyBuci0tLCBsZWRzKyspIHsKCQlsZWRzLT5pbmRleCA9IG5yOwkvKiBmaXJzdCByZWNvcmQg c3RvcmVzIG51bWJlciBvZiBsZWRzICovCgkJYXQ5MV9zZXRfZ3Bpb19vdXRwdXQobGVkcy0+Z3Bp bywgKGxlZHMtPmZsYWdzICYgMSkgPT0gMCk7Cgl9CgoJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVy KCZhdDkxX2xlZHMpOwp9CiNlbHNlCnZvaWQgX19pbml0IGF0OTFfZ3Bpb19sZWRzKHN0cnVjdCBh dDkxX2dwaW9fbGVkICpsZWRzLCBpbnQgbnIpIHt9CiNlbmRpZgoKCi8qIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAq ICBVQVJUCiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfQVRNRUwp CnN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZGJndV9yZXNvdXJjZXNbXSA9IHsKCVswXSA9IHsKCQku c3RhcnQJPSBBVDkxX1ZBX0JBU0VfU1lTICsgQVQ5MV9EQkdVLAoJCS5lbmQJPSBBVDkxX1ZBX0JB U0VfU1lTICsgQVQ5MV9EQkdVICsgU1pfNTEyIC0gMSwKCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01F TSwKCX0sCglbMV0gPSB7CgkJLnN0YXJ0CT0gQVQ5MV9JRF9TWVMsCgkJLmVuZAk9IEFUOTFfSURf U1lTLAoJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAoJfSwKfTsKCnN0YXRpYyBzdHJ1Y3QgYXRt ZWxfdWFydF9kYXRhIGRiZ3VfZGF0YSA9IHsKCS51c2VfZG1hX3R4CT0gMCwKCS51c2VfZG1hX3J4 CT0gMCwJCS8qIERCR1Ugbm90IGNhcGFibGUgb2YgcmVjZWl2ZSBETUEgKi8KCS5yZWdzCQk9ICh2 b2lkIF9faW9tZW0gKikoQVQ5MV9WQV9CQVNFX1NZUyArIEFUOTFfREJHVSksCn07CgpzdGF0aWMg c3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MF9kYmd1X2RldmljZSA9IHsKCS5uYW1l CQk9ICJhdG1lbF91c2FydCIsCgkuaWQJCT0gMCwKCS5kZXYJCT0gewoJCQkJLnBsYXRmb3JtX2Rh dGEJPSAmZGJndV9kYXRhLAoJCQkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZiwKCX0s CgkucmVzb3VyY2UJPSBkYmd1X3Jlc291cmNlcywKCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0la RShkYmd1X3Jlc291cmNlcyksCn07CgpzdGF0aWMgaW5saW5lIHZvaWQgY29uZmlndXJlX2RiZ3Vf cGlucyh2b2lkKQp7CglhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjE0LCAwKTsJCS8qIERS WEQgKi8KCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMTUsIDEpOwkJLyogRFRYRCAqLwp9 CgpzdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQwX3Jlc291cmNlc1tdID0gewoJWzBdID0gewoJ CS5zdGFydAk9IEFUOTFTQU05MjYwX0JBU0VfVVMwLAoJCS5lbmQJPSBBVDkxU0FNOTI2MF9CQVNF X1VTMCArIFNaXzE2SyAtIDEsCgkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCgl9LAoJWzFdID0g ewoJCS5zdGFydAk9IEFUOTFTQU05MjYwX0lEX1VTMCwKCQkuZW5kCT0gQVQ5MVNBTTkyNjBfSURf VVMwLAoJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAoJfSwKfTsKCnN0YXRpYyBzdHJ1Y3QgYXRt ZWxfdWFydF9kYXRhIHVhcnQwX2RhdGEgPSB7CgkudXNlX2RtYV90eAk9IDEsCgkudXNlX2RtYV9y eAk9IDEsCn07CgpzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MF91YXJ0 MF9kZXZpY2UgPSB7CgkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAoJLmlkCQk9IDEsCgkuZGV2CQk9 IHsKCQkJCS5wbGF0Zm9ybV9kYXRhCT0gJnVhcnQwX2RhdGEsCgkJCQkuY29oZXJlbnRfZG1hX21h c2sgPSAweGZmZmZmZmZmLAoJfSwKCS5yZXNvdXJjZQk9IHVhcnQwX3Jlc291cmNlcywKCS5udW1f cmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1YXJ0MF9yZXNvdXJjZXMpLAp9OwoKc3RhdGljIGlubGlu ZSB2b2lkIGNvbmZpZ3VyZV91c2FydDBfcGlucyh2b2lkKQp7CgkvL2F0OTFfc2V0X0FfcGVyaXBo KEFUOTFfUElOX1BCNCwgMSk7CQkvKiBUWEQwICovCgkvL2F0OTFfc2V0X0FfcGVyaXBoKEFUOTFf UElOX1BCNSwgMCk7CQkvKiBSWEQwICovCglhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjI2 LCAwKTsJCS8qIFJUUzAgKi8KCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMjcsIDApOwkJ LyogQ1RTMCAqLwoJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIyNCwgMCk7CQkvKiBEVFIw ICovCglhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjIyLCAwKTsJCS8qIERTUjAgKi8KCWF0 OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMjMsIDApOwkJLyogRENEMCAqLwoJYXQ5MV9zZXRf QV9wZXJpcGgoQVQ5MV9QSU5fUEIyNSwgMCk7CQkvKiBSSTAgKi8KfQoKc3RhdGljIHN0cnVjdCBy ZXNvdXJjZSB1YXJ0MV9yZXNvdXJjZXNbXSA9IHsKCVswXSA9IHsKCQkuc3RhcnQJPSBBVDkxU0FN OTI2MF9CQVNFX1VTMSwKCQkuZW5kCT0gQVQ5MVNBTTkyNjBfQkFTRV9VUzEgKyBTWl8xNksgLSAx LAoJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAoJfSwKCVsxXSA9IHsKCQkuc3RhcnQJPSBBVDkx U0FNOTI2MF9JRF9VUzEsCgkJLmVuZAk9IEFUOTFTQU05MjYwX0lEX1VTMSwKCQkuZmxhZ3MJPSBJ T1JFU09VUkNFX0lSUSwKCX0sCn07CgpzdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0 MV9kYXRhID0gewoJLnVzZV9kbWFfdHgJPSAxLAoJLnVzZV9kbWFfcngJPSAxLAp9OwoKc3RhdGlj IHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjBfdWFydDFfZGV2aWNlID0gewoJLm5h bWUJCT0gImF0bWVsX3VzYXJ0IiwKCS5pZAkJPSAyLAoJLmRldgkJPSB7CgkJCQkucGxhdGZvcm1f ZGF0YQk9ICZ1YXJ0MV9kYXRhLAoJCQkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZiwK CX0sCgkucmVzb3VyY2UJPSB1YXJ0MV9yZXNvdXJjZXMsCgkubnVtX3Jlc291cmNlcwk9IEFSUkFZ X1NJWkUodWFydDFfcmVzb3VyY2VzKSwKfTsKCnN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVf dXNhcnQxX3BpbnModm9pZCkKewoJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI2LCAxKTsJ CS8qIFRYRDEgKi8KCWF0OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCNywgMCk7CQkvKiBSWEQx ICovCglhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9QQjI4LCAwKTsJCS8qIFJUUzEgKi8KCWF0 OTFfc2V0X0FfcGVyaXBoKEFUOTFfUElOX1BCMjksIDApOwkJLyogQ1RTMSAqLwp9CgpzdGF0aWMg c3RydWN0IHJlc291cmNlIHVhcnQyX3Jlc291cmNlc1tdID0gewoJWzBdID0gewoJCS5zdGFydAk9 IEFUOTFTQU05MjYwX0JBU0VfVVMyLAoJCS5lbmQJPSBBVDkxU0FNOTI2MF9CQVNFX1VTMiArIFNa XzE2SyAtIDEsCgkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCgl9LAoJWzFdID0gewoJCS5zdGFy dAk9IEFUOTFTQU05MjYwX0lEX1VTMiwKCQkuZW5kCT0gQVQ5MVNBTTkyNjBfSURfVVMyLAoJCS5m bGFncwk9IElPUkVTT1VSQ0VfSVJRLAoJfSwKfTsKCnN0YXRpYyBzdHJ1Y3QgYXRtZWxfdWFydF9k YXRhIHVhcnQyX2RhdGEgPSB7CgkudXNlX2RtYV90eAk9IDEsCgkudXNlX2RtYV9yeAk9IDEsCn07 CgpzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdDkxc2FtOTI2MF91YXJ0Ml9kZXZpY2Ug PSB7CgkubmFtZQkJPSAiYXRtZWxfdXNhcnQiLAoJLmlkCQk9IDMsCgkuZGV2CQk9IHsKCQkJCS5w bGF0Zm9ybV9kYXRhCT0gJnVhcnQyX2RhdGEsCgkJCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweGZm ZmZmZmZmLAoJfSwKCS5yZXNvdXJjZQk9IHVhcnQyX3Jlc291cmNlcywKCS5udW1fcmVzb3VyY2Vz CT0gQVJSQVlfU0laRSh1YXJ0Ml9yZXNvdXJjZXMpLAp9OwoKc3RhdGljIGlubGluZSB2b2lkIGNv bmZpZ3VyZV91c2FydDJfcGlucyh2b2lkKQp7CglhdDkxX3NldF9BX3BlcmlwaChBVDkxX1BJTl9Q QjgsIDEpOwkJLyogVFhEMiAqLwoJYXQ5MV9zZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEI5LCAwKTsJ CS8qIFJYRDIgKi8KfQoKc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0M19yZXNvdXJjZXNbXSA9 IHsKCVswXSA9IHsKCQkuc3RhcnQJPSBBVDkxU0FNOTI2MF9CQVNFX1VTMywKCQkuZW5kCT0gQVQ5 MVNBTTkyNjBfQkFTRV9VUzMgKyBTWl8xNksgLSAxLAoJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVN LAoJfSwKCVsxXSA9IHsKCQkuc3RhcnQJPSBBVDkxU0FNOTI2MF9JRF9VUzMsCgkJLmVuZAk9IEFU OTFTQU05MjYwX0lEX1VTMywKCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKCX0sCn07CgpzdGF0 aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0M19kYXRhID0gewoJLnVzZV9kbWFfdHgJPSAx LAoJLnVzZV9kbWFfcngJPSAxLAp9OwoKc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5 MXNhbTkyNjBfdWFydDNfZGV2aWNlID0gewoJLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKCS5pZAkJ PSA0LAoJLmRldgkJPSB7CgkJCQkucGxhdGZvcm1fZGF0YQk9ICZ1YXJ0M19kYXRhLAoJCQkJLmNv aGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZiwKCX0sCgkucmVzb3VyY2UJPSB1YXJ0M19yZXNv dXJjZXMsCgkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDNfcmVzb3VyY2VzKSwKfTsK CnN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQzX3BpbnModm9pZCkKewoJYXQ5MV9z ZXRfQV9wZXJpcGgoQVQ5MV9QSU5fUEIxMCwgMSk7CQkvKiBUWEQzICovCglhdDkxX3NldF9BX3Bl cmlwaChBVDkxX1BJTl9QQjExLCAwKTsJCS8qIFJYRDMgKi8KfQoKc3RhdGljIHN0cnVjdCByZXNv dXJjZSB1YXJ0NF9yZXNvdXJjZXNbXSA9IHsKCVswXSA9IHsKCQkuc3RhcnQJPSBBVDkxU0FNOTI2 MF9CQVNFX1VTNCwKCQkuZW5kCT0gQVQ5MVNBTTkyNjBfQkFTRV9VUzQgKyBTWl8xNksgLSAxLAoJ CS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAoJfSwKCVsxXSA9IHsKCQkuc3RhcnQJPSBBVDkxU0FN OTI2MF9JRF9VUzQsCgkJLmVuZAk9IEFUOTFTQU05MjYwX0lEX1VTNCwKCQkuZmxhZ3MJPSBJT1JF U09VUkNFX0lSUSwKCX0sCn07CgpzdGF0aWMgc3RydWN0IGF0bWVsX3VhcnRfZGF0YSB1YXJ0NF9k YXRhID0gewoJLnVzZV9kbWFfdHgJPSAxLAoJLnVzZV9kbWFfcngJPSAxLAp9OwoKc3RhdGljIHN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjBfdWFydDRfZGV2aWNlID0gewoJLm5hbWUJ CT0gImF0bWVsX3VzYXJ0IiwKCS5pZAkJPSA1LAoJLmRldgkJPSB7CgkJCQkucGxhdGZvcm1fZGF0 YQk9ICZ1YXJ0NF9kYXRhLAoJCQkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZiwKCX0s CgkucmVzb3VyY2UJPSB1YXJ0NF9yZXNvdXJjZXMsCgkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJ WkUodWFydDRfcmVzb3VyY2VzKSwKfTsKCnN0YXRpYyBpbmxpbmUgdm9pZCBjb25maWd1cmVfdXNh cnQ0X3BpbnModm9pZCkKewoJYXQ5MV9zZXRfQl9wZXJpcGgoQVQ5MV9QSU5fUEEzMSwgMSk7CQkv KiBUWEQ0ICovCglhdDkxX3NldF9CX3BlcmlwaChBVDkxX1BJTl9QQTMwLCAwKTsJCS8qIFJYRDQg Ki8KfQoKc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0NV9yZXNvdXJjZXNbXSA9IHsKCVswXSA9 IHsKCQkuc3RhcnQJPSBBVDkxU0FNOTI2MF9CQVNFX1VTNSwKCQkuZW5kCT0gQVQ5MVNBTTkyNjBf QkFTRV9VUzUgKyBTWl8xNksgLSAxLAoJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAoJfSwKCVsx XSA9IHsKCQkuc3RhcnQJPSBBVDkxU0FNOTI2MF9JRF9VUzUsCgkJLmVuZAk9IEFUOTFTQU05MjYw X0lEX1VTNSwKCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKCX0sCn07CgpzdGF0aWMgc3RydWN0 IGF0bWVsX3VhcnRfZGF0YSB1YXJ0NV9kYXRhID0gewoJLnVzZV9kbWFfdHgJPSAxLAoJLnVzZV9k bWFfcngJPSAxLAp9OwoKc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXQ5MXNhbTkyNjBf dWFydDVfZGV2aWNlID0gewoJLm5hbWUJCT0gImF0bWVsX3VzYXJ0IiwKCS5pZAkJPSA2LAoJLmRl dgkJPSB7CgkJCQkucGxhdGZvcm1fZGF0YQk9ICZ1YXJ0NV9kYXRhLAoJCQkJLmNvaGVyZW50X2Rt YV9tYXNrID0gMHhmZmZmZmZmZiwKCX0sCgkucmVzb3VyY2UJPSB1YXJ0NV9yZXNvdXJjZXMsCgku bnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodWFydDVfcmVzb3VyY2VzKSwKfTsKCnN0YXRpYyBp bmxpbmUgdm9pZCBjb25maWd1cmVfdXNhcnQ1X3BpbnModm9pZCkKewoJYXQ5MV9zZXRfQV9wZXJp cGgoQVQ5MV9QSU5fUEIxMiwgMSk7CQkvKiBUWEQ1ICovCglhdDkxX3NldF9BX3BlcmlwaChBVDkx X1BJTl9QQjEzLCAwKTsJCS8qIFJYRDUgKi8KfQoKc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXQ5 MV91YXJ0c1tBVE1FTF9NQVhfVUFSVF07CS8qIHRoZSBVQVJUcyB0byB1c2UgKi8Kc3RydWN0IHBs YXRmb3JtX2RldmljZSAqYXRtZWxfZGVmYXVsdF9jb25zb2xlX2RldmljZTsJLyogdGhlIHNlcmlh bCBjb25zb2xlIGRldmljZSAqLwoKdm9pZCBfX2luaXQgYXQ5MV9pbml0X3NlcmlhbChzdHJ1Y3Qg YXQ5MV91YXJ0X2NvbmZpZyAqY29uZmlnKQp7CglpbnQgaTsKCgkvKiBGaWxsIGluIGxpc3Qgb2Yg c3VwcG9ydGVkIFVBUlRzICovCglmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5ucl90dHk7IGkrKykg ewoJCXN3aXRjaCAoY29uZmlnLT50dHlfbWFwW2ldKSB7CgkJCWNhc2UgMDoKCQkJCWNvbmZpZ3Vy ZV91c2FydDBfcGlucygpOwoJCQkJYXQ5MV91YXJ0c1tpXSA9ICZhdDkxc2FtOTI2MF91YXJ0MF9k ZXZpY2U7CgkJCQlhdDkxX2Nsb2NrX2Fzc29jaWF0ZSgidXNhcnQwX2NsayIsICZhdDkxc2FtOTI2 MF91YXJ0MF9kZXZpY2UuZGV2LCAidXNhcnQiKTsKCQkJCWJyZWFrOwoJCQljYXNlIDE6CgkJCQlj b25maWd1cmVfdXNhcnQxX3BpbnMoKTsKCQkJCWF0OTFfdWFydHNbaV0gPSAmYXQ5MXNhbTkyNjBf dWFydDFfZGV2aWNlOwoJCQkJYXQ5MV9jbG9ja19hc3NvY2lhdGUoInVzYXJ0MV9jbGsiLCAmYXQ5 MXNhbTkyNjBfdWFydDFfZGV2aWNlLmRldiwgInVzYXJ0Iik7CgkJCQlicmVhazsKCQkJY2FzZSAy OgoJCQkJY29uZmlndXJlX3VzYXJ0Ml9waW5zKCk7CgkJCQlhdDkxX3VhcnRzW2ldID0gJmF0OTFz YW05MjYwX3VhcnQyX2RldmljZTsKCQkJCWF0OTFfY2xvY2tfYXNzb2NpYXRlKCJ1c2FydDJfY2xr IiwgJmF0OTFzYW05MjYwX3VhcnQyX2RldmljZS5kZXYsICJ1c2FydCIpOwoJCQkJYnJlYWs7CgkJ CWNhc2UgMzoKCQkJCWNvbmZpZ3VyZV91c2FydDNfcGlucygpOwoJCQkJYXQ5MV91YXJ0c1tpXSA9 ICZhdDkxc2FtOTI2MF91YXJ0M19kZXZpY2U7CgkJCQlhdDkxX2Nsb2NrX2Fzc29jaWF0ZSgidXNh cnQzX2NsayIsICZhdDkxc2FtOTI2MF91YXJ0M19kZXZpY2UuZGV2LCAidXNhcnQiKTsKCQkJCWJy ZWFrOwoJCQljYXNlIDQ6CgkJCQljb25maWd1cmVfdXNhcnQ0X3BpbnMoKTsKCQkJCWF0OTFfdWFy dHNbaV0gPSAmYXQ5MXNhbTkyNjBfdWFydDRfZGV2aWNlOwoJCQkJYXQ5MV9jbG9ja19hc3NvY2lh dGUoInVzYXJ0NF9jbGsiLCAmYXQ5MXNhbTkyNjBfdWFydDRfZGV2aWNlLmRldiwgInVzYXJ0Iik7 CgkJCQlicmVhazsKCQkJY2FzZSA1OgoJCQkJY29uZmlndXJlX3VzYXJ0NV9waW5zKCk7CgkJCQlh dDkxX3VhcnRzW2ldID0gJmF0OTFzYW05MjYwX3VhcnQ1X2RldmljZTsKCQkJCWF0OTFfY2xvY2tf YXNzb2NpYXRlKCJ1c2FydDVfY2xrIiwgJmF0OTFzYW05MjYwX3VhcnQ1X2RldmljZS5kZXYsICJ1 c2FydCIpOwoJCQkJYnJlYWs7CgkJCWNhc2UgNjoKCQkJCWNvbmZpZ3VyZV9kYmd1X3BpbnMoKTsK CQkJCWF0OTFfdWFydHNbaV0gPSAmYXQ5MXNhbTkyNjBfZGJndV9kZXZpY2U7CgkJCQlhdDkxX2Ns b2NrX2Fzc29jaWF0ZSgibWNrIiwgJmF0OTFzYW05MjYwX2RiZ3VfZGV2aWNlLmRldiwgInVzYXJ0 Iik7CgkJCQlicmVhazsKCQkJZGVmYXVsdDoKCQkJCWNvbnRpbnVlOwoJCX0KCQlhdDkxX3VhcnRz W2ldLT5pZCA9IGk7CQkvKiB1cGRhdGUgSUQgbnVtYmVyIHRvIG1hcHBlZCBJRCAqLwoJfQoKCS8q IFNldCBzZXJpYWwgY29uc29sZSBkZXZpY2UgKi8KCWlmIChjb25maWctPmNvbnNvbGVfdHR5IDwg QVRNRUxfTUFYX1VBUlQpCgkJYXRtZWxfZGVmYXVsdF9jb25zb2xlX2RldmljZSA9IGF0OTFfdWFy dHNbY29uZmlnLT5jb25zb2xlX3R0eV07CglpZiAoIWF0bWVsX2RlZmF1bHRfY29uc29sZV9kZXZp Y2UpCgkJcHJpbnRrKEtFUk5fSU5GTyAiQVQ5MTogTm8gZGVmYXVsdCBzZXJpYWwgY29uc29sZSBk ZWZpbmVkLlxuIik7Cn0KCnZvaWQgX19pbml0IGF0OTFfYWRkX2RldmljZV9zZXJpYWwodm9pZCkK ewoJaW50IGk7CgoJZm9yIChpID0gMDsgaSA8IEFUTUVMX01BWF9VQVJUOyBpKyspIHsKCQlpZiAo YXQ5MV91YXJ0c1tpXSkKCQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKGF0OTFfdWFydHNbaV0p OwoJfQp9CiNlbHNlCnZvaWQgX19pbml0IGF0OTFfaW5pdF9zZXJpYWwoc3RydWN0IGF0OTFfdWFy dF9jb25maWcgKmNvbmZpZykge30Kdm9pZCBfX2luaXQgYXQ5MV9hZGRfZGV2aWNlX3NlcmlhbCh2 b2lkKSB7fQojZW5kaWYKCgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKgogKiBUaGVzZSBkZXZpY2VzIGFy ZSBhbHdheXMgcHJlc2VudCBhbmQgZG9uJ3QgbmVlZCBhbnkgYm9hcmQtc3BlY2lmaWMKICogc2V0 dXAuCiAqLwpzdGF0aWMgaW50IF9faW5pdCBhdDkxX2FkZF9zdGFuZGFyZF9kZXZpY2VzKHZvaWQp CnsKCXJldHVybiAwOwp9CgphcmNoX2luaXRjYWxsKGF0OTFfYWRkX3N0YW5kYXJkX2RldmljZXMp Owo= ------_=_NextPart_001_01C93B00.94A6E037 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ ------_=_NextPart_001_01C93B00.94A6E037 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ spi-devel-general mailing list spi-devel-general-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org https://lists.sourceforge.net/lists/listinfo/spi-devel-general ------_=_NextPart_001_01C93B00.94A6E037--