From patchwork Thu Feb 20 10:07:52 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jun Nie X-Patchwork-Id: 13983646 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org 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 smtp.lore.kernel.org (Postfix) with ESMTPS id 4C2E5C021B2 for ; Thu, 20 Feb 2025 10:08:19 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id BFF0610E90C; Thu, 20 Feb 2025 10:08:18 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="x1q+8DZC"; dkim-atps=neutral Received: from mail-pj1-f49.google.com (mail-pj1-f49.google.com [209.85.216.49]) by gabe.freedesktop.org (Postfix) with ESMTPS id ACAA010E90D for ; Thu, 20 Feb 2025 10:08:17 +0000 (UTC) Received: by mail-pj1-f49.google.com with SMTP id 98e67ed59e1d1-2f9b9c0088fso1305676a91.0 for ; Thu, 20 Feb 2025 02:08:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1740046097; x=1740650897; darn=lists.freedesktop.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=K2bbvpaMxnQ9ItTta/5Hoc0GpndlEEH7ZCqt3McNEd4=; b=x1q+8DZCE99VZv3UPdOJ0SuKzvAVC6ZJXBKTINE7S8bgeEClUhMKhjDA2Q3ZV4m7NO q9E5mQ1M+/cvFGNKbzLjZSaPMJW9kOfb5CtAuwlPDnjwpzg4THz4xioMvVgodX/Qx8gd YbRI5fhYXI2NXQcByuyoqAvQEo021FRTbKr7+y/m/FHexqhsrmxHub4QJbEI+8/Agp/m b+Wo+78mmmvWgAbOZO6GcEbrRoEwsMwE2ibz0l6jezeAwdBsQmy+WIPJkVn7Buu5w+hh DAKsms0qePrIplMVqNrpZzdNdA14jhKGldGxwqljM+t2Q7qptQKzecFrAFFCDeAhoL/Z yy6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740046097; x=1740650897; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=K2bbvpaMxnQ9ItTta/5Hoc0GpndlEEH7ZCqt3McNEd4=; b=Zdv8/tVF6lOlJ4UQBx7/eNNpTACu7nysK5qNsaIw/w9jXJpVaT+bArnDYI4Evh4Qq6 twO93jrmgc4stL0xlVJVIKnPE90H5ersW03en4ou+rFvuSWM2Hu2WJ+qTcqMArExEqn2 N8nTT8JFw/tqrTjWbODcefhmdrBQC4EOTh6K1tLsgFlLLA/d6BY8BamEXNoIvk+zBaKK rtYZbuZNb0z3TTZbNUCdwhVtWRBH290y1IU1FB201BwFBRY2NSxQ9pVoTrAFby/vVTx0 56hj2XRPUX80kbuCycT1PaVdeHg6N+CyyPNbB5sOgiTChfSvbSgN6yoliM2p7EwkM8Dd njhw== X-Forwarded-Encrypted: i=1; AJvYcCVWLS8B0Ek/eKmaOvX0DMc3nplD79G/i8gK8SvHs0hCXyxovkk3NdTC9RiyIgRDwx8KJNrY8bCPjK8=@lists.freedesktop.org X-Gm-Message-State: AOJu0YwaxwL31IiD5teU7zJiG4h9MDxal8uKxfkjuTR3mDsQyVwwXWNU 85mDcV5RWdOWDsx7PtY8gGiD8P+/FOrs8OM7MXG4Q4MTlI3suilLTou4w8DF7v4= X-Gm-Gg: ASbGncsOG9mq/j8u2Qq7O77iWRGZX3rkWQBaHKaUKXGdYVQqmpOxyA4OUi0B9sdl/dz 41Qs3v97kFJ24WTQyILxe2DjpQXOwaNukU70zmJ2kf1xYuHgThMGybFn+1WpBiiMpzSJCDWiPNJ oDygQXaBHLVIBqn4vlOKH5QberxBqamaWo3C7fctKwr2OgN7gY6G6BASHeBbJLEgav24gHXUCQD D3RLjQ/92v4LNZzNH+csWiWtFUZFyG/FcMUufVVlkzqo2TWS1g8JaE2bq4H953ELuTcR8b1uFDH 2Dl8wwdHjWx3 X-Google-Smtp-Source: AGHT+IHCE4RtRNEXKZoOaSDN6mdrpoY8L7CkHQP/kzENk3sqFeSHV34QzJKi6JsrMhW9w9ua07iDCQ== X-Received: by 2002:a17:90a:d445:b0:2fa:21d3:4332 with SMTP id 98e67ed59e1d1-2fccc97dfe7mr4597618a91.12.1740046097223; Thu, 20 Feb 2025 02:08:17 -0800 (PST) Received: from [127.0.1.1] ([112.65.12.217]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2fbf98b3305sm15304645a91.6.2025.02.20.02.08.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Feb 2025 02:08:16 -0800 (PST) From: Jun Nie Date: Thu, 20 Feb 2025 18:07:52 +0800 Subject: [PATCH v2 1/5] drm/msm/dsi: add support VBIF_CTRL_PRIORITY to v2.8.0 controller MIME-Version: 1.0 Message-Id: <20250220-dual-dsi-v2-1-6c0038d5a2ef@linaro.org> References: <20250220-dual-dsi-v2-0-6c0038d5a2ef@linaro.org> In-Reply-To: <20250220-dual-dsi-v2-0-6c0038d5a2ef@linaro.org> To: Rob Clark , Abhinav Kumar , Jessica Zhang , Dmitry Baryshkov , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Krishna Manikandan Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Jun Nie , Jonathan Marek X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1740046076; l=1578; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=lyKLAJr554JAOHjjCnxBQz5CBxEAxvVfUFObcdY1ag4=; b=m9wZrPVBSR+QFJ2DUz/SNoHz3xMrc85nVdPM1VuwlkkM2KmcuqsZt4IzPpcd3vqZEPukV8UFz Q1wZLZvkNnCDMVDPFv4QVErnUTSQ+9VvDwTKh1lvQQdWOSoY1Qs3jj7 X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" This change originates from the Qualcomm Android Linux driver. It is essential to support a dual-DSI configuration with two panels in some circumstances per testing. As the name suggests, this modification may enhance the bandwidth robustness of a bus. Co-developed-by: Jonathan Marek Signed-off-by: Jonathan Marek Signed-off-by: Jun Nie --- drivers/gpu/drm/msm/dsi/dsi_host.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/gpu/drm/msm/dsi/dsi_host.c b/drivers/gpu/drm/msm/dsi/dsi_host.c index 42e100a8adca09d7b55afce0e2553e76d898744f..f59c4cd6bc8cdb31c1302f8e3ff395486c0b4898 100644 --- a/drivers/gpu/drm/msm/dsi/dsi_host.c +++ b/drivers/gpu/drm/msm/dsi/dsi_host.c @@ -2238,13 +2238,23 @@ int msm_dsi_host_cmd_rx(struct mipi_dsi_host *host, return ret; } +#define DSI_VBIF_CTRL (0x01CC - 4) +#define DSI_VBIF_CTRL_PRIORITY 0x07 + void msm_dsi_host_cmd_xfer_commit(struct mipi_dsi_host *host, u32 dma_base, u32 len) { struct msm_dsi_host *msm_host = to_msm_dsi_host(host); + const struct msm_dsi_cfg_handler *cfg_hnd = msm_host->cfg_hnd; + u32 reg; dsi_write(msm_host, REG_DSI_DMA_BASE, dma_base); dsi_write(msm_host, REG_DSI_DMA_LEN, len); + if (cfg_hnd->minor >= MSM_DSI_6G_VER_MINOR_V2_8_0) { + reg = dsi_read(msm_host, DSI_VBIF_CTRL); + reg |= (DSI_VBIF_CTRL_PRIORITY & 0x7); + dsi_write(msm_host, DSI_VBIF_CTRL, reg); + } dsi_write(msm_host, REG_DSI_TRIG_DMA, 1); /* Make sure trigger happens */ From patchwork Thu Feb 20 10:07:53 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jun Nie X-Patchwork-Id: 13983647 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org 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 smtp.lore.kernel.org (Postfix) with ESMTPS id 02F54C021B1 for ; Thu, 20 Feb 2025 10:08:27 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 709A510E90B; Thu, 20 Feb 2025 10:08:27 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="F6LH3ZZA"; dkim-atps=neutral Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) by gabe.freedesktop.org (Postfix) with ESMTPS id 880DE10E90E for ; Thu, 20 Feb 2025 10:08:26 +0000 (UTC) Received: by mail-pj1-f50.google.com with SMTP id 98e67ed59e1d1-2f83a8afcbbso1271777a91.1 for ; Thu, 20 Feb 2025 02:08:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1740046106; x=1740650906; darn=lists.freedesktop.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=/VlfjNAVucjRp1bpDBN6LbVxMwNg8iNsPGxdLh6LJhU=; b=F6LH3ZZADz2w/2ZhYcDeHZmKqAWop2+Zvk9B5+Q4JjDQpnOS26uyWowglE/BzOtig4 5hKKLulIADLdOAkLtSm9k2UzZ5bn88W8j/kdy3mkuMr/K8gSdjWbTRdWGRKxXTO/8rzd mWzlEGNyAwqSCdq5B+s0zyiRJa3aRnVXScWW+KgNGZHO37zMR5Bsngu2wbGzZvqdTJ/7 G2RgOfgBUlOfbB9g7o/836ohgpz+ZnLHy5trdIaT0fEj68JSKu5WA1rpEQF5Kyz6OPtr NCBUB/uuEdfU0Od5/Q0FKOWsmYtHAQOUlbOrZD4OCPIbCqrx98wePCg8lhbA2I93wF4s b24g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740046106; x=1740650906; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/VlfjNAVucjRp1bpDBN6LbVxMwNg8iNsPGxdLh6LJhU=; b=BuCZg63Nh/erbscn0mM7sMDj5g31NTdy9JkL0QLo3omZ8jE0VHLSNG5quYGNh7ZV6y g3BDplEm872qXdJ60KInRRlceD4XJe8oUnkIdSbfhyTsN1edc90NBb18Cq1Mad0LJ5/I SQMIKW65gJgDag+Oun6bdpybWpFURUltvr2qw5Gky1MmSJxJFN+sTljQ5tfjdy2uJbEc ryYTSUDmhz5Gyl3so414w1byogSkp1/EOaXuGi3V/XC/LFsDgH5PkKYACquDjnGCrRqW etW7sy3bPpGimr7TZSsE3NCSQBs3m1w+aFiIfJ2meFokizDbu68DOMs4WI8PiZ1te5AS hUEA== X-Forwarded-Encrypted: i=1; AJvYcCU4VO0hUkeRjHR73q2LC/kKE3/ahd9TLmex+/6qtCgMdvj3hKFhV5HvPw20kPPx8OXd+UiatvWBVNs=@lists.freedesktop.org X-Gm-Message-State: AOJu0YzAdsBdg9u52B2DXWaCxlNHg1/DQQwjODdjwjRMy05Yj9BSZoqe 8v2oBBjo5a/ujKYp7PXnJP7T11LWWeAwb7FTTE4bXNDbqh0ZA2X1UPHAyO4qTKA= X-Gm-Gg: ASbGncs+MFoqh1d7SLNVe6gO3eMpNDJp7pylYydg3xoHuWMkGiuq9cI5UoAljwPHoPl bIqlXLakG2syCSFijSjhJWj2HqGEZgBEKuIaZKXQLLez1GarDYTIhByxYO6loB0Hch7/5NWD+D7 v6LwxRZokL0I3hBrASkXWeVZTOElOl/YBsdiQbog+yipjmP9pIIuaSqpidmTYAMN6l8O8P/sx5K H04XZV9KGrKEpVuadcioIyJQqbcemHiHVYM2GVqJpzPgysi9CfK3xYDaqRPMgoqYG7s2IcMBU4H 0fB+tOs+1IzV X-Google-Smtp-Source: AGHT+IFLxCMRudIcVvWorr4RKj/8cYBxLwu8tZJdzz6fVcUHM0ZcwncySmXk/oO/UFw1vBTAIhvBXQ== X-Received: by 2002:a17:90b:3dc3:b0:2fa:1d9f:c80 with SMTP id 98e67ed59e1d1-2fcccc92715mr4602368a91.17.1740046106054; Thu, 20 Feb 2025 02:08:26 -0800 (PST) Received: from [127.0.1.1] ([112.65.12.217]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2fbf98b3305sm15304645a91.6.2025.02.20.02.08.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Feb 2025 02:08:25 -0800 (PST) From: Jun Nie Date: Thu, 20 Feb 2025 18:07:53 +0800 Subject: [PATCH v2 2/5] drm/msm/dsi: check DSC width for the bonded DSI case MIME-Version: 1.0 Message-Id: <20250220-dual-dsi-v2-2-6c0038d5a2ef@linaro.org> References: <20250220-dual-dsi-v2-0-6c0038d5a2ef@linaro.org> In-Reply-To: <20250220-dual-dsi-v2-0-6c0038d5a2ef@linaro.org> To: Rob Clark , Abhinav Kumar , Jessica Zhang , Dmitry Baryshkov , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Krishna Manikandan Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Jun Nie , Jonathan Marek X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1740046076; l=3234; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=hKjATXyKQvv1McdvtRyxOrJ1QBY9gQvAVDuJEgo+cmU=; b=17pUwBv+mzfkMK56B94QuKGJ5abm9UfGVZw6OxOxzVqtsJOc1Qzti6XjMCs6YMZ6yjKN42pT3 fcq4CIFTnJvCLNjFsk1NSHXjb+L9HGGWs7B7Fnq3c6PVYwCgXOTrJQV X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" The frame width is validated to ensure it is a multiple of the DSC slice. In the case of bonded DSI, the frame is divided horizontally in half for compression and is delivered through two DSI interfaces. Therefore, the width for each DSI interface should also be a multiple of the slice. Currently, the implementation only validates this requirement against the entire frame width. Use half of the frame width for validation. Co-developed-by: Jonathan Marek Signed-off-by: Jonathan Marek Signed-off-by: Jun Nie --- drivers/gpu/drm/msm/dsi/dsi.h | 3 ++- drivers/gpu/drm/msm/dsi/dsi_host.c | 6 +++++- drivers/gpu/drm/msm/dsi/dsi_manager.c | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/msm/dsi/dsi.h b/drivers/gpu/drm/msm/dsi/dsi.h index 87496db203d6c7582eadcb74e94eb56a219df292..35b90c462f637111159b204269ce908614a21586 100644 --- a/drivers/gpu/drm/msm/dsi/dsi.h +++ b/drivers/gpu/drm/msm/dsi/dsi.h @@ -79,7 +79,8 @@ int msm_dsi_host_power_off(struct mipi_dsi_host *host); int msm_dsi_host_set_display_mode(struct mipi_dsi_host *host, const struct drm_display_mode *mode); enum drm_mode_status msm_dsi_host_check_dsc(struct mipi_dsi_host *host, - const struct drm_display_mode *mode); + const struct drm_display_mode *mode, + bool is_bonded_dsi); unsigned long msm_dsi_host_get_mode_flags(struct mipi_dsi_host *host); int msm_dsi_host_register(struct mipi_dsi_host *host); void msm_dsi_host_unregister(struct mipi_dsi_host *host); diff --git a/drivers/gpu/drm/msm/dsi/dsi_host.c b/drivers/gpu/drm/msm/dsi/dsi_host.c index f59c4cd6bc8cdb31c1302f8e3ff395486c0b4898..908f5f1649d650f1cf152fc0b263541dc566ac68 100644 --- a/drivers/gpu/drm/msm/dsi/dsi_host.c +++ b/drivers/gpu/drm/msm/dsi/dsi_host.c @@ -2489,7 +2489,8 @@ int msm_dsi_host_set_display_mode(struct mipi_dsi_host *host, } enum drm_mode_status msm_dsi_host_check_dsc(struct mipi_dsi_host *host, - const struct drm_display_mode *mode) + const struct drm_display_mode *mode, + bool is_bonded_dsi) { struct msm_dsi_host *msm_host = to_msm_dsi_host(host); struct drm_dsc_config *dsc = msm_host->dsc; @@ -2499,6 +2500,9 @@ enum drm_mode_status msm_dsi_host_check_dsc(struct mipi_dsi_host *host, if (!msm_host->dsc) return MODE_OK; + if (is_bonded_dsi) + pic_width = mode->hdisplay / 2; + if (pic_width % dsc->slice_width) { pr_err("DSI: pic_width %d has to be multiple of slice %d\n", pic_width, dsc->slice_width); diff --git a/drivers/gpu/drm/msm/dsi/dsi_manager.c b/drivers/gpu/drm/msm/dsi/dsi_manager.c index b93205c034e4acc73d536deeddce6ebd694b4a80..be13bf682a9601484c9c14e8419563f37c2281ee 100644 --- a/drivers/gpu/drm/msm/dsi/dsi_manager.c +++ b/drivers/gpu/drm/msm/dsi/dsi_manager.c @@ -428,7 +428,7 @@ static enum drm_mode_status dsi_mgr_bridge_mode_valid(struct drm_bridge *bridge, return MODE_ERROR; } - return msm_dsi_host_check_dsc(host, mode); + return msm_dsi_host_check_dsc(host, mode, IS_BONDED_DSI()); } static int dsi_mgr_bridge_attach(struct drm_bridge *bridge, From patchwork Thu Feb 20 10:07:54 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jun Nie X-Patchwork-Id: 13983648 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org 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 smtp.lore.kernel.org (Postfix) with ESMTPS id CC0DFC021B2 for ; Thu, 20 Feb 2025 10:08:38 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 50A6B10E907; Thu, 20 Feb 2025 10:08:38 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="HofWaUyZ"; dkim-atps=neutral Received: from mail-pj1-f50.google.com (mail-pj1-f50.google.com [209.85.216.50]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0AEC610E907 for ; Thu, 20 Feb 2025 10:08:37 +0000 (UTC) Received: by mail-pj1-f50.google.com with SMTP id 98e67ed59e1d1-2fc4418c0e1so3159518a91.1 for ; Thu, 20 Feb 2025 02:08:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1740046116; x=1740650916; darn=lists.freedesktop.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=kSkCVd5LUxAUyX9NrstLbvjZXotPNfmdtqi1iMTXbDI=; b=HofWaUyZQpmeX2z9jwMu6ZC3+A8PE8ruTkQHqGgGgeNks+ebUHeZXfjIUNmwCEpiHe GCtbv3li5VdzEhu6OQiGoCBWlqGIh542iYwqbKW5TCU7RlDZ41pqMMyFXoH056S1Q9t6 FIrHrmC36eXBKFon2pGbRQpiI9amEq81l2HrwTywoqDBhXxlWo++kM3IbuIVXtaDWXVc igqYpS0I8SJOR5BXCgOul/MpQNyAbkZ7+TFtqfTObDe3pB27xT/SeufjU6TrjCs4zST6 0SfoGV06skXj7QeklMI9lOGnpcpbTtFsPVMWPDA4zw5z3jcfhagO5NZHBAUMeJKDyKHF +j0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740046116; x=1740650916; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=kSkCVd5LUxAUyX9NrstLbvjZXotPNfmdtqi1iMTXbDI=; b=EJLSnU9+GozQ3rGwHKWSWUFYciQx0NI1qlKdyqhPQ95Y+OmAE3FDnM9h6LNpP44Qha PkzcZhDpcp3q6hY/cMhpe674ZWg15Vc00OoXNAked5sWDZsHlGsfkXhYaHPrUsAq7e/3 qQlQf+01IOXxk2RgsAIwg1zomPYC8mFo5VHpHoQOwkuvFPY53Br1rmCmsZ/+nU1kgRiu LypaVl6/8sFmX1IoqyRqaeBMbK6H6cciZ5X7TLm2mQoN/YD2YLLUItUk9+oJQXz3+/aG h1XYWmxGHcZwrTsguaunwEVL8JG4ARwqvLsvKLFGnHw3SDDJ4GaZRjsAUxDcg7tajqiH FNUA== X-Forwarded-Encrypted: i=1; AJvYcCWePliiGv5VND77ZfgEABqXvqtwU77sUkXZLjihEMFOljXzOS6+LKkuDhBPxn18llBciHs0Kbj7XIk=@lists.freedesktop.org X-Gm-Message-State: AOJu0YyYHFLfFeSEc7T2G61+xxNJo30FPYQB2/H1Z5cq101eJvLMht/1 jGdF+z3rqHuNeKQaWLmOz5Ll5nYCTMtJ4ODKFYuDkUFaVN7+ScOcpJSIrB3jwu4= X-Gm-Gg: ASbGncvs7c5oJhIpnkIEEPrI5Y/DnndAlDdTLgDXivs4szRK4DpMHJCQEecklw4KLc3 0On8fcmcDHn2bsfgaahhg1Bjy4acChxhzzeuLAX3gt6J0ozLhtAXUyIDEbPwablZNMoSsNJ83PE yrVSYeNvnuXbeSZgus1x/T4eP9OW33rXMH/x8DlS80g12Cm+WsxZ0PxCYcj9I74N31cJHc1+ADC 3q4QUoMZlUQIyx9S/34uMFypo/eSz/hYrweMhNgpo2PofwRv7q5hdAYCVseslp5nD2aVpO/GU3G rSGf/vIFNGe3 X-Google-Smtp-Source: AGHT+IFzj/xwznLXRFqC+C83ybLhwwV/mxtSKzwSxHqW0v9brMeQgIoHXZpn1wk268OK+8d2OehMSQ== X-Received: by 2002:a17:90b:53c3:b0:2fa:176e:9705 with SMTP id 98e67ed59e1d1-2fccc15a991mr4563107a91.10.1740046116545; Thu, 20 Feb 2025 02:08:36 -0800 (PST) Received: from [127.0.1.1] ([112.65.12.217]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2fbf98b3305sm15304645a91.6.2025.02.20.02.08.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Feb 2025 02:08:36 -0800 (PST) From: Jun Nie Date: Thu, 20 Feb 2025 18:07:54 +0800 Subject: [PATCH v2 3/5] drm/msm/dsi: support DSC configurations with slice_per_pkt > 1 MIME-Version: 1.0 Message-Id: <20250220-dual-dsi-v2-3-6c0038d5a2ef@linaro.org> References: <20250220-dual-dsi-v2-0-6c0038d5a2ef@linaro.org> In-Reply-To: <20250220-dual-dsi-v2-0-6c0038d5a2ef@linaro.org> To: Rob Clark , Abhinav Kumar , Jessica Zhang , Dmitry Baryshkov , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Krishna Manikandan Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Jun Nie , Jonathan Marek X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1740046076; l=3811; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=y1LcRbi9IxHrfqru+iB9M02tuGxZS/RP9o/BqRSO94c=; b=TVJ9dgwDkjUei05ilR8Ttmo9k48qbl/iKLv9heTWcvdJszQRCDBhXNhMOY0Rso7yLwJ9duJDH 6SBsBVj86DqBMWnnRbNoG0v/GSpzE6JXH7I+dJT2rlUh04eyxEXvZxK X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Some panels support multiple slice to be sent in a single DSC packet. And this feature is a must for specific panels, such as JDI LPM026M648C. Add a dsc_slice_per_pkt member into struct mipi_dsi_device and support the feature in msm mdss driver. Co-developed-by: Jonathan Marek Signed-off-by: Jonathan Marek Signed-off-by: Jun Nie --- drivers/gpu/drm/msm/dsi/dsi_host.c | 25 ++++++++++--------------- include/drm/drm_mipi_dsi.h | 2 ++ 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/drivers/gpu/drm/msm/dsi/dsi_host.c b/drivers/gpu/drm/msm/dsi/dsi_host.c index 908f5f1649d650f1cf152fc0b263541dc566ac68..976c5d82a2efa0fc51657b8534675890be7c33a6 100644 --- a/drivers/gpu/drm/msm/dsi/dsi_host.c +++ b/drivers/gpu/drm/msm/dsi/dsi_host.c @@ -157,6 +157,7 @@ struct msm_dsi_host { struct drm_display_mode *mode; struct drm_dsc_config *dsc; + unsigned int dsc_slice_per_pkt; /* connected device info */ unsigned int channel; @@ -861,17 +862,10 @@ static void dsi_update_dsc_timing(struct msm_dsi_host *msm_host, bool is_cmd_mod slice_per_intf = dsc->slice_count; total_bytes_per_intf = dsc->slice_chunk_size * slice_per_intf; - bytes_per_pkt = dsc->slice_chunk_size; /* * slice_per_pkt; */ + bytes_per_pkt = dsc->slice_chunk_size * msm_host->dsc_slice_per_pkt; eol_byte_num = total_bytes_per_intf % 3; - - /* - * Typically, pkt_per_line = slice_per_intf * slice_per_pkt. - * - * Since the current driver only supports slice_per_pkt = 1, - * pkt_per_line will be equal to slice per intf for now. - */ - pkt_per_line = slice_per_intf; + pkt_per_line = slice_per_intf / msm_host->dsc_slice_per_pkt; if (is_cmd_mode) /* packet data type */ reg = DSI_COMMAND_COMPRESSION_MODE_CTRL_STREAM0_DATATYPE(MIPI_DSI_DCS_LONG_WRITE); @@ -1020,12 +1014,8 @@ static void dsi_timing_setup(struct msm_dsi_host *msm_host, bool is_bonded_dsi) else /* * When DSC is enabled, WC = slice_chunk_size * slice_per_pkt + 1. - * Currently, the driver only supports default value of slice_per_pkt = 1 - * - * TODO: Expand mipi_dsi_device struct to hold slice_per_pkt info - * and adjust DSC math to account for slice_per_pkt. */ - wc = msm_host->dsc->slice_chunk_size + 1; + wc = msm_host->dsc->slice_chunk_size * msm_host->dsc_slice_per_pkt + 1; dsi_write(msm_host, REG_DSI_CMD_MDP_STREAM0_CTRL, DSI_CMD_MDP_STREAM0_CTRL_WORD_COUNT(wc) | @@ -1630,8 +1620,13 @@ static int dsi_host_attach(struct mipi_dsi_host *host, msm_host->lanes = dsi->lanes; msm_host->format = dsi->format; msm_host->mode_flags = dsi->mode_flags; - if (dsi->dsc) + if (dsi->dsc) { msm_host->dsc = dsi->dsc; + msm_host->dsc_slice_per_pkt = dsi->dsc_slice_per_pkt; + /* for backwards compatibility, assume 1 if not set */ + if (!msm_host->dsc_slice_per_pkt) + msm_host->dsc_slice_per_pkt = 1; + } ret = dsi_dev_attach(msm_host->pdev); if (ret) diff --git a/include/drm/drm_mipi_dsi.h b/include/drm/drm_mipi_dsi.h index 94400a78031f1b5f515c4a1519f604c0df7f3e0c..f13ed73b54b0af6d93456f4b8c8257c4f8419023 100644 --- a/include/drm/drm_mipi_dsi.h +++ b/include/drm/drm_mipi_dsi.h @@ -182,6 +182,7 @@ struct mipi_dsi_device_info { * be set to the real limits of the hardware, zero is only accepted for * legacy drivers * @dsc: panel/bridge DSC pps payload to be sent + * @dsc_slice_per_pkt: number of DSC slices to be sent as in a single packet */ struct mipi_dsi_device { struct mipi_dsi_host *host; @@ -196,6 +197,7 @@ struct mipi_dsi_device { unsigned long hs_rate; unsigned long lp_rate; struct drm_dsc_config *dsc; + unsigned int dsc_slice_per_pkt; }; /** From patchwork Thu Feb 20 10:07:55 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jun Nie X-Patchwork-Id: 13983649 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org 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 smtp.lore.kernel.org (Postfix) with ESMTPS id 9B741C021B1 for ; Thu, 20 Feb 2025 10:08:49 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 1A17310E914; Thu, 20 Feb 2025 10:08:49 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="LaUh438E"; dkim-atps=neutral Received: from mail-pj1-f51.google.com (mail-pj1-f51.google.com [209.85.216.51]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9A00810E919 for ; Thu, 20 Feb 2025 10:08:47 +0000 (UTC) Received: by mail-pj1-f51.google.com with SMTP id 98e67ed59e1d1-2fa8ac56891so1138960a91.2 for ; Thu, 20 Feb 2025 02:08:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1740046127; x=1740650927; darn=lists.freedesktop.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=meTtqveZhiyJw9ezonjEpVoABcseZWYpFPvHUuAWv9M=; b=LaUh438EfKUDMOJTu2j1P4cLtnL/8pbk8+AUqFGFTtfpwaWpivniTaN3rPoU4aCAuf ysqekkFMjVRdJijEfDDufnAAWjlEWmeD4F82GIRwZgyaWuZNO2wSwH3QVQ4u7xQ8Xy8S GrvN105lcCzl2rAlQI9Pjdjh8vUooUCOiY+v6ZM2/+/jkmjcyCVEcv8GID9RcBnXJhXm XNVgsZhhQ3CuF799r8vg25yxlTlfJk3YeLCZi7KGFO493lGpmjWv4oZo4Mmg0T2VLd30 YHtXHEUjvhxEEfJT1844lfCyup4pvZB0b7xS4KytW0P9J6/jF458qyx+Ze/FlwMrNX6h HgaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740046127; x=1740650927; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=meTtqveZhiyJw9ezonjEpVoABcseZWYpFPvHUuAWv9M=; b=a6TePUcStN13sPoZb6gP72lv70L0CQxjUwRvgUtO6IulhOXSeI+th7MRF6d/MUzbjq UaCnZj+V0ofhwAtCHx26Nq/z+on6eiAWtNeDjNqUIFrk55jnsB0K+vDqrIJ7WYbIDe2D C9Xx95yJ3cDGVNuuvGIsdCOIP2rq6UTz0NYkBW7UIa0bUEyNP3lU7ArFGWoQawWKeMYM nCraJbbFcMlM3yZHrSBZjW1yy3g2H+PS8//RO+ScIjpaPL0oyc7r0y/uI6JDXMYKbf+P rSBMK92R2SRzuWNz+JKnGNYTj3uD/pg62tUlcOT4L4gKgeYuewgcGUl7AmyaVUcYJeer LPyw== X-Forwarded-Encrypted: i=1; AJvYcCV5s2TsP4m7Tm0TXDLDyWxOQx78RhxuPyYrz4edv5bi722N99fmsdmS/PszEIIaoLpJ6ebJV21Rm4k=@lists.freedesktop.org X-Gm-Message-State: AOJu0YxI65HPskmgto5k3hqgeKV+ijs0QVNHSe59CnnEk6n8YU8jV3SO sUWKHByVc+NAZER54pBM/Oxx+3NrVDvWj13mha6tTxRkAEf/5WEmU2onkOgmvZ4= X-Gm-Gg: ASbGnct5djGZYholGs8ydE1ZxE2nfkgEEW4fY2I5MEW5o4b8nCt08FI2JkRHoLlMyIp EN8Qdz08iSLGyiIb2jfihWD95Dfng8lDFH6tAvVzXnT7bq1LhvPA+8DiMvetq3z1SLmFzLZwibX 9Llc8XO9HsAPyahJuyVSXiFP9juT6vwdzlNctKeNH0yk4rr3dBgWAZF66XE8h4TUZI2SEO6OJxx yHOmkhquCYLWMPLGPIKvF7JcmaZsH/XOL5pJeV6I9OKT8qgQjon7L37NaUGJq/qCWLFUZFOnzYm DzO1XXQ1BFyL X-Google-Smtp-Source: AGHT+IGD8wqaCpXBwdzW85qDe+j1va1f9U+T7g4YEj1TqycqH9bnYqKAjfpfwmdIfdAez2gbLo1Zwg== X-Received: by 2002:a17:90b:3b83:b0:2f9:9ddd:689b with SMTP id 98e67ed59e1d1-2fc410493acmr28089738a91.22.1740046127187; Thu, 20 Feb 2025 02:08:47 -0800 (PST) Received: from [127.0.1.1] ([112.65.12.217]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2fbf98b3305sm15304645a91.6.2025.02.20.02.08.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Feb 2025 02:08:46 -0800 (PST) From: Jun Nie Date: Thu, 20 Feb 2025 18:07:55 +0800 Subject: [PATCH v2 4/5] dt-bindings: display/msm: dsi-controller-main: Document dual panel property MIME-Version: 1.0 Message-Id: <20250220-dual-dsi-v2-4-6c0038d5a2ef@linaro.org> References: <20250220-dual-dsi-v2-0-6c0038d5a2ef@linaro.org> In-Reply-To: <20250220-dual-dsi-v2-0-6c0038d5a2ef@linaro.org> To: Rob Clark , Abhinav Kumar , Jessica Zhang , Dmitry Baryshkov , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Krishna Manikandan Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Jun Nie X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1740046076; l=1495; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=FgJVBSjYusgZgNG2tQQqs/1on/o8VH1/MQqBVN+UdAQ=; b=oaEXnf20Cz3Ju+1zO2v+vtkcbrG+X7KDJR0PpZRcUkf0QC2Lo0cvU97aOJrdgq8tfBzlaNeD0 vvilHqVr9BpDIW2cesJxDngRIMCexsZ2QgBOnuum6tB6wsLrIJuhgMm X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" The DSI interface can be connected to a panel that has a dual DSI channel, or to two separate panels, each equipped with a single DSI channel. To prevent the DSC configuration for the dual panel setup from disrupting the current configuration of a single panel with a dual DSI channel, add a dual panel property to support the use of two panels. Signed-off-by: Jun Nie --- .../devicetree/bindings/display/msm/dsi-controller-main.yaml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Documentation/devicetree/bindings/display/msm/dsi-controller-main.yaml b/Documentation/devicetree/bindings/display/msm/dsi-controller-main.yaml index ffbd1dc9470e2091b477b0c88392d81802119f48..e3f2eabde27609a66d6d81fafcb14e1bc014613c 100644 --- a/Documentation/devicetree/bindings/display/msm/dsi-controller-main.yaml +++ b/Documentation/devicetree/bindings/display/msm/dsi-controller-main.yaml @@ -88,9 +88,15 @@ properties: qcom,dual-dsi-mode: type: boolean description: | - Indicates if the DSI controller is driving a panel which needs + Indicates if the DSI controller is driving display device which needs 2 DSI links. + qcom,dual-panel: + type: boolean + description: | + Indicates if the DSI controller is driving display device that composed + with 2 independent panels and needs 2 DSI links. + qcom,master-dsi: type: boolean description: | From patchwork Thu Feb 20 10:07:56 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jun Nie X-Patchwork-Id: 13983650 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org 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 smtp.lore.kernel.org (Postfix) with ESMTPS id C0E1FC021B2 for ; Thu, 20 Feb 2025 10:08:58 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 3D4AB10E90D; Thu, 20 Feb 2025 10:08:58 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="QlST3mxC"; dkim-atps=neutral Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.46]) by gabe.freedesktop.org (Postfix) with ESMTPS id CEF7910E90E for ; Thu, 20 Feb 2025 10:08:57 +0000 (UTC) Received: by mail-pj1-f46.google.com with SMTP id 98e67ed59e1d1-2fa5af6d743so1142465a91.3 for ; Thu, 20 Feb 2025 02:08:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1740046137; x=1740650937; darn=lists.freedesktop.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=8+OUzS6eo8FVNCvAvfNYtKkGJynjAEILZy6jM+oJy/s=; b=QlST3mxCitG+jbP6x73BpFsQr0QvCgRLzqnioqa3Jwbh5cW4c1DIfWKwjXC7MNUrux gf1v48jyz472lKrsGwDd4T962nDiZKU3FoCRBFv0D0aBU6rEgUIGlkfg3gbAMrSXKSZ4 xOzImevWSimjbtwbbyUeGi/k0cY410iojd0bcc6ZSZ+XS0eyu04ERzmpCVn2pUfOrv9A gvef0z5yz9Pm6iOJ09I6tPw5bCVXRuTrwKJv2OTwzk10ohgCS8ITBapbmGK2/hMY8Jr6 iQTLsyuYWBYTrGRoz2bk2+5xKMWpQQ3IFBr5/2+l6bd3EfO6qexmRQxf0zl8xD/dkXol WIBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1740046137; x=1740650937; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=8+OUzS6eo8FVNCvAvfNYtKkGJynjAEILZy6jM+oJy/s=; b=BJKyvasY2ywdekeJ2dIuGv+ceLJ4qVBNRAgwi/6ujLU2atRXApOAWZh3WtoubnkD3P MMxDL5dYM3GZurbx9aruCW+EI8YKWgbNrQnOmOddaMx8yTVmbTTj3mvhmer4iO7UgS1I 1LfVsn2KIc4QSngxHwhMeFaPNMWRMKmMA3tTWwasq0cVlg6Xu1jPV8pk9hKW0ums9ZnO SS2XddwZi+gg9/1nP9aW7hSeLTHEt2nUtjA+kptir/Wze40thRWnS+HebpqfrMpZMP/a /w8jlBefI8Dh2yHDk/1BuxNd/ce+qHjEtuFTEFbXuMhREmgjoGOPj35XOUULWG0tikKq Eexw== X-Forwarded-Encrypted: i=1; AJvYcCU3pFClbixREFHjPgOH4bLv4n0xRB7ek/3AamHJ47dpJmcg1Z/l+Y46BIQ8yx4MlLKpZOo81SExUck=@lists.freedesktop.org X-Gm-Message-State: AOJu0YxgygFb/BKcM0ksbw+Lt2ET5nbUkTkbUlIocIyX8MIt0SF7eo7K IiytKSYu7gcu2Wo8KWDVg62lRDYEmHbj1BFhmns1r/+FUkYyiGDOGrXKRJiEKqM= X-Gm-Gg: ASbGncvOYXxd7juQ2MI4CRZwzZ2Qu3+DUOOSY5Q7uVFrvl9siI07R0dbyOnzkzgnI1l 7WWnJ8/kjknyQHcD81QX7PXOPaN6+kbPWhsYzAf6BNEU7EUICAzmMG3GseIScmzD1JSYJALXAMA ymqj4iyc6cV0To6HalshxauCpekKbotp4IGIuPH6kWCmk47xOUYyA9i5T3w6et59+hjjh0gBY+n 2HjrpugxLitgF+UgL5Dx6ZlJqMqSTmy2vF12mv9eN1Z+gI3AfYfnF6ei3+95zuJhseY4k1OVH1i Bgs+Lf5RFwsI X-Google-Smtp-Source: AGHT+IHDtFghikb0IsdCfqFtYMffpKN5+PJogSYWwgbB8ovOAObhOmSVEFhYr1RpSHSfSypZl/GVTw== X-Received: by 2002:a17:90b:3d86:b0:2f4:4500:bb4d with SMTP id 98e67ed59e1d1-2fc40f233f9mr32996102a91.20.1740046137364; Thu, 20 Feb 2025 02:08:57 -0800 (PST) Received: from [127.0.1.1] ([112.65.12.217]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2fbf98b3305sm15304645a91.6.2025.02.20.02.08.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Feb 2025 02:08:57 -0800 (PST) From: Jun Nie Date: Thu, 20 Feb 2025 18:07:56 +0800 Subject: [PATCH v2 5/5] drm/msm/dsi: Support DSC for dual panel case MIME-Version: 1.0 Message-Id: <20250220-dual-dsi-v2-5-6c0038d5a2ef@linaro.org> References: <20250220-dual-dsi-v2-0-6c0038d5a2ef@linaro.org> In-Reply-To: <20250220-dual-dsi-v2-0-6c0038d5a2ef@linaro.org> To: Rob Clark , Abhinav Kumar , Jessica Zhang , Dmitry Baryshkov , Sean Paul , Marijn Suijten , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Krishna Manikandan Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, Jun Nie X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1740046076; l=5455; i=jun.nie@linaro.org; s=20240403; h=from:subject:message-id; bh=UmAueoCoAiEP6+F0V8D3CfDL3EJR/catd+q6wTXt9m8=; b=6BwqEYg6DasxH9/TNbFINX8D5ATykKXwrq7MbDqfVfVuPFJ845uD3DPApUtH07rTfNUFTW/dz GczxnFvXZZ+AWEfDhMOKDN5XUwWsjxgrouT47tVNv40LQ4kUUbFO0uQ X-Developer-Key: i=jun.nie@linaro.org; a=ed25519; pk=MNiBt/faLPvo+iJoP1hodyY2x6ozVXL8QMptmsKg3cc= X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" There is dual DSI case that every DSI link is connected to an independent panel. In this dual panel case, the frame width for DSC on each link should be halved to support the usage case. Signed-off-by: Jun Nie --- drivers/gpu/drm/msm/dsi/dsi.h | 3 ++- drivers/gpu/drm/msm/dsi/dsi_host.c | 13 +++++++++---- drivers/gpu/drm/msm/dsi/dsi_manager.c | 10 ++++++++-- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/msm/dsi/dsi.h b/drivers/gpu/drm/msm/dsi/dsi.h index 35b90c462f637111159b204269ce908614a21586..5a8978bed9f4ca897b418ced60194042d9dd8d05 100644 --- a/drivers/gpu/drm/msm/dsi/dsi.h +++ b/drivers/gpu/drm/msm/dsi/dsi.h @@ -74,7 +74,8 @@ void msm_dsi_host_enable_irq(struct mipi_dsi_host *host); void msm_dsi_host_disable_irq(struct mipi_dsi_host *host); int msm_dsi_host_power_on(struct mipi_dsi_host *host, struct msm_dsi_phy_shared_timings *phy_shared_timings, - bool is_bonded_dsi, struct msm_dsi_phy *phy); + bool is_bonded_dsi, bool is_dual_panel, + struct msm_dsi_phy *phy); int msm_dsi_host_power_off(struct mipi_dsi_host *host); int msm_dsi_host_set_display_mode(struct mipi_dsi_host *host, const struct drm_display_mode *mode); diff --git a/drivers/gpu/drm/msm/dsi/dsi_host.c b/drivers/gpu/drm/msm/dsi/dsi_host.c index 976c5d82a2efa0fc51657b8534675890be7c33a6..752a97f7181c30dade0a7745492bf16649b3197b 100644 --- a/drivers/gpu/drm/msm/dsi/dsi_host.c +++ b/drivers/gpu/drm/msm/dsi/dsi_host.c @@ -902,7 +902,8 @@ static void dsi_update_dsc_timing(struct msm_dsi_host *msm_host, bool is_cmd_mod } } -static void dsi_timing_setup(struct msm_dsi_host *msm_host, bool is_bonded_dsi) +static void dsi_timing_setup(struct msm_dsi_host *msm_host, bool is_bonded_dsi, + bool is_dual_panel) { struct drm_display_mode *mode = msm_host->mode; u32 hs_start = 0, vs_start = 0; /* take sync start as 0 */ @@ -947,7 +948,10 @@ static void dsi_timing_setup(struct msm_dsi_host *msm_host, bool is_bonded_dsi) return; } - dsc->pic_width = mode->hdisplay; + if (is_dual_panel) + dsc->pic_width = hdisplay; + else + dsc->pic_width = mode->hdisplay; dsc->pic_height = mode->vdisplay; DBG("Mode %dx%d\n", dsc->pic_width, dsc->pic_height); @@ -2369,7 +2373,8 @@ static void msm_dsi_sfpb_config(struct msm_dsi_host *msm_host, bool enable) int msm_dsi_host_power_on(struct mipi_dsi_host *host, struct msm_dsi_phy_shared_timings *phy_shared_timings, - bool is_bonded_dsi, struct msm_dsi_phy *phy) + bool is_bonded_dsi, bool is_dual_panel, + struct msm_dsi_phy *phy) { struct msm_dsi_host *msm_host = to_msm_dsi_host(host); const struct msm_dsi_cfg_handler *cfg_hnd = msm_host->cfg_hnd; @@ -2412,7 +2417,7 @@ int msm_dsi_host_power_on(struct mipi_dsi_host *host, goto fail_disable_clk; } - dsi_timing_setup(msm_host, is_bonded_dsi); + dsi_timing_setup(msm_host, is_bonded_dsi, is_dual_panel); dsi_sw_reset(msm_host); dsi_ctrl_enable(msm_host, phy_shared_timings, phy); diff --git a/drivers/gpu/drm/msm/dsi/dsi_manager.c b/drivers/gpu/drm/msm/dsi/dsi_manager.c index be13bf682a9601484c9c14e8419563f37c2281ee..158b6cc907cb39cc3b182d3088b793d322a3527c 100644 --- a/drivers/gpu/drm/msm/dsi/dsi_manager.c +++ b/drivers/gpu/drm/msm/dsi/dsi_manager.c @@ -24,6 +24,7 @@ struct msm_dsi_manager { struct msm_dsi *dsi[DSI_MAX]; bool is_bonded_dsi; + bool is_dual_panel; bool is_sync_needed; int master_dsi_link_id; }; @@ -31,6 +32,7 @@ struct msm_dsi_manager { static struct msm_dsi_manager msm_dsim_glb; #define IS_BONDED_DSI() (msm_dsim_glb.is_bonded_dsi) +#define IS_DUAL_PANEL() (msm_dsim_glb.is_dual_panel) #define IS_SYNC_NEEDED() (msm_dsim_glb.is_sync_needed) #define IS_MASTER_DSI_LINK(id) (msm_dsim_glb.master_dsi_link_id == id) @@ -55,6 +57,7 @@ static int dsi_mgr_parse_of(struct device_node *np, int id) msm_dsim->is_bonded_dsi = of_property_read_bool(np, "qcom,dual-dsi-mode"); if (msm_dsim->is_bonded_dsi) { + msm_dsim->is_dual_panel = of_property_read_bool(np, "qcom,dual-panel"); if (of_property_read_bool(np, "qcom,master-dsi")) msm_dsim->master_dsi_link_id = id; if (!msm_dsim->is_sync_needed) @@ -214,6 +217,7 @@ static int dsi_mgr_bridge_power_on(struct drm_bridge *bridge) struct mipi_dsi_host *host = msm_dsi->host; struct msm_dsi_phy_shared_timings phy_shared_timings[DSI_MAX]; bool is_bonded_dsi = IS_BONDED_DSI(); + bool is_dual_panel = IS_DUAL_PANEL(); int ret; DBG("id=%d", id); @@ -222,7 +226,8 @@ static int dsi_mgr_bridge_power_on(struct drm_bridge *bridge) if (ret) goto phy_en_fail; - ret = msm_dsi_host_power_on(host, &phy_shared_timings[id], is_bonded_dsi, msm_dsi->phy); + ret = msm_dsi_host_power_on(host, &phy_shared_timings[id], + is_bonded_dsi, is_dual_panel, msm_dsi->phy); if (ret) { pr_err("%s: power on host %d failed, %d\n", __func__, id, ret); goto host_on_fail; @@ -230,7 +235,8 @@ static int dsi_mgr_bridge_power_on(struct drm_bridge *bridge) if (is_bonded_dsi && msm_dsi1) { ret = msm_dsi_host_power_on(msm_dsi1->host, - &phy_shared_timings[DSI_1], is_bonded_dsi, msm_dsi1->phy); + &phy_shared_timings[DSI_1], is_bonded_dsi, + is_dual_panel, msm_dsi1->phy); if (ret) { pr_err("%s: power on host1 failed, %d\n", __func__, ret);