From mboxrd@z Thu Jan 1 00:00:00 1970 From: Maxime Ripard Subject: [PATCH v5 2/5] drm/bridge: Add RGB to VGA bridge support Date: Fri, 30 Sep 2016 16:37:06 +0200 Message-ID: <20160930143709.1388-3-maxime.ripard@free-electrons.com> References: <20160930143709.1388-1-maxime.ripard@free-electrons.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20160930143709.1388-1-maxime.ripard@free-electrons.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Rob Herring , Daniel Vetter , David Airlie , Archit Taneja Cc: devicetree@vger.kernel.org, dri-devel@lists.freedesktop.org, Chen-Yu Tsai , Maxime Ripard , linux-arm-kernel@lists.infradead.org List-Id: devicetree@vger.kernel.org U29tZSBib2FyZHMgaGF2ZSBhbiBlbnRpcmVseSBwYXNzaXZlIFJHQiB0byBWR0EgYnJpZGdlLCBi YXNlZCBvbiBlaXRoZXIKREFDcyBvciByZXNpc3RvciBsYWRkZXJzLgoKVGhvc2UgbWlnaHQgb3Ig bWlnaHQgbm90IGhhdmUgYW4gaTJjIGJ1cyByb3V0ZWQgdG8gdGhlIFZHQSBjb25uZWN0b3IgaW4K b3JkZXIgdG8gYWNjZXNzIHRoZSBzY3JlZW4gRURJRHMuCgpBZGQgYSBicmlkZ2UgdGhhdCBkb2Vz bid0IGRvIGFueXRoaW5nIGJ1dCBleHBvc2UgdGhlIG1vZGVzIGF2YWlsYWJsZSBvbiB0aGUKc2Ny ZWVuLCBlaXRoZXIgYmFzZWQgb24gdGhlIEVESURzIGlmIGF2YWlsYWJsZSwgb3IgYmFzZWQgb24g dGhlIFhHQQpzdGFuZGFyZHMuCgpBY2tlZC1ieTogUm9iIEhlcnJpbmcgPHJvYmhAa2VybmVsLm9y Zz4KU2lnbmVkLW9mZi1ieTogTWF4aW1lIFJpcGFyZCA8bWF4aW1lLnJpcGFyZEBmcmVlLWVsZWN0 cm9ucy5jb20+Ci0tLQogLi4uL2JpbmRpbmdzL2Rpc3BsYXkvYnJpZGdlL3JnYi10by12Z2EtYnJp ZGdlLnR4dCAgfCAgNDggKysrKysKIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvS2NvbmZpZyAgICAg ICAgICAgICAgICAgICAgIHwgICA3ICsKIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvTWFrZWZpbGUg ICAgICAgICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZ3B1L2RybS9icmlkZ2UvcmdiLXRv LXZnYS5jICAgICAgICAgICAgICAgIHwgMjI5ICsrKysrKysrKysrKysrKysrKysrKwogNCBmaWxl cyBjaGFuZ2VkLCAyODUgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IERvY3VtZW50 YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L2JyaWRnZS9yZ2ItdG8tdmdhLWJyaWRn ZS50eHQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3JnYi10by12 Z2EuYwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNw bGF5L2JyaWRnZS9yZ2ItdG8tdmdhLWJyaWRnZS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRy ZWUvYmluZGluZ3MvZGlzcGxheS9icmlkZ2UvcmdiLXRvLXZnYS1icmlkZ2UudHh0Cm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYTgzNzViYzFmOWNiCi0tLSAvZGV2L251 bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3BsYXkvYnJpZGdl L3JnYi10by12Z2EtYnJpZGdlLnR4dApAQCAtMCwwICsxLDQ4IEBACitEdW1iIFJHQiB0byBWR0Eg YnJpZGdlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgYmluZGluZyBpcyBhaW1lZCBm b3IgZHVtYiBSR0IgdG8gVkdBIGJyaWRnZXMgdGhhdCBkbyBub3QgcmVxdWlyZQorYW55IGNvbmZp Z3VyYXRpb24uCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CisKKy0gY29tcGF0aWJsZTogTXVzdCBi ZSAicmdiLXRvLXZnYS1icmlkZ2UiCisKK1JlcXVpcmVkIG5vZGVzOgorCitUaGlzIGRldmljZSBo YXMgdHdvIHZpZGVvIHBvcnRzLiBUaGVpciBjb25uZWN0aW9ucyBhcmUgbW9kZWxlZCB1c2luZyB0 aGUgT0YKK2dyYXBoIGJpbmRpbmdzIHNwZWNpZmllZCBpbiBEb2N1bWVudGF0aW9uL2RldmljZXRy ZWUvYmluZGluZ3MvZ3JhcGgudHh0LgorCistIFZpZGVvIHBvcnQgMCBmb3IgUkdCIGlucHV0Cist IFZpZGVvIHBvcnQgMSBmb3IgVkdBIG91dHB1dAorCisKK0V4YW1wbGUKKy0tLS0tLS0KKworYnJp ZGdlIHsKKwljb21wYXRpYmxlID0gInJnYi10by12Z2EtYnJpZGdlIjsKKwkjYWRkcmVzcy1jZWxs cyA9IDwxPjsKKwkjc2l6ZS1jZWxscyA9IDwwPjsKKworCXBvcnRzIHsKKwkJI2FkZHJlc3MtY2Vs bHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCXBvcnRAMCB7CisJCQlyZWcgPSA8 MD47CisKKwkJCXZnYV9icmlkZ2VfaW46IGVuZHBvaW50IHsKKwkJCQlyZW1vdGUtZW5kcG9pbnQg PSA8JnRjb24wX291dF92Z2E+OworCQkJfTsKKwkJfTsKKworCQlwb3J0QDEgeworCQkJcmVnID0g PDE+OworCisJCQl2Z2FfYnJpZGdlX291dDogZW5kcG9pbnQgeworCQkJCXJlbW90ZS1lbmRwb2lu dCA9IDwmdmdhX2Nvbl9pbj47CisJCQl9OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2JyaWRnZS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29u ZmlnCmluZGV4IGI1OTBlNjc4MDUyZC4uZDY5MDM5OGM1NDFjIDEwMDY0NAotLS0gYS9kcml2ZXJz L2dwdS9kcm0vYnJpZGdlL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9LY29u ZmlnCkBAIC0xNyw2ICsxNywxMyBAQCBjb25maWcgRFJNX0FOQUxPR0lYX0FOWDc4WFgKIAkgIHRo ZSBIRE1JIG91dHB1dCBvZiBhbiBhcHBsaWNhdGlvbiBwcm9jZXNzb3IgdG8gTXlEUAogCSAgb3Ig RGlzcGxheVBvcnQuCiAKK2NvbmZpZyBEUk1fUkdCX1RPX1ZHQQorCXRyaXN0YXRlICJEdW1iIFJH QiB0byBWR0EgQnJpZGdlIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBPRgorCXNlbGVjdCBEUk1fS01T X0hFTFBFUgorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIHBhc3NpdmUgUkdCIHRvIFZHQSBicmlkZ2Vz CisKIGNvbmZpZyBEUk1fRFdfSERNSQogCXRyaXN0YXRlCiAJc2VsZWN0IERSTV9LTVNfSEVMUEVS CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlIGIvZHJpdmVycy9n cHUvZHJtL2JyaWRnZS9NYWtlZmlsZQppbmRleCBlZmRiMDdlODc4ZjUuLjNiYjhjYmUwOWZlOSAx MDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9NYWtlZmlsZQorKysgYi9kcml2ZXJz L2dwdS9kcm0vYnJpZGdlL01ha2VmaWxlCkBAIC0xLDYgKzEsNyBAQAogY2NmbGFncy15IDo9IC1J aW5jbHVkZS9kcm0KIAogb2JqLSQoQ09ORklHX0RSTV9BTkFMT0dJWF9BTlg3OFhYKSArPSBhbmFs b2dpeC1hbng3OHh4Lm8KK29iai0kKENPTkZJR19EUk1fUkdCX1RPX1ZHQSkgKz0gcmdiLXRvLXZn YS5vCiBvYmotJChDT05GSUdfRFJNX0RXX0hETUkpICs9IGR3LWhkbWkubwogb2JqLSQoQ09ORklH X0RSTV9EV19IRE1JX0FIQl9BVURJTykgKz0gZHctaGRtaS1haGItYXVkaW8ubwogb2JqLSQoQ09O RklHX0RSTV9OWFBfUFROMzQ2MCkgKz0gbnhwLXB0bjM0NjAubwpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2JyaWRnZS9yZ2ItdG8tdmdhLmMgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3Jn Yi10by12Z2EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjVmZjRk NGYzNTk4ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2UvcmdiLXRv LXZnYS5jCkBAIC0wLDAgKzEsMjI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYg RnJlZSBFbGVjdHJvbnMKKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IE5leHRUaGluZyBDbwor ICoKKyAqIE1heGltZSBSaXBhcmQgPG1heGltZS5yaXBhcmRAZnJlZS1lbGVjdHJvbnMuY29tPgor ICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21v ZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+CisKKyNpbmNsdWRlIDxkcm0vZHJt UC5oPgorI2luY2x1ZGUgPGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgorI2luY2x1ZGUgPGRybS9k cm1fY3J0Yy5oPgorI2luY2x1ZGUgPGRybS9kcm1fY3J0Y19oZWxwZXIuaD4KKworc3RydWN0IGR1 bWJfdmdhIHsKKwlzdHJ1Y3QgZHJtX2JyaWRnZQlicmlkZ2U7CisJc3RydWN0IGRybV9jb25uZWN0 b3IJY29ubmVjdG9yOworCisJc3RydWN0IGkyY19hZGFwdGVyCSpkZGM7Cit9OworCitzdGF0aWMg aW5saW5lIHN0cnVjdCBkdW1iX3ZnYSAqCitkcm1fYnJpZGdlX3RvX2R1bWJfdmdhKHN0cnVjdCBk cm1fYnJpZGdlICpicmlkZ2UpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihicmlkZ2UsIHN0cnVj dCBkdW1iX3ZnYSwgYnJpZGdlKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZHVtYl92Z2Eg KgorZHJtX2Nvbm5lY3Rvcl90b19kdW1iX3ZnYShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVj dG9yKQoreworCXJldHVybiBjb250YWluZXJfb2YoY29ubmVjdG9yLCBzdHJ1Y3QgZHVtYl92Z2Es IGNvbm5lY3Rvcik7Cit9CisKK3N0YXRpYyBpbnQgZHVtYl92Z2FfZ2V0X21vZGVzKHN0cnVjdCBk cm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGR1bWJfdmdhICp2Z2EgPSBkcm1f Y29ubmVjdG9yX3RvX2R1bWJfdmdhKGNvbm5lY3Rvcik7CisJc3RydWN0IGVkaWQgKmVkaWQ7CisJ aW50IHJldDsKKworCWlmIChJU19FUlIodmdhLT5kZGMpKQorCQlnb3RvIGZhbGxiYWNrOworCisJ ZWRpZCA9IGRybV9nZXRfZWRpZChjb25uZWN0b3IsIHZnYS0+ZGRjKTsKKwlpZiAoIWVkaWQpIHsK KwkJRFJNX0lORk8oIkVESUQgcmVhZG91dCBmYWlsZWQsIGZhbGxpbmcgYmFjayB0byBzdGFuZGFy ZCBtb2Rlc1xuIik7CisJCWdvdG8gZmFsbGJhY2s7CisJfQorCisJZHJtX21vZGVfY29ubmVjdG9y X3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3RvciwgZWRpZCk7CisJcmV0dXJuIGRybV9hZGRf ZWRpZF9tb2Rlcyhjb25uZWN0b3IsIGVkaWQpOworCitmYWxsYmFjazoKKwkvKgorCSAqIEluIGNh c2Ugd2UgY2Fubm90IHJldHJpZXZlIHRoZSBFRElEcyAoYnJva2VuIG9yIG1pc3NpbmcgaTJjCisJ ICogYnVzKSwgZmFsbGJhY2sgb24gdGhlIFhHQSBzdGFuZGFyZHMKKwkgKi8KKwlyZXQgPSBkcm1f YWRkX21vZGVzX25vZWRpZChjb25uZWN0b3IsIDE5MjAsIDEyMDApOworCisJLyogQW5kIHByZWZl ciBhIG1vZGUgcHJldHR5IG11Y2ggYW55b25lIGNhbiBoYW5kbGUgKi8KKwlkcm1fc2V0X3ByZWZl cnJlZF9tb2RlKGNvbm5lY3RvciwgMTAyNCwgNzY4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgZHVtYl92Z2FfY29u X2hlbHBlcl9mdW5jcyA9IHsKKwkuZ2V0X21vZGVzCT0gZHVtYl92Z2FfZ2V0X21vZGVzLAorfTsK Kworc3RhdGljIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMKK2R1bWJfdmdhX2Nvbm5lY3Rvcl9k ZXRlY3Qoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwgYm9vbCBmb3JjZSkKK3sKKwlz dHJ1Y3QgZHVtYl92Z2EgKnZnYSA9IGRybV9jb25uZWN0b3JfdG9fZHVtYl92Z2EoY29ubmVjdG9y KTsKKworCS8qCisJICogRXZlbiBpZiB3ZSBoYXZlIGFuIEkyQyBidXMsIHdlIGNhbid0IGFzc3Vt ZSB0aGF0IHRoZSBjYWJsZQorCSAqIGlzIGRpc2Nvbm5lY3RlZCBpZiBkcm1fcHJvYmVfZGRjIGZh aWxzLiBTb21lIGNhYmxlcyBkb24ndAorCSAqIHdpcmUgdGhlIEREQyBwaW5zLCBvciB0aGUgSTJD IGJ1cyBtaWdodCBub3QgYmUgd29ya2luZyBhdAorCSAqIGFsbC4KKwkgKi8KKwlpZiAoIUlTX0VS Uih2Z2EtPmRkYykgJiYgZHJtX3Byb2JlX2RkYyh2Z2EtPmRkYykpCisJCXJldHVybiBjb25uZWN0 b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKworCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX3Vua25vd247 Cit9CisKK3N0YXRpYyB2b2lkCitkdW1iX3ZnYV9jb25uZWN0b3JfZGVzdHJveShzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0 b3IpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jb25uZWN0b3JfZnVuY3MgZHVtYl92 Z2FfY29uX2Z1bmNzID0geworCS5kcG1zCQkJPSBkcm1fYXRvbWljX2hlbHBlcl9jb25uZWN0b3Jf ZHBtcywKKwkuZGV0ZWN0CQkJPSBkdW1iX3ZnYV9jb25uZWN0b3JfZGV0ZWN0LAorCS5maWxsX21v ZGVzCQk9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKKwkuZGVzdHJv eQkJPSBkdW1iX3ZnYV9jb25uZWN0b3JfZGVzdHJveSwKKwkucmVzZXQJCQk9IGRybV9hdG9taWNf aGVscGVyX2Nvbm5lY3Rvcl9yZXNldCwKKwkuYXRvbWljX2R1cGxpY2F0ZV9zdGF0ZQk9IGRybV9h dG9taWNfaGVscGVyX2Nvbm5lY3Rvcl9kdXBsaWNhdGVfc3RhdGUsCisJLmF0b21pY19kZXN0cm95 X3N0YXRlCT0gZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2Rlc3Ryb3lfc3RhdGUsCit9Owor CitzdGF0aWMgaW50IGR1bWJfdmdhX2F0dGFjaChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQor eworCXN0cnVjdCBkdW1iX3ZnYSAqdmdhID0gZHJtX2JyaWRnZV90b19kdW1iX3ZnYShicmlkZ2Up OworCWludCByZXQ7CisKKwlpZiAoIWJyaWRnZS0+ZW5jb2RlcikgeworCQlEUk1fRVJST1IoIk1p c3NpbmcgZW5jb2RlclxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRybV9jb25uZWN0 b3JfaGVscGVyX2FkZCgmdmdhLT5jb25uZWN0b3IsCisJCQkJICZkdW1iX3ZnYV9jb25faGVscGVy X2Z1bmNzKTsKKwlyZXQgPSBkcm1fY29ubmVjdG9yX2luaXQoYnJpZGdlLT5kZXYsICZ2Z2EtPmNv bm5lY3RvciwKKwkJCQkgJmR1bWJfdmdhX2Nvbl9mdW5jcywgRFJNX01PREVfQ09OTkVDVE9SX1ZH QSk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byBpbml0aWFsaXplIGNvbm5l Y3RvclxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJZHJtX21vZGVfY29ubmVjdG9yX2F0dGFj aF9lbmNvZGVyKCZ2Z2EtPmNvbm5lY3RvciwKKwkJCQkJICBicmlkZ2UtPmVuY29kZXIpOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2JyaWRnZV9mdW5jcyBkdW1i X3ZnYV9icmlkZ2VfZnVuY3MgPSB7CisJLmF0dGFjaAkJPSBkdW1iX3ZnYV9hdHRhY2gsCit9Owor CitzdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyICpkdW1iX3ZnYV9yZXRyaWV2ZV9kZGMoc3RydWN0 IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZW5kX25vZGUsICpwaGFuZGxl LCAqcmVtb3RlOworCXN0cnVjdCBpMmNfYWRhcHRlciAqZGRjOworCisJZW5kX25vZGUgPSBvZl9n cmFwaF9nZXRfZW5kcG9pbnRfYnlfcmVncyhkZXYtPm9mX25vZGUsIDEsIC0xKTsKKwlpZiAoIWVu ZF9ub2RlKSB7CisJCWRldl9lcnIoZGV2LCAiTWlzc2luZyBjb25uZWN0b3IgZW5kcG9pbnRcbiIp OworCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKKwl9CisKKwlyZW1vdGUgPSBvZl9ncmFwaF9n ZXRfcmVtb3RlX3BvcnRfcGFyZW50KGVuZF9ub2RlKTsKKwlvZl9ub2RlX3B1dChlbmRfbm9kZSk7 CisJaWYgKCFyZW1vdGUpIHsKKwkJZGV2X2VycihkZXYsICJFbmFibGUgdG8gcGFyc2UgcmVtb3Rl IG5vZGVcbiIpOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CisKKwlwaGFuZGxlID0g b2ZfcGFyc2VfcGhhbmRsZShyZW1vdGUsICJkZGMtaTJjLWJ1cyIsIDApOworCW9mX25vZGVfcHV0 KHJlbW90ZSk7CisJaWYgKCFwaGFuZGxlKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKKwor CWRkYyA9IG9mX2dldF9pMmNfYWRhcHRlcl9ieV9ub2RlKHBoYW5kbGUpOworCW9mX25vZGVfcHV0 KHBoYW5kbGUpOworCWlmICghZGRjKQorCQlyZXR1cm4gRVJSX1BUUigtRVBST0JFX0RFRkVSKTsK KworCXJldHVybiBkZGM7Cit9CisKK3N0YXRpYyBpbnQgZHVtYl92Z2FfcHJvYmUoc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZHVtYl92Z2EgKnZnYTsKKwlpbnQgcmV0 OworCisJdmdhID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqdmdhKSwgR0ZQX0tF Uk5FTCk7CisJaWYgKCF2Z2EpCisJCXJldHVybiAtRU5PTUVNOworCXBsYXRmb3JtX3NldF9kcnZk YXRhKHBkZXYsIHZnYSk7CisKKwl2Z2EtPmRkYyA9IGR1bWJfdmdhX3JldHJpZXZlX2RkYygmcGRl di0+ZGV2KTsKKwlpZiAoSVNfRVJSKHZnYS0+ZGRjKSkgeworCQlpZiAoUFRSX0VSUih2Z2EtPmRk YykgPT0gLUVOT0RFVikgeworCQkJZGV2X2luZm8oJnBkZXYtPmRldiwKKwkJCQkgIk5vIGkyYyBi dXMgc3BlY2lmaWVkLi4uIERpc2FibGluZyBFRElEIHJlYWRvdXRcbiIpOworCQl9IGVsc2Ugewor CQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ291bGRuJ3QgcmV0cmlldmUgaTJjIGJ1c1xuIik7CisJ CQlyZXR1cm4gUFRSX0VSUih2Z2EtPmRkYyk7CisJCX0KKwl9CisKKwl2Z2EtPmJyaWRnZS5mdW5j cyA9ICZkdW1iX3ZnYV9icmlkZ2VfZnVuY3M7CisJdmdhLT5icmlkZ2Uub2Zfbm9kZSA9IHBkZXYt PmRldi5vZl9ub2RlOworCisJcmV0ID0gZHJtX2JyaWRnZV9hZGQoJnZnYS0+YnJpZGdlKTsKKwlp ZiAocmV0ICYmICFJU19FUlIodmdhLT5kZGMpKQorCQlpMmNfcHV0X2FkYXB0ZXIodmdhLT5kZGMp OworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkdW1iX3ZnYV9yZW1vdmUoc3RydWN0 IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZHVtYl92Z2EgKnZnYSA9IHBsYXRm b3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJZHJtX2JyaWRnZV9yZW1vdmUoJnZnYS0+YnJpZGdl KTsKKworCWlmICghSVNfRVJSKHZnYS0+ZGRjKSkKKwkJaTJjX3B1dF9hZGFwdGVyKHZnYS0+ZGRj KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBk dW1iX3ZnYV9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAicmdiLXRvLXZnYS1icmlkZ2Ui IH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZHVtYl92Z2FfbWF0Y2gpOwor CitzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGR1bWJfdmdhX2RyaXZlciA9IHsKKwkucHJvYmUJPSBk dW1iX3ZnYV9wcm9iZSwKKwkucmVtb3ZlCT0gZHVtYl92Z2FfcmVtb3ZlLAorCS5kcml2ZXIJCT0g eworCQkubmFtZQkJPSAicmdiLXRvLXZnYS1icmlkZ2UiLAorCQkub2ZfbWF0Y2hfdGFibGUJPSBk dW1iX3ZnYV9tYXRjaCwKKwl9LAorfTsKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoZHVtYl92Z2Ff ZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiTWF4aW1lIFJpcGFyZCA8bWF4aW1lLnJpcGFyZEBm cmVlLWVsZWN0cm9ucy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkR1bWIgUkdCIHRvIFZH QSBicmlkZ2UgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0tIAoyLjkuMwoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1h aWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==