All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <E7C9878FBA1C6D42A1CA3F62AEB6945F823E2E20@BGSMSX104.gar.corp.intel.com>

diff --git a/a/1.txt b/N1/1.txt
index 1cc6b15..6f7bf3f 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -1,214 +1,348 @@
-DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTXVuLCBHd2FuLWd5ZW9u
-ZyA8Z3dhbi1neWVvbmcubXVuQGludGVsLmNvbT4NCj4gU2VudDogU3VuZGF5LCBGZWJydWFyeSA5
-LCAyMDIwIDk6MDUgQU0NCj4gVG86IFNoYW5rYXIsIFVtYSA8dW1hLnNoYW5rYXJAaW50ZWwuY29t
-PjsgaW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZw0KPiBDYzogZHJpLWRldmVsQGxpc3Rz
-LmZyZWVkZXNrdG9wLm9yZzsgbGludXgtZmJkZXZAdmdlci5rZXJuZWwub3JnDQo+IFN1YmplY3Q6
-IFJlOiBbUEFUQ0ggdjMgMDQvMTddIGRybS9pOTE1L2RwOiBBZGQgd3JpdGluZyBvZiBEUCBTRFBz
-IChTZWNvbmRhcnkgRGF0YQ0KPiBQYWNrZXQpDQo+IA0KPiBPbiBXZWQsIDIwMjAtMDItMDUgYXQg
-MjE6MzkgKzA1MzAsIFNoYW5rYXIsIFVtYSB3cm90ZToNCj4gPiA+IC0tLS0tT3JpZ2luYWwgTWVz
-c2FnZS0tLS0tDQo+ID4gPiBGcm9tOiBkcmktZGV2ZWwgPGRyaS1kZXZlbC1ib3VuY2VzQGxpc3Rz
-LmZyZWVkZXNrdG9wLm9yZz4gT24gQmVoYWxmDQo+ID4gPiBPZiBHd2FuLSBneWVvbmcgTXVuDQo+
-ID4gPiBTZW50OiBUdWVzZGF5LCBGZWJydWFyeSA0LCAyMDIwIDQ6NTAgQU0NCj4gPiA+IFRvOiBp
-bnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnDQo+ID4gPiBDYzogbGludXgtZmJkZXZAdmdl
-ci5rZXJuZWwub3JnOyBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnDQo+ID4gPiBTdWJq
-ZWN0OiBbUEFUQ0ggdjMgMDQvMTddIGRybS9pOTE1L2RwOiBBZGQgd3JpdGluZyBvZiBEUCBTRFBz
-DQo+ID4gPiAoU2Vjb25kYXJ5IERhdGENCj4gPiA+IFBhY2tldCkNCj4gPg0KPiA+IERyb3AgdGhp
-bmdzIGluICgpLCBub3QgbmVlZGVkLg0KPiA+DQo+ID4gPiBJdCBhZGRzIHJvdXRpbmVzIHRoYXQg
-d3JpdGUgRFAgVlNDIFNEUCBhbmQgRFAgSERSIE1ldGFkYXRhIEluZm9mcmFtZQ0KPiA+ID4gU0RQ
-Lg0KPiA+ID4gSW4gb3JkZXIgdG8gcGFjayBEUCBWU0MgU0RQLCBpdCBhZGRzIGludGVsX2RwX3Zz
-Y19zZHBfcGFjaygpDQo+ID4gPiBmdW5jdGlvbi4NCj4gPiA+IEl0IGZvbGxvd3MgRFAgMS40YSBz
-cGVjLiBbVGFibGUgMi0xMTY6IFZTQyBTRFAgSGVhZGVyIEJ5dGVzXSBhbmQNCj4gPiA+IFtUYWJs
-ZSAyLTExNzogVlNDIFNEUCBQYXlsb2FkIGZvciBEQjE2IHRocm91Z2ggREIxOF0NCj4gPiA+DQo+
-ID4gPiBJbiBvcmRlciB0byBwYWNrIERQIEhEUiBNZXRhZGF0YSBJbmZvZnJhbWUgU0RQLCBpdCBh
-ZGRzDQo+ID4gPiBpbnRlbF9kcF9oZHJfbWV0YWRhdGFfaW5mb2ZyYW1lX3NkcF9wYWNrKCkgZnVu
-Y3Rpb24uDQo+ID4gPiBBbmQgaXQgZm9sbG93cyBEUCAxLjRhIHNwZWMuDQo+ID4gPiAoW1RhYmxl
-IDItMTI1OiBJTkZPRlJBTUUgU0RQIHYxLjIgSGVhZGVyIEJ5dGVzXSBhbmQgW1RhYmxlIDItMTI2
-Og0KPiA+ID4gSU5GT0ZSQU1FDQo+ID4gPiBTRFAgdjEuMiBQYXlsb2FkIERhdGEgQnl0ZXMgLSBE
-QjAgdGhyb3VnaCBEQjMxXSkgYW5kIENUQS04NjEtRyBzcGVjLg0KPiA+ID4gW1RhYmxlLTQyIER5
-bmFtaWMgUmFuZ2UgYW5kIE1hc3RlcmluZyBJbmZvRnJhbWVdLg0KPiA+ID4NCj4gPiA+IEEgbWFj
-aGFuaXNtIGFuZCBhIG5hbWluZyBydWxlIG9mIGludGVsX2RwX3NldF9pbmZvZnJhbWVzKCkgZnVu
-Y3Rpb24NCj4gPiA+IHJlZmVyZW5jZXMNCj4gPg0KPiA+IFR5cG8gaW4gbWVjaGFuaXNtLg0KPiA+
-DQo+ID4gPiBpbnRlbF9lbmNvZGVyLT5zZXRfaW5mb2ZyYW1lcygpIG9mIGludGVsX2hkbWkuYyAu
-DQo+ID4gPiBWU0MgU0RQIGlzIHVzZWQgZm9yIFBTUiBhbmQgUGl4ZWwgRW5jb2RpbmcgYW5kIENv
-bG9yaW1ldHJ5IEZvcm1hdHMNCj4gPiA+IGNhc2VzLg0KPiA+ID4gQmVjYXVzZSBQU1Igcm91dGlu
-ZSBoYXMgaXRzIG93biByb3V0aW5lIG9mIHdyaXRpbmcgYSBWU0MgU0RQLCB3aGVuDQo+ID4gPiB0
-aGUgUFNSIGlzIGVuYWJsZWQsIGludGVsX2RwX3NldF9pbmZvZnJhbWVzKCkgZG9lcyBub3Qgd3Jp
-dGUgYSBWU0MNCj4gPiA+IFNEUC4NCj4gPiA+DQo+ID4gPiB2MzoNCj4gPiA+ICAgLSBFeHBsaWNp
-dGx5IGRpc2FibGUgdW51c2VkIERJUHMgKEFWSSwgR0NQLCBWUywgU1BELCBEUk0uIFRoZXkNCj4g
-PiA+IHdpbGwgYmUNCj4gPiA+ICAgICB1c2VkIGZvciBIRE1JKSwgd2hlbiBpbnRlbF9kcF9zZXRf
-aW5mb2ZyYW1lcygpIGZ1bmN0aW9uIHdpbGwgYmUNCj4gPiA+IGNhbGxlZC4NCj4gPiA+ICAgLSBS
-ZXBsYWNlIGEgc3RydWN0dXJlIG5hbWUgdG8gZHJtX2RwX3ZzY19zZHAgZnJvbQ0KPiA+ID4gaW50
-ZWxfZHBfdnNjX3NkcC4NCj4gPiA+DQo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBHd2FuLWd5ZW9uZyBN
-dW4gPGd3YW4tZ3llb25nLm11bkBpbnRlbC5jb20+DQo+ID4gPiAtLS0NCj4gPiA+ICBkcml2ZXJz
-L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwLmMgfCAxOTQNCj4gPiA+ICsrKysrKysrKysr
-KysrKysrKysrKysrKw0KPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf
-ZHAuaCB8ICAgMyArDQo+ID4gPiAgMiBmaWxlcyBjaGFuZ2VkLCAxOTcgaW5zZXJ0aW9ucygrKQ0K
-PiA+ID4NCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu
-dGVsX2RwLmMNCj4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5j
-DQo+ID4gPiBpbmRleCBiMjY1YjVjNTk5ZjIuLmRkN2U1NTg4MDAxZSAxMDA2NDQNCj4gPiA+IC0t
-LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuYw0KPiA+ID4gKysrIGIv
-ZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5jDQo+ID4gPiBAQCAtNDczMSw2
-ICs0NzMxLDIwMCBAQCBpbnRlbF9kcF9uZWVkc192c2Nfc2RwKGNvbnN0IHN0cnVjdA0KPiA+ID4g
-aW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwNCj4gPiA+ICAJcmV0dXJuIGZhbHNlOw0KPiA+
-ID4gIH0NCj4gPiA+DQo+ID4gPiArc3RhdGljIHNzaXplX3QgaW50ZWxfZHBfdnNjX3NkcF9wYWNr
-KGNvbnN0IHN0cnVjdCBkcm1fZHBfdnNjX3NkcA0KPiA+ID4gKnZzYywNCj4gPiA+ICsJCQkJICAg
-ICBzdHJ1Y3QgZHBfc2RwICpzZHAsIHNpemVfdCBzaXplKSB7DQo+ID4gPiArCXNpemVfdCBsZW5n
-dGggPSBzaXplb2Yoc3RydWN0IGRwX3NkcCk7DQo+ID4gPiArDQo+ID4gPiArCWlmIChzaXplIDwg
-bGVuZ3RoKQ0KPiA+ID4gKwkJcmV0dXJuIC1FTk9TUEM7DQo+ID4gPiArDQo+ID4gPiArCW1lbXNl
-dChzZHAsIDAsIHNpemUpOw0KPiA+ID4gKw0KPiA+ID4gKwkvKg0KPiA+ID4gKwkgKiBQcmVwYXJl
-IFZTQyBIZWFkZXIgZm9yIFNVIGFzIHBlciBEUCAxLjRhIHNwZWMsIFRhYmxlIDItMTE5DQo+ID4g
-PiArCSAqIFZTQyBTRFAgSGVhZGVyIEJ5dGVzDQo+ID4gPiArCSAqLw0KPiA+ID4gKwlzZHAtPnNk
-cF9oZWFkZXIuSEIwID0gMDsgLyogU2Vjb25kYXJ5LURhdGEgUGFja2V0IElEID0gMCAqLw0KPiA+
-ID4gKwlzZHAtPnNkcF9oZWFkZXIuSEIxID0gdnNjLT5zZHBfdHlwZTsgLyogU2Vjb25kYXJ5LWRh
-dGEgUGFja2V0DQo+ID4gPiBUeXBlICovDQo+ID4gPiArCXNkcC0+c2RwX2hlYWRlci5IQjIgPSB2
-c2MtPnJldmlzaW9uOyAvKiBSZXZpc2lvbiBOdW1iZXIgKi8NCj4gPiA+ICsJc2RwLT5zZHBfaGVh
-ZGVyLkhCMyA9IHZzYy0+bGVuZ3RoOyAvKiBOdW1iZXIgb2YgVmFsaWQgRGF0YQ0KPiA+ID4gQnl0
-ZXMgKi8NCj4gPiA+ICsNCj4gPiA+ICsJLyogVlNDIFNEUCBQYXlsb2FkIGZvciBEQjE2IHRocm91
-Z2ggREIxOCAqLw0KPiA+ID4gKwkvKiBQaXhlbCBFbmNvZGluZyBhbmQgQ29sb3JpbWV0cnkgRm9y
-bWF0cyAgKi8NCj4gPiA+ICsJc2RwLT5kYlsxNl0gPSAodnNjLT5jb2xvcnNwYWNlICYgMHhmKSA8
-PCA0OyAvKiBEQjE2Wzc6NF0gKi8NCj4gPiA+ICsJc2RwLT5kYlsxNl0gfD0gdnNjLT5jb2xvcmlt
-ZXRyeSAmIDB4ZjsgLyogREIxNlszOjBdICovDQo+ID4gPiArDQo+ID4gPiArCXN3aXRjaCAodnNj
-LT5icGMpIHsNCj4gPiA+ICsJY2FzZSA4Og0KPiA+ID4gKwkJc2RwLT5kYlsxN10gPSAweDE7IC8q
-IERCMTdbMzowXSAqLw0KPiA+ID4gKwkJYnJlYWs7DQo+ID4gPiArCWNhc2UgMTA6DQo+ID4gPiAr
-CQlzZHAtPmRiWzE3XSA9IDB4MjsNCj4gPiA+ICsJCWJyZWFrOw0KPiA+ID4gKwljYXNlIDEyOg0K
-PiA+ID4gKwkJc2RwLT5kYlsxN10gPSAweDM7DQo+ID4gPiArCQlicmVhazsNCj4gPiA+ICsJY2Fz
-ZSAxNjoNCj4gPiA+ICsJCXNkcC0+ZGJbMTddID0gMHg0Ow0KPiA+ID4gKwkJYnJlYWs7DQo+ID4g
-PiArCWRlZmF1bHQ6DQo+ID4gPiArCQlNSVNTSU5HX0NBU0UodnNjLT5icGMpOw0KPiA+DQo+ID4g
-NmJwYyBpcyBub3QgaGFuZGxlZCBoZXJlLCBhZGQgdGhhdCBhcyB3ZWxsLg0KPiA+DQo+IFllcywg
-SSBtaXNzZWQgNmJwYyBjYXNlLCBJJ2xsIHVwZGF0ZSBpdC4NCj4gPiA+ICsJCWJyZWFrOw0KPiA+
-ID4gKwl9DQo+ID4gPiArCS8qIER5bmFtaWMgUmFuZ2UgYW5kIENvbXBvbmVudCBCaXQgRGVwdGgg
-Ki8NCj4gPiA+ICsJaWYgKHZzYy0+ZHluYW1pY19yYW5nZSA9PSBEUF9EWU5BTUlDX1JBTkdFX0NU
-QSkNCj4gPiA+ICsJCXNkcC0+ZGJbMTddIHw9IDB4ODA7ICAvKiBEQjE3WzddICovDQo+ID4gPiAr
-DQo+ID4gPiArCS8qIENvbnRlbnQgVHlwZSAqLw0KPiA+ID4gKwlzZHAtPmRiWzE4XSA9IHZzYy0+
-Y29udGVudF90eXBlICYgMHg3Ow0KPiA+ID4gKw0KPiA+ID4gKwlyZXR1cm4gbGVuZ3RoOw0KPiA+
-ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgc3NpemVfdA0KPiA+ID4gK2ludGVsX2RwX2hk
-cl9tZXRhZGF0YV9pbmZvZnJhbWVfc2RwX3BhY2soY29uc3Qgc3RydWN0DQo+ID4gPiBoZG1pX2Ry
-bV9pbmZvZnJhbWUNCj4gPiA+ICpkcm1faW5mb2ZyYW1lLA0KPiA+ID4gKwkJCQkJIHN0cnVjdCBk
-cF9zZHAgKnNkcCwNCj4gPiA+ICsJCQkJCSBzaXplX3Qgc2l6ZSkNCj4gPiA+ICt7DQo+ID4gPiAr
-CXNpemVfdCBsZW5ndGggPSBzaXplb2Yoc3RydWN0IGRwX3NkcCk7DQo+ID4gPiArCWNvbnN0IGlu
-dCBpbmZvZnJhbWVfc2l6ZSA9IEhETUlfSU5GT0ZSQU1FX0hFQURFUl9TSVpFICsNCj4gPiA+IEhE
-TUlfRFJNX0lORk9GUkFNRV9TSVpFOw0KPiA+ID4gKwl1bnNpZ25lZCBjaGFyIGJ1ZltIRE1JX0lO
-Rk9GUkFNRV9IRUFERVJfU0laRSArDQo+ID4gPiBIRE1JX0RSTV9JTkZPRlJBTUVfU0laRV07DQo+
-ID4gPiArCXNzaXplX3QgbGVuOw0KPiA+ID4gKw0KPiA+ID4gKwlpZiAoc2l6ZSA8IGxlbmd0aCkN
-Cj4gPiA+ICsJCXJldHVybiAtRU5PU1BDOw0KPiA+ID4gKw0KPiA+ID4gKwltZW1zZXQoc2RwLCAw
-LCBzaXplKTsNCj4gPiA+ICsNCj4gPiA+ICsJbGVuID0gaGRtaV9kcm1faW5mb2ZyYW1lX3BhY2tf
-b25seShkcm1faW5mb2ZyYW1lLCBidWYsDQo+ID4gPiBzaXplb2YoYnVmKSk7DQo+ID4gPiArCWlm
-IChsZW4gPCAwKSB7DQo+ID4gPiArCQlEUk1fREVCVUdfS01TKCJidWZmZXIgc2l6ZSBpcyBzbWFs
-bGVyIHRoYW4gaGRyIG1ldGFkYXRhDQo+ID4gPiBpbmZvZnJhbWVcbiIpOw0KPiA+ID4gKwkJcmV0
-dXJuIC1FTk9TUEM7DQo+ID4gPiArCX0NCj4gPiA+ICsNCj4gPiA+ICsJaWYgKGxlbiAhPSBpbmZv
-ZnJhbWVfc2l6ZSkgew0KPiA+ID4gKwkJRFJNX0RFQlVHX0tNUygid3Jvbmcgc3RhdGljIGhkciBt
-ZXRhZGF0YSBzaXplXG4iKTsNCj4gPiA+ICsJCXJldHVybiAtRU5PU1BDOw0KPiA+ID4gKwl9DQo+
-ID4gPiArDQo+ID4gPiArCS8qDQo+ID4gPiArCSAqIFNldCB1cCB0aGUgaW5mb2ZyYW1lIHNkcCBw
-YWNrZXQgZm9yIEhEUiBzdGF0aWMgbWV0YWRhdGEuDQo+ID4gPiArCSAqIFByZXBhcmUgVlNDIEhl
-YWRlciBmb3IgU1UgYXMgcGVyIERQIDEuNGEgc3BlYywNCj4gPiA+ICsJICogVGFibGUgMi0xMDAg
-YW5kIFRhYmxlIDItMTAxDQo+ID4gPiArCSAqLw0KPiA+ID4gKw0KPiA+ID4gKwkvKiBTZWNvbmRh
-cnktRGF0YSBQYWNrZXQgSUQsIDAwaCBmb3Igbm9uLUF1ZGlvIElORk9GUkFNRSAqLw0KPiA+ID4g
-KwlzZHAtPnNkcF9oZWFkZXIuSEIwID0gMDsNCj4gPiA+ICsJLyoNCj4gPiA+ICsJICogUGFja2V0
-IFR5cGUgODBoICsgTm9uLWF1ZGlvIElORk9GUkFNRSBUeXBlIHZhbHVlDQo+ID4gPiArCSAqIEhE
-TUlfSU5GT0ZSQU1FX1RZUEVfRFJNOiAweDg3DQo+ID4gPiArCSAqIC0gODBoICsgTm9uLWF1ZGlv
-IElORk9GUkFNRSBUeXBlIHZhbHVlDQo+ID4gPiArCSAqIC0gSW5mb0ZyYW1lIFR5cGU6IDB4MDcN
-Cj4gPiA+ICsJICogICAgW0NUQS04NjEtRyBUYWJsZS00MiBEeW5hbWljIFJhbmdlIGFuZCBNYXN0
-ZXJpbmcNCj4gPiA+IEluZm9GcmFtZV0NCj4gPiA+ICsJICovDQo+ID4gPiArCXNkcC0+c2RwX2hl
-YWRlci5IQjEgPSBkcm1faW5mb2ZyYW1lLT50eXBlOw0KPiA+ID4gKwkvKg0KPiA+ID4gKwkgKiBM
-ZWFzdCBTaWduaWZpY2FudCBFaWdodCBCaXRzIG9mIChEYXRhIEJ5dGUgQ291bnQg4oCTIDEpDQo+
-ID4gPiArCSAqIGluZm9mcmFtZV9zaXplIC0gMQ0KPiA+ID4gKwkgKi8NCj4gPiA+ICsJc2RwLT5z
-ZHBfaGVhZGVyLkhCMiA9IDB4MUQ7DQo+ID4gPiArCS8qIElORk9GUkFNRSBTRFAgVmVyc2lvbiBO
-dW1iZXIgKi8NCj4gPiA+ICsJc2RwLT5zZHBfaGVhZGVyLkhCMyA9ICgweDEzIDw8IDIpOw0KPiA+
-ID4gKwkvKiBDVEEgSGVhZGVyIEJ5dGUgMiAoSU5GT0ZSQU1FIFZlcnNpb24gTnVtYmVyKSAqLw0K
-PiA+ID4gKwlzZHAtPmRiWzBdID0gZHJtX2luZm9mcmFtZS0+dmVyc2lvbjsNCj4gPiA+ICsJLyog
-Q1RBIEhlYWRlciBCeXRlIDMgKExlbmd0aCBvZiBJTkZPRlJBTUUpOg0KPiA+ID4gSERNSV9EUk1f
-SU5GT0ZSQU1FX1NJWkUgKi8NCj4gPiA+ICsJc2RwLT5kYlsxXSA9IGRybV9pbmZvZnJhbWUtPmxl
-bmd0aDsNCj4gPiA+ICsJLyoNCj4gPiA+ICsJICogQ29weSBIRE1JX0RSTV9JTkZPRlJBTUVfU0la
-RSBzaXplIGZyb20gYSBidWZmZXIgYWZ0ZXINCj4gPg0KPiA+IENvbW1lbnQgTG9va3MgaW5jb21w
-bGV0ZS4NCj4gPg0KPiBJIG1pc3NlZCBzb21lIGNvbW1lbnRzLCBJJ2xsIHVwZGF0ZSBpdC4NCj4g
-PiA+ICsJICovDQo+ID4gPiArCUJVSUxEX0JVR19PTihzaXplb2Yoc2RwLT5kYikgPCBIRE1JX0RS
-TV9JTkZPRlJBTUVfU0laRSArIDIpOw0KPiA+ID4gKwltZW1jcHkoJnNkcC0+ZGJbMl0sICZidWZb
-SERNSV9JTkZPRlJBTUVfSEVBREVSX1NJWkVdLA0KPiA+ID4gKwkgICAgICAgSERNSV9EUk1fSU5G
-T0ZSQU1FX1NJWkUpOw0KPiA+ID4gKw0KPiA+ID4gKwkvKg0KPiA+ID4gKwkgKiBTaXplIG9mIERQ
-IGluZm9mcmFtZSBzZHAgcGFja2V0IGZvciBIRFIgc3RhdGljIG1ldGFkYXRhIGlzDQo+ID4gPiBj
-b25zaXN0IG9mDQo+ID4NCj4gPiBEcm9wICJpcyINCj4gPg0KPiBJbmNsdWRlcyB0aGlzLCBJJ2xs
-IHBvbGlzaCBwb2xpc2ggY29tbWl0IG1lc3NhZ2UgYW5kIGNvbW1lbnRzLg0KPiANCj4gPiA+ICsJ
-ICogLSBEUCBTRFAgSGVhZGVyKHN0cnVjdCBkcF9zZHBfaGVhZGVyKTogNCBieXRlcw0KPiA+ID4g
-KwkgKiAtIFR3byBEYXRhIEJsb2NrczogMiBieXRlcw0KPiA+ID4gKwkgKiAgICBDVEEgSGVhZGVy
-IEJ5dGUyIChJTkZPRlJBTUUgVmVyc2lvbiBOdW1iZXIpDQo+ID4gPiArCSAqICAgIENUQSBIZWFk
-ZXIgQnl0ZTMgKExlbmd0aCBvZiBJTkZPRlJBTUUpDQo+ID4gPiArCSAqIC0gSERNSV9EUk1fSU5G
-T0ZSQU1FX1NJWkU6IDI2IGJ5dGVzDQo+ID4gPiArCSAqDQo+ID4gPiArCSAqIFByaW9yIHRvIEdF
-TjExJ3MgR01QIHJlZ2lzdGVyIHNpemUgaXMgaWRlbnRpY2FsIHRvIERQIEhEUg0KPiA+ID4gc3Rh
-dGljIG1ldGFkYXRhDQo+ID4gPiArCSAqIGluZm9mcmFtZSBzaXplLiBCdXQgR0VOMTErIGhhcyBs
-YXJnZXIgdGhhbiB0aGF0IHNpemUsDQo+ID4gPiB3cml0ZV9pbmZvZnJhbWUNCj4gPiA+ICsJICog
-d2lsbCBwYWQgcmVzdCBvZiB0aGUgc2l6ZS4NCj4gPiA+ICsJICovDQo+ID4gPiArCXJldHVybiBz
-aXplb2Yoc3RydWN0IGRwX3NkcF9oZWFkZXIpICsgMiArDQo+ID4gPiBIRE1JX0RSTV9JTkZPRlJB
-TUVfU0laRTsgfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyB2b2lkIGludGVsX3dyaXRlX2RwX3Nk
-cChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwNCj4gPiA+ICsJCQkgICAgICAgY29uc3Qg
-c3RydWN0IGludGVsX2NydGNfc3RhdGUNCj4gPiA+ICpjcnRjX3N0YXRlLA0KPiA+ID4gKwkJCSAg
-ICAgICB1bnNpZ25lZCBpbnQgdHlwZSkNCj4gPiA+ICt7DQo+ID4gPiArCXN0cnVjdCBpbnRlbF9k
-aWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0ID0NCj4gPiA+IGVuY190b19kaWdfcG9ydChlbmNv
-ZGVyKTsNCj4gPiA+ICsJc3RydWN0IGRwX3NkcCBzZHAgPSB7fTsNCj4gPiA+ICsJc3NpemVfdCBs
-ZW47DQo+ID4gPiArDQo+ID4gPiArCWlmICgoY3J0Y19zdGF0ZS0+aW5mb2ZyYW1lcy5lbmFibGUg
-Jg0KPiA+ID4gKwkgICAgIGludGVsX2hkbWlfaW5mb2ZyYW1lX2VuYWJsZSh0eXBlKSkgPT0gMCkN
-Cj4gPiA+ICsJCXJldHVybjsNCj4gPiA+ICsNCj4gPiA+ICsJc3dpdGNoICh0eXBlKSB7DQo+ID4g
-PiArCWNhc2UgRFBfU0RQX1ZTQzoNCj4gPiA+ICsJCWxlbiA9IGludGVsX2RwX3ZzY19zZHBfcGFj
-aygmY3J0Y19zdGF0ZS0NCj4gPiA+ID5pbmZvZnJhbWVzLnZzYywgJnNkcCwNCj4gPiA+ICsJCQkJ
-CSAgICBzaXplb2Yoc2RwKSk7DQo+ID4gPiArCQlicmVhazsNCj4gPiA+ICsJY2FzZSBIRE1JX1BB
-Q0tFVF9UWVBFX0dBTVVUX01FVEFEQVRBOg0KPiA+ID4gKwkJbGVuID0NCj4gPiA+IGludGVsX2Rw
-X2hkcl9tZXRhZGF0YV9pbmZvZnJhbWVfc2RwX3BhY2soJmNydGNfc3RhdGUtDQo+ID4gPiA+IGlu
-Zm9mcmFtZXMuZHJtLmRybSwNCj4gPiA+ICsJCQkJCQkJICAgICAgICZzZHAsDQo+ID4gPiBzaXpl
-b2Yoc2RwKSk7DQo+ID4gPiArCQlicmVhazsNCj4gPiA+ICsJZGVmYXVsdDoNCj4gPiA+ICsJCU1J
-U1NJTkdfQ0FTRSh0eXBlKTsNCj4gPiA+ICsJCWJyZWFrOw0KPiA+ID4gKwl9DQo+ID4gPiArDQo+
-ID4gPiArCWlmIChXQVJOX09OKGxlbiA8IDApKQ0KPiA+ID4gKwkJcmV0dXJuOw0KPiA+ID4gKw0K
-PiA+ID4gKwlpbnRlbF9kaWdfcG9ydC0+d3JpdGVfaW5mb2ZyYW1lKGVuY29kZXIsIGNydGNfc3Rh
-dGUsIHR5cGUsDQo+ID4gPiAmc2RwLCBsZW4pOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICt2
-b2lkIGludGVsX2RwX3NldF9pbmZvZnJhbWVzKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVy
-LA0KPiA+ID4gKwkJCSAgICAgYm9vbCBlbmFibGUsDQo+ID4gPiArCQkJICAgICBjb25zdCBzdHJ1
-Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwNCj4gPiA+ICsJCQkgICAgIGNvbnN0IHN0
-cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlDQo+ID4gPiAqY29ubl9zdGF0ZSkgew0KPiA+ID4gKwlz
-dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGVuY29kZXItPmJhc2Uu
-ZGV2KTsNCj4gPiA+ICsJc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGVuY190b19pbnRlbF9k
-cChlbmNvZGVyKTsNCj4gPiA+ICsJaTkxNV9yZWdfdCByZWcgPSBIU1dfVFZJREVPX0RJUF9DVEwo
-Y3J0Y19zdGF0ZS0NCj4gPiA+ID5jcHVfdHJhbnNjb2Rlcik7DQo+ID4gPiArCXUzMiBkaXBfZW5h
-YmxlID0gVklERU9fRElQX0VOQUJMRV9BVklfSFNXIHwNCj4gPiA+IFZJREVPX0RJUF9FTkFCTEVf
-R0NQX0hTVyB8DQo+ID4gPiArCQkJIFZJREVPX0RJUF9FTkFCTEVfVlNfSFNXIHwNCj4gPiA+IFZJ
-REVPX0RJUF9FTkFCTEVfR01QX0hTVyB8DQo+ID4gPiArCQkJIFZJREVPX0RJUF9FTkFCTEVfU1BE
-X0hTVyB8DQo+ID4gPiBWSURFT19ESVBfRU5BQkxFX0RSTV9HTEs7DQo+ID4gPiArCXUzMiB2YWwg
-PSBJOTE1X1JFQUQocmVnKTsNCj4gPiA+ICsNCj4gPiA+ICsJLyogVE9ETzogQWRkIERTQyBjYXNl
-IChESVBfRU5BQkxFX1BQUykgKi8NCj4gPiA+ICsJLyogV2hlbiBQU1IgaXMgZW5hYmxlZCwgdGhp
-cyByb3V0aW5lIGRvZXNuJ3QgZGlzYWJsZSBWU0MgRElQICovDQo+ID4gPiArCWlmIChpbnRlbF9w
-c3JfZW5hYmxlZChpbnRlbF9kcCkpDQo+ID4gPiArCQl2YWwgJj0gfmRpcF9lbmFibGU7DQo+ID4g
-PiArCWVsc2UNCj4gPiA+ICsJCXZhbCAmPSB+KGRpcF9lbmFibGUgfCBWSURFT19ESVBfRU5BQkxF
-X1ZTQ19IU1cpOw0KPiA+DQo+ID4gZGlwX2VuYWJsZSBoYXMgVklERU9fRElQX0VOQUJMRV9WU0Nf
-SFNXIGFscmVhZHkgaW4gaXQuIFBsZWFzZSBmaXgNCj4gPiB0aGlzLg0KPiA+DQo+IERlY2xhcmlu
-ZyBvZiBkaXBfZW5hYmxlIGRvZXMgbm90IGluY2x1ZGUgVklERU9fRElQX0VOQUJMRV9WU0NfSFNX
-Lg0KPiB0aGVyZWZvcmUgd2UgbmVlZCBpdCBoZXJlIHRvIGRpc2FibGUgVlNDIFNEUCBESVAuDQoN
-Ck9oIG9rLCBUb29rIFZTIGZvciBWU0MuIFNjcmF0Y2ggbXkgZWFybGllciBjb21tZW50LCBjaGFu
-Z2UgaXMgY29ycmVjdC4NCg0KPiA+ID4gKw0KPiA+ID4gKwlpZiAoIWVuYWJsZSkgew0KPiA+ID4g
-KwkJSTkxNV9XUklURShyZWcsIHZhbCk7DQo+ID4gPiArCQlQT1NUSU5HX1JFQUQocmVnKTsNCj4g
-PiA+ICsJCXJldHVybjsNCj4gPiA+ICsJfQ0KPiA+ID4gKw0KPiA+ID4gKwlJOTE1X1dSSVRFKHJl
-ZywgdmFsKTsNCj4gPiA+ICsJUE9TVElOR19SRUFEKHJlZyk7DQo+ID4gPiArDQo+ID4gPiArCS8q
-IFdoZW4gUFNSIGlzIGVuYWJsZWQsIFZTQyBTRFAgaXMgaGFuZGxlZCBieSBQU1Igcm91dGluZSAq
-Lw0KPiA+ID4gKwlpZiAoIWludGVsX3Bzcl9lbmFibGVkKGludGVsX2RwKSkNCj4gPiA+ICsJCWlu
-dGVsX3dyaXRlX2RwX3NkcChlbmNvZGVyLCBjcnRjX3N0YXRlLCBEUF9TRFBfVlNDKTsNCj4gPiA+
-ICsNCj4gPiA+ICsJaW50ZWxfd3JpdGVfZHBfc2RwKGVuY29kZXIsIGNydGNfc3RhdGUsDQo+ID4g
-PiArSERNSV9QQUNLRVRfVFlQRV9HQU1VVF9NRVRBREFUQSk7IH0NCj4gPiA+ICsNCj4gPiA+ICBz
-dGF0aWMgdm9pZA0KPiA+ID4gIGludGVsX2RwX3NldHVwX3ZzY19zZHAoc3RydWN0IGludGVsX2Rw
-ICppbnRlbF9kcCwNCj4gPiA+ICAJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0
-ZSAqY3J0Y19zdGF0ZSwgZGlmZiAtLWdpdA0KPiA+ID4gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9k
-aXNwbGF5L2ludGVsX2RwLmgNCj4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p
-bnRlbF9kcC5oDQo+ID4gPiBpbmRleCAzZGExNjYwNTQ3ODguLjBkYzA5YTQ2M2VlMSAxMDA2NDQN
-Cj4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuaA0KPiA+
-ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5oDQo+ID4gPiBA
-QCAtMTE2LDYgKzExNiw5IEBAIHZvaWQgaW50ZWxfZHBfdnNjX2VuYWJsZShzdHJ1Y3QgaW50ZWxf
-ZHANCj4gPiA+ICppbnRlbF9kcCwgIHZvaWQgaW50ZWxfZHBfaGRyX21ldGFkYXRhX2VuYWJsZShz
-dHJ1Y3QgaW50ZWxfZHANCj4gPiA+ICppbnRlbF9kcCwNCj4gPiA+ICAJCQkJICBjb25zdCBzdHJ1
-Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwNCj4gPiA+ICAJCQkJICBjb25zdCBzdHJ1
-Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSk7DQo+ID4gPiArdm9pZCBpbnRlbF9k
-cF9zZXRfaW5mb2ZyYW1lcyhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwgYm9vbA0KPiA+
-ID4gZW5hYmxlLA0KPiA+ID4gKwkJCSAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUg
-KmNydGNfc3RhdGUsDQo+ID4gPiArCQkJICAgICBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9z
-dGF0ZQ0KPiA+ID4gKmNvbm5fc3RhdGUpOw0KPiA+ID4gIGJvb2wgaW50ZWxfZGlnaXRhbF9wb3J0
-X2Nvbm5lY3RlZChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2Rlcik7DQo+ID4gPg0KPiA+ID4g
-IHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGludGVsX2RwX3VudXNlZF9sYW5lX21hc2soaW50
-DQo+ID4gPiBsYW5lX2NvdW50KQ0KPiA+ID4gLS0NCj4gPiA+IDIuMjQuMQ0KPiA+ID4NCj4gPiA+
-IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQo+ID4gPiBk
-cmktZGV2ZWwgbWFpbGluZyBsaXN0DQo+ID4gPiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Au
-b3JnDQo+ID4gPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv
-L2RyaS1kZXZlbA0K
\ No newline at end of file
+
+
+> -----Original Message-----
+> From: Mun, Gwan-gyeong <gwan-gyeong.mun@intel.com>
+> Sent: Sunday, February 9, 2020 9:05 AM
+> To: Shankar, Uma <uma.shankar@intel.com>; intel-gfx@lists.freedesktop.org
+> Cc: dri-devel@lists.freedesktop.org; linux-fbdev@vger.kernel.org
+> Subject: Re: [PATCH v3 04/17] drm/i915/dp: Add writing of DP SDPs (Secondary Data
+> Packet)
+> 
+> On Wed, 2020-02-05 at 21:39 +0530, Shankar, Uma wrote:
+> > > -----Original Message-----
+> > > From: dri-devel <dri-devel-bounces@lists.freedesktop.org> On Behalf
+> > > Of Gwan- gyeong Mun
+> > > Sent: Tuesday, February 4, 2020 4:50 AM
+> > > To: intel-gfx@lists.freedesktop.org
+> > > Cc: linux-fbdev@vger.kernel.org; dri-devel@lists.freedesktop.org
+> > > Subject: [PATCH v3 04/17] drm/i915/dp: Add writing of DP SDPs
+> > > (Secondary Data
+> > > Packet)
+> >
+> > Drop things in (), not needed.
+> >
+> > > It adds routines that write DP VSC SDP and DP HDR Metadata Infoframe
+> > > SDP.
+> > > In order to pack DP VSC SDP, it adds intel_dp_vsc_sdp_pack()
+> > > function.
+> > > It follows DP 1.4a spec. [Table 2-116: VSC SDP Header Bytes] and
+> > > [Table 2-117: VSC SDP Payload for DB16 through DB18]
+> > >
+> > > In order to pack DP HDR Metadata Infoframe SDP, it adds
+> > > intel_dp_hdr_metadata_infoframe_sdp_pack() function.
+> > > And it follows DP 1.4a spec.
+> > > ([Table 2-125: INFOFRAME SDP v1.2 Header Bytes] and [Table 2-126:
+> > > INFOFRAME
+> > > SDP v1.2 Payload Data Bytes - DB0 through DB31]) and CTA-861-G spec.
+> > > [Table-42 Dynamic Range and Mastering InfoFrame].
+> > >
+> > > A machanism and a naming rule of intel_dp_set_infoframes() function
+> > > references
+> >
+> > Typo in mechanism.
+> >
+> > > intel_encoder->set_infoframes() of intel_hdmi.c .
+> > > VSC SDP is used for PSR and Pixel Encoding and Colorimetry Formats
+> > > cases.
+> > > Because PSR routine has its own routine of writing a VSC SDP, when
+> > > the PSR is enabled, intel_dp_set_infoframes() does not write a VSC
+> > > SDP.
+> > >
+> > > v3:
+> > >   - Explicitly disable unused DIPs (AVI, GCP, VS, SPD, DRM. They
+> > > will be
+> > >     used for HDMI), when intel_dp_set_infoframes() function will be
+> > > called.
+> > >   - Replace a structure name to drm_dp_vsc_sdp from
+> > > intel_dp_vsc_sdp.
+> > >
+> > > Signed-off-by: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
+> > > ---
+> > >  drivers/gpu/drm/i915/display/intel_dp.c | 194
+> > > ++++++++++++++++++++++++
+> > >  drivers/gpu/drm/i915/display/intel_dp.h |   3 +
+> > >  2 files changed, 197 insertions(+)
+> > >
+> > > diff --git a/drivers/gpu/drm/i915/display/intel_dp.c
+> > > b/drivers/gpu/drm/i915/display/intel_dp.c
+> > > index b265b5c599f2..dd7e5588001e 100644
+> > > --- a/drivers/gpu/drm/i915/display/intel_dp.c
+> > > +++ b/drivers/gpu/drm/i915/display/intel_dp.c
+> > > @@ -4731,6 +4731,200 @@ intel_dp_needs_vsc_sdp(const struct
+> > > intel_crtc_state *crtc_state,
+> > >  	return false;
+> > >  }
+> > >
+> > > +static ssize_t intel_dp_vsc_sdp_pack(const struct drm_dp_vsc_sdp
+> > > *vsc,
+> > > +				     struct dp_sdp *sdp, size_t size) {
+> > > +	size_t length = sizeof(struct dp_sdp);
+> > > +
+> > > +	if (size < length)
+> > > +		return -ENOSPC;
+> > > +
+> > > +	memset(sdp, 0, size);
+> > > +
+> > > +	/*
+> > > +	 * Prepare VSC Header for SU as per DP 1.4a spec, Table 2-119
+> > > +	 * VSC SDP Header Bytes
+> > > +	 */
+> > > +	sdp->sdp_header.HB0 = 0; /* Secondary-Data Packet ID = 0 */
+> > > +	sdp->sdp_header.HB1 = vsc->sdp_type; /* Secondary-data Packet
+> > > Type */
+> > > +	sdp->sdp_header.HB2 = vsc->revision; /* Revision Number */
+> > > +	sdp->sdp_header.HB3 = vsc->length; /* Number of Valid Data
+> > > Bytes */
+> > > +
+> > > +	/* VSC SDP Payload for DB16 through DB18 */
+> > > +	/* Pixel Encoding and Colorimetry Formats  */
+> > > +	sdp->db[16] = (vsc->colorspace & 0xf) << 4; /* DB16[7:4] */
+> > > +	sdp->db[16] |= vsc->colorimetry & 0xf; /* DB16[3:0] */
+> > > +
+> > > +	switch (vsc->bpc) {
+> > > +	case 8:
+> > > +		sdp->db[17] = 0x1; /* DB17[3:0] */
+> > > +		break;
+> > > +	case 10:
+> > > +		sdp->db[17] = 0x2;
+> > > +		break;
+> > > +	case 12:
+> > > +		sdp->db[17] = 0x3;
+> > > +		break;
+> > > +	case 16:
+> > > +		sdp->db[17] = 0x4;
+> > > +		break;
+> > > +	default:
+> > > +		MISSING_CASE(vsc->bpc);
+> >
+> > 6bpc is not handled here, add that as well.
+> >
+> Yes, I missed 6bpc case, I'll update it.
+> > > +		break;
+> > > +	}
+> > > +	/* Dynamic Range and Component Bit Depth */
+> > > +	if (vsc->dynamic_range == DP_DYNAMIC_RANGE_CTA)
+> > > +		sdp->db[17] |= 0x80;  /* DB17[7] */
+> > > +
+> > > +	/* Content Type */
+> > > +	sdp->db[18] = vsc->content_type & 0x7;
+> > > +
+> > > +	return length;
+> > > +}
+> > > +
+> > > +static ssize_t
+> > > +intel_dp_hdr_metadata_infoframe_sdp_pack(const struct
+> > > hdmi_drm_infoframe
+> > > *drm_infoframe,
+> > > +					 struct dp_sdp *sdp,
+> > > +					 size_t size)
+> > > +{
+> > > +	size_t length = sizeof(struct dp_sdp);
+> > > +	const int infoframe_size = HDMI_INFOFRAME_HEADER_SIZE +
+> > > HDMI_DRM_INFOFRAME_SIZE;
+> > > +	unsigned char buf[HDMI_INFOFRAME_HEADER_SIZE +
+> > > HDMI_DRM_INFOFRAME_SIZE];
+> > > +	ssize_t len;
+> > > +
+> > > +	if (size < length)
+> > > +		return -ENOSPC;
+> > > +
+> > > +	memset(sdp, 0, size);
+> > > +
+> > > +	len = hdmi_drm_infoframe_pack_only(drm_infoframe, buf,
+> > > sizeof(buf));
+> > > +	if (len < 0) {
+> > > +		DRM_DEBUG_KMS("buffer size is smaller than hdr metadata
+> > > infoframe\n");
+> > > +		return -ENOSPC;
+> > > +	}
+> > > +
+> > > +	if (len != infoframe_size) {
+> > > +		DRM_DEBUG_KMS("wrong static hdr metadata size\n");
+> > > +		return -ENOSPC;
+> > > +	}
+> > > +
+> > > +	/*
+> > > +	 * Set up the infoframe sdp packet for HDR static metadata.
+> > > +	 * Prepare VSC Header for SU as per DP 1.4a spec,
+> > > +	 * Table 2-100 and Table 2-101
+> > > +	 */
+> > > +
+> > > +	/* Secondary-Data Packet ID, 00h for non-Audio INFOFRAME */
+> > > +	sdp->sdp_header.HB0 = 0;
+> > > +	/*
+> > > +	 * Packet Type 80h + Non-audio INFOFRAME Type value
+> > > +	 * HDMI_INFOFRAME_TYPE_DRM: 0x87
+> > > +	 * - 80h + Non-audio INFOFRAME Type value
+> > > +	 * - InfoFrame Type: 0x07
+> > > +	 *    [CTA-861-G Table-42 Dynamic Range and Mastering
+> > > InfoFrame]
+> > > +	 */
+> > > +	sdp->sdp_header.HB1 = drm_infoframe->type;
+> > > +	/*
+> > > +	 * Least Significant Eight Bits of (Data Byte Count – 1)
+> > > +	 * infoframe_size - 1
+> > > +	 */
+> > > +	sdp->sdp_header.HB2 = 0x1D;
+> > > +	/* INFOFRAME SDP Version Number */
+> > > +	sdp->sdp_header.HB3 = (0x13 << 2);
+> > > +	/* CTA Header Byte 2 (INFOFRAME Version Number) */
+> > > +	sdp->db[0] = drm_infoframe->version;
+> > > +	/* CTA Header Byte 3 (Length of INFOFRAME):
+> > > HDMI_DRM_INFOFRAME_SIZE */
+> > > +	sdp->db[1] = drm_infoframe->length;
+> > > +	/*
+> > > +	 * Copy HDMI_DRM_INFOFRAME_SIZE size from a buffer after
+> >
+> > Comment Looks incomplete.
+> >
+> I missed some comments, I'll update it.
+> > > +	 */
+> > > +	BUILD_BUG_ON(sizeof(sdp->db) < HDMI_DRM_INFOFRAME_SIZE + 2);
+> > > +	memcpy(&sdp->db[2], &buf[HDMI_INFOFRAME_HEADER_SIZE],
+> > > +	       HDMI_DRM_INFOFRAME_SIZE);
+> > > +
+> > > +	/*
+> > > +	 * Size of DP infoframe sdp packet for HDR static metadata is
+> > > consist of
+> >
+> > Drop "is"
+> >
+> Includes this, I'll polish polish commit message and comments.
+> 
+> > > +	 * - DP SDP Header(struct dp_sdp_header): 4 bytes
+> > > +	 * - Two Data Blocks: 2 bytes
+> > > +	 *    CTA Header Byte2 (INFOFRAME Version Number)
+> > > +	 *    CTA Header Byte3 (Length of INFOFRAME)
+> > > +	 * - HDMI_DRM_INFOFRAME_SIZE: 26 bytes
+> > > +	 *
+> > > +	 * Prior to GEN11's GMP register size is identical to DP HDR
+> > > static metadata
+> > > +	 * infoframe size. But GEN11+ has larger than that size,
+> > > write_infoframe
+> > > +	 * will pad rest of the size.
+> > > +	 */
+> > > +	return sizeof(struct dp_sdp_header) + 2 +
+> > > HDMI_DRM_INFOFRAME_SIZE; }
+> > > +
+> > > +static void intel_write_dp_sdp(struct intel_encoder *encoder,
+> > > +			       const struct intel_crtc_state
+> > > *crtc_state,
+> > > +			       unsigned int type)
+> > > +{
+> > > +	struct intel_digital_port *intel_dig_port =
+> > > enc_to_dig_port(encoder);
+> > > +	struct dp_sdp sdp = {};
+> > > +	ssize_t len;
+> > > +
+> > > +	if ((crtc_state->infoframes.enable &
+> > > +	     intel_hdmi_infoframe_enable(type)) == 0)
+> > > +		return;
+> > > +
+> > > +	switch (type) {
+> > > +	case DP_SDP_VSC:
+> > > +		len = intel_dp_vsc_sdp_pack(&crtc_state-
+> > > >infoframes.vsc, &sdp,
+> > > +					    sizeof(sdp));
+> > > +		break;
+> > > +	case HDMI_PACKET_TYPE_GAMUT_METADATA:
+> > > +		len =
+> > > intel_dp_hdr_metadata_infoframe_sdp_pack(&crtc_state-
+> > > > infoframes.drm.drm,
+> > > +							       &sdp,
+> > > sizeof(sdp));
+> > > +		break;
+> > > +	default:
+> > > +		MISSING_CASE(type);
+> > > +		break;
+> > > +	}
+> > > +
+> > > +	if (WARN_ON(len < 0))
+> > > +		return;
+> > > +
+> > > +	intel_dig_port->write_infoframe(encoder, crtc_state, type,
+> > > &sdp, len);
+> > > +}
+> > > +
+> > > +void intel_dp_set_infoframes(struct intel_encoder *encoder,
+> > > +			     bool enable,
+> > > +			     const struct intel_crtc_state *crtc_state,
+> > > +			     const struct drm_connector_state
+> > > *conn_state) {
+> > > +	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
+> > > +	struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
+> > > +	i915_reg_t reg = HSW_TVIDEO_DIP_CTL(crtc_state-
+> > > >cpu_transcoder);
+> > > +	u32 dip_enable = VIDEO_DIP_ENABLE_AVI_HSW |
+> > > VIDEO_DIP_ENABLE_GCP_HSW |
+> > > +			 VIDEO_DIP_ENABLE_VS_HSW |
+> > > VIDEO_DIP_ENABLE_GMP_HSW |
+> > > +			 VIDEO_DIP_ENABLE_SPD_HSW |
+> > > VIDEO_DIP_ENABLE_DRM_GLK;
+> > > +	u32 val = I915_READ(reg);
+> > > +
+> > > +	/* TODO: Add DSC case (DIP_ENABLE_PPS) */
+> > > +	/* When PSR is enabled, this routine doesn't disable VSC DIP */
+> > > +	if (intel_psr_enabled(intel_dp))
+> > > +		val &= ~dip_enable;
+> > > +	else
+> > > +		val &= ~(dip_enable | VIDEO_DIP_ENABLE_VSC_HSW);
+> >
+> > dip_enable has VIDEO_DIP_ENABLE_VSC_HSW already in it. Please fix
+> > this.
+> >
+> Declaring of dip_enable does not include VIDEO_DIP_ENABLE_VSC_HSW.
+> therefore we need it here to disable VSC SDP DIP.
+
+Oh ok, Took VS for VSC. Scratch my earlier comment, change is correct.
+
+> > > +
+> > > +	if (!enable) {
+> > > +		I915_WRITE(reg, val);
+> > > +		POSTING_READ(reg);
+> > > +		return;
+> > > +	}
+> > > +
+> > > +	I915_WRITE(reg, val);
+> > > +	POSTING_READ(reg);
+> > > +
+> > > +	/* When PSR is enabled, VSC SDP is handled by PSR routine */
+> > > +	if (!intel_psr_enabled(intel_dp))
+> > > +		intel_write_dp_sdp(encoder, crtc_state, DP_SDP_VSC);
+> > > +
+> > > +	intel_write_dp_sdp(encoder, crtc_state,
+> > > +HDMI_PACKET_TYPE_GAMUT_METADATA); }
+> > > +
+> > >  static void
+> > >  intel_dp_setup_vsc_sdp(struct intel_dp *intel_dp,
+> > >  		       const struct intel_crtc_state *crtc_state, diff --git
+> > > a/drivers/gpu/drm/i915/display/intel_dp.h
+> > > b/drivers/gpu/drm/i915/display/intel_dp.h
+> > > index 3da166054788..0dc09a463ee1 100644
+> > > --- a/drivers/gpu/drm/i915/display/intel_dp.h
+> > > +++ b/drivers/gpu/drm/i915/display/intel_dp.h
+> > > @@ -116,6 +116,9 @@ void intel_dp_vsc_enable(struct intel_dp
+> > > *intel_dp,  void intel_dp_hdr_metadata_enable(struct intel_dp
+> > > *intel_dp,
+> > >  				  const struct intel_crtc_state *crtc_state,
+> > >  				  const struct drm_connector_state *conn_state);
+> > > +void intel_dp_set_infoframes(struct intel_encoder *encoder, bool
+> > > enable,
+> > > +			     const struct intel_crtc_state *crtc_state,
+> > > +			     const struct drm_connector_state
+> > > *conn_state);
+> > >  bool intel_digital_port_connected(struct intel_encoder *encoder);
+> > >
+> > >  static inline unsigned int intel_dp_unused_lane_mask(int
+> > > lane_count)
+> > > --
+> > > 2.24.1
+> > >
+> > > _______________________________________________
+> > > dri-devel mailing list
+> > > dri-devel@lists.freedesktop.org
+> > > https://lists.freedesktop.org/mailman/listinfo/dri-devel
+_______________________________________________
+dri-devel mailing list
+dri-devel@lists.freedesktop.org
+https://lists.freedesktop.org/mailman/listinfo/dri-devel
\ No newline at end of file
diff --git a/a/content_digest b/N1/content_digest
index cba0622..c46e2a0 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -35,220 +35,354 @@
   "b\0"
 ]
 [
-  "DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTXVuLCBHd2FuLWd5ZW9u\n",
-  "ZyA8Z3dhbi1neWVvbmcubXVuQGludGVsLmNvbT4NCj4gU2VudDogU3VuZGF5LCBGZWJydWFyeSA5\n",
-  "LCAyMDIwIDk6MDUgQU0NCj4gVG86IFNoYW5rYXIsIFVtYSA8dW1hLnNoYW5rYXJAaW50ZWwuY29t\n",
-  "PjsgaW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZw0KPiBDYzogZHJpLWRldmVsQGxpc3Rz\n",
-  "LmZyZWVkZXNrdG9wLm9yZzsgbGludXgtZmJkZXZAdmdlci5rZXJuZWwub3JnDQo+IFN1YmplY3Q6\n",
-  "IFJlOiBbUEFUQ0ggdjMgMDQvMTddIGRybS9pOTE1L2RwOiBBZGQgd3JpdGluZyBvZiBEUCBTRFBz\n",
-  "IChTZWNvbmRhcnkgRGF0YQ0KPiBQYWNrZXQpDQo+IA0KPiBPbiBXZWQsIDIwMjAtMDItMDUgYXQg\n",
-  "MjE6MzkgKzA1MzAsIFNoYW5rYXIsIFVtYSB3cm90ZToNCj4gPiA+IC0tLS0tT3JpZ2luYWwgTWVz\n",
-  "c2FnZS0tLS0tDQo+ID4gPiBGcm9tOiBkcmktZGV2ZWwgPGRyaS1kZXZlbC1ib3VuY2VzQGxpc3Rz\n",
-  "LmZyZWVkZXNrdG9wLm9yZz4gT24gQmVoYWxmDQo+ID4gPiBPZiBHd2FuLSBneWVvbmcgTXVuDQo+\n",
-  "ID4gPiBTZW50OiBUdWVzZGF5LCBGZWJydWFyeSA0LCAyMDIwIDQ6NTAgQU0NCj4gPiA+IFRvOiBp\n",
-  "bnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnDQo+ID4gPiBDYzogbGludXgtZmJkZXZAdmdl\n",
-  "ci5rZXJuZWwub3JnOyBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnDQo+ID4gPiBTdWJq\n",
-  "ZWN0OiBbUEFUQ0ggdjMgMDQvMTddIGRybS9pOTE1L2RwOiBBZGQgd3JpdGluZyBvZiBEUCBTRFBz\n",
-  "DQo+ID4gPiAoU2Vjb25kYXJ5IERhdGENCj4gPiA+IFBhY2tldCkNCj4gPg0KPiA+IERyb3AgdGhp\n",
-  "bmdzIGluICgpLCBub3QgbmVlZGVkLg0KPiA+DQo+ID4gPiBJdCBhZGRzIHJvdXRpbmVzIHRoYXQg\n",
-  "d3JpdGUgRFAgVlNDIFNEUCBhbmQgRFAgSERSIE1ldGFkYXRhIEluZm9mcmFtZQ0KPiA+ID4gU0RQ\n",
-  "Lg0KPiA+ID4gSW4gb3JkZXIgdG8gcGFjayBEUCBWU0MgU0RQLCBpdCBhZGRzIGludGVsX2RwX3Zz\n",
-  "Y19zZHBfcGFjaygpDQo+ID4gPiBmdW5jdGlvbi4NCj4gPiA+IEl0IGZvbGxvd3MgRFAgMS40YSBz\n",
-  "cGVjLiBbVGFibGUgMi0xMTY6IFZTQyBTRFAgSGVhZGVyIEJ5dGVzXSBhbmQNCj4gPiA+IFtUYWJs\n",
-  "ZSAyLTExNzogVlNDIFNEUCBQYXlsb2FkIGZvciBEQjE2IHRocm91Z2ggREIxOF0NCj4gPiA+DQo+\n",
-  "ID4gPiBJbiBvcmRlciB0byBwYWNrIERQIEhEUiBNZXRhZGF0YSBJbmZvZnJhbWUgU0RQLCBpdCBh\n",
-  "ZGRzDQo+ID4gPiBpbnRlbF9kcF9oZHJfbWV0YWRhdGFfaW5mb2ZyYW1lX3NkcF9wYWNrKCkgZnVu\n",
-  "Y3Rpb24uDQo+ID4gPiBBbmQgaXQgZm9sbG93cyBEUCAxLjRhIHNwZWMuDQo+ID4gPiAoW1RhYmxl\n",
-  "IDItMTI1OiBJTkZPRlJBTUUgU0RQIHYxLjIgSGVhZGVyIEJ5dGVzXSBhbmQgW1RhYmxlIDItMTI2\n",
-  "Og0KPiA+ID4gSU5GT0ZSQU1FDQo+ID4gPiBTRFAgdjEuMiBQYXlsb2FkIERhdGEgQnl0ZXMgLSBE\n",
-  "QjAgdGhyb3VnaCBEQjMxXSkgYW5kIENUQS04NjEtRyBzcGVjLg0KPiA+ID4gW1RhYmxlLTQyIER5\n",
-  "bmFtaWMgUmFuZ2UgYW5kIE1hc3RlcmluZyBJbmZvRnJhbWVdLg0KPiA+ID4NCj4gPiA+IEEgbWFj\n",
-  "aGFuaXNtIGFuZCBhIG5hbWluZyBydWxlIG9mIGludGVsX2RwX3NldF9pbmZvZnJhbWVzKCkgZnVu\n",
-  "Y3Rpb24NCj4gPiA+IHJlZmVyZW5jZXMNCj4gPg0KPiA+IFR5cG8gaW4gbWVjaGFuaXNtLg0KPiA+\n",
-  "DQo+ID4gPiBpbnRlbF9lbmNvZGVyLT5zZXRfaW5mb2ZyYW1lcygpIG9mIGludGVsX2hkbWkuYyAu\n",
-  "DQo+ID4gPiBWU0MgU0RQIGlzIHVzZWQgZm9yIFBTUiBhbmQgUGl4ZWwgRW5jb2RpbmcgYW5kIENv\n",
-  "bG9yaW1ldHJ5IEZvcm1hdHMNCj4gPiA+IGNhc2VzLg0KPiA+ID4gQmVjYXVzZSBQU1Igcm91dGlu\n",
-  "ZSBoYXMgaXRzIG93biByb3V0aW5lIG9mIHdyaXRpbmcgYSBWU0MgU0RQLCB3aGVuDQo+ID4gPiB0\n",
-  "aGUgUFNSIGlzIGVuYWJsZWQsIGludGVsX2RwX3NldF9pbmZvZnJhbWVzKCkgZG9lcyBub3Qgd3Jp\n",
-  "dGUgYSBWU0MNCj4gPiA+IFNEUC4NCj4gPiA+DQo+ID4gPiB2MzoNCj4gPiA+ICAgLSBFeHBsaWNp\n",
-  "dGx5IGRpc2FibGUgdW51c2VkIERJUHMgKEFWSSwgR0NQLCBWUywgU1BELCBEUk0uIFRoZXkNCj4g\n",
-  "PiA+IHdpbGwgYmUNCj4gPiA+ICAgICB1c2VkIGZvciBIRE1JKSwgd2hlbiBpbnRlbF9kcF9zZXRf\n",
-  "aW5mb2ZyYW1lcygpIGZ1bmN0aW9uIHdpbGwgYmUNCj4gPiA+IGNhbGxlZC4NCj4gPiA+ICAgLSBS\n",
-  "ZXBsYWNlIGEgc3RydWN0dXJlIG5hbWUgdG8gZHJtX2RwX3ZzY19zZHAgZnJvbQ0KPiA+ID4gaW50\n",
-  "ZWxfZHBfdnNjX3NkcC4NCj4gPiA+DQo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBHd2FuLWd5ZW9uZyBN\n",
-  "dW4gPGd3YW4tZ3llb25nLm11bkBpbnRlbC5jb20+DQo+ID4gPiAtLS0NCj4gPiA+ICBkcml2ZXJz\n",
-  "L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwLmMgfCAxOTQNCj4gPiA+ICsrKysrKysrKysr\n",
-  "KysrKysrKysrKysrKw0KPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf\n",
-  "ZHAuaCB8ICAgMyArDQo+ID4gPiAgMiBmaWxlcyBjaGFuZ2VkLCAxOTcgaW5zZXJ0aW9ucygrKQ0K\n",
-  "PiA+ID4NCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu\n",
-  "dGVsX2RwLmMNCj4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5j\n",
-  "DQo+ID4gPiBpbmRleCBiMjY1YjVjNTk5ZjIuLmRkN2U1NTg4MDAxZSAxMDA2NDQNCj4gPiA+IC0t\n",
-  "LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuYw0KPiA+ID4gKysrIGIv\n",
-  "ZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5jDQo+ID4gPiBAQCAtNDczMSw2\n",
-  "ICs0NzMxLDIwMCBAQCBpbnRlbF9kcF9uZWVkc192c2Nfc2RwKGNvbnN0IHN0cnVjdA0KPiA+ID4g\n",
-  "aW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwNCj4gPiA+ICAJcmV0dXJuIGZhbHNlOw0KPiA+\n",
-  "ID4gIH0NCj4gPiA+DQo+ID4gPiArc3RhdGljIHNzaXplX3QgaW50ZWxfZHBfdnNjX3NkcF9wYWNr\n",
-  "KGNvbnN0IHN0cnVjdCBkcm1fZHBfdnNjX3NkcA0KPiA+ID4gKnZzYywNCj4gPiA+ICsJCQkJICAg\n",
-  "ICBzdHJ1Y3QgZHBfc2RwICpzZHAsIHNpemVfdCBzaXplKSB7DQo+ID4gPiArCXNpemVfdCBsZW5n\n",
-  "dGggPSBzaXplb2Yoc3RydWN0IGRwX3NkcCk7DQo+ID4gPiArDQo+ID4gPiArCWlmIChzaXplIDwg\n",
-  "bGVuZ3RoKQ0KPiA+ID4gKwkJcmV0dXJuIC1FTk9TUEM7DQo+ID4gPiArDQo+ID4gPiArCW1lbXNl\n",
-  "dChzZHAsIDAsIHNpemUpOw0KPiA+ID4gKw0KPiA+ID4gKwkvKg0KPiA+ID4gKwkgKiBQcmVwYXJl\n",
-  "IFZTQyBIZWFkZXIgZm9yIFNVIGFzIHBlciBEUCAxLjRhIHNwZWMsIFRhYmxlIDItMTE5DQo+ID4g\n",
-  "PiArCSAqIFZTQyBTRFAgSGVhZGVyIEJ5dGVzDQo+ID4gPiArCSAqLw0KPiA+ID4gKwlzZHAtPnNk\n",
-  "cF9oZWFkZXIuSEIwID0gMDsgLyogU2Vjb25kYXJ5LURhdGEgUGFja2V0IElEID0gMCAqLw0KPiA+\n",
-  "ID4gKwlzZHAtPnNkcF9oZWFkZXIuSEIxID0gdnNjLT5zZHBfdHlwZTsgLyogU2Vjb25kYXJ5LWRh\n",
-  "dGEgUGFja2V0DQo+ID4gPiBUeXBlICovDQo+ID4gPiArCXNkcC0+c2RwX2hlYWRlci5IQjIgPSB2\n",
-  "c2MtPnJldmlzaW9uOyAvKiBSZXZpc2lvbiBOdW1iZXIgKi8NCj4gPiA+ICsJc2RwLT5zZHBfaGVh\n",
-  "ZGVyLkhCMyA9IHZzYy0+bGVuZ3RoOyAvKiBOdW1iZXIgb2YgVmFsaWQgRGF0YQ0KPiA+ID4gQnl0\n",
-  "ZXMgKi8NCj4gPiA+ICsNCj4gPiA+ICsJLyogVlNDIFNEUCBQYXlsb2FkIGZvciBEQjE2IHRocm91\n",
-  "Z2ggREIxOCAqLw0KPiA+ID4gKwkvKiBQaXhlbCBFbmNvZGluZyBhbmQgQ29sb3JpbWV0cnkgRm9y\n",
-  "bWF0cyAgKi8NCj4gPiA+ICsJc2RwLT5kYlsxNl0gPSAodnNjLT5jb2xvcnNwYWNlICYgMHhmKSA8\n",
-  "PCA0OyAvKiBEQjE2Wzc6NF0gKi8NCj4gPiA+ICsJc2RwLT5kYlsxNl0gfD0gdnNjLT5jb2xvcmlt\n",
-  "ZXRyeSAmIDB4ZjsgLyogREIxNlszOjBdICovDQo+ID4gPiArDQo+ID4gPiArCXN3aXRjaCAodnNj\n",
-  "LT5icGMpIHsNCj4gPiA+ICsJY2FzZSA4Og0KPiA+ID4gKwkJc2RwLT5kYlsxN10gPSAweDE7IC8q\n",
-  "IERCMTdbMzowXSAqLw0KPiA+ID4gKwkJYnJlYWs7DQo+ID4gPiArCWNhc2UgMTA6DQo+ID4gPiAr\n",
-  "CQlzZHAtPmRiWzE3XSA9IDB4MjsNCj4gPiA+ICsJCWJyZWFrOw0KPiA+ID4gKwljYXNlIDEyOg0K\n",
-  "PiA+ID4gKwkJc2RwLT5kYlsxN10gPSAweDM7DQo+ID4gPiArCQlicmVhazsNCj4gPiA+ICsJY2Fz\n",
-  "ZSAxNjoNCj4gPiA+ICsJCXNkcC0+ZGJbMTddID0gMHg0Ow0KPiA+ID4gKwkJYnJlYWs7DQo+ID4g\n",
-  "PiArCWRlZmF1bHQ6DQo+ID4gPiArCQlNSVNTSU5HX0NBU0UodnNjLT5icGMpOw0KPiA+DQo+ID4g\n",
-  "NmJwYyBpcyBub3QgaGFuZGxlZCBoZXJlLCBhZGQgdGhhdCBhcyB3ZWxsLg0KPiA+DQo+IFllcywg\n",
-  "SSBtaXNzZWQgNmJwYyBjYXNlLCBJJ2xsIHVwZGF0ZSBpdC4NCj4gPiA+ICsJCWJyZWFrOw0KPiA+\n",
-  "ID4gKwl9DQo+ID4gPiArCS8qIER5bmFtaWMgUmFuZ2UgYW5kIENvbXBvbmVudCBCaXQgRGVwdGgg\n",
-  "Ki8NCj4gPiA+ICsJaWYgKHZzYy0+ZHluYW1pY19yYW5nZSA9PSBEUF9EWU5BTUlDX1JBTkdFX0NU\n",
-  "QSkNCj4gPiA+ICsJCXNkcC0+ZGJbMTddIHw9IDB4ODA7ICAvKiBEQjE3WzddICovDQo+ID4gPiAr\n",
-  "DQo+ID4gPiArCS8qIENvbnRlbnQgVHlwZSAqLw0KPiA+ID4gKwlzZHAtPmRiWzE4XSA9IHZzYy0+\n",
-  "Y29udGVudF90eXBlICYgMHg3Ow0KPiA+ID4gKw0KPiA+ID4gKwlyZXR1cm4gbGVuZ3RoOw0KPiA+\n",
-  "ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgc3NpemVfdA0KPiA+ID4gK2ludGVsX2RwX2hk\n",
-  "cl9tZXRhZGF0YV9pbmZvZnJhbWVfc2RwX3BhY2soY29uc3Qgc3RydWN0DQo+ID4gPiBoZG1pX2Ry\n",
-  "bV9pbmZvZnJhbWUNCj4gPiA+ICpkcm1faW5mb2ZyYW1lLA0KPiA+ID4gKwkJCQkJIHN0cnVjdCBk\n",
-  "cF9zZHAgKnNkcCwNCj4gPiA+ICsJCQkJCSBzaXplX3Qgc2l6ZSkNCj4gPiA+ICt7DQo+ID4gPiAr\n",
-  "CXNpemVfdCBsZW5ndGggPSBzaXplb2Yoc3RydWN0IGRwX3NkcCk7DQo+ID4gPiArCWNvbnN0IGlu\n",
-  "dCBpbmZvZnJhbWVfc2l6ZSA9IEhETUlfSU5GT0ZSQU1FX0hFQURFUl9TSVpFICsNCj4gPiA+IEhE\n",
-  "TUlfRFJNX0lORk9GUkFNRV9TSVpFOw0KPiA+ID4gKwl1bnNpZ25lZCBjaGFyIGJ1ZltIRE1JX0lO\n",
-  "Rk9GUkFNRV9IRUFERVJfU0laRSArDQo+ID4gPiBIRE1JX0RSTV9JTkZPRlJBTUVfU0laRV07DQo+\n",
-  "ID4gPiArCXNzaXplX3QgbGVuOw0KPiA+ID4gKw0KPiA+ID4gKwlpZiAoc2l6ZSA8IGxlbmd0aCkN\n",
-  "Cj4gPiA+ICsJCXJldHVybiAtRU5PU1BDOw0KPiA+ID4gKw0KPiA+ID4gKwltZW1zZXQoc2RwLCAw\n",
-  "LCBzaXplKTsNCj4gPiA+ICsNCj4gPiA+ICsJbGVuID0gaGRtaV9kcm1faW5mb2ZyYW1lX3BhY2tf\n",
-  "b25seShkcm1faW5mb2ZyYW1lLCBidWYsDQo+ID4gPiBzaXplb2YoYnVmKSk7DQo+ID4gPiArCWlm\n",
-  "IChsZW4gPCAwKSB7DQo+ID4gPiArCQlEUk1fREVCVUdfS01TKCJidWZmZXIgc2l6ZSBpcyBzbWFs\n",
-  "bGVyIHRoYW4gaGRyIG1ldGFkYXRhDQo+ID4gPiBpbmZvZnJhbWVcbiIpOw0KPiA+ID4gKwkJcmV0\n",
-  "dXJuIC1FTk9TUEM7DQo+ID4gPiArCX0NCj4gPiA+ICsNCj4gPiA+ICsJaWYgKGxlbiAhPSBpbmZv\n",
-  "ZnJhbWVfc2l6ZSkgew0KPiA+ID4gKwkJRFJNX0RFQlVHX0tNUygid3Jvbmcgc3RhdGljIGhkciBt\n",
-  "ZXRhZGF0YSBzaXplXG4iKTsNCj4gPiA+ICsJCXJldHVybiAtRU5PU1BDOw0KPiA+ID4gKwl9DQo+\n",
-  "ID4gPiArDQo+ID4gPiArCS8qDQo+ID4gPiArCSAqIFNldCB1cCB0aGUgaW5mb2ZyYW1lIHNkcCBw\n",
-  "YWNrZXQgZm9yIEhEUiBzdGF0aWMgbWV0YWRhdGEuDQo+ID4gPiArCSAqIFByZXBhcmUgVlNDIEhl\n",
-  "YWRlciBmb3IgU1UgYXMgcGVyIERQIDEuNGEgc3BlYywNCj4gPiA+ICsJICogVGFibGUgMi0xMDAg\n",
-  "YW5kIFRhYmxlIDItMTAxDQo+ID4gPiArCSAqLw0KPiA+ID4gKw0KPiA+ID4gKwkvKiBTZWNvbmRh\n",
-  "cnktRGF0YSBQYWNrZXQgSUQsIDAwaCBmb3Igbm9uLUF1ZGlvIElORk9GUkFNRSAqLw0KPiA+ID4g\n",
-  "KwlzZHAtPnNkcF9oZWFkZXIuSEIwID0gMDsNCj4gPiA+ICsJLyoNCj4gPiA+ICsJICogUGFja2V0\n",
-  "IFR5cGUgODBoICsgTm9uLWF1ZGlvIElORk9GUkFNRSBUeXBlIHZhbHVlDQo+ID4gPiArCSAqIEhE\n",
-  "TUlfSU5GT0ZSQU1FX1RZUEVfRFJNOiAweDg3DQo+ID4gPiArCSAqIC0gODBoICsgTm9uLWF1ZGlv\n",
-  "IElORk9GUkFNRSBUeXBlIHZhbHVlDQo+ID4gPiArCSAqIC0gSW5mb0ZyYW1lIFR5cGU6IDB4MDcN\n",
-  "Cj4gPiA+ICsJICogICAgW0NUQS04NjEtRyBUYWJsZS00MiBEeW5hbWljIFJhbmdlIGFuZCBNYXN0\n",
-  "ZXJpbmcNCj4gPiA+IEluZm9GcmFtZV0NCj4gPiA+ICsJICovDQo+ID4gPiArCXNkcC0+c2RwX2hl\n",
-  "YWRlci5IQjEgPSBkcm1faW5mb2ZyYW1lLT50eXBlOw0KPiA+ID4gKwkvKg0KPiA+ID4gKwkgKiBM\n",
-  "ZWFzdCBTaWduaWZpY2FudCBFaWdodCBCaXRzIG9mIChEYXRhIEJ5dGUgQ291bnQg4oCTIDEpDQo+\n",
-  "ID4gPiArCSAqIGluZm9mcmFtZV9zaXplIC0gMQ0KPiA+ID4gKwkgKi8NCj4gPiA+ICsJc2RwLT5z\n",
-  "ZHBfaGVhZGVyLkhCMiA9IDB4MUQ7DQo+ID4gPiArCS8qIElORk9GUkFNRSBTRFAgVmVyc2lvbiBO\n",
-  "dW1iZXIgKi8NCj4gPiA+ICsJc2RwLT5zZHBfaGVhZGVyLkhCMyA9ICgweDEzIDw8IDIpOw0KPiA+\n",
-  "ID4gKwkvKiBDVEEgSGVhZGVyIEJ5dGUgMiAoSU5GT0ZSQU1FIFZlcnNpb24gTnVtYmVyKSAqLw0K\n",
-  "PiA+ID4gKwlzZHAtPmRiWzBdID0gZHJtX2luZm9mcmFtZS0+dmVyc2lvbjsNCj4gPiA+ICsJLyog\n",
-  "Q1RBIEhlYWRlciBCeXRlIDMgKExlbmd0aCBvZiBJTkZPRlJBTUUpOg0KPiA+ID4gSERNSV9EUk1f\n",
-  "SU5GT0ZSQU1FX1NJWkUgKi8NCj4gPiA+ICsJc2RwLT5kYlsxXSA9IGRybV9pbmZvZnJhbWUtPmxl\n",
-  "bmd0aDsNCj4gPiA+ICsJLyoNCj4gPiA+ICsJICogQ29weSBIRE1JX0RSTV9JTkZPRlJBTUVfU0la\n",
-  "RSBzaXplIGZyb20gYSBidWZmZXIgYWZ0ZXINCj4gPg0KPiA+IENvbW1lbnQgTG9va3MgaW5jb21w\n",
-  "bGV0ZS4NCj4gPg0KPiBJIG1pc3NlZCBzb21lIGNvbW1lbnRzLCBJJ2xsIHVwZGF0ZSBpdC4NCj4g\n",
-  "PiA+ICsJICovDQo+ID4gPiArCUJVSUxEX0JVR19PTihzaXplb2Yoc2RwLT5kYikgPCBIRE1JX0RS\n",
-  "TV9JTkZPRlJBTUVfU0laRSArIDIpOw0KPiA+ID4gKwltZW1jcHkoJnNkcC0+ZGJbMl0sICZidWZb\n",
-  "SERNSV9JTkZPRlJBTUVfSEVBREVSX1NJWkVdLA0KPiA+ID4gKwkgICAgICAgSERNSV9EUk1fSU5G\n",
-  "T0ZSQU1FX1NJWkUpOw0KPiA+ID4gKw0KPiA+ID4gKwkvKg0KPiA+ID4gKwkgKiBTaXplIG9mIERQ\n",
-  "IGluZm9mcmFtZSBzZHAgcGFja2V0IGZvciBIRFIgc3RhdGljIG1ldGFkYXRhIGlzDQo+ID4gPiBj\n",
-  "b25zaXN0IG9mDQo+ID4NCj4gPiBEcm9wICJpcyINCj4gPg0KPiBJbmNsdWRlcyB0aGlzLCBJJ2xs\n",
-  "IHBvbGlzaCBwb2xpc2ggY29tbWl0IG1lc3NhZ2UgYW5kIGNvbW1lbnRzLg0KPiANCj4gPiA+ICsJ\n",
-  "ICogLSBEUCBTRFAgSGVhZGVyKHN0cnVjdCBkcF9zZHBfaGVhZGVyKTogNCBieXRlcw0KPiA+ID4g\n",
-  "KwkgKiAtIFR3byBEYXRhIEJsb2NrczogMiBieXRlcw0KPiA+ID4gKwkgKiAgICBDVEEgSGVhZGVy\n",
-  "IEJ5dGUyIChJTkZPRlJBTUUgVmVyc2lvbiBOdW1iZXIpDQo+ID4gPiArCSAqICAgIENUQSBIZWFk\n",
-  "ZXIgQnl0ZTMgKExlbmd0aCBvZiBJTkZPRlJBTUUpDQo+ID4gPiArCSAqIC0gSERNSV9EUk1fSU5G\n",
-  "T0ZSQU1FX1NJWkU6IDI2IGJ5dGVzDQo+ID4gPiArCSAqDQo+ID4gPiArCSAqIFByaW9yIHRvIEdF\n",
-  "TjExJ3MgR01QIHJlZ2lzdGVyIHNpemUgaXMgaWRlbnRpY2FsIHRvIERQIEhEUg0KPiA+ID4gc3Rh\n",
-  "dGljIG1ldGFkYXRhDQo+ID4gPiArCSAqIGluZm9mcmFtZSBzaXplLiBCdXQgR0VOMTErIGhhcyBs\n",
-  "YXJnZXIgdGhhbiB0aGF0IHNpemUsDQo+ID4gPiB3cml0ZV9pbmZvZnJhbWUNCj4gPiA+ICsJICog\n",
-  "d2lsbCBwYWQgcmVzdCBvZiB0aGUgc2l6ZS4NCj4gPiA+ICsJICovDQo+ID4gPiArCXJldHVybiBz\n",
-  "aXplb2Yoc3RydWN0IGRwX3NkcF9oZWFkZXIpICsgMiArDQo+ID4gPiBIRE1JX0RSTV9JTkZPRlJB\n",
-  "TUVfU0laRTsgfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyB2b2lkIGludGVsX3dyaXRlX2RwX3Nk\n",
-  "cChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwNCj4gPiA+ICsJCQkgICAgICAgY29uc3Qg\n",
-  "c3RydWN0IGludGVsX2NydGNfc3RhdGUNCj4gPiA+ICpjcnRjX3N0YXRlLA0KPiA+ID4gKwkJCSAg\n",
-  "ICAgICB1bnNpZ25lZCBpbnQgdHlwZSkNCj4gPiA+ICt7DQo+ID4gPiArCXN0cnVjdCBpbnRlbF9k\n",
-  "aWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0ID0NCj4gPiA+IGVuY190b19kaWdfcG9ydChlbmNv\n",
-  "ZGVyKTsNCj4gPiA+ICsJc3RydWN0IGRwX3NkcCBzZHAgPSB7fTsNCj4gPiA+ICsJc3NpemVfdCBs\n",
-  "ZW47DQo+ID4gPiArDQo+ID4gPiArCWlmICgoY3J0Y19zdGF0ZS0+aW5mb2ZyYW1lcy5lbmFibGUg\n",
-  "Jg0KPiA+ID4gKwkgICAgIGludGVsX2hkbWlfaW5mb2ZyYW1lX2VuYWJsZSh0eXBlKSkgPT0gMCkN\n",
-  "Cj4gPiA+ICsJCXJldHVybjsNCj4gPiA+ICsNCj4gPiA+ICsJc3dpdGNoICh0eXBlKSB7DQo+ID4g\n",
-  "PiArCWNhc2UgRFBfU0RQX1ZTQzoNCj4gPiA+ICsJCWxlbiA9IGludGVsX2RwX3ZzY19zZHBfcGFj\n",
-  "aygmY3J0Y19zdGF0ZS0NCj4gPiA+ID5pbmZvZnJhbWVzLnZzYywgJnNkcCwNCj4gPiA+ICsJCQkJ\n",
-  "CSAgICBzaXplb2Yoc2RwKSk7DQo+ID4gPiArCQlicmVhazsNCj4gPiA+ICsJY2FzZSBIRE1JX1BB\n",
-  "Q0tFVF9UWVBFX0dBTVVUX01FVEFEQVRBOg0KPiA+ID4gKwkJbGVuID0NCj4gPiA+IGludGVsX2Rw\n",
-  "X2hkcl9tZXRhZGF0YV9pbmZvZnJhbWVfc2RwX3BhY2soJmNydGNfc3RhdGUtDQo+ID4gPiA+IGlu\n",
-  "Zm9mcmFtZXMuZHJtLmRybSwNCj4gPiA+ICsJCQkJCQkJICAgICAgICZzZHAsDQo+ID4gPiBzaXpl\n",
-  "b2Yoc2RwKSk7DQo+ID4gPiArCQlicmVhazsNCj4gPiA+ICsJZGVmYXVsdDoNCj4gPiA+ICsJCU1J\n",
-  "U1NJTkdfQ0FTRSh0eXBlKTsNCj4gPiA+ICsJCWJyZWFrOw0KPiA+ID4gKwl9DQo+ID4gPiArDQo+\n",
-  "ID4gPiArCWlmIChXQVJOX09OKGxlbiA8IDApKQ0KPiA+ID4gKwkJcmV0dXJuOw0KPiA+ID4gKw0K\n",
-  "PiA+ID4gKwlpbnRlbF9kaWdfcG9ydC0+d3JpdGVfaW5mb2ZyYW1lKGVuY29kZXIsIGNydGNfc3Rh\n",
-  "dGUsIHR5cGUsDQo+ID4gPiAmc2RwLCBsZW4pOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICt2\n",
-  "b2lkIGludGVsX2RwX3NldF9pbmZvZnJhbWVzKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVy\n",
-  "LA0KPiA+ID4gKwkJCSAgICAgYm9vbCBlbmFibGUsDQo+ID4gPiArCQkJICAgICBjb25zdCBzdHJ1\n",
-  "Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwNCj4gPiA+ICsJCQkgICAgIGNvbnN0IHN0\n",
-  "cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlDQo+ID4gPiAqY29ubl9zdGF0ZSkgew0KPiA+ID4gKwlz\n",
-  "dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGVuY29kZXItPmJhc2Uu\n",
-  "ZGV2KTsNCj4gPiA+ICsJc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGVuY190b19pbnRlbF9k\n",
-  "cChlbmNvZGVyKTsNCj4gPiA+ICsJaTkxNV9yZWdfdCByZWcgPSBIU1dfVFZJREVPX0RJUF9DVEwo\n",
-  "Y3J0Y19zdGF0ZS0NCj4gPiA+ID5jcHVfdHJhbnNjb2Rlcik7DQo+ID4gPiArCXUzMiBkaXBfZW5h\n",
-  "YmxlID0gVklERU9fRElQX0VOQUJMRV9BVklfSFNXIHwNCj4gPiA+IFZJREVPX0RJUF9FTkFCTEVf\n",
-  "R0NQX0hTVyB8DQo+ID4gPiArCQkJIFZJREVPX0RJUF9FTkFCTEVfVlNfSFNXIHwNCj4gPiA+IFZJ\n",
-  "REVPX0RJUF9FTkFCTEVfR01QX0hTVyB8DQo+ID4gPiArCQkJIFZJREVPX0RJUF9FTkFCTEVfU1BE\n",
-  "X0hTVyB8DQo+ID4gPiBWSURFT19ESVBfRU5BQkxFX0RSTV9HTEs7DQo+ID4gPiArCXUzMiB2YWwg\n",
-  "PSBJOTE1X1JFQUQocmVnKTsNCj4gPiA+ICsNCj4gPiA+ICsJLyogVE9ETzogQWRkIERTQyBjYXNl\n",
-  "IChESVBfRU5BQkxFX1BQUykgKi8NCj4gPiA+ICsJLyogV2hlbiBQU1IgaXMgZW5hYmxlZCwgdGhp\n",
-  "cyByb3V0aW5lIGRvZXNuJ3QgZGlzYWJsZSBWU0MgRElQICovDQo+ID4gPiArCWlmIChpbnRlbF9w\n",
-  "c3JfZW5hYmxlZChpbnRlbF9kcCkpDQo+ID4gPiArCQl2YWwgJj0gfmRpcF9lbmFibGU7DQo+ID4g\n",
-  "PiArCWVsc2UNCj4gPiA+ICsJCXZhbCAmPSB+KGRpcF9lbmFibGUgfCBWSURFT19ESVBfRU5BQkxF\n",
-  "X1ZTQ19IU1cpOw0KPiA+DQo+ID4gZGlwX2VuYWJsZSBoYXMgVklERU9fRElQX0VOQUJMRV9WU0Nf\n",
-  "SFNXIGFscmVhZHkgaW4gaXQuIFBsZWFzZSBmaXgNCj4gPiB0aGlzLg0KPiA+DQo+IERlY2xhcmlu\n",
-  "ZyBvZiBkaXBfZW5hYmxlIGRvZXMgbm90IGluY2x1ZGUgVklERU9fRElQX0VOQUJMRV9WU0NfSFNX\n",
-  "Lg0KPiB0aGVyZWZvcmUgd2UgbmVlZCBpdCBoZXJlIHRvIGRpc2FibGUgVlNDIFNEUCBESVAuDQoN\n",
-  "Ck9oIG9rLCBUb29rIFZTIGZvciBWU0MuIFNjcmF0Y2ggbXkgZWFybGllciBjb21tZW50LCBjaGFu\n",
-  "Z2UgaXMgY29ycmVjdC4NCg0KPiA+ID4gKw0KPiA+ID4gKwlpZiAoIWVuYWJsZSkgew0KPiA+ID4g\n",
-  "KwkJSTkxNV9XUklURShyZWcsIHZhbCk7DQo+ID4gPiArCQlQT1NUSU5HX1JFQUQocmVnKTsNCj4g\n",
-  "PiA+ICsJCXJldHVybjsNCj4gPiA+ICsJfQ0KPiA+ID4gKw0KPiA+ID4gKwlJOTE1X1dSSVRFKHJl\n",
-  "ZywgdmFsKTsNCj4gPiA+ICsJUE9TVElOR19SRUFEKHJlZyk7DQo+ID4gPiArDQo+ID4gPiArCS8q\n",
-  "IFdoZW4gUFNSIGlzIGVuYWJsZWQsIFZTQyBTRFAgaXMgaGFuZGxlZCBieSBQU1Igcm91dGluZSAq\n",
-  "Lw0KPiA+ID4gKwlpZiAoIWludGVsX3Bzcl9lbmFibGVkKGludGVsX2RwKSkNCj4gPiA+ICsJCWlu\n",
-  "dGVsX3dyaXRlX2RwX3NkcChlbmNvZGVyLCBjcnRjX3N0YXRlLCBEUF9TRFBfVlNDKTsNCj4gPiA+\n",
-  "ICsNCj4gPiA+ICsJaW50ZWxfd3JpdGVfZHBfc2RwKGVuY29kZXIsIGNydGNfc3RhdGUsDQo+ID4g\n",
-  "PiArSERNSV9QQUNLRVRfVFlQRV9HQU1VVF9NRVRBREFUQSk7IH0NCj4gPiA+ICsNCj4gPiA+ICBz\n",
-  "dGF0aWMgdm9pZA0KPiA+ID4gIGludGVsX2RwX3NldHVwX3ZzY19zZHAoc3RydWN0IGludGVsX2Rw\n",
-  "ICppbnRlbF9kcCwNCj4gPiA+ICAJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0\n",
-  "ZSAqY3J0Y19zdGF0ZSwgZGlmZiAtLWdpdA0KPiA+ID4gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9k\n",
-  "aXNwbGF5L2ludGVsX2RwLmgNCj4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p\n",
-  "bnRlbF9kcC5oDQo+ID4gPiBpbmRleCAzZGExNjYwNTQ3ODguLjBkYzA5YTQ2M2VlMSAxMDA2NDQN\n",
-  "Cj4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuaA0KPiA+\n",
-  "ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5oDQo+ID4gPiBA\n",
-  "QCAtMTE2LDYgKzExNiw5IEBAIHZvaWQgaW50ZWxfZHBfdnNjX2VuYWJsZShzdHJ1Y3QgaW50ZWxf\n",
-  "ZHANCj4gPiA+ICppbnRlbF9kcCwgIHZvaWQgaW50ZWxfZHBfaGRyX21ldGFkYXRhX2VuYWJsZShz\n",
-  "dHJ1Y3QgaW50ZWxfZHANCj4gPiA+ICppbnRlbF9kcCwNCj4gPiA+ICAJCQkJICBjb25zdCBzdHJ1\n",
-  "Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwNCj4gPiA+ICAJCQkJICBjb25zdCBzdHJ1\n",
-  "Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSk7DQo+ID4gPiArdm9pZCBpbnRlbF9k\n",
-  "cF9zZXRfaW5mb2ZyYW1lcyhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwgYm9vbA0KPiA+\n",
-  "ID4gZW5hYmxlLA0KPiA+ID4gKwkJCSAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUg\n",
-  "KmNydGNfc3RhdGUsDQo+ID4gPiArCQkJICAgICBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9z\n",
-  "dGF0ZQ0KPiA+ID4gKmNvbm5fc3RhdGUpOw0KPiA+ID4gIGJvb2wgaW50ZWxfZGlnaXRhbF9wb3J0\n",
-  "X2Nvbm5lY3RlZChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2Rlcik7DQo+ID4gPg0KPiA+ID4g\n",
-  "IHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGludGVsX2RwX3VudXNlZF9sYW5lX21hc2soaW50\n",
-  "DQo+ID4gPiBsYW5lX2NvdW50KQ0KPiA+ID4gLS0NCj4gPiA+IDIuMjQuMQ0KPiA+ID4NCj4gPiA+\n",
-  "IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQo+ID4gPiBk\n",
-  "cmktZGV2ZWwgbWFpbGluZyBsaXN0DQo+ID4gPiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Au\n",
-  "b3JnDQo+ID4gPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv\n",
-  "L2RyaS1kZXZlbA0K"
+  "\n",
+  "\n",
+  "> -----Original Message-----\n",
+  "> From: Mun, Gwan-gyeong <gwan-gyeong.mun\@intel.com>\n",
+  "> Sent: Sunday, February 9, 2020 9:05 AM\n",
+  "> To: Shankar, Uma <uma.shankar\@intel.com>; intel-gfx\@lists.freedesktop.org\n",
+  "> Cc: dri-devel\@lists.freedesktop.org; linux-fbdev\@vger.kernel.org\n",
+  "> Subject: Re: [PATCH v3 04/17] drm/i915/dp: Add writing of DP SDPs (Secondary Data\n",
+  "> Packet)\n",
+  "> \n",
+  "> On Wed, 2020-02-05 at 21:39 +0530, Shankar, Uma wrote:\n",
+  "> > > -----Original Message-----\n",
+  "> > > From: dri-devel <dri-devel-bounces\@lists.freedesktop.org> On Behalf\n",
+  "> > > Of Gwan- gyeong Mun\n",
+  "> > > Sent: Tuesday, February 4, 2020 4:50 AM\n",
+  "> > > To: intel-gfx\@lists.freedesktop.org\n",
+  "> > > Cc: linux-fbdev\@vger.kernel.org; dri-devel\@lists.freedesktop.org\n",
+  "> > > Subject: [PATCH v3 04/17] drm/i915/dp: Add writing of DP SDPs\n",
+  "> > > (Secondary Data\n",
+  "> > > Packet)\n",
+  "> >\n",
+  "> > Drop things in (), not needed.\n",
+  "> >\n",
+  "> > > It adds routines that write DP VSC SDP and DP HDR Metadata Infoframe\n",
+  "> > > SDP.\n",
+  "> > > In order to pack DP VSC SDP, it adds intel_dp_vsc_sdp_pack()\n",
+  "> > > function.\n",
+  "> > > It follows DP 1.4a spec. [Table 2-116: VSC SDP Header Bytes] and\n",
+  "> > > [Table 2-117: VSC SDP Payload for DB16 through DB18]\n",
+  "> > >\n",
+  "> > > In order to pack DP HDR Metadata Infoframe SDP, it adds\n",
+  "> > > intel_dp_hdr_metadata_infoframe_sdp_pack() function.\n",
+  "> > > And it follows DP 1.4a spec.\n",
+  "> > > ([Table 2-125: INFOFRAME SDP v1.2 Header Bytes] and [Table 2-126:\n",
+  "> > > INFOFRAME\n",
+  "> > > SDP v1.2 Payload Data Bytes - DB0 through DB31]) and CTA-861-G spec.\n",
+  "> > > [Table-42 Dynamic Range and Mastering InfoFrame].\n",
+  "> > >\n",
+  "> > > A machanism and a naming rule of intel_dp_set_infoframes() function\n",
+  "> > > references\n",
+  "> >\n",
+  "> > Typo in mechanism.\n",
+  "> >\n",
+  "> > > intel_encoder->set_infoframes() of intel_hdmi.c .\n",
+  "> > > VSC SDP is used for PSR and Pixel Encoding and Colorimetry Formats\n",
+  "> > > cases.\n",
+  "> > > Because PSR routine has its own routine of writing a VSC SDP, when\n",
+  "> > > the PSR is enabled, intel_dp_set_infoframes() does not write a VSC\n",
+  "> > > SDP.\n",
+  "> > >\n",
+  "> > > v3:\n",
+  "> > >   - Explicitly disable unused DIPs (AVI, GCP, VS, SPD, DRM. They\n",
+  "> > > will be\n",
+  "> > >     used for HDMI), when intel_dp_set_infoframes() function will be\n",
+  "> > > called.\n",
+  "> > >   - Replace a structure name to drm_dp_vsc_sdp from\n",
+  "> > > intel_dp_vsc_sdp.\n",
+  "> > >\n",
+  "> > > Signed-off-by: Gwan-gyeong Mun <gwan-gyeong.mun\@intel.com>\n",
+  "> > > ---\n",
+  "> > >  drivers/gpu/drm/i915/display/intel_dp.c | 194\n",
+  "> > > ++++++++++++++++++++++++\n",
+  "> > >  drivers/gpu/drm/i915/display/intel_dp.h |   3 +\n",
+  "> > >  2 files changed, 197 insertions(+)\n",
+  "> > >\n",
+  "> > > diff --git a/drivers/gpu/drm/i915/display/intel_dp.c\n",
+  "> > > b/drivers/gpu/drm/i915/display/intel_dp.c\n",
+  "> > > index b265b5c599f2..dd7e5588001e 100644\n",
+  "> > > --- a/drivers/gpu/drm/i915/display/intel_dp.c\n",
+  "> > > +++ b/drivers/gpu/drm/i915/display/intel_dp.c\n",
+  "> > > \@\@ -4731,6 +4731,200 \@\@ intel_dp_needs_vsc_sdp(const struct\n",
+  "> > > intel_crtc_state *crtc_state,\n",
+  "> > >  \treturn false;\n",
+  "> > >  }\n",
+  "> > >\n",
+  "> > > +static ssize_t intel_dp_vsc_sdp_pack(const struct drm_dp_vsc_sdp\n",
+  "> > > *vsc,\n",
+  "> > > +\t\t\t\t     struct dp_sdp *sdp, size_t size) {\n",
+  "> > > +\tsize_t length = sizeof(struct dp_sdp);\n",
+  "> > > +\n",
+  "> > > +\tif (size < length)\n",
+  "> > > +\t\treturn -ENOSPC;\n",
+  "> > > +\n",
+  "> > > +\tmemset(sdp, 0, size);\n",
+  "> > > +\n",
+  "> > > +\t/*\n",
+  "> > > +\t * Prepare VSC Header for SU as per DP 1.4a spec, Table 2-119\n",
+  "> > > +\t * VSC SDP Header Bytes\n",
+  "> > > +\t */\n",
+  "> > > +\tsdp->sdp_header.HB0 = 0; /* Secondary-Data Packet ID = 0 */\n",
+  "> > > +\tsdp->sdp_header.HB1 = vsc->sdp_type; /* Secondary-data Packet\n",
+  "> > > Type */\n",
+  "> > > +\tsdp->sdp_header.HB2 = vsc->revision; /* Revision Number */\n",
+  "> > > +\tsdp->sdp_header.HB3 = vsc->length; /* Number of Valid Data\n",
+  "> > > Bytes */\n",
+  "> > > +\n",
+  "> > > +\t/* VSC SDP Payload for DB16 through DB18 */\n",
+  "> > > +\t/* Pixel Encoding and Colorimetry Formats  */\n",
+  "> > > +\tsdp->db[16] = (vsc->colorspace & 0xf) << 4; /* DB16[7:4] */\n",
+  "> > > +\tsdp->db[16] |= vsc->colorimetry & 0xf; /* DB16[3:0] */\n",
+  "> > > +\n",
+  "> > > +\tswitch (vsc->bpc) {\n",
+  "> > > +\tcase 8:\n",
+  "> > > +\t\tsdp->db[17] = 0x1; /* DB17[3:0] */\n",
+  "> > > +\t\tbreak;\n",
+  "> > > +\tcase 10:\n",
+  "> > > +\t\tsdp->db[17] = 0x2;\n",
+  "> > > +\t\tbreak;\n",
+  "> > > +\tcase 12:\n",
+  "> > > +\t\tsdp->db[17] = 0x3;\n",
+  "> > > +\t\tbreak;\n",
+  "> > > +\tcase 16:\n",
+  "> > > +\t\tsdp->db[17] = 0x4;\n",
+  "> > > +\t\tbreak;\n",
+  "> > > +\tdefault:\n",
+  "> > > +\t\tMISSING_CASE(vsc->bpc);\n",
+  "> >\n",
+  "> > 6bpc is not handled here, add that as well.\n",
+  "> >\n",
+  "> Yes, I missed 6bpc case, I'll update it.\n",
+  "> > > +\t\tbreak;\n",
+  "> > > +\t}\n",
+  "> > > +\t/* Dynamic Range and Component Bit Depth */\n",
+  "> > > +\tif (vsc->dynamic_range == DP_DYNAMIC_RANGE_CTA)\n",
+  "> > > +\t\tsdp->db[17] |= 0x80;  /* DB17[7] */\n",
+  "> > > +\n",
+  "> > > +\t/* Content Type */\n",
+  "> > > +\tsdp->db[18] = vsc->content_type & 0x7;\n",
+  "> > > +\n",
+  "> > > +\treturn length;\n",
+  "> > > +}\n",
+  "> > > +\n",
+  "> > > +static ssize_t\n",
+  "> > > +intel_dp_hdr_metadata_infoframe_sdp_pack(const struct\n",
+  "> > > hdmi_drm_infoframe\n",
+  "> > > *drm_infoframe,\n",
+  "> > > +\t\t\t\t\t struct dp_sdp *sdp,\n",
+  "> > > +\t\t\t\t\t size_t size)\n",
+  "> > > +{\n",
+  "> > > +\tsize_t length = sizeof(struct dp_sdp);\n",
+  "> > > +\tconst int infoframe_size = HDMI_INFOFRAME_HEADER_SIZE +\n",
+  "> > > HDMI_DRM_INFOFRAME_SIZE;\n",
+  "> > > +\tunsigned char buf[HDMI_INFOFRAME_HEADER_SIZE +\n",
+  "> > > HDMI_DRM_INFOFRAME_SIZE];\n",
+  "> > > +\tssize_t len;\n",
+  "> > > +\n",
+  "> > > +\tif (size < length)\n",
+  "> > > +\t\treturn -ENOSPC;\n",
+  "> > > +\n",
+  "> > > +\tmemset(sdp, 0, size);\n",
+  "> > > +\n",
+  "> > > +\tlen = hdmi_drm_infoframe_pack_only(drm_infoframe, buf,\n",
+  "> > > sizeof(buf));\n",
+  "> > > +\tif (len < 0) {\n",
+  "> > > +\t\tDRM_DEBUG_KMS(\"buffer size is smaller than hdr metadata\n",
+  "> > > infoframe\\n\");\n",
+  "> > > +\t\treturn -ENOSPC;\n",
+  "> > > +\t}\n",
+  "> > > +\n",
+  "> > > +\tif (len != infoframe_size) {\n",
+  "> > > +\t\tDRM_DEBUG_KMS(\"wrong static hdr metadata size\\n\");\n",
+  "> > > +\t\treturn -ENOSPC;\n",
+  "> > > +\t}\n",
+  "> > > +\n",
+  "> > > +\t/*\n",
+  "> > > +\t * Set up the infoframe sdp packet for HDR static metadata.\n",
+  "> > > +\t * Prepare VSC Header for SU as per DP 1.4a spec,\n",
+  "> > > +\t * Table 2-100 and Table 2-101\n",
+  "> > > +\t */\n",
+  "> > > +\n",
+  "> > > +\t/* Secondary-Data Packet ID, 00h for non-Audio INFOFRAME */\n",
+  "> > > +\tsdp->sdp_header.HB0 = 0;\n",
+  "> > > +\t/*\n",
+  "> > > +\t * Packet Type 80h + Non-audio INFOFRAME Type value\n",
+  "> > > +\t * HDMI_INFOFRAME_TYPE_DRM: 0x87\n",
+  "> > > +\t * - 80h + Non-audio INFOFRAME Type value\n",
+  "> > > +\t * - InfoFrame Type: 0x07\n",
+  "> > > +\t *    [CTA-861-G Table-42 Dynamic Range and Mastering\n",
+  "> > > InfoFrame]\n",
+  "> > > +\t */\n",
+  "> > > +\tsdp->sdp_header.HB1 = drm_infoframe->type;\n",
+  "> > > +\t/*\n",
+  "> > > +\t * Least Significant Eight Bits of (Data Byte Count \342\200\223 1)\n",
+  "> > > +\t * infoframe_size - 1\n",
+  "> > > +\t */\n",
+  "> > > +\tsdp->sdp_header.HB2 = 0x1D;\n",
+  "> > > +\t/* INFOFRAME SDP Version Number */\n",
+  "> > > +\tsdp->sdp_header.HB3 = (0x13 << 2);\n",
+  "> > > +\t/* CTA Header Byte 2 (INFOFRAME Version Number) */\n",
+  "> > > +\tsdp->db[0] = drm_infoframe->version;\n",
+  "> > > +\t/* CTA Header Byte 3 (Length of INFOFRAME):\n",
+  "> > > HDMI_DRM_INFOFRAME_SIZE */\n",
+  "> > > +\tsdp->db[1] = drm_infoframe->length;\n",
+  "> > > +\t/*\n",
+  "> > > +\t * Copy HDMI_DRM_INFOFRAME_SIZE size from a buffer after\n",
+  "> >\n",
+  "> > Comment Looks incomplete.\n",
+  "> >\n",
+  "> I missed some comments, I'll update it.\n",
+  "> > > +\t */\n",
+  "> > > +\tBUILD_BUG_ON(sizeof(sdp->db) < HDMI_DRM_INFOFRAME_SIZE + 2);\n",
+  "> > > +\tmemcpy(&sdp->db[2], &buf[HDMI_INFOFRAME_HEADER_SIZE],\n",
+  "> > > +\t       HDMI_DRM_INFOFRAME_SIZE);\n",
+  "> > > +\n",
+  "> > > +\t/*\n",
+  "> > > +\t * Size of DP infoframe sdp packet for HDR static metadata is\n",
+  "> > > consist of\n",
+  "> >\n",
+  "> > Drop \"is\"\n",
+  "> >\n",
+  "> Includes this, I'll polish polish commit message and comments.\n",
+  "> \n",
+  "> > > +\t * - DP SDP Header(struct dp_sdp_header): 4 bytes\n",
+  "> > > +\t * - Two Data Blocks: 2 bytes\n",
+  "> > > +\t *    CTA Header Byte2 (INFOFRAME Version Number)\n",
+  "> > > +\t *    CTA Header Byte3 (Length of INFOFRAME)\n",
+  "> > > +\t * - HDMI_DRM_INFOFRAME_SIZE: 26 bytes\n",
+  "> > > +\t *\n",
+  "> > > +\t * Prior to GEN11's GMP register size is identical to DP HDR\n",
+  "> > > static metadata\n",
+  "> > > +\t * infoframe size. But GEN11+ has larger than that size,\n",
+  "> > > write_infoframe\n",
+  "> > > +\t * will pad rest of the size.\n",
+  "> > > +\t */\n",
+  "> > > +\treturn sizeof(struct dp_sdp_header) + 2 +\n",
+  "> > > HDMI_DRM_INFOFRAME_SIZE; }\n",
+  "> > > +\n",
+  "> > > +static void intel_write_dp_sdp(struct intel_encoder *encoder,\n",
+  "> > > +\t\t\t       const struct intel_crtc_state\n",
+  "> > > *crtc_state,\n",
+  "> > > +\t\t\t       unsigned int type)\n",
+  "> > > +{\n",
+  "> > > +\tstruct intel_digital_port *intel_dig_port =\n",
+  "> > > enc_to_dig_port(encoder);\n",
+  "> > > +\tstruct dp_sdp sdp = {};\n",
+  "> > > +\tssize_t len;\n",
+  "> > > +\n",
+  "> > > +\tif ((crtc_state->infoframes.enable &\n",
+  "> > > +\t     intel_hdmi_infoframe_enable(type)) == 0)\n",
+  "> > > +\t\treturn;\n",
+  "> > > +\n",
+  "> > > +\tswitch (type) {\n",
+  "> > > +\tcase DP_SDP_VSC:\n",
+  "> > > +\t\tlen = intel_dp_vsc_sdp_pack(&crtc_state-\n",
+  "> > > >infoframes.vsc, &sdp,\n",
+  "> > > +\t\t\t\t\t    sizeof(sdp));\n",
+  "> > > +\t\tbreak;\n",
+  "> > > +\tcase HDMI_PACKET_TYPE_GAMUT_METADATA:\n",
+  "> > > +\t\tlen =\n",
+  "> > > intel_dp_hdr_metadata_infoframe_sdp_pack(&crtc_state-\n",
+  "> > > > infoframes.drm.drm,\n",
+  "> > > +\t\t\t\t\t\t\t       &sdp,\n",
+  "> > > sizeof(sdp));\n",
+  "> > > +\t\tbreak;\n",
+  "> > > +\tdefault:\n",
+  "> > > +\t\tMISSING_CASE(type);\n",
+  "> > > +\t\tbreak;\n",
+  "> > > +\t}\n",
+  "> > > +\n",
+  "> > > +\tif (WARN_ON(len < 0))\n",
+  "> > > +\t\treturn;\n",
+  "> > > +\n",
+  "> > > +\tintel_dig_port->write_infoframe(encoder, crtc_state, type,\n",
+  "> > > &sdp, len);\n",
+  "> > > +}\n",
+  "> > > +\n",
+  "> > > +void intel_dp_set_infoframes(struct intel_encoder *encoder,\n",
+  "> > > +\t\t\t     bool enable,\n",
+  "> > > +\t\t\t     const struct intel_crtc_state *crtc_state,\n",
+  "> > > +\t\t\t     const struct drm_connector_state\n",
+  "> > > *conn_state) {\n",
+  "> > > +\tstruct drm_i915_private *dev_priv = to_i915(encoder->base.dev);\n",
+  "> > > +\tstruct intel_dp *intel_dp = enc_to_intel_dp(encoder);\n",
+  "> > > +\ti915_reg_t reg = HSW_TVIDEO_DIP_CTL(crtc_state-\n",
+  "> > > >cpu_transcoder);\n",
+  "> > > +\tu32 dip_enable = VIDEO_DIP_ENABLE_AVI_HSW |\n",
+  "> > > VIDEO_DIP_ENABLE_GCP_HSW |\n",
+  "> > > +\t\t\t VIDEO_DIP_ENABLE_VS_HSW |\n",
+  "> > > VIDEO_DIP_ENABLE_GMP_HSW |\n",
+  "> > > +\t\t\t VIDEO_DIP_ENABLE_SPD_HSW |\n",
+  "> > > VIDEO_DIP_ENABLE_DRM_GLK;\n",
+  "> > > +\tu32 val = I915_READ(reg);\n",
+  "> > > +\n",
+  "> > > +\t/* TODO: Add DSC case (DIP_ENABLE_PPS) */\n",
+  "> > > +\t/* When PSR is enabled, this routine doesn't disable VSC DIP */\n",
+  "> > > +\tif (intel_psr_enabled(intel_dp))\n",
+  "> > > +\t\tval &= ~dip_enable;\n",
+  "> > > +\telse\n",
+  "> > > +\t\tval &= ~(dip_enable | VIDEO_DIP_ENABLE_VSC_HSW);\n",
+  "> >\n",
+  "> > dip_enable has VIDEO_DIP_ENABLE_VSC_HSW already in it. Please fix\n",
+  "> > this.\n",
+  "> >\n",
+  "> Declaring of dip_enable does not include VIDEO_DIP_ENABLE_VSC_HSW.\n",
+  "> therefore we need it here to disable VSC SDP DIP.\n",
+  "\n",
+  "Oh ok, Took VS for VSC. Scratch my earlier comment, change is correct.\n",
+  "\n",
+  "> > > +\n",
+  "> > > +\tif (!enable) {\n",
+  "> > > +\t\tI915_WRITE(reg, val);\n",
+  "> > > +\t\tPOSTING_READ(reg);\n",
+  "> > > +\t\treturn;\n",
+  "> > > +\t}\n",
+  "> > > +\n",
+  "> > > +\tI915_WRITE(reg, val);\n",
+  "> > > +\tPOSTING_READ(reg);\n",
+  "> > > +\n",
+  "> > > +\t/* When PSR is enabled, VSC SDP is handled by PSR routine */\n",
+  "> > > +\tif (!intel_psr_enabled(intel_dp))\n",
+  "> > > +\t\tintel_write_dp_sdp(encoder, crtc_state, DP_SDP_VSC);\n",
+  "> > > +\n",
+  "> > > +\tintel_write_dp_sdp(encoder, crtc_state,\n",
+  "> > > +HDMI_PACKET_TYPE_GAMUT_METADATA); }\n",
+  "> > > +\n",
+  "> > >  static void\n",
+  "> > >  intel_dp_setup_vsc_sdp(struct intel_dp *intel_dp,\n",
+  "> > >  \t\t       const struct intel_crtc_state *crtc_state, diff --git\n",
+  "> > > a/drivers/gpu/drm/i915/display/intel_dp.h\n",
+  "> > > b/drivers/gpu/drm/i915/display/intel_dp.h\n",
+  "> > > index 3da166054788..0dc09a463ee1 100644\n",
+  "> > > --- a/drivers/gpu/drm/i915/display/intel_dp.h\n",
+  "> > > +++ b/drivers/gpu/drm/i915/display/intel_dp.h\n",
+  "> > > \@\@ -116,6 +116,9 \@\@ void intel_dp_vsc_enable(struct intel_dp\n",
+  "> > > *intel_dp,  void intel_dp_hdr_metadata_enable(struct intel_dp\n",
+  "> > > *intel_dp,\n",
+  "> > >  \t\t\t\t  const struct intel_crtc_state *crtc_state,\n",
+  "> > >  \t\t\t\t  const struct drm_connector_state *conn_state);\n",
+  "> > > +void intel_dp_set_infoframes(struct intel_encoder *encoder, bool\n",
+  "> > > enable,\n",
+  "> > > +\t\t\t     const struct intel_crtc_state *crtc_state,\n",
+  "> > > +\t\t\t     const struct drm_connector_state\n",
+  "> > > *conn_state);\n",
+  "> > >  bool intel_digital_port_connected(struct intel_encoder *encoder);\n",
+  "> > >\n",
+  "> > >  static inline unsigned int intel_dp_unused_lane_mask(int\n",
+  "> > > lane_count)\n",
+  "> > > --\n",
+  "> > > 2.24.1\n",
+  "> > >\n",
+  "> > > _______________________________________________\n",
+  "> > > dri-devel mailing list\n",
+  "> > > dri-devel\@lists.freedesktop.org\n",
+  "> > > https://lists.freedesktop.org/mailman/listinfo/dri-devel\n",
+  "_______________________________________________\n",
+  "dri-devel mailing list\n",
+  "dri-devel\@lists.freedesktop.org\n",
+  "https://lists.freedesktop.org/mailman/listinfo/dri-devel"
 ]
 
-98ce46eab589aa83b6e5fe7eb45dd8a61ef99e7bbaf3cafb636d195165aa0e48
+86ae07eda36b000059ee8d5523ab6e440324eb8a2bb15ed43be0d02d0cb22a73

diff --git a/a/1.txt b/N2/1.txt
index 1cc6b15..15c8177 100644
--- a/a/1.txt
+++ b/N2/1.txt
@@ -1,214 +1,348 @@
-DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTXVuLCBHd2FuLWd5ZW9u
-ZyA8Z3dhbi1neWVvbmcubXVuQGludGVsLmNvbT4NCj4gU2VudDogU3VuZGF5LCBGZWJydWFyeSA5
-LCAyMDIwIDk6MDUgQU0NCj4gVG86IFNoYW5rYXIsIFVtYSA8dW1hLnNoYW5rYXJAaW50ZWwuY29t
-PjsgaW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZw0KPiBDYzogZHJpLWRldmVsQGxpc3Rz
-LmZyZWVkZXNrdG9wLm9yZzsgbGludXgtZmJkZXZAdmdlci5rZXJuZWwub3JnDQo+IFN1YmplY3Q6
-IFJlOiBbUEFUQ0ggdjMgMDQvMTddIGRybS9pOTE1L2RwOiBBZGQgd3JpdGluZyBvZiBEUCBTRFBz
-IChTZWNvbmRhcnkgRGF0YQ0KPiBQYWNrZXQpDQo+IA0KPiBPbiBXZWQsIDIwMjAtMDItMDUgYXQg
-MjE6MzkgKzA1MzAsIFNoYW5rYXIsIFVtYSB3cm90ZToNCj4gPiA+IC0tLS0tT3JpZ2luYWwgTWVz
-c2FnZS0tLS0tDQo+ID4gPiBGcm9tOiBkcmktZGV2ZWwgPGRyaS1kZXZlbC1ib3VuY2VzQGxpc3Rz
-LmZyZWVkZXNrdG9wLm9yZz4gT24gQmVoYWxmDQo+ID4gPiBPZiBHd2FuLSBneWVvbmcgTXVuDQo+
-ID4gPiBTZW50OiBUdWVzZGF5LCBGZWJydWFyeSA0LCAyMDIwIDQ6NTAgQU0NCj4gPiA+IFRvOiBp
-bnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnDQo+ID4gPiBDYzogbGludXgtZmJkZXZAdmdl
-ci5rZXJuZWwub3JnOyBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnDQo+ID4gPiBTdWJq
-ZWN0OiBbUEFUQ0ggdjMgMDQvMTddIGRybS9pOTE1L2RwOiBBZGQgd3JpdGluZyBvZiBEUCBTRFBz
-DQo+ID4gPiAoU2Vjb25kYXJ5IERhdGENCj4gPiA+IFBhY2tldCkNCj4gPg0KPiA+IERyb3AgdGhp
-bmdzIGluICgpLCBub3QgbmVlZGVkLg0KPiA+DQo+ID4gPiBJdCBhZGRzIHJvdXRpbmVzIHRoYXQg
-d3JpdGUgRFAgVlNDIFNEUCBhbmQgRFAgSERSIE1ldGFkYXRhIEluZm9mcmFtZQ0KPiA+ID4gU0RQ
-Lg0KPiA+ID4gSW4gb3JkZXIgdG8gcGFjayBEUCBWU0MgU0RQLCBpdCBhZGRzIGludGVsX2RwX3Zz
-Y19zZHBfcGFjaygpDQo+ID4gPiBmdW5jdGlvbi4NCj4gPiA+IEl0IGZvbGxvd3MgRFAgMS40YSBz
-cGVjLiBbVGFibGUgMi0xMTY6IFZTQyBTRFAgSGVhZGVyIEJ5dGVzXSBhbmQNCj4gPiA+IFtUYWJs
-ZSAyLTExNzogVlNDIFNEUCBQYXlsb2FkIGZvciBEQjE2IHRocm91Z2ggREIxOF0NCj4gPiA+DQo+
-ID4gPiBJbiBvcmRlciB0byBwYWNrIERQIEhEUiBNZXRhZGF0YSBJbmZvZnJhbWUgU0RQLCBpdCBh
-ZGRzDQo+ID4gPiBpbnRlbF9kcF9oZHJfbWV0YWRhdGFfaW5mb2ZyYW1lX3NkcF9wYWNrKCkgZnVu
-Y3Rpb24uDQo+ID4gPiBBbmQgaXQgZm9sbG93cyBEUCAxLjRhIHNwZWMuDQo+ID4gPiAoW1RhYmxl
-IDItMTI1OiBJTkZPRlJBTUUgU0RQIHYxLjIgSGVhZGVyIEJ5dGVzXSBhbmQgW1RhYmxlIDItMTI2
-Og0KPiA+ID4gSU5GT0ZSQU1FDQo+ID4gPiBTRFAgdjEuMiBQYXlsb2FkIERhdGEgQnl0ZXMgLSBE
-QjAgdGhyb3VnaCBEQjMxXSkgYW5kIENUQS04NjEtRyBzcGVjLg0KPiA+ID4gW1RhYmxlLTQyIER5
-bmFtaWMgUmFuZ2UgYW5kIE1hc3RlcmluZyBJbmZvRnJhbWVdLg0KPiA+ID4NCj4gPiA+IEEgbWFj
-aGFuaXNtIGFuZCBhIG5hbWluZyBydWxlIG9mIGludGVsX2RwX3NldF9pbmZvZnJhbWVzKCkgZnVu
-Y3Rpb24NCj4gPiA+IHJlZmVyZW5jZXMNCj4gPg0KPiA+IFR5cG8gaW4gbWVjaGFuaXNtLg0KPiA+
-DQo+ID4gPiBpbnRlbF9lbmNvZGVyLT5zZXRfaW5mb2ZyYW1lcygpIG9mIGludGVsX2hkbWkuYyAu
-DQo+ID4gPiBWU0MgU0RQIGlzIHVzZWQgZm9yIFBTUiBhbmQgUGl4ZWwgRW5jb2RpbmcgYW5kIENv
-bG9yaW1ldHJ5IEZvcm1hdHMNCj4gPiA+IGNhc2VzLg0KPiA+ID4gQmVjYXVzZSBQU1Igcm91dGlu
-ZSBoYXMgaXRzIG93biByb3V0aW5lIG9mIHdyaXRpbmcgYSBWU0MgU0RQLCB3aGVuDQo+ID4gPiB0
-aGUgUFNSIGlzIGVuYWJsZWQsIGludGVsX2RwX3NldF9pbmZvZnJhbWVzKCkgZG9lcyBub3Qgd3Jp
-dGUgYSBWU0MNCj4gPiA+IFNEUC4NCj4gPiA+DQo+ID4gPiB2MzoNCj4gPiA+ICAgLSBFeHBsaWNp
-dGx5IGRpc2FibGUgdW51c2VkIERJUHMgKEFWSSwgR0NQLCBWUywgU1BELCBEUk0uIFRoZXkNCj4g
-PiA+IHdpbGwgYmUNCj4gPiA+ICAgICB1c2VkIGZvciBIRE1JKSwgd2hlbiBpbnRlbF9kcF9zZXRf
-aW5mb2ZyYW1lcygpIGZ1bmN0aW9uIHdpbGwgYmUNCj4gPiA+IGNhbGxlZC4NCj4gPiA+ICAgLSBS
-ZXBsYWNlIGEgc3RydWN0dXJlIG5hbWUgdG8gZHJtX2RwX3ZzY19zZHAgZnJvbQ0KPiA+ID4gaW50
-ZWxfZHBfdnNjX3NkcC4NCj4gPiA+DQo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBHd2FuLWd5ZW9uZyBN
-dW4gPGd3YW4tZ3llb25nLm11bkBpbnRlbC5jb20+DQo+ID4gPiAtLS0NCj4gPiA+ICBkcml2ZXJz
-L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwLmMgfCAxOTQNCj4gPiA+ICsrKysrKysrKysr
-KysrKysrKysrKysrKw0KPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf
-ZHAuaCB8ICAgMyArDQo+ID4gPiAgMiBmaWxlcyBjaGFuZ2VkLCAxOTcgaW5zZXJ0aW9ucygrKQ0K
-PiA+ID4NCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu
-dGVsX2RwLmMNCj4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5j
-DQo+ID4gPiBpbmRleCBiMjY1YjVjNTk5ZjIuLmRkN2U1NTg4MDAxZSAxMDA2NDQNCj4gPiA+IC0t
-LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuYw0KPiA+ID4gKysrIGIv
-ZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5jDQo+ID4gPiBAQCAtNDczMSw2
-ICs0NzMxLDIwMCBAQCBpbnRlbF9kcF9uZWVkc192c2Nfc2RwKGNvbnN0IHN0cnVjdA0KPiA+ID4g
-aW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwNCj4gPiA+ICAJcmV0dXJuIGZhbHNlOw0KPiA+
-ID4gIH0NCj4gPiA+DQo+ID4gPiArc3RhdGljIHNzaXplX3QgaW50ZWxfZHBfdnNjX3NkcF9wYWNr
-KGNvbnN0IHN0cnVjdCBkcm1fZHBfdnNjX3NkcA0KPiA+ID4gKnZzYywNCj4gPiA+ICsJCQkJICAg
-ICBzdHJ1Y3QgZHBfc2RwICpzZHAsIHNpemVfdCBzaXplKSB7DQo+ID4gPiArCXNpemVfdCBsZW5n
-dGggPSBzaXplb2Yoc3RydWN0IGRwX3NkcCk7DQo+ID4gPiArDQo+ID4gPiArCWlmIChzaXplIDwg
-bGVuZ3RoKQ0KPiA+ID4gKwkJcmV0dXJuIC1FTk9TUEM7DQo+ID4gPiArDQo+ID4gPiArCW1lbXNl
-dChzZHAsIDAsIHNpemUpOw0KPiA+ID4gKw0KPiA+ID4gKwkvKg0KPiA+ID4gKwkgKiBQcmVwYXJl
-IFZTQyBIZWFkZXIgZm9yIFNVIGFzIHBlciBEUCAxLjRhIHNwZWMsIFRhYmxlIDItMTE5DQo+ID4g
-PiArCSAqIFZTQyBTRFAgSGVhZGVyIEJ5dGVzDQo+ID4gPiArCSAqLw0KPiA+ID4gKwlzZHAtPnNk
-cF9oZWFkZXIuSEIwID0gMDsgLyogU2Vjb25kYXJ5LURhdGEgUGFja2V0IElEID0gMCAqLw0KPiA+
-ID4gKwlzZHAtPnNkcF9oZWFkZXIuSEIxID0gdnNjLT5zZHBfdHlwZTsgLyogU2Vjb25kYXJ5LWRh
-dGEgUGFja2V0DQo+ID4gPiBUeXBlICovDQo+ID4gPiArCXNkcC0+c2RwX2hlYWRlci5IQjIgPSB2
-c2MtPnJldmlzaW9uOyAvKiBSZXZpc2lvbiBOdW1iZXIgKi8NCj4gPiA+ICsJc2RwLT5zZHBfaGVh
-ZGVyLkhCMyA9IHZzYy0+bGVuZ3RoOyAvKiBOdW1iZXIgb2YgVmFsaWQgRGF0YQ0KPiA+ID4gQnl0
-ZXMgKi8NCj4gPiA+ICsNCj4gPiA+ICsJLyogVlNDIFNEUCBQYXlsb2FkIGZvciBEQjE2IHRocm91
-Z2ggREIxOCAqLw0KPiA+ID4gKwkvKiBQaXhlbCBFbmNvZGluZyBhbmQgQ29sb3JpbWV0cnkgRm9y
-bWF0cyAgKi8NCj4gPiA+ICsJc2RwLT5kYlsxNl0gPSAodnNjLT5jb2xvcnNwYWNlICYgMHhmKSA8
-PCA0OyAvKiBEQjE2Wzc6NF0gKi8NCj4gPiA+ICsJc2RwLT5kYlsxNl0gfD0gdnNjLT5jb2xvcmlt
-ZXRyeSAmIDB4ZjsgLyogREIxNlszOjBdICovDQo+ID4gPiArDQo+ID4gPiArCXN3aXRjaCAodnNj
-LT5icGMpIHsNCj4gPiA+ICsJY2FzZSA4Og0KPiA+ID4gKwkJc2RwLT5kYlsxN10gPSAweDE7IC8q
-IERCMTdbMzowXSAqLw0KPiA+ID4gKwkJYnJlYWs7DQo+ID4gPiArCWNhc2UgMTA6DQo+ID4gPiAr
-CQlzZHAtPmRiWzE3XSA9IDB4MjsNCj4gPiA+ICsJCWJyZWFrOw0KPiA+ID4gKwljYXNlIDEyOg0K
-PiA+ID4gKwkJc2RwLT5kYlsxN10gPSAweDM7DQo+ID4gPiArCQlicmVhazsNCj4gPiA+ICsJY2Fz
-ZSAxNjoNCj4gPiA+ICsJCXNkcC0+ZGJbMTddID0gMHg0Ow0KPiA+ID4gKwkJYnJlYWs7DQo+ID4g
-PiArCWRlZmF1bHQ6DQo+ID4gPiArCQlNSVNTSU5HX0NBU0UodnNjLT5icGMpOw0KPiA+DQo+ID4g
-NmJwYyBpcyBub3QgaGFuZGxlZCBoZXJlLCBhZGQgdGhhdCBhcyB3ZWxsLg0KPiA+DQo+IFllcywg
-SSBtaXNzZWQgNmJwYyBjYXNlLCBJJ2xsIHVwZGF0ZSBpdC4NCj4gPiA+ICsJCWJyZWFrOw0KPiA+
-ID4gKwl9DQo+ID4gPiArCS8qIER5bmFtaWMgUmFuZ2UgYW5kIENvbXBvbmVudCBCaXQgRGVwdGgg
-Ki8NCj4gPiA+ICsJaWYgKHZzYy0+ZHluYW1pY19yYW5nZSA9PSBEUF9EWU5BTUlDX1JBTkdFX0NU
-QSkNCj4gPiA+ICsJCXNkcC0+ZGJbMTddIHw9IDB4ODA7ICAvKiBEQjE3WzddICovDQo+ID4gPiAr
-DQo+ID4gPiArCS8qIENvbnRlbnQgVHlwZSAqLw0KPiA+ID4gKwlzZHAtPmRiWzE4XSA9IHZzYy0+
-Y29udGVudF90eXBlICYgMHg3Ow0KPiA+ID4gKw0KPiA+ID4gKwlyZXR1cm4gbGVuZ3RoOw0KPiA+
-ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgc3NpemVfdA0KPiA+ID4gK2ludGVsX2RwX2hk
-cl9tZXRhZGF0YV9pbmZvZnJhbWVfc2RwX3BhY2soY29uc3Qgc3RydWN0DQo+ID4gPiBoZG1pX2Ry
-bV9pbmZvZnJhbWUNCj4gPiA+ICpkcm1faW5mb2ZyYW1lLA0KPiA+ID4gKwkJCQkJIHN0cnVjdCBk
-cF9zZHAgKnNkcCwNCj4gPiA+ICsJCQkJCSBzaXplX3Qgc2l6ZSkNCj4gPiA+ICt7DQo+ID4gPiAr
-CXNpemVfdCBsZW5ndGggPSBzaXplb2Yoc3RydWN0IGRwX3NkcCk7DQo+ID4gPiArCWNvbnN0IGlu
-dCBpbmZvZnJhbWVfc2l6ZSA9IEhETUlfSU5GT0ZSQU1FX0hFQURFUl9TSVpFICsNCj4gPiA+IEhE
-TUlfRFJNX0lORk9GUkFNRV9TSVpFOw0KPiA+ID4gKwl1bnNpZ25lZCBjaGFyIGJ1ZltIRE1JX0lO
-Rk9GUkFNRV9IRUFERVJfU0laRSArDQo+ID4gPiBIRE1JX0RSTV9JTkZPRlJBTUVfU0laRV07DQo+
-ID4gPiArCXNzaXplX3QgbGVuOw0KPiA+ID4gKw0KPiA+ID4gKwlpZiAoc2l6ZSA8IGxlbmd0aCkN
-Cj4gPiA+ICsJCXJldHVybiAtRU5PU1BDOw0KPiA+ID4gKw0KPiA+ID4gKwltZW1zZXQoc2RwLCAw
-LCBzaXplKTsNCj4gPiA+ICsNCj4gPiA+ICsJbGVuID0gaGRtaV9kcm1faW5mb2ZyYW1lX3BhY2tf
-b25seShkcm1faW5mb2ZyYW1lLCBidWYsDQo+ID4gPiBzaXplb2YoYnVmKSk7DQo+ID4gPiArCWlm
-IChsZW4gPCAwKSB7DQo+ID4gPiArCQlEUk1fREVCVUdfS01TKCJidWZmZXIgc2l6ZSBpcyBzbWFs
-bGVyIHRoYW4gaGRyIG1ldGFkYXRhDQo+ID4gPiBpbmZvZnJhbWVcbiIpOw0KPiA+ID4gKwkJcmV0
-dXJuIC1FTk9TUEM7DQo+ID4gPiArCX0NCj4gPiA+ICsNCj4gPiA+ICsJaWYgKGxlbiAhPSBpbmZv
-ZnJhbWVfc2l6ZSkgew0KPiA+ID4gKwkJRFJNX0RFQlVHX0tNUygid3Jvbmcgc3RhdGljIGhkciBt
-ZXRhZGF0YSBzaXplXG4iKTsNCj4gPiA+ICsJCXJldHVybiAtRU5PU1BDOw0KPiA+ID4gKwl9DQo+
-ID4gPiArDQo+ID4gPiArCS8qDQo+ID4gPiArCSAqIFNldCB1cCB0aGUgaW5mb2ZyYW1lIHNkcCBw
-YWNrZXQgZm9yIEhEUiBzdGF0aWMgbWV0YWRhdGEuDQo+ID4gPiArCSAqIFByZXBhcmUgVlNDIEhl
-YWRlciBmb3IgU1UgYXMgcGVyIERQIDEuNGEgc3BlYywNCj4gPiA+ICsJICogVGFibGUgMi0xMDAg
-YW5kIFRhYmxlIDItMTAxDQo+ID4gPiArCSAqLw0KPiA+ID4gKw0KPiA+ID4gKwkvKiBTZWNvbmRh
-cnktRGF0YSBQYWNrZXQgSUQsIDAwaCBmb3Igbm9uLUF1ZGlvIElORk9GUkFNRSAqLw0KPiA+ID4g
-KwlzZHAtPnNkcF9oZWFkZXIuSEIwID0gMDsNCj4gPiA+ICsJLyoNCj4gPiA+ICsJICogUGFja2V0
-IFR5cGUgODBoICsgTm9uLWF1ZGlvIElORk9GUkFNRSBUeXBlIHZhbHVlDQo+ID4gPiArCSAqIEhE
-TUlfSU5GT0ZSQU1FX1RZUEVfRFJNOiAweDg3DQo+ID4gPiArCSAqIC0gODBoICsgTm9uLWF1ZGlv
-IElORk9GUkFNRSBUeXBlIHZhbHVlDQo+ID4gPiArCSAqIC0gSW5mb0ZyYW1lIFR5cGU6IDB4MDcN
-Cj4gPiA+ICsJICogICAgW0NUQS04NjEtRyBUYWJsZS00MiBEeW5hbWljIFJhbmdlIGFuZCBNYXN0
-ZXJpbmcNCj4gPiA+IEluZm9GcmFtZV0NCj4gPiA+ICsJICovDQo+ID4gPiArCXNkcC0+c2RwX2hl
-YWRlci5IQjEgPSBkcm1faW5mb2ZyYW1lLT50eXBlOw0KPiA+ID4gKwkvKg0KPiA+ID4gKwkgKiBM
-ZWFzdCBTaWduaWZpY2FudCBFaWdodCBCaXRzIG9mIChEYXRhIEJ5dGUgQ291bnQg4oCTIDEpDQo+
-ID4gPiArCSAqIGluZm9mcmFtZV9zaXplIC0gMQ0KPiA+ID4gKwkgKi8NCj4gPiA+ICsJc2RwLT5z
-ZHBfaGVhZGVyLkhCMiA9IDB4MUQ7DQo+ID4gPiArCS8qIElORk9GUkFNRSBTRFAgVmVyc2lvbiBO
-dW1iZXIgKi8NCj4gPiA+ICsJc2RwLT5zZHBfaGVhZGVyLkhCMyA9ICgweDEzIDw8IDIpOw0KPiA+
-ID4gKwkvKiBDVEEgSGVhZGVyIEJ5dGUgMiAoSU5GT0ZSQU1FIFZlcnNpb24gTnVtYmVyKSAqLw0K
-PiA+ID4gKwlzZHAtPmRiWzBdID0gZHJtX2luZm9mcmFtZS0+dmVyc2lvbjsNCj4gPiA+ICsJLyog
-Q1RBIEhlYWRlciBCeXRlIDMgKExlbmd0aCBvZiBJTkZPRlJBTUUpOg0KPiA+ID4gSERNSV9EUk1f
-SU5GT0ZSQU1FX1NJWkUgKi8NCj4gPiA+ICsJc2RwLT5kYlsxXSA9IGRybV9pbmZvZnJhbWUtPmxl
-bmd0aDsNCj4gPiA+ICsJLyoNCj4gPiA+ICsJICogQ29weSBIRE1JX0RSTV9JTkZPRlJBTUVfU0la
-RSBzaXplIGZyb20gYSBidWZmZXIgYWZ0ZXINCj4gPg0KPiA+IENvbW1lbnQgTG9va3MgaW5jb21w
-bGV0ZS4NCj4gPg0KPiBJIG1pc3NlZCBzb21lIGNvbW1lbnRzLCBJJ2xsIHVwZGF0ZSBpdC4NCj4g
-PiA+ICsJICovDQo+ID4gPiArCUJVSUxEX0JVR19PTihzaXplb2Yoc2RwLT5kYikgPCBIRE1JX0RS
-TV9JTkZPRlJBTUVfU0laRSArIDIpOw0KPiA+ID4gKwltZW1jcHkoJnNkcC0+ZGJbMl0sICZidWZb
-SERNSV9JTkZPRlJBTUVfSEVBREVSX1NJWkVdLA0KPiA+ID4gKwkgICAgICAgSERNSV9EUk1fSU5G
-T0ZSQU1FX1NJWkUpOw0KPiA+ID4gKw0KPiA+ID4gKwkvKg0KPiA+ID4gKwkgKiBTaXplIG9mIERQ
-IGluZm9mcmFtZSBzZHAgcGFja2V0IGZvciBIRFIgc3RhdGljIG1ldGFkYXRhIGlzDQo+ID4gPiBj
-b25zaXN0IG9mDQo+ID4NCj4gPiBEcm9wICJpcyINCj4gPg0KPiBJbmNsdWRlcyB0aGlzLCBJJ2xs
-IHBvbGlzaCBwb2xpc2ggY29tbWl0IG1lc3NhZ2UgYW5kIGNvbW1lbnRzLg0KPiANCj4gPiA+ICsJ
-ICogLSBEUCBTRFAgSGVhZGVyKHN0cnVjdCBkcF9zZHBfaGVhZGVyKTogNCBieXRlcw0KPiA+ID4g
-KwkgKiAtIFR3byBEYXRhIEJsb2NrczogMiBieXRlcw0KPiA+ID4gKwkgKiAgICBDVEEgSGVhZGVy
-IEJ5dGUyIChJTkZPRlJBTUUgVmVyc2lvbiBOdW1iZXIpDQo+ID4gPiArCSAqICAgIENUQSBIZWFk
-ZXIgQnl0ZTMgKExlbmd0aCBvZiBJTkZPRlJBTUUpDQo+ID4gPiArCSAqIC0gSERNSV9EUk1fSU5G
-T0ZSQU1FX1NJWkU6IDI2IGJ5dGVzDQo+ID4gPiArCSAqDQo+ID4gPiArCSAqIFByaW9yIHRvIEdF
-TjExJ3MgR01QIHJlZ2lzdGVyIHNpemUgaXMgaWRlbnRpY2FsIHRvIERQIEhEUg0KPiA+ID4gc3Rh
-dGljIG1ldGFkYXRhDQo+ID4gPiArCSAqIGluZm9mcmFtZSBzaXplLiBCdXQgR0VOMTErIGhhcyBs
-YXJnZXIgdGhhbiB0aGF0IHNpemUsDQo+ID4gPiB3cml0ZV9pbmZvZnJhbWUNCj4gPiA+ICsJICog
-d2lsbCBwYWQgcmVzdCBvZiB0aGUgc2l6ZS4NCj4gPiA+ICsJICovDQo+ID4gPiArCXJldHVybiBz
-aXplb2Yoc3RydWN0IGRwX3NkcF9oZWFkZXIpICsgMiArDQo+ID4gPiBIRE1JX0RSTV9JTkZPRlJB
-TUVfU0laRTsgfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyB2b2lkIGludGVsX3dyaXRlX2RwX3Nk
-cChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwNCj4gPiA+ICsJCQkgICAgICAgY29uc3Qg
-c3RydWN0IGludGVsX2NydGNfc3RhdGUNCj4gPiA+ICpjcnRjX3N0YXRlLA0KPiA+ID4gKwkJCSAg
-ICAgICB1bnNpZ25lZCBpbnQgdHlwZSkNCj4gPiA+ICt7DQo+ID4gPiArCXN0cnVjdCBpbnRlbF9k
-aWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0ID0NCj4gPiA+IGVuY190b19kaWdfcG9ydChlbmNv
-ZGVyKTsNCj4gPiA+ICsJc3RydWN0IGRwX3NkcCBzZHAgPSB7fTsNCj4gPiA+ICsJc3NpemVfdCBs
-ZW47DQo+ID4gPiArDQo+ID4gPiArCWlmICgoY3J0Y19zdGF0ZS0+aW5mb2ZyYW1lcy5lbmFibGUg
-Jg0KPiA+ID4gKwkgICAgIGludGVsX2hkbWlfaW5mb2ZyYW1lX2VuYWJsZSh0eXBlKSkgPT0gMCkN
-Cj4gPiA+ICsJCXJldHVybjsNCj4gPiA+ICsNCj4gPiA+ICsJc3dpdGNoICh0eXBlKSB7DQo+ID4g
-PiArCWNhc2UgRFBfU0RQX1ZTQzoNCj4gPiA+ICsJCWxlbiA9IGludGVsX2RwX3ZzY19zZHBfcGFj
-aygmY3J0Y19zdGF0ZS0NCj4gPiA+ID5pbmZvZnJhbWVzLnZzYywgJnNkcCwNCj4gPiA+ICsJCQkJ
-CSAgICBzaXplb2Yoc2RwKSk7DQo+ID4gPiArCQlicmVhazsNCj4gPiA+ICsJY2FzZSBIRE1JX1BB
-Q0tFVF9UWVBFX0dBTVVUX01FVEFEQVRBOg0KPiA+ID4gKwkJbGVuID0NCj4gPiA+IGludGVsX2Rw
-X2hkcl9tZXRhZGF0YV9pbmZvZnJhbWVfc2RwX3BhY2soJmNydGNfc3RhdGUtDQo+ID4gPiA+IGlu
-Zm9mcmFtZXMuZHJtLmRybSwNCj4gPiA+ICsJCQkJCQkJICAgICAgICZzZHAsDQo+ID4gPiBzaXpl
-b2Yoc2RwKSk7DQo+ID4gPiArCQlicmVhazsNCj4gPiA+ICsJZGVmYXVsdDoNCj4gPiA+ICsJCU1J
-U1NJTkdfQ0FTRSh0eXBlKTsNCj4gPiA+ICsJCWJyZWFrOw0KPiA+ID4gKwl9DQo+ID4gPiArDQo+
-ID4gPiArCWlmIChXQVJOX09OKGxlbiA8IDApKQ0KPiA+ID4gKwkJcmV0dXJuOw0KPiA+ID4gKw0K
-PiA+ID4gKwlpbnRlbF9kaWdfcG9ydC0+d3JpdGVfaW5mb2ZyYW1lKGVuY29kZXIsIGNydGNfc3Rh
-dGUsIHR5cGUsDQo+ID4gPiAmc2RwLCBsZW4pOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICt2
-b2lkIGludGVsX2RwX3NldF9pbmZvZnJhbWVzKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVy
-LA0KPiA+ID4gKwkJCSAgICAgYm9vbCBlbmFibGUsDQo+ID4gPiArCQkJICAgICBjb25zdCBzdHJ1
-Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwNCj4gPiA+ICsJCQkgICAgIGNvbnN0IHN0
-cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlDQo+ID4gPiAqY29ubl9zdGF0ZSkgew0KPiA+ID4gKwlz
-dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGVuY29kZXItPmJhc2Uu
-ZGV2KTsNCj4gPiA+ICsJc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGVuY190b19pbnRlbF9k
-cChlbmNvZGVyKTsNCj4gPiA+ICsJaTkxNV9yZWdfdCByZWcgPSBIU1dfVFZJREVPX0RJUF9DVEwo
-Y3J0Y19zdGF0ZS0NCj4gPiA+ID5jcHVfdHJhbnNjb2Rlcik7DQo+ID4gPiArCXUzMiBkaXBfZW5h
-YmxlID0gVklERU9fRElQX0VOQUJMRV9BVklfSFNXIHwNCj4gPiA+IFZJREVPX0RJUF9FTkFCTEVf
-R0NQX0hTVyB8DQo+ID4gPiArCQkJIFZJREVPX0RJUF9FTkFCTEVfVlNfSFNXIHwNCj4gPiA+IFZJ
-REVPX0RJUF9FTkFCTEVfR01QX0hTVyB8DQo+ID4gPiArCQkJIFZJREVPX0RJUF9FTkFCTEVfU1BE
-X0hTVyB8DQo+ID4gPiBWSURFT19ESVBfRU5BQkxFX0RSTV9HTEs7DQo+ID4gPiArCXUzMiB2YWwg
-PSBJOTE1X1JFQUQocmVnKTsNCj4gPiA+ICsNCj4gPiA+ICsJLyogVE9ETzogQWRkIERTQyBjYXNl
-IChESVBfRU5BQkxFX1BQUykgKi8NCj4gPiA+ICsJLyogV2hlbiBQU1IgaXMgZW5hYmxlZCwgdGhp
-cyByb3V0aW5lIGRvZXNuJ3QgZGlzYWJsZSBWU0MgRElQICovDQo+ID4gPiArCWlmIChpbnRlbF9w
-c3JfZW5hYmxlZChpbnRlbF9kcCkpDQo+ID4gPiArCQl2YWwgJj0gfmRpcF9lbmFibGU7DQo+ID4g
-PiArCWVsc2UNCj4gPiA+ICsJCXZhbCAmPSB+KGRpcF9lbmFibGUgfCBWSURFT19ESVBfRU5BQkxF
-X1ZTQ19IU1cpOw0KPiA+DQo+ID4gZGlwX2VuYWJsZSBoYXMgVklERU9fRElQX0VOQUJMRV9WU0Nf
-SFNXIGFscmVhZHkgaW4gaXQuIFBsZWFzZSBmaXgNCj4gPiB0aGlzLg0KPiA+DQo+IERlY2xhcmlu
-ZyBvZiBkaXBfZW5hYmxlIGRvZXMgbm90IGluY2x1ZGUgVklERU9fRElQX0VOQUJMRV9WU0NfSFNX
-Lg0KPiB0aGVyZWZvcmUgd2UgbmVlZCBpdCBoZXJlIHRvIGRpc2FibGUgVlNDIFNEUCBESVAuDQoN
-Ck9oIG9rLCBUb29rIFZTIGZvciBWU0MuIFNjcmF0Y2ggbXkgZWFybGllciBjb21tZW50LCBjaGFu
-Z2UgaXMgY29ycmVjdC4NCg0KPiA+ID4gKw0KPiA+ID4gKwlpZiAoIWVuYWJsZSkgew0KPiA+ID4g
-KwkJSTkxNV9XUklURShyZWcsIHZhbCk7DQo+ID4gPiArCQlQT1NUSU5HX1JFQUQocmVnKTsNCj4g
-PiA+ICsJCXJldHVybjsNCj4gPiA+ICsJfQ0KPiA+ID4gKw0KPiA+ID4gKwlJOTE1X1dSSVRFKHJl
-ZywgdmFsKTsNCj4gPiA+ICsJUE9TVElOR19SRUFEKHJlZyk7DQo+ID4gPiArDQo+ID4gPiArCS8q
-IFdoZW4gUFNSIGlzIGVuYWJsZWQsIFZTQyBTRFAgaXMgaGFuZGxlZCBieSBQU1Igcm91dGluZSAq
-Lw0KPiA+ID4gKwlpZiAoIWludGVsX3Bzcl9lbmFibGVkKGludGVsX2RwKSkNCj4gPiA+ICsJCWlu
-dGVsX3dyaXRlX2RwX3NkcChlbmNvZGVyLCBjcnRjX3N0YXRlLCBEUF9TRFBfVlNDKTsNCj4gPiA+
-ICsNCj4gPiA+ICsJaW50ZWxfd3JpdGVfZHBfc2RwKGVuY29kZXIsIGNydGNfc3RhdGUsDQo+ID4g
-PiArSERNSV9QQUNLRVRfVFlQRV9HQU1VVF9NRVRBREFUQSk7IH0NCj4gPiA+ICsNCj4gPiA+ICBz
-dGF0aWMgdm9pZA0KPiA+ID4gIGludGVsX2RwX3NldHVwX3ZzY19zZHAoc3RydWN0IGludGVsX2Rw
-ICppbnRlbF9kcCwNCj4gPiA+ICAJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0
-ZSAqY3J0Y19zdGF0ZSwgZGlmZiAtLWdpdA0KPiA+ID4gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9k
-aXNwbGF5L2ludGVsX2RwLmgNCj4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p
-bnRlbF9kcC5oDQo+ID4gPiBpbmRleCAzZGExNjYwNTQ3ODguLjBkYzA5YTQ2M2VlMSAxMDA2NDQN
-Cj4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuaA0KPiA+
-ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5oDQo+ID4gPiBA
-QCAtMTE2LDYgKzExNiw5IEBAIHZvaWQgaW50ZWxfZHBfdnNjX2VuYWJsZShzdHJ1Y3QgaW50ZWxf
-ZHANCj4gPiA+ICppbnRlbF9kcCwgIHZvaWQgaW50ZWxfZHBfaGRyX21ldGFkYXRhX2VuYWJsZShz
-dHJ1Y3QgaW50ZWxfZHANCj4gPiA+ICppbnRlbF9kcCwNCj4gPiA+ICAJCQkJICBjb25zdCBzdHJ1
-Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwNCj4gPiA+ICAJCQkJICBjb25zdCBzdHJ1
-Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSk7DQo+ID4gPiArdm9pZCBpbnRlbF9k
-cF9zZXRfaW5mb2ZyYW1lcyhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwgYm9vbA0KPiA+
-ID4gZW5hYmxlLA0KPiA+ID4gKwkJCSAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUg
-KmNydGNfc3RhdGUsDQo+ID4gPiArCQkJICAgICBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9z
-dGF0ZQ0KPiA+ID4gKmNvbm5fc3RhdGUpOw0KPiA+ID4gIGJvb2wgaW50ZWxfZGlnaXRhbF9wb3J0
-X2Nvbm5lY3RlZChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2Rlcik7DQo+ID4gPg0KPiA+ID4g
-IHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGludGVsX2RwX3VudXNlZF9sYW5lX21hc2soaW50
-DQo+ID4gPiBsYW5lX2NvdW50KQ0KPiA+ID4gLS0NCj4gPiA+IDIuMjQuMQ0KPiA+ID4NCj4gPiA+
-IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQo+ID4gPiBk
-cmktZGV2ZWwgbWFpbGluZyBsaXN0DQo+ID4gPiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Au
-b3JnDQo+ID4gPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv
-L2RyaS1kZXZlbA0K
\ No newline at end of file
+
+
+> -----Original Message-----
+> From: Mun, Gwan-gyeong <gwan-gyeong.mun@intel.com>
+> Sent: Sunday, February 9, 2020 9:05 AM
+> To: Shankar, Uma <uma.shankar@intel.com>; intel-gfx@lists.freedesktop.org
+> Cc: dri-devel@lists.freedesktop.org; linux-fbdev@vger.kernel.org
+> Subject: Re: [PATCH v3 04/17] drm/i915/dp: Add writing of DP SDPs (Secondary Data
+> Packet)
+> 
+> On Wed, 2020-02-05 at 21:39 +0530, Shankar, Uma wrote:
+> > > -----Original Message-----
+> > > From: dri-devel <dri-devel-bounces@lists.freedesktop.org> On Behalf
+> > > Of Gwan- gyeong Mun
+> > > Sent: Tuesday, February 4, 2020 4:50 AM
+> > > To: intel-gfx@lists.freedesktop.org
+> > > Cc: linux-fbdev@vger.kernel.org; dri-devel@lists.freedesktop.org
+> > > Subject: [PATCH v3 04/17] drm/i915/dp: Add writing of DP SDPs
+> > > (Secondary Data
+> > > Packet)
+> >
+> > Drop things in (), not needed.
+> >
+> > > It adds routines that write DP VSC SDP and DP HDR Metadata Infoframe
+> > > SDP.
+> > > In order to pack DP VSC SDP, it adds intel_dp_vsc_sdp_pack()
+> > > function.
+> > > It follows DP 1.4a spec. [Table 2-116: VSC SDP Header Bytes] and
+> > > [Table 2-117: VSC SDP Payload for DB16 through DB18]
+> > >
+> > > In order to pack DP HDR Metadata Infoframe SDP, it adds
+> > > intel_dp_hdr_metadata_infoframe_sdp_pack() function.
+> > > And it follows DP 1.4a spec.
+> > > ([Table 2-125: INFOFRAME SDP v1.2 Header Bytes] and [Table 2-126:
+> > > INFOFRAME
+> > > SDP v1.2 Payload Data Bytes - DB0 through DB31]) and CTA-861-G spec.
+> > > [Table-42 Dynamic Range and Mastering InfoFrame].
+> > >
+> > > A machanism and a naming rule of intel_dp_set_infoframes() function
+> > > references
+> >
+> > Typo in mechanism.
+> >
+> > > intel_encoder->set_infoframes() of intel_hdmi.c .
+> > > VSC SDP is used for PSR and Pixel Encoding and Colorimetry Formats
+> > > cases.
+> > > Because PSR routine has its own routine of writing a VSC SDP, when
+> > > the PSR is enabled, intel_dp_set_infoframes() does not write a VSC
+> > > SDP.
+> > >
+> > > v3:
+> > >   - Explicitly disable unused DIPs (AVI, GCP, VS, SPD, DRM. They
+> > > will be
+> > >     used for HDMI), when intel_dp_set_infoframes() function will be
+> > > called.
+> > >   - Replace a structure name to drm_dp_vsc_sdp from
+> > > intel_dp_vsc_sdp.
+> > >
+> > > Signed-off-by: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
+> > > ---
+> > >  drivers/gpu/drm/i915/display/intel_dp.c | 194
+> > > ++++++++++++++++++++++++
+> > >  drivers/gpu/drm/i915/display/intel_dp.h |   3 +
+> > >  2 files changed, 197 insertions(+)
+> > >
+> > > diff --git a/drivers/gpu/drm/i915/display/intel_dp.c
+> > > b/drivers/gpu/drm/i915/display/intel_dp.c
+> > > index b265b5c599f2..dd7e5588001e 100644
+> > > --- a/drivers/gpu/drm/i915/display/intel_dp.c
+> > > +++ b/drivers/gpu/drm/i915/display/intel_dp.c
+> > > @@ -4731,6 +4731,200 @@ intel_dp_needs_vsc_sdp(const struct
+> > > intel_crtc_state *crtc_state,
+> > >  	return false;
+> > >  }
+> > >
+> > > +static ssize_t intel_dp_vsc_sdp_pack(const struct drm_dp_vsc_sdp
+> > > *vsc,
+> > > +				     struct dp_sdp *sdp, size_t size) {
+> > > +	size_t length = sizeof(struct dp_sdp);
+> > > +
+> > > +	if (size < length)
+> > > +		return -ENOSPC;
+> > > +
+> > > +	memset(sdp, 0, size);
+> > > +
+> > > +	/*
+> > > +	 * Prepare VSC Header for SU as per DP 1.4a spec, Table 2-119
+> > > +	 * VSC SDP Header Bytes
+> > > +	 */
+> > > +	sdp->sdp_header.HB0 = 0; /* Secondary-Data Packet ID = 0 */
+> > > +	sdp->sdp_header.HB1 = vsc->sdp_type; /* Secondary-data Packet
+> > > Type */
+> > > +	sdp->sdp_header.HB2 = vsc->revision; /* Revision Number */
+> > > +	sdp->sdp_header.HB3 = vsc->length; /* Number of Valid Data
+> > > Bytes */
+> > > +
+> > > +	/* VSC SDP Payload for DB16 through DB18 */
+> > > +	/* Pixel Encoding and Colorimetry Formats  */
+> > > +	sdp->db[16] = (vsc->colorspace & 0xf) << 4; /* DB16[7:4] */
+> > > +	sdp->db[16] |= vsc->colorimetry & 0xf; /* DB16[3:0] */
+> > > +
+> > > +	switch (vsc->bpc) {
+> > > +	case 8:
+> > > +		sdp->db[17] = 0x1; /* DB17[3:0] */
+> > > +		break;
+> > > +	case 10:
+> > > +		sdp->db[17] = 0x2;
+> > > +		break;
+> > > +	case 12:
+> > > +		sdp->db[17] = 0x3;
+> > > +		break;
+> > > +	case 16:
+> > > +		sdp->db[17] = 0x4;
+> > > +		break;
+> > > +	default:
+> > > +		MISSING_CASE(vsc->bpc);
+> >
+> > 6bpc is not handled here, add that as well.
+> >
+> Yes, I missed 6bpc case, I'll update it.
+> > > +		break;
+> > > +	}
+> > > +	/* Dynamic Range and Component Bit Depth */
+> > > +	if (vsc->dynamic_range == DP_DYNAMIC_RANGE_CTA)
+> > > +		sdp->db[17] |= 0x80;  /* DB17[7] */
+> > > +
+> > > +	/* Content Type */
+> > > +	sdp->db[18] = vsc->content_type & 0x7;
+> > > +
+> > > +	return length;
+> > > +}
+> > > +
+> > > +static ssize_t
+> > > +intel_dp_hdr_metadata_infoframe_sdp_pack(const struct
+> > > hdmi_drm_infoframe
+> > > *drm_infoframe,
+> > > +					 struct dp_sdp *sdp,
+> > > +					 size_t size)
+> > > +{
+> > > +	size_t length = sizeof(struct dp_sdp);
+> > > +	const int infoframe_size = HDMI_INFOFRAME_HEADER_SIZE +
+> > > HDMI_DRM_INFOFRAME_SIZE;
+> > > +	unsigned char buf[HDMI_INFOFRAME_HEADER_SIZE +
+> > > HDMI_DRM_INFOFRAME_SIZE];
+> > > +	ssize_t len;
+> > > +
+> > > +	if (size < length)
+> > > +		return -ENOSPC;
+> > > +
+> > > +	memset(sdp, 0, size);
+> > > +
+> > > +	len = hdmi_drm_infoframe_pack_only(drm_infoframe, buf,
+> > > sizeof(buf));
+> > > +	if (len < 0) {
+> > > +		DRM_DEBUG_KMS("buffer size is smaller than hdr metadata
+> > > infoframe\n");
+> > > +		return -ENOSPC;
+> > > +	}
+> > > +
+> > > +	if (len != infoframe_size) {
+> > > +		DRM_DEBUG_KMS("wrong static hdr metadata size\n");
+> > > +		return -ENOSPC;
+> > > +	}
+> > > +
+> > > +	/*
+> > > +	 * Set up the infoframe sdp packet for HDR static metadata.
+> > > +	 * Prepare VSC Header for SU as per DP 1.4a spec,
+> > > +	 * Table 2-100 and Table 2-101
+> > > +	 */
+> > > +
+> > > +	/* Secondary-Data Packet ID, 00h for non-Audio INFOFRAME */
+> > > +	sdp->sdp_header.HB0 = 0;
+> > > +	/*
+> > > +	 * Packet Type 80h + Non-audio INFOFRAME Type value
+> > > +	 * HDMI_INFOFRAME_TYPE_DRM: 0x87
+> > > +	 * - 80h + Non-audio INFOFRAME Type value
+> > > +	 * - InfoFrame Type: 0x07
+> > > +	 *    [CTA-861-G Table-42 Dynamic Range and Mastering
+> > > InfoFrame]
+> > > +	 */
+> > > +	sdp->sdp_header.HB1 = drm_infoframe->type;
+> > > +	/*
+> > > +	 * Least Significant Eight Bits of (Data Byte Count – 1)
+> > > +	 * infoframe_size - 1
+> > > +	 */
+> > > +	sdp->sdp_header.HB2 = 0x1D;
+> > > +	/* INFOFRAME SDP Version Number */
+> > > +	sdp->sdp_header.HB3 = (0x13 << 2);
+> > > +	/* CTA Header Byte 2 (INFOFRAME Version Number) */
+> > > +	sdp->db[0] = drm_infoframe->version;
+> > > +	/* CTA Header Byte 3 (Length of INFOFRAME):
+> > > HDMI_DRM_INFOFRAME_SIZE */
+> > > +	sdp->db[1] = drm_infoframe->length;
+> > > +	/*
+> > > +	 * Copy HDMI_DRM_INFOFRAME_SIZE size from a buffer after
+> >
+> > Comment Looks incomplete.
+> >
+> I missed some comments, I'll update it.
+> > > +	 */
+> > > +	BUILD_BUG_ON(sizeof(sdp->db) < HDMI_DRM_INFOFRAME_SIZE + 2);
+> > > +	memcpy(&sdp->db[2], &buf[HDMI_INFOFRAME_HEADER_SIZE],
+> > > +	       HDMI_DRM_INFOFRAME_SIZE);
+> > > +
+> > > +	/*
+> > > +	 * Size of DP infoframe sdp packet for HDR static metadata is
+> > > consist of
+> >
+> > Drop "is"
+> >
+> Includes this, I'll polish polish commit message and comments.
+> 
+> > > +	 * - DP SDP Header(struct dp_sdp_header): 4 bytes
+> > > +	 * - Two Data Blocks: 2 bytes
+> > > +	 *    CTA Header Byte2 (INFOFRAME Version Number)
+> > > +	 *    CTA Header Byte3 (Length of INFOFRAME)
+> > > +	 * - HDMI_DRM_INFOFRAME_SIZE: 26 bytes
+> > > +	 *
+> > > +	 * Prior to GEN11's GMP register size is identical to DP HDR
+> > > static metadata
+> > > +	 * infoframe size. But GEN11+ has larger than that size,
+> > > write_infoframe
+> > > +	 * will pad rest of the size.
+> > > +	 */
+> > > +	return sizeof(struct dp_sdp_header) + 2 +
+> > > HDMI_DRM_INFOFRAME_SIZE; }
+> > > +
+> > > +static void intel_write_dp_sdp(struct intel_encoder *encoder,
+> > > +			       const struct intel_crtc_state
+> > > *crtc_state,
+> > > +			       unsigned int type)
+> > > +{
+> > > +	struct intel_digital_port *intel_dig_port =
+> > > enc_to_dig_port(encoder);
+> > > +	struct dp_sdp sdp = {};
+> > > +	ssize_t len;
+> > > +
+> > > +	if ((crtc_state->infoframes.enable &
+> > > +	     intel_hdmi_infoframe_enable(type)) == 0)
+> > > +		return;
+> > > +
+> > > +	switch (type) {
+> > > +	case DP_SDP_VSC:
+> > > +		len = intel_dp_vsc_sdp_pack(&crtc_state-
+> > > >infoframes.vsc, &sdp,
+> > > +					    sizeof(sdp));
+> > > +		break;
+> > > +	case HDMI_PACKET_TYPE_GAMUT_METADATA:
+> > > +		len =
+> > > intel_dp_hdr_metadata_infoframe_sdp_pack(&crtc_state-
+> > > > infoframes.drm.drm,
+> > > +							       &sdp,
+> > > sizeof(sdp));
+> > > +		break;
+> > > +	default:
+> > > +		MISSING_CASE(type);
+> > > +		break;
+> > > +	}
+> > > +
+> > > +	if (WARN_ON(len < 0))
+> > > +		return;
+> > > +
+> > > +	intel_dig_port->write_infoframe(encoder, crtc_state, type,
+> > > &sdp, len);
+> > > +}
+> > > +
+> > > +void intel_dp_set_infoframes(struct intel_encoder *encoder,
+> > > +			     bool enable,
+> > > +			     const struct intel_crtc_state *crtc_state,
+> > > +			     const struct drm_connector_state
+> > > *conn_state) {
+> > > +	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
+> > > +	struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
+> > > +	i915_reg_t reg = HSW_TVIDEO_DIP_CTL(crtc_state-
+> > > >cpu_transcoder);
+> > > +	u32 dip_enable = VIDEO_DIP_ENABLE_AVI_HSW |
+> > > VIDEO_DIP_ENABLE_GCP_HSW |
+> > > +			 VIDEO_DIP_ENABLE_VS_HSW |
+> > > VIDEO_DIP_ENABLE_GMP_HSW |
+> > > +			 VIDEO_DIP_ENABLE_SPD_HSW |
+> > > VIDEO_DIP_ENABLE_DRM_GLK;
+> > > +	u32 val = I915_READ(reg);
+> > > +
+> > > +	/* TODO: Add DSC case (DIP_ENABLE_PPS) */
+> > > +	/* When PSR is enabled, this routine doesn't disable VSC DIP */
+> > > +	if (intel_psr_enabled(intel_dp))
+> > > +		val &= ~dip_enable;
+> > > +	else
+> > > +		val &= ~(dip_enable | VIDEO_DIP_ENABLE_VSC_HSW);
+> >
+> > dip_enable has VIDEO_DIP_ENABLE_VSC_HSW already in it. Please fix
+> > this.
+> >
+> Declaring of dip_enable does not include VIDEO_DIP_ENABLE_VSC_HSW.
+> therefore we need it here to disable VSC SDP DIP.
+
+Oh ok, Took VS for VSC. Scratch my earlier comment, change is correct.
+
+> > > +
+> > > +	if (!enable) {
+> > > +		I915_WRITE(reg, val);
+> > > +		POSTING_READ(reg);
+> > > +		return;
+> > > +	}
+> > > +
+> > > +	I915_WRITE(reg, val);
+> > > +	POSTING_READ(reg);
+> > > +
+> > > +	/* When PSR is enabled, VSC SDP is handled by PSR routine */
+> > > +	if (!intel_psr_enabled(intel_dp))
+> > > +		intel_write_dp_sdp(encoder, crtc_state, DP_SDP_VSC);
+> > > +
+> > > +	intel_write_dp_sdp(encoder, crtc_state,
+> > > +HDMI_PACKET_TYPE_GAMUT_METADATA); }
+> > > +
+> > >  static void
+> > >  intel_dp_setup_vsc_sdp(struct intel_dp *intel_dp,
+> > >  		       const struct intel_crtc_state *crtc_state, diff --git
+> > > a/drivers/gpu/drm/i915/display/intel_dp.h
+> > > b/drivers/gpu/drm/i915/display/intel_dp.h
+> > > index 3da166054788..0dc09a463ee1 100644
+> > > --- a/drivers/gpu/drm/i915/display/intel_dp.h
+> > > +++ b/drivers/gpu/drm/i915/display/intel_dp.h
+> > > @@ -116,6 +116,9 @@ void intel_dp_vsc_enable(struct intel_dp
+> > > *intel_dp,  void intel_dp_hdr_metadata_enable(struct intel_dp
+> > > *intel_dp,
+> > >  				  const struct intel_crtc_state *crtc_state,
+> > >  				  const struct drm_connector_state *conn_state);
+> > > +void intel_dp_set_infoframes(struct intel_encoder *encoder, bool
+> > > enable,
+> > > +			     const struct intel_crtc_state *crtc_state,
+> > > +			     const struct drm_connector_state
+> > > *conn_state);
+> > >  bool intel_digital_port_connected(struct intel_encoder *encoder);
+> > >
+> > >  static inline unsigned int intel_dp_unused_lane_mask(int
+> > > lane_count)
+> > > --
+> > > 2.24.1
+> > >
+> > > _______________________________________________
+> > > dri-devel mailing list
+> > > dri-devel@lists.freedesktop.org
+> > > https://lists.freedesktop.org/mailman/listinfo/dri-devel
+_______________________________________________
+Intel-gfx mailing list
+Intel-gfx@lists.freedesktop.org
+https://lists.freedesktop.org/mailman/listinfo/intel-gfx
\ No newline at end of file
diff --git a/a/content_digest b/N2/content_digest
index cba0622..71eb336 100644
--- a/a/content_digest
+++ b/N2/content_digest
@@ -14,7 +14,7 @@
   "From\0Shankar, Uma <uma.shankar\@intel.com>\0"
 ]
 [
-  "Subject\0RE: [PATCH v3 04/17] drm/i915/dp: Add writing of DP SDPs (Secondary Data Packet)\0"
+  "Subject\0Re: [Intel-gfx] [PATCH v3 04/17] drm/i915/dp: Add writing of DP SDPs (Secondary Data Packet)\0"
 ]
 [
   "Date\0Mon, 10 Feb 2020 08:16:15 +0000\0"
@@ -35,220 +35,354 @@
   "b\0"
 ]
 [
-  "DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTXVuLCBHd2FuLWd5ZW9u\n",
-  "ZyA8Z3dhbi1neWVvbmcubXVuQGludGVsLmNvbT4NCj4gU2VudDogU3VuZGF5LCBGZWJydWFyeSA5\n",
-  "LCAyMDIwIDk6MDUgQU0NCj4gVG86IFNoYW5rYXIsIFVtYSA8dW1hLnNoYW5rYXJAaW50ZWwuY29t\n",
-  "PjsgaW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZw0KPiBDYzogZHJpLWRldmVsQGxpc3Rz\n",
-  "LmZyZWVkZXNrdG9wLm9yZzsgbGludXgtZmJkZXZAdmdlci5rZXJuZWwub3JnDQo+IFN1YmplY3Q6\n",
-  "IFJlOiBbUEFUQ0ggdjMgMDQvMTddIGRybS9pOTE1L2RwOiBBZGQgd3JpdGluZyBvZiBEUCBTRFBz\n",
-  "IChTZWNvbmRhcnkgRGF0YQ0KPiBQYWNrZXQpDQo+IA0KPiBPbiBXZWQsIDIwMjAtMDItMDUgYXQg\n",
-  "MjE6MzkgKzA1MzAsIFNoYW5rYXIsIFVtYSB3cm90ZToNCj4gPiA+IC0tLS0tT3JpZ2luYWwgTWVz\n",
-  "c2FnZS0tLS0tDQo+ID4gPiBGcm9tOiBkcmktZGV2ZWwgPGRyaS1kZXZlbC1ib3VuY2VzQGxpc3Rz\n",
-  "LmZyZWVkZXNrdG9wLm9yZz4gT24gQmVoYWxmDQo+ID4gPiBPZiBHd2FuLSBneWVvbmcgTXVuDQo+\n",
-  "ID4gPiBTZW50OiBUdWVzZGF5LCBGZWJydWFyeSA0LCAyMDIwIDQ6NTAgQU0NCj4gPiA+IFRvOiBp\n",
-  "bnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnDQo+ID4gPiBDYzogbGludXgtZmJkZXZAdmdl\n",
-  "ci5rZXJuZWwub3JnOyBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnDQo+ID4gPiBTdWJq\n",
-  "ZWN0OiBbUEFUQ0ggdjMgMDQvMTddIGRybS9pOTE1L2RwOiBBZGQgd3JpdGluZyBvZiBEUCBTRFBz\n",
-  "DQo+ID4gPiAoU2Vjb25kYXJ5IERhdGENCj4gPiA+IFBhY2tldCkNCj4gPg0KPiA+IERyb3AgdGhp\n",
-  "bmdzIGluICgpLCBub3QgbmVlZGVkLg0KPiA+DQo+ID4gPiBJdCBhZGRzIHJvdXRpbmVzIHRoYXQg\n",
-  "d3JpdGUgRFAgVlNDIFNEUCBhbmQgRFAgSERSIE1ldGFkYXRhIEluZm9mcmFtZQ0KPiA+ID4gU0RQ\n",
-  "Lg0KPiA+ID4gSW4gb3JkZXIgdG8gcGFjayBEUCBWU0MgU0RQLCBpdCBhZGRzIGludGVsX2RwX3Zz\n",
-  "Y19zZHBfcGFjaygpDQo+ID4gPiBmdW5jdGlvbi4NCj4gPiA+IEl0IGZvbGxvd3MgRFAgMS40YSBz\n",
-  "cGVjLiBbVGFibGUgMi0xMTY6IFZTQyBTRFAgSGVhZGVyIEJ5dGVzXSBhbmQNCj4gPiA+IFtUYWJs\n",
-  "ZSAyLTExNzogVlNDIFNEUCBQYXlsb2FkIGZvciBEQjE2IHRocm91Z2ggREIxOF0NCj4gPiA+DQo+\n",
-  "ID4gPiBJbiBvcmRlciB0byBwYWNrIERQIEhEUiBNZXRhZGF0YSBJbmZvZnJhbWUgU0RQLCBpdCBh\n",
-  "ZGRzDQo+ID4gPiBpbnRlbF9kcF9oZHJfbWV0YWRhdGFfaW5mb2ZyYW1lX3NkcF9wYWNrKCkgZnVu\n",
-  "Y3Rpb24uDQo+ID4gPiBBbmQgaXQgZm9sbG93cyBEUCAxLjRhIHNwZWMuDQo+ID4gPiAoW1RhYmxl\n",
-  "IDItMTI1OiBJTkZPRlJBTUUgU0RQIHYxLjIgSGVhZGVyIEJ5dGVzXSBhbmQgW1RhYmxlIDItMTI2\n",
-  "Og0KPiA+ID4gSU5GT0ZSQU1FDQo+ID4gPiBTRFAgdjEuMiBQYXlsb2FkIERhdGEgQnl0ZXMgLSBE\n",
-  "QjAgdGhyb3VnaCBEQjMxXSkgYW5kIENUQS04NjEtRyBzcGVjLg0KPiA+ID4gW1RhYmxlLTQyIER5\n",
-  "bmFtaWMgUmFuZ2UgYW5kIE1hc3RlcmluZyBJbmZvRnJhbWVdLg0KPiA+ID4NCj4gPiA+IEEgbWFj\n",
-  "aGFuaXNtIGFuZCBhIG5hbWluZyBydWxlIG9mIGludGVsX2RwX3NldF9pbmZvZnJhbWVzKCkgZnVu\n",
-  "Y3Rpb24NCj4gPiA+IHJlZmVyZW5jZXMNCj4gPg0KPiA+IFR5cG8gaW4gbWVjaGFuaXNtLg0KPiA+\n",
-  "DQo+ID4gPiBpbnRlbF9lbmNvZGVyLT5zZXRfaW5mb2ZyYW1lcygpIG9mIGludGVsX2hkbWkuYyAu\n",
-  "DQo+ID4gPiBWU0MgU0RQIGlzIHVzZWQgZm9yIFBTUiBhbmQgUGl4ZWwgRW5jb2RpbmcgYW5kIENv\n",
-  "bG9yaW1ldHJ5IEZvcm1hdHMNCj4gPiA+IGNhc2VzLg0KPiA+ID4gQmVjYXVzZSBQU1Igcm91dGlu\n",
-  "ZSBoYXMgaXRzIG93biByb3V0aW5lIG9mIHdyaXRpbmcgYSBWU0MgU0RQLCB3aGVuDQo+ID4gPiB0\n",
-  "aGUgUFNSIGlzIGVuYWJsZWQsIGludGVsX2RwX3NldF9pbmZvZnJhbWVzKCkgZG9lcyBub3Qgd3Jp\n",
-  "dGUgYSBWU0MNCj4gPiA+IFNEUC4NCj4gPiA+DQo+ID4gPiB2MzoNCj4gPiA+ICAgLSBFeHBsaWNp\n",
-  "dGx5IGRpc2FibGUgdW51c2VkIERJUHMgKEFWSSwgR0NQLCBWUywgU1BELCBEUk0uIFRoZXkNCj4g\n",
-  "PiA+IHdpbGwgYmUNCj4gPiA+ICAgICB1c2VkIGZvciBIRE1JKSwgd2hlbiBpbnRlbF9kcF9zZXRf\n",
-  "aW5mb2ZyYW1lcygpIGZ1bmN0aW9uIHdpbGwgYmUNCj4gPiA+IGNhbGxlZC4NCj4gPiA+ICAgLSBS\n",
-  "ZXBsYWNlIGEgc3RydWN0dXJlIG5hbWUgdG8gZHJtX2RwX3ZzY19zZHAgZnJvbQ0KPiA+ID4gaW50\n",
-  "ZWxfZHBfdnNjX3NkcC4NCj4gPiA+DQo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBHd2FuLWd5ZW9uZyBN\n",
-  "dW4gPGd3YW4tZ3llb25nLm11bkBpbnRlbC5jb20+DQo+ID4gPiAtLS0NCj4gPiA+ICBkcml2ZXJz\n",
-  "L2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2RwLmMgfCAxOTQNCj4gPiA+ICsrKysrKysrKysr\n",
-  "KysrKysrKysrKysrKw0KPiA+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxf\n",
-  "ZHAuaCB8ICAgMyArDQo+ID4gPiAgMiBmaWxlcyBjaGFuZ2VkLCAxOTcgaW5zZXJ0aW9ucygrKQ0K\n",
-  "PiA+ID4NCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2lu\n",
-  "dGVsX2RwLmMNCj4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5j\n",
-  "DQo+ID4gPiBpbmRleCBiMjY1YjVjNTk5ZjIuLmRkN2U1NTg4MDAxZSAxMDA2NDQNCj4gPiA+IC0t\n",
-  "LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuYw0KPiA+ID4gKysrIGIv\n",
-  "ZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5jDQo+ID4gPiBAQCAtNDczMSw2\n",
-  "ICs0NzMxLDIwMCBAQCBpbnRlbF9kcF9uZWVkc192c2Nfc2RwKGNvbnN0IHN0cnVjdA0KPiA+ID4g\n",
-  "aW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwNCj4gPiA+ICAJcmV0dXJuIGZhbHNlOw0KPiA+\n",
-  "ID4gIH0NCj4gPiA+DQo+ID4gPiArc3RhdGljIHNzaXplX3QgaW50ZWxfZHBfdnNjX3NkcF9wYWNr\n",
-  "KGNvbnN0IHN0cnVjdCBkcm1fZHBfdnNjX3NkcA0KPiA+ID4gKnZzYywNCj4gPiA+ICsJCQkJICAg\n",
-  "ICBzdHJ1Y3QgZHBfc2RwICpzZHAsIHNpemVfdCBzaXplKSB7DQo+ID4gPiArCXNpemVfdCBsZW5n\n",
-  "dGggPSBzaXplb2Yoc3RydWN0IGRwX3NkcCk7DQo+ID4gPiArDQo+ID4gPiArCWlmIChzaXplIDwg\n",
-  "bGVuZ3RoKQ0KPiA+ID4gKwkJcmV0dXJuIC1FTk9TUEM7DQo+ID4gPiArDQo+ID4gPiArCW1lbXNl\n",
-  "dChzZHAsIDAsIHNpemUpOw0KPiA+ID4gKw0KPiA+ID4gKwkvKg0KPiA+ID4gKwkgKiBQcmVwYXJl\n",
-  "IFZTQyBIZWFkZXIgZm9yIFNVIGFzIHBlciBEUCAxLjRhIHNwZWMsIFRhYmxlIDItMTE5DQo+ID4g\n",
-  "PiArCSAqIFZTQyBTRFAgSGVhZGVyIEJ5dGVzDQo+ID4gPiArCSAqLw0KPiA+ID4gKwlzZHAtPnNk\n",
-  "cF9oZWFkZXIuSEIwID0gMDsgLyogU2Vjb25kYXJ5LURhdGEgUGFja2V0IElEID0gMCAqLw0KPiA+\n",
-  "ID4gKwlzZHAtPnNkcF9oZWFkZXIuSEIxID0gdnNjLT5zZHBfdHlwZTsgLyogU2Vjb25kYXJ5LWRh\n",
-  "dGEgUGFja2V0DQo+ID4gPiBUeXBlICovDQo+ID4gPiArCXNkcC0+c2RwX2hlYWRlci5IQjIgPSB2\n",
-  "c2MtPnJldmlzaW9uOyAvKiBSZXZpc2lvbiBOdW1iZXIgKi8NCj4gPiA+ICsJc2RwLT5zZHBfaGVh\n",
-  "ZGVyLkhCMyA9IHZzYy0+bGVuZ3RoOyAvKiBOdW1iZXIgb2YgVmFsaWQgRGF0YQ0KPiA+ID4gQnl0\n",
-  "ZXMgKi8NCj4gPiA+ICsNCj4gPiA+ICsJLyogVlNDIFNEUCBQYXlsb2FkIGZvciBEQjE2IHRocm91\n",
-  "Z2ggREIxOCAqLw0KPiA+ID4gKwkvKiBQaXhlbCBFbmNvZGluZyBhbmQgQ29sb3JpbWV0cnkgRm9y\n",
-  "bWF0cyAgKi8NCj4gPiA+ICsJc2RwLT5kYlsxNl0gPSAodnNjLT5jb2xvcnNwYWNlICYgMHhmKSA8\n",
-  "PCA0OyAvKiBEQjE2Wzc6NF0gKi8NCj4gPiA+ICsJc2RwLT5kYlsxNl0gfD0gdnNjLT5jb2xvcmlt\n",
-  "ZXRyeSAmIDB4ZjsgLyogREIxNlszOjBdICovDQo+ID4gPiArDQo+ID4gPiArCXN3aXRjaCAodnNj\n",
-  "LT5icGMpIHsNCj4gPiA+ICsJY2FzZSA4Og0KPiA+ID4gKwkJc2RwLT5kYlsxN10gPSAweDE7IC8q\n",
-  "IERCMTdbMzowXSAqLw0KPiA+ID4gKwkJYnJlYWs7DQo+ID4gPiArCWNhc2UgMTA6DQo+ID4gPiAr\n",
-  "CQlzZHAtPmRiWzE3XSA9IDB4MjsNCj4gPiA+ICsJCWJyZWFrOw0KPiA+ID4gKwljYXNlIDEyOg0K\n",
-  "PiA+ID4gKwkJc2RwLT5kYlsxN10gPSAweDM7DQo+ID4gPiArCQlicmVhazsNCj4gPiA+ICsJY2Fz\n",
-  "ZSAxNjoNCj4gPiA+ICsJCXNkcC0+ZGJbMTddID0gMHg0Ow0KPiA+ID4gKwkJYnJlYWs7DQo+ID4g\n",
-  "PiArCWRlZmF1bHQ6DQo+ID4gPiArCQlNSVNTSU5HX0NBU0UodnNjLT5icGMpOw0KPiA+DQo+ID4g\n",
-  "NmJwYyBpcyBub3QgaGFuZGxlZCBoZXJlLCBhZGQgdGhhdCBhcyB3ZWxsLg0KPiA+DQo+IFllcywg\n",
-  "SSBtaXNzZWQgNmJwYyBjYXNlLCBJJ2xsIHVwZGF0ZSBpdC4NCj4gPiA+ICsJCWJyZWFrOw0KPiA+\n",
-  "ID4gKwl9DQo+ID4gPiArCS8qIER5bmFtaWMgUmFuZ2UgYW5kIENvbXBvbmVudCBCaXQgRGVwdGgg\n",
-  "Ki8NCj4gPiA+ICsJaWYgKHZzYy0+ZHluYW1pY19yYW5nZSA9PSBEUF9EWU5BTUlDX1JBTkdFX0NU\n",
-  "QSkNCj4gPiA+ICsJCXNkcC0+ZGJbMTddIHw9IDB4ODA7ICAvKiBEQjE3WzddICovDQo+ID4gPiAr\n",
-  "DQo+ID4gPiArCS8qIENvbnRlbnQgVHlwZSAqLw0KPiA+ID4gKwlzZHAtPmRiWzE4XSA9IHZzYy0+\n",
-  "Y29udGVudF90eXBlICYgMHg3Ow0KPiA+ID4gKw0KPiA+ID4gKwlyZXR1cm4gbGVuZ3RoOw0KPiA+\n",
-  "ID4gK30NCj4gPiA+ICsNCj4gPiA+ICtzdGF0aWMgc3NpemVfdA0KPiA+ID4gK2ludGVsX2RwX2hk\n",
-  "cl9tZXRhZGF0YV9pbmZvZnJhbWVfc2RwX3BhY2soY29uc3Qgc3RydWN0DQo+ID4gPiBoZG1pX2Ry\n",
-  "bV9pbmZvZnJhbWUNCj4gPiA+ICpkcm1faW5mb2ZyYW1lLA0KPiA+ID4gKwkJCQkJIHN0cnVjdCBk\n",
-  "cF9zZHAgKnNkcCwNCj4gPiA+ICsJCQkJCSBzaXplX3Qgc2l6ZSkNCj4gPiA+ICt7DQo+ID4gPiAr\n",
-  "CXNpemVfdCBsZW5ndGggPSBzaXplb2Yoc3RydWN0IGRwX3NkcCk7DQo+ID4gPiArCWNvbnN0IGlu\n",
-  "dCBpbmZvZnJhbWVfc2l6ZSA9IEhETUlfSU5GT0ZSQU1FX0hFQURFUl9TSVpFICsNCj4gPiA+IEhE\n",
-  "TUlfRFJNX0lORk9GUkFNRV9TSVpFOw0KPiA+ID4gKwl1bnNpZ25lZCBjaGFyIGJ1ZltIRE1JX0lO\n",
-  "Rk9GUkFNRV9IRUFERVJfU0laRSArDQo+ID4gPiBIRE1JX0RSTV9JTkZPRlJBTUVfU0laRV07DQo+\n",
-  "ID4gPiArCXNzaXplX3QgbGVuOw0KPiA+ID4gKw0KPiA+ID4gKwlpZiAoc2l6ZSA8IGxlbmd0aCkN\n",
-  "Cj4gPiA+ICsJCXJldHVybiAtRU5PU1BDOw0KPiA+ID4gKw0KPiA+ID4gKwltZW1zZXQoc2RwLCAw\n",
-  "LCBzaXplKTsNCj4gPiA+ICsNCj4gPiA+ICsJbGVuID0gaGRtaV9kcm1faW5mb2ZyYW1lX3BhY2tf\n",
-  "b25seShkcm1faW5mb2ZyYW1lLCBidWYsDQo+ID4gPiBzaXplb2YoYnVmKSk7DQo+ID4gPiArCWlm\n",
-  "IChsZW4gPCAwKSB7DQo+ID4gPiArCQlEUk1fREVCVUdfS01TKCJidWZmZXIgc2l6ZSBpcyBzbWFs\n",
-  "bGVyIHRoYW4gaGRyIG1ldGFkYXRhDQo+ID4gPiBpbmZvZnJhbWVcbiIpOw0KPiA+ID4gKwkJcmV0\n",
-  "dXJuIC1FTk9TUEM7DQo+ID4gPiArCX0NCj4gPiA+ICsNCj4gPiA+ICsJaWYgKGxlbiAhPSBpbmZv\n",
-  "ZnJhbWVfc2l6ZSkgew0KPiA+ID4gKwkJRFJNX0RFQlVHX0tNUygid3Jvbmcgc3RhdGljIGhkciBt\n",
-  "ZXRhZGF0YSBzaXplXG4iKTsNCj4gPiA+ICsJCXJldHVybiAtRU5PU1BDOw0KPiA+ID4gKwl9DQo+\n",
-  "ID4gPiArDQo+ID4gPiArCS8qDQo+ID4gPiArCSAqIFNldCB1cCB0aGUgaW5mb2ZyYW1lIHNkcCBw\n",
-  "YWNrZXQgZm9yIEhEUiBzdGF0aWMgbWV0YWRhdGEuDQo+ID4gPiArCSAqIFByZXBhcmUgVlNDIEhl\n",
-  "YWRlciBmb3IgU1UgYXMgcGVyIERQIDEuNGEgc3BlYywNCj4gPiA+ICsJICogVGFibGUgMi0xMDAg\n",
-  "YW5kIFRhYmxlIDItMTAxDQo+ID4gPiArCSAqLw0KPiA+ID4gKw0KPiA+ID4gKwkvKiBTZWNvbmRh\n",
-  "cnktRGF0YSBQYWNrZXQgSUQsIDAwaCBmb3Igbm9uLUF1ZGlvIElORk9GUkFNRSAqLw0KPiA+ID4g\n",
-  "KwlzZHAtPnNkcF9oZWFkZXIuSEIwID0gMDsNCj4gPiA+ICsJLyoNCj4gPiA+ICsJICogUGFja2V0\n",
-  "IFR5cGUgODBoICsgTm9uLWF1ZGlvIElORk9GUkFNRSBUeXBlIHZhbHVlDQo+ID4gPiArCSAqIEhE\n",
-  "TUlfSU5GT0ZSQU1FX1RZUEVfRFJNOiAweDg3DQo+ID4gPiArCSAqIC0gODBoICsgTm9uLWF1ZGlv\n",
-  "IElORk9GUkFNRSBUeXBlIHZhbHVlDQo+ID4gPiArCSAqIC0gSW5mb0ZyYW1lIFR5cGU6IDB4MDcN\n",
-  "Cj4gPiA+ICsJICogICAgW0NUQS04NjEtRyBUYWJsZS00MiBEeW5hbWljIFJhbmdlIGFuZCBNYXN0\n",
-  "ZXJpbmcNCj4gPiA+IEluZm9GcmFtZV0NCj4gPiA+ICsJICovDQo+ID4gPiArCXNkcC0+c2RwX2hl\n",
-  "YWRlci5IQjEgPSBkcm1faW5mb2ZyYW1lLT50eXBlOw0KPiA+ID4gKwkvKg0KPiA+ID4gKwkgKiBM\n",
-  "ZWFzdCBTaWduaWZpY2FudCBFaWdodCBCaXRzIG9mIChEYXRhIEJ5dGUgQ291bnQg4oCTIDEpDQo+\n",
-  "ID4gPiArCSAqIGluZm9mcmFtZV9zaXplIC0gMQ0KPiA+ID4gKwkgKi8NCj4gPiA+ICsJc2RwLT5z\n",
-  "ZHBfaGVhZGVyLkhCMiA9IDB4MUQ7DQo+ID4gPiArCS8qIElORk9GUkFNRSBTRFAgVmVyc2lvbiBO\n",
-  "dW1iZXIgKi8NCj4gPiA+ICsJc2RwLT5zZHBfaGVhZGVyLkhCMyA9ICgweDEzIDw8IDIpOw0KPiA+\n",
-  "ID4gKwkvKiBDVEEgSGVhZGVyIEJ5dGUgMiAoSU5GT0ZSQU1FIFZlcnNpb24gTnVtYmVyKSAqLw0K\n",
-  "PiA+ID4gKwlzZHAtPmRiWzBdID0gZHJtX2luZm9mcmFtZS0+dmVyc2lvbjsNCj4gPiA+ICsJLyog\n",
-  "Q1RBIEhlYWRlciBCeXRlIDMgKExlbmd0aCBvZiBJTkZPRlJBTUUpOg0KPiA+ID4gSERNSV9EUk1f\n",
-  "SU5GT0ZSQU1FX1NJWkUgKi8NCj4gPiA+ICsJc2RwLT5kYlsxXSA9IGRybV9pbmZvZnJhbWUtPmxl\n",
-  "bmd0aDsNCj4gPiA+ICsJLyoNCj4gPiA+ICsJICogQ29weSBIRE1JX0RSTV9JTkZPRlJBTUVfU0la\n",
-  "RSBzaXplIGZyb20gYSBidWZmZXIgYWZ0ZXINCj4gPg0KPiA+IENvbW1lbnQgTG9va3MgaW5jb21w\n",
-  "bGV0ZS4NCj4gPg0KPiBJIG1pc3NlZCBzb21lIGNvbW1lbnRzLCBJJ2xsIHVwZGF0ZSBpdC4NCj4g\n",
-  "PiA+ICsJICovDQo+ID4gPiArCUJVSUxEX0JVR19PTihzaXplb2Yoc2RwLT5kYikgPCBIRE1JX0RS\n",
-  "TV9JTkZPRlJBTUVfU0laRSArIDIpOw0KPiA+ID4gKwltZW1jcHkoJnNkcC0+ZGJbMl0sICZidWZb\n",
-  "SERNSV9JTkZPRlJBTUVfSEVBREVSX1NJWkVdLA0KPiA+ID4gKwkgICAgICAgSERNSV9EUk1fSU5G\n",
-  "T0ZSQU1FX1NJWkUpOw0KPiA+ID4gKw0KPiA+ID4gKwkvKg0KPiA+ID4gKwkgKiBTaXplIG9mIERQ\n",
-  "IGluZm9mcmFtZSBzZHAgcGFja2V0IGZvciBIRFIgc3RhdGljIG1ldGFkYXRhIGlzDQo+ID4gPiBj\n",
-  "b25zaXN0IG9mDQo+ID4NCj4gPiBEcm9wICJpcyINCj4gPg0KPiBJbmNsdWRlcyB0aGlzLCBJJ2xs\n",
-  "IHBvbGlzaCBwb2xpc2ggY29tbWl0IG1lc3NhZ2UgYW5kIGNvbW1lbnRzLg0KPiANCj4gPiA+ICsJ\n",
-  "ICogLSBEUCBTRFAgSGVhZGVyKHN0cnVjdCBkcF9zZHBfaGVhZGVyKTogNCBieXRlcw0KPiA+ID4g\n",
-  "KwkgKiAtIFR3byBEYXRhIEJsb2NrczogMiBieXRlcw0KPiA+ID4gKwkgKiAgICBDVEEgSGVhZGVy\n",
-  "IEJ5dGUyIChJTkZPRlJBTUUgVmVyc2lvbiBOdW1iZXIpDQo+ID4gPiArCSAqICAgIENUQSBIZWFk\n",
-  "ZXIgQnl0ZTMgKExlbmd0aCBvZiBJTkZPRlJBTUUpDQo+ID4gPiArCSAqIC0gSERNSV9EUk1fSU5G\n",
-  "T0ZSQU1FX1NJWkU6IDI2IGJ5dGVzDQo+ID4gPiArCSAqDQo+ID4gPiArCSAqIFByaW9yIHRvIEdF\n",
-  "TjExJ3MgR01QIHJlZ2lzdGVyIHNpemUgaXMgaWRlbnRpY2FsIHRvIERQIEhEUg0KPiA+ID4gc3Rh\n",
-  "dGljIG1ldGFkYXRhDQo+ID4gPiArCSAqIGluZm9mcmFtZSBzaXplLiBCdXQgR0VOMTErIGhhcyBs\n",
-  "YXJnZXIgdGhhbiB0aGF0IHNpemUsDQo+ID4gPiB3cml0ZV9pbmZvZnJhbWUNCj4gPiA+ICsJICog\n",
-  "d2lsbCBwYWQgcmVzdCBvZiB0aGUgc2l6ZS4NCj4gPiA+ICsJICovDQo+ID4gPiArCXJldHVybiBz\n",
-  "aXplb2Yoc3RydWN0IGRwX3NkcF9oZWFkZXIpICsgMiArDQo+ID4gPiBIRE1JX0RSTV9JTkZPRlJB\n",
-  "TUVfU0laRTsgfQ0KPiA+ID4gKw0KPiA+ID4gK3N0YXRpYyB2b2lkIGludGVsX3dyaXRlX2RwX3Nk\n",
-  "cChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwNCj4gPiA+ICsJCQkgICAgICAgY29uc3Qg\n",
-  "c3RydWN0IGludGVsX2NydGNfc3RhdGUNCj4gPiA+ICpjcnRjX3N0YXRlLA0KPiA+ID4gKwkJCSAg\n",
-  "ICAgICB1bnNpZ25lZCBpbnQgdHlwZSkNCj4gPiA+ICt7DQo+ID4gPiArCXN0cnVjdCBpbnRlbF9k\n",
-  "aWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0ID0NCj4gPiA+IGVuY190b19kaWdfcG9ydChlbmNv\n",
-  "ZGVyKTsNCj4gPiA+ICsJc3RydWN0IGRwX3NkcCBzZHAgPSB7fTsNCj4gPiA+ICsJc3NpemVfdCBs\n",
-  "ZW47DQo+ID4gPiArDQo+ID4gPiArCWlmICgoY3J0Y19zdGF0ZS0+aW5mb2ZyYW1lcy5lbmFibGUg\n",
-  "Jg0KPiA+ID4gKwkgICAgIGludGVsX2hkbWlfaW5mb2ZyYW1lX2VuYWJsZSh0eXBlKSkgPT0gMCkN\n",
-  "Cj4gPiA+ICsJCXJldHVybjsNCj4gPiA+ICsNCj4gPiA+ICsJc3dpdGNoICh0eXBlKSB7DQo+ID4g\n",
-  "PiArCWNhc2UgRFBfU0RQX1ZTQzoNCj4gPiA+ICsJCWxlbiA9IGludGVsX2RwX3ZzY19zZHBfcGFj\n",
-  "aygmY3J0Y19zdGF0ZS0NCj4gPiA+ID5pbmZvZnJhbWVzLnZzYywgJnNkcCwNCj4gPiA+ICsJCQkJ\n",
-  "CSAgICBzaXplb2Yoc2RwKSk7DQo+ID4gPiArCQlicmVhazsNCj4gPiA+ICsJY2FzZSBIRE1JX1BB\n",
-  "Q0tFVF9UWVBFX0dBTVVUX01FVEFEQVRBOg0KPiA+ID4gKwkJbGVuID0NCj4gPiA+IGludGVsX2Rw\n",
-  "X2hkcl9tZXRhZGF0YV9pbmZvZnJhbWVfc2RwX3BhY2soJmNydGNfc3RhdGUtDQo+ID4gPiA+IGlu\n",
-  "Zm9mcmFtZXMuZHJtLmRybSwNCj4gPiA+ICsJCQkJCQkJICAgICAgICZzZHAsDQo+ID4gPiBzaXpl\n",
-  "b2Yoc2RwKSk7DQo+ID4gPiArCQlicmVhazsNCj4gPiA+ICsJZGVmYXVsdDoNCj4gPiA+ICsJCU1J\n",
-  "U1NJTkdfQ0FTRSh0eXBlKTsNCj4gPiA+ICsJCWJyZWFrOw0KPiA+ID4gKwl9DQo+ID4gPiArDQo+\n",
-  "ID4gPiArCWlmIChXQVJOX09OKGxlbiA8IDApKQ0KPiA+ID4gKwkJcmV0dXJuOw0KPiA+ID4gKw0K\n",
-  "PiA+ID4gKwlpbnRlbF9kaWdfcG9ydC0+d3JpdGVfaW5mb2ZyYW1lKGVuY29kZXIsIGNydGNfc3Rh\n",
-  "dGUsIHR5cGUsDQo+ID4gPiAmc2RwLCBsZW4pOw0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICt2\n",
-  "b2lkIGludGVsX2RwX3NldF9pbmZvZnJhbWVzKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVy\n",
-  "LA0KPiA+ID4gKwkJCSAgICAgYm9vbCBlbmFibGUsDQo+ID4gPiArCQkJICAgICBjb25zdCBzdHJ1\n",
-  "Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwNCj4gPiA+ICsJCQkgICAgIGNvbnN0IHN0\n",
-  "cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlDQo+ID4gPiAqY29ubl9zdGF0ZSkgew0KPiA+ID4gKwlz\n",
-  "dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGVuY29kZXItPmJhc2Uu\n",
-  "ZGV2KTsNCj4gPiA+ICsJc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGVuY190b19pbnRlbF9k\n",
-  "cChlbmNvZGVyKTsNCj4gPiA+ICsJaTkxNV9yZWdfdCByZWcgPSBIU1dfVFZJREVPX0RJUF9DVEwo\n",
-  "Y3J0Y19zdGF0ZS0NCj4gPiA+ID5jcHVfdHJhbnNjb2Rlcik7DQo+ID4gPiArCXUzMiBkaXBfZW5h\n",
-  "YmxlID0gVklERU9fRElQX0VOQUJMRV9BVklfSFNXIHwNCj4gPiA+IFZJREVPX0RJUF9FTkFCTEVf\n",
-  "R0NQX0hTVyB8DQo+ID4gPiArCQkJIFZJREVPX0RJUF9FTkFCTEVfVlNfSFNXIHwNCj4gPiA+IFZJ\n",
-  "REVPX0RJUF9FTkFCTEVfR01QX0hTVyB8DQo+ID4gPiArCQkJIFZJREVPX0RJUF9FTkFCTEVfU1BE\n",
-  "X0hTVyB8DQo+ID4gPiBWSURFT19ESVBfRU5BQkxFX0RSTV9HTEs7DQo+ID4gPiArCXUzMiB2YWwg\n",
-  "PSBJOTE1X1JFQUQocmVnKTsNCj4gPiA+ICsNCj4gPiA+ICsJLyogVE9ETzogQWRkIERTQyBjYXNl\n",
-  "IChESVBfRU5BQkxFX1BQUykgKi8NCj4gPiA+ICsJLyogV2hlbiBQU1IgaXMgZW5hYmxlZCwgdGhp\n",
-  "cyByb3V0aW5lIGRvZXNuJ3QgZGlzYWJsZSBWU0MgRElQICovDQo+ID4gPiArCWlmIChpbnRlbF9w\n",
-  "c3JfZW5hYmxlZChpbnRlbF9kcCkpDQo+ID4gPiArCQl2YWwgJj0gfmRpcF9lbmFibGU7DQo+ID4g\n",
-  "PiArCWVsc2UNCj4gPiA+ICsJCXZhbCAmPSB+KGRpcF9lbmFibGUgfCBWSURFT19ESVBfRU5BQkxF\n",
-  "X1ZTQ19IU1cpOw0KPiA+DQo+ID4gZGlwX2VuYWJsZSBoYXMgVklERU9fRElQX0VOQUJMRV9WU0Nf\n",
-  "SFNXIGFscmVhZHkgaW4gaXQuIFBsZWFzZSBmaXgNCj4gPiB0aGlzLg0KPiA+DQo+IERlY2xhcmlu\n",
-  "ZyBvZiBkaXBfZW5hYmxlIGRvZXMgbm90IGluY2x1ZGUgVklERU9fRElQX0VOQUJMRV9WU0NfSFNX\n",
-  "Lg0KPiB0aGVyZWZvcmUgd2UgbmVlZCBpdCBoZXJlIHRvIGRpc2FibGUgVlNDIFNEUCBESVAuDQoN\n",
-  "Ck9oIG9rLCBUb29rIFZTIGZvciBWU0MuIFNjcmF0Y2ggbXkgZWFybGllciBjb21tZW50LCBjaGFu\n",
-  "Z2UgaXMgY29ycmVjdC4NCg0KPiA+ID4gKw0KPiA+ID4gKwlpZiAoIWVuYWJsZSkgew0KPiA+ID4g\n",
-  "KwkJSTkxNV9XUklURShyZWcsIHZhbCk7DQo+ID4gPiArCQlQT1NUSU5HX1JFQUQocmVnKTsNCj4g\n",
-  "PiA+ICsJCXJldHVybjsNCj4gPiA+ICsJfQ0KPiA+ID4gKw0KPiA+ID4gKwlJOTE1X1dSSVRFKHJl\n",
-  "ZywgdmFsKTsNCj4gPiA+ICsJUE9TVElOR19SRUFEKHJlZyk7DQo+ID4gPiArDQo+ID4gPiArCS8q\n",
-  "IFdoZW4gUFNSIGlzIGVuYWJsZWQsIFZTQyBTRFAgaXMgaGFuZGxlZCBieSBQU1Igcm91dGluZSAq\n",
-  "Lw0KPiA+ID4gKwlpZiAoIWludGVsX3Bzcl9lbmFibGVkKGludGVsX2RwKSkNCj4gPiA+ICsJCWlu\n",
-  "dGVsX3dyaXRlX2RwX3NkcChlbmNvZGVyLCBjcnRjX3N0YXRlLCBEUF9TRFBfVlNDKTsNCj4gPiA+\n",
-  "ICsNCj4gPiA+ICsJaW50ZWxfd3JpdGVfZHBfc2RwKGVuY29kZXIsIGNydGNfc3RhdGUsDQo+ID4g\n",
-  "PiArSERNSV9QQUNLRVRfVFlQRV9HQU1VVF9NRVRBREFUQSk7IH0NCj4gPiA+ICsNCj4gPiA+ICBz\n",
-  "dGF0aWMgdm9pZA0KPiA+ID4gIGludGVsX2RwX3NldHVwX3ZzY19zZHAoc3RydWN0IGludGVsX2Rw\n",
-  "ICppbnRlbF9kcCwNCj4gPiA+ICAJCSAgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0\n",
-  "ZSAqY3J0Y19zdGF0ZSwgZGlmZiAtLWdpdA0KPiA+ID4gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9k\n",
-  "aXNwbGF5L2ludGVsX2RwLmgNCj4gPiA+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9p\n",
-  "bnRlbF9kcC5oDQo+ID4gPiBpbmRleCAzZGExNjYwNTQ3ODguLjBkYzA5YTQ2M2VlMSAxMDA2NDQN\n",
-  "Cj4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZHAuaA0KPiA+\n",
-  "ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kcC5oDQo+ID4gPiBA\n",
-  "QCAtMTE2LDYgKzExNiw5IEBAIHZvaWQgaW50ZWxfZHBfdnNjX2VuYWJsZShzdHJ1Y3QgaW50ZWxf\n",
-  "ZHANCj4gPiA+ICppbnRlbF9kcCwgIHZvaWQgaW50ZWxfZHBfaGRyX21ldGFkYXRhX2VuYWJsZShz\n",
-  "dHJ1Y3QgaW50ZWxfZHANCj4gPiA+ICppbnRlbF9kcCwNCj4gPiA+ICAJCQkJICBjb25zdCBzdHJ1\n",
-  "Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwNCj4gPiA+ICAJCQkJICBjb25zdCBzdHJ1\n",
-  "Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSk7DQo+ID4gPiArdm9pZCBpbnRlbF9k\n",
-  "cF9zZXRfaW5mb2ZyYW1lcyhzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2RlciwgYm9vbA0KPiA+\n",
-  "ID4gZW5hYmxlLA0KPiA+ID4gKwkJCSAgICAgY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUg\n",
-  "KmNydGNfc3RhdGUsDQo+ID4gPiArCQkJICAgICBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9z\n",
-  "dGF0ZQ0KPiA+ID4gKmNvbm5fc3RhdGUpOw0KPiA+ID4gIGJvb2wgaW50ZWxfZGlnaXRhbF9wb3J0\n",
-  "X2Nvbm5lY3RlZChzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2Rlcik7DQo+ID4gPg0KPiA+ID4g\n",
-  "IHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGludGVsX2RwX3VudXNlZF9sYW5lX21hc2soaW50\n",
-  "DQo+ID4gPiBsYW5lX2NvdW50KQ0KPiA+ID4gLS0NCj4gPiA+IDIuMjQuMQ0KPiA+ID4NCj4gPiA+\n",
-  "IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQo+ID4gPiBk\n",
-  "cmktZGV2ZWwgbWFpbGluZyBsaXN0DQo+ID4gPiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Au\n",
-  "b3JnDQo+ID4gPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZv\n",
-  "L2RyaS1kZXZlbA0K"
+  "\n",
+  "\n",
+  "> -----Original Message-----\n",
+  "> From: Mun, Gwan-gyeong <gwan-gyeong.mun\@intel.com>\n",
+  "> Sent: Sunday, February 9, 2020 9:05 AM\n",
+  "> To: Shankar, Uma <uma.shankar\@intel.com>; intel-gfx\@lists.freedesktop.org\n",
+  "> Cc: dri-devel\@lists.freedesktop.org; linux-fbdev\@vger.kernel.org\n",
+  "> Subject: Re: [PATCH v3 04/17] drm/i915/dp: Add writing of DP SDPs (Secondary Data\n",
+  "> Packet)\n",
+  "> \n",
+  "> On Wed, 2020-02-05 at 21:39 +0530, Shankar, Uma wrote:\n",
+  "> > > -----Original Message-----\n",
+  "> > > From: dri-devel <dri-devel-bounces\@lists.freedesktop.org> On Behalf\n",
+  "> > > Of Gwan- gyeong Mun\n",
+  "> > > Sent: Tuesday, February 4, 2020 4:50 AM\n",
+  "> > > To: intel-gfx\@lists.freedesktop.org\n",
+  "> > > Cc: linux-fbdev\@vger.kernel.org; dri-devel\@lists.freedesktop.org\n",
+  "> > > Subject: [PATCH v3 04/17] drm/i915/dp: Add writing of DP SDPs\n",
+  "> > > (Secondary Data\n",
+  "> > > Packet)\n",
+  "> >\n",
+  "> > Drop things in (), not needed.\n",
+  "> >\n",
+  "> > > It adds routines that write DP VSC SDP and DP HDR Metadata Infoframe\n",
+  "> > > SDP.\n",
+  "> > > In order to pack DP VSC SDP, it adds intel_dp_vsc_sdp_pack()\n",
+  "> > > function.\n",
+  "> > > It follows DP 1.4a spec. [Table 2-116: VSC SDP Header Bytes] and\n",
+  "> > > [Table 2-117: VSC SDP Payload for DB16 through DB18]\n",
+  "> > >\n",
+  "> > > In order to pack DP HDR Metadata Infoframe SDP, it adds\n",
+  "> > > intel_dp_hdr_metadata_infoframe_sdp_pack() function.\n",
+  "> > > And it follows DP 1.4a spec.\n",
+  "> > > ([Table 2-125: INFOFRAME SDP v1.2 Header Bytes] and [Table 2-126:\n",
+  "> > > INFOFRAME\n",
+  "> > > SDP v1.2 Payload Data Bytes - DB0 through DB31]) and CTA-861-G spec.\n",
+  "> > > [Table-42 Dynamic Range and Mastering InfoFrame].\n",
+  "> > >\n",
+  "> > > A machanism and a naming rule of intel_dp_set_infoframes() function\n",
+  "> > > references\n",
+  "> >\n",
+  "> > Typo in mechanism.\n",
+  "> >\n",
+  "> > > intel_encoder->set_infoframes() of intel_hdmi.c .\n",
+  "> > > VSC SDP is used for PSR and Pixel Encoding and Colorimetry Formats\n",
+  "> > > cases.\n",
+  "> > > Because PSR routine has its own routine of writing a VSC SDP, when\n",
+  "> > > the PSR is enabled, intel_dp_set_infoframes() does not write a VSC\n",
+  "> > > SDP.\n",
+  "> > >\n",
+  "> > > v3:\n",
+  "> > >   - Explicitly disable unused DIPs (AVI, GCP, VS, SPD, DRM. They\n",
+  "> > > will be\n",
+  "> > >     used for HDMI), when intel_dp_set_infoframes() function will be\n",
+  "> > > called.\n",
+  "> > >   - Replace a structure name to drm_dp_vsc_sdp from\n",
+  "> > > intel_dp_vsc_sdp.\n",
+  "> > >\n",
+  "> > > Signed-off-by: Gwan-gyeong Mun <gwan-gyeong.mun\@intel.com>\n",
+  "> > > ---\n",
+  "> > >  drivers/gpu/drm/i915/display/intel_dp.c | 194\n",
+  "> > > ++++++++++++++++++++++++\n",
+  "> > >  drivers/gpu/drm/i915/display/intel_dp.h |   3 +\n",
+  "> > >  2 files changed, 197 insertions(+)\n",
+  "> > >\n",
+  "> > > diff --git a/drivers/gpu/drm/i915/display/intel_dp.c\n",
+  "> > > b/drivers/gpu/drm/i915/display/intel_dp.c\n",
+  "> > > index b265b5c599f2..dd7e5588001e 100644\n",
+  "> > > --- a/drivers/gpu/drm/i915/display/intel_dp.c\n",
+  "> > > +++ b/drivers/gpu/drm/i915/display/intel_dp.c\n",
+  "> > > \@\@ -4731,6 +4731,200 \@\@ intel_dp_needs_vsc_sdp(const struct\n",
+  "> > > intel_crtc_state *crtc_state,\n",
+  "> > >  \treturn false;\n",
+  "> > >  }\n",
+  "> > >\n",
+  "> > > +static ssize_t intel_dp_vsc_sdp_pack(const struct drm_dp_vsc_sdp\n",
+  "> > > *vsc,\n",
+  "> > > +\t\t\t\t     struct dp_sdp *sdp, size_t size) {\n",
+  "> > > +\tsize_t length = sizeof(struct dp_sdp);\n",
+  "> > > +\n",
+  "> > > +\tif (size < length)\n",
+  "> > > +\t\treturn -ENOSPC;\n",
+  "> > > +\n",
+  "> > > +\tmemset(sdp, 0, size);\n",
+  "> > > +\n",
+  "> > > +\t/*\n",
+  "> > > +\t * Prepare VSC Header for SU as per DP 1.4a spec, Table 2-119\n",
+  "> > > +\t * VSC SDP Header Bytes\n",
+  "> > > +\t */\n",
+  "> > > +\tsdp->sdp_header.HB0 = 0; /* Secondary-Data Packet ID = 0 */\n",
+  "> > > +\tsdp->sdp_header.HB1 = vsc->sdp_type; /* Secondary-data Packet\n",
+  "> > > Type */\n",
+  "> > > +\tsdp->sdp_header.HB2 = vsc->revision; /* Revision Number */\n",
+  "> > > +\tsdp->sdp_header.HB3 = vsc->length; /* Number of Valid Data\n",
+  "> > > Bytes */\n",
+  "> > > +\n",
+  "> > > +\t/* VSC SDP Payload for DB16 through DB18 */\n",
+  "> > > +\t/* Pixel Encoding and Colorimetry Formats  */\n",
+  "> > > +\tsdp->db[16] = (vsc->colorspace & 0xf) << 4; /* DB16[7:4] */\n",
+  "> > > +\tsdp->db[16] |= vsc->colorimetry & 0xf; /* DB16[3:0] */\n",
+  "> > > +\n",
+  "> > > +\tswitch (vsc->bpc) {\n",
+  "> > > +\tcase 8:\n",
+  "> > > +\t\tsdp->db[17] = 0x1; /* DB17[3:0] */\n",
+  "> > > +\t\tbreak;\n",
+  "> > > +\tcase 10:\n",
+  "> > > +\t\tsdp->db[17] = 0x2;\n",
+  "> > > +\t\tbreak;\n",
+  "> > > +\tcase 12:\n",
+  "> > > +\t\tsdp->db[17] = 0x3;\n",
+  "> > > +\t\tbreak;\n",
+  "> > > +\tcase 16:\n",
+  "> > > +\t\tsdp->db[17] = 0x4;\n",
+  "> > > +\t\tbreak;\n",
+  "> > > +\tdefault:\n",
+  "> > > +\t\tMISSING_CASE(vsc->bpc);\n",
+  "> >\n",
+  "> > 6bpc is not handled here, add that as well.\n",
+  "> >\n",
+  "> Yes, I missed 6bpc case, I'll update it.\n",
+  "> > > +\t\tbreak;\n",
+  "> > > +\t}\n",
+  "> > > +\t/* Dynamic Range and Component Bit Depth */\n",
+  "> > > +\tif (vsc->dynamic_range == DP_DYNAMIC_RANGE_CTA)\n",
+  "> > > +\t\tsdp->db[17] |= 0x80;  /* DB17[7] */\n",
+  "> > > +\n",
+  "> > > +\t/* Content Type */\n",
+  "> > > +\tsdp->db[18] = vsc->content_type & 0x7;\n",
+  "> > > +\n",
+  "> > > +\treturn length;\n",
+  "> > > +}\n",
+  "> > > +\n",
+  "> > > +static ssize_t\n",
+  "> > > +intel_dp_hdr_metadata_infoframe_sdp_pack(const struct\n",
+  "> > > hdmi_drm_infoframe\n",
+  "> > > *drm_infoframe,\n",
+  "> > > +\t\t\t\t\t struct dp_sdp *sdp,\n",
+  "> > > +\t\t\t\t\t size_t size)\n",
+  "> > > +{\n",
+  "> > > +\tsize_t length = sizeof(struct dp_sdp);\n",
+  "> > > +\tconst int infoframe_size = HDMI_INFOFRAME_HEADER_SIZE +\n",
+  "> > > HDMI_DRM_INFOFRAME_SIZE;\n",
+  "> > > +\tunsigned char buf[HDMI_INFOFRAME_HEADER_SIZE +\n",
+  "> > > HDMI_DRM_INFOFRAME_SIZE];\n",
+  "> > > +\tssize_t len;\n",
+  "> > > +\n",
+  "> > > +\tif (size < length)\n",
+  "> > > +\t\treturn -ENOSPC;\n",
+  "> > > +\n",
+  "> > > +\tmemset(sdp, 0, size);\n",
+  "> > > +\n",
+  "> > > +\tlen = hdmi_drm_infoframe_pack_only(drm_infoframe, buf,\n",
+  "> > > sizeof(buf));\n",
+  "> > > +\tif (len < 0) {\n",
+  "> > > +\t\tDRM_DEBUG_KMS(\"buffer size is smaller than hdr metadata\n",
+  "> > > infoframe\\n\");\n",
+  "> > > +\t\treturn -ENOSPC;\n",
+  "> > > +\t}\n",
+  "> > > +\n",
+  "> > > +\tif (len != infoframe_size) {\n",
+  "> > > +\t\tDRM_DEBUG_KMS(\"wrong static hdr metadata size\\n\");\n",
+  "> > > +\t\treturn -ENOSPC;\n",
+  "> > > +\t}\n",
+  "> > > +\n",
+  "> > > +\t/*\n",
+  "> > > +\t * Set up the infoframe sdp packet for HDR static metadata.\n",
+  "> > > +\t * Prepare VSC Header for SU as per DP 1.4a spec,\n",
+  "> > > +\t * Table 2-100 and Table 2-101\n",
+  "> > > +\t */\n",
+  "> > > +\n",
+  "> > > +\t/* Secondary-Data Packet ID, 00h for non-Audio INFOFRAME */\n",
+  "> > > +\tsdp->sdp_header.HB0 = 0;\n",
+  "> > > +\t/*\n",
+  "> > > +\t * Packet Type 80h + Non-audio INFOFRAME Type value\n",
+  "> > > +\t * HDMI_INFOFRAME_TYPE_DRM: 0x87\n",
+  "> > > +\t * - 80h + Non-audio INFOFRAME Type value\n",
+  "> > > +\t * - InfoFrame Type: 0x07\n",
+  "> > > +\t *    [CTA-861-G Table-42 Dynamic Range and Mastering\n",
+  "> > > InfoFrame]\n",
+  "> > > +\t */\n",
+  "> > > +\tsdp->sdp_header.HB1 = drm_infoframe->type;\n",
+  "> > > +\t/*\n",
+  "> > > +\t * Least Significant Eight Bits of (Data Byte Count \342\200\223 1)\n",
+  "> > > +\t * infoframe_size - 1\n",
+  "> > > +\t */\n",
+  "> > > +\tsdp->sdp_header.HB2 = 0x1D;\n",
+  "> > > +\t/* INFOFRAME SDP Version Number */\n",
+  "> > > +\tsdp->sdp_header.HB3 = (0x13 << 2);\n",
+  "> > > +\t/* CTA Header Byte 2 (INFOFRAME Version Number) */\n",
+  "> > > +\tsdp->db[0] = drm_infoframe->version;\n",
+  "> > > +\t/* CTA Header Byte 3 (Length of INFOFRAME):\n",
+  "> > > HDMI_DRM_INFOFRAME_SIZE */\n",
+  "> > > +\tsdp->db[1] = drm_infoframe->length;\n",
+  "> > > +\t/*\n",
+  "> > > +\t * Copy HDMI_DRM_INFOFRAME_SIZE size from a buffer after\n",
+  "> >\n",
+  "> > Comment Looks incomplete.\n",
+  "> >\n",
+  "> I missed some comments, I'll update it.\n",
+  "> > > +\t */\n",
+  "> > > +\tBUILD_BUG_ON(sizeof(sdp->db) < HDMI_DRM_INFOFRAME_SIZE + 2);\n",
+  "> > > +\tmemcpy(&sdp->db[2], &buf[HDMI_INFOFRAME_HEADER_SIZE],\n",
+  "> > > +\t       HDMI_DRM_INFOFRAME_SIZE);\n",
+  "> > > +\n",
+  "> > > +\t/*\n",
+  "> > > +\t * Size of DP infoframe sdp packet for HDR static metadata is\n",
+  "> > > consist of\n",
+  "> >\n",
+  "> > Drop \"is\"\n",
+  "> >\n",
+  "> Includes this, I'll polish polish commit message and comments.\n",
+  "> \n",
+  "> > > +\t * - DP SDP Header(struct dp_sdp_header): 4 bytes\n",
+  "> > > +\t * - Two Data Blocks: 2 bytes\n",
+  "> > > +\t *    CTA Header Byte2 (INFOFRAME Version Number)\n",
+  "> > > +\t *    CTA Header Byte3 (Length of INFOFRAME)\n",
+  "> > > +\t * - HDMI_DRM_INFOFRAME_SIZE: 26 bytes\n",
+  "> > > +\t *\n",
+  "> > > +\t * Prior to GEN11's GMP register size is identical to DP HDR\n",
+  "> > > static metadata\n",
+  "> > > +\t * infoframe size. But GEN11+ has larger than that size,\n",
+  "> > > write_infoframe\n",
+  "> > > +\t * will pad rest of the size.\n",
+  "> > > +\t */\n",
+  "> > > +\treturn sizeof(struct dp_sdp_header) + 2 +\n",
+  "> > > HDMI_DRM_INFOFRAME_SIZE; }\n",
+  "> > > +\n",
+  "> > > +static void intel_write_dp_sdp(struct intel_encoder *encoder,\n",
+  "> > > +\t\t\t       const struct intel_crtc_state\n",
+  "> > > *crtc_state,\n",
+  "> > > +\t\t\t       unsigned int type)\n",
+  "> > > +{\n",
+  "> > > +\tstruct intel_digital_port *intel_dig_port =\n",
+  "> > > enc_to_dig_port(encoder);\n",
+  "> > > +\tstruct dp_sdp sdp = {};\n",
+  "> > > +\tssize_t len;\n",
+  "> > > +\n",
+  "> > > +\tif ((crtc_state->infoframes.enable &\n",
+  "> > > +\t     intel_hdmi_infoframe_enable(type)) == 0)\n",
+  "> > > +\t\treturn;\n",
+  "> > > +\n",
+  "> > > +\tswitch (type) {\n",
+  "> > > +\tcase DP_SDP_VSC:\n",
+  "> > > +\t\tlen = intel_dp_vsc_sdp_pack(&crtc_state-\n",
+  "> > > >infoframes.vsc, &sdp,\n",
+  "> > > +\t\t\t\t\t    sizeof(sdp));\n",
+  "> > > +\t\tbreak;\n",
+  "> > > +\tcase HDMI_PACKET_TYPE_GAMUT_METADATA:\n",
+  "> > > +\t\tlen =\n",
+  "> > > intel_dp_hdr_metadata_infoframe_sdp_pack(&crtc_state-\n",
+  "> > > > infoframes.drm.drm,\n",
+  "> > > +\t\t\t\t\t\t\t       &sdp,\n",
+  "> > > sizeof(sdp));\n",
+  "> > > +\t\tbreak;\n",
+  "> > > +\tdefault:\n",
+  "> > > +\t\tMISSING_CASE(type);\n",
+  "> > > +\t\tbreak;\n",
+  "> > > +\t}\n",
+  "> > > +\n",
+  "> > > +\tif (WARN_ON(len < 0))\n",
+  "> > > +\t\treturn;\n",
+  "> > > +\n",
+  "> > > +\tintel_dig_port->write_infoframe(encoder, crtc_state, type,\n",
+  "> > > &sdp, len);\n",
+  "> > > +}\n",
+  "> > > +\n",
+  "> > > +void intel_dp_set_infoframes(struct intel_encoder *encoder,\n",
+  "> > > +\t\t\t     bool enable,\n",
+  "> > > +\t\t\t     const struct intel_crtc_state *crtc_state,\n",
+  "> > > +\t\t\t     const struct drm_connector_state\n",
+  "> > > *conn_state) {\n",
+  "> > > +\tstruct drm_i915_private *dev_priv = to_i915(encoder->base.dev);\n",
+  "> > > +\tstruct intel_dp *intel_dp = enc_to_intel_dp(encoder);\n",
+  "> > > +\ti915_reg_t reg = HSW_TVIDEO_DIP_CTL(crtc_state-\n",
+  "> > > >cpu_transcoder);\n",
+  "> > > +\tu32 dip_enable = VIDEO_DIP_ENABLE_AVI_HSW |\n",
+  "> > > VIDEO_DIP_ENABLE_GCP_HSW |\n",
+  "> > > +\t\t\t VIDEO_DIP_ENABLE_VS_HSW |\n",
+  "> > > VIDEO_DIP_ENABLE_GMP_HSW |\n",
+  "> > > +\t\t\t VIDEO_DIP_ENABLE_SPD_HSW |\n",
+  "> > > VIDEO_DIP_ENABLE_DRM_GLK;\n",
+  "> > > +\tu32 val = I915_READ(reg);\n",
+  "> > > +\n",
+  "> > > +\t/* TODO: Add DSC case (DIP_ENABLE_PPS) */\n",
+  "> > > +\t/* When PSR is enabled, this routine doesn't disable VSC DIP */\n",
+  "> > > +\tif (intel_psr_enabled(intel_dp))\n",
+  "> > > +\t\tval &= ~dip_enable;\n",
+  "> > > +\telse\n",
+  "> > > +\t\tval &= ~(dip_enable | VIDEO_DIP_ENABLE_VSC_HSW);\n",
+  "> >\n",
+  "> > dip_enable has VIDEO_DIP_ENABLE_VSC_HSW already in it. Please fix\n",
+  "> > this.\n",
+  "> >\n",
+  "> Declaring of dip_enable does not include VIDEO_DIP_ENABLE_VSC_HSW.\n",
+  "> therefore we need it here to disable VSC SDP DIP.\n",
+  "\n",
+  "Oh ok, Took VS for VSC. Scratch my earlier comment, change is correct.\n",
+  "\n",
+  "> > > +\n",
+  "> > > +\tif (!enable) {\n",
+  "> > > +\t\tI915_WRITE(reg, val);\n",
+  "> > > +\t\tPOSTING_READ(reg);\n",
+  "> > > +\t\treturn;\n",
+  "> > > +\t}\n",
+  "> > > +\n",
+  "> > > +\tI915_WRITE(reg, val);\n",
+  "> > > +\tPOSTING_READ(reg);\n",
+  "> > > +\n",
+  "> > > +\t/* When PSR is enabled, VSC SDP is handled by PSR routine */\n",
+  "> > > +\tif (!intel_psr_enabled(intel_dp))\n",
+  "> > > +\t\tintel_write_dp_sdp(encoder, crtc_state, DP_SDP_VSC);\n",
+  "> > > +\n",
+  "> > > +\tintel_write_dp_sdp(encoder, crtc_state,\n",
+  "> > > +HDMI_PACKET_TYPE_GAMUT_METADATA); }\n",
+  "> > > +\n",
+  "> > >  static void\n",
+  "> > >  intel_dp_setup_vsc_sdp(struct intel_dp *intel_dp,\n",
+  "> > >  \t\t       const struct intel_crtc_state *crtc_state, diff --git\n",
+  "> > > a/drivers/gpu/drm/i915/display/intel_dp.h\n",
+  "> > > b/drivers/gpu/drm/i915/display/intel_dp.h\n",
+  "> > > index 3da166054788..0dc09a463ee1 100644\n",
+  "> > > --- a/drivers/gpu/drm/i915/display/intel_dp.h\n",
+  "> > > +++ b/drivers/gpu/drm/i915/display/intel_dp.h\n",
+  "> > > \@\@ -116,6 +116,9 \@\@ void intel_dp_vsc_enable(struct intel_dp\n",
+  "> > > *intel_dp,  void intel_dp_hdr_metadata_enable(struct intel_dp\n",
+  "> > > *intel_dp,\n",
+  "> > >  \t\t\t\t  const struct intel_crtc_state *crtc_state,\n",
+  "> > >  \t\t\t\t  const struct drm_connector_state *conn_state);\n",
+  "> > > +void intel_dp_set_infoframes(struct intel_encoder *encoder, bool\n",
+  "> > > enable,\n",
+  "> > > +\t\t\t     const struct intel_crtc_state *crtc_state,\n",
+  "> > > +\t\t\t     const struct drm_connector_state\n",
+  "> > > *conn_state);\n",
+  "> > >  bool intel_digital_port_connected(struct intel_encoder *encoder);\n",
+  "> > >\n",
+  "> > >  static inline unsigned int intel_dp_unused_lane_mask(int\n",
+  "> > > lane_count)\n",
+  "> > > --\n",
+  "> > > 2.24.1\n",
+  "> > >\n",
+  "> > > _______________________________________________\n",
+  "> > > dri-devel mailing list\n",
+  "> > > dri-devel\@lists.freedesktop.org\n",
+  "> > > https://lists.freedesktop.org/mailman/listinfo/dri-devel\n",
+  "_______________________________________________\n",
+  "Intel-gfx mailing list\n",
+  "Intel-gfx\@lists.freedesktop.org\n",
+  "https://lists.freedesktop.org/mailman/listinfo/intel-gfx"
 ]
 
-98ce46eab589aa83b6e5fe7eb45dd8a61ef99e7bbaf3cafb636d195165aa0e48
+7fac9ac51fc6e9c84340878c76cf66b0c004b3f62ef5d74b34fc8a6c5f831457

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.