Received: by 2002:a05:7412:b10a:b0:f3:1519:9f41 with SMTP id az10csp683785rdb; Thu, 30 Nov 2023 15:51:16 -0800 (PST) X-Google-Smtp-Source: AGHT+IHDmORytSbCGFyHwqcnf15HpJOYTOUkQUWZh4K1m6VVjz9Jtkg86UQMOyZcgjIRksttRBY2 X-Received: by 2002:a05:6a20:7f99:b0:18d:64a:e125 with SMTP id d25-20020a056a207f9900b0018d064ae125mr8665887pzj.31.1701388275733; Thu, 30 Nov 2023 15:51:15 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701388275; cv=none; d=google.com; s=arc-20160816; b=Q7FM6HC/4dgV+lct+OfLudVaLVpyG/lmjDRUFxZVmujkTjQ0m2AcvKUzF6G4z8ELqd +Er9opDKpgfrguKuwOBo5oF9gywR8TGdWTnek0aJuvTEU4wGOdts3GYO0a/BO5mSg6+U 42feP3b8qXLsWu7qTiT8y/W4TxKpm2F4rqIlSCAq2RDkQPtfK3sdnApaCh1p5iNt8aui FHHtOWXIRRbBE2/v8teUVoHCcpSTFYfPSBUm90PQ3KVclgGr8ym+W5JeUlv77srEKIa0 UmI3i6Sx4OVQD3EfHXHdAB9TmikJ8z4CU7MLC+ZPnMHW2f8cyiLMuwkJgSB6VncDcoJE 7sWQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to:from :references:cc:to:content-language:subject:user-agent:mime-version :date:message-id:dkim-signature; bh=9EXKKlZQY6+Nu/c96irA8EDf6CI6CASOWmPqWS9MGro=; fh=PV8mTOqHBITZfXWDdpO6auBL9NA1tybqIGg9DEXyy5s=; b=lKurvqQ12uJfccWzv2+oVvHhRcRiofy0DxPXNOlJ2NpiVPe7jrpheYUyHGLDK5CXys 2ojAlbUOcDqqmXzS0I8kwjpH797NKKKOcIjkdxBm42pEzuFq+kmKE1yGXj7js4iTIDgW PrYa3wkz5HOslvCduM4sk8SoWMWQ5eRIzmOgutVH5J6xLPsGso+xkzkbMP+y6hk6gUKK 6GGUQZ6BxG06X1jI9XgYQI0FIMAbNU2B62u40ANXihe1k7yDTogN8LEI347Y4S3J/+mG 9QWqbLQa9Nc6YIMdUrN4hDadIUsPz9q5V6EgEX93jiM5FvvsoAOIRcwB5PI6pCAqbcZC 2nYw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=Fv5DlnwN; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Return-Path: Received: from pete.vger.email (pete.vger.email. [2620:137:e000::3:6]) by mx.google.com with ESMTPS id qj7-20020a17090b28c700b00285929b6060si2412279pjb.130.2023.11.30.15.51.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Nov 2023 15:51:15 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) client-ip=2620:137:e000::3:6; Authentication-Results: mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=Fv5DlnwN; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by pete.vger.email (Postfix) with ESMTP id 9E55682DF4A5; Thu, 30 Nov 2023 15:51:12 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at pete.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377296AbjK3Xu4 (ORCPT + 99 others); Thu, 30 Nov 2023 18:50:56 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59664 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1377273AbjK3Xuy (ORCPT ); Thu, 30 Nov 2023 18:50:54 -0500 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 80AA312B; Thu, 30 Nov 2023 15:51:00 -0800 (PST) Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3AUNTO77003216; Thu, 30 Nov 2023 23:50:52 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h=message-id : date : mime-version : subject : to : cc : references : from : in-reply-to : content-type : content-transfer-encoding; s=qcppdkim1; bh=9EXKKlZQY6+Nu/c96irA8EDf6CI6CASOWmPqWS9MGro=; b=Fv5DlnwNN31q+sQRMFyMHU8STp4fomSUI8qn89xWwn6pNn3Kzw/RzFTLAT39RRUIUKm5 J2y1uGfj1baI8YtkfpeJh9HT8FR07kaDt+CYvSSkLtuwlAVS6sGj6sBoXHJSc/09jtMd 74k2/f3yuRVZhH+UAsSeDVyxVzdw9NfKvxdtMO6jJ7jvLv50QVcfomfKKR4vdMMBR86q dSne4jAjei9sws/dccPggoD7m+fhdMuiQ+xl6ObqH0tmXDjQ17joMfv3wTm6l9KbAeOB N3tGQgRC50tNLp3yG6wZxng8edOtH2NwzP6vp1uVbJ9b8iNLhl18iAT5sSE2Ss/1NlNU LA== Received: from nalasppmta03.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3uq3f7r3fh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 30 Nov 2023 23:50:52 +0000 Received: from nalasex01a.na.qualcomm.com (nalasex01a.na.qualcomm.com [10.47.209.196]) by NALASPPMTA03.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 3AUNopAg007986 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 30 Nov 2023 23:50:51 GMT Received: from [10.71.109.77] (10.80.80.8) by nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.40; Thu, 30 Nov 2023 15:50:51 -0800 Message-ID: <396724e1-2c51-090e-cfa5-e516a0eea861@quicinc.com> Date: Thu, 30 Nov 2023 15:50:50 -0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.11.0 Subject: Re: [PATCH 08/16] drm/msm/dpu: add support to allocate CDM from RM Content-Language: en-US To: Dmitry Baryshkov CC: , Rob Clark , "Sean Paul" , Marijn Suijten , "David Airlie" , Daniel Vetter , , , , , , References: <20230830224910.8091-1-quic_abhinavk@quicinc.com> <20230830224910.8091-9-quic_abhinavk@quicinc.com> From: Abhinav Kumar In-Reply-To: Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01a.na.qualcomm.com (10.52.223.231) To nalasex01a.na.qualcomm.com (10.47.209.196) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-ORIG-GUID: cnk2JJXY6PMSfCwceZpmdqDz08hJHu7p X-Proofpoint-GUID: cnk2JJXY6PMSfCwceZpmdqDz08hJHu7p X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.997,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-30_24,2023-11-30_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 adultscore=0 spamscore=0 impostorscore=0 lowpriorityscore=0 phishscore=0 priorityscore=1501 mlxlogscore=981 bulkscore=0 clxscore=1015 mlxscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311300177 X-Spam-Status: No, score=-3.0 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on pete.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 (pete.vger.email [0.0.0.0]); Thu, 30 Nov 2023 15:51:12 -0800 (PST) On 8/30/2023 5:06 PM, Dmitry Baryshkov wrote: > On Thu, 31 Aug 2023 at 01:50, Abhinav Kumar wrote: >> >> Even though there is usually only one CDM block, it can be >> used by either HDMI, DisplayPort OR Writeback interfaces. >> >> Hence its allocation needs to be tracked properly by the >> resource manager to ensure appropriate availability of the >> block. > > It almost feels like an overkill, as up to now there is at most one CDM block. > Yes but even that one CDM block can be used by any connector. So as we discussed on IRC, this just implements the FCFS and we need RM to be the manager of that one block. >> >> Signed-off-by: Abhinav Kumar >> --- >> drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c | 2 +- >> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h | 1 + >> drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h | 1 + >> drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c | 45 +++++++++++++++++++-- >> drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h | 4 +- >> 5 files changed, 48 insertions(+), 5 deletions(-) >> >> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c >> index 6cf6597148fd..582680804016 100644 >> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c >> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c >> @@ -663,7 +663,7 @@ static int dpu_encoder_virt_atomic_check( >> >> if (!crtc_state->active_changed || crtc_state->enable) >> ret = dpu_rm_reserve(&dpu_kms->rm, global_state, >> - drm_enc, crtc_state, topology); >> + drm_enc, crtc_state, topology, false); >> } >> >> trace_dpu_enc_atomic_check_flags(DRMID(drm_enc), adj_mode->flags); >> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h >> index 34f943102499..07f75f295844 100644 >> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h >> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_mdss.h >> @@ -98,6 +98,7 @@ enum dpu_hw_blk_type { >> DPU_HW_BLK_DSPP, >> DPU_HW_BLK_MERGE_3D, >> DPU_HW_BLK_DSC, >> + DPU_HW_BLK_CDM, >> DPU_HW_BLK_MAX, >> }; >> >> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h >> index b6f53ca6e962..61aa58643fda 100644 >> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h >> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_kms.h >> @@ -136,6 +136,7 @@ struct dpu_global_state { >> uint32_t ctl_to_enc_id[CTL_MAX - CTL_0]; >> uint32_t dspp_to_enc_id[DSPP_MAX - DSPP_0]; >> uint32_t dsc_to_enc_id[DSC_MAX - DSC_0]; >> + uint32_t cdm_to_enc_id; >> }; >> >> struct dpu_global_state >> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c >> index 7b6444a3fcb1..e7d4beb4661e 100644 >> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c >> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c >> @@ -29,10 +29,12 @@ static inline bool reserved_by_other(uint32_t *res_map, int idx, >> /** >> * struct dpu_rm_requirements - Reservation requirements parameter bundle >> * @topology: selected topology for the display >> + * @needs_cdm: whether the display needs a CDM block for the current mode >> * @hw_res: Hardware resources required as reported by the encoders >> */ >> struct dpu_rm_requirements { >> struct msm_display_topology topology; >> + bool needs_cdm; >> }; >> >> int dpu_rm_destroy(struct dpu_rm *rm) >> @@ -505,6 +507,26 @@ static int _dpu_rm_reserve_dsc(struct dpu_rm *rm, >> return 0; >> } >> >> +static int _dpu_rm_reserve_cdm(struct dpu_rm *rm, >> + struct dpu_global_state *global_state, >> + struct drm_encoder *enc) >> +{ >> + /* try allocating only one CDM block */ >> + if (!rm->cdm_blk) { >> + DPU_ERROR("CDM block does not exist\n"); >> + return -EIO; >> + } >> + >> + if (global_state->cdm_to_enc_id) { >> + DPU_ERROR("CDM_0 is already allocated\n"); >> + return -EIO; >> + } >> + >> + global_state->cdm_to_enc_id = enc->base.id; >> + >> + return 0; >> +} >> + >> static int _dpu_rm_make_reservation( >> struct dpu_rm *rm, >> struct dpu_global_state *global_state, >> @@ -530,15 +552,25 @@ static int _dpu_rm_make_reservation( >> if (ret) >> return ret; >> >> + if (reqs->needs_cdm) { >> + ret = _dpu_rm_reserve_cdm(rm, global_state, enc); >> + if (ret) { >> + DPU_ERROR("unable to find CDM blk\n"); >> + return ret; >> + } >> + } >> + >> return ret; >> } >> >> static int _dpu_rm_populate_requirements( >> struct drm_encoder *enc, >> struct dpu_rm_requirements *reqs, >> - struct msm_display_topology req_topology) >> + struct msm_display_topology req_topology, >> + bool needs_cdm) > > Push it to the topology, please. It is a part of the topology at some > point of view. > hmmm ... ok with a pinch of salt as we somewhat deviate from the true topology definition that topology is just how lm, dsc and intf blocks are used. it was not intended to hold cdm. >> { >> reqs->topology = req_topology; >> + reqs->needs_cdm = needs_cdm; >> >> DRM_DEBUG_KMS("num_lm: %d num_dsc: %d num_intf: %d\n", >> reqs->topology.num_lm, reqs->topology.num_dsc, >> @@ -571,6 +603,7 @@ void dpu_rm_release(struct dpu_global_state *global_state, >> ARRAY_SIZE(global_state->dsc_to_enc_id), enc->base.id); >> _dpu_rm_clear_mapping(global_state->dspp_to_enc_id, >> ARRAY_SIZE(global_state->dspp_to_enc_id), enc->base.id); >> + _dpu_rm_clear_mapping(&global_state->cdm_to_enc_id, 1, enc->base.id); >> } >> >> int dpu_rm_reserve( >> @@ -578,7 +611,8 @@ int dpu_rm_reserve( >> struct dpu_global_state *global_state, >> struct drm_encoder *enc, >> struct drm_crtc_state *crtc_state, >> - struct msm_display_topology topology) >> + struct msm_display_topology topology, >> + bool needs_cdm) >> { >> struct dpu_rm_requirements reqs; >> int ret; >> @@ -595,7 +629,7 @@ int dpu_rm_reserve( >> DRM_DEBUG_KMS("reserving hw for enc %d crtc %d\n", >> enc->base.id, crtc_state->crtc->base.id); >> >> - ret = _dpu_rm_populate_requirements(enc, &reqs, topology); >> + ret = _dpu_rm_populate_requirements(enc, &reqs, topology, needs_cdm); >> if (ret) { >> DPU_ERROR("failed to populate hw requirements\n"); >> return ret; >> @@ -644,6 +678,11 @@ int dpu_rm_get_assigned_resources(struct dpu_rm *rm, >> hw_to_enc_id = global_state->dsc_to_enc_id; >> max_blks = ARRAY_SIZE(rm->dsc_blks); >> break; >> + case DPU_HW_BLK_CDM: >> + hw_blks = &rm->cdm_blk; >> + hw_to_enc_id = &global_state->cdm_to_enc_id; >> + max_blks = 1; >> + break; >> default: >> DPU_ERROR("blk type %d not managed by rm\n", type); >> return 0; >> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h >> index 29b221491926..74262d3cb6c3 100644 >> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h >> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.h >> @@ -69,13 +69,15 @@ int dpu_rm_destroy(struct dpu_rm *rm); >> * @drm_enc: DRM Encoder handle >> * @crtc_state: Proposed Atomic DRM CRTC State handle >> * @topology: Pointer to topology info for the display >> + * @needs_cdm: bool to indicate whether current encoder needs CDM >> * @Return: 0 on Success otherwise -ERROR >> */ >> int dpu_rm_reserve(struct dpu_rm *rm, >> struct dpu_global_state *global_state, >> struct drm_encoder *drm_enc, >> struct drm_crtc_state *crtc_state, >> - struct msm_display_topology topology); >> + struct msm_display_topology topology, >> + bool needs_cdm); >> >> /** >> * dpu_rm_reserve - Given the encoder for the display chain, release any >> -- >> 2.40.1 >> > >