From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v2 6/8] drm/i915: Add function to output Aksv over GMBUS Date: Fri, 1 Dec 2017 21:06:14 +0200 Message-ID: <20171201190614.GM10981@intel.com> References: <20171201172032.47357-1-seanpaul@chromium.org> <20171201172032.47357-7-seanpaul@chromium.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20171201172032.47357-7-seanpaul@chromium.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Sean Paul Cc: David Airlie , intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Rodrigo Vivi , daniel.vetter@intel.com List-Id: dri-devel@lists.freedesktop.org T24gRnJpLCBEZWMgMDEsIDIwMTcgYXQgMTI6MjA6MjhQTSAtMDUwMCwgU2VhbiBQYXVsIHdyb3Rl Ogo+IE9uY2UgdGhlIEFrc3YgaXMgYXZhaWxhYmxlIGluIHRoZSBQQ0gsIHdlIG5lZWQgdG8gZ2V0 IGl0IG9uIHRoZSB3aXJlIHRvCj4gdGhlIHJlY2VpdmVyIHZpYSBEREMuIFRoZSBoYXJkd2FyZSBk b2Vzbid0IGFsbG93IHVzIHRvIHJlYWQgdGhlIHZhbHVlCj4gZGlyZWN0bHksIHNvIHdlIG5lZWQg dG8gdGVsbCBHTUJVUyB0byBzb3VyY2UgdGhlIEFrc3YgaW50ZXJuYWxseSBhbmQKPiBzZW5kIGl0 IHRvIHRoZSByaWdodCBvZmZzZXQgb24gdGhlIHJlY2VpdmVyLgo+IAo+IFRoZSB3YXkgd2UgZG8g dGhpcyBpcyB0byBpbml0aWF0ZSBhbiBpbmRleGVkIHdyaXRlIHdoZXJlIHRoZSBpbmRleCBpcwo+ IHRoZSBBa3N2IHJlZ2lzdGVyIG9mZnNldC4gV2Ugd3JpdGUgZHVtbXkgdmFsdWVzIHRvIEdNQlVT MyBhcyBpZiB3ZSB3ZXJlCj4gc2VuZGluZyB0aGUga2V5LCBhbmQgdGhlIGhhcmR3YXJlIHNsaXBz IGluIHRoZSAicmVhbCIgdmFsdWVzIHdoZW4gaXQKPiBnb2VzIG91dC4KPiAKPiBDaGFuZ2VzIGlu IHYyOgo+IC0gTm9uZQo+IAo+IFNpZ25lZC1vZmYtYnk6IFNlYW4gUGF1bCA8c2VhbnBhdWxAY2hy b21pdW0ub3JnPgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICB8ICAx ICsKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCAgfCAgMSArCj4gIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2kyYy5jIHwgNTQgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKy0tLS0tLQo+ICAzIGZpbGVzIGNoYW5nZWQsIDQ4IGluc2VydGlvbnMoKyksIDggZGVs ZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gaW5kZXggMzZiYjQ5Mjc0ODRh Li4xMGY3NDBjOWU1NzEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k cnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBAQCAtNDA0Myw2 ICs0MDQzLDcgQEAgZXh0ZXJuIGludCBpbnRlbF9zZXR1cF9nbWJ1cyhzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYpOwo+ICBleHRlcm4gdm9pZCBpbnRlbF90ZWFyZG93bl9nbWJ1cyhz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ICBleHRlcm4gYm9vbCBpbnRlbF9n bWJ1c19pc192YWxpZF9waW4oc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAJ CQkJICAgICB1bnNpZ25lZCBpbnQgcGluKTsKPiArZXh0ZXJuIGludCBpbnRlbF9nbWJ1c19vdXRw dXRfYWtzdihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpOwo+ICAKPiAgZXh0ZXJuIHN0cnVj dCBpMmNfYWRhcHRlciAqCj4gIGludGVsX2dtYnVzX2dldF9hZGFwdGVyKHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwgdW5zaWduZWQgaW50IHBpbik7Cj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X3JlZy5oCj4gaW5kZXggNmRjYTMwNWNjYmY3Li44YjcxYTIwODgyY2EgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfcmVnLmgKPiBAQCAtMzA0MCw2ICszMDQwLDcgQEAgZW51bSBpOTE1X3Bvd2VyX3dl bGxfaWQgewo+ICAjIGRlZmluZSBHUElPX0RBVEFfUFVMTFVQX0RJU0FCTEUJKDEgPDwgMTMpCj4g IAo+ICAjZGVmaW5lIEdNQlVTMAkJCV9NTUlPKGRldl9wcml2LT5ncGlvX21taW9fYmFzZSArIDB4 NTEwMCkgLyogY2xvY2svcG9ydCBzZWxlY3QgKi8KPiArI2RlZmluZSAgIEdNQlVTX0FLU1ZfU0VM RUNUCSgxPDwxMSkKPiAgI2RlZmluZSAgIEdNQlVTX1JBVEVfMTAwS0haCSgwPDw4KQo+ICAjZGVm aW5lICAgR01CVVNfUkFURV81MEtIWgkoMTw8OCkKPiAgI2RlZmluZSAgIEdNQlVTX1JBVEVfNDAw S0haCSgyPDw4KSAvKiByZXNlcnZlZCBvbiBQaW5ldmlldyAqLwo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9pMmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2kyYy5jCj4gaW5kZXggZWI1ODI3MTEwZDhmLi5jMDExNTZiZjBmMjcgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaTJjLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9pMmMuYwo+IEBAIC0zMCw2ICszMCw3IEBACj4gICNpbmNsdWRlIDxsaW51eC9p MmMtYWxnby1iaXQuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgo+ICAjaW5jbHVkZSA8 ZHJtL2RybVAuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1faGRjcC5oPgo+ICAjaW5jbHVkZSAiaW50 ZWxfZHJ2LmgiCj4gICNpbmNsdWRlIDxkcm0vaTkxNV9kcm0uaD4KPiAgI2luY2x1ZGUgImk5MTVf ZHJ2LmgiCj4gQEAgLTM3Myw3ICszNzQsOCBAQCBnbWJ1c194ZmVyX3JlYWQoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LCBzdHJ1Y3QgaTJjX21zZyAqbXNnLAo+ICAKPiAgc3RhdGlj IGludAo+ICBnbWJ1c194ZmVyX3dyaXRlX2NodW5rKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwKPiAtCQkgICAgICAgdW5zaWduZWQgc2hvcnQgYWRkciwgdTggKmJ1ZiwgdW5zaWdu ZWQgaW50IGxlbikKPiArCQkgICAgICAgdW5zaWduZWQgc2hvcnQgYWRkciwgdTggKmJ1ZiwgdW5z aWduZWQgaW50IGxlbiwKPiArCQkgICAgICAgdTMyIGdtYnVzMV9pbmRleCkKPiAgewo+ICAJdW5z aWduZWQgaW50IGNodW5rX3NpemUgPSBsZW47Cj4gIAl1MzIgdmFsLCBsb29wOwo+IEBAIC0zODYs NyArMzg4LDcgQEAgZ21idXNfeGZlcl93cml0ZV9jaHVuayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYsCj4gIAo+ICAJSTkxNV9XUklURV9GVyhHTUJVUzMsIHZhbCk7Cj4gIAlJOTE1 X1dSSVRFX0ZXKEdNQlVTMSwKPiAtCQkgICAgICBHTUJVU19DWUNMRV9XQUlUIHwKPiArCQkgICAg ICBnbWJ1czFfaW5kZXggfCBHTUJVU19DWUNMRV9XQUlUIHwKPiAgCQkgICAgICAoY2h1bmtfc2l6 ZSA8PCBHTUJVU19CWVRFX0NPVU5UX1NISUZUKSB8Cj4gIAkJICAgICAgKGFkZHIgPDwgR01CVVNf U0xBVkVfQUREUl9TSElGVCkgfAo+ICAJCSAgICAgIEdNQlVTX1NMQVZFX1dSSVRFIHwgR01CVVNf U1dfUkRZKTsKPiBAQCAtNDA5LDcgKzQxMSw4IEBAIGdtYnVzX3hmZXJfd3JpdGVfY2h1bmsoc3Ry dWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICB9Cj4gIAo+ICBzdGF0aWMgaW50Cj4g LWdtYnVzX3hmZXJfd3JpdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBzdHJ1 Y3QgaTJjX21zZyAqbXNnKQo+ICtnbWJ1c194ZmVyX3dyaXRlKHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICpkZXZfcHJpdiwgc3RydWN0IGkyY19tc2cgKm1zZywKPiArCQkgdTMyIGdtYnVzMV9pbmRl eCkKPiAgewo+ICAJdTggKmJ1ZiA9IG1zZy0+YnVmOwo+ICAJdW5zaWduZWQgaW50IHR4X3NpemUg PSBtc2ctPmxlbjsKPiBAQCAtNDE5LDcgKzQyMiw4IEBAIGdtYnVzX3hmZXJfd3JpdGUoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBzdHJ1Y3QgaTJjX21zZyAqbXNnKQo+ICAJZG8g ewo+ICAJCWxlbiA9IG1pbih0eF9zaXplLCBHTUJVU19CWVRFX0NPVU5UX01BWCk7Cj4gIAo+IC0J CXJldCA9IGdtYnVzX3hmZXJfd3JpdGVfY2h1bmsoZGV2X3ByaXYsIG1zZy0+YWRkciwgYnVmLCBs ZW4pOwo+ICsJCXJldCA9IGdtYnVzX3hmZXJfd3JpdGVfY2h1bmsoZGV2X3ByaXYsIG1zZy0+YWRk ciwgYnVmLCBsZW4sCj4gKwkJCQkJICAgICBnbWJ1czFfaW5kZXgpOwo+ICAJCWlmIChyZXQpCj4g IAkJCXJldHVybiByZXQ7Cj4gIAo+IEBAIC00NzAsNyArNDc0LDggQEAgZ21idXNfeGZlcl9pbmRl eF9yZWFkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgc3RydWN0IGkyY19tc2cg Km1zZ3MpCj4gIH0KPiAgCj4gIHN0YXRpYyBpbnQKPiAtZG9fZ21idXNfeGZlcihzdHJ1Y3QgaTJj X2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBpMmNfbXNnICptc2dzLCBpbnQgbnVtKQo+ICtkb19n bWJ1c194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IGkyY19tc2cgKm1z Z3MsIGludCBudW0sCj4gKwkgICAgICB1MzIgZ21idXMwX3NvdXJjZSwgdTMyIGdtYnVzMV9pbmRl eCkKPiAgewo+ICAJc3RydWN0IGludGVsX2dtYnVzICpidXMgPSBjb250YWluZXJfb2YoYWRhcHRl ciwKPiAgCQkJCQkgICAgICAgc3RydWN0IGludGVsX2dtYnVzLAo+IEBAIC00ODAsNyArNDg1LDcg QEAgZG9fZ21idXNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBpMmNf bXNnICptc2dzLCBpbnQgbnVtKQo+ICAJaW50IHJldCA9IDA7Cj4gIAo+ICByZXRyeToKPiAtCUk5 MTVfV1JJVEVfRlcoR01CVVMwLCBidXMtPnJlZzApOwo+ICsJSTkxNV9XUklURV9GVyhHTUJVUzAs IGdtYnVzMF9zb3VyY2UgfCBidXMtPnJlZzApOwo+ICAKPiAgCWZvciAoOyBpIDwgbnVtOyBpICs9 IGluYykgewo+ICAJCWluYyA9IDE7Cj4gQEAgLTQ5MCw3ICs0OTUsOCBAQCBkb19nbWJ1c194ZmVy KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IGkyY19tc2cgKm1zZ3MsIGludCBu dW0pCj4gIAkJfSBlbHNlIGlmIChtc2dzW2ldLmZsYWdzICYgSTJDX01fUkQpIHsKPiAgCQkJcmV0 ID0gZ21idXNfeGZlcl9yZWFkKGRldl9wcml2LCAmbXNnc1tpXSwgMCk7Cj4gIAkJfSBlbHNlIHsK PiAtCQkJcmV0ID0gZ21idXNfeGZlcl93cml0ZShkZXZfcHJpdiwgJm1zZ3NbaV0pOwo+ICsJCQly ZXQgPSBnbWJ1c194ZmVyX3dyaXRlKGRldl9wcml2LCAmbXNnc1tpXSwKPiArCQkJCQkgICAgICAg Z21idXMxX2luZGV4KTsKPiAgCQl9Cj4gIAo+ICAJCWlmICghcmV0KQo+IEBAIC01OTgsNyArNjA0 LDcgQEAgZ21idXNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBpMmNf bXNnICptc2dzLCBpbnQgbnVtKQo+ICAJCWlmIChyZXQgPCAwKQo+ICAJCQlidXMtPmZvcmNlX2Jp dCAmPSB+R01CVVNfRk9SQ0VfQklUX1JFVFJZOwo+ICAJfSBlbHNlIHsKPiAtCQlyZXQgPSBkb19n bWJ1c194ZmVyKGFkYXB0ZXIsIG1zZ3MsIG51bSk7Cj4gKwkJcmV0ID0gZG9fZ21idXNfeGZlcihh ZGFwdGVyLCBtc2dzLCBudW0sIDAsIDApOwo+ICAJCWlmIChyZXQgPT0gLUVBR0FJTikKPiAgCQkJ YnVzLT5mb3JjZV9iaXQgfD0gR01CVVNfRk9SQ0VfQklUX1JFVFJZOwo+ICAJfQo+IEBAIC02MDgs NiArNjE0LDM4IEBAIGdtYnVzX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBzdHJ1 Y3QgaTJjX21zZyAqbXNncywgaW50IG51bSkKPiAgCXJldHVybiByZXQ7Cj4gIH0KPiAgCj4gK2lu dCBpbnRlbF9nbWJ1c19vdXRwdXRfYWtzdihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCj4g K3sKPiArCXN0cnVjdCBpbnRlbF9nbWJ1cyAqYnVzID0gY29udGFpbmVyX29mKGFkYXB0ZXIsIHN0 cnVjdCBpbnRlbF9nbWJ1cywKPiArCQkJCQkgICAgICAgYWRhcHRlcik7Cj4gKwlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBidXMtPmRldl9wcml2Owo+ICsJaW50IHJldDsKPiAr CXU4IGJ1ZltEUk1fSERDUF9LU1ZfTEVOXSA9IHsgMCB9Owo+ICsJc3RydWN0IGkyY19tc2cgbXNn ID0gewo+ICsJCS5hZGRyID0gRFJNX0hEQ1BfRERDX0FERFIsCj4gKwkJLmZsYWdzID0gMCwKPiAr CQkubGVuID0gc2l6ZW9mKGJ1ZiksCj4gKwkJLmJ1ZiA9IGJ1ZiwKPiArCX07Cj4gKwo+ICsJaW50 ZWxfZGlzcGxheV9wb3dlcl9nZXQoZGV2X3ByaXYsIFBPV0VSX0RPTUFJTl9HTUJVUyk7Cj4gKwlt dXRleF9sb2NrKCZkZXZfcHJpdi0+Z21idXNfbXV0ZXgpOwo+ICsKPiArCS8qCj4gKwkgKiBJbiBv cmRlciB0byBvdXRwdXQgQWtzdiB0byB0aGUgcmVjZWl2ZXIsIHVzZSBhbiBpbmRleGVkIHdyaXRl IHRvCj4gKwkgKiBwYXNzIHRoZSBpMmMgY29tbWFuZCwgYW5kIHRlbGwgR01CVVMgdG8gdXNlIHRo ZSBIVy1wcm92aWRlZCB2YWx1ZQo+ICsJICogaW5zdGVhZCBvZiBzb3VyY2luZyBHTUJVUzMgZm9y IHRoZSBkYXRhLgo+ICsJICovCj4gKwlyZXQgPSBkb19nbWJ1c194ZmVyKGFkYXB0ZXIsICZtc2cs IDEsIEdNQlVTX0FLU1ZfU0VMRUNULAo+ICsJCQkgICAgR01CVVNfQ1lDTEVfSU5ERVggfAo+ICsJ CQkgICAgKERSTV9IRENQX0REQ19BS1NWIDw8IEdNQlVTX1NMQVZFX0lOREVYX1NISUZUKSk7CgpJ dCBtaWdodCBiZSBuaWNlciB0byBqdXN0IHVzZSB0d28gbXNncyBoZXJlIGFuZCBtb2RpZnkKZ21i dXNfeGZlcl9pbmRleF9yZWFkKCkgdG8gc3VwcG9ydCBpbmRleGVkIHdyaXRlcyBhcyB3ZWxsLgpX b3VsZCBhdm9pZCBoYXZpbmcgdG8gcGFzcyBpbiB0aGUgR01CVVMxIHZhbHVlIGFsbCB0aGUgd2F5 LgoKTm90IHN1cmUgd2hhdCB0byBkbyB3aXRoIEdNQlVTX0FLU1ZfU0VMRUNULiBJIGd1ZXNzIGVp dGhlciBwYXNzCml0IGluIGV4cGxpY2l0bHkgbGlrZSB5b3UncmUgZG9pbmcgaGVyZSwgb3IgbWF5 YmUgYWRkIGEgc21hbGwKaGVscGVyIGFsYSBnbWJ1c19pc19pbmRleF9yZWFkKCkgc28gdGhhdCBk b19nbWJ1c194ZmVyKCkgY291bGQKc25pZmYgb3V0IHdoaWNoIHNvdXJjZSB3ZSBzaG91bGQgdXNl IGJhc2VkIG9uIHRoZSBwYXNzZWQgaW4gbXNncz8KCj4gKwo+ICsJbXV0ZXhfdW5sb2NrKCZkZXZf cHJpdi0+Z21idXNfbXV0ZXgpOwo+ICsJaW50ZWxfZGlzcGxheV9wb3dlcl9wdXQoZGV2X3ByaXYs IFBPV0VSX0RPTUFJTl9HTUJVUyk7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiAgc3Rh dGljIHUzMiBnbWJ1c19mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKPiAgewo+ICAJ cmV0dXJuIGkyY19iaXRfYWxnby5mdW5jdGlvbmFsaXR5KGFkYXB0ZXIpICYKPiAtLSAKPiAyLjE1 LjAuNTMxLmcyY2NiMzAxMmM5LWdvb2cKPiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwo+IGRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKPiBkcmktZGV2ZWxA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9kcmktZGV2ZWwKCi0tIApWaWxsZSBTeXJqw6Rsw6QKSW50ZWwgT1RDCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBt YWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752498AbdLATGV (ORCPT ); Fri, 1 Dec 2017 14:06:21 -0500 Received: from mga07.intel.com ([134.134.136.100]:54420 "EHLO mga07.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752370AbdLATGS (ORCPT ); Fri, 1 Dec 2017 14:06:18 -0500 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.45,346,1508828400"; d="scan'208";a="9434652" Date: Fri, 1 Dec 2017 21:06:14 +0200 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= To: Sean Paul Cc: dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, David Airlie , Joonas Lahtinen , linux-kernel@vger.kernel.org, Rodrigo Vivi , daniel.vetter@intel.com Subject: Re: [PATCH v2 6/8] drm/i915: Add function to output Aksv over GMBUS Message-ID: <20171201190614.GM10981@intel.com> References: <20171201172032.47357-1-seanpaul@chromium.org> <20171201172032.47357-7-seanpaul@chromium.org> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20171201172032.47357-7-seanpaul@chromium.org> User-Agent: Mutt/1.7.2 (2016-11-26) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Dec 01, 2017 at 12:20:28PM -0500, Sean Paul wrote: > Once the Aksv is available in the PCH, we need to get it on the wire to > the receiver via DDC. The hardware doesn't allow us to read the value > directly, so we need to tell GMBUS to source the Aksv internally and > send it to the right offset on the receiver. > > The way we do this is to initiate an indexed write where the index is > the Aksv register offset. We write dummy values to GMBUS3 as if we were > sending the key, and the hardware slips in the "real" values when it > goes out. > > Changes in v2: > - None > > Signed-off-by: Sean Paul > --- > drivers/gpu/drm/i915/i915_drv.h | 1 + > drivers/gpu/drm/i915/i915_reg.h | 1 + > drivers/gpu/drm/i915/intel_i2c.c | 54 ++++++++++++++++++++++++++++++++++------ > 3 files changed, 48 insertions(+), 8 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h > index 36bb4927484a..10f740c9e571 100644 > --- a/drivers/gpu/drm/i915/i915_drv.h > +++ b/drivers/gpu/drm/i915/i915_drv.h > @@ -4043,6 +4043,7 @@ extern int intel_setup_gmbus(struct drm_i915_private *dev_priv); > extern void intel_teardown_gmbus(struct drm_i915_private *dev_priv); > extern bool intel_gmbus_is_valid_pin(struct drm_i915_private *dev_priv, > unsigned int pin); > +extern int intel_gmbus_output_aksv(struct i2c_adapter *adapter); > > extern struct i2c_adapter * > intel_gmbus_get_adapter(struct drm_i915_private *dev_priv, unsigned int pin); > diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h > index 6dca305ccbf7..8b71a20882ca 100644 > --- a/drivers/gpu/drm/i915/i915_reg.h > +++ b/drivers/gpu/drm/i915/i915_reg.h > @@ -3040,6 +3040,7 @@ enum i915_power_well_id { > # define GPIO_DATA_PULLUP_DISABLE (1 << 13) > > #define GMBUS0 _MMIO(dev_priv->gpio_mmio_base + 0x5100) /* clock/port select */ > +#define GMBUS_AKSV_SELECT (1<<11) > #define GMBUS_RATE_100KHZ (0<<8) > #define GMBUS_RATE_50KHZ (1<<8) > #define GMBUS_RATE_400KHZ (2<<8) /* reserved on Pineview */ > diff --git a/drivers/gpu/drm/i915/intel_i2c.c b/drivers/gpu/drm/i915/intel_i2c.c > index eb5827110d8f..c01156bf0f27 100644 > --- a/drivers/gpu/drm/i915/intel_i2c.c > +++ b/drivers/gpu/drm/i915/intel_i2c.c > @@ -30,6 +30,7 @@ > #include > #include > #include > +#include > #include "intel_drv.h" > #include > #include "i915_drv.h" > @@ -373,7 +374,8 @@ gmbus_xfer_read(struct drm_i915_private *dev_priv, struct i2c_msg *msg, > > static int > gmbus_xfer_write_chunk(struct drm_i915_private *dev_priv, > - unsigned short addr, u8 *buf, unsigned int len) > + unsigned short addr, u8 *buf, unsigned int len, > + u32 gmbus1_index) > { > unsigned int chunk_size = len; > u32 val, loop; > @@ -386,7 +388,7 @@ gmbus_xfer_write_chunk(struct drm_i915_private *dev_priv, > > I915_WRITE_FW(GMBUS3, val); > I915_WRITE_FW(GMBUS1, > - GMBUS_CYCLE_WAIT | > + gmbus1_index | GMBUS_CYCLE_WAIT | > (chunk_size << GMBUS_BYTE_COUNT_SHIFT) | > (addr << GMBUS_SLAVE_ADDR_SHIFT) | > GMBUS_SLAVE_WRITE | GMBUS_SW_RDY); > @@ -409,7 +411,8 @@ gmbus_xfer_write_chunk(struct drm_i915_private *dev_priv, > } > > static int > -gmbus_xfer_write(struct drm_i915_private *dev_priv, struct i2c_msg *msg) > +gmbus_xfer_write(struct drm_i915_private *dev_priv, struct i2c_msg *msg, > + u32 gmbus1_index) > { > u8 *buf = msg->buf; > unsigned int tx_size = msg->len; > @@ -419,7 +422,8 @@ gmbus_xfer_write(struct drm_i915_private *dev_priv, struct i2c_msg *msg) > do { > len = min(tx_size, GMBUS_BYTE_COUNT_MAX); > > - ret = gmbus_xfer_write_chunk(dev_priv, msg->addr, buf, len); > + ret = gmbus_xfer_write_chunk(dev_priv, msg->addr, buf, len, > + gmbus1_index); > if (ret) > return ret; > > @@ -470,7 +474,8 @@ gmbus_xfer_index_read(struct drm_i915_private *dev_priv, struct i2c_msg *msgs) > } > > static int > -do_gmbus_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs, int num) > +do_gmbus_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs, int num, > + u32 gmbus0_source, u32 gmbus1_index) > { > struct intel_gmbus *bus = container_of(adapter, > struct intel_gmbus, > @@ -480,7 +485,7 @@ do_gmbus_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs, int num) > int ret = 0; > > retry: > - I915_WRITE_FW(GMBUS0, bus->reg0); > + I915_WRITE_FW(GMBUS0, gmbus0_source | bus->reg0); > > for (; i < num; i += inc) { > inc = 1; > @@ -490,7 +495,8 @@ do_gmbus_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs, int num) > } else if (msgs[i].flags & I2C_M_RD) { > ret = gmbus_xfer_read(dev_priv, &msgs[i], 0); > } else { > - ret = gmbus_xfer_write(dev_priv, &msgs[i]); > + ret = gmbus_xfer_write(dev_priv, &msgs[i], > + gmbus1_index); > } > > if (!ret) > @@ -598,7 +604,7 @@ gmbus_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs, int num) > if (ret < 0) > bus->force_bit &= ~GMBUS_FORCE_BIT_RETRY; > } else { > - ret = do_gmbus_xfer(adapter, msgs, num); > + ret = do_gmbus_xfer(adapter, msgs, num, 0, 0); > if (ret == -EAGAIN) > bus->force_bit |= GMBUS_FORCE_BIT_RETRY; > } > @@ -608,6 +614,38 @@ gmbus_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs, int num) > return ret; > } > > +int intel_gmbus_output_aksv(struct i2c_adapter *adapter) > +{ > + struct intel_gmbus *bus = container_of(adapter, struct intel_gmbus, > + adapter); > + struct drm_i915_private *dev_priv = bus->dev_priv; > + int ret; > + u8 buf[DRM_HDCP_KSV_LEN] = { 0 }; > + struct i2c_msg msg = { > + .addr = DRM_HDCP_DDC_ADDR, > + .flags = 0, > + .len = sizeof(buf), > + .buf = buf, > + }; > + > + intel_display_power_get(dev_priv, POWER_DOMAIN_GMBUS); > + mutex_lock(&dev_priv->gmbus_mutex); > + > + /* > + * In order to output Aksv to the receiver, use an indexed write to > + * pass the i2c command, and tell GMBUS to use the HW-provided value > + * instead of sourcing GMBUS3 for the data. > + */ > + ret = do_gmbus_xfer(adapter, &msg, 1, GMBUS_AKSV_SELECT, > + GMBUS_CYCLE_INDEX | > + (DRM_HDCP_DDC_AKSV << GMBUS_SLAVE_INDEX_SHIFT)); It might be nicer to just use two msgs here and modify gmbus_xfer_index_read() to support indexed writes as well. Would avoid having to pass in the GMBUS1 value all the way. Not sure what to do with GMBUS_AKSV_SELECT. I guess either pass it in explicitly like you're doing here, or maybe add a small helper ala gmbus_is_index_read() so that do_gmbus_xfer() could sniff out which source we should use based on the passed in msgs? > + > + mutex_unlock(&dev_priv->gmbus_mutex); > + intel_display_power_put(dev_priv, POWER_DOMAIN_GMBUS); > + > + return ret; > +} > + > static u32 gmbus_func(struct i2c_adapter *adapter) > { > return i2c_bit_algo.functionality(adapter) & > -- > 2.15.0.531.g2ccb3012c9-goog > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel -- Ville Syrjälä Intel OTC