From nobody Tue Oct 7 21:03:28 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 B6A6E29E0E3; Sun, 6 Jul 2025 18:26:08 +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=1751826370; cv=none; b=XEzrhq4k14eyRpeYapia7SJIXJb0taP+4hMWmsqs4Gw8YVi2VFaViIWhbpFPiCmCfyR8FhxBEoWXz0gHiw8o64ThaL51FlU5lg9aZuewmpxQfh9DjKdioJ5bSpnnJu8Zj42U0jN5zPXR9fhb0+nYSR4b9FdslXNZkPUWfyDfJmA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751826370; c=relaxed/simple; bh=3+vm7iL4YxeQBqkYH0pzMX1sP4BS6s4QthWdNBrsH5A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=T9ilXX/wx08qLRgZh2GwLc7U1UT7LoN/OarEOJPiP5P09qax7WwdTC9kcBR7Gft/dF+8IR8+O0rgE8n5lFSG9p4wg2zVhukRzRzCZSQwSTRs+pD4hIkAD3X3ZnctEPwmWfcIZuaZHFcGJ3Y6l/d8pmfF7IKSA+jkv76qQbC08Sw= 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=D1jXqUPE; 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="D1jXqUPE" Received: from mail01.disroot.lan (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 2844F20E83; Sun, 6 Jul 2025 20:26:07 +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 T8w2O4mm5w3t; Sun, 6 Jul 2025 20:26:05 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1751826365; bh=3+vm7iL4YxeQBqkYH0pzMX1sP4BS6s4QthWdNBrsH5A=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=D1jXqUPEZubQQsLzI6hTvN2mY9f04AZlv+TBmWP8aymUXbY0mOdwht7C4TzG/PIjp LYYANp5epFZlOqJnvs1bLgbb96j9QO3pmjuXocI6TGM3ccvijrSBr0YPgh2EpMuOnJ 63DDCqRry19JA5+IUQQsMH5nRxB1zmJjYsEKG0YdDVWUjprylnUTldzspgqnIw4AsV 1OJYUK7evAUuyLqIHxlitMEI5L3NGvqyxKs+ZI6EIAnNTC+bn7EoEDh1uQ5ZtOcnie M6CX3IgzLrD6ErID/KksSFtWL7x4hV3X43DZg+gL5uVl67gogW53v8mgbVH1X/TT46 R/hsexQkk5RYg== From: Kaustabh Chakraborty Date: Sun, 06 Jul 2025 23:55:35 +0530 Subject: [PATCH v3 01/13] drm/bridge: samsung-dsim: support 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: <20250706-exynos7870-dsim-v3-1-9879fb9a644d@disroot.org> References: <20250706-exynos7870-dsim-v3-0-9879fb9a644d@disroot.org> In-Reply-To: <20250706-exynos7870-dsim-v3-0-9879fb9a644d@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=1751826342; l=4978; i=kauschluss@disroot.org; s=20250202; h=from:subject:message-id; bh=3+vm7iL4YxeQBqkYH0pzMX1sP4BS6s4QthWdNBrsH5A=; b=dc4BfCEAV7fGcT4lRM/RcmpmWodN3OAhoQq4Ka5r0EOaDkmg2QdBfV/MTo+epFmDvryOvfbq1 U2eTd2rTP58ABcWhWRYs4oXspPwUz+xr7z0y+o0MIla9dKbxwZcI/sm 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 older variants in the driver which use a single register for both. Add a driver data flag which indicates that the device variant supports the legacy status register. Change the register read calls appropriately. Suggested-by: Inki Dae Signed-off-by: Kaustabh Chakraborty --- drivers/gpu/drm/bridge/samsung-dsim.c | 22 ++++++++++++++++++---- include/drm/bridge/samsung-dsim.h | 1 + 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge= /samsung-dsim.c index c4997795db18280903570646b0a5b2c03b666307..0b061ad0ecec158f994846da08f= ae59f74bfa091 100644 --- a/drivers/gpu/drm/bridge/samsung-dsim.c +++ b/drivers/gpu/drm/bridge/samsung-dsim.c @@ -31,7 +31,7 @@ /* returns true iff both arguments logically differs */ #define NEQV(a, b) (!(a) ^ !(b)) =20 -/* DSIM_STATUS */ +/* DSIM_STATUS or 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) @@ -240,7 +240,9 @@ enum samsung_dsim_transfer_type { }; =20 enum reg_idx { - DSIM_STATUS_REG, /* Status register */ + DSIM_STATUS_REG, /* Status register (legacy) */ + 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 */ @@ -405,6 +407,7 @@ static const unsigned int imx8mm_dsim_reg_values[] =3D { static const struct samsung_dsim_driver_data exynos3_dsi_driver_data =3D { .reg_ofs =3D exynos_reg_ofs, .plltmr_reg =3D 0x50, + .has_legacy_status_reg =3D 1, .has_freqband =3D 1, .has_clklane_stop =3D 1, .num_clks =3D 2, @@ -424,6 +427,7 @@ static const struct samsung_dsim_driver_data exynos3_ds= i_driver_data =3D { static const struct samsung_dsim_driver_data exynos4_dsi_driver_data =3D { .reg_ofs =3D exynos_reg_ofs, .plltmr_reg =3D 0x50, + .has_legacy_status_reg =3D 1, .has_freqband =3D 1, .has_clklane_stop =3D 1, .num_clks =3D 2, @@ -443,6 +447,7 @@ 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, + .has_legacy_status_reg =3D 1, .num_clks =3D 2, .max_freq =3D 1000, .wait_for_reset =3D 1, @@ -459,6 +464,7 @@ static const struct samsung_dsim_driver_data exynos5_ds= i_driver_data =3D { static const struct samsung_dsim_driver_data exynos5433_dsi_driver_data = =3D { .reg_ofs =3D exynos5433_reg_ofs, .plltmr_reg =3D 0xa0, + .has_legacy_status_reg =3D 1, .has_clklane_stop =3D 1, .num_clks =3D 5, .max_freq =3D 1500, @@ -476,6 +482,7 @@ static const struct samsung_dsim_driver_data exynos5433= _dsi_driver_data =3D { static const struct samsung_dsim_driver_data exynos5422_dsi_driver_data = =3D { .reg_ofs =3D exynos5433_reg_ofs, .plltmr_reg =3D 0xa0, + .has_legacy_status_reg =3D 1, .has_clklane_stop =3D 1, .num_clks =3D 2, .max_freq =3D 1500, @@ -493,6 +500,7 @@ static const struct samsung_dsim_driver_data exynos5422= _dsi_driver_data =3D { static const struct samsung_dsim_driver_data imx8mm_dsi_driver_data =3D { .reg_ofs =3D exynos5433_reg_ofs, .plltmr_reg =3D 0xa0, + .has_legacy_status_reg =3D 1, .has_clklane_stop =3D 1, .num_clks =3D 2, .max_freq =3D 2100, @@ -688,7 +696,10 @@ static unsigned long samsung_dsim_set_pll(struct samsu= ng_dsim *dsi, dev_err(dsi->dev, "PLL failed to stabilize\n"); return 0; } - reg =3D samsung_dsim_read(dsi, DSIM_STATUS_REG); + if (driver_data->has_legacy_status_reg) + reg =3D samsung_dsim_read(dsi, DSIM_STATUS_REG); + else + reg =3D samsung_dsim_read(dsi, DSIM_LINK_STATUS_REG); } while ((reg & DSIM_PLL_STABLE) =3D=3D 0); =20 dsi->hs_clock =3D fout; @@ -962,7 +973,10 @@ static int samsung_dsim_init_link(struct samsung_dsim = *dsi) return -EFAULT; } =20 - reg =3D samsung_dsim_read(dsi, DSIM_STATUS_REG); + if (driver_data->has_legacy_status_reg) + reg =3D samsung_dsim_read(dsi, DSIM_STATUS_REG); + else + 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; diff --git a/include/drm/bridge/samsung-dsim.h b/include/drm/bridge/samsung= -dsim.h index 9764d6eb5beb98b5b9427c5c4775c37b24dd6e17..d7877191bad155e877b2812daeb= 81ac0be6f735c 100644 --- a/include/drm/bridge/samsung-dsim.h +++ b/include/drm/bridge/samsung-dsim.h @@ -53,6 +53,7 @@ struct samsung_dsim_transfer { struct samsung_dsim_driver_data { const unsigned int *reg_ofs; unsigned int plltmr_reg; + unsigned int has_legacy_status_reg:1; unsigned int has_freqband:1; unsigned int has_clklane_stop:1; unsigned int has_broken_fifoctrl_emptyhdr:1; --=20 2.49.0 From nobody Tue Oct 7 21:03:28 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 5E2241EB1AF; Sun, 6 Jul 2025 18:26:19 +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=1751826381; cv=none; b=QbHlre1cpDMnnT0gDl3KKtO3MMqkF5WLdtwnO4Q2H4MsOUqcI/aQWxjoiy6E2Lb6gl15Y3m6rIL0PqfpcALXUbj8BA2P0zxOG4KwjCg86Dntgi/6VaLpkO9ARlCYSzpd6Plb3ot2wRcLzz6/u2pezXgWU13L9pglUMO2qmsdENk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751826381; c=relaxed/simple; bh=/yVlBK3lzKHbYCYl0PZiqbYZGWExt3hrCNM7yAG5SKs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PHpMeZlktJ1dyCKkgrH7LLDyb6FydhWpk0ECO6NNqeFKirumqnJ97zSLAxlbAWbWSq9OwfU0aDIptJNohTQua8voOzmc8iAvHH2TOIM5uoInzE9UwT4kDLEF2qkqLyI6om/ZJ3JVKNll+94r3CMlJpvdVbUQx1vUcOI3BJ12OoA= 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=PuuZk7/B; 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="PuuZk7/B" Received: from mail01.disroot.lan (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id CDDE420F29; Sun, 6 Jul 2025 20:26:17 +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 rl7io2hTU7H8; Sun, 6 Jul 2025 20:26:14 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1751826374; bh=/yVlBK3lzKHbYCYl0PZiqbYZGWExt3hrCNM7yAG5SKs=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=PuuZk7/B9sYzIT6Sa12YMRpWqZAaCdVieFegUzi1E4tyKp4RGPNzGK15e/6Z6WVL0 pxI2xevy0jNmx5H8drznvGt89zc6lsNqH0IU24A35OOcbo3xY9Ds9BZ9b/A23IqRh4 r1ij9hUeA0N6kepk0apZ3Q2op24gyf0xLS0LIiNQ7aLZ9PRDLSLkDk7Y8oOCKjC+MP RBKtSHP10g/4zSQfrIlIKlRz19kxgvj8Yx9ZxzHimJWS/uXucTQ4CieMjOILg/Cmnv hgSZB2dMqUClI+XGoA1FV+i8LGHH+KK+a1rOXx9B4uUUIwh41Rhh5iclmJaCS6Hukb qyD4iRGo2CM8Q== From: Kaustabh Chakraborty Date: Sun, 06 Jul 2025 23:55:36 +0530 Subject: [PATCH v3 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: <20250706-exynos7870-dsim-v3-2-9879fb9a644d@disroot.org> References: <20250706-exynos7870-dsim-v3-0-9879fb9a644d@disroot.org> In-Reply-To: <20250706-exynos7870-dsim-v3-0-9879fb9a644d@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=1751826342; l=2917; i=kauschluss@disroot.org; s=20250202; h=from:subject:message-id; bh=/yVlBK3lzKHbYCYl0PZiqbYZGWExt3hrCNM7yAG5SKs=; b=rg0Z6iPqzouiWIlP5bus/OmhjJawqb+W/hjlGRJWv3GSvNiAY+vrpywOhafwiijLkIXX9P0xf 26UKrMhccV4BXBuAKAbT3WgoSNcY87qZ0klfqXZg1Uiqjo3VsDXegQJ 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 0b061ad0ecec158f994846da08fae59f74bfa091..dca3939dd99fa07aee309067b93= e652bc9a9b78f 100644 --- a/drivers/gpu/drm/bridge/samsung-dsim.c +++ b/drivers/gpu/drm/bridge/samsung-dsim.c @@ -157,6 +157,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) @@ -257,6 +262,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, @@ -1037,6 +1043,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); @@ -1045,6 +1052,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 d7877191bad155e877b2812daeb81ac0be6f735c..f0c1e5c5ed490afe0bcfd06830f= 52471710b29ea 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_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 Tue Oct 7 21:03:28 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 03B052BCF67; Sun, 6 Jul 2025 18:26:25 +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=1751826387; cv=none; b=bGfEaJczMjfLprHZ6lYmfL5v02VI6LQsRub3evswrxXwtZCgos34rqEZx71zTQhbTBHo0J5PC5edJ0JdAjnK1tp7GMg3mIefSGtPSLrIJMVvD1zVLup1U+jPZkVD12M9tAETpW9YzJqcmPBOomwLeJ6N2stUngz13LOZsxG6b+M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751826387; c=relaxed/simple; bh=9ukz1J1hpyoS4t+3L56en0gtBgQTrz9vCaRlVq/nDU0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YenxShL1/uGY+AHYwwudAuYe32odI5Qz4d498+g0dyBZV2eaLYzqsX1dPghtvebvLaD4UPYbqVH6dCUtt4VnrSe7LJC1I20LpWlTLPzKbHVWvmDTYuEutHIdRQkhUm735pHUC88sjLP1YcWLnKssuKG3Dad3v7aqRPlYoGQh8lk= 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=I53m653J; 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="I53m653J" Received: from mail01.disroot.lan (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 77EB420D0D; Sun, 6 Jul 2025 20:26:24 +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 O6wthDKFcM8y; Sun, 6 Jul 2025 20:26:23 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1751826383; bh=9ukz1J1hpyoS4t+3L56en0gtBgQTrz9vCaRlVq/nDU0=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=I53m653JSLlMVpKhfXIL/INukUGcP3l2QVTY08CkChgdRyHakBTFGEllc0UYgWNvw utHvMc5FSOQ4Au9v+B795EUIZ7aEUpvlmwLqILHkSiVJ/RKfJGhMPQCyuPv7Wo6rtD 8Cs7v6RdxYTT4rSrnuT8c7Y1+N9NMu5astMSqYEU1O56m0GcyB7IqQ60Jg1if2CFNJ zry3aFWerisutCkc4nBMS0feUSrCZi/SZvJYetOcrWAYhtkCj4uVlVlK3sosvS+LJI OgiBxh+DmNVvsjJ8qO3XioTZzmHlYQGfYEtB0tl43my/RtL+xfStXGeYqxnEuP9KmH lFBlVBY+X7b8A== From: Kaustabh Chakraborty Date: Sun, 06 Jul 2025 23:55:37 +0530 Subject: [PATCH v3 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: <20250706-exynos7870-dsim-v3-3-9879fb9a644d@disroot.org> References: <20250706-exynos7870-dsim-v3-0-9879fb9a644d@disroot.org> In-Reply-To: <20250706-exynos7870-dsim-v3-0-9879fb9a644d@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=1751826342; l=3620; i=kauschluss@disroot.org; s=20250202; h=from:subject:message-id; bh=9ukz1J1hpyoS4t+3L56en0gtBgQTrz9vCaRlVq/nDU0=; b=8Q8sNrH93Z5Tn1bADFeyu70w3ruBWFrgwoNwT+m6XOLoQiLsiE4t/o8kUymdL8qVp9Rih5rpS ps6UI9M6CMWCuLb+v4IjPPdhp1gPTNtxnPkJ6XA6FcsYy2re1A/84yg 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 dca3939dd99fa07aee309067b93e652bc9a9b78f..84af24171b6856cbcf95b9077b9= 97ee587fc0409 100644 --- a/drivers/gpu/drm/bridge/samsung-dsim.c +++ b/drivers/gpu/drm/bridge/samsung-dsim.c @@ -418,6 +418,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, @@ -438,6 +439,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, @@ -456,6 +458,7 @@ static const struct samsung_dsim_driver_data exynos5_ds= i_driver_data =3D { .has_legacy_status_reg =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, @@ -474,6 +477,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, @@ -492,6 +496,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, @@ -510,6 +515,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, /* @@ -1117,6 +1123,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; @@ -1157,9 +1164,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 f0c1e5c5ed490afe0bcfd06830f52471710b29ea..62c07952bd00f9c2c287a6a998f= 0e243dd4032a9 100644 --- a/include/drm/bridge/samsung-dsim.h +++ b/include/drm/bridge/samsung-dsim.h @@ -61,6 +61,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 Tue Oct 7 21:03:28 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 3019529E107; Sun, 6 Jul 2025 18:26:34 +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=1751826397; cv=none; b=VpNha+Qh5UnjP3yWvexHmmH502M7EtNotigPfyuKQbvOaThE/DzV6m+/tzoDaVQKyYe1G8ZpFJmqsHOW3H7ScM9x/JQ8vpKsZ4t8y7ykod8TnV1Foid+WQcsUS6CMGdSn6LAQ05Qj3xvopeuzumVNyCJTVKs+wzLh9IcnSYOf1c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751826397; c=relaxed/simple; bh=sezB2gCswpH+5X4wtjHO7EgIJxpR2I20H2UdxlxKbhw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=a3uHnQtZNb99pcdyyYGxUB996g3tLT0wCsTQBRCGQMrJ+vHbV19IFuGfzDfiVkDzld96lz1FlXOnwo5MIm2WOoXdKI3z21MXvZGq3y5iFLo+EZ4MceUZ6b2d5askYLbQ7IXAugbfv1uPfAHrjZje0NuRHXr+DegeoTPkN30R9tc= 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=JtSlV/sm; 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="JtSlV/sm" Received: from mail01.disroot.lan (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id B3B6B20D0D; Sun, 6 Jul 2025 20:26:33 +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 TDJ92r2bbDG9; Sun, 6 Jul 2025 20:26:31 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1751826391; bh=sezB2gCswpH+5X4wtjHO7EgIJxpR2I20H2UdxlxKbhw=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=JtSlV/smLZG2bl5+B7mmihBHGo3+fJ9roKgh7SAbzQg+sTIr2YJF6tsTg+wKIxKCQ LFxpjF/QmnhMX9RulB5av6iNruuGqHsWq2OqJXD/DorxmY5hdID7qQGC7ydWPSY7iX hv6ZHHJ3FXWNCi4mPv9x2rqI4xL566kxQYEgiKhfijwcfu2Q0NYkhtTiMIHHLM/xKZ yTJdcU1InI+wfvWlRTfoZii2pvhSlYmgysfdcrocoEQUc0JcJp1QVQ9BoJxk8LX7CS lbMldvVv4PYw7gDZVHZ36dj3r5kXHtWxovEAPaH+ERaohRJVcatNSq51+1F0gN68V/ rfuw8fEdMLYkw== From: Kaustabh Chakraborty Date: Sun, 06 Jul 2025 23:55:38 +0530 Subject: [PATCH v3 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: <20250706-exynos7870-dsim-v3-4-9879fb9a644d@disroot.org> References: <20250706-exynos7870-dsim-v3-0-9879fb9a644d@disroot.org> In-Reply-To: <20250706-exynos7870-dsim-v3-0-9879fb9a644d@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=1751826342; l=7642; i=kauschluss@disroot.org; s=20250202; h=from:subject:message-id; bh=sezB2gCswpH+5X4wtjHO7EgIJxpR2I20H2UdxlxKbhw=; b=YSDbnyRo0JWyo+i/N5TLD3qZDifxZYYJqAWtDasZwYC0zVYKDFJ+rxo+zzpzNstU1wyCrIZaL h0toq+NKBccCePdEUeFSlzI9StbtFd9Fxn4PqVCrreNGnRPj9g4gFhb 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 84af24171b6856cbcf95b9077b997ee587fc0409..199c7ace78bfeb01d3ef9a841fe= 9339c0fb9f478 100644 --- a/drivers/gpu/drm/bridge/samsung-dsim.c +++ b/drivers/gpu/drm/bridge/samsung-dsim.c @@ -46,17 +46,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) @@ -421,6 +417,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, @@ -442,6 +443,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, @@ -461,6 +467,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, @@ -480,6 +491,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, @@ -499,6 +515,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, @@ -518,6 +539,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 @@ -721,6 +747,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; @@ -754,15 +781,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; @@ -866,11 +895,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 62c07952bd00f9c2c287a6a998f0e243dd4032a9..b1e64c7f993189879d9549f147f= 7eebdf3b7ded4 100644 --- a/include/drm/bridge/samsung-dsim.h +++ b/include/drm/bridge/samsung-dsim.h @@ -64,6 +64,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 Tue Oct 7 21:03:28 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 A8F9929E115; Sun, 6 Jul 2025 18:26: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=1751826406; cv=none; b=PU7+rVEc5iXVwFEjWUqbP2U9UTyIRLNROecgDEthuepSD4iUGaLiyb5BfPlgVs/+2AWI9ac7hvFE/tKh96gle9paah5+5DCPYmOrT7ttBQQ58TlL5eyk6GyFJuLOnRxOT9X7bKQrm0Xa+oGOcNY+Sf/Z7fcsyu7IT7xseMAIBC0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751826406; c=relaxed/simple; bh=bjtJIjfPVA1dazouYBClK8TP5EhzRm7A0VApH2M0W8E=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CiDYFYNGkowzJMEpULvnTHHetbicwjcXG5mBeJbx0+8KZR7IkxD2051eW14oeanFlnnk8Q5j3R3si/sq/WSb/c2Il0jAS3UdRf5ptNy/0lkGGJGVquidDnP3ncWR33spXP3VuobiGsfpt4Oe9yTpI+kCamKoikqIVj3wWYHpIQQ= 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=L30N+vdI; 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="L30N+vdI" Received: from mail01.disroot.lan (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 3EE9E20D0D; Sun, 6 Jul 2025 20:26: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 PmfshaQaDONC; Sun, 6 Jul 2025 20:26:42 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1751826401; bh=bjtJIjfPVA1dazouYBClK8TP5EhzRm7A0VApH2M0W8E=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=L30N+vdI3ANTrR7nByu59YwV8jshN2raZXMQ5IIDJi1UwxXyutOniHGZpgdOyrELo 8+0INjjnu+VXVPpIKHjXVzuh7ZphDzeHXdZLTZx03b7B1L86gZd/2g7FNz6golVkv3 cgwH1O3pkb+vbM88NFusxLM9koyQ/4mEYx4RgE+D0/Vitp6vYUADfNbUTOhsiBfxOp 95/H08BQJGSHL6ABF0iBhPdrbhKGZx15TdJ+yGFbdLTvqocqxHjDcJwJUKd4ESbCZq E8ux5qsVaR5hn0YtnzcSGQWI9982elldjeELp29s9wFGbrpM+ddQ0NAf9Bp8KTF/FN Q7heXLhIJiWCA== From: Kaustabh Chakraborty Date: Sun, 06 Jul 2025 23:55:39 +0530 Subject: [PATCH v3 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: <20250706-exynos7870-dsim-v3-5-9879fb9a644d@disroot.org> References: <20250706-exynos7870-dsim-v3-0-9879fb9a644d@disroot.org> In-Reply-To: <20250706-exynos7870-dsim-v3-0-9879fb9a644d@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=1751826342; l=4240; i=kauschluss@disroot.org; s=20250202; h=from:subject:message-id; bh=bjtJIjfPVA1dazouYBClK8TP5EhzRm7A0VApH2M0W8E=; b=TjmdG/eOGkbo2pOMCnBxjC5jxuc7P2/cE+slWoPjFkMVtfJYptuBnDt55XEUmZQm99ZpmS/k2 9E96HgVYhoNB0HfFAQJWyClc1nc2LFhZ4Iy1DCePH2fk9QlB+fMds17 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 199c7ace78bfeb01d3ef9a841fe9339c0fb9f478..89ece3e6f200c710e4c9204efd8= 4c84b9260456b 100644 --- a/drivers/gpu/drm/bridge/samsung-dsim.c +++ b/drivers/gpu/drm/bridge/samsung-dsim.c @@ -125,9 +125,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 */ @@ -423,6 +423,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, @@ -449,6 +450,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, @@ -473,6 +475,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, @@ -497,6 +500,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, @@ -521,6 +525,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, @@ -549,6 +554,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, @@ -1041,6 +1047,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) { @@ -1067,7 +1074,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 b1e64c7f993189879d9549f147f7eebdf3b7ded4..7f6d353f34af14f156e864c624f= 6eb980296c32d 100644 --- a/include/drm/bridge/samsung-dsim.h +++ b/include/drm/bridge/samsung-dsim.h @@ -70,6 +70,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 Tue Oct 7 21:03:28 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 3BFEE1917FB; Sun, 6 Jul 2025 18:26:52 +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=1751826415; cv=none; b=YXe0gXPra62T/8egU3sVg3PxubPWlQ9uUeTPiXKcrzfcioFogDgrS0c3nFeifuTqd6rD6JIFFYbBczyWBybf+Ax+kqyeYGH6mf+l+LWnGX2S2yT1ffhlKLuiZDElzo2IRRmgTyesubNgSsVbJ5B8QV5n3z4NvxUHGMbEAYtp0eA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751826415; c=relaxed/simple; bh=TFs9OPHOosFYWTnp2fAs3vWT3qirSqqYVvnyedlNNXA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=d6Dx9c/zZvUOtb0XD9p9kWXGlhk0A4Qvt49PId0kCm5giTGpPYAuZAfXDKjmGX10/6NaWAiSt8Jj2njFCqUmo+5+tHZV52YTjpqeq88nAqguoirE+ecK9GUXCKqL9DEq2Yioha+L5yz6iD+89CrvNnFzrLTpEoxCMeH/3IUq0KI= 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=XyjsH6to; 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="XyjsH6to" Received: from mail01.disroot.lan (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id B3DF520D0D; Sun, 6 Jul 2025 20:26:51 +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 ObE6sqDiy88z; Sun, 6 Jul 2025 20:26:50 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1751826410; bh=TFs9OPHOosFYWTnp2fAs3vWT3qirSqqYVvnyedlNNXA=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=XyjsH6toNrhKHSJBpqkYjmfYDV3zRzavQExYF6ObhrO8Sfm5tdKXhIZTWDJ/my5nT lg0GOLOtM87RdYAuhIz3+PhvqM31QkDQbEb3dpj1rWKUXaNys7NdL0rrasQTRF4Uko HK0i/JVpKgqXK1b/Fj0chYwQ9rmrFO3ZMFb21g+LUP2FIelgv1qvbieVrL6CUUGVf3 /Hg9KgIB05Gp2pHbz5iiQRr3MQKpFmZdPp1rW+BNaYZcEn/pfhda2D87TpXlnislce X/TejSFJIOyKRysEOqOuSpdjI/eo3a0cqRmjSyRSg38sTc7CTZeATYN4WJGmP+8XNF r0srSAnPVXwvQ== From: Kaustabh Chakraborty Date: Sun, 06 Jul 2025 23:55:40 +0530 Subject: [PATCH v3 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: <20250706-exynos7870-dsim-v3-6-9879fb9a644d@disroot.org> References: <20250706-exynos7870-dsim-v3-0-9879fb9a644d@disroot.org> In-Reply-To: <20250706-exynos7870-dsim-v3-0-9879fb9a644d@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=1751826342; l=3602; i=kauschluss@disroot.org; s=20250202; h=from:subject:message-id; bh=TFs9OPHOosFYWTnp2fAs3vWT3qirSqqYVvnyedlNNXA=; b=YecbciqzmlT5nvlVtRZ1Gqrwf3JtgFBXIm8NbKbtE2yVNbsTewE64z7HQ5po+/oJwDFSqIyPC mY6gJJHwGyTAvJ/ytq9PGoz9ZSV8lDHrjkevGnbdwhWdG4gAavLMHhN 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 89ece3e6f200c710e4c9204efd84c84b9260456b..4ef052ea819cf9fdec9f72c920c= 04ecd4469e90c 100644 --- a/drivers/gpu/drm/bridge/samsung-dsim.c +++ b/drivers/gpu/drm/bridge/samsung-dsim.c @@ -87,7 +87,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) @@ -417,6 +416,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, @@ -444,6 +444,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, @@ -469,6 +470,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, @@ -494,6 +496,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, @@ -519,6 +522,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, @@ -544,6 +548,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, @@ -952,7 +957,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 7f6d353f34af14f156e864c624f6eb980296c32d..9d11c3e39fe532b83d4bc3d7f95= 0645bbb8970b3 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_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 Tue Oct 7 21:03:28 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 76C061917FB; Sun, 6 Jul 2025 18:27:04 +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=1751826426; cv=none; b=s0dk2gJsS96pTPBhuY1WvjafPIP1ntY/KBLePKYq8WJ+bbBCpbsCO3Uw/LEYheaqIgjCVM34DzutROq9G5Yj7Rb7EOl2PRiZgDZ3jL1Uf4ZdRgKSJqSnbxFgHPKxGVOhhBOp+Pkd16a4Dldan89rxEGjPHOhoknNUGhioyTpRZY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751826426; c=relaxed/simple; bh=yV1S3LkR7pDpOCA3qlLl29yKKSgYL2avi9WcKPGccBI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PdT3VXZTFhakZxkXeCynaueqgLSY/lQluDVpXcfuFUXiFE/qhXVm4CBTGe7qiO/E2CwhaKKREepeCt9nIDalywz3bUi4SK2t/pEHgHmJzrWFD9D/Hq7Hu7rFUJp8RGmxxg4mjNS3IXy6UqzaSpNOwlYkC0PTkrrivxg5LNQqnwA= 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=SnMoag0U; 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="SnMoag0U" Received: from mail01.disroot.lan (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id E501C20D0D; Sun, 6 Jul 2025 20:27:02 +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 lGao_ixhMOOV; Sun, 6 Jul 2025 20:27:01 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1751826421; bh=yV1S3LkR7pDpOCA3qlLl29yKKSgYL2avi9WcKPGccBI=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=SnMoag0UteSaucE+3VMaTczLuOI1o77XlHmWMS9getHKDIPu5Z645XUI/+AgM0hPQ IeeQqPzI1S1vhY86Wv56C2i5zCcwgT42/7Prgr/NASM4Vy2ukxhCCvfhZtPNSXCeMZ 5SADlyRMVF0zqhka+X6OKuqEIcehZkq3akjvaxr33h8xBfirBSxSNcetmw4ghK19ax MYG88UIdbHrP/RlMQJybt4/l4sCA5Fn7VDw3/0eKejgu6ap49RkdDs2bKdjrMJ989o q43GFEF34rXumWRP1IfiwyVsbJuoZWsYtTBoyRaQyLL9BT7lsKTMx+DQHDQyjT2L7/ p7GbNKrDLODmw== From: Kaustabh Chakraborty Date: Sun, 06 Jul 2025 23:55:41 +0530 Subject: [PATCH v3 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: <20250706-exynos7870-dsim-v3-7-9879fb9a644d@disroot.org> References: <20250706-exynos7870-dsim-v3-0-9879fb9a644d@disroot.org> In-Reply-To: <20250706-exynos7870-dsim-v3-0-9879fb9a644d@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=1751826342; l=4314; i=kauschluss@disroot.org; s=20250202; h=from:subject:message-id; bh=yV1S3LkR7pDpOCA3qlLl29yKKSgYL2avi9WcKPGccBI=; b=vuJCOthkg2kn+REcxDKgtNYB7C1fv0oBJLRMxyMGVr1fd9vwsqah68ApQ/l4mt2R77Px2CAsl VMoFvsFCOYAD+6kBVF2Cemr8LN9HOoNHQkC1fiNHBm7YZvakzKAxm3T 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 4ef052ea819cf9fdec9f72c920c04ecd4469e90c..d67fb857d0359b813c268a77c2a= 0f2c3574d6dc2 100644 --- a/drivers/gpu/drm/bridge/samsung-dsim.c +++ b/drivers/gpu/drm/bridge/samsung-dsim.c @@ -191,9 +191,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) @@ -423,6 +421,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, @@ -451,6 +451,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, @@ -477,6 +479,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, @@ -503,6 +507,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, @@ -529,6 +535,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, @@ -559,6 +567,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, @@ -710,8 +720,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 9d11c3e39fe532b83d4bc3d7f950645bbb8970b3..000ada3ece4d61c61412be550a8= ccc13bd3f777e 100644 --- a/include/drm/bridge/samsung-dsim.h +++ b/include/drm/bridge/samsung-dsim.h @@ -71,6 +71,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 Tue Oct 7 21:03:28 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 7DB6329E106; Sun, 6 Jul 2025 18:27:21 +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=1751826443; cv=none; b=NJXk/BOzWhTole9I3LxcexmbeL5NC8WNP1nbM1i7zLAHtwJEbOtsY8B1NIo6D1nL0qfZ0oq4QvW5OKe8ZNTGIU+waOYIifmNWoH9UkJ1x1XlZWrFFdBBIro1Tgj8ToDw4tnjcjPsq1Q00UtKGpWL1oLqSjbRSgFZpqRQicUB/cI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751826443; c=relaxed/simple; bh=T0VIq57CdMsuApiqUpsp/pDwUjngV96YO/wTX94idkA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=G31LCDJkoqVcoZpo6ToOy3Ezv3GzbPYCiipskfFMbSeOlpRIV/cajVcaJExYDPh/YvIM3pnBY7eGrzrdtH3DKzQRA6eRbIl1qPtIUJsUIqjnRpGxg4dsuweBM/GD0493rhvyHfKdUUpAtjPVb8aL8ohxisQRVS0F8UHD3BeV44k= 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=fqumIqkt; 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="fqumIqkt" Received: from mail01.disroot.lan (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 47B6025C79; Sun, 6 Jul 2025 20:27:20 +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 spAyo9RSzySy; Sun, 6 Jul 2025 20:27:19 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1751826439; bh=T0VIq57CdMsuApiqUpsp/pDwUjngV96YO/wTX94idkA=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=fqumIqkt0m9woqMuU9mAmmDpUD5m4A5SsPNJ/YROupXpiwyPeuTeONDqmcckpwaay RXhNmW4Szxc9gtD8CavQjH4eF/lc/jK+i+nQZgS8QNPOv3QNJEmHhG+l4D7kTYxnwE FgH55CcXUV7V2eK1TitccxL7dLdyOkpIERFhiYaN/Oes6p1+YSry0pTsm3PJcko9WV vbIsIy196otchv2oShUBvhO31KImkEY/bvluzt3bFsV3TmedTpmwE2lqZfs/puuHp4 o75oxT7PvZckABc/tVSCVth95M6/4ndrEJ9Er0m+ftugl8SEeRYb5m5kv3Nc5SZaFD Eqkrsko/B6vww== From: Kaustabh Chakraborty Date: Sun, 06 Jul 2025 23:55:42 +0530 Subject: [PATCH v3 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: <20250706-exynos7870-dsim-v3-8-9879fb9a644d@disroot.org> References: <20250706-exynos7870-dsim-v3-0-9879fb9a644d@disroot.org> In-Reply-To: <20250706-exynos7870-dsim-v3-0-9879fb9a644d@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=1751826342; l=3590; i=kauschluss@disroot.org; s=20250202; h=from:subject:message-id; bh=T0VIq57CdMsuApiqUpsp/pDwUjngV96YO/wTX94idkA=; b=wkbrLglZn9guumLsfLqeKxrkKIcwcP7q1UxaLr6P1BkMEskvyaJCLgQZIQYarnlb8Dm1Tf/pE /15aBS0mk0pD9ctV2tCTnhgls1ah0iEU3I9GOPxULw3kN2gItjfRIFh 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 d67fb857d0359b813c268a77c2a0f2c3574d6dc2..fb2cb09cfd5a4f2fb50f802dc43= 4c0956107b4e9 100644 --- a/drivers/gpu/drm/bridge/samsung-dsim.c +++ b/drivers/gpu/drm/bridge/samsung-dsim.c @@ -35,7 +35,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) @@ -415,6 +414,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, @@ -445,6 +445,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, @@ -473,6 +474,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, @@ -501,6 +503,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, @@ -529,6 +532,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, @@ -557,6 +561,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, @@ -760,7 +765,7 @@ static unsigned long samsung_dsim_set_pll(struct samsun= g_dsim *dsi, reg =3D samsung_dsim_read(dsi, DSIM_STATUS_REG); else 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 000ada3ece4d61c61412be550a8ccc13bd3f777e..04ed11787bbd22503f7221cad1a= 491a4e5e66781 100644 --- a/include/drm/bridge/samsung-dsim.h +++ b/include/drm/bridge/samsung-dsim.h @@ -65,6 +65,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 Tue Oct 7 21:03:28 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 BEB352BCF45; Sun, 6 Jul 2025 18:27:33 +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=1751826455; cv=none; b=F+m0UvFszOy5DwUaUBKQ7A5YoRASqfcilcD1vBOz50nkjKp3xu/xLg85IV2AMe3EzRjr9zY0jRoOyiVxUjP4Ovt2jORQUt6rb3nUXF2dU/frsLVGb4fl/H+afQmBgKgEiTRzv4oHluia4TUYl44HvcE0E1TSCMqbET2VuRPnMEM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751826455; c=relaxed/simple; bh=/7UL4ms+gjpMt6uhXR9N+rIp3nhF1KO7BfGN1Lj06lU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Jugf0hSPTKoFNV50QKrWIu3O6J1txwXJcN/D7H3KFcD6O1HZ33IVZnMny0sidDEFupUnqPiaQtfrab269SdVAgrrjpFyBehBXY4NgLi5ilFJNCWG5o2SmiTesLyJ2AIssmZdvhM0mc+wnw15Ux5BaRMWXG8bM8UluyhhQH0ZgOg= 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=SqP4oBgx; 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="SqP4oBgx" Received: from mail01.disroot.lan (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 8463E20E83; Sun, 6 Jul 2025 20:27:32 +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 sPeWxYDZmk0M; Sun, 6 Jul 2025 20:27:31 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1751826451; bh=/7UL4ms+gjpMt6uhXR9N+rIp3nhF1KO7BfGN1Lj06lU=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=SqP4oBgxniiirLF4lByVeRwrrXqzYc9CwMgBXsG2mqedb9SmIU8Gm5REq7mUz2hGu jnRai8J2RZyli5gMfOoLRX483+N9EgevCOpwcE2wnJkNKoyfvNv9vOuP7mLLWJYXyo qiqvHOun77SnRqtXcvHZelVrgeT8xOQmUpApQtJkPODdGz2VbtbaUfwFquKInAUDv0 x+VsllVmxQjPEe6goODzgOZA6DALHU/7CNXZ1y80NQ8irv9HLoxmDfcOZ/So5Un94k k0L7jv70lV+KMotrYasVgoOpLX1OKT8WSG7lpu7rwkGyOKKTz6yKmB8YbtvYq0Mmwc wG/H4BMo9jMFw== From: Kaustabh Chakraborty Date: Sun, 06 Jul 2025 23:55:43 +0530 Subject: [PATCH v3 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: <20250706-exynos7870-dsim-v3-9-9879fb9a644d@disroot.org> References: <20250706-exynos7870-dsim-v3-0-9879fb9a644d@disroot.org> In-Reply-To: <20250706-exynos7870-dsim-v3-0-9879fb9a644d@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=1751826342; l=926; i=kauschluss@disroot.org; s=20250202; h=from:subject:message-id; bh=/7UL4ms+gjpMt6uhXR9N+rIp3nhF1KO7BfGN1Lj06lU=; b=TS3mOOgp55WLg7w/Tz0GSENrnAXwnPXDbPcHk6ymGFpCUOyoOZYAcucvh+T5uKf5Bd6NiFGGr Z/fpLs8iRdeDvXfNfF2dml/XWNlAdVd1wL8HX1+9M/cVZTc5tEvoD7N 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 fb2cb09cfd5a4f2fb50f802dc434c0956107b4e9..4b49707730db76aa8fd3ab973b0= 2507436750889 100644 --- a/drivers/gpu/drm/bridge/samsung-dsim.c +++ b/drivers/gpu/drm/bridge/samsung-dsim.c @@ -755,7 +755,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 Tue Oct 7 21:03:28 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 89F9B1EB1AF; Sun, 6 Jul 2025 18:27:48 +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=1751826470; cv=none; b=lppIutCDT837tMWq4rhLECTeI+RmCrcL2TVJtQ3btx3e+jR3SdzYDHeUZYWOCOshhS2G4/ep6g8VY0aHtqjwHHt/QR5KxBSafmpaJ4NJax2dbMdPTL9yc9rGxf1vl+OYy/zI0ikKZFDA7Qxf6TR2PaoM0KPUNJDT9JuXouDoJ3o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751826470; c=relaxed/simple; bh=uRAQPW/XAX0Tqz1bC3rL04fGoa2FbtZRBUYo1jwG2sk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=u4axR2kegPTIJt/BiXD827swf0+eTSMz7uLtxB96XIDuKVRy2Z0oQVKug/q4OmercV/oWvCXxHgS0skSeECm/4nHZ1z6YdN0tmKYikH09jRhFxvjzHR6qlh+bt/IYOTpHvUQOu+ub5M9RqM7/ii9mAEYCrNe4FazgyLID67FKy4= 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=ikDWFnrR; 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="ikDWFnrR" Received: from mail01.disroot.lan (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id E01EA25B63; Sun, 6 Jul 2025 20:27:46 +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 fW7Epcihj-kx; Sun, 6 Jul 2025 20:27:45 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1751826465; bh=uRAQPW/XAX0Tqz1bC3rL04fGoa2FbtZRBUYo1jwG2sk=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=ikDWFnrRp9CZp9CSxDIqSl8wrdd+p32unXN9XSr8Hs2/+BERwhUU2Y6HgqNac+xIS GDG/SCVXCSgD85Pk2MTE189VpvDyB84h5F1dbz9AOdG79RuLVD+AIWAEkAzYKO5XqV xB3z6brS7GfJ+iG9uNpc7mhOgMeEt6Ta5wpcciTdfakr0T+FGg5PgWTpX99xzrX7oS PHafCYawRI/UvYzDfryfbFfmmvEXwMd1p6SryHNyD/BEdFsWPVsaz5JeezTsLOkEwW J9xCjL31xshQ8nh6Hcjmr25b4GM+nfV2SD5SJ/01HBD9lcHuE+V+DpVnfRqla9NGQU 2i1RZiv8/cc3A== From: Kaustabh Chakraborty Date: Sun, 06 Jul 2025 23:55:44 +0530 Subject: [PATCH v3 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: <20250706-exynos7870-dsim-v3-10-9879fb9a644d@disroot.org> References: <20250706-exynos7870-dsim-v3-0-9879fb9a644d@disroot.org> In-Reply-To: <20250706-exynos7870-dsim-v3-0-9879fb9a644d@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=1751826342; l=8008; i=kauschluss@disroot.org; s=20250202; h=from:subject:message-id; bh=uRAQPW/XAX0Tqz1bC3rL04fGoa2FbtZRBUYo1jwG2sk=; b=qlKkcdPw+G+E3adxMetLXhT8Xm4F1vFtKcC0Migri0bTuR/EVz9jrKq0lOz87UCkFevXsE0PS NVtebD/ujinAdhvjwvA114/bcoRI0Se6tGZQ7/N670vgO1pn60p5d63 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 4b49707730db76aa8fd3ab973b02507436750889..b6b3bbcbd0f438e5e1d3faf18f8= c2d532a4ecc93 100644 --- a/drivers/gpu/drm/bridge/samsung-dsim.c +++ b/drivers/gpu/drm/bridge/samsung-dsim.c @@ -219,23 +219,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_STATUS_REG, /* Status register (legacy) */ DSIM_LINK_STATUS_REG, /* Link status register */ @@ -408,7 +416,8 @@ static const struct samsung_dsim_driver_data exynos3_ds= i_driver_data =3D { .has_legacy_status_reg =3D 1, .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, @@ -439,7 +448,8 @@ static const struct samsung_dsim_driver_data exynos4_ds= i_driver_data =3D { .has_legacy_status_reg =3D 1, .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, @@ -468,7 +478,8 @@ static const struct samsung_dsim_driver_data exynos5_ds= i_driver_data =3D { .reg_ofs =3D exynos_reg_ofs, .plltmr_reg =3D 0x58, .has_legacy_status_reg =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, @@ -497,7 +508,8 @@ static const struct samsung_dsim_driver_data exynos5433= _dsi_driver_data =3D { .plltmr_reg =3D 0xa0, .has_legacy_status_reg =3D 1, .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, @@ -526,7 +538,8 @@ static const struct samsung_dsim_driver_data exynos5422= _dsi_driver_data =3D { .plltmr_reg =3D 0xa0, .has_legacy_status_reg =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 1500, .wait_for_hdr_fifo =3D 1, .wait_for_reset =3D 1, @@ -555,7 +568,8 @@ static const struct samsung_dsim_driver_data imx8mm_dsi= _driver_data =3D { .plltmr_reg =3D 0xa0, .has_legacy_status_reg =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 2100, .wait_for_hdr_fifo =3D 1, .wait_for_reset =3D 0, @@ -2021,7 +2035,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)) @@ -2045,23 +2059,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); @@ -2134,7 +2136,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 @@ -2150,8 +2152,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) @@ -2164,7 +2165,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) { @@ -2172,11 +2173,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) { @@ -2187,8 +2186,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 04ed11787bbd22503f7221cad1a491a4e5e66781..eb9fdbab1b34074923daa0aa044= 3c33c5b99ae42 100644 --- a/include/drm/bridge/samsung-dsim.h +++ b/include/drm/bridge/samsung-dsim.h @@ -58,6 +58,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; @@ -104,7 +105,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 Tue Oct 7 21:03:28 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 E13EC29E11D; Sun, 6 Jul 2025 18:27: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=1751826481; cv=none; b=L6mpRksUoOmJdFQk+zx48FDzQ6urkDIhYYvWR7q4CshXUDWKUzjt1j2qniPOCmbu7ty/Q/wilLErwxTskZAvH0avZey92YTfT4Jh2wq6RmZvC01OzaUwOD1VwUBX7Ls2F12pjT1enbBLU3MDF1dWRjMmNNgfGvOvgsT+sqnb6ig= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751826481; c=relaxed/simple; bh=HC29jIb+LJXzNsT5n2KQRnRrUJPZnyBZMVkVyDKqBR0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=flMHkSdx8EXO0OMHEPzsOnfEciDWs8BwLiux/q6AI3mUg6C/wzYti+r4sX/WsQ3M7rGCAQ012zh6Awug1ZVZII44dGAqK2KPckCrxArx+f5mwt8+1+wiDdUIwVYcY1eklx/RMdCkzOORPXBeyM3NNnCuwNqyX8Ii14vM39fnLxM= 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=MmD5zOTl; 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="MmD5zOTl" Received: from mail01.disroot.lan (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 90C4420E30; Sun, 6 Jul 2025 20:27: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 EBRF9vHUDJv3; Sun, 6 Jul 2025 20:27:57 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1751826477; bh=HC29jIb+LJXzNsT5n2KQRnRrUJPZnyBZMVkVyDKqBR0=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=MmD5zOTlQUOxZePBVy0kXTSIMhhdYy7n6YIYdfviXEoXs23qo8YkIc8OC5AWaeMy8 zvJo6pJMcKdTUWc7Ss81LDO7odeCUSH4xq01Y9pRBIe22Dp8bI1zbFI6q4CFxFbX3E i7bdQCg18pdnICYqbtXj82Ax5sVCXhQFIiLk3WwJFE7L7YpZAS11v6IBaoZm/jBb25 opOV40NcH+kvzpO5jodfgAacQiFYes7inJamL5kx8ZmJR0f8PDTwOBi0IDPlOgesc6 T4VfTOSnT38c5eGhB/kiY/Ca4Ztie50QmRjfCqsdfFKaMxX4GZQKgQzoRrIM4h8om2 yAOshPthlFJgg== From: Kaustabh Chakraborty Date: Sun, 06 Jul 2025 23:55:45 +0530 Subject: [PATCH v3 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: <20250706-exynos7870-dsim-v3-11-9879fb9a644d@disroot.org> References: <20250706-exynos7870-dsim-v3-0-9879fb9a644d@disroot.org> In-Reply-To: <20250706-exynos7870-dsim-v3-0-9879fb9a644d@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=1751826342; l=1787; i=kauschluss@disroot.org; s=20250202; h=from:subject:message-id; bh=HC29jIb+LJXzNsT5n2KQRnRrUJPZnyBZMVkVyDKqBR0=; b=whHG90/xE0mgOXwSxWFwi4YmHLukJm3JjyYoCmZuuMXVgIyxa9aGf1Aw+2jqE1ia4/Na45iGy NfCu+wNp2UXBgeEa7IP27ch3ebR+8N2lX/uLcV2ZVmBwyzaynoCCASf 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 Reviewed-by: Rob Herring (Arm) Signed-off-by: Kaustabh Chakraborty --- .../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 Tue Oct 7 21:03:28 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 867F929E11D; Sun, 6 Jul 2025 18:28:10 +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=1751826492; cv=none; b=NkLMIwZ4oom+aoH4y4gRFeMI/xtm3s50v1htXM1sjG5M2/8u6tmzIGqLaK6bycZpMTBC+rtBmZwytMd402Com5ridJvgUE6IIinPxFAJHKm0frWoRPpzmKAv90ntkhA7ERc5fXRvnMYhITA1FyER7KRbhmmoV2V3DgKGCqeHBok= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751826492; c=relaxed/simple; bh=rdvOHTwEYMIGYf2BU402AK0xb5Ny1TbepuIZM7PW2P8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=TyOotWXVaQiWt7BYoCX0dAp+yoeRAM6oGR20lQmJg+5pqFaG6JR8sHAPJdyidHGaDU1cWE0lp5UP5/ig1dUGdtwVPEi0grQnM9G/+VE1g7bt4FqG3y02Lxw7ay427Jiev1tWJ6kFGNalBcfyZUEz2ijCyUDBxAdZWG/c+1Rbbg8= 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=cOem0uTu; 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="cOem0uTu" Received: from mail01.disroot.lan (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 48D7125B63; Sun, 6 Jul 2025 20:28:09 +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 ZOZ-bn7qsTrC; Sun, 6 Jul 2025 20:28:08 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1751826488; bh=rdvOHTwEYMIGYf2BU402AK0xb5Ny1TbepuIZM7PW2P8=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=cOem0uTup6Eypof+O/hS+s6uh0iz+oE+q7gLJ2Kmc7FaKDLOcpiAMQYuiU0f3V8fP YB6gdXaq+C6gIR6gMoFtHCkRXJEJetUkuk6CpGEGkP8+dGKR+D71Z14k1dR6PQWVxC ZymCpQP6HIu352uVrhcfzyns201XUjYeoNv0/n06GJLJZChg6W9GPrRWc4aYO/8Tfe ssR4JDaeZJX47MMje77chCg+QiRHUw1rXIgriKN9cqaEEeuuUYyNX1qf5Y2JJo3Wx+ 2dyUjxObZwT7aO9kAQojBlUsA1Otlnog9qLWekLA30wJFr9FfbmldMgcpjZWAsqoRE 6EfwiR5Pocb1g== From: Kaustabh Chakraborty Date: Sun, 06 Jul 2025 23:55:46 +0530 Subject: [PATCH v3 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: <20250706-exynos7870-dsim-v3-12-9879fb9a644d@disroot.org> References: <20250706-exynos7870-dsim-v3-0-9879fb9a644d@disroot.org> In-Reply-To: <20250706-exynos7870-dsim-v3-0-9879fb9a644d@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=1751826342; l=4847; i=kauschluss@disroot.org; s=20250202; h=from:subject:message-id; bh=rdvOHTwEYMIGYf2BU402AK0xb5Ny1TbepuIZM7PW2P8=; b=eocA6E3lZ1Ho6yUG9/Hdx1mmN2ceovg/v6WUkS/EpfgCDxtUipMyXURQtBjFWeNSmaI2O4Qkf KScS0VbdFYhBc8FzqbwqKZ/YliTzUNo+L/k4MEx5YvD89+b9UK5Jv0q 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 b6b3bbcbd0f438e5e1d3faf18f8c2d532a4ecc93..a51c473545f02a543b88f5b52ee= d6427c7313ec2 100644 --- a/drivers/gpu/drm/bridge/samsung-dsim.c +++ b/drivers/gpu/drm/bridge/samsung-dsim.c @@ -244,6 +244,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_STATUS_REG, /* Status register (legacy) */ DSIM_LINK_STATUS_REG, /* Link 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, @@ -563,6 +614,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, @@ -604,6 +685,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 eb9fdbab1b34074923daa0aa0443c33c5b99ae42..31d7ed589233ce560767afa1877= f4cc885bf41f3 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 Tue Oct 7 21:03:28 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 82AFB19DFB4; Sun, 6 Jul 2025 18:28: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=1751826501; cv=none; b=Oif0x5NyNP0d1f4cG8xIjN4z6Odl4qSCQQ5ubvXeoh79vTex4Z0FyEpGAPo+UoxdkwXW6dJkJQ8ADOhd35I4b/qi3gz8sAv1CSdZwGbAG1cpzeSFGsTPKRTDAWICmDDlJlYy3K22BZhp7X7CcrJZXNwk6bqR/9cyBtJm25YStsg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751826501; c=relaxed/simple; bh=l4Nuu5usU3hvRSdSwV3bQf/gyHyhMjDbMhpD0WU6O88=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=d0mCinOf/AlJ5sEGlUBPS9f9IkbJ84OZ8Xg8U7KEir4zOi+jZdyPFNVHAQKMxHCKIW9fFAfSAc27LtGdnSzeSsyvND5OrWa18+ZthFgYjejicKm5kJG2X89j2WEQ5OApTxJqNH8Q4Kj5QoIk0dYj6GYGkKEHuIqGZ9/5u7uJ95g= 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=mZeL7Azx; 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="mZeL7Azx" Received: from mail01.disroot.lan (localhost [127.0.0.1]) by disroot.org (Postfix) with ESMTP id 394C2252CB; Sun, 6 Jul 2025 20:28: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 NKyM3LjktSyw; Sun, 6 Jul 2025 20:28:18 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=disroot.org; s=mail; t=1751826498; bh=l4Nuu5usU3hvRSdSwV3bQf/gyHyhMjDbMhpD0WU6O88=; h=From:Date:Subject:References:In-Reply-To:To:Cc; b=mZeL7Azx9pvTBO/XZA+C2RRKe4dOY1p97G9izs0EGm5LBZqrFwaPc0Wkev6ftGWUI v8zK0D/VaIeWf9RegwftPWS2HmVyGSdl/LE7Jsc6OwcECpdfwMBu6xHu58n5UKDpRU Ri0DIqkztOP+IGAhj52jFH4ozUNHDBIdmkp7LxiD+aEhkTPylvE3UUvhzIwS4B27fB 72/1YRGh1VgQl9UycaGx3Wz9GJnIwoxDlc523j/gcYMf8r59OY57EFVc1mZYaZxJ0s rtDq3HuI2Ru1fjIjkwp9+ADp+C1SbDalCxWlxlU4zwBp3Yy060mpP7J6hdFjCFT6ja 0k99907zDMfTw== From: Kaustabh Chakraborty Date: Sun, 06 Jul 2025 23:55:47 +0530 Subject: [PATCH v3 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: <20250706-exynos7870-dsim-v3-13-9879fb9a644d@disroot.org> References: <20250706-exynos7870-dsim-v3-0-9879fb9a644d@disroot.org> In-Reply-To: <20250706-exynos7870-dsim-v3-0-9879fb9a644d@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=1751826342; l=1284; i=kauschluss@disroot.org; s=20250202; h=from:subject:message-id; bh=l4Nuu5usU3hvRSdSwV3bQf/gyHyhMjDbMhpD0WU6O88=; b=uKy2IIutBFRwXBDbPmTpTTgEzxdiT2/Opbe2OKCOjqx5XHG89DV2J+xbzI2b9Mm/K/8YTadQw EknlV+5ZTEyBc+yw2IZyXBw3+87K4K7ojNREnlrUf3mdUjxIKSAKaMd 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