Received: by 2002:a05:7412:251c:b0:e2:908c:2ebd with SMTP id w28csp1532341rda; Mon, 23 Oct 2023 16:04:23 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGvOCOOdd5YihuQxXa2UpZ+y9EDbQ78xitCuvWv2yAEqzB57ZM/fq0fDxILZu3GCTdHKoYd X-Received: by 2002:a05:6a20:94cd:b0:17a:d173:42ef with SMTP id ht13-20020a056a2094cd00b0017ad17342efmr959053pzb.20.1698102263397; Mon, 23 Oct 2023 16:04:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698102263; cv=none; d=google.com; s=arc-20160816; b=x3OGrbOlrcAoxzR3h2v0IVpwcloMoccnRZgVkmCEZf/c2Snt0qbnEaAHHzVFMG2hGt dn090hL5PjvynZiBexXgylwGv/wwPD/7hzjoQGKXbSM7LUVJqgz83K0AzNuY4Ortm5Xq +A1r6GWIwAP+u05rXzt9o+4ZdC34ge+gVnEGEK7qzrr5w4PS0dc6UVQBeLj59WEFqvtl alnIT3IIDrIK50NEgpauTmzxuOhaCNJV2dMjGnVNSVd94tN8vH8C/okl5G0MQeI+nzbY 7cbXr52tz1sm8czNLceUsIwsfrJCD9VeiJ0TQX+zSNlKslg4TbRTK9QNPy4f2bLMJOyc vVVw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=JAaXoPtJ4koBdLXncjHZYTV49BcKkksbszUkEN4kHbQ=; fh=YnAds/9SVjiE5tkKMyz1j3zh3V/Vo4ZS/+2iej99nds=; b=QAicg9M+uTiK7ABV05/Jf7QtappcSQo7XkQSqRA5/vYgNYIcn9hXCMLvJg3Kj3RKIO yp3Om+T5lEvFC4lhXKiXBTOzrLzUaZb4iqRX0FXKghehX/FQHzI2MMexv+lXd+YC26RG uA42wq0DHRRp0CYwJqC6EfAPjumr+U+/hvpB1uwTsxZC1o70Shg1bRqVKZb4u+8Ix/hk FC9jFayZNLn42itE/mZ4eESp1i2GaPFC0TBdlAuznjLlvEGBR0lQ2qmjJx4V32fPBw/l TvtHHqNWOfWRvtyFkfmdELi98NnTgEACsXqfQKGW+YHrUEenb5VK/R3S8O6YGohTOJtg uIBQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=MXVnw7yN; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from agentk.vger.email (agentk.vger.email. [2620:137:e000::3:2]) by mx.google.com with ESMTPS id g6-20020a63b146000000b005b7160263f2si6981480pgp.154.2023.10.23.16.04.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Oct 2023 16:04:23 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) client-ip=2620:137:e000::3:2; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=MXVnw7yN; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by agentk.vger.email (Postfix) with ESMTP id 4827480A7CD0; Mon, 23 Oct 2023 16:04:20 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229498AbjJWXEE (ORCPT + 99 others); Mon, 23 Oct 2023 19:04:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34262 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229441AbjJWXED (ORCPT ); Mon, 23 Oct 2023 19:04:03 -0400 Received: from mail-yw1-x1130.google.com (mail-yw1-x1130.google.com [IPv6:2607:f8b0:4864:20::1130]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 03178D73 for ; Mon, 23 Oct 2023 16:03:58 -0700 (PDT) Received: by mail-yw1-x1130.google.com with SMTP id 00721157ae682-59b5484fbe6so40439767b3.1 for ; Mon, 23 Oct 2023 16:03:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1698102238; x=1698707038; darn=vger.kernel.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=JAaXoPtJ4koBdLXncjHZYTV49BcKkksbszUkEN4kHbQ=; b=MXVnw7yNGSiLgc+4YjzyBb+e1XtOEa6VRfKQzaspo52AASa71m0Pdf3Q/UJMpejtlH tL7DVJQXqisO9pMnXiPt2qWTSYSD66AxLTky8YVH4SF6bHS9MPFTLlfxTayrW4q+PTMy YxLJKMEgQ7/0TWvldr4ACfhoD2A1O4N3QbACVl9X+PQU+4gKQLeLnogXhyM2qFOfbKy7 HzWpRN9i7jIF5EHl3f8FMIjn806iLVtwwNcGeHPWdO/c/JkfTs44y0E0XYmU62egfOz/ Wo7Ai/2WL+lwai/qFfMatYP5zVe319Zp6kJV5Dxqc1OCxMPOivBAnau8NWJKp2llY/+8 S+cw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698102238; x=1698707038; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=JAaXoPtJ4koBdLXncjHZYTV49BcKkksbszUkEN4kHbQ=; b=fEI+hlNc5RxfUOYUmK97PIlQOjZMYRLyY+7w9BO74n9SYxENod45H5O5fNIrkVHhk8 /bTNMiGVqi/sikxTFN5sw4JvwCemlt+8cmRufc91SsedZxSTnAV1grXj39/TcFLUAYj9 7LCtzrK+QT/RIIlE4XCnvs9/YCGpReNHbkUnl1p5Jt67NYIszLUez3hYt4VDOgkiEUYw W//beZXp+N9/cNICRhE1d8QwsZlinzMi67DU4i2sZxHllqLSaPwdZZwBbfoec+ifn91o VpyAEFn0/zwMg2jojuZEtwJWWu39stCd8J2gzYOv0qcpDSmMotZT9tpSkolYddWbkPDv WLyw== X-Gm-Message-State: AOJu0YyeJbB3ud54K1+Z2L3KquTirlQMUKYCdBRwD7yysmj08BPBJLnZ f0gBnX2QmRno43nGj0+nnchiJevXces9qjBfqudmcQ== X-Received: by 2002:a81:8902:0:b0:57a:cf8:5b4 with SMTP id z2-20020a818902000000b0057a0cf805b4mr10187601ywf.51.1698102238068; Mon, 23 Oct 2023 16:03:58 -0700 (PDT) MIME-Version: 1.0 References: <20231023221250.116500-1-robdclark@gmail.com> In-Reply-To: From: Dmitry Baryshkov Date: Tue, 24 Oct 2023 02:03:46 +0300 Message-ID: Subject: Re: [PATCH] drm/msm/dpu: Fix encoder CRC to account for CTM enablement To: Rob Clark Cc: dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, Abhinav Kumar , Jessica Zhang , Rob Clark , Sean Paul , Marijn Suijten , David Airlie , Daniel Vetter , Vinod Polimera , Jiasheng Jiang , Kalyan Thota , Kuogee Hsieh , Arnaud Vrac , Konrad Dybcio , Jeykumar Sankaran , open list Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, 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 agentk.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (agentk.vger.email [0.0.0.0]); Mon, 23 Oct 2023 16:04:20 -0700 (PDT) On Tue, 24 Oct 2023 at 01:36, Rob Clark wrote: > > On Mon, Oct 23, 2023 at 3:30=E2=80=AFPM Dmitry Baryshkov > wrote: > > > > On Tue, 24 Oct 2023 at 01:12, Rob Clark wrote: > > > > > > From: Rob Clark > > > > > > Seems like we need to pick INPUT_SEL=3D1 when CTM is enabled. But no= t > > > otherwise. > > > > > > Suggested-by: Dmitry Baryshkov > > > Signed-off-by: Rob Clark > > > --- > > > drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 2 +- > > > drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 4 ++-- > > > drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h | 3 ++- > > > drivers/gpu/drm/msm/disp/dpu1/dpu_hw_intf.c | 4 ++-- > > > drivers/gpu/drm/msm/disp/dpu1/dpu_hw_intf.h | 2 +- > > > drivers/gpu/drm/msm/disp/dpu1/dpu_hw_lm.c | 2 +- > > > drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.c | 5 ++++- > > > drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.h | 3 ++- > > > 8 files changed, 15 insertions(+), 10 deletions(-) > > > > > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/d= rm/msm/disp/dpu1/dpu_crtc.c > > > index 2b83a13b3aa9..d93a92ffd5df 100644 > > > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c > > > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c > > > @@ -134,7 +134,7 @@ static void dpu_crtc_setup_encoder_misr(struct dr= m_crtc *crtc) > > > struct drm_encoder *drm_enc; > > > > > > drm_for_each_encoder_mask(drm_enc, crtc->dev, crtc->state->en= coder_mask) > > > - dpu_encoder_setup_misr(drm_enc); > > > + dpu_encoder_setup_misr(drm_enc, !!crtc->state->ctm); > > > } > > > > > > static int dpu_crtc_set_crc_source(struct drm_crtc *crtc, const char= *src_name) > > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gp= u/drm/msm/disp/dpu1/dpu_encoder.c > > > index b0a7908418ed..12ee7acb5ea6 100644 > > > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c > > > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c > > > @@ -241,7 +241,7 @@ int dpu_encoder_get_crc_values_cnt(const struct d= rm_encoder *drm_enc) > > > return num_intf; > > > } > > > > > > -void dpu_encoder_setup_misr(const struct drm_encoder *drm_enc) > > > +void dpu_encoder_setup_misr(const struct drm_encoder *drm_enc, bool = has_ctm) > > > { > > > struct dpu_encoder_virt *dpu_enc; > > > > > > @@ -255,7 +255,7 @@ void dpu_encoder_setup_misr(const struct drm_enco= der *drm_enc) > > > if (!phys->hw_intf || !phys->hw_intf->ops.setup_misr) > > > continue; > > > > > > - phys->hw_intf->ops.setup_misr(phys->hw_intf, true, 1)= ; > > > + phys->hw_intf->ops.setup_misr(phys->hw_intf, true, 1,= has_ctm); > > > } > > > } > > > > > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h b/drivers/gp= u/drm/msm/disp/dpu1/dpu_encoder.h > > > index 4c05fd5e9ed1..510783b2fb24 100644 > > > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h > > > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.h > > > @@ -169,8 +169,9 @@ int dpu_encoder_get_crc_values_cnt(const struct d= rm_encoder *drm_enc); > > > /** > > > * dpu_encoder_setup_misr - enable misr calculations > > > * @drm_enc: Pointer to previously created drm encoder structure > > > + * @has_ctm: Is CTM enabled > > > */ > > > -void dpu_encoder_setup_misr(const struct drm_encoder *drm_encoder); > > > +void dpu_encoder_setup_misr(const struct drm_encoder *drm_encoder, b= ool has_ctm); > > > > > > /** > > > * dpu_encoder_get_crc - get the crc value from interface blocks > > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_intf.c b/drivers/gp= u/drm/msm/disp/dpu1/dpu_hw_intf.c > > > index e8b8908d3e12..cb06f80cc671 100644 > > > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_intf.c > > > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_intf.c > > > @@ -318,9 +318,9 @@ static u32 dpu_hw_intf_get_line_count(struct dpu_= hw_intf *intf) > > > return DPU_REG_READ(c, INTF_LINE_COUNT); > > > } > > > > > > -static void dpu_hw_intf_setup_misr(struct dpu_hw_intf *intf, bool en= able, u32 frame_count) > > > +static void dpu_hw_intf_setup_misr(struct dpu_hw_intf *intf, bool en= able, u32 frame_count, bool has_ctm) > > > { > > > - dpu_hw_setup_misr(&intf->hw, INTF_MISR_CTRL, enable, frame_co= unt); > > > + dpu_hw_setup_misr(&intf->hw, INTF_MISR_CTRL, enable, frame_co= unt, has_ctm); > > > > I'm not sure about the dpu_encoder and dpu_hw_intf interfaces. But > > dpu_hw_setup_misr definitely needs the `u8 input_sel` parameter > > instead of `bool has_ctm`. > > That seems a bit premature without knowing what the other values are. > (And I also question a bit the whole abstraction layer thing if it is > taking directly register bitfield enum's..) dpu_hw_intf and especially dpu_hw_util are not real abstractions. I always viewed them as useful low-level helpers. I think that has_ctm is valid at the dpu_encoder level, which selects which input to use. on the lower levels has_ctm doesn't make sense. IOW dpu_hw_setup_misr can be used to setup MISR for other blocks, where CTM doesn't exist. > > BR, > -R > > > Most likely, I'd use u8 for dpu_hw_intf operation too. > > > > Could you please adjust? > > > > > } > > > > > > static int dpu_hw_intf_collect_misr(struct dpu_hw_intf *intf, u32 *m= isr_value) > > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_intf.h b/drivers/gp= u/drm/msm/disp/dpu1/dpu_hw_intf.h > > > index c539025c418b..95aafc4cf58e 100644 > > > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_intf.h > > > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_intf.h > > > @@ -95,7 +95,7 @@ struct dpu_hw_intf_ops { > > > > > > void (*bind_pingpong_blk)(struct dpu_hw_intf *intf, > > > const enum dpu_pingpong pp); > > > - void (*setup_misr)(struct dpu_hw_intf *intf, bool enable, u32= frame_count); > > > + void (*setup_misr)(struct dpu_hw_intf *intf, bool enable, u32= frame_count, bool has_ctm); > > > int (*collect_misr)(struct dpu_hw_intf *intf, u32 *misr_value= ); > > > > > > // Tearcheck on INTF since DPU 5.0.0 > > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_lm.c b/drivers/gpu/= drm/msm/disp/dpu1/dpu_hw_lm.c > > > index d1c3bd8379ea..2efe29396c6a 100644 > > > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_lm.c > > > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_lm.c > > > @@ -83,7 +83,7 @@ static void dpu_hw_lm_setup_border_color(struct dpu= _hw_mixer *ctx, > > > > > > static void dpu_hw_lm_setup_misr(struct dpu_hw_mixer *ctx, bool enab= le, u32 frame_count) > > > { > > > - dpu_hw_setup_misr(&ctx->hw, LM_MISR_CTRL, enable, frame_count= ); > > > + dpu_hw_setup_misr(&ctx->hw, LM_MISR_CTRL, enable, frame_count= , false); > > > } > > > > > > static int dpu_hw_lm_collect_misr(struct dpu_hw_mixer *ctx, u32 *mis= r_value) > > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.c b/drivers/gp= u/drm/msm/disp/dpu1/dpu_hw_util.c > > > index 9d2273fd2fed..528b8439209f 100644 > > > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.c > > > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.c > > > @@ -483,7 +483,7 @@ void _dpu_hw_setup_qos_lut(struct dpu_hw_blk_reg_= map *c, u32 offset, > > > > > > void dpu_hw_setup_misr(struct dpu_hw_blk_reg_map *c, > > > u32 misr_ctrl_offset, > > > - bool enable, u32 frame_count) > > > + bool enable, u32 frame_count, bool has_ctm) > > > { > > > u32 config =3D 0; > > > > > > @@ -496,6 +496,9 @@ void dpu_hw_setup_misr(struct dpu_hw_blk_reg_map = *c, > > > config =3D (frame_count & MISR_FRAME_COUNT_MASK) | > > > MISR_CTRL_ENABLE | MISR_CTRL_FREE_RUN_MASK; > > > > > > + if (!has_ctm) > > > + config |=3D 1 << 24; > > > > Please define MISR_CTRL_INPUT_SEL instead. > > > > > + > > > DPU_REG_WRITE(c, misr_ctrl_offset, config); > > > } else { > > > DPU_REG_WRITE(c, misr_ctrl_offset, 0); > > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.h b/drivers/gp= u/drm/msm/disp/dpu1/dpu_hw_util.h > > > index 1f6079f47071..e42d9d00e40e 100644 > > > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.h > > > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_util.h > > > @@ -360,7 +360,8 @@ void _dpu_hw_setup_qos_lut(struct dpu_hw_blk_reg_= map *c, u32 offset, > > > void dpu_hw_setup_misr(struct dpu_hw_blk_reg_map *c, > > > u32 misr_ctrl_offset, > > > bool enable, > > > - u32 frame_count); > > > + u32 frame_count, > > > + bool has_ctm); > > > > > > int dpu_hw_collect_misr(struct dpu_hw_blk_reg_map *c, > > > u32 misr_ctrl_offset, > > > -- > > > 2.41.0 > > > > > > > > > -- > > With best wishes > > Dmitry --=20 With best wishes Dmitry