From nobody Wed Oct 8 14:20:36 2025 Received: from layka.disroot.org (layka.disroot.org [178.21.23.139]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A196627510C; Thu, 26 Jun 2025 19:39:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=178.21.23.139 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750966766; cv=none; b=amFfsB98DKwoOxJ47p2dqO7qHjS3x4gCjBwoaLs4HW7vh/sWbn0WHiVNCGIjKM+umCcFdi9m060bay12CjRePfeerRebTMt4t70RuPGrD6RRCnzUlZKgJKj3+TraUzsyy37mBzhXZDn8Br/48IJlzHjt/yXVj0iBp2oGyroV4Ss= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750966766; c=relaxed/simple; bh=TG6PpiVt3x8khpiAwmUkjUgEt60PtaK2JgeIne/z7AM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pomJ+hVCPFg9+r9d25hhG4i9Pw1/lXIe0MWBzeq9rL0I46NyXnTQeowkTD0D9rFq3HUUUSz27evHKfPT0yD6PZX9Y/x6Mg1vM1l7c4rWzN3LK3LaP8EaXwkuvcGkvS76TOVy49jFzMkFquqMUx+i1LfleMUDaoitKtPSQrPhb5k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org; spf=pass smtp.mailfrom=disroot.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b=VgL6lMhS; arc=none smtp.client-ip=178.21.23.139 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=disroot.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b="VgL6lMhS" Received: from mail01.disroot.lan (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 2B07525D43; Thu, 26 Jun 2025 21:39:23 +0200 (CEST) X-Virus-Scanned: SPAM Filter at disroot.org Received: from layka.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavis, port 10024) with ESMTP id M9_slnv9E3GB; Thu, 26 Jun 2025 21:39:22 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1750966761; bh=TG6PpiVt3x8khpiAwmUkjUgEt60PtaK2JgeIne/z7AM=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=VgL6lMhSgTAo5A9uPPEUXx4VIXqhsaTv9BXIRtRAQ2Hqsd3R7qhYTaK3Wz62OMUoa JAp9c01dt3wiIK4q6GcE/s2DG1AbQMKofMLT9G6dl9PQ8trIIxniK8dRvU9pNuiBSv 6ajt6MnpnFbTMH3uVyRARXEsGR7T60Zz8T+978i7kS83HcQw9Hfeu9Ft65Itps3Rxo yYBiY2x6EoZ254GFUHrYyc5XGH1AeSe3F7guxlb1P8v2OR2L00tUKfql4dAEKW8bwf pmGtnIDdYUkHD9cHadn5bwJmLhoiMbHlmjfWg8Dl4Fb4zsdcnW++eoKJG1/ocu7vwT 0ELoGOzxuuF0A== From: Kaustabh Chakraborty Date: Fri, 27 Jun 2025 01:08:50 +0530 Subject: [PATCH v2 01/13] drm/bridge: samsung-dsim: separate LINK and DPHY status registers Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250627-exynos7870-dsim-v2-1-1433b67378d3@disroot.org> References: <20250627-exynos7870-dsim-v2-0-1433b67378d3@disroot.org> In-Reply-To: <20250627-exynos7870-dsim-v2-0-1433b67378d3@disroot.org> To: Inki Dae , Jagan Teki , Marek Szyprowski , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Alim Akhtar Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, Kaustabh Chakraborty X-Developer-Signature: v=1; a=ed25519-sha256; t=1750966738; l=2711; i=kauschluss@disroot.org; s=20250202; h=from:subject:message-id; bh=TG6PpiVt3x8khpiAwmUkjUgEt60PtaK2JgeIne/z7AM=; b=Qe5k65vwScrLrxzpAIzqFSDyfti31wuXEIoYN3h6+HEkViYxWAIZjCAB3Ki6Fn8zgUtur6VLP z/kKIHLQKAjAnmw28GH6USeyjP+E4x9vQlMOtprBDubI5t/wQ/EnGWU X-Developer-Key: i=kauschluss@disroot.org; a=ed25519; pk=h2xeR+V2I1+GrfDPAhZa3M+NWA0Cnbdkkq1bH3ct1hE= Exynos7870's DSIM has separate registers for LINK and DPHY status. This is in contrast to other devices in the driver which use a single register for both. Add their respective entries in the register list. Devices having a single status register have been assigned the same offset for both entries. Signed-off-by: Kaustabh Chakraborty --- drivers/gpu/drm/bridge/samsung-dsim.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge= /samsung-dsim.c index f2f666b27d2d5ec016d7a7f47c87fcdf1377d41a..7fd4c34cdc3170d363942f98fee= c048097da3c06 100644 --- a/drivers/gpu/drm/bridge/samsung-dsim.c +++ b/drivers/gpu/drm/bridge/samsung-dsim.c @@ -30,7 +30,7 @@ /* returns true iff both arguments logically differs */ #define NEQV(a, b) (!(a) ^ !(b)) =20 -/* DSIM_STATUS */ +/* DSIM_DPHY_STATUS */ #define DSIM_STOP_STATE_DAT(x) (((x) & 0xf) << 0) #define DSIM_STOP_STATE_CLK BIT(8) #define DSIM_TX_READY_HS_CLK BIT(10) @@ -239,7 +239,8 @@ enum samsung_dsim_transfer_type { }; =20 enum reg_idx { - DSIM_STATUS_REG, /* Status register */ + DSIM_LINK_STATUS_REG, /* Link status register */ + DSIM_DPHY_STATUS_REG, /* D-PHY status register */ DSIM_SWRST_REG, /* Software reset register */ DSIM_CLKCTRL_REG, /* Clock control register */ DSIM_TIMEOUT_REG, /* Time out register */ @@ -264,7 +265,8 @@ enum reg_idx { }; =20 static const unsigned int exynos_reg_ofs[] =3D { - [DSIM_STATUS_REG] =3D 0x00, + [DSIM_LINK_STATUS_REG] =3D 0x00, + [DSIM_DPHY_STATUS_REG] =3D 0x00, [DSIM_SWRST_REG] =3D 0x04, [DSIM_CLKCTRL_REG] =3D 0x08, [DSIM_TIMEOUT_REG] =3D 0x0c, @@ -288,7 +290,8 @@ static const unsigned int exynos_reg_ofs[] =3D { }; =20 static const unsigned int exynos5433_reg_ofs[] =3D { - [DSIM_STATUS_REG] =3D 0x04, + [DSIM_LINK_STATUS_REG] =3D 0x04, + [DSIM_DPHY_STATUS_REG] =3D 0x04, [DSIM_SWRST_REG] =3D 0x0C, [DSIM_CLKCTRL_REG] =3D 0x10, [DSIM_TIMEOUT_REG] =3D 0x14, @@ -690,7 +693,7 @@ static unsigned long samsung_dsim_set_pll(struct samsun= g_dsim *dsi, dev_err(dsi->dev, "PLL failed to stabilize\n"); return 0; } - reg =3D samsung_dsim_read(dsi, DSIM_STATUS_REG); + reg =3D samsung_dsim_read(dsi, DSIM_LINK_STATUS_REG); } while ((reg & DSIM_PLL_STABLE) =3D=3D 0); =20 dsi->hs_clock =3D fout; @@ -966,7 +969,7 @@ static int samsung_dsim_init_link(struct samsung_dsim *= dsi) return -EFAULT; } =20 - reg =3D samsung_dsim_read(dsi, DSIM_STATUS_REG); + reg =3D samsung_dsim_read(dsi, DSIM_DPHY_STATUS_REG); if ((reg & DSIM_STOP_STATE_DAT(lanes_mask)) !=3D DSIM_STOP_STATE_DAT(lanes_mask)) continue; --=20 2.49.0 From nobody Wed Oct 8 14:20:36 2025 Received: from layka.disroot.org (layka.disroot.org [178.21.23.139]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7E26E2F2C4E; Thu, 26 Jun 2025 19:39:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=178.21.23.139 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750966778; cv=none; b=D3AHbTzquo861AlS9H+niKomSmjtKqOUf5wo8lCt59wQrAQdDdysAamNbuVdRm9Vu7RRBBGuUJttscxbnOVE/AUvwhuMQqh2a0oqwFR+pCkF1uRS8o5mqCigKTxubtBEyNQAcxYBdr/OXmEX+XuYklyS0RhLfmjHzD6i+GpS88A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750966778; c=relaxed/simple; bh=aN4FJ+kPhDscp3zmowYTWHdafim80a5zODRFZFCM9S4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=gxPlxfbrxym7a+v4RlHkuGGX5Lq6ObA7M3UtXqJZFCXxdW0BN+7abwQ4L1Sov9d9cCUBPqPeGEE+rBK/cmkq/lY8RqhDzHm7yWf6sTgaY3qvmzHPlPeK7lRKFgCCw3zQTLSlyGm1zDX0Cr0jFNK4KGbt6MBOWxpeZyOqGPP594A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org; spf=pass smtp.mailfrom=disroot.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b=iix8Y7hT; arc=none smtp.client-ip=178.21.23.139 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=disroot.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b="iix8Y7hT" Received: from mail01.disroot.lan (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 3A2A3219F5; Thu, 26 Jun 2025 21:39:35 +0200 (CEST) X-Virus-Scanned: SPAM Filter at disroot.org Received: from layka.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavis, port 10024) with ESMTP id etz7SfeO7cfX; Thu, 26 Jun 2025 21:39:34 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1750966774; bh=aN4FJ+kPhDscp3zmowYTWHdafim80a5zODRFZFCM9S4=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=iix8Y7hT0b85XahP4OBNiLanPlVK5yGvSMVh3/v/CZQYsSVwK01SdJw1gAMC+bY6G WnTT2AXJR2sLzpd6bLsuCXmHIDfio/9X2BmB/mh8yrORo2+fkLihUprYUUNPrrsZo+ 7/DRYsM99h9PSg4tKpqNI+u+twkTTVwjq0iPiEeiJOuXLQod3CYu9DAUIpBZA2iiVU ZOxVQG0Go2U7Pl2QnWvkdiEfAVwXn9/ykIJwIyklZWGjolbcR86oB6+k3YwQQfzIEP VDTnYGxpyOy/0PHYb2iQCanp5Nj3Q/0n7a5nnI902pL3OGXFtgiKnDQ84U9Hw8gj8i ke5CndHyZJIIA== From: Kaustabh Chakraborty Date: Fri, 27 Jun 2025 01:08:51 +0530 Subject: [PATCH v2 02/13] drm/bridge: samsung-dsim: add SFRCTRL register Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250627-exynos7870-dsim-v2-2-1433b67378d3@disroot.org> References: <20250627-exynos7870-dsim-v2-0-1433b67378d3@disroot.org> In-Reply-To: <20250627-exynos7870-dsim-v2-0-1433b67378d3@disroot.org> To: Inki Dae , Jagan Teki , Marek Szyprowski , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Alim Akhtar Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, Kaustabh Chakraborty X-Developer-Signature: v=1; a=ed25519-sha256; t=1750966738; l=2917; i=kauschluss@disroot.org; s=20250202; h=from:subject:message-id; bh=aN4FJ+kPhDscp3zmowYTWHdafim80a5zODRFZFCM9S4=; b=2ooZ5v9WZmOF4ZFhM8p/BIgUpVpcq4TXaN2D2Wqe+Lv5VL9aO2vcx+SQH3bvawd2gINGElozN saBPyEYYB9cCMOFbU8qn/1koHrsYqyCzHPxYXrJRrgRaAGNzXzQeAF6 X-Developer-Key: i=kauschluss@disroot.org; a=ed25519; pk=h2xeR+V2I1+GrfDPAhZa3M+NWA0Cnbdkkq1bH3ct1hE= On Exynos7870 devices, enabling the display requires disabling standby by writing to the SFRCTRL register. Add the register and related bit values. Since this behavior isn't available on other SoCs, implement a flag in the driver data struct indicating the availability of this feature. Signed-off-by: Kaustabh Chakraborty --- drivers/gpu/drm/bridge/samsung-dsim.c | 16 ++++++++++++++++ include/drm/bridge/samsung-dsim.h | 1 + 2 files changed, 17 insertions(+) diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge= /samsung-dsim.c index 7fd4c34cdc3170d363942f98feec048097da3c06..3c716334f1a21bf446ebe17f810= d5258dd9a4c24 100644 --- a/drivers/gpu/drm/bridge/samsung-dsim.c +++ b/drivers/gpu/drm/bridge/samsung-dsim.c @@ -156,6 +156,11 @@ #define DSIM_INT_RX_ECC_ERR BIT(15) #define DSIM_INT_RX_CRC_ERR BIT(14) =20 +/* DSIM_SFRCTRL */ +#define DSIM_SFR_CTRL_STAND_BY BIT(4) +#define DSIM_SFR_CTRL_SHADOW_UPDATE BIT(1) +#define DSIM_SFR_CTRL_SHADOW_EN BIT(0) + /* DSIM_FIFOCTRL */ #define DSIM_RX_DATA_FULL BIT(25) #define DSIM_RX_DATA_EMPTY BIT(24) @@ -255,6 +260,7 @@ enum reg_idx { DSIM_PKTHDR_REG, /* Packet Header FIFO register */ DSIM_PAYLOAD_REG, /* Payload FIFO register */ DSIM_RXFIFO_REG, /* Read FIFO register */ + DSIM_SFRCTRL_REG, /* SFR standby and shadow control register */ DSIM_FIFOCTRL_REG, /* FIFO status and control register */ DSIM_PLLCTRL_REG, /* PLL control register */ DSIM_PHYCTRL_REG, @@ -1030,6 +1036,7 @@ static void samsung_dsim_set_display_mode(struct sams= ung_dsim *dsi) =20 static void samsung_dsim_set_display_enable(struct samsung_dsim *dsi, bool= enable) { + const struct samsung_dsim_driver_data *driver_data =3D dsi->driver_data; u32 reg; =20 reg =3D samsung_dsim_read(dsi, DSIM_MDRESOL_REG); @@ -1038,6 +1045,15 @@ static void samsung_dsim_set_display_enable(struct s= amsung_dsim *dsi, bool enabl else reg &=3D ~DSIM_MAIN_STAND_BY; samsung_dsim_write(dsi, DSIM_MDRESOL_REG, reg); + + if (driver_data->has_sfrctrl) { + reg =3D samsung_dsim_read(dsi, DSIM_SFRCTRL_REG); + if (enable) + reg |=3D DSIM_SFR_CTRL_STAND_BY; + else + reg &=3D ~DSIM_SFR_CTRL_STAND_BY; + samsung_dsim_write(dsi, DSIM_SFRCTRL_REG, reg); + } } =20 static int samsung_dsim_wait_for_hdr_fifo(struct samsung_dsim *dsi) diff --git a/include/drm/bridge/samsung-dsim.h b/include/drm/bridge/samsung= -dsim.h index 9764d6eb5beb98b5b9427c5c4775c37b24dd6e17..a50e4f521b9d9561f6a3b9fe3e1= 74c0e140849a2 100644 --- a/include/drm/bridge/samsung-dsim.h +++ b/include/drm/bridge/samsung-dsim.h @@ -56,6 +56,7 @@ struct samsung_dsim_driver_data { unsigned int has_freqband:1; unsigned int has_clklane_stop:1; unsigned int has_broken_fifoctrl_emptyhdr:1; + unsigned int has_sfrctrl:1; unsigned int num_clks; unsigned int min_freq; unsigned int max_freq; --=20 2.49.0 From nobody Wed Oct 8 14:20:36 2025 Received: from layka.disroot.org (layka.disroot.org [178.21.23.139]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B4B7C2F0E42; Thu, 26 Jun 2025 19:39:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=178.21.23.139 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750966791; cv=none; b=AzlFWWq2mXXx4njstasUONr46w2eopqFmxKjF7Y72ZVXySkGoG02Yf7nPRrQ1IIdzbdgx5+mRye1EPI/nl0hm95lhY3o/1V9QDZI+IPbRfFOwx1P2CJKlSxyj6qEqhOOP91v8L0wI7xaTYHfoy7Jh2I1ycMrBeW7X/qpYWaFrQc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750966791; c=relaxed/simple; bh=wlVGQBMaNz6zTceF2YNMK+fgvVG3wMWLRik/PjF4UlI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FidzCVsJ/C3cciGd5ohxVGjn9SvIEDd/XJxWK9h4u3R4LUF5Qf40M3Oaa5m5jQEusBNtX4mxzC0+lCYeh88e5CB2vg096ZsCZ92fEg4yg62uhbE1X0L4C6tJWTDI+B1HQLASHtXtmBlTbVNBAVFvUfFlcI2kvTv/EJGVFjaIUH0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org; spf=pass smtp.mailfrom=disroot.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b=kPRuSPDO; arc=none smtp.client-ip=178.21.23.139 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=disroot.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b="kPRuSPDO" Received: from mail01.disroot.lan (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 135F025B9F; Thu, 26 Jun 2025 21:39:48 +0200 (CEST) X-Virus-Scanned: SPAM Filter at disroot.org Received: from layka.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavis, port 10024) with ESMTP id 8OArNbdu2Lx8; Thu, 26 Jun 2025 21:39:47 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1750966786; bh=wlVGQBMaNz6zTceF2YNMK+fgvVG3wMWLRik/PjF4UlI=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=kPRuSPDOvanJK/wQwkPmgrtN8Lra72ICEqTBV6nRskUzlCuyq4RnlRrgbtfflyxZC Oddp7EpYCL+Tq8/xPMmOpfg5BCrgKFZsy0knSn/5lcNDww+l6spCLa/djbDIXKjevU i+RW95EPrzSKBhfabk4BkXoD+B0TB6I7FIVCadjzKtZr5qUuFI8mPbxIi6PnoBuNFq ZeSriHDj5aKhTesK0m1gUuuAfcgTR5Y5y3oe3FoT+Tev8tIexj9Ss11Zl+XZzUf72t erwS8HBDiRcX0gMURdJKBk98nlC+HUNa5z56ZKo59sGmUF2adh3VjRZ9hS/9nEqlRq fo018fw9n2xtQ== From: Kaustabh Chakraborty Date: Fri, 27 Jun 2025 01:08:52 +0530 Subject: [PATCH v2 03/13] drm/bridge: samsung-dsim: add flag to control header FIFO wait Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250627-exynos7870-dsim-v2-3-1433b67378d3@disroot.org> References: <20250627-exynos7870-dsim-v2-0-1433b67378d3@disroot.org> In-Reply-To: <20250627-exynos7870-dsim-v2-0-1433b67378d3@disroot.org> To: Inki Dae , Jagan Teki , Marek Szyprowski , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Alim Akhtar Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, Kaustabh Chakraborty X-Developer-Signature: v=1; a=ed25519-sha256; t=1750966738; l=3612; i=kauschluss@disroot.org; s=20250202; h=from:subject:message-id; bh=wlVGQBMaNz6zTceF2YNMK+fgvVG3wMWLRik/PjF4UlI=; b=dZNr8jWpFp0IUbelfuaBn8YmfCyKFG03gqkl7Cz9s+fKOS7knK7ApH+t6cQqu/FXq2nS5PTB0 ySzzMZynJugAcV6/yaH83i78keW2BvL3duI5hF5MWMQ5k0KDXK59utO X-Developer-Key: i=kauschluss@disroot.org; a=ed25519; pk=h2xeR+V2I1+GrfDPAhZa3M+NWA0Cnbdkkq1bH3ct1hE= Exynos7870's DSIM device doesn't require waiting for the header FIFO during a MIPI DSI transfer. Add a flag in the driver data in order to control said behavior. Signed-off-by: Kaustabh Chakraborty --- drivers/gpu/drm/bridge/samsung-dsim.c | 15 ++++++++++++--- include/drm/bridge/samsung-dsim.h | 1 + 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge= /samsung-dsim.c index 3c716334f1a21bf446ebe17f810d5258dd9a4c24..112d558579d8f987c695e1704a5= 772ebbadfd625 100644 --- a/drivers/gpu/drm/bridge/samsung-dsim.c +++ b/drivers/gpu/drm/bridge/samsung-dsim.c @@ -417,6 +417,7 @@ static const struct samsung_dsim_driver_data exynos3_ds= i_driver_data =3D { .has_clklane_stop =3D 1, .num_clks =3D 2, .max_freq =3D 1000, + .wait_for_hdr_fifo =3D 1, .wait_for_reset =3D 1, .num_bits_resol =3D 11, .pll_p_offset =3D 13, @@ -436,6 +437,7 @@ static const struct samsung_dsim_driver_data exynos4_ds= i_driver_data =3D { .has_clklane_stop =3D 1, .num_clks =3D 2, .max_freq =3D 1000, + .wait_for_hdr_fifo =3D 1, .wait_for_reset =3D 1, .num_bits_resol =3D 11, .pll_p_offset =3D 13, @@ -453,6 +455,7 @@ static const struct samsung_dsim_driver_data exynos5_ds= i_driver_data =3D { .plltmr_reg =3D 0x58, .num_clks =3D 2, .max_freq =3D 1000, + .wait_for_hdr_fifo =3D 1, .wait_for_reset =3D 1, .num_bits_resol =3D 11, .pll_p_offset =3D 13, @@ -470,6 +473,7 @@ static const struct samsung_dsim_driver_data exynos5433= _dsi_driver_data =3D { .has_clklane_stop =3D 1, .num_clks =3D 5, .max_freq =3D 1500, + .wait_for_hdr_fifo =3D 1, .wait_for_reset =3D 0, .num_bits_resol =3D 12, .pll_p_offset =3D 13, @@ -487,6 +491,7 @@ static const struct samsung_dsim_driver_data exynos5422= _dsi_driver_data =3D { .has_clklane_stop =3D 1, .num_clks =3D 2, .max_freq =3D 1500, + .wait_for_hdr_fifo =3D 1, .wait_for_reset =3D 1, .num_bits_resol =3D 12, .pll_p_offset =3D 13, @@ -504,6 +509,7 @@ static const struct samsung_dsim_driver_data imx8mm_dsi= _driver_data =3D { .has_clklane_stop =3D 1, .num_clks =3D 2, .max_freq =3D 2100, + .wait_for_hdr_fifo =3D 1, .wait_for_reset =3D 0, .num_bits_resol =3D 12, /* @@ -1110,6 +1116,7 @@ static void samsung_dsim_send_to_fifo(struct samsung_= dsim *dsi, { struct device *dev =3D dsi->dev; struct mipi_dsi_packet *pkt =3D &xfer->packet; + const struct samsung_dsim_driver_data *driver_data =3D dsi->driver_data; const u8 *payload =3D pkt->payload + xfer->tx_done; u16 length =3D pkt->payload_length - xfer->tx_done; bool first =3D !xfer->tx_done; @@ -1150,9 +1157,11 @@ static void samsung_dsim_send_to_fifo(struct samsung= _dsim *dsi, return; =20 reg =3D get_unaligned_le32(pkt->header); - if (samsung_dsim_wait_for_hdr_fifo(dsi)) { - dev_err(dev, "waiting for header FIFO timed out\n"); - return; + if (driver_data->wait_for_hdr_fifo) { + if (samsung_dsim_wait_for_hdr_fifo(dsi)) { + dev_err(dev, "waiting for header FIFO timed out\n"); + return; + } } =20 if (NEQV(xfer->flags & MIPI_DSI_MSG_USE_LPM, diff --git a/include/drm/bridge/samsung-dsim.h b/include/drm/bridge/samsung= -dsim.h index a50e4f521b9d9561f6a3b9fe3e174c0e140849a2..3641c57557f42fd90cd2e8c0282= f69dbe36ba2de 100644 --- a/include/drm/bridge/samsung-dsim.h +++ b/include/drm/bridge/samsung-dsim.h @@ -60,6 +60,7 @@ struct samsung_dsim_driver_data { unsigned int num_clks; unsigned int min_freq; unsigned int max_freq; + unsigned int wait_for_hdr_fifo; unsigned int wait_for_reset; unsigned int num_bits_resol; unsigned int pll_p_offset; --=20 2.49.0 From nobody Wed Oct 8 14:20:36 2025 Received: from layka.disroot.org (layka.disroot.org [178.21.23.139]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E98E92F0E43; Thu, 26 Jun 2025 19:40:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=178.21.23.139 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750966804; cv=none; b=f6IzEt+sfb914LCj8fevbbrV6NlgKzB1no1sXlM+CAhXsJBqn9cdJGIapwWV8vy5irlniIjlhh7sG/Q6M68cc2EbxsC90i7oHGkp5Czlpc0fe2xh7b8x+/reURAEOVSFep7ZXO/hAekbJnwvFkSMg1D6SDvc7XboAom7PFvdwMA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750966804; c=relaxed/simple; bh=GFz8GkKryTB6Xu0DxINoUES7zgptK83SPB4c1G1dUGw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZqnWJTKBsjRFR3P48tTtIzyN5767Kl2SKy+7wK20lgmgsELFf7TKUegX7ccZU/gdectmvXWUsTaZu1KIEMkE6mN56uKsGIRqtTO4HcMPDQlyEymei6IoKLcE55lVpVlhoRYf+EbZ37WEduBdFeLb7AAxcd1fZGukJNSlzMwN9o4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org; spf=pass smtp.mailfrom=disroot.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b=YkbX+B7N; arc=none smtp.client-ip=178.21.23.139 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=disroot.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b="YkbX+B7N" Received: from mail01.disroot.lan (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 79B8A25E97; Thu, 26 Jun 2025 21:40:01 +0200 (CEST) X-Virus-Scanned: SPAM Filter at disroot.org Received: from layka.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavis, port 10024) with ESMTP id lr6zwaKAxDRo; Thu, 26 Jun 2025 21:39:59 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1750966799; bh=GFz8GkKryTB6Xu0DxINoUES7zgptK83SPB4c1G1dUGw=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=YkbX+B7NqB9bqO/BI/VoQpccYZxSmU3ohY20QM0pAoHBEPXqx+5+OiycnrS7Oxjdl OBeLqWLl/UuaEDlHbrP/jdTJt1+CzewGov+iMpj0lVRePneAGFyBPAMjXjMGePcFJd ZxFBox5h0pItnhJHYUghSuvS0Arq2RMARzpxK3h8qOuwK0OtQaldHFGk+7XDKMfewA 5Ie9WcCvhNK6ulMR7Ue1U1FYpJiyD2SPtNquEY5AJ2IZwFQJ5/v6xnA9mHBQBb5LGU bb2yKj+XCCAlK5fvuRwi8yiELGj7Iy+QtnHeuW9TgFgAUJQ0lsqxxA/ga88PLO+YxV ne63s68I+/TnA== From: Kaustabh Chakraborty Date: Fri, 27 Jun 2025 01:08:53 +0530 Subject: [PATCH v2 04/13] drm/bridge: samsung-dsim: allow configuring bits and offsets of CLKCTRL register Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250627-exynos7870-dsim-v2-4-1433b67378d3@disroot.org> References: <20250627-exynos7870-dsim-v2-0-1433b67378d3@disroot.org> In-Reply-To: <20250627-exynos7870-dsim-v2-0-1433b67378d3@disroot.org> To: Inki Dae , Jagan Teki , Marek Szyprowski , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Alim Akhtar Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, Kaustabh Chakraborty X-Developer-Signature: v=1; a=ed25519-sha256; t=1750966738; l=7642; i=kauschluss@disroot.org; s=20250202; h=from:subject:message-id; bh=GFz8GkKryTB6Xu0DxINoUES7zgptK83SPB4c1G1dUGw=; b=xvcZUCyqGrAXkr0gJlGqc14YPhPdr0VXs+NHSl6rX6F2tCNM7oVSTtarvc9ZU0pApwZDdestu P6vQG6irOGLDpex4/saNyBDMQXvBdAOaiMP5jqjXXwzg8lS/onNiU10 X-Developer-Key: i=kauschluss@disroot.org; a=ed25519; pk=h2xeR+V2I1+GrfDPAhZa3M+NWA0Cnbdkkq1bH3ct1hE= DSIM_CLKCTRL bit and offset values hardcoded in the driver: name | bit/offset value --------------------------+----------------- DSIM_LANE_ESC_CLK_EN_CLK | 19 DSIM_LANE_ESC_CLK_EN_DATA | 20 DSIM_BYTE_CLKEN | 24 DSIM_ESC_CLKEN | 28 DSIM_TX_REQUEST_HSCLK | 31 DSIM_CLKCTRL bit and offset values in Exynos7870 DSIM as per downstream kernel sources: name | bit/offset value --------------------------+----------------- DSIM_LANE_ESC_CLK_EN_CLK | 8 DSIM_LANE_ESC_CLK_EN_DATA | 9 DSIM_BYTE_CLKEN | 17 DSIM_ESC_CLKEN | 16 DSIM_TX_REQUEST_HSCLK | 20 In order to support both, move all values to the driver data struct and define it for every driver compatible. Reference the values from there instead, in functions wherever required. Signed-off-by: Kaustabh Chakraborty --- drivers/gpu/drm/bridge/samsung-dsim.c | 76 +++++++++++++++++++++++++------= ---- include/drm/bridge/samsung-dsim.h | 5 +++ 2 files changed, 59 insertions(+), 22 deletions(-) diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge= /samsung-dsim.c index 112d558579d8f987c695e1704a5772ebbadfd625..c85c7c3af74ebce9732f9531ba5= c31d992a19a23 100644 --- a/drivers/gpu/drm/bridge/samsung-dsim.c +++ b/drivers/gpu/drm/bridge/samsung-dsim.c @@ -45,17 +45,13 @@ #define DSIM_BTA_TIMEOUT(x) ((x) << 16) =20 /* DSIM_CLKCTRL */ -#define DSIM_ESC_PRESCALER(x) (((x) & 0xffff) << 0) -#define DSIM_ESC_PRESCALER_MASK (0xffff << 0) -#define DSIM_LANE_ESC_CLK_EN_CLK BIT(19) -#define DSIM_LANE_ESC_CLK_EN_DATA(x) (((x) & 0xf) << 20) -#define DSIM_LANE_ESC_CLK_EN_DATA_MASK (0xf << 20) -#define DSIM_BYTE_CLKEN BIT(24) -#define DSIM_BYTE_CLK_SRC(x) (((x) & 0x3) << 25) -#define DSIM_BYTE_CLK_SRC_MASK (0x3 << 25) -#define DSIM_PLL_BYPASS BIT(27) -#define DSIM_ESC_CLKEN BIT(28) -#define DSIM_TX_REQUEST_HSCLK BIT(31) +#define DSIM_ESC_PRESCALER(x) (((x) & 0xffff) << 0) +#define DSIM_ESC_PRESCALER_MASK (0xffff << 0) +#define DSIM_LANE_ESC_CLK_EN_DATA(x, offset) (((x) & 0xf) << offset) +#define DSIM_LANE_ESC_CLK_EN_DATA_MASK(offset) (0xf << offset) +#define DSIM_BYTE_CLK_SRC(x) (((x) & 0x3) << 25) +#define DSIM_BYTE_CLK_SRC_MASK (0x3 << 25) +#define DSIM_PLL_BYPASS BIT(27) =20 /* DSIM_CONFIG */ #define DSIM_LANE_EN_CLK BIT(0) @@ -420,6 +416,11 @@ static const struct samsung_dsim_driver_data exynos3_d= si_driver_data =3D { .wait_for_hdr_fifo =3D 1, .wait_for_reset =3D 1, .num_bits_resol =3D 11, + .esc_clken_bit =3D 28, + .byte_clken_bit =3D 24, + .tx_req_hsclk_bit =3D 31, + .lane_esc_clk_bit =3D 19, + .lane_esc_data_offset =3D 20, .pll_p_offset =3D 13, .reg_values =3D reg_values, .pll_fin_min =3D 6, @@ -440,6 +441,11 @@ static const struct samsung_dsim_driver_data exynos4_d= si_driver_data =3D { .wait_for_hdr_fifo =3D 1, .wait_for_reset =3D 1, .num_bits_resol =3D 11, + .esc_clken_bit =3D 28, + .byte_clken_bit =3D 24, + .tx_req_hsclk_bit =3D 31, + .lane_esc_clk_bit =3D 19, + .lane_esc_data_offset =3D 20, .pll_p_offset =3D 13, .reg_values =3D reg_values, .pll_fin_min =3D 6, @@ -458,6 +464,11 @@ static const struct samsung_dsim_driver_data exynos5_d= si_driver_data =3D { .wait_for_hdr_fifo =3D 1, .wait_for_reset =3D 1, .num_bits_resol =3D 11, + .esc_clken_bit =3D 28, + .byte_clken_bit =3D 24, + .tx_req_hsclk_bit =3D 31, + .lane_esc_clk_bit =3D 19, + .lane_esc_data_offset =3D 20, .pll_p_offset =3D 13, .reg_values =3D reg_values, .pll_fin_min =3D 6, @@ -476,6 +487,11 @@ static const struct samsung_dsim_driver_data exynos543= 3_dsi_driver_data =3D { .wait_for_hdr_fifo =3D 1, .wait_for_reset =3D 0, .num_bits_resol =3D 12, + .esc_clken_bit =3D 28, + .byte_clken_bit =3D 24, + .tx_req_hsclk_bit =3D 31, + .lane_esc_clk_bit =3D 19, + .lane_esc_data_offset =3D 20, .pll_p_offset =3D 13, .reg_values =3D exynos5433_reg_values, .pll_fin_min =3D 6, @@ -494,6 +510,11 @@ static const struct samsung_dsim_driver_data exynos542= 2_dsi_driver_data =3D { .wait_for_hdr_fifo =3D 1, .wait_for_reset =3D 1, .num_bits_resol =3D 12, + .esc_clken_bit =3D 28, + .byte_clken_bit =3D 24, + .tx_req_hsclk_bit =3D 31, + .lane_esc_clk_bit =3D 19, + .lane_esc_data_offset =3D 20, .pll_p_offset =3D 13, .reg_values =3D exynos5422_reg_values, .pll_fin_min =3D 6, @@ -512,6 +533,11 @@ static const struct samsung_dsim_driver_data imx8mm_ds= i_driver_data =3D { .wait_for_hdr_fifo =3D 1, .wait_for_reset =3D 0, .num_bits_resol =3D 12, + .esc_clken_bit =3D 28, + .byte_clken_bit =3D 24, + .tx_req_hsclk_bit =3D 31, + .lane_esc_clk_bit =3D 19, + .lane_esc_data_offset =3D 20, /* * Unlike Exynos, PLL_P(PMS_P) offset 14 is used in i.MX8M Mini/Nano/Plus * downstream driver - drivers/gpu/drm/bridge/sec-dsim.c @@ -715,6 +741,7 @@ static unsigned long samsung_dsim_set_pll(struct samsun= g_dsim *dsi, =20 static int samsung_dsim_enable_clock(struct samsung_dsim *dsi) { + const struct samsung_dsim_driver_data *driver_data =3D dsi->driver_data; unsigned long hs_clk, byte_clk, esc_clk, pix_clk; unsigned long esc_div; u32 reg; @@ -748,15 +775,17 @@ static int samsung_dsim_enable_clock(struct samsung_d= sim *dsi) hs_clk, byte_clk, esc_clk); =20 reg =3D samsung_dsim_read(dsi, DSIM_CLKCTRL_REG); - reg &=3D ~(DSIM_ESC_PRESCALER_MASK | DSIM_LANE_ESC_CLK_EN_CLK - | DSIM_LANE_ESC_CLK_EN_DATA_MASK | DSIM_PLL_BYPASS - | DSIM_BYTE_CLK_SRC_MASK); - reg |=3D DSIM_ESC_CLKEN | DSIM_BYTE_CLKEN - | DSIM_ESC_PRESCALER(esc_div) - | DSIM_LANE_ESC_CLK_EN_CLK - | DSIM_LANE_ESC_CLK_EN_DATA(BIT(dsi->lanes) - 1) - | DSIM_BYTE_CLK_SRC(0) - | DSIM_TX_REQUEST_HSCLK; + reg &=3D ~(DSIM_ESC_PRESCALER_MASK | BIT(driver_data->lane_esc_clk_bit) + | DSIM_LANE_ESC_CLK_EN_DATA_MASK(driver_data->lane_esc_data_offset) + | DSIM_PLL_BYPASS + | DSIM_BYTE_CLK_SRC_MASK); + reg |=3D BIT(driver_data->esc_clken_bit) | BIT(driver_data->byte_clken_bi= t) + | DSIM_ESC_PRESCALER(esc_div) + | BIT(driver_data->lane_esc_clk_bit) + | DSIM_LANE_ESC_CLK_EN_DATA(BIT(dsi->lanes) - 1, + driver_data->lane_esc_data_offset) + | DSIM_BYTE_CLK_SRC(0) + | BIT(driver_data->tx_req_hsclk_bit); samsung_dsim_write(dsi, DSIM_CLKCTRL_REG, reg); =20 return 0; @@ -860,11 +889,14 @@ static void samsung_dsim_set_phy_ctrl(struct samsung_= dsim *dsi) =20 static void samsung_dsim_disable_clock(struct samsung_dsim *dsi) { + const struct samsung_dsim_driver_data *driver_data =3D dsi->driver_data; u32 reg; =20 reg =3D samsung_dsim_read(dsi, DSIM_CLKCTRL_REG); - reg &=3D ~(DSIM_LANE_ESC_CLK_EN_CLK | DSIM_LANE_ESC_CLK_EN_DATA_MASK - | DSIM_ESC_CLKEN | DSIM_BYTE_CLKEN); + reg &=3D ~(BIT(driver_data->lane_esc_clk_bit) + | DSIM_LANE_ESC_CLK_EN_DATA_MASK(driver_data->lane_esc_data_offset) + | BIT(driver_data->esc_clken_bit) + | BIT(driver_data->byte_clken_bit)); samsung_dsim_write(dsi, DSIM_CLKCTRL_REG, reg); =20 reg =3D samsung_dsim_read(dsi, DSIM_PLLCTRL_REG); diff --git a/include/drm/bridge/samsung-dsim.h b/include/drm/bridge/samsung= -dsim.h index 3641c57557f42fd90cd2e8c0282f69dbe36ba2de..8938eccf78730019e0404101c85= 5dc2d7d225668 100644 --- a/include/drm/bridge/samsung-dsim.h +++ b/include/drm/bridge/samsung-dsim.h @@ -63,6 +63,11 @@ struct samsung_dsim_driver_data { unsigned int wait_for_hdr_fifo; unsigned int wait_for_reset; unsigned int num_bits_resol; + unsigned int esc_clken_bit; + unsigned int byte_clken_bit; + unsigned int tx_req_hsclk_bit; + unsigned int lane_esc_clk_bit; + unsigned int lane_esc_data_offset; unsigned int pll_p_offset; const unsigned int *reg_values; unsigned int pll_fin_min; --=20 2.49.0 From nobody Wed Oct 8 14:20:36 2025 Received: from layka.disroot.org (layka.disroot.org [178.21.23.139]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 921FE2F4305; Thu, 26 Jun 2025 19:40:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=178.21.23.139 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750966816; cv=none; b=uFwX55JmVQ32LEkc1/7RNLbViq6kjeFcPqPkODoKziYtM/WZ1WU0BhT1c8jw7JlYiBaGK3hoMLhpHui4Vl9146uzGKD8qbRter3il8EhFnLWWA6q+DpW4A1dYn/7PD58/PHdxZNXecRu/J2kFRyb/qCr2se+GdypqlcwTkPLbVE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750966816; c=relaxed/simple; bh=vy1snYTGnHH6IixePbf9/yaHh6iBLoAuBkPV9RrFW/k=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NcXhJVD5Up3++3k0+TysIUNKa9txBoYskMbC7Z3nKtePLVa5SR13S1fAPoKwbMEtTSIkPDQF8QXe9bkX5w7hlf1ORaOdfXht2btxayoR7NK7lUaAUrEIKmwTIdK/WdVhyFGLOtKgDTlnkLSxutpLrGNfwZisgXmAGvOnmUPJNQw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org; spf=pass smtp.mailfrom=disroot.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b=YSKf609N; arc=none smtp.client-ip=178.21.23.139 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=disroot.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b="YSKf609N" Received: from mail01.disroot.lan (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 1F3C925EE9; Thu, 26 Jun 2025 21:40:13 +0200 (CEST) X-Virus-Scanned: SPAM Filter at disroot.org Received: from layka.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavis, port 10024) with ESMTP id b5jeVJosM-64; Thu, 26 Jun 2025 21:40:11 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1750966811; bh=vy1snYTGnHH6IixePbf9/yaHh6iBLoAuBkPV9RrFW/k=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=YSKf609NiaX48IVcBYOBQNE8WwkNePe2kLgpVQUDu2I7tEGTNMP4AhqM58tu39lRt LH68Fy/qGuZYqwWOpsXiOJiRiZ2adCUH78y9kyS5R7ZzN8C89d5zezKXktHaqq9TuH uBWWIpwRdHg+c1OJnqHXU/BnFvTg650l5zMIg3yTo3Clp+P4vgjes4/rGaNHnHbze4 3thpZ+iWr5ZG8k/GpNMEYX+43EItekcncgz6jpTnPtkQGCEzIRdLfvPDFDjEIg9aEo 57ICVbC5YPp/DnIrkxw36v5QayYaBVPnt3/nn77yYUKoR73T8IgUO/L3VUEoawDKhb YNZJtx0jNd+Mg== From: Kaustabh Chakraborty Date: Fri, 27 Jun 2025 01:08:54 +0530 Subject: [PATCH v2 05/13] drm/bridge: samsung-dsim: allow configuring the MAIN_VSA offset Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250627-exynos7870-dsim-v2-5-1433b67378d3@disroot.org> References: <20250627-exynos7870-dsim-v2-0-1433b67378d3@disroot.org> In-Reply-To: <20250627-exynos7870-dsim-v2-0-1433b67378d3@disroot.org> To: Inki Dae , Jagan Teki , Marek Szyprowski , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Alim Akhtar Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, Kaustabh Chakraborty X-Developer-Signature: v=1; a=ed25519-sha256; t=1750966738; l=4240; i=kauschluss@disroot.org; s=20250202; h=from:subject:message-id; bh=vy1snYTGnHH6IixePbf9/yaHh6iBLoAuBkPV9RrFW/k=; b=JeIuFbKJEf3KFGOldLFmoVE8vR5E87MXGabNg5fDbkiQEJ2WeiHkB/pUMLWPb+lz35whLGQyU 0rFb9RT2j0KDsFuOZM3VF7mfqAAdrYn3+MfsjIQwlOmLMM9wibaEvRn X-Developer-Key: i=kauschluss@disroot.org; a=ed25519; pk=h2xeR+V2I1+GrfDPAhZa3M+NWA0Cnbdkkq1bH3ct1hE= The MAIN_VSA offset of DSIM_MSYNC is hardcoded to a 22-bit offset, but Exynos7870's DSIM has it in a 16-bit offset as per the downstream kernel sources. In order to support both, move this offset value to the driver data struct and define it for every driver compatible. Reference the value from there instead, in functions wherever required. Signed-off-by: Kaustabh Chakraborty --- drivers/gpu/drm/bridge/samsung-dsim.c | 13 ++++++++++--- include/drm/bridge/samsung-dsim.h | 1 + 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge= /samsung-dsim.c index c85c7c3af74ebce9732f9531ba5c31d992a19a23..c61524b6daf936b904743af4487= cfb172dd687f0 100644 --- a/drivers/gpu/drm/bridge/samsung-dsim.c +++ b/drivers/gpu/drm/bridge/samsung-dsim.c @@ -124,9 +124,9 @@ #define DSIM_MAIN_HBP_MASK ((0xffff) << 0) =20 /* DSIM_MSYNC */ -#define DSIM_MAIN_VSA(x) ((x) << 22) +#define DSIM_MAIN_VSA(x, offset) ((x) << offset) #define DSIM_MAIN_HSA(x) ((x) << 0) -#define DSIM_MAIN_VSA_MASK ((0x3ff) << 22) +#define DSIM_MAIN_VSA_MASK(offset) ((0x3ff) << offset) #define DSIM_MAIN_HSA_MASK ((0xffff) << 0) =20 /* DSIM_SDRESOL */ @@ -422,6 +422,7 @@ static const struct samsung_dsim_driver_data exynos3_ds= i_driver_data =3D { .lane_esc_clk_bit =3D 19, .lane_esc_data_offset =3D 20, .pll_p_offset =3D 13, + .main_vsa_offset =3D 22, .reg_values =3D reg_values, .pll_fin_min =3D 6, .pll_fin_max =3D 12, @@ -447,6 +448,7 @@ static const struct samsung_dsim_driver_data exynos4_ds= i_driver_data =3D { .lane_esc_clk_bit =3D 19, .lane_esc_data_offset =3D 20, .pll_p_offset =3D 13, + .main_vsa_offset =3D 22, .reg_values =3D reg_values, .pll_fin_min =3D 6, .pll_fin_max =3D 12, @@ -470,6 +472,7 @@ static const struct samsung_dsim_driver_data exynos5_ds= i_driver_data =3D { .lane_esc_clk_bit =3D 19, .lane_esc_data_offset =3D 20, .pll_p_offset =3D 13, + .main_vsa_offset =3D 22, .reg_values =3D reg_values, .pll_fin_min =3D 6, .pll_fin_max =3D 12, @@ -493,6 +496,7 @@ static const struct samsung_dsim_driver_data exynos5433= _dsi_driver_data =3D { .lane_esc_clk_bit =3D 19, .lane_esc_data_offset =3D 20, .pll_p_offset =3D 13, + .main_vsa_offset =3D 22, .reg_values =3D exynos5433_reg_values, .pll_fin_min =3D 6, .pll_fin_max =3D 12, @@ -516,6 +520,7 @@ static const struct samsung_dsim_driver_data exynos5422= _dsi_driver_data =3D { .lane_esc_clk_bit =3D 19, .lane_esc_data_offset =3D 20, .pll_p_offset =3D 13, + .main_vsa_offset =3D 22, .reg_values =3D exynos5422_reg_values, .pll_fin_min =3D 6, .pll_fin_max =3D 12, @@ -543,6 +548,7 @@ static const struct samsung_dsim_driver_data imx8mm_dsi= _driver_data =3D { * downstream driver - drivers/gpu/drm/bridge/sec-dsim.c */ .pll_p_offset =3D 14, + .main_vsa_offset =3D 22, .reg_values =3D imx8mm_dsim_reg_values, .pll_fin_min =3D 2, .pll_fin_max =3D 30, @@ -1034,6 +1040,7 @@ static void samsung_dsim_set_display_mode(struct sams= ung_dsim *dsi) { struct drm_display_mode *m =3D &dsi->mode; unsigned int num_bits_resol =3D dsi->driver_data->num_bits_resol; + unsigned int main_vsa_offset =3D dsi->driver_data->main_vsa_offset; u32 reg; =20 if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO) { @@ -1060,7 +1067,7 @@ static void samsung_dsim_set_display_mode(struct sams= ung_dsim *dsi) reg =3D DSIM_MAIN_HFP(hfp) | DSIM_MAIN_HBP(hbp); samsung_dsim_write(dsi, DSIM_MHPORCH_REG, reg); =20 - reg =3D DSIM_MAIN_VSA(m->vsync_end - m->vsync_start) + reg =3D DSIM_MAIN_VSA(m->vsync_end - m->vsync_start, main_vsa_offset) | DSIM_MAIN_HSA(hsa); samsung_dsim_write(dsi, DSIM_MSYNC_REG, reg); } diff --git a/include/drm/bridge/samsung-dsim.h b/include/drm/bridge/samsung= -dsim.h index 8938eccf78730019e0404101c855dc2d7d225668..a5f13f224b0817fe3135edd7727= 6c4e715219cda 100644 --- a/include/drm/bridge/samsung-dsim.h +++ b/include/drm/bridge/samsung-dsim.h @@ -69,6 +69,7 @@ struct samsung_dsim_driver_data { unsigned int lane_esc_clk_bit; unsigned int lane_esc_data_offset; unsigned int pll_p_offset; + unsigned int main_vsa_offset; const unsigned int *reg_values; unsigned int pll_fin_min; unsigned int pll_fin_max; --=20 2.49.0 From nobody Wed Oct 8 14:20:36 2025 Received: from layka.disroot.org (layka.disroot.org [178.21.23.139]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 04D012F4305; Thu, 26 Jun 2025 19:40:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=178.21.23.139 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750966829; cv=none; b=PJUB9L5invuaDNs1lzeFrvP/JOvRcvekhKULmCPqZamBCnzV46RQJ/rp4W51eSvw+F4mJn59pJvEY7m8WD0IDCaCJTXb/XSw0Vr/lvKLR41FE0oOBYzotUQk7T0fXeXmExCDpKl37h0FT0M35QDpbFEfQ2SCirh2lqO06EVlxaQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750966829; c=relaxed/simple; bh=t7fxqve/o3YKyaqfpTmXJILhPTxiSVZnhtUpJPbKvRo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=gMdz8Flp3lR/cPo36USzT7UWR1rAGFGl0InVZAcKse0+wNAXRYdGrfPAbQLA0j/sWiNuFDPSTbnpxt9E64grBK9jdBJple45UK7T+qb1FNXs9H5D2hR9hcK7shoYOvkbYgfLIMb+mhK8iJtXEAKxFvrxZdvAW0IqPv5mpmMaQ4M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org; spf=pass smtp.mailfrom=disroot.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b=mmVrGFls; arc=none smtp.client-ip=178.21.23.139 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=disroot.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b="mmVrGFls" Received: from mail01.disroot.lan (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 9A11525C0F; Thu, 26 Jun 2025 21:40:26 +0200 (CEST) X-Virus-Scanned: SPAM Filter at disroot.org Received: from layka.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavis, port 10024) with ESMTP id p1a6vYULtFzR; Thu, 26 Jun 2025 21:40:25 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1750966825; bh=t7fxqve/o3YKyaqfpTmXJILhPTxiSVZnhtUpJPbKvRo=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=mmVrGFlsc0Ra9JaJzZVyuh0i11SiByW3G0PWYtKTPqCC688y4ZHNSZr/6ksPwyK99 QCekE1Pc/JvfhyO8JwBHK037wYWOISAlbyfT0q7SIpq8T+dJFKA67o1/wHdGHHmTtv nzWy8WLArZ8fYFAm1lNDsdOdAyRqjU552qoWgypRwsS8jGidYi2CKA8Xbi3eUTX62Y 29BwnKeklQoonrRGbPy/F6X7leG0365RwU+yDmzSKX6pL03f8JdqQWtELW9+gtbqf5 Tv8+VLl2tNRp1GiQ23DJ/l8roMPWpX5n6IaplSjzJtVMVMKibk/q6bdv4YckJ1gf2h Cn8Uuzh+YtUog== From: Kaustabh Chakraborty Date: Fri, 27 Jun 2025 01:08:55 +0530 Subject: [PATCH v2 06/13] drm/bridge: samsung-dsim: allow configuring the VIDEO_MODE bit Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250627-exynos7870-dsim-v2-6-1433b67378d3@disroot.org> References: <20250627-exynos7870-dsim-v2-0-1433b67378d3@disroot.org> In-Reply-To: <20250627-exynos7870-dsim-v2-0-1433b67378d3@disroot.org> To: Inki Dae , Jagan Teki , Marek Szyprowski , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Alim Akhtar Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, Kaustabh Chakraborty X-Developer-Signature: v=1; a=ed25519-sha256; t=1750966738; l=3602; i=kauschluss@disroot.org; s=20250202; h=from:subject:message-id; bh=t7fxqve/o3YKyaqfpTmXJILhPTxiSVZnhtUpJPbKvRo=; b=XltL8QkdEjIx9KFxO5hmh0IhlylpnUheEjCnkcz5UAFmU93o3ppkzXbUi9/PlBT7D+tu8W/1X pVZ5H+zYerHCqjx8hcn55VnYQod5MuoZ+J33KraTco6evZkp368CQ/n X-Developer-Key: i=kauschluss@disroot.org; a=ed25519; pk=h2xeR+V2I1+GrfDPAhZa3M+NWA0Cnbdkkq1bH3ct1hE= The VIDEO_MODE bit of DSIM_CONFIG is hardcoded to BIT(25), but Exynos7870's DSIM has it in BIT(18) as per downstream kernel sources. In order to support both, move this bit value to the driver data struct and define it for every driver compatible. Reference the value from there instead, in functions wherever required. Signed-off-by: Kaustabh Chakraborty --- drivers/gpu/drm/bridge/samsung-dsim.c | 9 +++++++-- include/drm/bridge/samsung-dsim.h | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge= /samsung-dsim.c index c61524b6daf936b904743af4487cfb172dd687f0..0ebf0037d181ff6a4c54df10485= 93c97cc89f2eb 100644 --- a/drivers/gpu/drm/bridge/samsung-dsim.c +++ b/drivers/gpu/drm/bridge/samsung-dsim.c @@ -86,7 +86,6 @@ */ #define DSIM_HSE_DISABLE_MODE BIT(23) #define DSIM_AUTO_MODE BIT(24) -#define DSIM_VIDEO_MODE BIT(25) #define DSIM_BURST_MODE BIT(26) #define DSIM_SYNC_INFORM BIT(27) #define DSIM_EOT_DISABLE BIT(28) @@ -416,6 +415,7 @@ static const struct samsung_dsim_driver_data exynos3_ds= i_driver_data =3D { .wait_for_hdr_fifo =3D 1, .wait_for_reset =3D 1, .num_bits_resol =3D 11, + .video_mode_bit =3D 25, .esc_clken_bit =3D 28, .byte_clken_bit =3D 24, .tx_req_hsclk_bit =3D 31, @@ -442,6 +442,7 @@ static const struct samsung_dsim_driver_data exynos4_ds= i_driver_data =3D { .wait_for_hdr_fifo =3D 1, .wait_for_reset =3D 1, .num_bits_resol =3D 11, + .video_mode_bit =3D 25, .esc_clken_bit =3D 28, .byte_clken_bit =3D 24, .tx_req_hsclk_bit =3D 31, @@ -466,6 +467,7 @@ static const struct samsung_dsim_driver_data exynos5_ds= i_driver_data =3D { .wait_for_hdr_fifo =3D 1, .wait_for_reset =3D 1, .num_bits_resol =3D 11, + .video_mode_bit =3D 25, .esc_clken_bit =3D 28, .byte_clken_bit =3D 24, .tx_req_hsclk_bit =3D 31, @@ -490,6 +492,7 @@ static const struct samsung_dsim_driver_data exynos5433= _dsi_driver_data =3D { .wait_for_hdr_fifo =3D 1, .wait_for_reset =3D 0, .num_bits_resol =3D 12, + .video_mode_bit =3D 25, .esc_clken_bit =3D 28, .byte_clken_bit =3D 24, .tx_req_hsclk_bit =3D 31, @@ -514,6 +517,7 @@ static const struct samsung_dsim_driver_data exynos5422= _dsi_driver_data =3D { .wait_for_hdr_fifo =3D 1, .wait_for_reset =3D 1, .num_bits_resol =3D 12, + .video_mode_bit =3D 25, .esc_clken_bit =3D 28, .byte_clken_bit =3D 24, .tx_req_hsclk_bit =3D 31, @@ -538,6 +542,7 @@ static const struct samsung_dsim_driver_data imx8mm_dsi= _driver_data =3D { .wait_for_hdr_fifo =3D 1, .wait_for_reset =3D 0, .num_bits_resol =3D 12, + .video_mode_bit =3D 25, .esc_clken_bit =3D 28, .byte_clken_bit =3D 24, .tx_req_hsclk_bit =3D 31, @@ -946,7 +951,7 @@ static int samsung_dsim_init_link(struct samsung_dsim *= dsi) * mode, otherwise it will support command mode. */ if (dsi->mode_flags & MIPI_DSI_MODE_VIDEO) { - reg |=3D DSIM_VIDEO_MODE; + reg |=3D BIT(driver_data->video_mode_bit); =20 /* * The user manual describes that following bits are ignored in diff --git a/include/drm/bridge/samsung-dsim.h b/include/drm/bridge/samsung= -dsim.h index a5f13f224b0817fe3135edd77276c4e715219cda..f364fd2703c3644e822df30408d= 82cc3d6206b05 100644 --- a/include/drm/bridge/samsung-dsim.h +++ b/include/drm/bridge/samsung-dsim.h @@ -63,6 +63,7 @@ struct samsung_dsim_driver_data { unsigned int wait_for_hdr_fifo; unsigned int wait_for_reset; unsigned int num_bits_resol; + unsigned int video_mode_bit; unsigned int esc_clken_bit; unsigned int byte_clken_bit; unsigned int tx_req_hsclk_bit; --=20 2.49.0 From nobody Wed Oct 8 14:20:36 2025 Received: from layka.disroot.org (layka.disroot.org [178.21.23.139]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8BD482F4A1D; Thu, 26 Jun 2025 19:40:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=178.21.23.139 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750966847; cv=none; b=J+bOD7CDILREDqbLD6+8zqPdO3jKDUVVDUirbYq7vjGI6IadM8VcqFYc+CBfKXkCrzEDAS1sPPRFzglbypEPSLO5DIN07ph4RCY7XYj835WELA1JaeF3oIzKxdaJYEKm5RhJOpebhCQ2DnQALAk+ggqRd1pskxgsNGob7+5qccE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750966847; c=relaxed/simple; bh=SZdpbmuTnNSaDkrbEB80BbAgBeO4jzpQtyMa80/qRwM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GnQ4zFkTjG9kfm5BNK81WPlD6yggRU4Sn2Cdnj2iimgW0J2wNIjiAItyIiFb75Mm0ENNglZ35gkQoarI5zmV9CNLIHyKXX1CkM1CfVi0xNwmqU2rjJJbwiOqeugLX8BCOzimR/2Yy/hvJ2EhGWqpa3gLPOM/YUJ0kA3fyRLCPak= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org; spf=pass smtp.mailfrom=disroot.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b=Ij3dw30m; arc=none smtp.client-ip=178.21.23.139 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=disroot.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b="Ij3dw30m" Received: from mail01.disroot.lan (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 1C6AE261C7; Thu, 26 Jun 2025 21:40:43 +0200 (CEST) X-Virus-Scanned: SPAM Filter at disroot.org Received: from layka.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavis, port 10024) with ESMTP id FCl5Bdgl6G49; Thu, 26 Jun 2025 21:40:41 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1750966838; bh=SZdpbmuTnNSaDkrbEB80BbAgBeO4jzpQtyMa80/qRwM=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=Ij3dw30m7+jFFonLueRm454wyMM2qjAoeB4Y9UnoNHzggg9u2W8nUDeUwWIWepz2M LI7HLp7ipgj6E2NBZSNJReedgD+gqJVjTnz4s5uTq8T21N1Zcalw1KQBO4SA7ODdKB aX7cbEsEMbIOZnpzoJIFOkWdCGN53+GEzlod1KmaV1NP0PA+RpQKTHZvZKjQqOto/9 W47A8eTfIfoS3mtU3NPbQSbgOENnHJ6YCS/5T0GFM34o0rcMF1O/tCwYl7V0LMwELu XYAZG4mLv80Bn/hHNqQxnAl2p1jVkj9raWtNFP2VmEJBPyvn2Fmlye85um6/5xfeEA YDOH9NjXHt5fg== From: Kaustabh Chakraborty Date: Fri, 27 Jun 2025 01:08:56 +0530 Subject: [PATCH v2 07/13] drm/bridge: samsung-dsim: allow configuring PLL_M and PLL_S offsets Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250627-exynos7870-dsim-v2-7-1433b67378d3@disroot.org> References: <20250627-exynos7870-dsim-v2-0-1433b67378d3@disroot.org> In-Reply-To: <20250627-exynos7870-dsim-v2-0-1433b67378d3@disroot.org> To: Inki Dae , Jagan Teki , Marek Szyprowski , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Alim Akhtar Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, Kaustabh Chakraborty X-Developer-Signature: v=1; a=ed25519-sha256; t=1750966738; l=4314; i=kauschluss@disroot.org; s=20250202; h=from:subject:message-id; bh=SZdpbmuTnNSaDkrbEB80BbAgBeO4jzpQtyMa80/qRwM=; b=zckw0S5hIyzMT8o6FAKQftzk+8ACK0xyI1pkad/UmINSc3FPQXC7zUjA1B7+gbWmHp02boVqL tUMHAtp5JGbByr7WdnwzbcsrzmlDnGi2oK7AOBWBPYdFylt0QNpT/G/ X-Developer-Key: i=kauschluss@disroot.org; a=ed25519; pk=h2xeR+V2I1+GrfDPAhZa3M+NWA0Cnbdkkq1bH3ct1hE= Currently, PLL_P offset of DSIM_PLLCTRL is configurable in the driver data, while PLL_M and PLL_S offsets are hardcoded as 4-bit and 1-bit offsets respectively, but Exynos7870's DSIM have them at 3-bit and 0-bit offsets as per downstream kernel sources. In order to support both, move both offset values to the driver data struct and define it for every driver compatible. Reference the values from there instead, in functions wherever required. Signed-off-by: Kaustabh Chakraborty --- drivers/gpu/drm/bridge/samsung-dsim.c | 21 ++++++++++++++++----- include/drm/bridge/samsung-dsim.h | 2 ++ 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge= /samsung-dsim.c index 0ebf0037d181ff6a4c54df1048593c97cc89f2eb..5993f8ef5d3641f69e557a79819= ce0ba54762efb 100644 --- a/drivers/gpu/drm/bridge/samsung-dsim.c +++ b/drivers/gpu/drm/bridge/samsung-dsim.c @@ -190,9 +190,7 @@ #define DSIM_PLL_DPDNSWAP_DAT (1 << 24) #define DSIM_FREQ_BAND(x) ((x) << 24) #define DSIM_PLL_EN BIT(23) -#define DSIM_PLL_P(x, offset) ((x) << (offset)) -#define DSIM_PLL_M(x) ((x) << 4) -#define DSIM_PLL_S(x) ((x) << 1) +#define DSIM_PLL(x, offset) ((x) << (offset)) =20 /* DSIM_PHYCTRL */ #define DSIM_PHYCTRL_ULPS_EXIT(x) (((x) & 0x1ff) << 0) @@ -422,6 +420,8 @@ static const struct samsung_dsim_driver_data exynos3_ds= i_driver_data =3D { .lane_esc_clk_bit =3D 19, .lane_esc_data_offset =3D 20, .pll_p_offset =3D 13, + .pll_m_offset =3D 4, + .pll_s_offset =3D 1, .main_vsa_offset =3D 22, .reg_values =3D reg_values, .pll_fin_min =3D 6, @@ -449,6 +449,8 @@ static const struct samsung_dsim_driver_data exynos4_ds= i_driver_data =3D { .lane_esc_clk_bit =3D 19, .lane_esc_data_offset =3D 20, .pll_p_offset =3D 13, + .pll_m_offset =3D 4, + .pll_s_offset =3D 1, .main_vsa_offset =3D 22, .reg_values =3D reg_values, .pll_fin_min =3D 6, @@ -474,6 +476,8 @@ static const struct samsung_dsim_driver_data exynos5_ds= i_driver_data =3D { .lane_esc_clk_bit =3D 19, .lane_esc_data_offset =3D 20, .pll_p_offset =3D 13, + .pll_m_offset =3D 4, + .pll_s_offset =3D 1, .main_vsa_offset =3D 22, .reg_values =3D reg_values, .pll_fin_min =3D 6, @@ -499,6 +503,8 @@ static const struct samsung_dsim_driver_data exynos5433= _dsi_driver_data =3D { .lane_esc_clk_bit =3D 19, .lane_esc_data_offset =3D 20, .pll_p_offset =3D 13, + .pll_m_offset =3D 4, + .pll_s_offset =3D 1, .main_vsa_offset =3D 22, .reg_values =3D exynos5433_reg_values, .pll_fin_min =3D 6, @@ -524,6 +530,8 @@ static const struct samsung_dsim_driver_data exynos5422= _dsi_driver_data =3D { .lane_esc_clk_bit =3D 19, .lane_esc_data_offset =3D 20, .pll_p_offset =3D 13, + .pll_m_offset =3D 4, + .pll_s_offset =3D 1, .main_vsa_offset =3D 22, .reg_values =3D exynos5422_reg_values, .pll_fin_min =3D 6, @@ -553,6 +561,8 @@ static const struct samsung_dsim_driver_data imx8mm_dsi= _driver_data =3D { * downstream driver - drivers/gpu/drm/bridge/sec-dsim.c */ .pll_p_offset =3D 14, + .pll_m_offset =3D 4, + .pll_s_offset =3D 1, .main_vsa_offset =3D 22, .reg_values =3D imx8mm_dsim_reg_values, .pll_fin_min =3D 2, @@ -708,8 +718,9 @@ static unsigned long samsung_dsim_set_pll(struct samsun= g_dsim *dsi, writel(driver_data->reg_values[PLL_TIMER], dsi->reg_base + driver_data->plltmr_reg); =20 - reg =3D DSIM_PLL_EN | DSIM_PLL_P(p, driver_data->pll_p_offset) | - DSIM_PLL_M(m) | DSIM_PLL_S(s); + reg =3D DSIM_PLL_EN | DSIM_PLL(p, driver_data->pll_p_offset) + | DSIM_PLL(m, driver_data->pll_m_offset) + | DSIM_PLL(s, driver_data->pll_s_offset); =20 if (driver_data->has_freqband) { static const unsigned long freq_bands[] =3D { diff --git a/include/drm/bridge/samsung-dsim.h b/include/drm/bridge/samsung= -dsim.h index f364fd2703c3644e822df30408d82cc3d6206b05..def9b4c6ef28eede8175aaa84c4= 95c5444d0f103 100644 --- a/include/drm/bridge/samsung-dsim.h +++ b/include/drm/bridge/samsung-dsim.h @@ -70,6 +70,8 @@ struct samsung_dsim_driver_data { unsigned int lane_esc_clk_bit; unsigned int lane_esc_data_offset; unsigned int pll_p_offset; + unsigned int pll_m_offset; + unsigned int pll_s_offset; unsigned int main_vsa_offset; const unsigned int *reg_values; unsigned int pll_fin_min; --=20 2.49.0 From nobody Wed Oct 8 14:20:36 2025 Received: from layka.disroot.org (layka.disroot.org [178.21.23.139]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 379522F94A7; Thu, 26 Jun 2025 19:40:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=178.21.23.139 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750966860; cv=none; b=DKKLxd80wGdU1anmvgdAzT8YkT+SDQwjiweQxxmwxn+7Dy26wOa/1D4mqHI4VEAoytWKMvxIaxVZRT+iuVCjea3/FM6ezKSOVt2O5/vFcnJ7xuOgFH630kdDjc6TaOOfFe2QTu6OnhXGUKWFKfuisJkl2x8OtnY1p6gGVfIxi9s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750966860; c=relaxed/simple; bh=GRwQfaXR9PqlUd5qkwAM/K2L0RzAamSmwPUgcvhLXFc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=kWf3+rSVTlaeofCtpjZcEyxgUh/c+j9iQ2fpyogiKbiiLSpQ+AxE/kbft3ruiH4wxe45mesnnwtfHUcj6rhZixZK3WUnBVoki2dbBs4K4z6Uw8BUC8F74lI3FyWL2clsG5DuzfI6rsZiWVl2F2/l1RQTQE8Kz1hPpqn5Id0RYyM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org; spf=pass smtp.mailfrom=disroot.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b=OYvTEa9A; arc=none smtp.client-ip=178.21.23.139 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=disroot.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b="OYvTEa9A" Received: from mail01.disroot.lan (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 035D825AFA; Thu, 26 Jun 2025 21:40:58 +0200 (CEST) X-Virus-Scanned: SPAM Filter at disroot.org Received: from layka.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavis, port 10024) with ESMTP id udfKIfnW7R9o; Thu, 26 Jun 2025 21:40:57 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1750966852; bh=GRwQfaXR9PqlUd5qkwAM/K2L0RzAamSmwPUgcvhLXFc=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=OYvTEa9ADlUIivh0fEl0ruh2UjkM25tSXD7TKdzRWVC6JYlj5shjZjAflmrO/hirV fvdNUrTnZ31vKtco96bIoLUY+RXBPmUvQ3iVEXF1F/JvzC/TjoI71gsvDG6k50e4mT Z6+rJhe6ZBhrQLTcTsJHqBT7nlvNWtwXungs+uYG2Ii+8sCWtXKg/Nzqqt6+xtwfcv wHblWVSJNTtg6sPdzwr7Uv016+VBok0fDu/ZP5dud42sD+CGTXJCa1zgKEx5G6cV4L zEDn4DeG0BenaQQNZQHKA8ElJfaTRTpM8dYBAf4sDdllzsgUeGU8vqsq7Yrk9xrqTJ OpMpPs9C4AtEQ== From: Kaustabh Chakraborty Date: Fri, 27 Jun 2025 01:08:57 +0530 Subject: [PATCH v2 08/13] drm/bridge: samsung-dsim: allow configuring the PLL_STABLE bit Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250627-exynos7870-dsim-v2-8-1433b67378d3@disroot.org> References: <20250627-exynos7870-dsim-v2-0-1433b67378d3@disroot.org> In-Reply-To: <20250627-exynos7870-dsim-v2-0-1433b67378d3@disroot.org> To: Inki Dae , Jagan Teki , Marek Szyprowski , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Alim Akhtar Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, Kaustabh Chakraborty X-Developer-Signature: v=1; a=ed25519-sha256; t=1750966738; l=3549; i=kauschluss@disroot.org; s=20250202; h=from:subject:message-id; bh=GRwQfaXR9PqlUd5qkwAM/K2L0RzAamSmwPUgcvhLXFc=; b=zY+YgxeevIU30zCR9B5D+wDMKGvoc7kvreewF/G/zMFvqB/UkKcPqSmFQOPmzB+oXBKdgWYzv O4kKpXVN71PA1N+YYAPlltJoOT34v46g6HrPwlYIHYJnOjCCnuJn4sF X-Developer-Key: i=kauschluss@disroot.org; a=ed25519; pk=h2xeR+V2I1+GrfDPAhZa3M+NWA0Cnbdkkq1bH3ct1hE= The PLL_STABLE bit of DSIM_DPHY_STATUS is hardcoded to BIT(31), but Exynos7870's DSIM has it in BIT(24) as per downstream kernel sources. In order to support both, move this bit value to the driver data struct and define it for every driver compatible. Reference the value from there instead, in functions wherever required. Signed-off-by: Kaustabh Chakraborty --- drivers/gpu/drm/bridge/samsung-dsim.c | 9 +++++++-- include/drm/bridge/samsung-dsim.h | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge= /samsung-dsim.c index 5993f8ef5d3641f69e557a79819ce0ba54762efb..739e1d1e6d239d06896daa131b6= 92309cfeda843 100644 --- a/drivers/gpu/drm/bridge/samsung-dsim.c +++ b/drivers/gpu/drm/bridge/samsung-dsim.c @@ -34,7 +34,6 @@ #define DSIM_STOP_STATE_DAT(x) (((x) & 0xf) << 0) #define DSIM_STOP_STATE_CLK BIT(8) #define DSIM_TX_READY_HS_CLK BIT(10) -#define DSIM_PLL_STABLE BIT(31) =20 /* DSIM_SWRST */ #define DSIM_FUNCRST BIT(16) @@ -414,6 +413,7 @@ static const struct samsung_dsim_driver_data exynos3_ds= i_driver_data =3D { .wait_for_reset =3D 1, .num_bits_resol =3D 11, .video_mode_bit =3D 25, + .pll_stable_bit =3D 31, .esc_clken_bit =3D 28, .byte_clken_bit =3D 24, .tx_req_hsclk_bit =3D 31, @@ -443,6 +443,7 @@ static const struct samsung_dsim_driver_data exynos4_ds= i_driver_data =3D { .wait_for_reset =3D 1, .num_bits_resol =3D 11, .video_mode_bit =3D 25, + .pll_stable_bit =3D 31, .esc_clken_bit =3D 28, .byte_clken_bit =3D 24, .tx_req_hsclk_bit =3D 31, @@ -470,6 +471,7 @@ static const struct samsung_dsim_driver_data exynos5_ds= i_driver_data =3D { .wait_for_reset =3D 1, .num_bits_resol =3D 11, .video_mode_bit =3D 25, + .pll_stable_bit =3D 31, .esc_clken_bit =3D 28, .byte_clken_bit =3D 24, .tx_req_hsclk_bit =3D 31, @@ -497,6 +499,7 @@ static const struct samsung_dsim_driver_data exynos5433= _dsi_driver_data =3D { .wait_for_reset =3D 0, .num_bits_resol =3D 12, .video_mode_bit =3D 25, + .pll_stable_bit =3D 31, .esc_clken_bit =3D 28, .byte_clken_bit =3D 24, .tx_req_hsclk_bit =3D 31, @@ -524,6 +527,7 @@ static const struct samsung_dsim_driver_data exynos5422= _dsi_driver_data =3D { .wait_for_reset =3D 1, .num_bits_resol =3D 12, .video_mode_bit =3D 25, + .pll_stable_bit =3D 31, .esc_clken_bit =3D 28, .byte_clken_bit =3D 24, .tx_req_hsclk_bit =3D 31, @@ -551,6 +555,7 @@ static const struct samsung_dsim_driver_data imx8mm_dsi= _driver_data =3D { .wait_for_reset =3D 0, .num_bits_resol =3D 12, .video_mode_bit =3D 25, + .pll_stable_bit =3D 31, .esc_clken_bit =3D 28, .byte_clken_bit =3D 24, .tx_req_hsclk_bit =3D 31, @@ -754,7 +759,7 @@ static unsigned long samsung_dsim_set_pll(struct samsun= g_dsim *dsi, return 0; } reg =3D samsung_dsim_read(dsi, DSIM_LINK_STATUS_REG); - } while ((reg & DSIM_PLL_STABLE) =3D=3D 0); + } while ((reg & BIT(driver_data->pll_stable_bit)) =3D=3D 0); =20 dsi->hs_clock =3D fout; =20 diff --git a/include/drm/bridge/samsung-dsim.h b/include/drm/bridge/samsung= -dsim.h index def9b4c6ef28eede8175aaa84c495c5444d0f103..2dd63032d83ab5df0e1780a6927= 89c340c2126dc 100644 --- a/include/drm/bridge/samsung-dsim.h +++ b/include/drm/bridge/samsung-dsim.h @@ -64,6 +64,7 @@ struct samsung_dsim_driver_data { unsigned int wait_for_reset; unsigned int num_bits_resol; unsigned int video_mode_bit; + unsigned int pll_stable_bit; unsigned int esc_clken_bit; unsigned int byte_clken_bit; unsigned int tx_req_hsclk_bit; --=20 2.49.0 From nobody Wed Oct 8 14:20:36 2025 Received: from layka.disroot.org (layka.disroot.org [178.21.23.139]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CC2882FA630; Thu, 26 Jun 2025 19:41:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=178.21.23.139 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750966873; cv=none; b=ZuhSkvz494+JTJoT8oaUFg0Jf573vCh/eMFPABmmak0Ku3nPsbBsG9Jwx9aEtlJGkEzMkp6O8bhiXIy68XaKrvQxdevIYWobnh2VgnY1luWPp7ckwJ/ci64zDVxf43xXYPOE/3QoWr3ExMioYOdPpGo+9TscoseouTaE3rG0mVM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750966873; c=relaxed/simple; bh=u2gNoGL1EkUKTCKTqebfk2oKp+u2JbaoBZpY/Rvkb4g=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Foh/iRrIA37VVwRkxXxZCWdN7TJoqK6sXWLJ4lEauSFhdRqBXc7qrIEC3CB7D6S/4bUoMfb4u9EJy7V+8gr4/K/eFWL5MGdTPklERzo0GDyQAtdJBU5CIJ1JKv6MZKv6ODXDt5n216h8Khdu3mVq7hNSYrljNMldpuIroJDkSFg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org; spf=pass smtp.mailfrom=disroot.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b=Lb3j0kGr; arc=none smtp.client-ip=178.21.23.139 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=disroot.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b="Lb3j0kGr" Received: from mail01.disroot.lan (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 5FBE225AFA; Thu, 26 Jun 2025 21:41:06 +0200 (CEST) X-Virus-Scanned: SPAM Filter at disroot.org Received: from layka.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavis, port 10024) with ESMTP id lFCUli431S5E; Thu, 26 Jun 2025 21:41:05 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1750966865; bh=u2gNoGL1EkUKTCKTqebfk2oKp+u2JbaoBZpY/Rvkb4g=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=Lb3j0kGrriHaoBpC4hGLaDqjZ0kTOQ4BM2YaozjNb+EISLlOKii0na8hdm/PImaRT FvrKztzM616N13kJN19V3aXYIKhLwsFc4mra8+0aD0cAD4N5VlTOVF5D+Yvs90Pt4u xTjFPv72FZxuXp4SrsLqvm0h19IaSYYu+fh8Xj49E6wM8lDEWqQCVD7a9Vik2cP7xT LktAuxOZOCYDWRLrQHR0p1CiY42rxBOSEYT48wEWqtYotsbi3PVLJ+c4fB8rzCXQ7l y/3l9FkMlr6xPyvIMMA2X3+Zhs+TGy7A48vWNtHA9J2KNFoqopyEDvR2S/avRiC4TS MJxt7zPuZJoMA== From: Kaustabh Chakraborty Date: Fri, 27 Jun 2025 01:08:58 +0530 Subject: [PATCH v2 09/13] drm/bridge: samsung-dsim: increase timeout value for PLL_STABLE Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250627-exynos7870-dsim-v2-9-1433b67378d3@disroot.org> References: <20250627-exynos7870-dsim-v2-0-1433b67378d3@disroot.org> In-Reply-To: <20250627-exynos7870-dsim-v2-0-1433b67378d3@disroot.org> To: Inki Dae , Jagan Teki , Marek Szyprowski , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Alim Akhtar Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, Kaustabh Chakraborty X-Developer-Signature: v=1; a=ed25519-sha256; t=1750966738; l=926; i=kauschluss@disroot.org; s=20250202; h=from:subject:message-id; bh=u2gNoGL1EkUKTCKTqebfk2oKp+u2JbaoBZpY/Rvkb4g=; b=tuIO+GEyrWvCTjkPRhokjgmcnFCs1r/Ux62zw0hOtqO2IHMl5Gi3MccQ0YL91PrCUp0knSDAm b7R0B69o9RuDa3Cg6gLlmbOqv+gApGtxia1YDbaGcYIyV+xmJKhMGEB X-Developer-Key: i=kauschluss@disroot.org; a=ed25519; pk=h2xeR+V2I1+GrfDPAhZa3M+NWA0Cnbdkkq1bH3ct1hE= Exynos7870's DSIM requires more time to stabilize its PLL. The current timeout value, 1000, doesn't suffice. Increase the value to 3000, which is just about enough as observed experimentally. Signed-off-by: Kaustabh Chakraborty --- drivers/gpu/drm/bridge/samsung-dsim.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge= /samsung-dsim.c index 739e1d1e6d239d06896daa131b692309cfeda843..5b96a5a1c78d212aca4e4fb0579= 52927eb90f0d4 100644 --- a/drivers/gpu/drm/bridge/samsung-dsim.c +++ b/drivers/gpu/drm/bridge/samsung-dsim.c @@ -752,7 +752,7 @@ static unsigned long samsung_dsim_set_pll(struct samsun= g_dsim *dsi, =20 samsung_dsim_write(dsi, DSIM_PLLCTRL_REG, reg); =20 - timeout =3D 1000; + timeout =3D 3000; do { if (timeout-- =3D=3D 0) { dev_err(dsi->dev, "PLL failed to stabilize\n"); --=20 2.49.0 From nobody Wed Oct 8 14:20:36 2025 Received: from layka.disroot.org (layka.disroot.org [178.21.23.139]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D3EB22FBFF2; Thu, 26 Jun 2025 19:41:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=178.21.23.139 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750966882; cv=none; b=do0BB4+iSrS2zT8wDpRi1csI0/KTrUdcOexl69DRAYZ2q0xmx1j1gZU7uejGz1nMKlltN/VWxGI+kky2J9j2oZKFs3m4Zp+qjGUI8IZlmq9G6R7VXVnx5C0TNq6T9v1q65GecsN4vb3orfGc9/DbnHqRB1Ch9ikhkZj4fhOkAN8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750966882; c=relaxed/simple; bh=P+oErjB5DqPKHfm6dCIyk7UHEQ3wliClUoFgadW5LlQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=K3gzQoF0lPlUGYLOvIRYOn/8CERej1nvofiem46/jxV/UelLaf70g9Uolb/0MfRmdi+XIQKh5rIflwhdF5EgCyLjmzV5qwPhBckqMo79lzRo+4uaM6Umo8pU70PI3iojedH/0KXU6ku248pElm+9OLUpS6pQ2/D9uao98wR37r8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org; spf=pass smtp.mailfrom=disroot.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b=Y5SByB2T; arc=none smtp.client-ip=178.21.23.139 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=disroot.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b="Y5SByB2T" Received: from mail01.disroot.lan (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 69B0425AFA; Thu, 26 Jun 2025 21:41:19 +0200 (CEST) X-Virus-Scanned: SPAM Filter at disroot.org Received: from layka.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavis, port 10024) with ESMTP id vjfJXHmbRw_q; Thu, 26 Jun 2025 21:41:17 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1750966877; bh=P+oErjB5DqPKHfm6dCIyk7UHEQ3wliClUoFgadW5LlQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=Y5SByB2TanllvQh0SSyIRACVY5SW0DkhjZK1sIijBnzEZkvJd9pOLUCM+wXYnViVK ufyO2/UURP4j0CTXRangKvY3uMxEZQTbn1HqKKSQWYJYDW1itzvmLa9+8l5S4khRaR iDve2WIqbgA+kniOeyqZBh6Mckmm9Pn8knrPqm7AeHyIdo6UZ8oIj9fPRtGgtbUjKc 9ane0aP/dpCYuzd1Lv6dN1XeiTJUQVPVGTJzIpYXZ5LEsAvlppiWH20f/PvtyYxpkc nyRwVKCVX5RukVd3JPaoQhP1eWjE9xTRnxId/suYb5PS9j1MTAL83+s3/99lyYM3ki O9dP/JFcQkdQw== From: Kaustabh Chakraborty Date: Fri, 27 Jun 2025 01:08:59 +0530 Subject: [PATCH v2 10/13] drm/bridge: samsung-dsim: add ability to define clock names for every variant Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250627-exynos7870-dsim-v2-10-1433b67378d3@disroot.org> References: <20250627-exynos7870-dsim-v2-0-1433b67378d3@disroot.org> In-Reply-To: <20250627-exynos7870-dsim-v2-0-1433b67378d3@disroot.org> To: Inki Dae , Jagan Teki , Marek Szyprowski , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Alim Akhtar Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, Kaustabh Chakraborty X-Developer-Signature: v=1; a=ed25519-sha256; t=1750966738; l=8047; i=kauschluss@disroot.org; s=20250202; h=from:subject:message-id; bh=P+oErjB5DqPKHfm6dCIyk7UHEQ3wliClUoFgadW5LlQ=; b=bSWbeHdKS1VOfTexjbgCF1GA8SKOp+N2PkBDiJTdbhJVj7PeZiKICSEFSURHh+BLgpKXwqcDM ncj7caPeI5lCbMFEMd9SGufW+3abdclE9fvMvlMXeKfbwfayohjinJc X-Developer-Key: i=kauschluss@disroot.org; a=ed25519; pk=h2xeR+V2I1+GrfDPAhZa3M+NWA0Cnbdkkq1bH3ct1hE= Presently, all devices refer to clock names from a single array. The only controlling parameter is the number of clocks (num_clks field of samsung_dsim_driver_data) which uses the first n clocks of that array. As new devices are added, this approach turns out to be cumbersome. Separate the clock names in individual arrays required by each variant, in a struct clk_bulk_data. Add a pointer field to the driver data struct which points to their respective clock names, and rework the clock usage code to use the clk_bulk_* API instead. Signed-off-by: Kaustabh Chakraborty --- drivers/gpu/drm/bridge/samsung-dsim.c | 88 +++++++++++++++++--------------= ---- include/drm/bridge/samsung-dsim.h | 2 +- 2 files changed, 44 insertions(+), 46 deletions(-) diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge= /samsung-dsim.c index 5b96a5a1c78d212aca4e4fb057952927eb90f0d4..6eddaa7e3ee6cb733d005169f55= 73eeba2a70f0a 100644 --- a/drivers/gpu/drm/bridge/samsung-dsim.c +++ b/drivers/gpu/drm/bridge/samsung-dsim.c @@ -218,23 +218,31 @@ #define DSI_XFER_TIMEOUT_MS 100 #define DSI_RX_FIFO_EMPTY 0x30800002 =20 -#define OLD_SCLK_MIPI_CLK_NAME "pll_clk" - #define PS_TO_CYCLE(ps, hz) DIV64_U64_ROUND_CLOSEST(((ps) * (hz)), 1000000= 000000ULL) =20 -static const char *const clk_names[5] =3D { - "bus_clk", - "sclk_mipi", - "phyclk_mipidphy0_bitclkdiv8", - "phyclk_mipidphy0_rxclkesc0", - "sclk_rgb_vclk_to_dsim0" -}; - enum samsung_dsim_transfer_type { EXYNOS_DSI_TX, EXYNOS_DSI_RX, }; =20 +static struct clk_bulk_data exynos3_clk_bulk_data[] =3D { + { .id =3D "bus_clk" }, + { .id =3D "pll_clk" }, +}; + +static struct clk_bulk_data exynos4_clk_bulk_data[] =3D { + { .id =3D "bus_clk" }, + { .id =3D "sclk_mipi" }, +}; + +static struct clk_bulk_data exynos5433_clk_bulk_data[] =3D { + { .id =3D "bus_clk" }, + { .id =3D "sclk_mipi" }, + { .id =3D "phyclk_mipidphy0_bitclkdiv8" }, + { .id =3D "phyclk_mipidphy0_rxclkesc0" }, + { .id =3D "sclk_rgb_vclk_to_dsim0" }, +}; + enum reg_idx { DSIM_LINK_STATUS_REG, /* Link status register */ DSIM_DPHY_STATUS_REG, /* D-PHY status register */ @@ -407,7 +415,8 @@ static const struct samsung_dsim_driver_data exynos3_ds= i_driver_data =3D { .plltmr_reg =3D 0x50, .has_freqband =3D 1, .has_clklane_stop =3D 1, - .num_clks =3D 2, + .clk_data =3D exynos3_clk_bulk_data, + .num_clks =3D ARRAY_SIZE(exynos3_clk_bulk_data), .max_freq =3D 1000, .wait_for_hdr_fifo =3D 1, .wait_for_reset =3D 1, @@ -437,7 +446,8 @@ static const struct samsung_dsim_driver_data exynos4_ds= i_driver_data =3D { .plltmr_reg =3D 0x50, .has_freqband =3D 1, .has_clklane_stop =3D 1, - .num_clks =3D 2, + .clk_data =3D exynos4_clk_bulk_data, + .num_clks =3D ARRAY_SIZE(exynos4_clk_bulk_data), .max_freq =3D 1000, .wait_for_hdr_fifo =3D 1, .wait_for_reset =3D 1, @@ -465,7 +475,8 @@ static const struct samsung_dsim_driver_data exynos4_ds= i_driver_data =3D { static const struct samsung_dsim_driver_data exynos5_dsi_driver_data =3D { .reg_ofs =3D exynos_reg_ofs, .plltmr_reg =3D 0x58, - .num_clks =3D 2, + .clk_data =3D exynos3_clk_bulk_data, + .num_clks =3D ARRAY_SIZE(exynos3_clk_bulk_data), .max_freq =3D 1000, .wait_for_hdr_fifo =3D 1, .wait_for_reset =3D 1, @@ -493,7 +504,8 @@ static const struct samsung_dsim_driver_data exynos5433= _dsi_driver_data =3D { .reg_ofs =3D exynos5433_reg_ofs, .plltmr_reg =3D 0xa0, .has_clklane_stop =3D 1, - .num_clks =3D 5, + .clk_data =3D exynos5433_clk_bulk_data, + .num_clks =3D ARRAY_SIZE(exynos5433_clk_bulk_data), .max_freq =3D 1500, .wait_for_hdr_fifo =3D 1, .wait_for_reset =3D 0, @@ -521,7 +533,8 @@ static const struct samsung_dsim_driver_data exynos5422= _dsi_driver_data =3D { .reg_ofs =3D exynos5433_reg_ofs, .plltmr_reg =3D 0xa0, .has_clklane_stop =3D 1, - .num_clks =3D 2, + .clk_data =3D exynos3_clk_bulk_data, + .num_clks =3D ARRAY_SIZE(exynos3_clk_bulk_data), .max_freq =3D 1500, .wait_for_hdr_fifo =3D 1, .wait_for_reset =3D 1, @@ -549,7 +562,8 @@ static const struct samsung_dsim_driver_data imx8mm_dsi= _driver_data =3D { .reg_ofs =3D exynos5433_reg_ofs, .plltmr_reg =3D 0xa0, .has_clklane_stop =3D 1, - .num_clks =3D 2, + .clk_data =3D exynos4_clk_bulk_data, + .num_clks =3D ARRAY_SIZE(exynos4_clk_bulk_data), .max_freq =3D 2100, .wait_for_hdr_fifo =3D 1, .wait_for_reset =3D 0, @@ -2023,7 +2037,7 @@ int samsung_dsim_probe(struct platform_device *pdev) { struct device *dev =3D &pdev->dev; struct samsung_dsim *dsi; - int ret, i; + int ret; =20 dsi =3D devm_drm_bridge_alloc(dev, struct samsung_dsim, bridge, &samsung_= dsim_bridge_funcs); if (IS_ERR(dsi)) @@ -2047,23 +2061,11 @@ int samsung_dsim_probe(struct platform_device *pdev) if (ret) return dev_err_probe(dev, ret, "failed to get regulators\n"); =20 - dsi->clks =3D devm_kcalloc(dev, dsi->driver_data->num_clks, - sizeof(*dsi->clks), GFP_KERNEL); - if (!dsi->clks) - return -ENOMEM; - - for (i =3D 0; i < dsi->driver_data->num_clks; i++) { - dsi->clks[i] =3D devm_clk_get(dev, clk_names[i]); - if (IS_ERR(dsi->clks[i])) { - if (strcmp(clk_names[i], "sclk_mipi") =3D=3D 0) { - dsi->clks[i] =3D devm_clk_get(dev, OLD_SCLK_MIPI_CLK_NAME); - if (!IS_ERR(dsi->clks[i])) - continue; - } - - dev_info(dev, "failed to get the clock: %s\n", clk_names[i]); - return PTR_ERR(dsi->clks[i]); - } + ret =3D devm_clk_bulk_get(dev, dsi->driver_data->num_clks, + dsi->driver_data->clk_data); + if (ret) { + dev_err(dev, "failed to get clocks in bulk (%d)\n", ret); + return ret; } =20 dsi->reg_base =3D devm_platform_ioremap_resource(pdev, 0); @@ -2136,7 +2138,7 @@ static int samsung_dsim_suspend(struct device *dev) { struct samsung_dsim *dsi =3D dev_get_drvdata(dev); const struct samsung_dsim_driver_data *driver_data =3D dsi->driver_data; - int ret, i; + int ret; =20 usleep_range(10000, 20000); =20 @@ -2152,8 +2154,7 @@ static int samsung_dsim_suspend(struct device *dev) =20 phy_power_off(dsi->phy); =20 - for (i =3D driver_data->num_clks - 1; i > -1; i--) - clk_disable_unprepare(dsi->clks[i]); + clk_bulk_disable_unprepare(driver_data->num_clks, driver_data->clk_data); =20 ret =3D regulator_bulk_disable(ARRAY_SIZE(dsi->supplies), dsi->supplies); if (ret < 0) @@ -2166,7 +2167,7 @@ static int samsung_dsim_resume(struct device *dev) { struct samsung_dsim *dsi =3D dev_get_drvdata(dev); const struct samsung_dsim_driver_data *driver_data =3D dsi->driver_data; - int ret, i; + int ret; =20 ret =3D regulator_bulk_enable(ARRAY_SIZE(dsi->supplies), dsi->supplies); if (ret < 0) { @@ -2174,11 +2175,9 @@ static int samsung_dsim_resume(struct device *dev) return ret; } =20 - for (i =3D 0; i < driver_data->num_clks; i++) { - ret =3D clk_prepare_enable(dsi->clks[i]); - if (ret < 0) - goto err_clk; - } + ret =3D clk_bulk_prepare_enable(driver_data->num_clks, driver_data->clk_d= ata); + if (ret < 0) + goto err_clk; =20 ret =3D phy_power_on(dsi->phy); if (ret < 0) { @@ -2189,8 +2188,7 @@ static int samsung_dsim_resume(struct device *dev) return 0; =20 err_clk: - while (--i > -1) - clk_disable_unprepare(dsi->clks[i]); + clk_bulk_disable_unprepare(driver_data->num_clks, driver_data->clk_data); regulator_bulk_disable(ARRAY_SIZE(dsi->supplies), dsi->supplies); =20 return ret; diff --git a/include/drm/bridge/samsung-dsim.h b/include/drm/bridge/samsung= -dsim.h index 2dd63032d83ab5df0e1780a692789c340c2126dc..ed05763b523ceab6956ed875baa= 9b460a3df5bbd 100644 --- a/include/drm/bridge/samsung-dsim.h +++ b/include/drm/bridge/samsung-dsim.h @@ -57,6 +57,7 @@ struct samsung_dsim_driver_data { unsigned int has_clklane_stop:1; unsigned int has_broken_fifoctrl_emptyhdr:1; unsigned int has_sfrctrl:1; + struct clk_bulk_data *clk_data; unsigned int num_clks; unsigned int min_freq; unsigned int max_freq; @@ -103,7 +104,6 @@ struct samsung_dsim { =20 void __iomem *reg_base; struct phy *phy; - struct clk **clks; struct clk *pll_clk; struct regulator_bulk_data supplies[2]; int irq; --=20 2.49.0 From nobody Wed Oct 8 14:20:36 2025 Received: from layka.disroot.org (layka.disroot.org [178.21.23.139]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D4EF82FCE12; Thu, 26 Jun 2025 19:41:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=178.21.23.139 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750966894; cv=none; b=QDWo2RXJYlNBFOrSEFgjf9MzesMdSYNJ5edpOJ6AKTT/jovIBCmXyO3PRc9qgje2SroSW/jY8zCU2l+ABKh8dnKiXhC/R+KSrqzYQmTKONPZ/hM7WzSVEmue9ae1XkIcLMtZPAWUE/BXLun4xk3U4TSi8tQKxnbmvvRvPMS08WM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750966894; c=relaxed/simple; bh=H8pHmtJhKvCu7fZ5/7YHY1g192cqpSliEgZa4tl8geA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mYsoPmLl/FuWXBrdHEXiwSW+5UOFYBOJn8MZ0sJNXCK/heY87+G9jMf1GFUnN4KqOxZtYl339nwJyfAtgrE0RCtKk7xNiG7CWdSM41SCaS4hDPTyvdZFaemknq8JSnpegUDSggHzzvw5LmLbDDrdZQInqqZY3+Xd6aN7SVjB20Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org; spf=pass smtp.mailfrom=disroot.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b=e/5q7fki; arc=none smtp.client-ip=178.21.23.139 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=disroot.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b="e/5q7fki" Received: from mail01.disroot.lan (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 63F4E25AFA; Thu, 26 Jun 2025 21:41:31 +0200 (CEST) X-Virus-Scanned: SPAM Filter at disroot.org Received: from layka.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavis, port 10024) with ESMTP id LnEja1qB4Et0; Thu, 26 Jun 2025 21:41:30 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1750966890; bh=H8pHmtJhKvCu7fZ5/7YHY1g192cqpSliEgZa4tl8geA=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=e/5q7fki7A42uIFYthIewv9iyjE1RgWHJPmGukfftjco8fGxWl2Gd/a7XUnmi+HKb hBsX+za+yAO983nS2qHkS+m1cuq6aHn48OqnKshJ7UUDer39svADAKORK//+zrViXx pTn2z/A5y/nrY3LDaYpCeLx3+HvnpJ2YvoHiV5edQnJQvDSAPemJXz5R+mdt2gy+67 bZEDp4k8O0EuwvFUjNDHHS+V238uwkYlfoVm0nXUlK6eJA01mg9Eitkyzkvq3vmsol kGq9qD6yvcjg93mEabJHkAurIFsxBF17BpX5Zg/9N6CDFiE1V6tc62ujDzkBbva6/Z thqZEsaeK1xQg== From: Kaustabh Chakraborty Date: Fri, 27 Jun 2025 01:09:00 +0530 Subject: [PATCH v2 11/13] dt-bindings: samsung,mipi-dsim: document exynos7870 DSIM compatible Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250627-exynos7870-dsim-v2-11-1433b67378d3@disroot.org> References: <20250627-exynos7870-dsim-v2-0-1433b67378d3@disroot.org> In-Reply-To: <20250627-exynos7870-dsim-v2-0-1433b67378d3@disroot.org> To: Inki Dae , Jagan Teki , Marek Szyprowski , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Alim Akhtar Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, Kaustabh Chakraborty X-Developer-Signature: v=1; a=ed25519-sha256; t=1750966738; l=1737; i=kauschluss@disroot.org; s=20250202; h=from:subject:message-id; bh=H8pHmtJhKvCu7fZ5/7YHY1g192cqpSliEgZa4tl8geA=; b=OaXjaLdr1Bcq92HtOib5JAJE9K+vzrQX882KqIGdIm792/fzivVyPndNPR/JbHCYYnO5Fje70 qkgyw7uBIKfBXEBKgsUnxRLQ+6ZaD+d11QRtzNn/SEYPDutEaOBobxh X-Developer-Key: i=kauschluss@disroot.org; a=ed25519; pk=h2xeR+V2I1+GrfDPAhZa3M+NWA0Cnbdkkq1bH3ct1hE= Add compatible string for Exynos7870 DSIM bridge controller. The device requires four clock sources, in schema they're named as "bus", "pll", "byte", and "esc". Suggested-by: Krzysztof Kozlowski Signed-off-by: Kaustabh Chakraborty Reviewed-by: Rob Herring (Arm) --- .../bindings/display/bridge/samsung,mipi-dsim.yaml | 27 ++++++++++++++++++= ++++ 1 file changed, 27 insertions(+) diff --git a/Documentation/devicetree/bindings/display/bridge/samsung,mipi-= dsim.yaml b/Documentation/devicetree/bindings/display/bridge/samsung,mipi-d= sim.yaml index 1acad99f396527192b6853f0096cfb8ae5669e6b..ad279f0993fa108b312126b1121= 74f10f2b8c3d0 100644 --- a/Documentation/devicetree/bindings/display/bridge/samsung,mipi-dsim.ya= ml +++ b/Documentation/devicetree/bindings/display/bridge/samsung,mipi-dsim.ya= ml @@ -24,6 +24,7 @@ properties: - samsung,exynos5410-mipi-dsi - samsung,exynos5422-mipi-dsi - samsung,exynos5433-mipi-dsi + - samsung,exynos7870-mipi-dsi - fsl,imx8mm-mipi-dsim - fsl,imx8mp-mipi-dsim - items: @@ -144,6 +145,32 @@ required: =20 allOf: - $ref: ../dsi-controller.yaml# + - if: + properties: + compatible: + contains: + const: samsung,exynos7870-mipi-dsi + + then: + properties: + clocks: + minItems: 4 + maxItems: 4 + + clock-names: + items: + - const: bus + - const: pll + - const: byte + - const: esc + + ports: + required: + - port@0 + + required: + - ports + - if: properties: compatible: --=20 2.49.0 From nobody Wed Oct 8 14:20:36 2025 Received: from layka.disroot.org (layka.disroot.org [178.21.23.139]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4DB322FCE12; Thu, 26 Jun 2025 19:41:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=178.21.23.139 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750966908; cv=none; b=PTNvUw3qCl9xfgAUCd5lNubl5xRtDyMj3i4yeDPkT4OGsBA82uEKJ5oZMOyCkY8bO+M5jXDbkUNshHs585bNnhGV/k28gtoLKNy48vSmgeGHvhpKjoHyTgc2PnnCKxz+sImcN2RxnMi/J4XAnIpIl0VTVoFe4bryZMhYgAimHZA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750966908; c=relaxed/simple; bh=Y50MhfAnihg9mLvQ0916AcUb839PID/sF+h4OSEcRb8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FC4sVdFxWZeKqBVT8752H3QUzIm2JDBeJBZy3NWbI9wqnatVcJCe4mf/yNLt1EdmWaFNAFgyN2VnB7oDBa+2zevFo16KoPDsh5CeniTVxUtZDBRIVuGF1bfTJVX9y+UkI80SATgA2beV2QxPFjZOZ8KkxYq4Eis1272WjVPOEe0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org; spf=pass smtp.mailfrom=disroot.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b=cEizelDR; arc=none smtp.client-ip=178.21.23.139 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=disroot.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b="cEizelDR" Received: from mail01.disroot.lan (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id D884F25AFA; Thu, 26 Jun 2025 21:41:44 +0200 (CEST) X-Virus-Scanned: SPAM Filter at disroot.org Received: from layka.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavis, port 10024) with ESMTP id 5TbuA-v3Wox1; Thu, 26 Jun 2025 21:41:43 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1750966903; bh=Y50MhfAnihg9mLvQ0916AcUb839PID/sF+h4OSEcRb8=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=cEizelDR7MTzUxyUjv3xtzhNrmkRCZYs3cdjW4r/seOkIyjQX7i7qHGvRqHeKQIrp HwQaBtrJThJzIk+ryGdID218T6wQtbsnh33o5nOOeRxpBE7TNzObT5Kdt0CdaHjzWz 6k3tmiAy1cFha+hj5nGutaOa0HaXu2ok2c+3RA8re5e29QuvwlMAmolg0ua8feI5Js 7vVQ+qOidjNqbvQ0UvuJX37+ALWUEFAjSib+OsP1rUB+JsWq5PoQ5m7VatB7xFgIBV I7c2I5ZF+R11s4bplvWKbirH3j3V7S+tgwbsUE1PYE3/UzUiEi8UIOyCocE8Juv03n FlxZpOi+GR/FA== From: Kaustabh Chakraborty Date: Fri, 27 Jun 2025 01:09:01 +0530 Subject: [PATCH v2 12/13] drm/bridge: samsung-dsim: add driver support for exynos7870 DSIM bridge Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250627-exynos7870-dsim-v2-12-1433b67378d3@disroot.org> References: <20250627-exynos7870-dsim-v2-0-1433b67378d3@disroot.org> In-Reply-To: <20250627-exynos7870-dsim-v2-0-1433b67378d3@disroot.org> To: Inki Dae , Jagan Teki , Marek Szyprowski , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Alim Akhtar Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, Kaustabh Chakraborty X-Developer-Signature: v=1; a=ed25519-sha256; t=1750966738; l=4849; i=kauschluss@disroot.org; s=20250202; h=from:subject:message-id; bh=Y50MhfAnihg9mLvQ0916AcUb839PID/sF+h4OSEcRb8=; b=tWKhnOvaiokLOmF6CDZi+lXfPHv9pJ42Q76MkGiFyV7p3vbw5gcj8Dez5VrGQyZGFfFsOqEvx /eYlxOmnabEBvsddWAFyJ0vqq2lNJwOXI+t+xiVzzy+WuyeNaVsjsK/ X-Developer-Key: i=kauschluss@disroot.org; a=ed25519; pk=h2xeR+V2I1+GrfDPAhZa3M+NWA0Cnbdkkq1bH3ct1hE= Add support for Exynos7870's DSIM IP block in the bridge driver. Signed-off-by: Kaustabh Chakraborty --- drivers/gpu/drm/bridge/samsung-dsim.c | 82 +++++++++++++++++++++++++++++++= ++++ include/drm/bridge/samsung-dsim.h | 1 + 2 files changed, 83 insertions(+) diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge= /samsung-dsim.c index 6eddaa7e3ee6cb733d005169f5573eeba2a70f0a..d3708643121a5c1a20548b89aa3= 7ffb2952bc484 100644 --- a/drivers/gpu/drm/bridge/samsung-dsim.c +++ b/drivers/gpu/drm/bridge/samsung-dsim.c @@ -243,6 +243,13 @@ static struct clk_bulk_data exynos5433_clk_bulk_data[]= =3D { { .id =3D "sclk_rgb_vclk_to_dsim0" }, }; =20 +static struct clk_bulk_data exynos7870_clk_bulk_data[] =3D { + { .id =3D "bus" }, + { .id =3D "pll" }, + { .id =3D "byte" }, + { .id =3D "esc" }, +}; + enum reg_idx { DSIM_LINK_STATUS_REG, /* Link status register */ DSIM_DPHY_STATUS_REG, /* D-PHY status register */ @@ -320,6 +327,32 @@ static const unsigned int exynos5433_reg_ofs[] =3D { [DSIM_PHYTIMING2_REG] =3D 0xBC, }; =20 +static const unsigned int exynos7870_reg_ofs[] =3D { + [DSIM_LINK_STATUS_REG] =3D 0x04, + [DSIM_DPHY_STATUS_REG] =3D 0x08, + [DSIM_SWRST_REG] =3D 0x0C, + [DSIM_CLKCTRL_REG] =3D 0x10, + [DSIM_TIMEOUT_REG] =3D 0x14, + [DSIM_ESCMODE_REG] =3D 0x1C, + [DSIM_MDRESOL_REG] =3D 0x20, + [DSIM_MVPORCH_REG] =3D 0x24, + [DSIM_MHPORCH_REG] =3D 0x28, + [DSIM_MSYNC_REG] =3D 0x2C, + [DSIM_CONFIG_REG] =3D 0x30, + [DSIM_INTSRC_REG] =3D 0x34, + [DSIM_INTMSK_REG] =3D 0x38, + [DSIM_PKTHDR_REG] =3D 0x3C, + [DSIM_PAYLOAD_REG] =3D 0x40, + [DSIM_RXFIFO_REG] =3D 0x44, + [DSIM_SFRCTRL_REG] =3D 0x48, + [DSIM_FIFOCTRL_REG] =3D 0x4C, + [DSIM_PLLCTRL_REG] =3D 0x94, + [DSIM_PHYCTRL_REG] =3D 0xA4, + [DSIM_PHYTIMING_REG] =3D 0xB4, + [DSIM_PHYTIMING1_REG] =3D 0xB8, + [DSIM_PHYTIMING2_REG] =3D 0xBC, +}; + enum reg_value_idx { RESET_TYPE, PLL_TIMER, @@ -392,6 +425,24 @@ static const unsigned int exynos5433_reg_values[] =3D { [PHYTIMING_HS_TRAIL] =3D DSIM_PHYTIMING2_HS_TRAIL(0x0c), }; =20 +static const unsigned int exynos7870_reg_values[] =3D { + [RESET_TYPE] =3D DSIM_SWRST, + [PLL_TIMER] =3D 80000, + [STOP_STATE_CNT] =3D 0xa, + [PHYCTRL_ULPS_EXIT] =3D DSIM_PHYCTRL_ULPS_EXIT(0x177), + [PHYCTRL_VREG_LP] =3D 0, + [PHYCTRL_SLEW_UP] =3D 0, + [PHYTIMING_LPX] =3D DSIM_PHYTIMING_LPX(0x07), + [PHYTIMING_HS_EXIT] =3D DSIM_PHYTIMING_HS_EXIT(0x0c), + [PHYTIMING_CLK_PREPARE] =3D DSIM_PHYTIMING1_CLK_PREPARE(0x08), + [PHYTIMING_CLK_ZERO] =3D DSIM_PHYTIMING1_CLK_ZERO(0x2b), + [PHYTIMING_CLK_POST] =3D DSIM_PHYTIMING1_CLK_POST(0x0d), + [PHYTIMING_CLK_TRAIL] =3D DSIM_PHYTIMING1_CLK_TRAIL(0x09), + [PHYTIMING_HS_PREPARE] =3D DSIM_PHYTIMING2_HS_PREPARE(0x09), + [PHYTIMING_HS_ZERO] =3D DSIM_PHYTIMING2_HS_ZERO(0x0f), + [PHYTIMING_HS_TRAIL] =3D DSIM_PHYTIMING2_HS_TRAIL(0x0c), +}; + static const unsigned int imx8mm_dsim_reg_values[] =3D { [RESET_TYPE] =3D DSIM_SWRST, [PLL_TIMER] =3D 500, @@ -558,6 +609,36 @@ static const struct samsung_dsim_driver_data exynos542= 2_dsi_driver_data =3D { .min_freq =3D 500, }; =20 +static const struct samsung_dsim_driver_data exynos7870_dsi_driver_data = =3D { + .reg_ofs =3D exynos7870_reg_ofs, + .plltmr_reg =3D 0xa0, + .has_clklane_stop =3D 1, + .has_sfrctrl =3D 1, + .clk_data =3D exynos7870_clk_bulk_data, + .num_clks =3D ARRAY_SIZE(exynos7870_clk_bulk_data), + .max_freq =3D 1500, + .wait_for_hdr_fifo =3D 0, + .wait_for_reset =3D 1, + .num_bits_resol =3D 12, + .video_mode_bit =3D 18, + .pll_stable_bit =3D 24, + .esc_clken_bit =3D 16, + .byte_clken_bit =3D 17, + .tx_req_hsclk_bit =3D 20, + .lane_esc_clk_bit =3D 8, + .lane_esc_data_offset =3D 9, + .pll_p_offset =3D 13, + .pll_m_offset =3D 3, + .pll_s_offset =3D 0, + .main_vsa_offset =3D 16, + .reg_values =3D exynos7870_reg_values, + .pll_fin_min =3D 6, + .pll_fin_max =3D 12, + .m_min =3D 41, + .m_max =3D 125, + .min_freq =3D 500, +}; + static const struct samsung_dsim_driver_data imx8mm_dsi_driver_data =3D { .reg_ofs =3D exynos5433_reg_ofs, .plltmr_reg =3D 0xa0, @@ -598,6 +679,7 @@ samsung_dsim_types[DSIM_TYPE_COUNT] =3D { [DSIM_TYPE_EXYNOS5410] =3D &exynos5_dsi_driver_data, [DSIM_TYPE_EXYNOS5422] =3D &exynos5422_dsi_driver_data, [DSIM_TYPE_EXYNOS5433] =3D &exynos5433_dsi_driver_data, + [DSIM_TYPE_EXYNOS7870] =3D &exynos7870_dsi_driver_data, [DSIM_TYPE_IMX8MM] =3D &imx8mm_dsi_driver_data, [DSIM_TYPE_IMX8MP] =3D &imx8mm_dsi_driver_data, }; diff --git a/include/drm/bridge/samsung-dsim.h b/include/drm/bridge/samsung= -dsim.h index ed05763b523ceab6956ed875baa9b460a3df5bbd..db4c3d3aef58a7de9f6cf44f212= 2b1b7e00e173d 100644 --- a/include/drm/bridge/samsung-dsim.h +++ b/include/drm/bridge/samsung-dsim.h @@ -29,6 +29,7 @@ enum samsung_dsim_type { DSIM_TYPE_EXYNOS5410, DSIM_TYPE_EXYNOS5422, DSIM_TYPE_EXYNOS5433, + DSIM_TYPE_EXYNOS7870, DSIM_TYPE_IMX8MM, DSIM_TYPE_IMX8MP, DSIM_TYPE_COUNT, --=20 2.49.0 From nobody Wed Oct 8 14:20:36 2025 Received: from layka.disroot.org (layka.disroot.org [178.21.23.139]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4CF1B2FCE12; Thu, 26 Jun 2025 19:41:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=178.21.23.139 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750966920; cv=none; b=Jqkjv2zwMf/KmN4QsPFpd62Tl6dtJYQtBcWpUtN0x0wB51KUo9df6MBp7bfdKiyNICj/4xCHWA/GIPKCrW8ZHG4ky2hWclYpoT+AOznFiCKKDGDu0Kph63LZEaTPkp9/sfwZaxys3WvpbcTloJydj4jPHtxfbg4/zhS1UT46mew= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750966920; c=relaxed/simple; bh=l4Nuu5usU3hvRSdSwV3bQf/gyHyhMjDbMhpD0WU6O88=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=uG2SvIWxZrECGCU4ZOxpGPywIDsNgb8CL37h/BdMm4K4579vJagO2PFVVoV6cJtKwTK61iXClHvRts0LDXr3cZK3PZXRYBuf1ne8LruMN8FCpSN/Ozm5RBGHJ52LLynY4No9t1RR6ZZLxtx4+TjhEWQ5R2ToK4Jlm7qqoqaWZSM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org; spf=pass smtp.mailfrom=disroot.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b=Ebgh8tF9; arc=none smtp.client-ip=178.21.23.139 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=disroot.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=disroot.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=disroot.org header.i=@disroot.org header.b="Ebgh8tF9" Received: from mail01.disroot.lan (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 0D27125B63; Thu, 26 Jun 2025 21:41:58 +0200 (CEST) X-Virus-Scanned: SPAM Filter at disroot.org Received: from layka.disroot.org ([127.0.0.1]) by localhost (disroot.org [127.0.0.1]) (amavis, port 10024) with ESMTP id OEHH2EbSFcj2; Thu, 26 Jun 2025 21:41:57 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1750966917; bh=l4Nuu5usU3hvRSdSwV3bQf/gyHyhMjDbMhpD0WU6O88=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=Ebgh8tF90SxYheUm/XdL3l3+tUf8vUBXPF3ErugG+gm18/zE2KxQL4wzegTl+SblX 16F6td1BGUt0W1cV/unT2a54AdxrzXnnJnmGU8WrrS38bhLVw00F+md5LgHejUNfKF JVmz0jAM3LPscys4ZK9puADwfrM46LaS22h5KC/VZwo/wHmfQl0hW4sDqVjWLblWUF eHlKjCp9Gf5/rJetrUGHEI16VhATSxbbtj5VkGV+M5dOpI58CFOGpp882a0Us1f8NJ I0RmrQi26vVsJldm0CiGOY2kcpSumu2giASUHyZ/3ciWjsFv7Vqt3BMzI93YxZ1C1G f/e17oc0oY8LA== From: Kaustabh Chakraborty Date: Fri, 27 Jun 2025 01:09:02 +0530 Subject: [PATCH v2 13/13] drm/exynos: dsi: add support for exynos7870 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250627-exynos7870-dsim-v2-13-1433b67378d3@disroot.org> References: <20250627-exynos7870-dsim-v2-0-1433b67378d3@disroot.org> In-Reply-To: <20250627-exynos7870-dsim-v2-0-1433b67378d3@disroot.org> To: Inki Dae , Jagan Teki , Marek Szyprowski , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Alim Akhtar Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, Kaustabh Chakraborty X-Developer-Signature: v=1; a=ed25519-sha256; t=1750966738; l=1284; i=kauschluss@disroot.org; s=20250202; h=from:subject:message-id; bh=l4Nuu5usU3hvRSdSwV3bQf/gyHyhMjDbMhpD0WU6O88=; b=cmuo+JuT3QMzZHDqDYnGiREXiuNl6V2a1LJCsYS2y5UQKcrN5wI1ZKfhiayYuBYF2UrypP+5V p9GshsYm9IyD7GMQtRWhReztr3kMfLpJ+dEqvdjF0sqybYP9335jEqI X-Developer-Key: i=kauschluss@disroot.org; a=ed25519; pk=h2xeR+V2I1+GrfDPAhZa3M+NWA0Cnbdkkq1bH3ct1hE= Add glue layer support for Exynos7870's DSIM IP bridge driver. Signed-off-by: Kaustabh Chakraborty --- drivers/gpu/drm/exynos/exynos_drm_dsi.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c b/drivers/gpu/drm/exyn= os/exynos_drm_dsi.c index 896a03639e2d9b80971d43aff540fc7fb9f005bd..c4d098ab7863890b2111742c079= 53c148304e4ec 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c +++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c @@ -154,6 +154,11 @@ static const struct samsung_dsim_plat_data exynos5433_= dsi_pdata =3D { .host_ops =3D &exynos_dsi_exynos_host_ops, }; =20 +static const struct samsung_dsim_plat_data exynos7870_dsi_pdata =3D { + .hw_type =3D DSIM_TYPE_EXYNOS7870, + .host_ops =3D &exynos_dsi_exynos_host_ops, +}; + static const struct of_device_id exynos_dsi_of_match[] =3D { { .compatible =3D "samsung,exynos3250-mipi-dsi", @@ -175,6 +180,10 @@ static const struct of_device_id exynos_dsi_of_match[]= =3D { .compatible =3D "samsung,exynos5433-mipi-dsi", .data =3D &exynos5433_dsi_pdata, }, + { + .compatible =3D "samsung,exynos7870-mipi-dsi", + .data =3D &exynos7870_dsi_pdata, + }, { /* sentinel. */ } }; MODULE_DEVICE_TABLE(of, exynos_dsi_of_match); --=20 2.49.0