From mboxrd@z Thu Jan 1 00:00:00 1970 From: Manasi Navare Subject: Re: [PATCH] drm/i915/dp: optimize eDP 1.4+ link config fast and narrow Date: Thu, 27 Sep 2018 06:03:53 -0700 Message-ID: <20180927130351.GA7279@intel.com> References: <20180905095321.13843-1-jani.nikula@intel.com> <20180927101045.GA3651@intel.com> <87pnwzry29.fsf@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7CE1F6E5CF for ; Thu, 27 Sep 2018 13:14:07 +0000 (UTC) Content-Disposition: inline In-Reply-To: <87pnwzry29.fsf@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Jani Nikula Cc: intel-gfx@lists.freedesktop.org, Rodrigo Vivi List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBTZXAgMjcsIDIwMTggYXQgMDI6MTU6MjZQTSArMDMwMCwgSmFuaSBOaWt1bGEgd3Jv dGU6Cj4gT24gVGh1LCAyNyBTZXAgMjAxOCwgTWFuYXNpIE5hdmFyZSA8bWFuYXNpLmQubmF2YXJl QGludGVsLmNvbT4gd3JvdGU6Cj4gPiBPbiBXZWQsIFNlcCAwNSwgMjAxOCBhdCAxMjo1MzoyMVBN ICswMzAwLCBKYW5pIE5pa3VsYSB3cm90ZToKPiA+PiBXZSd2ZSBvcHRlZCB0byB1c2UgdGhlIG1h eGltdW0gbGluayByYXRlIGFuZCBsYW5lIGNvdW50IGZvciBlRFAgcGFuZWxzLAo+ID4+IGJlY2F1 c2UgdHlwaWNhbGx5IHRoZSBtYXhpbXVtIHN1cHBvcnRlZCBjb25maWd1cmF0aW9uIHJlcG9ydGVk IGJ5IHRoZQo+ID4+IHBhbmVsIGhhcyBtYXRjaGVkIHRoZSBuYXRpdmUgcmVzb2x1dGlvbiByZXF1 aXJlbWVudHMgb2YgdGhlIHBhbmVsLCBhbmQKPiA+PiBvcHRpbWl6aW5nIHRoZSBsaW5rIGhhcyBs ZWFkIHRvIHByb2JsZW1zLgo+ID4+IAo+ID4+IFdpdGggZURQIDEuNCByYXRlIHNlbGVjdCBtZXRo b2QgYW5kIERTQyBmZWF0dXJlcywgdGhpcyBpcyBkZWNyZWFzaW5nbHkKPiA+PiB0aGUgY2FzZS4g VGhlcmUncyBhIG5lZWQgdG8gb3B0aW1pemUgdGhlIGxpbmsgcGFyYW1ldGVycy4gTW9yZW92ZXIs Cj4gPj4gYWxyZWFkeSBlRFAgMS4zIHN0YXRlcyBmYXN0IGxpbmsgd2l0aCBmZXdlciBsYW5lcyBp cyBwcmVmZXJyZWQgb3ZlciB0aGUKPiA+PiB3aWRlIGFuZCBzbG93LiAoV2lkZSBhbmQgc2xvdyBz aG91bGQgc3RpbGwgYmUgbW9yZSByZWxpYWJsZSBmb3IgbG9uZ2VyCj4gPj4gY2FibGUgbGVuZ3Ro cy4pCj4gPj4gCj4gPj4gQWRkaXRpb25hbGx5LCB0aGVyZSBoYXZlIGJlZW4gcmVwb3J0cyBvZiBw YW5lbHMgZmFpbGluZyBvbiBhcmJpdHJhcnkKPiA+PiBsaW5rIGNvbmZpZ3VyYXRpb25zLCBhbHRo b3VnaCBhcmd1YWJseSBhbGwgY29uZmlndXJhdGlvbnMgdGhleSBjbGFpbSB0bwo+ID4+IHN1cHBv cnQgc2hvdWxkIHdvcmsuCj4gPj4gCj4gPj4gT3B0aW1pemUgZURQIDEuNCsgbGluayBjb25maWcg ZmFzdCBhbmQgbmFycm93Lgo+ID4+IAo+ID4+IFNpZGUgbm90ZTogVGhlIGltcGxlbWVudGF0aW9u IGhhcyBhIG5lYXIgZHVwbGljYXRlIG9mIHRoZSBsaW5rIGNvbmZpZwo+ID4+IGZ1bmN0aW9uLCB3 aXRoIGp1c3QgdGhlIHR3byBpbm5lciBmb3IgbG9vcHMgdHVybmVkIGluc2lkZSBvdXQuIFBlcmhh cHMKPiA+PiB0aGVyZSdkIGJlIGEgd2F5IHRvIG1ha2UgdGhpcywgc2F5LCBtb3JlIHRhYmxlIGRy aXZlbiB0byByZWR1Y2UgdGhlCj4gPj4gZHVwbGljYXRpb24sIGJ1dCBzZWVtcyBsaWtlIHRoYXQg d291bGQgbGVhZCB0byBkdXBsaWNhdGlvbiBpbiB0aGUgdGFibGUKPiA+PiBnZW5lcmF0aW9uLiBX ZSdsbCBhbHNvIGhhdmUgdG8gc2VlIGhvdyB0aGUgbGluayBjb25maWcgb3B0aW1pemF0aW9uIGZv cgo+ID4+IERTQyB0dXJucyBvdXQuCj4gPj4gCj4gPj4gQ2M6IFZpbGxlIFN5cmrDpGzDpCA8dmls bGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Cj4gPj4gQ2M6IE1hbmFzaSBOYXZhcmUgPG1hbmFz aS5kLm5hdmFyZUBpbnRlbC5jb20+Cj4gPj4gQ2M6IFJvZHJpZ28gVml2aSA8cm9kcmlnby52aXZp QGludGVsLmNvbT4KPiA+PiBDYzogTWF0dCBBdHdvb2QgPG1hdHRoZXcucy5hdHdvb2RAaW50ZWwu Y29tPgo+ID4+IENjOiAiTGVlLCBTaGF3biBDIiA8c2hhd24uYy5sZWVAaW50ZWwuY29tPgo+ID4+ IEFja2VkLWJ5OiBSb2RyaWdvIFZpdmkgPHJvZHJpZ28udml2aUBpbnRlbC5jb20+Cj4gPj4gQnVn emlsbGE6IGh0dHBzOi8vYnVncy5mcmVlZGVza3RvcC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTI2 Nwo+ID4+IFNpZ25lZC1vZmYtYnk6IEphbmkgTmlrdWxhIDxqYW5pLm5pa3VsYUBpbnRlbC5jb20+ Cj4gPj4KClJldmlld2VkLWJ5OiBNYW5hc2kgTmF2YXJlIDxtYW5hc2kuZC5uYXZhcmVAaW50ZWwu Y29tPgoKIAo+ID4+IC0tLQo+ID4+IAo+ID4+IHYyIG9mIGh0dHA6Ly9wYXRjaHdvcmsuZnJlZWRl c2t0b3Aub3JnL3BhdGNoL21zZ2lkLzIwMTgwNTA5MDcxMzIxLjI4NTYzLTEtamFuaS5uaWt1bGFA aW50ZWwuY29tCj4gPj4gCj4gPj4gVW50ZXN0ZWQuIEl0J3MgcG9zc2libGUgdGhpcyBoZWxwcyB0 aGUgcmVmZXJlbmNlZCBidWcuIFRoZSBkb3duc2lkZSBpcwo+ID4+IHRoYXQgdGhpcyBwYXRjaCBo YXMgYSBidW5jaCBvZiBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgdG9vIG11Y2ggdG8KPiA+PiBiYWNr cG9ydCB0byBzdGFibGUga2VybmVscy4gSWYgdGhlIHBhdGNoIHdvcmtzLCB3ZSBtYXkgbmVlZCB0 byBjb25zaWRlcgo+ID4+IGhhY2tpbmcgdG9nZXRoZXIgYW4gdWdsaWVyIGJhY2twb3J0Lgo+ID4+ IC0tLQo+ID4+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jIHwgNzMgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0KPiA+PiAgMSBmaWxlIGNoYW5nZWQsIDYy IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQo+ID4+IAo+ID4+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZHAuYwo+ID4+IGluZGV4IDQzNmMyMmRlMzNiNi4uYmY3YjkxODMyYzhhIDEwMDY0NAo+ID4+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKPiA+PiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCj4gPj4gQEAgLTE5MjEsNiArMTkyMSw0MiBAQCBpbnRl bF9kcF9jb21wdXRlX2xpbmtfY29uZmlnX3dpZGUoc3RydWN0IGludGVsX2RwICppbnRlbF9kcCwK PiA+PiAgCXJldHVybiBmYWxzZTsKPiA+PiAgfQo+ID4+ICAKPiA+PiArLyogT3B0aW1pemUgbGlu ayBjb25maWcgaW4gb3JkZXI6IG1heCBicHAsIG1pbiBsYW5lcywgbWluIGNsb2NrICovCj4gPj4g K3N0YXRpYyBib29sCj4gPj4gK2ludGVsX2RwX2NvbXB1dGVfbGlua19jb25maWdfZmFzdChzdHJ1 Y3QgaW50ZWxfZHAgKmludGVsX2RwLAo+ID4+ICsJCQkJICBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0 ZSAqcGlwZV9jb25maWcsCj4gPj4gKwkJCQkgIGNvbnN0IHN0cnVjdCBsaW5rX2NvbmZpZ19saW1p dHMgKmxpbWl0cykKPiA+PiArewo+ID4+ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVz dGVkX21vZGUgPSAmcGlwZV9jb25maWctPmJhc2UuYWRqdXN0ZWRfbW9kZTsKPiA+PiArCWludCBi cHAsIGNsb2NrLCBsYW5lX2NvdW50Owo+ID4+ICsJaW50IG1vZGVfcmF0ZSwgbGlua19jbG9jaywg bGlua19hdmFpbDsKPiA+PiArCj4gPj4gKwlmb3IgKGJwcCA9IGxpbWl0cy0+bWF4X2JwcDsgYnBw ID49IGxpbWl0cy0+bWluX2JwcDsgYnBwIC09IDIgKiAzKSB7Cj4gPj4gKwkJbW9kZV9yYXRlID0g aW50ZWxfZHBfbGlua19yZXF1aXJlZChhZGp1c3RlZF9tb2RlLT5jcnRjX2Nsb2NrLAo+ID4+ICsJ CQkJCQkgICBicHApOwo+ID4+ICsKPiA+PiArCQlmb3IgKGxhbmVfY291bnQgPSBsaW1pdHMtPm1p bl9sYW5lX2NvdW50Owo+ID4+ICsJCSAgICAgbGFuZV9jb3VudCA8PSBsaW1pdHMtPm1heF9sYW5l X2NvdW50Owo+ID4+ICsJCSAgICAgbGFuZV9jb3VudCA8PD0gMSkgewo+ID4+ICsJCQlmb3IgKGNs b2NrID0gbGltaXRzLT5taW5fY2xvY2s7IGNsb2NrIDw9IGxpbWl0cy0+bWF4X2Nsb2NrOyBjbG9j aysrKSB7Cj4gPj4gKwkJCQlsaW5rX2Nsb2NrID0gaW50ZWxfZHAtPmNvbW1vbl9yYXRlc1tjbG9j a107Cj4gPj4gKwkJCQlsaW5rX2F2YWlsID0gaW50ZWxfZHBfbWF4X2RhdGFfcmF0ZShsaW5rX2Ns b2NrLAo+ID4+ICsJCQkJCQkJCSAgICBsYW5lX2NvdW50KTsKPiA+PiArCj4gPj4gKwkJCQlpZiAo bW9kZV9yYXRlIDw9IGxpbmtfYXZhaWwpIHsKPiA+PiArCQkJCQlwaXBlX2NvbmZpZy0+bGFuZV9j b3VudCA9IGxhbmVfY291bnQ7Cj4gPj4gKwkJCQkJcGlwZV9jb25maWctPnBpcGVfYnBwID0gYnBw Owo+ID4+ICsJCQkJCXBpcGVfY29uZmlnLT5wb3J0X2Nsb2NrID0gbGlua19jbG9jazsKPiA+PiAr Cj4gPj4gKwkJCQkJcmV0dXJuIHRydWU7Cj4gPj4gKwkJCQl9Cj4gPj4gKwkJCX0KPiA+PiArCQl9 Cj4gPj4gKwl9Cj4gPj4gKwo+ID4+ICsJcmV0dXJuIGZhbHNlOwo+ID4+ICt9Cj4gPj4gKwo+ID4+ ICBzdGF0aWMgYm9vbAo+ID4+ICBpbnRlbF9kcF9jb21wdXRlX2xpbmtfY29uZmlnKHN0cnVjdCBp bnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ID4+ICAJCQkgICAgIHN0cnVjdCBpbnRlbF9jcnRjX3N0 YXRlICpwaXBlX2NvbmZpZykKPiA+PiBAQCAtMTk0NSwxMyArMTk4MSwxNSBAQCBpbnRlbF9kcF9j b21wdXRlX2xpbmtfY29uZmlnKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyLAo+ID4+ICAJ bGltaXRzLm1pbl9icHAgPSA2ICogMzsKPiA+PiAgCWxpbWl0cy5tYXhfYnBwID0gaW50ZWxfZHBf Y29tcHV0ZV9icHAoaW50ZWxfZHAsIHBpcGVfY29uZmlnKTsKPiA+PiAgCj4gPj4gLQlpZiAoaW50 ZWxfZHBfaXNfZWRwKGludGVsX2RwKSkgewo+ID4+ICsJaWYgKGludGVsX2RwX2lzX2VkcChpbnRl bF9kcCkgJiYgaW50ZWxfZHAtPmVkcF9kcGNkWzBdIDwgRFBfRURQXzE0KSB7Cj4gPj4gIAkJLyoK PiA+PiAgCQkgKiBVc2UgdGhlIG1heGltdW0gY2xvY2sgYW5kIG51bWJlciBvZiBsYW5lcyB0aGUg ZURQIHBhbmVsCj4gPj4gLQkJICogYWR2ZXJ0aXplcyBiZWluZyBjYXBhYmxlIG9mLiBUaGUgcGFu ZWxzIGFyZSBnZW5lcmFsbHkKPiA+PiAtCQkgKiBkZXNpZ25lZCB0byBzdXBwb3J0IG9ubHkgYSBz aW5nbGUgY2xvY2sgYW5kIGxhbmUKPiA+PiAtCQkgKiBjb25maWd1cmF0aW9uLCBhbmQgdHlwaWNh bGx5IHRoZXNlIHZhbHVlcyBjb3JyZXNwb25kIHRvIHRoZQo+ID4+IC0JCSAqIG5hdGl2ZSByZXNv bHV0aW9uIG9mIHRoZSBwYW5lbC4KPiA+PiArCQkgKiBhZHZlcnRpemVzIGJlaW5nIGNhcGFibGUg b2YuIFRoZSBlRFAgMS4zIGFuZCBlYXJsaWVyIHBhbmVscwo+ID4+ICsJCSAqIGFyZSBnZW5lcmFs bHkgZGVzaWduZWQgdG8gc3VwcG9ydCBvbmx5IGEgc2luZ2xlIGNsb2NrIGFuZAo+ID4+ICsJCSAq IGxhbmUgY29uZmlndXJhdGlvbiwgYW5kIHR5cGljYWxseSB0aGVzZSB2YWx1ZXMgY29ycmVzcG9u ZCB0bwo+ID4+ICsJCSAqIHRoZSBuYXRpdmUgcmVzb2x1dGlvbiBvZiB0aGUgcGFuZWwuIFdpdGgg ZURQIDEuNCByYXRlIHNlbGVjdAo+ID4+ICsJCSAqIGFuZCBEU0MsIHRoaXMgaXMgZGVjcmVhc2lu Z2x5IHRoZSBjYXNlLCBhbmQgd2UgbmVlZCB0byBiZQo+ID4+ICsJCSAqIGFibGUgdG8gc2VsZWN0 IGxlc3MgdGhhbiBtYXhpbXVtIGxpbmsgY29uZmlnLgo+ID4+ICAJCSAqLwo+ID4+ICAJCWxpbWl0 cy5taW5fbGFuZV9jb3VudCA9IGxpbWl0cy5tYXhfbGFuZV9jb3VudDsKPiA+PiAgCQlsaW1pdHMu bWluX2Nsb2NrID0gbGltaXRzLm1heF9jbG9jazsKPiA+PiBAQCAtMTk2NSwxMiArMjAwMywyNSBA QCBpbnRlbF9kcF9jb21wdXRlX2xpbmtfY29uZmlnKHN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNv ZGVyLAo+ID4+ICAJCSAgICAgIGludGVsX2RwLT5jb21tb25fcmF0ZXNbbGltaXRzLm1heF9jbG9j a10sCj4gPj4gIAkJICAgICAgbGltaXRzLm1heF9icHAsIGFkanVzdGVkX21vZGUtPmNydGNfY2xv Y2spOwo+ID4+ICAKPiA+PiAtCS8qCj4gPj4gLQkgKiBPcHRpbWl6ZSBmb3Igc2xvdyBhbmQgd2lk ZS4gVGhpcyBpcyB0aGUgcGxhY2UgdG8gYWRkIGFsdGVybmF0aXZlCj4gPj4gLQkgKiBvcHRpbWl6 YXRpb24gcG9saWN5Lgo+ID4+IC0JICovCj4gPj4gLQlpZiAoIWludGVsX2RwX2NvbXB1dGVfbGlu a19jb25maWdfd2lkZShpbnRlbF9kcCwgcGlwZV9jb25maWcsICZsaW1pdHMpKQo+ID4+IC0JCXJl dHVybiBmYWxzZTsKPiA+PiArCWlmIChpbnRlbF9kcF9pc19lZHAoaW50ZWxfZHApKSB7Cj4gPgo+ ID4gTml0cGljayBiZWxvdzoKPiA+IENhbiB3ZSBuZXN0IHRoZSBlZHBfcmV2IDwgRFBfRURQXzE0 IGNvbmRpdGlvbiB3aXRoaW4gdGhpcyBpZiBjb25kaXRpb24/IExpa2UgYmVsb3c6Cj4gPgo+ID4g CQlpZiAoaW50ZWxfZHAtPmVkcF9kcGNkWzBdIDwgRFBfRURQXzE0KSB7Cj4gPiAJCQlsaW1pdHMu bWluX2xhbmVfY291bnQgPSBsaW1pdHMubWF4X2xhbmVfY291bnQ7Cj4gPiAJCQlsaW1pdHMubWlu X2Nsb2NrID0gbGltaXRzLm1heF9jbG9jazsKPiA+IAkJfQo+IAo+IERvaW5nIHRoYXQgd291bGQg cmVxdWlyZSBkdXBsaWNhdGluZyB0aGUgZGVidWcgbG9nZ2luZyB0byBib3RoIGJyYW5jaGVzCj4g b2YgdGhlIGlmIChpbnRlbF9kcF9pc19lZHAoaW50ZWxfZHApKSBjb25kaXRpb24uCj4gCj4gQlIs Cj4gSmFuaS4KPgoKT2sgeWVzIG1ha2VzIHNlbnNlLCBub3cgaXRzIGNvbW1vbiB0byBib3RoIGVE UCBhbmQgRFAgY2FzZXMuCgpNYW5hc2kKIAo+ID4KPiA+IFdpdGggdGhhdCwKPiA+Cj4gPiBSZXZp ZXdlZC1ieTogTWFuYXNpIE5hdmFyZSA8bWFuYXNpLmQubmF2YXJlQGludGVsLmNvbT4KPiA+Cj4g PiBNYW5hc2kKPiA+Cj4gPj4gKwkJLyoKPiA+PiArCQkgKiBPcHRpbWl6ZSBmb3IgZmFzdCBhbmQg bmFycm93LiBlRFAgMS4zIHNlY3Rpb24gMy4zIGFuZCBlRFAgMS40Cj4gPj4gKwkJICogc2VjdGlv biBBLjE6ICJJdCBpcyByZWNvbW1lbmRlZCB0aGF0IHRoZSBtaW5pbXVtIG51bWJlciBvZgo+ID4+ ICsJCSAqIGxhbmVzIGJlIHVzZWQsIHVzaW5nIHRoZSBtaW5pbXVtIGxpbmsgcmF0ZSBhbGxvd2Vk IGZvciB0aGF0Cj4gPj4gKwkJICogbGFuZSBjb25maWd1cmF0aW9uLiIKPiA+PiArCQkgKgo+ID4+ ICsJCSAqIE5vdGUgdGhhdCB3ZSB1c2UgdGhlIG1heCBjbG9jayBhbmQgbGFuZSBjb3VudCBmb3Ig ZURQIDEuMyBhbmQKPiA+PiArCQkgKiBlYXJsaWVyLCBhbmQgZmFzdCB2cy4gd2lkZSBpcyBpcnJl bGV2YW50Lgo+ID4+ICsJCSAqLwo+ID4+ICsJCWlmICghaW50ZWxfZHBfY29tcHV0ZV9saW5rX2Nv bmZpZ19mYXN0KGludGVsX2RwLCBwaXBlX2NvbmZpZywKPiA+PiArCQkJCQkJICAgICAgICZsaW1p dHMpKQo+ID4+ICsJCQlyZXR1cm4gZmFsc2U7Cj4gPj4gKwl9IGVsc2Ugewo+ID4+ICsJCS8qIE9w dGltaXplIGZvciBzbG93IGFuZCB3aWRlLiAqLwo+ID4+ICsJCWlmICghaW50ZWxfZHBfY29tcHV0 ZV9saW5rX2NvbmZpZ193aWRlKGludGVsX2RwLCBwaXBlX2NvbmZpZywKPiA+PiArCQkJCQkJICAg ICAgICZsaW1pdHMpKQo+ID4+ICsJCQlyZXR1cm4gZmFsc2U7Cj4gPj4gKwl9Cj4gPj4gIAo+ID4+ ICAJRFJNX0RFQlVHX0tNUygiRFAgbGFuZSBjb3VudCAlZCBjbG9jayAlZCBicHAgJWRcbiIsCj4g Pj4gIAkJICAgICAgcGlwZV9jb25maWctPmxhbmVfY291bnQsIHBpcGVfY29uZmlnLT5wb3J0X2Ns b2NrLAo+ID4+IC0tIAo+ID4+IDIuMTEuMAo+ID4+IAo+IAo+IC0tIAo+IEphbmkgTmlrdWxhLCBJ bnRlbCBPcGVuIFNvdXJjZSBHcmFwaGljcyBDZW50ZXIKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==