From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: [PATCH 10/60] drm/bridge: Add bridge driver for display connectors Date: Sun, 7 Jul 2019 21:18:47 +0300 Message-ID: <20190707181937.6250-7-laurent.pinchart@ideasonboard.com> References: <20190707180852.5512-1-laurent.pinchart@ideasonboard.com> <20190707181937.6250-1-laurent.pinchart@ideasonboard.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by gabe.freedesktop.org (Postfix) with ESMTPS id F01D389AC9 for ; Sun, 7 Jul 2019 18:23:06 +0000 (UTC) In-Reply-To: <20190707181937.6250-1-laurent.pinchart@ideasonboard.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Maxime Ripard , Sebastian Reichel , Tomi Valkeinen , Sean Paul List-Id: dri-devel@lists.freedesktop.org RGlzcGxheSBjb25uZWN0b3JzIGFyZSBtb2RlbGxlZCBpbiBEVCBhcyBhIGRldmljZSBub2RlLCBi dXQgaGF2ZSBzbyBmYXIKYmVlbiBoYW5kbGVkIG1hbnVhbGx5IGluIHNldmVyYWwgYnJpZGdlIGRy aXZlcnMuIFRoaXMgcmVzdWx0ZWQgaW4KZHVwbGljYXRlIGNvZGUgaW4gc2V2ZXJhbCBicmlkZ2Ug ZHJpdmVycywgd2l0aCBzbGlnaHRseSBkaWZmZXJlbnQgKGFuZAp0aHVzIGNvbmZ1c2luZykgbG9n aWNzLgoKSW4gb3JkZXIgdG8gZml4IHRoaXMsIGltcGxlbWVudCBhIGJyaWRnZSBkcml2ZXIgZm9y IGRpc3BsYXkgY29ubmVjdG9ycy4KVGhlIGRyaXZlciBjZW50cmFsaXNlcyBsb2dpYyBmb3IgdGhl IERWSSwgSERNSSwgVkdBbiBjb21wb3NpdGUgYW5kClMtdmlkZW8gY29ubmVjdG9ycyBhbmQgZXhw b3NlcyBjb3JyZXNwb25kaW5nIGJyaWRnZSBvcGVyYXRpb25zLgoKVGhpcyBkcml2ZXIgaW4gaXRz ZWxmIGRvZXNuJ3Qgc29sdmUgdGhlIGlzc3VlIGNvbXBsZXRlbHksIGNoYW5nZXMgaW4KYnJpZGdl IGFuZCBkaXNwbGF5IGNvbnRyb2xsZXIgZHJpdmVycyBhcmUgbmVlZGVkIHRvIG1ha2UgdXNlIG9m IHRoZSBuZXcKY29ubmVjdG9yIGRyaXZlci4KClNpZ25lZC1vZmYtYnk6IExhdXJlbnQgUGluY2hh cnQgPGxhdXJlbnQucGluY2hhcnRAaWRlYXNvbmJvYXJkLmNvbT4KLS0tCiBkcml2ZXJzL2dwdS9k cm0vYnJpZGdlL0tjb25maWcgICAgICAgICAgICAgfCAgMTEgKwogZHJpdmVycy9ncHUvZHJtL2Jy aWRnZS9NYWtlZmlsZSAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2Uv ZGlzcGxheS1jb25uZWN0b3IuYyB8IDMyNyArKysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMg Y2hhbmdlZCwgMzM5IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vYnJpZGdlL2Rpc3BsYXktY29ubmVjdG9yLmMKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vYnJpZGdlL0tjb25maWcgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcKaW5k ZXggYTc4MzkyZTJkYmI5Li4yOTVhNjJmNjVlZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9icmlkZ2UvS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL0tjb25maWcKQEAg LTM3LDYgKzM3LDE3IEBAIGNvbmZpZyBEUk1fQ0ROU19EU0kKIAkgIFN1cHBvcnQgQ2FkZW5jZSBE UEkgdG8gRFNJIGJyaWRnZS4gVGhpcyBpcyBhbiBpbnRlcm5hbAogCSAgYnJpZGdlIGFuZCBpcyBt ZWFudCB0byBiZSBkaXJlY3RseSBlbWJlZGRlZCBpbiBhIFNvQy4KIAorY29uZmlnIERSTV9ESVNQ TEFZX0NPTk5FQ1RPUgorCXRyaXN0YXRlICJEaXNwbGF5IGNvbm5lY3RvciBzdXBwb3J0IgorCWRl cGVuZHMgb24gT0YKKwloZWxwCisJICBEcml2ZXIgZm9yIGRpc3BsYXkgY29ubmVjdG9ycyB3aXRo IHN1cHBvcnQgZm9yIEREQyBhbmQgaG90LXBsdWcKKwkgIGRldGVjdGlvbi4gTW9zdCBkaXNwbGF5 IGNvbnRyb2xsZXIgaGFuZGxlIGRpc3BsYXkgY29ubmVjdG9ycworCSAgaW50ZXJuYWxseSBhbmQg ZG9uJ3QgbmVlZCB0aGlzIGRyaXZlciwgYnV0IHRoZSBEUk0gc3Vic3lzdGVtIGlzCisJICBtb3Zp bmcgdG93YXJkcyBzZXBhcmF0aW5nIGNvbm5lY3RvciBoYW5kbGluZyBmcm9tIGRpc3BsYXkgY29u dHJvbGxlcnMKKwkgIG9uIEFSTS1iYXNlZCBwbGF0Zm9ybXMuIFNheWluZyBZIGhlcmUgd2hlbiB0 aGlzIGRyaXZlciBpcyBub3QgbmVlZGVkCisJICB3aWxsIG5vdCBjYXVzZSBhbnkgaXNzdWUuCisK IGNvbmZpZyBEUk1fTFZEU19FTkNPREVSCiAJdHJpc3RhdGUgIlRyYW5zcGFyZW50IHBhcmFsbGVs IHRvIExWRFMgZW5jb2RlciBzdXBwb3J0IgogCWRlcGVuZHMgb24gT0YKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01h a2VmaWxlCmluZGV4IDZmZjdmMmFkYmIwZS4uZTU5ODdiM2FhZjYyIDEwMDY0NAotLS0gYS9kcml2 ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uv TWFrZWZpbGUKQEAgLTEsNiArMSw3IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wCiBvYmotJChDT05GSUdfRFJNX0FOQUxPR0lYX0FOWDc4WFgpICs9IGFuYWxvZ2l4LWFueDc4 eHgubwogb2JqLSQoQ09ORklHX0RSTV9DRE5TX0RTSSkgKz0gY2Rucy1kc2kubworb2JqLSQoQ09O RklHX0RSTV9ESVNQTEFZX0NPTk5FQ1RPUikgKz0gZGlzcGxheS1jb25uZWN0b3Iubwogb2JqLSQo Q09ORklHX0RSTV9MVkRTX0VOQ09ERVIpICs9IGx2ZHMtZW5jb2Rlci5vCiBvYmotJChDT05GSUdf RFJNX01FR0FDSElQU19TVERQWFhYWF9HRV9CODUwVjNfRlcpICs9IG1lZ2FjaGlwcy1zdGRweHh4 eC1nZS1iODUwdjMtZncubwogb2JqLSQoQ09ORklHX0RSTV9OWFBfUFROMzQ2MCkgKz0gbnhwLXB0 bjM0NjAubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9kaXNwbGF5LWNvbm5l Y3Rvci5jIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9kaXNwbGF5LWNvbm5lY3Rvci5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMmUxZTdlZTg5Mjc1Ci0tLSAvZGV2 L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9kaXNwbGF5LWNvbm5lY3Rvci5jCkBA IC0wLDAgKzEsMzI3IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoK KyAqIENvcHlyaWdodCAoQykgMjAxOSBMYXVyZW50IFBpbmNoYXJ0IDxsYXVyZW50LnBpbmNoYXJ0 QGlkZWFzb25ib2FyZC5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIu aD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4K KyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2lu Y2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVk ZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxkcm0vZHJtX2JyaWRnZS5o PgorI2luY2x1ZGUgPGRybS9kcm1fZWRpZC5oPgorCitzdHJ1Y3QgZGlzcGxheV9jb25uZWN0b3Ig eworCXN0cnVjdCBkcm1fYnJpZGdlCWJyaWRnZTsKKworCWNvbnN0IGNoYXIJCSpsYWJlbDsKKwlz dHJ1Y3QgaTJjX2FkYXB0ZXIJKmRkYzsKKwlzdHJ1Y3QgZ3Bpb19kZXNjCSpocGRfZ3BpbzsKKwlp bnQJCQlocGRfaXJxOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZGlzcGxheV9jb25uZWN0 b3IgKgordG9fZGlzcGxheV9jb25uZWN0b3Ioc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKK3sK KwlyZXR1cm4gY29udGFpbmVyX29mKGJyaWRnZSwgc3RydWN0IGRpc3BsYXlfY29ubmVjdG9yLCBi cmlkZ2UpOworfQorCitzdGF0aWMgaW50IGRpc3BsYXlfY29ubmVjdG9yX2F0dGFjaChzdHJ1Y3Qg ZHJtX2JyaWRnZSAqYnJpZGdlLAorCQkJCSAgICBib29sIGNyZWF0ZV9jb25uZWN0b3IpCit7CisJ cmV0dXJuIGNyZWF0ZV9jb25uZWN0b3IgPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGVudW0g ZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKK2Rpc3BsYXlfY29ubmVjdG9yX2RldGVjdChzdHJ1Y3QgZHJt X2JyaWRnZSAqYnJpZGdlKQoreworCXN0cnVjdCBkaXNwbGF5X2Nvbm5lY3RvciAqY29ubiA9IHRv X2Rpc3BsYXlfY29ubmVjdG9yKGJyaWRnZSk7CisKKwlpZiAoY29ubi0+aHBkX2dwaW8pIHsKKwkJ aWYgKGdwaW9kX2dldF92YWx1ZV9jYW5zbGVlcChjb25uLT5ocGRfZ3BpbykpCisJCQlyZXR1cm4g Y29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisJCWVsc2UKKwkJCXJldHVybiBjb25uZWN0b3Jf c3RhdHVzX2Rpc2Nvbm5lY3RlZDsKKwl9CisKKwlpZiAoY29ubi0+ZGRjICYmIGRybV9wcm9iZV9k ZGMoY29ubi0+ZGRjKSkKKwkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCisJ c3dpdGNoIChjb25uLT5icmlkZ2UudHlwZSkgeworCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0RW SUE6CisJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJRDoKKwljYXNlIERSTV9NT0RFX0NPTk5F Q1RPUl9EVklJOgorCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0hETUlBOgorCWNhc2UgRFJNX01P REVfQ09OTkVDVE9SX0hETUlCOgorCQkvKgorCQkgKiBGb3IgRFZJIGFuZCBIRE1JIGNvbm5lY3Rv cnMgYSBEREMgcHJvYmUgZmFpbHVyZSBpbmRpY2F0ZXMKKwkJICogdGhhdCBubyBjYWJsZSBpcyBj b25uZWN0ZWQuCisJCSAqLworCQlyZXR1cm4gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7 CisKKwljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9Db21wb3NpdGU6CisJY2FzZSBEUk1fTU9ERV9D T05ORUNUT1JfU1ZJREVPOgorCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX1ZHQToKKwlkZWZhdWx0 OgorCQkvKgorCQkgKiBDb21wb3NpdGUgYW5kIFMtVmlkZW8gY29ubmVjdG9ycyBoYXZlIG5vIG90 aGVyIGRldGVjdGlvbgorCQkgKiBtZWFuIHRoYW4gdGhlIEhQRCBHUElPLiBGb3IgVkdBIGNvbm5l Y3RvcnMsIGV2ZW4gaWYgd2UgaGF2ZQorCQkgKiBhbiBJMkMgYnVzLCB3ZSBjYW4ndCBhc3N1bWUg dGhhdCB0aGUgY2FibGUgaXMgZGlzY29ubmVjdGVkCisJCSAqIGlmIGRybV9wcm9iZV9kZGMgZmFp bHMsIGFzIHNvbWUgY2FibGVzIGRvbid0IHdpcmUgdGhlIEREQworCQkgKiBwaW5zLgorCQkgKi8K KwkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfdW5rbm93bjsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1 Y3QgZWRpZCAqZGlzcGxheV9jb25uZWN0b3JfZ2V0X2VkaWQoc3RydWN0IGRybV9icmlkZ2UgKmJy aWRnZSwKKwkJCQkJICAgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJ c3RydWN0IGRpc3BsYXlfY29ubmVjdG9yICpjb25uID0gdG9fZGlzcGxheV9jb25uZWN0b3IoYnJp ZGdlKTsKKworCXJldHVybiBkcm1fZ2V0X2VkaWQoY29ubmVjdG9yLCBjb25uLT5kZGMpOworfQor CitzdGF0aWMgdm9pZCBkaXNwbGF5X2Nvbm5lY3Rvcl9ocGRfZW5hYmxlKHN0cnVjdCBkcm1fYnJp ZGdlICpicmlkZ2UpCit7Cit9CisKK3N0YXRpYyB2b2lkIGRpc3BsYXlfY29ubmVjdG9yX2hwZF9k aXNhYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpCit7Cit9CisKK3N0YXRpYyBjb25zdCBz dHJ1Y3QgZHJtX2JyaWRnZV9mdW5jcyBkaXNwbGF5X2Nvbm5lY3Rvcl9icmlkZ2VfZnVuY3MgPSB7 CisJLmF0dGFjaCA9IGRpc3BsYXlfY29ubmVjdG9yX2F0dGFjaCwKKwkuZGV0ZWN0ID0gZGlzcGxh eV9jb25uZWN0b3JfZGV0ZWN0LAorCS5nZXRfZWRpZCA9IGRpc3BsYXlfY29ubmVjdG9yX2dldF9l ZGlkLAorCS5ocGRfZW5hYmxlID0gZGlzcGxheV9jb25uZWN0b3JfaHBkX2VuYWJsZSwKKwkuaHBk X2Rpc2FibGUgPSBkaXNwbGF5X2Nvbm5lY3Rvcl9ocGRfZGlzYWJsZSwKK307CisKK3N0YXRpYyBp cnFyZXR1cm5fdCBkaXNwbGF5X2Nvbm5lY3Rvcl9ocGRfaXJxKGludCBpcnEsIHZvaWQgKmFyZykK K3sKKwlzdHJ1Y3QgZGlzcGxheV9jb25uZWN0b3IgKmNvbm4gPSBhcmc7CisJc3RydWN0IGRybV9i cmlkZ2UgKmJyaWRnZSA9ICZjb25uLT5icmlkZ2U7CisKKwlkcm1fYnJpZGdlX2hwZF9ub3RpZnko YnJpZGdlLCBkaXNwbGF5X2Nvbm5lY3Rvcl9kZXRlY3QoYnJpZGdlKSk7CisKKwlyZXR1cm4gSVJR X0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpkaXNwbGF5X2Nvbm5lY3Rvcl90eXBl X25hbWUoc3RydWN0IGRpc3BsYXlfY29ubmVjdG9yICpjb25uKQoreworCXN3aXRjaCAoY29ubi0+ YnJpZGdlLnR5cGUpIHsKKwljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9Db21wb3NpdGU6CisJCXJl dHVybiAiQ29tcG9zaXRlIjsKKwljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklBOgorCQlyZXR1 cm4gIkRWSS1BIjsKKwljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklEOgorCQlyZXR1cm4gIkRW SS1EIjsKKwljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJOgorCQlyZXR1cm4gIkRWSS1JIjsK KwljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1JQToKKwkJcmV0dXJuICJIRE1JLUEiOworCWNh c2UgRFJNX01PREVfQ09OTkVDVE9SX0hETUlCOgorCQlyZXR1cm4gIkhETUktQiI7CisJY2FzZSBE Uk1fTU9ERV9DT05ORUNUT1JfU1ZJREVPOgorCQlyZXR1cm4gIlMtVmlkZW8iOworCWNhc2UgRFJN X01PREVfQ09OTkVDVE9SX1ZHQToKKwkJcmV0dXJuICJWR0EiOworCWRlZmF1bHQ6CisJCXJldHVy biAidW5rbm93biI7CisJfQorfQorCitzdGF0aWMgaW50IGRpc3BsYXlfY29ubmVjdG9yX3Byb2Jl KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRpc3BsYXlfY29ubmVj dG9yICpjb25uOworCXVuc2lnbmVkIGludCB0eXBlOworCWludCByZXQ7CisKKwljb25uID0gZGV2 bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqY29ubiksIEdGUF9LRVJORUwpOworCWlmICgh Y29ubikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBj b25uKTsKKworCXR5cGUgPSAodWludHB0cl90KW9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YSgmcGRl di0+ZGV2KTsKKworCS8qIEdldCB0aGUgZXhhY3QgY29ubmVjdG9yIHR5cGUuICovCisJc3dpdGNo ICh0eXBlKSB7CisJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSTogeworCQlib29sIGFuYWxv ZywgZGlnaXRhbDsKKworCQlhbmFsb2cgPSBvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wocGRldi0+ZGV2 Lm9mX25vZGUsICJhbmFsb2ciKTsKKwkJZGlnaXRhbCA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChw ZGV2LT5kZXYub2Zfbm9kZSwgImRpZ2l0YWwiKTsKKwkJaWYgKGFuYWxvZyAmJiAhZGlnaXRhbCkg eworCQkJY29ubi0+YnJpZGdlLnR5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJQTsKKwkJfSBl bHNlIGlmICghYW5hbG9nICYmIGRpZ2l0YWwpIHsKKwkJCWNvbm4tPmJyaWRnZS50eXBlID0gRFJN X01PREVfQ09OTkVDVE9SX0RWSUQ7CisJCX0gZWxzZSBpZiAoYW5hbG9nICYmIGRpZ2l0YWwpIHsK KwkJCWNvbm4tPmJyaWRnZS50eXBlID0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUk7CisJCX0gZWxz ZSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJEVkkgY29ubmVjdG9yIHdpdGggbm8gdHlwZVxu Iik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwl9CisKKwljYXNlIERSTV9N T0RFX0NPTk5FQ1RPUl9IRE1JQTogeworCQljb25zdCBjaGFyICpoZG1pX3R5cGU7CisKKwkJcmV0 ID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcocGRldi0+ZGV2Lm9mX25vZGUsICJ0eXBlIiwKKwkJ CQkJICAgICAgJmhkbWlfdHlwZSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKCZwZGV2 LT5kZXYsICJIRE1JIGNvbm5lY3RvciB3aXRoIG5vIHR5cGVcbiIpOworCQkJcmV0dXJuIC1FSU5W QUw7CisJCX0KKworCQlpZiAoIXN0cmNtcChoZG1pX3R5cGUsICJhIikgfHwgIXN0cmNtcChoZG1p X3R5cGUsICJjIikgfHwKKwkJICAgICFzdHJjbXAoaGRtaV90eXBlLCAiZCIpIHx8ICFzdHJjbXAo aGRtaV90eXBlLCAiZSIpKSB7CisJCQljb25uLT5icmlkZ2UudHlwZSA9IERSTV9NT0RFX0NPTk5F Q1RPUl9IRE1JQTsKKwkJfSBlbHNlIGlmICghc3RyY21wKGhkbWlfdHlwZSwgImIiKSkgeworCQkJ Y29ubi0+YnJpZGdlLnR5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUI7CisJCX0gZWxzZSB7 CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJIlVuc3VwcG9ydGVkIEhETUkgY29ubmVjdG9y IHR5cGUgJyVzJ1xuIiwKKwkJCQloZG1pX3R5cGUpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0K KworCQlicmVhazsKKwl9CisKKwlkZWZhdWx0OgorCQljb25uLT5icmlkZ2UudHlwZSA9IHR5cGU7 CisJCWJyZWFrOworCX0KKworCS8qIEdldCB0aGUgb3B0aW9uYWwgY29ubmVjdG9yIGxhYmVsLiAq LworCW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKHBkZXYtPmRldi5vZl9ub2RlLCAibGFiZWwiLCAm Y29ubi0+bGFiZWwpOworCisJLyoKKwkgKiBHZXQgdGhlIEhQRCBHUElPIGZvciBEVkkgYW5kIEhE TUkgY29ubmVjdG9ycy4gSWYgdGhlIEdQSU8gY2FuIHByb3ZpZGUKKwkgKiBpbnRlcnJ1cHRzLCBy ZWdpc3RlciBhbiBpbnRlcnJ1cHQgaGFuZGxlci4KKwkgKi8KKwlpZiAodHlwZSA9PSBEUk1fTU9E RV9DT05ORUNUT1JfRFZJSSB8fAorCSAgICB0eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9IRE1J QSkgeworCQljb25uLT5ocGRfZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKCZwZGV2LT5k ZXYsICJocGQiLAorCQkJCQkJCSBHUElPRF9JTik7CisJCWlmIChJU19FUlIoY29ubi0+aHBkX2dw aW8pKSB7CisJCQlpZiAoUFRSX0VSUihjb25uLT5ocGRfZ3BpbykgIT0gLUVQUk9CRV9ERUZFUikK KwkJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJCSJVbmFibGUgdG8gcmV0cmlldmUgSFBEIEdQ SU9cbiIpOworCQkJcmV0dXJuIFBUUl9FUlIoY29ubi0+aHBkX2dwaW8pOworCQl9CisKKwkJY29u bi0+aHBkX2lycSA9IGdwaW9kX3RvX2lycShjb25uLT5ocGRfZ3Bpbyk7CisJfSBlbHNlIHsKKwkJ Y29ubi0+aHBkX2lycSA9IC1FSU5WQUw7CisJfQorCisJaWYgKGNvbm4tPmhwZF9pcnEgPj0gMCkg eworCQlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKCZwZGV2LT5kZXYsIGNvbm4tPmhw ZF9pcnEsCisJCQkJCQlOVUxMLCBkaXNwbGF5X2Nvbm5lY3Rvcl9ocGRfaXJxLAorCQkJCQkJSVJR Rl9UUklHR0VSX1JJU0lORyB8CisJCQkJCQlJUlFGX1RSSUdHRVJfRkFMTElORyB8CisJCQkJCQlJ UlFGX09ORVNIT1QsCisJCQkJCQkiSFBEIiwgY29ubik7CisJCWlmIChyZXQpIHsKKwkJCWRldl9l cnIoJnBkZXYtPmRldiwKKwkJCQkiRmFpbGVkIHRvIHJlcXVlc3QgSFBEIGludGVycnVwdFxuIik7 CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJLyogUmV0cmlldmUgdGhlIEREQyBJMkMgYWRh cHRlciBmb3IgRFZJLCBIRE1JIGFuZCBWR0EgY29ubmVjdG9ycy4gKi8KKwlpZiAodHlwZSA9PSBE Uk1fTU9ERV9DT05ORUNUT1JfRFZJSSB8fAorCSAgICB0eXBlID09IERSTV9NT0RFX0NPTk5FQ1RP Ul9IRE1JQSB8fAorCSAgICB0eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9WR0EpIHsKKwkJc3Ry dWN0IGRldmljZV9ub2RlICpwaGFuZGxlOworCisJCXBoYW5kbGUgPSBvZl9wYXJzZV9waGFuZGxl KHBkZXYtPmRldi5vZl9ub2RlLCAiZGRjLWkyYy1idXMiLCAwKTsKKwkJaWYgKHBoYW5kbGUpIHsK KwkJCWNvbm4tPmRkYyA9IG9mX2dldF9pMmNfYWRhcHRlcl9ieV9ub2RlKHBoYW5kbGUpOworCQkJ b2Zfbm9kZV9wdXQocGhhbmRsZSk7CisJCQlpZiAoIWNvbm4tPmRkYykKKwkJCQlyZXR1cm4gLUVQ Uk9CRV9ERUZFUjsKKwkJfSBlbHNlIHsKKwkJCWRldl9kYmcoJnBkZXYtPmRldiwKKwkJCQkiTm8g STJDIGJ1cyBzcGVjaWZpZWQsIGRpc2FibGluZyBFRElEIHJlYWRvdXRcbiIpOworCQl9CisJfQor CisJY29ubi0+YnJpZGdlLmZ1bmNzID0gJmRpc3BsYXlfY29ubmVjdG9yX2JyaWRnZV9mdW5jczsK Kwljb25uLT5icmlkZ2Uub2Zfbm9kZSA9IHBkZXYtPmRldi5vZl9ub2RlOworCisJaWYgKGNvbm4t PmRkYykKKwkJY29ubi0+YnJpZGdlLm9wcyB8PSBEUk1fQlJJREdFX09QX0VESUQKKwkJCQkgfCAg RFJNX0JSSURHRV9PUF9ERVRFQ1Q7CisJaWYgKGNvbm4tPmhwZF9ncGlvKQorCQljb25uLT5icmlk Z2Uub3BzIHw9IERSTV9CUklER0VfT1BfREVURUNUOworCWlmIChjb25uLT5ocGRfaXJxID49IDAp CisJCWNvbm4tPmJyaWRnZS5vcHMgfD0gRFJNX0JSSURHRV9PUF9IUEQ7CisKKwlkZXZfaW5mbygm cGRldi0+ZGV2LAorCQkgIkZvdW5kICVzIGRpc3BsYXkgY29ubmVjdG9yICclcycgJXMgRERDIGJ1 cyBhbmQgJXMgSFBEIEdQSU8gKG9wcyAweCV4KVxuIiwKKwkJIGRpc3BsYXlfY29ubmVjdG9yX3R5 cGVfbmFtZShjb25uKSwKKwkJIGNvbm4tPmxhYmVsID8gY29ubi0+bGFiZWwgOiAiPHVubGFiZWxs ZWQ+IiwKKwkJIGNvbm4tPmRkYyA/ICJ3aXRoIiA6ICJ3aXRob3V0IiwKKwkJIGNvbm4tPmhwZF9n cGlvID8gIndpdGgiIDogIndpdGhvdXQiLAorCQkgY29ubi0+YnJpZGdlLm9wcyk7CisKKwlkcm1f YnJpZGdlX2FkZCgmY29ubi0+YnJpZGdlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50 IGRpc3BsYXlfY29ubmVjdG9yX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQor eworCXN0cnVjdCBkaXNwbGF5X2Nvbm5lY3RvciAqY29ubiA9IHBsYXRmb3JtX2dldF9kcnZkYXRh KHBkZXYpOworCisJZHJtX2JyaWRnZV9yZW1vdmUoJmNvbm4tPmJyaWRnZSk7CisKKwlpZiAoIUlT X0VSUihjb25uLT5kZGMpKQorCQlpMmNfcHV0X2FkYXB0ZXIoY29ubi0+ZGRjKTsKKworCXJldHVy biAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBkaXNwbGF5X2Nvbm5l Y3Rvcl9tYXRjaFtdID0geworCXsKKwkJLmNvbXBhdGlibGUgPSAiY29tcG9zaXRlLXZpZGVvLWNv bm5lY3RvciIsCisJCS5kYXRhID0gKHZvaWQgKilEUk1fTU9ERV9DT05ORUNUT1JfQ29tcG9zaXRl LAorCX0sIHsKKwkJLmNvbXBhdGlibGUgPSAiZHZpLWNvbm5lY3RvciIsCisJCS5kYXRhID0gKHZv aWQgKilEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSwKKwl9LCB7CisJCS5jb21wYXRpYmxlID0gImhk bWktY29ubmVjdG9yIiwKKwkJLmRhdGEgPSAodm9pZCAqKURSTV9NT0RFX0NPTk5FQ1RPUl9IRE1J QSwKKwl9LCB7CisJCS5jb21wYXRpYmxlID0gInN2aWRlby1jb25uZWN0b3IiLAorCQkuZGF0YSA9 ICh2b2lkICopRFJNX01PREVfQ09OTkVDVE9SX1NWSURFTywKKwl9LCB7CisJCS5jb21wYXRpYmxl ID0gInZnYS1jb25uZWN0b3IiLAorCQkuZGF0YSA9ICh2b2lkICopRFJNX01PREVfQ09OTkVDVE9S X1ZHQSwKKwl9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGRpc3BsYXlfY29u bmVjdG9yX21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZGlzcGxheV9j b25uZWN0b3JfZHJpdmVyID0geworCS5wcm9iZQk9IGRpc3BsYXlfY29ubmVjdG9yX3Byb2JlLAor CS5yZW1vdmUJPSBkaXNwbGF5X2Nvbm5lY3Rvcl9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5u YW1lCQk9ICJkaXNwbGF5LWNvbm5lY3RvciIsCisJCS5vZl9tYXRjaF90YWJsZQk9IGRpc3BsYXlf Y29ubmVjdG9yX21hdGNoLAorCX0sCit9OworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihkaXNwbGF5 X2Nvbm5lY3Rvcl9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJMYXVyZW50IFBpbmNoYXJ0IDxs YXVyZW50LnBpbmNoYXJ0QGlkZWFzb25ib2FyZC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04o IkRpc3BsYXkgY29ubmVjdG9yIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotLSAK UmVnYXJkcywKCkxhdXJlbnQgUGluY2hhcnQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3Rz LmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2RyaS1kZXZlbA==