From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Paul Subject: [PATCH 2/3] drm/nouveau/kms/nv50-: Store the bpc we're using in nv50_head_atom Date: Fri, 15 Nov 2019 16:07:19 -0500 Message-ID: <20191115210728.3467-3-lyude@redhat.com> References: <20191115210728.3467-1-lyude@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=WINDOWS-1252 Content-Transfer-Encoding: quoted-printable Return-path: In-Reply-To: <20191115210728.3467-1-lyude@redhat.com> Sender: stable-owner@vger.kernel.org To: nouveau@lists.freedesktop.org Cc: Ben Skeggs , Daniel Vetter , David Airlie , Jerry Zuo , Harry Wentland , Juston Li , Sean Paul , Laurent Pinchart , stable@vger.kernel.org, David Airlie , Daniel Vetter , Ilia Mirkin , Sam Ravnborg , Maarten Lankhorst , Peteris Rudzusiks , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org List-Id: nouveau.vger.kernel.org In order to be able to use bpc values that are different from what the connector reports, we want to be able to store the bpc value we decide on using for an atomic state in nv50_head_atom and refer to that instead of simply using the value that the connector reports throughout the whole atomic check phase and commit phase. This will let us (eventually) implement the max bpc connector property, and will also be needed for limiting the bpc we use on MST displays to 8 in the next commit. Signed-off-by: Lyude Paul Fixes: 232c9eec417a ("drm/nouveau: Use atomic VCPI helpers for MST") Cc: Ben Skeggs Cc: Daniel Vetter Cc: David Airlie Cc: Jerry Zuo Cc: Harry Wentland Cc: Juston Li Cc: Sean Paul Cc: Laurent Pinchart Cc: # v5.1+ --- drivers/gpu/drm/nouveau/dispnv50/atom.h | 1 + drivers/gpu/drm/nouveau/dispnv50/disp.c | 57 ++++++++++++++----------- drivers/gpu/drm/nouveau/dispnv50/head.c | 5 +-- 3 files changed, 36 insertions(+), 27 deletions(-) diff --git a/drivers/gpu/drm/nouveau/dispnv50/atom.h b/drivers/gpu/drm/nouv= eau/dispnv50/atom.h index 43df86c38f58..24f7700768da 100644 --- a/drivers/gpu/drm/nouveau/dispnv50/atom.h +++ b/drivers/gpu/drm/nouveau/dispnv50/atom.h @@ -114,6 +114,7 @@ struct nv50_head_atom { =09=09u8 nhsync:1; =09=09u8 nvsync:1; =09=09u8 depth:4; +=09=09u8 bpc; =09} or; =20 =09/* Currently only used for MST */ diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c b/drivers/gpu/drm/nouv= eau/dispnv50/disp.c index 6327aaf37c08..93665aecce57 100644 --- a/drivers/gpu/drm/nouveau/dispnv50/disp.c +++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c @@ -353,10 +353,20 @@ nv50_outp_atomic_check(struct drm_encoder *encoder, =09=09 struct drm_crtc_state *crtc_state, =09=09 struct drm_connector_state *conn_state) { -=09struct nouveau_connector *nv_connector =3D -=09=09nouveau_connector(conn_state->connector); -=09return nv50_outp_atomic_check_view(encoder, crtc_state, conn_state, -=09=09=09=09=09 nv_connector->native_mode); +=09struct drm_connector *connector =3D conn_state->connector; +=09struct nouveau_connector *nv_connector =3D nouveau_connector(connector)= ; +=09struct nv50_head_atom *asyh =3D nv50_head_atom(crtc_state); +=09int ret; + +=09ret =3D nv50_outp_atomic_check_view(encoder, crtc_state, conn_state, +=09=09=09=09=09 nv_connector->native_mode); +=09if (ret) +=09=09return ret; + +=09if (crtc_state->mode_changed || crtc_state->connectors_changed) +=09=09asyh->or.bpc =3D connector->display_info.bpc; + +=09return 0; } =20 /*************************************************************************= ***** @@ -786,10 +796,10 @@ nv50_msto_atomic_check(struct drm_encoder *encoder, =09 * may have changed after the state was duplicated =09 */ =09if (!state->duplicated) { -=09=09const int bpp =3D connector->display_info.bpc * 3; =09=09const int clock =3D crtc_state->adjusted_mode.clock; =20 -=09=09asyh->dp.pbn =3D drm_dp_calc_pbn_mode(clock, bpp); +=09=09asyh->or.bpc =3D connector->display_info.bpc; +=09=09asyh->dp.pbn =3D drm_dp_calc_pbn_mode(clock, asyh->or.bpc * 3); =09} =20 =09slots =3D drm_dp_atomic_find_vcpi_slots(state, &mstm->mgr, mstc->port, @@ -802,6 +812,17 @@ nv50_msto_atomic_check(struct drm_encoder *encoder, =09return 0; } =20 +static u8 +nv50_dp_bpc_to_depth(unsigned int bpc) +{ +=09switch (bpc) { +=09case 6: return 0x2; +=09case 8: return 0x5; +=09case 10: /* fall-through */ +=09default: return 0x6; +=09} +} + static void nv50_msto_enable(struct drm_encoder *encoder) { @@ -812,7 +833,7 @@ nv50_msto_enable(struct drm_encoder *encoder) =09struct nv50_mstm *mstm =3D NULL; =09struct drm_connector *connector; =09struct drm_connector_list_iter conn_iter; -=09u8 proto, depth; +=09u8 proto; =09bool r; =20 =09drm_connector_list_iter_begin(encoder->dev, &conn_iter); @@ -841,14 +862,8 @@ nv50_msto_enable(struct drm_encoder *encoder) =09else =09=09proto =3D 0x9; =20 -=09switch (mstc->connector.display_info.bpc) { -=09case 6: depth =3D 0x2; break; -=09case 8: depth =3D 0x5; break; -=09case 10: -=09default: depth =3D 0x6; break; -=09} - -=09mstm->outp->update(mstm->outp, head->base.index, armh, proto, depth); +=09mstm->outp->update(mstm->outp, head->base.index, armh, proto, +=09=09=09 nv50_dp_bpc_to_depth(armh->or.bpc)); =20 =09msto->head =3D head; =09msto->mstc =3D mstc; @@ -1502,20 +1517,14 @@ nv50_sor_enable(struct drm_encoder *encoder) =09=09=09=09=09lvds.lvds.script |=3D 0x0200; =09=09=09} =20 -=09=09=09if (nv_connector->base.display_info.bpc =3D=3D 8) +=09=09=09if (asyh->or.bpc =3D=3D 8) =09=09=09=09lvds.lvds.script |=3D 0x0200; =09=09} =20 =09=09nvif_mthd(&disp->disp->object, 0, &lvds, sizeof(lvds)); =09=09break; =09case DCB_OUTPUT_DP: -=09=09if (nv_connector->base.display_info.bpc =3D=3D 6) -=09=09=09depth =3D 0x2; -=09=09else -=09=09if (nv_connector->base.display_info.bpc =3D=3D 8) -=09=09=09depth =3D 0x5; -=09=09else -=09=09=09depth =3D 0x6; +=09=09depth =3D nv50_dp_bpc_to_depth(asyh->or.bpc); =20 =09=09if (nv_encoder->link & 1) =09=09=09proto =3D 0x8; @@ -1666,7 +1675,7 @@ nv50_pior_enable(struct drm_encoder *encoder) =09nv50_outp_acquire(nv_encoder); =20 =09nv_connector =3D nouveau_encoder_connector_get(nv_encoder); -=09switch (nv_connector->base.display_info.bpc) { +=09switch (asyh->or.bpc) { =09case 10: asyh->or.depth =3D 0x6; break; =09case 8: asyh->or.depth =3D 0x5; break; =09case 6: asyh->or.depth =3D 0x2; break; diff --git a/drivers/gpu/drm/nouveau/dispnv50/head.c b/drivers/gpu/drm/nouv= eau/dispnv50/head.c index 71c23bf1fe25..c9692df2b76c 100644 --- a/drivers/gpu/drm/nouveau/dispnv50/head.c +++ b/drivers/gpu/drm/nouveau/dispnv50/head.c @@ -81,18 +81,17 @@ nv50_head_atomic_check_dither(struct nv50_head_atom *ar= mh, =09=09=09 struct nv50_head_atom *asyh, =09=09=09 struct nouveau_conn_atom *asyc) { -=09struct drm_connector *connector =3D asyc->state.connector; =09u32 mode =3D 0x00; =20 =09if (asyc->dither.mode =3D=3D DITHERING_MODE_AUTO) { -=09=09if (asyh->base.depth > connector->display_info.bpc * 3) +=09=09if (asyh->base.depth > asyh->or.bpc * 3) =09=09=09mode =3D DITHERING_MODE_DYNAMIC2X2; =09} else { =09=09mode =3D asyc->dither.mode; =09} =20 =09if (asyc->dither.depth =3D=3D DITHERING_DEPTH_AUTO) { -=09=09if (connector->display_info.bpc >=3D 8) +=09=09if (asyh->or.bpc >=3D 8) =09=09=09mode |=3D DITHERING_DEPTH_8BPC; =09} else { =09=09mode |=3D asyc->dither.depth; --=20 2.21.0 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 12645C33C9B for ; Fri, 15 Nov 2019 21:08:00 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E6B792073A for ; Fri, 15 Nov 2019 21:07:59 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E6B792073A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 9B58A6EB0C; Fri, 15 Nov 2019 21:07:58 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 550526EB11 for ; Fri, 15 Nov 2019 21:07:57 +0000 (UTC) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-143-Xdi1G-7AOfe_K69KOqKFXQ-1; Fri, 15 Nov 2019 16:07:55 -0500 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 6B1282F29; Fri, 15 Nov 2019 21:07:52 +0000 (UTC) Received: from malachite.bss.redhat.com (dhcp-10-20-1-11.bss.redhat.com [10.20.1.11]) by smtp.corp.redhat.com (Postfix) with ESMTP id DAC4E69191; Fri, 15 Nov 2019 21:07:50 +0000 (UTC) From: Lyude Paul To: nouveau@lists.freedesktop.org Subject: [PATCH 2/3] drm/nouveau/kms/nv50-: Store the bpc we're using in nv50_head_atom Date: Fri, 15 Nov 2019 16:07:19 -0500 Message-Id: <20191115210728.3467-3-lyude@redhat.com> In-Reply-To: <20191115210728.3467-1-lyude@redhat.com> References: <20191115210728.3467-1-lyude@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-MC-Unique: Xdi1G-7AOfe_K69KOqKFXQ-1 X-Mimecast-Spam-Score: 0 X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1573852076; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=HmOhCKKMWRxv4wemJ97qJrxNMoZbSfaKT4swvCCkCRQ=; b=WavH8sfasAG7JBglvmAPsAlMSNT+DTowGLW39n+7Q5A4B3ab+RlcE5BhjJSpuMxQFyBCdR yhHO7A9awC5G71/wZ02PpKdAvjGarfEsW9i8whGGNCgWq2zNe0T6Id9UI6ueYicZ2+WFcx JNetI7dVFI2v9tZkD76kp2xcIIV3z54= X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Sam Ravnborg , David Airlie , Daniel Vetter , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org, Jerry Zuo , Sean Paul , Ben Skeggs , Peteris Rudzusiks , David Airlie , Juston Li , Laurent Pinchart Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Message-ID: <20191115210719.-4jetCP8YzlxO9tyR0Ib27dxjPueiltjeX_T4hfHXRo@z> SW4gb3JkZXIgdG8gYmUgYWJsZSB0byB1c2UgYnBjIHZhbHVlcyB0aGF0IGFyZSBkaWZmZXJlbnQg ZnJvbSB3aGF0IHRoZQpjb25uZWN0b3IgcmVwb3J0cywgd2Ugd2FudCB0byBiZSBhYmxlIHRvIHN0 b3JlIHRoZSBicGMgdmFsdWUgd2UgZGVjaWRlCm9uIHVzaW5nIGZvciBhbiBhdG9taWMgc3RhdGUg aW4gbnY1MF9oZWFkX2F0b20gYW5kIHJlZmVyIHRvIHRoYXQgaW5zdGVhZApvZiBzaW1wbHkgdXNp bmcgdGhlIHZhbHVlIHRoYXQgdGhlIGNvbm5lY3RvciByZXBvcnRzIHRocm91Z2hvdXQgdGhlCndo b2xlIGF0b21pYyBjaGVjayBwaGFzZSBhbmQgY29tbWl0IHBoYXNlLiBUaGlzIHdpbGwgbGV0IHVz IChldmVudHVhbGx5KQppbXBsZW1lbnQgdGhlIG1heCBicGMgY29ubmVjdG9yIHByb3BlcnR5LCBh bmQgd2lsbCBhbHNvIGJlIG5lZWRlZCBmb3IKbGltaXRpbmcgdGhlIGJwYyB3ZSB1c2Ugb24gTVNU IGRpc3BsYXlzIHRvIDggaW4gdGhlIG5leHQgY29tbWl0LgoKU2lnbmVkLW9mZi1ieTogTHl1ZGUg UGF1bCA8bHl1ZGVAcmVkaGF0LmNvbT4KRml4ZXM6IDIzMmM5ZWVjNDE3YSAoImRybS9ub3V2ZWF1 OiBVc2UgYXRvbWljIFZDUEkgaGVscGVycyBmb3IgTVNUIikKQ2M6IEJlbiBTa2VnZ3MgPGJza2Vn Z3NAcmVkaGF0LmNvbT4KQ2M6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+ CkNjOiBEYXZpZCBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KQ2M6IEplcnJ5IFp1byA8SmVy cnkuWnVvQGFtZC5jb20+CkNjOiBIYXJyeSBXZW50bGFuZCA8aGFycnkud2VudGxhbmRAYW1kLmNv bT4KQ2M6IEp1c3RvbiBMaSA8anVzdG9uLmxpQGludGVsLmNvbT4KQ2M6IFNlYW4gUGF1bCA8c2Vh bnBhdWxAY2hyb21pdW0ub3JnPgpDYzogTGF1cmVudCBQaW5jaGFydCA8bGF1cmVudC5waW5jaGFy dEBpZGVhc29uYm9hcmQuY29tPgpDYzogPHN0YWJsZUB2Z2VyLmtlcm5lbC5vcmc+ICMgdjUuMSsK LS0tCiBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9kaXNwbnY1MC9hdG9tLmggfCAgMSArCiBkcml2 ZXJzL2dwdS9kcm0vbm91dmVhdS9kaXNwbnY1MC9kaXNwLmMgfCA1NyArKysrKysrKysrKysrKy0t LS0tLS0tLS0tCiBkcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9kaXNwbnY1MC9oZWFkLmMgfCAgNSAr LS0KIDMgZmlsZXMgY2hhbmdlZCwgMzYgaW5zZXJ0aW9ucygrKSwgMjcgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvZGlzcG52NTAvYXRvbS5oIGIvZHJp dmVycy9ncHUvZHJtL25vdXZlYXUvZGlzcG52NTAvYXRvbS5oCmluZGV4IDQzZGY4NmMzOGY1OC4u MjRmNzcwMDc2OGRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9kaXNwbnY1 MC9hdG9tLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvZGlzcG52NTAvYXRvbS5oCkBA IC0xMTQsNiArMTE0LDcgQEAgc3RydWN0IG52NTBfaGVhZF9hdG9tIHsKIAkJdTggbmhzeW5jOjE7 CiAJCXU4IG52c3luYzoxOwogCQl1OCBkZXB0aDo0OworCQl1OCBicGM7CiAJfSBvcjsKIAogCS8q IEN1cnJlbnRseSBvbmx5IHVzZWQgZm9yIE1TVCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL25vdXZlYXUvZGlzcG52NTAvZGlzcC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvZGlz cG52NTAvZGlzcC5jCmluZGV4IDYzMjdhYWYzN2MwOC4uOTM2NjVhZWNjZTU3IDEwMDY0NAotLS0g YS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9kaXNwbnY1MC9kaXNwLmMKKysrIGIvZHJpdmVycy9n cHUvZHJtL25vdXZlYXUvZGlzcG52NTAvZGlzcC5jCkBAIC0zNTMsMTAgKzM1MywyMCBAQCBudjUw X291dHBfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKIAkJICAgICAg IHN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSwKIAkJICAgICAgIHN0cnVjdCBkcm1f Y29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlKQogewotCXN0cnVjdCBub3V2ZWF1X2Nvbm5lY3Rv ciAqbnZfY29ubmVjdG9yID0KLQkJbm91dmVhdV9jb25uZWN0b3IoY29ubl9zdGF0ZS0+Y29ubmVj dG9yKTsKLQlyZXR1cm4gbnY1MF9vdXRwX2F0b21pY19jaGVja192aWV3KGVuY29kZXIsIGNydGNf c3RhdGUsIGNvbm5fc3RhdGUsCi0JCQkJCSAgIG52X2Nvbm5lY3Rvci0+bmF0aXZlX21vZGUpOwor CXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSBjb25uX3N0YXRlLT5jb25uZWN0b3I7 CisJc3RydWN0IG5vdXZlYXVfY29ubmVjdG9yICpudl9jb25uZWN0b3IgPSBub3V2ZWF1X2Nvbm5l Y3Rvcihjb25uZWN0b3IpOworCXN0cnVjdCBudjUwX2hlYWRfYXRvbSAqYXN5aCA9IG52NTBfaGVh ZF9hdG9tKGNydGNfc3RhdGUpOworCWludCByZXQ7CisKKwlyZXQgPSBudjUwX291dHBfYXRvbWlj X2NoZWNrX3ZpZXcoZW5jb2RlciwgY3J0Y19zdGF0ZSwgY29ubl9zdGF0ZSwKKwkJCQkJICBudl9j b25uZWN0b3ItPm5hdGl2ZV9tb2RlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYg KGNydGNfc3RhdGUtPm1vZGVfY2hhbmdlZCB8fCBjcnRjX3N0YXRlLT5jb25uZWN0b3JzX2NoYW5n ZWQpCisJCWFzeWgtPm9yLmJwYyA9IGNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmJwYzsKKworCXJl dHVybiAwOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC03ODYsMTAgKzc5NiwxMCBA QCBudjUwX21zdG9fYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwKIAkg KiBtYXkgaGF2ZSBjaGFuZ2VkIGFmdGVyIHRoZSBzdGF0ZSB3YXMgZHVwbGljYXRlZAogCSAqLwog CWlmICghc3RhdGUtPmR1cGxpY2F0ZWQpIHsKLQkJY29uc3QgaW50IGJwcCA9IGNvbm5lY3Rvci0+ ZGlzcGxheV9pbmZvLmJwYyAqIDM7CiAJCWNvbnN0IGludCBjbG9jayA9IGNydGNfc3RhdGUtPmFk anVzdGVkX21vZGUuY2xvY2s7CiAKLQkJYXN5aC0+ZHAucGJuID0gZHJtX2RwX2NhbGNfcGJuX21v ZGUoY2xvY2ssIGJwcCk7CisJCWFzeWgtPm9yLmJwYyA9IGNvbm5lY3Rvci0+ZGlzcGxheV9pbmZv LmJwYzsKKwkJYXN5aC0+ZHAucGJuID0gZHJtX2RwX2NhbGNfcGJuX21vZGUoY2xvY2ssIGFzeWgt Pm9yLmJwYyAqIDMpOwogCX0KIAogCXNsb3RzID0gZHJtX2RwX2F0b21pY19maW5kX3ZjcGlfc2xv dHMoc3RhdGUsICZtc3RtLT5tZ3IsIG1zdGMtPnBvcnQsCkBAIC04MDIsNiArODEyLDE3IEBAIG52 NTBfbXN0b19hdG9taWNfY2hlY2soc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAogCXJldHVy biAwOwogfQogCitzdGF0aWMgdTgKK252NTBfZHBfYnBjX3RvX2RlcHRoKHVuc2lnbmVkIGludCBi cGMpCit7CisJc3dpdGNoIChicGMpIHsKKwljYXNlICA2OiByZXR1cm4gMHgyOworCWNhc2UgIDg6 IHJldHVybiAweDU7CisJY2FzZSAxMDogLyogZmFsbC10aHJvdWdoICovCisJZGVmYXVsdDogcmV0 dXJuIDB4NjsKKwl9Cit9CisKIHN0YXRpYyB2b2lkCiBudjUwX21zdG9fZW5hYmxlKHN0cnVjdCBk cm1fZW5jb2RlciAqZW5jb2RlcikKIHsKQEAgLTgxMiw3ICs4MzMsNyBAQCBudjUwX21zdG9fZW5h YmxlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKIAlzdHJ1Y3QgbnY1MF9tc3RtICptc3Rt ID0gTlVMTDsKIAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yOwogCXN0cnVjdCBkcm1f Y29ubmVjdG9yX2xpc3RfaXRlciBjb25uX2l0ZXI7Ci0JdTggcHJvdG8sIGRlcHRoOworCXU4IHBy b3RvOwogCWJvb2wgcjsKIAogCWRybV9jb25uZWN0b3JfbGlzdF9pdGVyX2JlZ2luKGVuY29kZXIt PmRldiwgJmNvbm5faXRlcik7CkBAIC04NDEsMTQgKzg2Miw4IEBAIG52NTBfbXN0b19lbmFibGUo c3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQogCWVsc2UKIAkJcHJvdG8gPSAweDk7CiAKLQlz d2l0Y2ggKG1zdGMtPmNvbm5lY3Rvci5kaXNwbGF5X2luZm8uYnBjKSB7Ci0JY2FzZSAgNjogZGVw dGggPSAweDI7IGJyZWFrOwotCWNhc2UgIDg6IGRlcHRoID0gMHg1OyBicmVhazsKLQljYXNlIDEw OgotCWRlZmF1bHQ6IGRlcHRoID0gMHg2OyBicmVhazsKLQl9Ci0KLQltc3RtLT5vdXRwLT51cGRh dGUobXN0bS0+b3V0cCwgaGVhZC0+YmFzZS5pbmRleCwgYXJtaCwgcHJvdG8sIGRlcHRoKTsKKwlt c3RtLT5vdXRwLT51cGRhdGUobXN0bS0+b3V0cCwgaGVhZC0+YmFzZS5pbmRleCwgYXJtaCwgcHJv dG8sCisJCQkgICBudjUwX2RwX2JwY190b19kZXB0aChhcm1oLT5vci5icGMpKTsKIAogCW1zdG8t PmhlYWQgPSBoZWFkOwogCW1zdG8tPm1zdGMgPSBtc3RjOwpAQCAtMTUwMiwyMCArMTUxNywxNCBA QCBudjUwX3Nvcl9lbmFibGUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQogCQkJCQlsdmRz Lmx2ZHMuc2NyaXB0IHw9IDB4MDIwMDsKIAkJCX0KIAotCQkJaWYgKG52X2Nvbm5lY3Rvci0+YmFz ZS5kaXNwbGF5X2luZm8uYnBjID09IDgpCisJCQlpZiAoYXN5aC0+b3IuYnBjID09IDgpCiAJCQkJ bHZkcy5sdmRzLnNjcmlwdCB8PSAweDAyMDA7CiAJCX0KIAogCQludmlmX210aGQoJmRpc3AtPmRp c3AtPm9iamVjdCwgMCwgJmx2ZHMsIHNpemVvZihsdmRzKSk7CiAJCWJyZWFrOwogCWNhc2UgRENC X09VVFBVVF9EUDoKLQkJaWYgKG52X2Nvbm5lY3Rvci0+YmFzZS5kaXNwbGF5X2luZm8uYnBjID09 IDYpCi0JCQlkZXB0aCA9IDB4MjsKLQkJZWxzZQotCQlpZiAobnZfY29ubmVjdG9yLT5iYXNlLmRp c3BsYXlfaW5mby5icGMgPT0gOCkKLQkJCWRlcHRoID0gMHg1OwotCQllbHNlCi0JCQlkZXB0aCA9 IDB4NjsKKwkJZGVwdGggPSBudjUwX2RwX2JwY190b19kZXB0aChhc3loLT5vci5icGMpOwogCiAJ CWlmIChudl9lbmNvZGVyLT5saW5rICYgMSkKIAkJCXByb3RvID0gMHg4OwpAQCAtMTY2Niw3ICsx Njc1LDcgQEAgbnY1MF9waW9yX2VuYWJsZShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpCiAJ bnY1MF9vdXRwX2FjcXVpcmUobnZfZW5jb2Rlcik7CiAKIAludl9jb25uZWN0b3IgPSBub3V2ZWF1 X2VuY29kZXJfY29ubmVjdG9yX2dldChudl9lbmNvZGVyKTsKLQlzd2l0Y2ggKG52X2Nvbm5lY3Rv ci0+YmFzZS5kaXNwbGF5X2luZm8uYnBjKSB7CisJc3dpdGNoIChhc3loLT5vci5icGMpIHsKIAlj YXNlIDEwOiBhc3loLT5vci5kZXB0aCA9IDB4NjsgYnJlYWs7CiAJY2FzZSAgODogYXN5aC0+b3Iu ZGVwdGggPSAweDU7IGJyZWFrOwogCWNhc2UgIDY6IGFzeWgtPm9yLmRlcHRoID0gMHgyOyBicmVh azsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2Rpc3BudjUwL2hlYWQuYyBi L2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2Rpc3BudjUwL2hlYWQuYwppbmRleCA3MWMyM2JmMWZl MjUuLmM5NjkyZGYyYjc2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvZGlz cG52NTAvaGVhZC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L2Rpc3BudjUwL2hlYWQu YwpAQCAtODEsMTggKzgxLDE3IEBAIG52NTBfaGVhZF9hdG9taWNfY2hlY2tfZGl0aGVyKHN0cnVj dCBudjUwX2hlYWRfYXRvbSAqYXJtaCwKIAkJCSAgICAgIHN0cnVjdCBudjUwX2hlYWRfYXRvbSAq YXN5aCwKIAkJCSAgICAgIHN0cnVjdCBub3V2ZWF1X2Nvbm5fYXRvbSAqYXN5YykKIHsKLQlzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gYXN5Yy0+c3RhdGUuY29ubmVjdG9yOwogCXUz MiBtb2RlID0gMHgwMDsKIAogCWlmIChhc3ljLT5kaXRoZXIubW9kZSA9PSBESVRIRVJJTkdfTU9E RV9BVVRPKSB7Ci0JCWlmIChhc3loLT5iYXNlLmRlcHRoID4gY29ubmVjdG9yLT5kaXNwbGF5X2lu Zm8uYnBjICogMykKKwkJaWYgKGFzeWgtPmJhc2UuZGVwdGggPiBhc3loLT5vci5icGMgKiAzKQog CQkJbW9kZSA9IERJVEhFUklOR19NT0RFX0RZTkFNSUMyWDI7CiAJfSBlbHNlIHsKIAkJbW9kZSA9 IGFzeWMtPmRpdGhlci5tb2RlOwogCX0KIAogCWlmIChhc3ljLT5kaXRoZXIuZGVwdGggPT0gRElU SEVSSU5HX0RFUFRIX0FVVE8pIHsKLQkJaWYgKGNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLmJwYyA+ PSA4KQorCQlpZiAoYXN5aC0+b3IuYnBjID49IDgpCiAJCQltb2RlIHw9IERJVEhFUklOR19ERVBU SF84QlBDOwogCX0gZWxzZSB7CiAJCW1vZGUgfD0gYXN5Yy0+ZGl0aGVyLmRlcHRoOwotLSAKMi4y MS4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmkt ZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw=