Received: by 2002:a05:6359:c8b:b0:c7:702f:21d4 with SMTP id go11csp1101644rwb; Tue, 4 Oct 2022 15:40:02 -0700 (PDT) X-Google-Smtp-Source: AMsMyM7SV6nfqRoX+vbmfedbTvLKaIaXw0bFdejm3QDW/3ubYviiaEcK3Ew3y3PzOrvcGor8Fd3Q X-Received: by 2002:a63:d1b:0:b0:42b:828b:f14a with SMTP id c27-20020a630d1b000000b0042b828bf14amr25482833pgl.235.1664923202384; Tue, 04 Oct 2022 15:40:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1664923202; cv=none; d=google.com; s=arc-20160816; b=nErK3k6UDm3zLKK1iz+fwUhjBIXnL7D7+YyMbSPcIgA279O0HFdrVamh+eeZYabO9d 1sDwXIuXELyRLNnszUpoHM4d7UNAE95T5Fvpz9CzubslNTqYo6JJmWOw3cItWXtd2Qjb mLyws7QeeO5JYTz76Ikjuxce3jDzZACmM7sVnGEYq/15lQuWHU0i/XsBqt5GbFbnRUNE HCcgwDXK9eMusjcT05RFCD1JX6hSxccdQOGkahE5qtlNILPEGM4a/OAauqt2FaUyLpP8 wW0T2BGZpH9ly2NLqQX4s51t7PFVzmPY3UgK7j8AEtfQvufG8n3CDa6NaeIcAiNObD4m v67w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:mail-followup-to:message-id:subject:cc:to:from:date; bh=TYQN/ivBfDZ+HgZ362OLRqKXcZ3oJqQbJOZrERss5Mg=; b=TBUoSmVIEdH/7bLftuZAXFTmQOm5cR8TrOFUkeMli1w1xv2zzSTBAO90mOtLOtsS4G syD+aEuZ+pmGLQY4xcAWc3Yq5Ns+DrWVlRf+WwwVVo0w4g8PeSVEewrbJLz3rlkZ7V7/ qW7RHXD2SdhypkdtVhnihz89AyDX9m7MPSegXjGb/YYXXwOxeSW8z1ms5Vat5kH27R8Z E/WNjC28W9DUTRiw/RMfM2whD7zSTWT6s5APZBU9l/+LYVA4CbbHRQWs+mK9ujO1YPsC 4a81abzk5g126z6dtyOfIu+XkMDUnmJtLr9sAZVlHQfB7vtxcYQ/Ra5fHiCfYiE+fuuH dfEw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id i36-20020a635864000000b00450d885f4dbsi6125706pgm.116.2022.10.04.15.39.50; Tue, 04 Oct 2022 15:40:02 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229630AbiJDV5x (ORCPT + 99 others); Tue, 4 Oct 2022 17:57:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49800 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229462AbiJDV5u (ORCPT ); Tue, 4 Oct 2022 17:57:50 -0400 Received: from relay02.th.seeweb.it (relay02.th.seeweb.it [5.144.164.163]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E389B31340 for ; Tue, 4 Oct 2022 14:57:48 -0700 (PDT) Received: from SoMainline.org (94-209-172-39.cable.dynamic.v4.ziggo.nl [94.209.172.39]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by m-r1.th.seeweb.it (Postfix) with ESMTPSA id 3A869200F1; Tue, 4 Oct 2022 23:57:46 +0200 (CEST) Date: Tue, 4 Oct 2022 23:57:45 +0200 From: Marijn Suijten To: Abhinav Kumar Cc: phone-devel@vger.kernel.org, Rob Clark , Dmitry Baryshkov , Vinod Koul , ~postmarketos/upstreaming@lists.sr.ht, AngeloGioacchino Del Regno , Konrad Dybcio , Martin Botka , Jami Kettunen , David Airlie , Daniel Vetter , Sean Paul , Thomas Zimmermann , Javier Martinez Canillas , Alex Deucher , Douglas Anderson , Vladimir Lypak , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, Lyude Paul Subject: Re: [PATCH 5/5] drm/dsc: Prevent negative BPG offsets from shadowing adjacent bitfields Message-ID: <20221004215745.zdfvulqx4exlujgk@SoMainline.org> Mail-Followup-To: Marijn Suijten , Abhinav Kumar , phone-devel@vger.kernel.org, Rob Clark , Dmitry Baryshkov , Vinod Koul , ~postmarketos/upstreaming@lists.sr.ht, AngeloGioacchino Del Regno , Konrad Dybcio , Martin Botka , Jami Kettunen , David Airlie , Daniel Vetter , Sean Paul , Thomas Zimmermann , Javier Martinez Canillas , Alex Deucher , Douglas Anderson , Vladimir Lypak , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, Lyude Paul References: <20221001190807.358691-1-marijn.suijten@somainline.org> <20221001190807.358691-6-marijn.suijten@somainline.org> <55d7e20b-79cd-ece6-b643-8b542beb7474@quicinc.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <55d7e20b-79cd-ece6-b643-8b542beb7474@quicinc.com> X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2022-10-04 13:22:25, Abhinav Kumar wrote: > > On 10/1/2022 12:08 PM, Marijn Suijten wrote: > > msm's dsi_host specifies negative BPG offsets which fill the full 8 bits > > of a char thanks to two's complement: this however results in those bits > > bleeding into the next parameter when the field is only expected to > > contain 6-bit wide values. > > As a consequence random slices appear corrupted on-screen (tested on a > > Sony Tama Akatsuki device with sdm845). > > > > Use AND operators to limit all values that constitute the RC Range > > parameter fields to their expected size. > > > > Fixes: b9080324d6ca ("drm/msm/dsi: add support for dsc data") > > Signed-off-by: Marijn Suijten > > --- > > drivers/gpu/drm/display/drm_dsc_helper.c | 6 +++--- > > 1 file changed, 3 insertions(+), 3 deletions(-) > > > > diff --git a/drivers/gpu/drm/display/drm_dsc_helper.c b/drivers/gpu/drm/display/drm_dsc_helper.c > > index c869c6e51e2b..2e7ef242685d 100644 > > --- a/drivers/gpu/drm/display/drm_dsc_helper.c > > +++ b/drivers/gpu/drm/display/drm_dsc_helper.c > > @@ -243,11 +243,11 @@ void drm_dsc_pps_payload_pack(struct drm_dsc_picture_parameter_set *pps_payload, > > */ > > for (i = 0; i < DSC_NUM_BUF_RANGES; i++) { > > pps_payload->rc_range_parameters[i] = > > - cpu_to_be16((dsc_cfg->rc_range_params[i].range_min_qp << > > + cpu_to_be16(((dsc_cfg->rc_range_params[i].range_min_qp & 0x1f) << > > DSC_PPS_RC_RANGE_MINQP_SHIFT) | > > - (dsc_cfg->rc_range_params[i].range_max_qp << > > + ((dsc_cfg->rc_range_params[i].range_max_qp & 0x1f) << > > DSC_PPS_RC_RANGE_MAXQP_SHIFT) | > > - (dsc_cfg->rc_range_params[i].range_bpg_offset)); > > + (dsc_cfg->rc_range_params[i].range_bpg_offset & 0x3f)); > > } > > > > Looking at some examples of this for other vendors, they have managed to > limit the value to 6 bits in their drivers: > > https://gitlab.freedesktop.org/drm/msm/-/blob/msm-next/drivers/gpu/drm/i915/display/intel_vdsc.c#L532 > > https://gitlab.freedesktop.org/drm/msm/-/blob/msm-next/drivers/gpu/drm/amd/display/dc/dsc/rc_calc_dpi.c#L87 > > Perhaps, msm should do the same thing instead of the helper change. Thanks, I should have done my due-diligence and look up how other drivers dealt with this, but wasn't immediately expecting negative values elsewhere. Alas, as explained in the cover letter I opted to perform the masking in the PPS packing code as the DSC block code also reads these values, and would suddenly write 6-bit intead of 8-bit values to the DSC_RANGE_BPG_OFFSET registers. Quick testing on the mentioned sdm845 platform shows no regressions, but I'm not sure if that's safe to rely on? > If you want to move to helper, other drivers need to be changed too to > remove duplicate & 0x3f. Sure, we only have to confirm whether those drivers also read back the value(s) in rc_range_params, and expect / allow this to be 8 instead of 6 bits. > FWIW, this too has already been fixed in the latest downstream driver too. What is this supposed to mean? Is there a downstream DPU project that has pending patches needing to be upstreamed? Or is the downstream SDE, techpack/display, or whatever it is called nowadays, slowly using more DRM structs like drm_dsc_config and this drm_dsc_pps_payload_pack() helper function as pointed out in an earlier mail? Offtopic: are SDE and DPU growing closer together, hopefully achieving feature parity allowing the SDE project to be dropped in favour of a fully upstreamed DPU driver for day-one out-of-the-box mainline support for new SoCs (as long as work is published and on its way upstream)? - Marijn