From nobody Sun Dec 14 12:11:01 2025 Received: from mail-wr1-f45.google.com (mail-wr1-f45.google.com [209.85.221.45]) (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 62DA22BD93C; Wed, 30 Apr 2025 20:41:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746045682; cv=none; b=o5Ef/lvWQaLrPJ1U+QhNZBpU7K3api/K9BxzPJjYEHq68IsPxBYxSAWvWWga7vGWLg66Ap3l+B4NXDwTvq+WbSYXpy7U2IxctVAKiBECYnG1JEKdsWZpX+sUoPHY2ttWFCcReAzt7Guf2I27Gf+OZTWZheEIKO/IcHAV7N1JoB8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746045682; c=relaxed/simple; bh=tuJVRD9SWKggmt10zDGe2utE4ktGEO588qhkl83mJ1g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SXqGvL1Tc7LXGqWOTJ1BY+CBBlYLLyMANi2H0yyTpvjQeUUQHpbEjAK5T3cJWTUEKo6N+woQhHASr2bM2oLopexqPBHSlv8QN23RzTZ9WjAl30WsQRm4roXq+6WeejpyMIwc9LOOM3lcGR4mGtEAdTZ1Ci7VRmWBfInpiTtDmiU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=naVR+YFU; arc=none smtp.client-ip=209.85.221.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="naVR+YFU" Received: by mail-wr1-f45.google.com with SMTP id ffacd0b85a97d-39c1efbefc6so169011f8f.1; Wed, 30 Apr 2025 13:41:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746045678; x=1746650478; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=y3bhVpcP7T/A/bFEBGaAIzYTcwiANE7lYJzkmJHwVg4=; b=naVR+YFU5YG1WJXMz/sKRxKKwWOQLrpEPRp5jOP0A6qrxu7SL/mRsW7U19kiNLYxiJ brEp5HfeJK8iuDbBOCOqROWjlDb9OCa1NohZLEhw2OmU7JZVXu1BgU2ZssfcbgNP2kHZ DPp6T2fYoGFPfi0+4U/eLHIr+VSXOzU6cdFbpGJ83SxIhrmJcIbf+6gN881L2pT6t0Yw eR48EJ+TXTKkvEZ9mTMD+9JD5fx2d8wue1vX0ZRSHx557P8DdNpeip3+w/sw7fejbS+W mQHXKWYshSACy+1wvaMvwwRkWMqZXsloVD9IoQvMZKGeM948Y8XfOZKZbkSXhcq7w3u0 yxgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746045678; x=1746650478; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=y3bhVpcP7T/A/bFEBGaAIzYTcwiANE7lYJzkmJHwVg4=; b=nrczIBuWQOSSqWgtFGRKXIAMwdKkB5oyD+iX5d9g6TsgBQCIl6K/6e+NRPuyaYD2yD 26pSYjL2mXfN9ug5rxlOPzf8Hezs1wcWZhOCjhWhsq/tP2ZxSFhWux18gPoOmA7gIWId Jnx1co4YfaLEXxkrPHEZeIOiQxFbgUEmONqWx23mCdutpbKweQNocZsVLFI+zsguk9+J n5Gh0o7vIXvSW3fCy99jgnGA6TVbzQKFLRpOg9Lx91RMnv2T13GIDHend6mi9Ig6NIZs y6xvsyVJ/Otg99tbmVXj81bctKQvwixNkXFWzHubsswLnvp4mAg16PqgQqSHwdq+hEkX gY+g== X-Forwarded-Encrypted: i=1; AJvYcCUrX1NYunoEyVoW0iS5A900ID/UGMTYpT8b2TxL+AJ/dOkln1TZJld8Y5GfCanrc0sBqXsDm3er/Y5f@vger.kernel.org, AJvYcCWPj+SWYY2MAGx5z6qDepb7S08P4zS2NKxKd2eKeUqdfhp4cYm6UOfP95QqY67gO4ATiVPRq29JP5BtPbDj@vger.kernel.org, AJvYcCWcSqnJ3ujwgxBc+JowmTOo9fwwlUp4OzJfKgxArj0bNNpnT/mC3hzskljRHMy+wEpi3H0UWjtIFQm3zaramkHjXhk=@vger.kernel.org, AJvYcCXi8z2XkL/wRoW7vFN3tUxlY0MAk8YM8ysFBoIgM6cVL2jUboTa3Eg2Ki/XNdf3IF/tM5DO/fMjNosO@vger.kernel.org X-Gm-Message-State: AOJu0YwsTesWAnVlGH1xEQWfw4+FBxtrOI1dDMoSJrdhERlTdFKNRwAO 2Q2wiL97s0haP1YLmn4ocfsnkTRzo7PeQnUjdG7stJM9yWHhHg8T X-Gm-Gg: ASbGncucSXSv0k8NB+UvKqspcPotsdOfSv1LfJZrzHNXEGSR5BvRZDLkyrTZu0BKupA shFMdnbvhIPSznNIJt7yPSdf7X6IWeLD+1/BmW9/7V5e8ErxNtdzwoWXZKT8M6cVzxtlF9N3NKZ bD4G3OGEmMw2x9MFT775OFc1I6zQJ2BehNcPGtGHjc+p89lubqifNQMU0eoc7wP18FoV/gNxrJL BfcoaWrl+qH3O8hw5HK293GqPxh0iqHRIB/LGdNyBEVFCd0Xddb5FXHPTQU/OyQkU9Nl7UGJQ5X AzC5raoUZKWIv4f1XeuqnxKt7r1xbKB3rcV+v6TuE0OgyEYmv4DdbuNMvQTmj+uvEtZumSsDn2M = X-Google-Smtp-Source: AGHT+IEBZWC9DEdFjUKwbL20X83DQH3OeQBFCXQW5TQeNryNwVxAVtt3LwlyxYscP+ZuCFM03JgQkw== X-Received: by 2002:a5d:588b:0:b0:3a0:8052:d3fa with SMTP id ffacd0b85a97d-3a09303bb7cmr428090f8f.33.1746045677448; Wed, 30 Apr 2025 13:41:17 -0700 (PDT) Received: from iku.example.org ([2a06:5906:61b:2d00:c5ac:bf15:f358:81a8]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a073ca56d5sm18098132f8f.32.2025.04.30.13.41.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 30 Apr 2025 13:41:16 -0700 (PDT) From: Prabhakar X-Google-Original-From: Prabhakar To: 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 , Biju Das , Geert Uytterhoeven , Michael Turquette , Stephen Boyd , Philipp Zabel , Magnus Damm Cc: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-clk@vger.kernel.org, Prabhakar , Fabrizio Castro , Lad Prabhakar Subject: [PATCH v4 01/15] clk: renesas: rzv2h-cpg: Add support for DSI clocks Date: Wed, 30 Apr 2025 21:40:58 +0100 Message-ID: <20250430204112.342123-2-prabhakar.mahadev-lad.rj@bp.renesas.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250430204112.342123-1-prabhakar.mahadev-lad.rj@bp.renesas.com> References: <20250430204112.342123-1-prabhakar.mahadev-lad.rj@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Lad Prabhakar Add support for PLLDSI and PLLDSI divider clocks. Introduce the `renesas-rzv2h-dsi.h` header to centralize and share PLLDSI-related data structures, limits, and algorithms between the RZ/V2H CPG and DSI drivers. The DSI PLL is functionally similar to the CPG's PLLDSI, but has slightly different parameter limits and omits the programmable divider present in CPG. To ensure precise frequency calculations-especially for milliHz-level accuracy needed by the DSI driver-the shared algorithm allows both drivers to compute PLL parameters consistently using the same logic and input clock. Co-developed-by: Fabrizio Castro Signed-off-by: Fabrizio Castro Signed-off-by: Lad Prabhakar Acked-by: Alok Tiwari --- v3->v4: - Corrected parameter name in rzv2h_dsi_get_pll_parameters_values() description freq_millihz v2->v3: - Update the commit message to clarify the purpose of `renesas-rzv2h-dsi.h` header - Used mul_u32_u32() in rzv2h_cpg_plldsi_div_determine_rate() - Replaced *_mhz to *_millihz for clarity - Updated u64->u32 for fvco limits - Initialized the members in declaration order for RZV2H_CPG_PLL_DSI_LIMITS() macro - Used clk_div_mask() in rzv2h_cpg_plldsi_div_recalc_rate() - Replaced `unsigned long long` with u64 - Dropped rzv2h_cpg_plldsi_clk_recalc_rate() and reused rzv2h_cpg_pll_clk_recalc_rate() instead - In rzv2h_cpg_plldsi_div_set_rate() followed the same style of RMW-operation as done in the other functions - Renamed rzv2h_cpg_plldsi_set_rate() to rzv2h_cpg_pll_set_rate() - Dropped rzv2h_cpg_plldsi_clk_register() and reused rzv2h_cpg_pll_clk_register() instead - Added a gaurd in renesas-rzv2h-dsi.h header v1->v2: - No changes --- drivers/clk/renesas/rzv2h-cpg.c | 237 +++++++++++++++++++++++++- drivers/clk/renesas/rzv2h-cpg.h | 14 ++ include/linux/clk/renesas-rzv2h-dsi.h | 211 +++++++++++++++++++++++ 3 files changed, 460 insertions(+), 2 deletions(-) create mode 100644 include/linux/clk/renesas-rzv2h-dsi.h diff --git a/drivers/clk/renesas/rzv2h-cpg.c b/drivers/clk/renesas/rzv2h-cp= g.c index e03c9801d2e9..fa4d662b81f8 100644 --- a/drivers/clk/renesas/rzv2h-cpg.c +++ b/drivers/clk/renesas/rzv2h-cpg.c @@ -14,9 +14,13 @@ #include #include #include +#include #include #include #include +#include +#include +#include #include #include #include @@ -26,6 +30,7 @@ #include #include #include +#include =20 #include =20 @@ -48,6 +53,7 @@ #define CPG_PLL_STBY(x) ((x)) #define CPG_PLL_STBY_RESETB BIT(0) #define CPG_PLL_STBY_RESETB_WEN BIT(16) +#define CPG_PLL_STBY_SSCGEN_WEN BIT(18) #define CPG_PLL_CLK1(x) ((x) + 0x004) #define CPG_PLL_CLK1_KDIV(x) ((s16)FIELD_GET(GENMASK(31, 16), (x))) #define CPG_PLL_CLK1_MDIV(x) FIELD_GET(GENMASK(15, 6), (x)) @@ -79,6 +85,8 @@ * @last_dt_core_clk: ID of the last Core Clock exported to DT * @mstop_count: Array of mstop values * @rcdev: Reset controller entity + * @dsi_limits: PLL DSI parameters limits + * @plldsi_div_parameters: PLL DSI and divider parameters configuration */ struct rzv2h_cpg_priv { struct device *dev; @@ -95,6 +103,9 @@ struct rzv2h_cpg_priv { atomic_t *mstop_count; =20 struct reset_controller_dev rcdev; + + const struct rzv2h_pll_div_limits *dsi_limits; + struct rzv2h_plldsi_parameters plldsi_div_parameters; }; =20 #define rcdev_to_priv(x) container_of(x, struct rzv2h_cpg_priv, rcdev) @@ -152,6 +163,24 @@ struct ddiv_clk { =20 #define to_ddiv_clock(_div) container_of(_div, struct ddiv_clk, div) =20 +/** + * struct rzv2h_plldsi_div_clk - PLL DSI DDIV clock + * + * @dtable: divider table + * @priv: CPG private data + * @hw: divider clk + * @ddiv: divider configuration + */ +struct rzv2h_plldsi_div_clk { + const struct clk_div_table *dtable; + struct rzv2h_cpg_priv *priv; + struct clk_hw hw; + struct ddiv ddiv; +}; + +#define to_plldsi_div_clk(_hw) \ + container_of(_hw, struct rzv2h_plldsi_div_clk, hw) + static int rzv2h_cpg_pll_clk_is_enabled(struct clk_hw *hw) { struct pll_clk *pll_clk =3D to_pll(hw); @@ -200,6 +229,188 @@ static int rzv2h_cpg_pll_clk_enable(struct clk_hw *hw) return ret; } =20 +static unsigned long rzv2h_cpg_plldsi_div_recalc_rate(struct clk_hw *hw, + unsigned long parent_rate) +{ + struct rzv2h_plldsi_div_clk *dsi_div =3D to_plldsi_div_clk(hw); + struct rzv2h_cpg_priv *priv =3D dsi_div->priv; + struct ddiv ddiv =3D dsi_div->ddiv; + u32 div; + + div =3D readl(priv->base + ddiv.offset); + div >>=3D ddiv.shift; + div &=3D clk_div_mask(ddiv.width); + div =3D dsi_div->dtable[div].div; + + return DIV_ROUND_CLOSEST_ULL(parent_rate, div); +} + +static int rzv2h_cpg_plldsi_div_determine_rate(struct clk_hw *hw, + struct clk_rate_request *req) +{ + struct rzv2h_plldsi_div_clk *dsi_div =3D to_plldsi_div_clk(hw); + struct rzv2h_cpg_priv *priv =3D dsi_div->priv; + struct rzv2h_plldsi_parameters *dsi_dividers =3D &priv->plldsi_div_parame= ters; + u64 rate_millihz; + + /* + * Adjust the requested clock rate (`req->rate`) to ensure it falls within + * the supported range of 5.44 MHz to 187.5 MHz. + */ + req->rate =3D clamp(req->rate, 5440000UL, 187500000UL); + + rate_millihz =3D mul_u32_u32(req->rate, MILLI); + if (rate_millihz =3D=3D dsi_dividers->error_millihz + dsi_dividers->freq_= millihz) + goto exit_determine_rate; + + if (!rzv2h_dsi_get_pll_parameters_values(priv->dsi_limits, + dsi_dividers, rate_millihz)) { + dev_err(priv->dev, + "failed to determine rate for req->rate: %lu\n", + req->rate); + return -EINVAL; + } + +exit_determine_rate: + req->best_parent_rate =3D req->rate * dsi_dividers->csdiv; + + return 0; +}; + +static int rzv2h_cpg_plldsi_div_set_rate(struct clk_hw *hw, + unsigned long rate, + unsigned long parent_rate) +{ + struct rzv2h_plldsi_div_clk *dsi_div =3D to_plldsi_div_clk(hw); + struct rzv2h_cpg_priv *priv =3D dsi_div->priv; + struct rzv2h_plldsi_parameters *dsi_dividers =3D &priv->plldsi_div_parame= ters; + struct ddiv ddiv =3D dsi_div->ddiv; + const struct clk_div_table *clkt; + bool div_found =3D false; + u32 val, shift, div; + + div =3D dsi_dividers->csdiv; + for (clkt =3D dsi_div->dtable; clkt->div; clkt++) { + if (clkt->div =3D=3D div) { + div_found =3D true; + break; + } + } + + if (!div_found) + return -EINVAL; + + shift =3D ddiv.shift; + val =3D readl(priv->base + ddiv.offset) | DDIV_DIVCTL_WEN(shift); + val &=3D ~(clk_div_mask(ddiv.width) << shift); + val |=3D (u32)clkt->val << shift; + writel(val, priv->base + ddiv.offset); + + return 0; +}; + +static const struct clk_ops rzv2h_cpg_plldsi_div_ops =3D { + .recalc_rate =3D rzv2h_cpg_plldsi_div_recalc_rate, + .determine_rate =3D rzv2h_cpg_plldsi_div_determine_rate, + .set_rate =3D rzv2h_cpg_plldsi_div_set_rate, +}; + +static struct clk * __init +rzv2h_cpg_plldsi_div_clk_register(const struct cpg_core_clk *core, + struct rzv2h_cpg_priv *priv) +{ + struct rzv2h_plldsi_div_clk *clk_hw_data; + struct clk **clks =3D priv->clks; + struct clk_init_data init; + const struct clk *parent; + const char *parent_name; + struct clk_hw *clk_hw; + int ret; + + parent =3D clks[core->parent]; + if (IS_ERR(parent)) + return ERR_CAST(parent); + + clk_hw_data =3D devm_kzalloc(priv->dev, sizeof(*clk_hw_data), GFP_KERNEL); + if (!clk_hw_data) + return ERR_PTR(-ENOMEM); + + clk_hw_data->priv =3D priv; + clk_hw_data->ddiv =3D core->cfg.ddiv; + clk_hw_data->dtable =3D core->dtable; + + parent_name =3D __clk_get_name(parent); + init.name =3D core->name; + init.ops =3D &rzv2h_cpg_plldsi_div_ops; + init.flags =3D core->flag; + init.parent_names =3D &parent_name; + init.num_parents =3D 1; + + clk_hw =3D &clk_hw_data->hw; + clk_hw->init =3D &init; + + ret =3D devm_clk_hw_register(priv->dev, clk_hw); + if (ret) + return ERR_PTR(ret); + + return clk_hw->clk; +} + +static long rzv2h_cpg_plldsi_round_rate(struct clk_hw *hw, + unsigned long rate, + unsigned long *parent_rate) +{ + return clamp(rate, 25000000UL, 375000000UL); +} + +static int rzv2h_cpg_pll_set_rate(struct clk_hw *hw, + unsigned long rate, + unsigned long parent_rate) +{ + struct pll_clk *pll_clk =3D to_pll(hw); + struct rzv2h_cpg_priv *priv =3D pll_clk->priv; + struct rzv2h_plldsi_parameters *dsi_dividers; + struct pll pll =3D pll_clk->pll; + u16 offset =3D pll.offset; + u32 val; + int ret; + + /* Put PLL into standby mode */ + writel(CPG_PLL_STBY_RESETB_WEN, priv->base + CPG_PLL_STBY(offset)); + ret =3D readl_poll_timeout_atomic(priv->base + CPG_PLL_MON(offset), + val, !(val & CPG_PLL_MON_LOCK), + 100, 2000); + if (ret) { + dev_err(priv->dev, "Failed to put PLLDSI into standby mode"); + return ret; + } + + dsi_dividers =3D &priv->plldsi_div_parameters; + /* Output clock setting 1 */ + writel((dsi_dividers->k << 16) | (dsi_dividers->m << 6) | (dsi_dividers->= p), + priv->base + CPG_PLL_CLK1(offset)); + + /* Output clock setting 2 */ + val =3D readl(priv->base + CPG_PLL_CLK2(offset)); + writel((val & ~GENMASK(2, 0)) | dsi_dividers->s, + priv->base + CPG_PLL_CLK2(offset)); + + /* Put PLL to normal mode */ + writel(CPG_PLL_STBY_RESETB_WEN | CPG_PLL_STBY_RESETB, + priv->base + CPG_PLL_STBY(offset)); + + /* PLL normal mode transition, output clock stability check */ + ret =3D readl_poll_timeout_atomic(priv->base + CPG_PLL_MON(offset), + val, (val & CPG_PLL_MON_LOCK), + 100, 2000); + if (ret) { + dev_err(priv->dev, "Failed to put PLLDSI into normal mode"); + return ret; + } + + return 0; +}; + static unsigned long rzv2h_cpg_pll_clk_recalc_rate(struct clk_hw *hw, unsigned long parent_rate) { @@ -221,6 +432,12 @@ static unsigned long rzv2h_cpg_pll_clk_recalc_rate(str= uct clk_hw *hw, return DIV_ROUND_CLOSEST_ULL(rate, CPG_PLL_CLK1_PDIV(clk1)); } =20 +static const struct clk_ops rzv2h_cpg_plldsi_ops =3D { + .recalc_rate =3D rzv2h_cpg_pll_clk_recalc_rate, + .round_rate =3D rzv2h_cpg_plldsi_round_rate, + .set_rate =3D rzv2h_cpg_pll_set_rate, +}; + static const struct clk_ops rzv2h_cpg_pll_ops =3D { .is_enabled =3D rzv2h_cpg_pll_clk_is_enabled, .enable =3D rzv2h_cpg_pll_clk_enable, @@ -230,7 +447,8 @@ static const struct clk_ops rzv2h_cpg_pll_ops =3D { static struct clk * __init rzv2h_cpg_pll_clk_register(const struct cpg_core_clk *core, struct rzv2h_cpg_priv *priv, - const struct clk_ops *ops) + const struct clk_ops *ops, + bool turn_on) { void __iomem *base =3D priv->base; struct device *dev =3D priv->dev; @@ -260,6 +478,13 @@ rzv2h_cpg_pll_clk_register(const struct cpg_core_clk *= core, pll_clk->base =3D base; pll_clk->priv =3D priv; =20 + if (turn_on) { + /* Disable SSC and turn on PLL clock when init */ + writel(CPG_PLL_STBY_RESETB_WEN | CPG_PLL_STBY_RESETB | + CPG_PLL_STBY_SSCGEN_WEN, + base + CPG_PLL_STBY(pll_clk->pll.offset)); + } + ret =3D devm_clk_hw_register(dev, &pll_clk->hw); if (ret) return ERR_PTR(ret); @@ -501,7 +726,7 @@ rzv2h_cpg_register_core_clk(const struct cpg_core_clk *= core, clk =3D clk_hw->clk; break; case CLK_TYPE_PLL: - clk =3D rzv2h_cpg_pll_clk_register(core, priv, &rzv2h_cpg_pll_ops); + clk =3D rzv2h_cpg_pll_clk_register(core, priv, &rzv2h_cpg_pll_ops, false= ); break; case CLK_TYPE_DDIV: clk =3D rzv2h_cpg_ddiv_clk_register(core, priv); @@ -509,6 +734,12 @@ rzv2h_cpg_register_core_clk(const struct cpg_core_clk = *core, case CLK_TYPE_SMUX: clk =3D rzv2h_cpg_mux_clk_register(core, priv); break; + case CLK_TYPE_PLLDSI: + clk =3D rzv2h_cpg_pll_clk_register(core, priv, &rzv2h_cpg_plldsi_ops, tr= ue); + break; + case CLK_TYPE_PLLDSI_DIV: + clk =3D rzv2h_cpg_plldsi_div_clk_register(core, priv); + break; default: goto fail; } @@ -1045,6 +1276,8 @@ static int __init rzv2h_cpg_probe(struct platform_dev= ice *pdev) priv->last_dt_core_clk =3D info->last_dt_core_clk; priv->num_resets =3D info->num_resets; =20 + priv->dsi_limits =3D info->plldsi_limits; + for (i =3D 0; i < nclks; i++) clks[i] =3D ERR_PTR(-ENOENT); =20 diff --git a/drivers/clk/renesas/rzv2h-cpg.h b/drivers/clk/renesas/rzv2h-cp= g.h index a05fb5e7f707..acae042fdf5b 100644 --- a/drivers/clk/renesas/rzv2h-cpg.h +++ b/drivers/clk/renesas/rzv2h-cpg.h @@ -100,6 +100,7 @@ struct smuxed { #define CPG_CDDIV3 (0x40C) #define CPG_CDDIV4 (0x410) #define CPG_CSDIV0 (0x500) +#define CPG_CSDIV1 (0x504) =20 #define CDDIV0_DIVCTL1 DDIV_PACK(CPG_CDDIV0, 4, 3, 1) #define CDDIV0_DIVCTL2 DDIV_PACK(CPG_CDDIV0, 8, 3, 2) @@ -163,6 +164,8 @@ enum clk_types { CLK_TYPE_PLL, CLK_TYPE_DDIV, /* Dynamic Switching Divider */ CLK_TYPE_SMUX, /* Static Mux */ + CLK_TYPE_PLLDSI, /* PLLDSI */ + CLK_TYPE_PLLDSI_DIV, /* PLLDSI divider */ }; =20 #define DEF_TYPE(_name, _id, _type...) \ @@ -190,6 +193,14 @@ enum clk_types { .num_parents =3D ARRAY_SIZE(_parent_names), \ .flag =3D CLK_SET_RATE_PARENT, \ .mux_flags =3D CLK_MUX_HIWORD_MASK) +#define DEF_PLLDSI(_name, _id, _parent, _pll_packed) \ + DEF_TYPE(_name, _id, CLK_TYPE_PLLDSI, .parent =3D _parent, .cfg.pll =3D _= pll_packed) +#define DEF_PLLDSI_DIV(_name, _id, _parent, _ddiv_packed, _dtable) \ + DEF_TYPE(_name, _id, CLK_TYPE_PLLDSI_DIV, \ + .cfg.ddiv =3D _ddiv_packed, \ + .dtable =3D _dtable, \ + .parent =3D _parent, \ + .flag =3D CLK_SET_RATE_PARENT) =20 /** * struct rzv2h_mod_clk - Module Clocks definitions @@ -296,6 +307,7 @@ struct rzv2h_reset { * * @num_mstop_bits: Maximum number of MSTOP bits supported, equivalent to = the * number of CPG_BUS_m_MSTOP registers multiplied by 16. + * @plldsi_limits: PLL DSI parameters limits */ struct rzv2h_cpg_info { /* Core Clocks */ @@ -314,6 +326,8 @@ struct rzv2h_cpg_info { unsigned int num_resets; =20 unsigned int num_mstop_bits; + + const struct rzv2h_pll_div_limits *plldsi_limits; }; =20 extern const struct rzv2h_cpg_info r9a09g047_cpg_info; diff --git a/include/linux/clk/renesas-rzv2h-dsi.h b/include/linux/clk/rene= sas-rzv2h-dsi.h new file mode 100644 index 000000000000..faecb5d49c20 --- /dev/null +++ b/include/linux/clk/renesas-rzv2h-dsi.h @@ -0,0 +1,211 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Renesas RZ/V2H(P) DSI CPG helper + * + * Copyright (C) 2025 Renesas Electronics Corp. + */ +#ifndef __RENESAS_RZV2H_DSI_H__ +#define __RENESAS_RZV2H_DSI_H__ + +#include +#include +#include +#include + +#define OSC_CLK_IN_MEGA (24 * MEGA) + +struct rzv2h_pll_div_limits { + struct { + u32 min; + u32 max; + } fvco; + + struct { + u16 min; + u16 max; + } m; + + struct { + u8 min; + u8 max; + } p; + + struct { + u8 min; + u8 max; + } s; + + struct { + s16 min; + s16 max; + } k; + + struct { + u8 min; + u8 max; + } csdiv; +}; + +struct rzv2h_plldsi_parameters { + u64 freq_millihz; + s64 error_millihz; + u16 m; + s16 k; + u8 csdiv; + u8 p; + u8 s; +}; + +#define RZV2H_CPG_PLL_DSI_LIMITS(name) \ + static const struct rzv2h_pll_div_limits (name) =3D { \ + .fvco =3D { .min =3D 1600 * MEGA, .max =3D 3200 * MEGA }, \ + .m =3D { .min =3D 64, .max =3D 533 }, \ + .p =3D { .min =3D 1, .max =3D 4 }, \ + .s =3D { .min =3D 0, .max =3D 6 }, \ + .k =3D { .min =3D -32768, .max =3D 32767 }, \ + .csdiv =3D { .min =3D 2, .max =3D 32 }, \ + } \ + +/** + * rzv2h_dsi_get_pll_parameters_values - Finds the best combination of PLL= parameters + * and divider value for a given frequency. + * + * @limits: Pointer to the structure containing the limits for the PLL par= ameters and + * divider values + * @pars: Pointer to the structure where the best calculated PLL parameter= s and divider + * values will be stored + * @freq_millihz: Target output frequency in millihertz + * + * This function calculates the best set of PLL parameters (M, K, P, S) an= d divider + * value (CSDIV) to achieve the desired frequency. + * There is no direct formula to calculate the PLL parameters and the divi= der value, + * as it's an open system of equations, therefore this function uses an it= erative + * approach to determine the best solution. The best solution is one that = minimizes + * the error (desired frequency - actual frequency). + * + * Return: true if a valid set of divider values is found, false otherwise. + */ +static __maybe_unused bool +rzv2h_dsi_get_pll_parameters_values(const struct rzv2h_pll_div_limits *lim= its, + struct rzv2h_plldsi_parameters *pars, + u64 freq_millihz) +{ + struct rzv2h_plldsi_parameters p, best; + + /* Initialize best error to maximum possible value */ + best.error_millihz =3D S64_MAX; + + for (p.csdiv =3D limits->csdiv.min; p.csdiv <=3D limits->csdiv.max; p.csd= iv +=3D 2) { + for (p.p =3D limits->p.min; p.p <=3D limits->p.max; p.p++) { + u32 fref =3D OSC_CLK_IN_MEGA / p.p; + + for (p.s =3D limits->s.min; p.s <=3D limits->s.max; p.s++) { + u16 two_pow_s =3D 1 << p.s; + u16 divider =3D two_pow_s * p.csdiv; + + for (p.m =3D limits->m.min; p.m <=3D limits->m.max; p.m++) { + u64 output_m, output_k_range; + s64 pll_k, output_k; + u64 fvco, output; + + /* + * The frequency generated by the combination of the + * PLL + divider is calculated as follows: + * + * Freq =3D Ffout / csdiv + * + * With: + * Ffout =3D Ffvco / 2^(pll_s) + * Ffvco =3D (pll_m + (pll_k / 65536)) * Ffref + * Ffref =3D 24MHz / pll_p + * + * Freq can also be rewritten as: + * Freq =3D Ffvco / (2^(pll_s) * csdiv)) + * =3D Ffvco / divider + * =3D (pll_m * Ffref) / divider + ((pll_k / 65536) * Ffref) / d= ivider + * =3D output_m + output_k + * + * Every parameter has been determined at this point, but pll_k. + * Considering that: + * -32768 <=3D pll_k <=3D 32767 + * Then: + * -0.5 <=3D (pll_k / 65536) < 0.5 + * Therefore: + * -Ffref / (2 * divider) <=3D output_k < Ffref / (2 * divider) + */ + + /* Compute output M component (in mHz) */ + output_m =3D DIV_ROUND_CLOSEST_ULL(p.m * fref * 1000ULL, + divider); + /* Compute range for output K (in mHz) */ + output_k_range =3D DIV_ROUND_CLOSEST_ULL(fref * 1000ULL, + divider * 2); + /* + * No point in continuing if we can't achieve the + * desired frequency + */ + if (freq_millihz < (output_m - output_k_range) || + freq_millihz >=3D (output_m + output_k_range)) + continue; + + /* + * Compute the K component + * + * Since: + * Freq =3D output_m + output_k + * Then: + * output_k =3D Freq - output_m + * =3D ((pll_k / 65536) * Ffref) / divider + * Therefore: + * pll_k =3D (output_k * 65536 * divider) / Ffref + */ + output_k =3D freq_millihz - output_m; + pll_k =3D div64_s64(output_k * 65536ULL * divider, fref); + pll_k =3D DIV_S64_ROUND_CLOSEST(pll_k, 1000); + + /* Validate K value within allowed limits */ + if (pll_k < limits->k.min || pll_k > limits->k.max) + continue; + + p.k =3D pll_k; + + /* Compute (Ffvco * 65536) */ + fvco =3D ((p.m * 65536ULL) + p.k) * fref; + if ((fvco < (limits->fvco.min * 65536ULL)) || + (fvco > (limits->fvco.max * 65536ULL))) + continue; + + /* PLL_M component of (output * 65536 * PLL_P) */ + output =3D p.m * 65536ULL * OSC_CLK_IN_MEGA; + /* PLL_K component of (output * 65536 * PLL_P) */ + output +=3D p.k * OSC_CLK_IN_MEGA; + /* Make it in mHz */ + output *=3D 1000ULL; + output /=3D 65536ULL * p.p * divider; + + p.error_millihz =3D freq_millihz - output; + p.freq_millihz =3D output; + + /* If an exact match is found, return immediately */ + if (p.error_millihz =3D=3D 0) { + *pars =3D p; + return true; + } + + /* Update best match if error is smaller */ + if (abs(best.error_millihz) > abs(p.error_millihz)) + best =3D p; + } + } + } + } + + /* If no valid parameters were found, return false */ + if (best.error_millihz =3D=3D S64_MAX) + return false; + + *pars =3D best; + return true; +} + +#endif /* __RENESAS_RZV2H_DSI_H__ */ --=20 2.49.0 From nobody Sun Dec 14 12:11:01 2025 Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.48]) (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 E47D12C032A; Wed, 30 Apr 2025 20:41:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746045682; cv=none; b=RZkxF/vgb0wbLFw1zQGMn4ihchHFhoCKD1519H1PE3fL36RvkRWhxilU3id8D6kgWxMoqLqqT40F13x3QoZmcgSWgV8C977dPrNoMq8XUdreqS2+s8/Ga75ys2cUhKFoFmSMtZAGsKkZ+6SC/GTWdDF7ZxawM56xoUwQYN4zUjE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746045682; c=relaxed/simple; bh=GI+NicGUCyqmRvBMRUM+CdG6ESadlevt9bYx2W4G6g0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rwmUO9htUKu4TE5aOA4uRUfbUYX1nERXwdn2rwjaMpOfDXFm0s0wI02N2u3iEQPGDLOyqIdDJHRU5eeTuUJiO8X9fk3yFp64zepqB8QsToOr0Ap0ooLl4oeK5LvsZOCW8ChGTikhYSTBnspNJJ96JEU7QtxFY172C51noALWh/I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Y32TFTpc; arc=none smtp.client-ip=209.85.221.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Y32TFTpc" Received: by mail-wr1-f48.google.com with SMTP id ffacd0b85a97d-39ac9aea656so211596f8f.3; Wed, 30 Apr 2025 13:41:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746045679; x=1746650479; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=2bD+5Ge0wy18N6igG01fWsd9reTR5MEu7i4o/NGqbgM=; b=Y32TFTpcZ5J+mfzYqVFFXRSYsPXz+Td9MA2aQVCjoCXKBatVZpQFbP9+2kjheI5CAj cLwy5yv8aMw4zElFmekp1xM2K955I8BT3/2vALkwfbegkSdJWIGxFfS7ajzBo20ZYTCc HgLlvZ3ZNnvE5mTAVn8T/uZ+ll/Ib4q/XdolbDFt15T97n8ZXifzRmAeOABROkA+Rgll wDIieuQNH60W2IAK70tEe6HqKkQn1VD9pTn0JpICzupO/q/zOjRtyS/7IfZJkMdSBoL5 LMawY1DcLES4sTIW6uhqt2BwqF0InMvlx+/kr5b0mP22gP1MhQB4277IzOO+NrDoAIDo tZEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746045679; x=1746650479; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=2bD+5Ge0wy18N6igG01fWsd9reTR5MEu7i4o/NGqbgM=; b=Gmwvl/+Kh1Pw56zL2u/sDxrkOiJtRa0kTcCK5q64d2Sb+3kKzVV0UQQk8awPckL9fY bqwbvSgn7Af2feI35/GhjXHwpTUhDbltJBbjXAqsI5e+AvnDjVU/aveII3JiG4E5Vu9A lmm2MNHSG6hMRtmusnDDNufhLxWR0kcM1mIIWuXn8GPxk4+QxwDz1tdCYMiVUYAXasOI E5hiP+4U8LyiRTFlRT6uMR8CG8TmTZibMUmcfuhvuJT+bjhTgjbPyjNN94u85cKsV5RO QhLqtN9uQWBXNaKuWCg02MJlTx1YOFIWri5sg4hP0r35RxS9GNRA4tW6AgA25emUNJWy ythw== X-Forwarded-Encrypted: i=1; AJvYcCUaZiA1DUJlWRzTXyavZnD+gqxfPYhKCr3bwnw5hWlYeMv/kyqRxp+xYKFwZaJHNeC0QnrScMOyynK1@vger.kernel.org, AJvYcCUdX834PrZnedk+DcGdH7I8moWi8LXXdSLvwef0OEPSHMhaaoqXFNaX5tELeYal3XJ/NtLauiIRZFi9@vger.kernel.org, AJvYcCVFQfrfFUotCh9ALXYqMxrtW4qRHZdUYDbLzj77RGBnT0ekeATKHjnvsTtfVzih7JUIbySTNA8yx43FZu7G@vger.kernel.org, AJvYcCVwhafd0R3thn/t/BnEZwqxh6rYLmGKhkwXS/iPAQA/ZOz3bamI2r637h/jvU9TS/Rl2SiOHAfzXM0PsI0GPqGeRb4=@vger.kernel.org X-Gm-Message-State: AOJu0Yx0S+xa05OOBfwwR42hcPqJ+GtluiIWcdfwHD66lCzZFrSQ2+Jw HlSKyNqkEp4W4ZdpLaOkNY9DZZ8Ek6zNF0xMcyb+SJH8hPhMvC1G X-Gm-Gg: ASbGnctX+c/x91zkFCF5cNPSN9IAdJsvCx38kXgRlDxJwA8/W6p3hwthS54NSYAEBlZ yE+sKlBdlD+ugUHKYzTgUeFqlFAtIj2THloTkTeYc+TZFmrQadpjAZVAxOKLLyqsyV80wte55So ayDwDxtATvnD+SH+6+gVN3uueZYKrQ/pEJeci67oIyUWMsTX68iYTSHhzIw1tjqYA6DoCTT/B5y 4tT0dlPoOUSLRClc4uEESDUt33gKD9uKp6fzAP9vIBvDsO09YwuCgvaRxEQMDGlHwol9Fcb21Da EXS8CSpPn+qFTQmxKhPDFGnA3u9CyDzF8EKTFXEzbsMw7fk0JXpgrE/ylX7z+gMIytW8F1fh3wg = X-Google-Smtp-Source: AGHT+IEoopZWeXC3JQKBpZ3YqQIh+wnIf3C6wCzMDLPz5k37G7HGz219IR6a0JKqE+ZFEOyV48qZvA== X-Received: by 2002:a05:6000:2282:b0:39e:f9e8:d07d with SMTP id ffacd0b85a97d-3a08f764d93mr4344288f8f.20.1746045679059; Wed, 30 Apr 2025 13:41:19 -0700 (PDT) Received: from iku.example.org ([2a06:5906:61b:2d00:c5ac:bf15:f358:81a8]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a073ca56d5sm18098132f8f.32.2025.04.30.13.41.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 30 Apr 2025 13:41:18 -0700 (PDT) From: Prabhakar X-Google-Original-From: Prabhakar To: 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 , Biju Das , Geert Uytterhoeven , Michael Turquette , Stephen Boyd , Philipp Zabel , Magnus Damm Cc: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-clk@vger.kernel.org, Prabhakar , Fabrizio Castro , Lad Prabhakar Subject: [PATCH v4 02/15] clk: renesas: r9a09g057: Add clock and reset entries for DSI and LCDC Date: Wed, 30 Apr 2025 21:40:59 +0100 Message-ID: <20250430204112.342123-3-prabhakar.mahadev-lad.rj@bp.renesas.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250430204112.342123-1-prabhakar.mahadev-lad.rj@bp.renesas.com> References: <20250430204112.342123-1-prabhakar.mahadev-lad.rj@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Lad Prabhakar Add clock and reset entries for the DSI and LCDC peripherals. Co-developed-by: Fabrizio Castro Signed-off-by: Fabrizio Castro Signed-off-by: Lad Prabhakar --- v3->v4: - No changes v2->v3: - Reverted CSDIV0_DIVCTL2() to use DDIV_PACK() - Renamed plleth_lpclk_div4 -> cdiv4_plleth_lpclk - Renamed plleth_lpclk -> plleth_lpclk_gear v1->v2: - Changed CSDIV0_DIVCTL2 to the NO_RMW --- drivers/clk/renesas/r9a09g057-cpg.c | 63 +++++++++++++++++++++++++++++ drivers/clk/renesas/rzv2h-cpg.h | 3 ++ 2 files changed, 66 insertions(+) diff --git a/drivers/clk/renesas/r9a09g057-cpg.c b/drivers/clk/renesas/r9a0= 9g057-cpg.c index da908e820950..a79b67181f11 100644 --- a/drivers/clk/renesas/r9a09g057-cpg.c +++ b/drivers/clk/renesas/r9a09g057-cpg.c @@ -6,6 +6,7 @@ */ =20 #include +#include #include #include #include @@ -30,6 +31,7 @@ enum clk_ids { CLK_PLLCA55, CLK_PLLVDO, CLK_PLLETH, + CLK_PLLDSI, CLK_PLLGPU, =20 /* Internal Core Clocks */ @@ -58,6 +60,9 @@ enum clk_ids { CLK_SMUX2_GBE0_RXCLK, CLK_SMUX2_GBE1_TXCLK, CLK_SMUX2_GBE1_RXCLK, + CLK_DIV_PLLETH_LPCLK, + CLK_CSDIV_PLLETH_LPCLK, + CLK_PLLDSI_SDIV2, CLK_PLLGPU_GEAR, =20 /* Module Clocks */ @@ -78,6 +83,26 @@ static const struct clk_div_table dtable_2_4[] =3D { {0, 0}, }; =20 +static const struct clk_div_table dtable_2_32[] =3D { + {0, 2}, + {1, 4}, + {2, 6}, + {3, 8}, + {4, 10}, + {5, 12}, + {6, 14}, + {7, 16}, + {8, 18}, + {9, 20}, + {10, 22}, + {11, 24}, + {12, 26}, + {13, 28}, + {14, 30}, + {15, 32}, + {0, 0}, +}; + static const struct clk_div_table dtable_2_64[] =3D { {0, 2}, {1, 4}, @@ -94,6 +119,14 @@ static const struct clk_div_table dtable_2_100[] =3D { {0, 0}, }; =20 +static const struct clk_div_table dtable_16_128[] =3D { + {0, 16}, + {1, 32}, + {2, 64}, + {3, 128}, + {0, 0}, +}; + /* Mux clock tables */ static const char * const smux2_gbe0_rxclk[] =3D { ".plleth_gbe0", "et0_rx= clk" }; static const char * const smux2_gbe0_txclk[] =3D { ".plleth_gbe0", "et0_tx= clk" }; @@ -113,6 +146,7 @@ static const struct cpg_core_clk r9a09g057_core_clks[] = __initconst =3D { DEF_PLL(".pllca55", CLK_PLLCA55, CLK_QEXTAL, PLLCA55), DEF_FIXED(".pllvdo", CLK_PLLVDO, CLK_QEXTAL, 105, 2), DEF_FIXED(".plleth", CLK_PLLETH, CLK_QEXTAL, 125, 3), + DEF_PLLDSI(".plldsi", CLK_PLLDSI, CLK_QEXTAL, PLLDSI), DEF_PLL(".pllgpu", CLK_PLLGPU, CLK_QEXTAL, PLLGPU), =20 /* Internal Core Clocks */ @@ -148,6 +182,12 @@ static const struct cpg_core_clk r9a09g057_core_clks[]= __initconst =3D { DEF_SMUX(".smux2_gbe0_rxclk", CLK_SMUX2_GBE0_RXCLK, SSEL0_SELCTL3, smux2_= gbe0_rxclk), DEF_SMUX(".smux2_gbe1_txclk", CLK_SMUX2_GBE1_TXCLK, SSEL1_SELCTL0, smux2_= gbe1_txclk), DEF_SMUX(".smux2_gbe1_rxclk", CLK_SMUX2_GBE1_RXCLK, SSEL1_SELCTL1, smux2_= gbe1_rxclk), + DEF_FIXED(".cdiv4_plleth_lpclk", CLK_DIV_PLLETH_LPCLK, CLK_PLLETH, 1, 4), + DEF_CSDIV(".plleth_lpclk_gear", CLK_CSDIV_PLLETH_LPCLK, CLK_DIV_PLLETH_LP= CLK, + CSDIV0_DIVCTL2, dtable_16_128), + + DEF_PLLDSI_DIV(".plldsi_sdiv2", CLK_PLLDSI_SDIV2, CLK_PLLDSI, + CSDIV1_DIVCTL2, dtable_2_32), =20 DEF_DDIV(".pllgpu_gear", CLK_PLLGPU_GEAR, CLK_PLLGPU, CDDIV3_DIVCTL1, dta= ble_2_64), =20 @@ -319,6 +359,22 @@ static const struct rzv2h_mod_clk r9a09g057_mod_clks[]= __initconst =3D { BUS_MSTOP(9, BIT(7))), DEF_MOD("cru_3_pclk", CLK_PLLDTY_DIV16, 13, 13, 6, 29, BUS_MSTOP(9, BIT(7))), + DEF_MOD("dsi_0_pclk", CLK_PLLDTY_DIV16, 14, 8, 7, 8, + BUS_MSTOP(9, BIT(14) | BIT(15))), + DEF_MOD("dsi_0_aclk", CLK_PLLDTY_ACPU_DIV2, 14, 9, 7, 9, + BUS_MSTOP(9, BIT(14) | BIT(15))), + DEF_MOD("dsi_0_vclk1", CLK_PLLDSI_SDIV2, 14, 10, 7, 10, + BUS_MSTOP(9, BIT(14) | BIT(15))), + DEF_MOD("dsi_0_lpclk", CLK_CSDIV_PLLETH_LPCLK, 14, 11, 7, 11, + BUS_MSTOP(9, BIT(14) | BIT(15))), + DEF_MOD("dsi_0_pllref_clk", CLK_QEXTAL, 14, 12, 7, 12, + BUS_MSTOP(9, BIT(14) | BIT(15))), + DEF_MOD("lcdc_0_clk_a", CLK_PLLDTY_ACPU_DIV2, 14, 13, 7, 13, + BUS_MSTOP(10, BIT(1) | BIT(2) | BIT(3))), + DEF_MOD("lcdc_0_clk_p", CLK_PLLDTY_DIV16, 14, 14, 7, 14, + BUS_MSTOP(10, BIT(1) | BIT(2) | BIT(3))), + DEF_MOD("lcdc_0_clk_d", CLK_PLLDSI_SDIV2, 14, 15, 7, 15, + BUS_MSTOP(10, BIT(1) | BIT(2) | BIT(3))), DEF_MOD("gpu_0_clk", CLK_PLLGPU_GEAR, 15, 0, 7, 16, BUS_MSTOP(3, BIT(4))), DEF_MOD("gpu_0_axi_clk", CLK_PLLDTY_ACPU_DIV2, 15, 1, 7, 17, @@ -380,11 +436,16 @@ static const struct rzv2h_reset r9a09g057_resets[] __= initconst =3D { DEF_RST(12, 14, 5, 31), /* CRU_3_PRESETN */ DEF_RST(12, 15, 6, 0), /* CRU_3_ARESETN */ DEF_RST(13, 0, 6, 1), /* CRU_3_S_RESETN */ + DEF_RST(13, 7, 6, 8), /* DSI_0_PRESETN */ + DEF_RST(13, 8, 6, 9), /* DSI_0_ARESETN */ + DEF_RST(13, 12, 6, 13), /* LCDC_0_RESET_N */ DEF_RST(13, 13, 6, 14), /* GPU_0_RESETN */ DEF_RST(13, 14, 6, 15), /* GPU_0_AXI_RESETN */ DEF_RST(13, 15, 6, 16), /* GPU_0_ACE_RESETN */ }; =20 +RZV2H_CPG_PLL_DSI_LIMITS(rzv2h_cpg_pll_dsi_limits); + const struct rzv2h_cpg_info r9a09g057_cpg_info __initconst =3D { /* Core Clocks */ .core_clks =3D r9a09g057_core_clks, @@ -402,4 +463,6 @@ const struct rzv2h_cpg_info r9a09g057_cpg_info __initco= nst =3D { .num_resets =3D ARRAY_SIZE(r9a09g057_resets), =20 .num_mstop_bits =3D 192, + + .plldsi_limits =3D &rzv2h_cpg_pll_dsi_limits, }; diff --git a/drivers/clk/renesas/rzv2h-cpg.h b/drivers/clk/renesas/rzv2h-cp= g.h index acae042fdf5b..b402b04ff050 100644 --- a/drivers/clk/renesas/rzv2h-cpg.h +++ b/drivers/clk/renesas/rzv2h-cpg.h @@ -28,6 +28,7 @@ struct pll { }) =20 #define PLLCA55 PLL_PACK(0x60, 1) +#define PLLDSI PLL_PACK(0xc0, 1) #define PLLGPU PLL_PACK(0x120, 1) =20 /** @@ -117,6 +118,8 @@ struct smuxed { =20 #define CSDIV0_DIVCTL0 DDIV_PACK(CPG_CSDIV0, 0, 2, CSDIV_NO_MON) #define CSDIV0_DIVCTL1 DDIV_PACK(CPG_CSDIV0, 4, 2, CSDIV_NO_MON) +#define CSDIV0_DIVCTL2 DDIV_PACK(CPG_CSDIV0, 8, 2, CSDIV_NO_MON) +#define CSDIV1_DIVCTL2 DDIV_PACK(CPG_CSDIV1, 8, 4, CSDIV_NO_MON) =20 #define SSEL0_SELCTL2 SMUX_PACK(CPG_SSEL0, 8, 1) #define SSEL0_SELCTL3 SMUX_PACK(CPG_SSEL0, 12, 1) --=20 2.49.0 From nobody Sun Dec 14 12:11:01 2025 Received: from mail-wr1-f43.google.com (mail-wr1-f43.google.com [209.85.221.43]) (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 3D5292C109D; Wed, 30 Apr 2025 20:41:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746045684; cv=none; b=nkHtICUCo2I82qzqSpyvD5qxLjIYDbWIgILzzDka6GP/SbpPnphSUksYoyHxWONHGOZZdaQBvoy1b74c3Nbbl3cqOo9EfnrWiDKfdNlNoohLMqRfEG3B6rXrt6KJWEvP4KT4+MbeaENGlk0wSxiZFbw7oIfodRDUO3On6p52qLs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746045684; c=relaxed/simple; bh=/3UqE+nJ81H2bFT7tSQx1yUjvAzmE4ntpdhfUJuGAjU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=u6qUUyyH8xZaLQ/RJejwg4TzF+AIs4xBbvxuBQGhnGrSf2NnSEQicMVRfS3S7mYoJqF629buwREdgr4rLvWQhvktW4AANm/8ZkirygNTG3oToi5Ssg23Oh+LjIxSiu7EvNLdoFuX+D9pY6saIRKI4WjH+b/dSlYUdgHhSdrtvW4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ZtRVGrE8; arc=none smtp.client-ip=209.85.221.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ZtRVGrE8" Received: by mail-wr1-f43.google.com with SMTP id ffacd0b85a97d-3a07a7b4ac7so92816f8f.2; Wed, 30 Apr 2025 13:41:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746045680; x=1746650480; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=On2oKS4KpMiFNX9GGJWebr5I28XVUIr+D5gExlaa1s4=; b=ZtRVGrE8r4HwVL1/NIAn/Jn7C0vYzb0lFpccaTsrhdJfCFHI+Fp4j2RZb5NoRgTGmT s39XOe6QFVdNdyvKHN/cbAampo34lUuONci/buc3dxkb56ESoVT5yO1+7163IS/0yjYT kkHUtEuqDfkWDmFiQ+G/Xun69dDe0CQs8LmbfHnRrN7FQFpyzc93BdJrgg+cSy3bxgtw jx2A4VO2Jia6CrmYfDAj/FN16jwDpw0bK72RhyLNflU7kHIRdOJnEDQsdt5XGrlEXPTL vYGsXIZq98AzcYUmsx0DcrCZvCQ/UClg8N1v9l1vhZWTu/6HwZkVt96PfobX9s12IRat i15g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746045680; x=1746650480; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=On2oKS4KpMiFNX9GGJWebr5I28XVUIr+D5gExlaa1s4=; b=kUDFvjttyCrlUPHT2Zgc72dF8WCh14/gaDAp7se23csaANHf7Kp1Z/5hxwHzSuPQKE 21pVofrsbQgqVOgQxzFNEsmyHmefU/E8E4cTk0LneCFxMWbYwrwNtrApTmtXxvHRPNEx UyLwc31yG8VFbEtWR4Bia1GU3WAwSvRd6/lD9MjaoKkfXCdAaXBGQkqmBzT+vkAqtjn4 MvOop/exv+8La0BCxqTC1JSYZvV+YuRKgkaThqPcmQSKPXwyw++yIoEkBe9DkZB2mByL ACkj+bLcxjPRNsH/EnDubq58zbTm3HdfelfEjdoRwKAguE2s5iep4mMHGNDDHhlSXTmX yM1A== X-Forwarded-Encrypted: i=1; AJvYcCV58R/d9q4iT1JklQUeXe5BpfQzVcrwgZ/3jnrzFTauWb3WxbAf9DpyPLxHziyZSC8eCXhUNva53ZYF@vger.kernel.org, AJvYcCWWOAF5ZI6dqbnUOY7wmnQsMz1bT8jTPyLoiH3kISfUMpsb8+FLctaZ4k85V8awDwyG+UTfvp5RL6cdkCPb@vger.kernel.org, AJvYcCXbEh+Pn7MNkaWaIyGtjUvBjsUmxvXZsiAp3lS94duo9CVie88pMGqpPOsPsEPxHtpUZud+YqOY0Lc3WPIMmML0UZU=@vger.kernel.org, AJvYcCXn23kfHPVZZjPOMYAoGcbf+7DoU48txxTYmVSSQ75/FxWkraFcQJyMBksfkhB5+D5KPIdQgx/BSV9N@vger.kernel.org X-Gm-Message-State: AOJu0Yzw9aai4wripfEMdzJ0xQHqcDMiGzhnJ5C9tR4SRsiW2kudMp9W 3l81jajhbn7zHRWh/QP+wQEtfOXtakkAb4Mh+Tlq0JB8fgsJmrH+ X-Gm-Gg: ASbGncsELy+cQpeMGTpuMnkp/gpQxCJdmZkercZ2wP2dqBRTjWL6XdvQqwK/Vu/NfZm tjeFpR7hJF41AzJelgYgW9vgGFyDKT3kzn0lGpADd/hAliCEehtK0lK2bop6V1F0HTZTS3gYO0w XSeohCowis76hfA+rMorQF2Z2clLX5dv5cRj3NhNQzqTO6btzJUzfH2zY66Hc4juDWr+VTSDjQ+ d7SFlezTs/PlYdoCeJUbpDx43XU2q3RKZ9XDEwT7kw4TQOoApr82hDq4Bu3JgP+kghFB2UcFjEG tuooD8Mw5kacKXK3/oaJwD71WTUuvyhUntyDVU7mr9b2cwf6c/WK3QWDLaUCqtQuPPSFz1YoFjM = X-Google-Smtp-Source: AGHT+IF1Ipl/5U6SwjsJg0vzNSDQtkdpF5VTD0kmaDcq3x0fBQp4qrl2QURIQ/+alWMxNKSu0iBmGg== X-Received: by 2002:a05:6000:2284:b0:3a0:8c68:19b7 with SMTP id ffacd0b85a97d-3a08f7985d0mr4459303f8f.3.1746045680588; Wed, 30 Apr 2025 13:41:20 -0700 (PDT) Received: from iku.example.org ([2a06:5906:61b:2d00:c5ac:bf15:f358:81a8]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a073ca56d5sm18098132f8f.32.2025.04.30.13.41.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 30 Apr 2025 13:41:19 -0700 (PDT) From: Prabhakar X-Google-Original-From: Prabhakar To: 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 , Biju Das , Geert Uytterhoeven , Michael Turquette , Stephen Boyd , Philipp Zabel , Magnus Damm Cc: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-clk@vger.kernel.org, Prabhakar , Fabrizio Castro , Lad Prabhakar , Krzysztof Kozlowski Subject: [PATCH v4 03/15] dt-bindings: display: renesas,rzg2l-du: Add support for RZ/V2H(P) SoC Date: Wed, 30 Apr 2025 21:41:00 +0100 Message-ID: <20250430204112.342123-4-prabhakar.mahadev-lad.rj@bp.renesas.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250430204112.342123-1-prabhakar.mahadev-lad.rj@bp.renesas.com> References: <20250430204112.342123-1-prabhakar.mahadev-lad.rj@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Lad Prabhakar The DU block on the RZ/V2H(P) SoC is identical to the one found on the RZ/G2L SoC. However, it only supports the DSI interface, whereas the RZ/G2L supports both DSI and DPI interfaces. Due to this difference, a SoC-specific compatible string 'renesas,r9a09g057-du' is added for the RZ/V2H(P) SoC. Signed-off-by: Lad Prabhakar Reviewed-by: Krzysztof Kozlowski --- .../bindings/display/renesas,rzg2l-du.yaml | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/Documentation/devicetree/bindings/display/renesas,rzg2l-du.yam= l b/Documentation/devicetree/bindings/display/renesas,rzg2l-du.yaml index 95e3d5e74b87..1e32d14b6edb 100644 --- a/Documentation/devicetree/bindings/display/renesas,rzg2l-du.yaml +++ b/Documentation/devicetree/bindings/display/renesas,rzg2l-du.yaml @@ -20,6 +20,7 @@ properties: - enum: - renesas,r9a07g043u-du # RZ/G2UL - renesas,r9a07g044-du # RZ/G2{L,LC} + - renesas,r9a09g057-du # RZ/V2H(P) - items: - enum: - renesas,r9a07g054-du # RZ/V2L @@ -101,7 +102,12 @@ allOf: =20 required: - port@0 - else: + - if: + properties: + compatible: + contains: + const: renesas,r9a07g044-du + then: properties: ports: properties: @@ -113,6 +119,21 @@ allOf: required: - port@0 - port@1 + - if: + properties: + compatible: + contains: + const: renesas,r9a09g057-du + then: + properties: + ports: + properties: + port@0: + description: DSI + port@1: false + + required: + - port@0 =20 examples: # RZ/G2L DU --=20 2.49.0 From nobody Sun Dec 14 12:11:01 2025 Received: from mail-wr1-f44.google.com (mail-wr1-f44.google.com [209.85.221.44]) (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 7E4682C1E33; Wed, 30 Apr 2025 20:41:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746045685; cv=none; b=IRAC0jaByedBJjkLN9IVS9a7dPoHBXHH9z1ML+lTSJ2ueO/fuIIsmnixit6w1nh/jH/c/0scLehdNUzB7n0cTyL6zw1H/GhQEur7tPyVeAR4eNtoeianToMw2A22BGmdtC7/FtZmAHMyAhGcjSvhl2OVnfUVrWvgM2bKxKg4xR0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746045685; c=relaxed/simple; bh=y9RanTDCK95O3sXyhtwa3LzBzemnwjtblESp+uo9hos=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lNm2PVHtmle+rdKsVci6UMIbXC9xLOhX5gTSlpzWWqSnr7g/iYn5Ld7KdXFUqq/DjBr6SpYcqGoKV2LKj7PapoOMYsL62eRw/DopFHPnz+SsWT9/udgb0+pORA1+G/15SpaBLrRCSht/PbNOmg/VUJjaUs5IcnP9M8vaH9/S+wE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=bIRedCNP; arc=none smtp.client-ip=209.85.221.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="bIRedCNP" Received: by mail-wr1-f44.google.com with SMTP id ffacd0b85a97d-3913d129c1aso229954f8f.0; Wed, 30 Apr 2025 13:41:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746045682; x=1746650482; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=jc5lidqt7Cbw64Edi7Dquoi+na+E/0kDd6ZUHEglJ3Q=; b=bIRedCNPGXSXO3bhNW68oomM7GpR94iNCYhMnI8bD2kbiNrx5PnxNM+9htqWm42iqC uo/hr6BzOApj+9s8xWmv9e/0scLu3xiOQfsw88WVo02fUdiZ3wR7tuRVM0p+1JnFSXEe gYHlRAs6KCAsL/Q0CtOaujwaIYfPE+HXc+8mhR7P61MWdLem/i0e2tITfhfw4N+GzBRE ExxBp+L6Fyqpm/IlG/nT6rCEHaP//D0vVqb1wKEQV9bNnEuHDHL3mrTUtt6Fwlkz0mOZ uvZAszpyiiXu683OcxE1po9Q42JHJzQbXXRtJYs4vpbWwgvLJUCqaVTXgxDw+w4wIS0d 5SKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746045682; x=1746650482; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jc5lidqt7Cbw64Edi7Dquoi+na+E/0kDd6ZUHEglJ3Q=; b=XSpp9bjARvnAG0x5WdjpMUeNBLaHBsH/wljhRntElEUBcoZlqJKIlbS+3LlQRbSwFo EevFZ0SmuAUe0R6k67Ai03gP5q2dvgumXwYpypCFFHr4o+9wiujH8Q7RqtHKPLYiy7+E /IRQghxtfbLlLAZfvN7R3zbmMtwpqC0gpUF9d6GjgEWOA6hoLzzoemr8DYcdh+KYXieV ZkgetIO1v3hNxWdMOPtn7lGZ84qY2PLKKi1Emv1jNPAEfPwVafxhdAjS+eDABkJvn8Cq WB/ttxuYf5gCrBysXKuXXD7UBMLF3EIpPFF8242rRSmXmsJOfO7dkrXQhy2UhkTKV4FY 1llQ== X-Forwarded-Encrypted: i=1; AJvYcCUFw58djnU3G6xL7TykjzBmrbJQM2AaK15SSwyoGzh1Owt9L4dsXYeeRbeOsIgRyajrgJdeMbe4jAzkOdue@vger.kernel.org, AJvYcCUkY7u4gFIjlw3+dlOsKIn3TGv471SUMMmzC/AZkDa317WpBuhn9wnxPvbU4BixepaEo4eLEy3MU+qJ@vger.kernel.org, AJvYcCUnLkXwmkefMen4o8iMzmvs8lKG5Q2O6gvtYehOmBVJCVWpJhAP0GaOGoQO1VCYhN3enJ6MhrkWB63Fue9WHS8Ig5Y=@vger.kernel.org, AJvYcCVU+vxYqwnrdHEyV7UhweGub8vGJWcjrC+NuAxfVnlcNG/Vg0dchg0lOOhkWCBdOiDIzGwExFiDa5fQ@vger.kernel.org X-Gm-Message-State: AOJu0Yz4ERzW62ixm/sowoAbw27ikP5wGFMWQzsvcwksdlN/fZuegHrK 4mQltf8HIDHbz45d6vhuDGekdUk7zNtm1J2inUkv0pMM+batr2aPxT3+M/ih X-Gm-Gg: ASbGnctDWmJZQ+GqaaqQKtb6QJ9hQYvavzyWXwctLBXz4p2DPGNonHqOlUEQabZ9XaK 8d0qO/a4YKTsQgHtAB7gUla5logbdBwFvvIlJAP7TqNxltXB6vK1560mGH5Hcs/xHOD2zZxwgQV Fh0Alfr1yu+dwDmKVpHaGGmfBs2Fdq5wXLGmoSVIJZPiHlWLH/fdbmAcAL2TITFX6gMu5b/UetU w6GPk9XWAOHM8W2f0ups1pynlJ9wmqUahQDF+guhuhLTO1x2cpscL1URFTWAxze74rEu7USFDt9 uDJOpqOrsogMbE+QSqaIKiRb4GbyXdfX+3uHt2NdphU8Z2bXXxuNVkJkBjsKiJW+7HBpL7dEesI = X-Google-Smtp-Source: AGHT+IHHUzMFGKdxDgyqCJTuyhZ0PlVXOJ6jz8lXKnYp+UQF/DbTdDXvcPgePTRPDX4p19budtmtQw== X-Received: by 2002:a05:6000:2207:b0:39c:2673:4f10 with SMTP id ffacd0b85a97d-3a092d05854mr732931f8f.23.1746045681638; Wed, 30 Apr 2025 13:41:21 -0700 (PDT) Received: from iku.example.org ([2a06:5906:61b:2d00:c5ac:bf15:f358:81a8]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a073ca56d5sm18098132f8f.32.2025.04.30.13.41.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 30 Apr 2025 13:41:21 -0700 (PDT) From: Prabhakar X-Google-Original-From: Prabhakar To: 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 , Biju Das , Geert Uytterhoeven , Michael Turquette , Stephen Boyd , Philipp Zabel , Magnus Damm Cc: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-clk@vger.kernel.org, Prabhakar , Fabrizio Castro , Lad Prabhakar , Krzysztof Kozlowski Subject: [PATCH v4 04/15] dt-bindings: display: bridge: renesas,dsi: Add support for RZ/V2H(P) SoC Date: Wed, 30 Apr 2025 21:41:01 +0100 Message-ID: <20250430204112.342123-5-prabhakar.mahadev-lad.rj@bp.renesas.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250430204112.342123-1-prabhakar.mahadev-lad.rj@bp.renesas.com> References: <20250430204112.342123-1-prabhakar.mahadev-lad.rj@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Lad Prabhakar The MIPI DSI interface on the RZ/V2H(P) SoC is nearly identical to that of the RZ/G2L SoC. While the LINK registers are the same for both SoCs, the D-PHY registers differ. Additionally, the number of resets for DSI on RZ/V2H(P) is two compared to three on the RZ/G2L. To accommodate these differences, a SoC-specific `renesas,r9a09g057-mipi-dsi` compatible string has been added for the RZ/V2H(P) SoC. Signed-off-by: Lad Prabhakar Reviewed-by: Krzysztof Kozlowski --- v3->v4: - No changes v2->v3: - Collected reviewed tag from Krzysztof v1->v2: - Kept the sort order for schema validation - Added `port@1: false` for RZ/V2H(P) SoC --- .../bindings/display/bridge/renesas,dsi.yaml | 116 +++++++++++++----- 1 file changed, 87 insertions(+), 29 deletions(-) diff --git a/Documentation/devicetree/bindings/display/bridge/renesas,dsi.y= aml b/Documentation/devicetree/bindings/display/bridge/renesas,dsi.yaml index e08c24633926..5980df2b389b 100644 --- a/Documentation/devicetree/bindings/display/bridge/renesas,dsi.yaml +++ b/Documentation/devicetree/bindings/display/bridge/renesas,dsi.yaml @@ -14,16 +14,17 @@ description: | RZ/G2L alike family of SoC's. The encoder can operate in DSI mode, with up to four data lanes. =20 -allOf: - - $ref: /schemas/display/dsi-controller.yaml# - properties: compatible: - items: + oneOf: - enum: - - renesas,r9a07g044-mipi-dsi # RZ/G2{L,LC} - - renesas,r9a07g054-mipi-dsi # RZ/V2L - - const: renesas,rzg2l-mipi-dsi + - renesas,r9a09g057-mipi-dsi # RZ/V2H(P) + + - items: + - enum: + - renesas,r9a07g044-mipi-dsi # RZ/G2{L,LC} + - renesas,r9a07g054-mipi-dsi # RZ/V2L + - const: renesas,rzg2l-mipi-dsi =20 reg: maxItems: 1 @@ -49,34 +50,56 @@ properties: - const: debug =20 clocks: - items: - - description: DSI D-PHY PLL multiplied clock - - description: DSI D-PHY system clock - - description: DSI AXI bus clock - - description: DSI Register access clock - - description: DSI Video clock - - description: DSI D-PHY Escape mode transmit clock + oneOf: + - items: + - description: DSI D-PHY PLL multiplied clock + - description: DSI D-PHY system clock + - description: DSI AXI bus clock + - description: DSI Register access clock + - description: DSI Video clock + - description: DSI D-PHY Escape mode transmit clock + - items: + - description: DSI D-PHY PLL multiplied clock + - description: DSI AXI bus clock + - description: DSI Register access clock + - description: DSI Video clock + - description: DSI D-PHY Escape mode transmit clock =20 clock-names: - items: - - const: pllclk - - const: sysclk - - const: aclk - - const: pclk - - const: vclk - - const: lpclk + oneOf: + - items: + - const: pllclk + - const: sysclk + - const: aclk + - const: pclk + - const: vclk + - const: lpclk + - items: + - const: pllclk + - const: aclk + - const: pclk + - const: vclk + - const: lpclk =20 resets: - items: - - description: MIPI_DSI_CMN_RSTB - - description: MIPI_DSI_ARESET_N - - description: MIPI_DSI_PRESET_N + oneOf: + - items: + - description: MIPI_DSI_CMN_RSTB + - description: MIPI_DSI_ARESET_N + - description: MIPI_DSI_PRESET_N + - items: + - description: MIPI_DSI_ARESET_N + - description: MIPI_DSI_PRESET_N =20 reset-names: - items: - - const: rst - - const: arst - - const: prst + oneOf: + - items: + - const: rst + - const: arst + - const: prst + - items: + - const: arst + - const: prst =20 power-domains: maxItems: 1 @@ -130,6 +153,41 @@ required: =20 additionalProperties: false =20 +allOf: + - $ref: ../dsi-controller.yaml# + + - if: + properties: + compatible: + contains: + const: renesas,r9a09g057-mipi-dsi + then: + properties: + clocks: + maxItems: 5 + + clock-names: + maxItems: 5 + + resets: + maxItems: 2 + + reset-names: + maxItems: 2 + else: + properties: + clocks: + minItems: 6 + + clock-names: + minItems: 6 + + resets: + minItems: 3 + + reset-names: + minItems: 3 + examples: - | #include --=20 2.49.0 From nobody Sun Dec 14 12:11:01 2025 Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.54]) (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 779952C2ACE; Wed, 30 Apr 2025 20:41:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746045686; cv=none; b=U8hibufiY0nsz4dXdUDAcc1lGzirfXeuSOIzTgTANcYBJ4aygGqtu01P8HVgMXyvuw0Inp3LGATxHAdq4as+qllW/0D4GL9t3cOCp7EoVyEFXO6/e/crFLrJ2k75brWaHqSelOoPXw7SOtd+K7SidWaBbxuvNXYnzFOunSS7aus= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746045686; c=relaxed/simple; bh=7gmW44bD7h7zUhjFwYkroXCgvjm9X9Rr/PvCicnjZ9c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=r6ySFTnM5+JautN1ch3HWfeI/SRHUp0XSEt6EKJlnP93ngRd0s/bOHoejM5+S0sCi8Iu+wtHtPBZQsbCI9JmXyY10JIgeLlAIMf3uUEsEzRa2JHznKq6R6GtBN9GX9XuX4zww1KNOegfdcDT1+s3pfq2YuqYJEoL5132XBaLX/0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=AGPuQrzt; arc=none smtp.client-ip=209.85.128.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="AGPuQrzt" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-43ed8d32a95so2225155e9.3; Wed, 30 Apr 2025 13:41:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746045683; x=1746650483; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ZMYwFd61jeM/AnC60Zap8f4r2F5Tqp87rmWVrFS3Wvk=; b=AGPuQrztxwoatQh03ZULYucvPKxLosmlBRJPY7eFPv2H75yxkDoikj1tp1j18AOUd+ LWBYnouhINuo8VGMwyyRoBNiX6ttIXYvq4Q1sI8zNb2nSeYmYymGFfzIILPaJl0GZI2q DZal6Vi655JgmtAd9D64inTybW/+2nn/dp0GkRC5Ch9l2YbQcmYJ3alqw4NCj8qrQONL lzzD/tJYJq0oN7PBVFP+5woWfgP8f5xufhqBFAgqjPcEXuPjczAJhzDFow9JabIWboII eEx9DknVBMkfH8I4FDyTNTVfFFDRKGnTcoNg8WjD6ekoiJZM+WuBsNdQ27iBkGuwrKWH UqrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746045683; x=1746650483; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ZMYwFd61jeM/AnC60Zap8f4r2F5Tqp87rmWVrFS3Wvk=; b=DZrFD0jV1cFIwxHeFKtiUsQkT3okRP2CfQzhHC10fZi3Gj1i43erDt9dUEj9FJuXon cXbpEDzwzbZzaEFbXOAU0Ap+xXMR1aCzJ+FQynT/kq+Hqs73/ysUnzSaqg0/0bPyVZhB gkXSpHuBFVbv+97lVcO20a2eiAe9KGbBgGRlZPNiJBvj4bkiRgDgjKtg84QJ7eYI7s/W 5p1iDp3Jg5ZwTs35ZH++hr7TpbTWeG8sXI/0VWz50XMSIvISGiEWnyEZA1AfP3B3P2BO 40WYLlbNA7Pm+VBN+r8gnyJTpjUoQNvQIhGvGx8jXxnhFmg1Hn09iNer+QB92BEyRRm1 bFqA== X-Forwarded-Encrypted: i=1; AJvYcCUXazEdMjynS+WmsC+geWHUeAOdr4ajEcpp6njJDrxuZN+kBpQzv+sqxzZcvQnNHtrFhi8dxnHFZ9Z48X46@vger.kernel.org, AJvYcCUlzAZ20oxjxd5pOv7N4RvKVnXFvbrMVFU0nnq0VpNZy3q0jfHdxECL/N54nCTlpueleQT8Adl1WIWHMn0gGFPU6Ts=@vger.kernel.org, AJvYcCVM0pzrhWN6fQknXGTWI4z5PbO3mlHd2/5Rp/zbLOAmBW+Lpc+kgi9t9YZekQFea8zjC+JvCFi3IzVt@vger.kernel.org, AJvYcCWhCHq+4WKXcz2yYu50gpN4SMQKm2XxVw9Jk10Na7ELFvNkWMRCh91sB6DECmgBTVcEAvVLXVWmKiZ3@vger.kernel.org X-Gm-Message-State: AOJu0Yx3jukBDexMAeWrPOC5vMcBbGVPqpRMHlMOvY03oVLEir47Vlc1 LXUObb7QOodRUZ1nOYOWK3yDP8dIZ/aWJhDcsS+IOR8FNWEBFU/v X-Gm-Gg: ASbGnctuTfAsPqCWakHqfWvpr1MS7VxiaZtBo3ji5GJrjT4sfpOjWlrAeqSuUejNPwF MBFPwqJ4x6w5/c+I76BVrvNhmVM/PTgp415uYNAD73hAsgJFgp/ZkEIkUKzecQrU9YWCC9uNrmW hw5n0USBGFYsyTwVgfwfJDhB6AZEULrIHA62a0uVwkAv6WgLPVK6SPaLGYWnxSEMAZ/OpAlgjpm CcPYjEN8cqExuL8I+ePfXq06koIPi6wrxlswKci4NaIodbL8fYAunOJ1YFaSE+B/PFwctaXuNQg PETxRcoQebCL4sZUFqxirgrXrX+i08IA8mTcPdKKatM4nZNJyefMD9hUBzWOrcJVx/AoNz3XX29 l0156EbjXxA== X-Google-Smtp-Source: AGHT+IG1s0JflHsvw7aoodVtDTDPq8eFL7Snt93pxGgKfMKfGwBj3pCsYKVbW91T/9KWyRPQ+tNe/g== X-Received: by 2002:a5d:5f92:0:b0:39e:cbe0:4f3c with SMTP id ffacd0b85a97d-3a08f799858mr3861267f8f.8.1746045682804; Wed, 30 Apr 2025 13:41:22 -0700 (PDT) Received: from iku.example.org ([2a06:5906:61b:2d00:c5ac:bf15:f358:81a8]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a073ca56d5sm18098132f8f.32.2025.04.30.13.41.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 30 Apr 2025 13:41:22 -0700 (PDT) From: Prabhakar X-Google-Original-From: Prabhakar To: 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 , Biju Das , Geert Uytterhoeven , Michael Turquette , Stephen Boyd , Philipp Zabel , Magnus Damm Cc: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-clk@vger.kernel.org, Prabhakar , Fabrizio Castro , Lad Prabhakar Subject: [PATCH v4 05/15] drm: renesas: rz-du: Add support for RZ/V2H(P) SoC Date: Wed, 30 Apr 2025 21:41:02 +0100 Message-ID: <20250430204112.342123-6-prabhakar.mahadev-lad.rj@bp.renesas.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250430204112.342123-1-prabhakar.mahadev-lad.rj@bp.renesas.com> References: <20250430204112.342123-1-prabhakar.mahadev-lad.rj@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Lad Prabhakar The LCD controller (LCDC) on the RZ/V2H(P) SoC is composed of Frame Compression Processor (FCPVD), Video Signal Processor (VSPD), and Display Unit (DU). There is one LCDC unit available on the RZ/V2H(P) SoC which is connected to the DSI. Signed-off-by: Lad Prabhakar --- v3->v4: - No changes v2->v3: - No changes v1->v2: - Added enum for RZ/V2H as suggested by Krzysztof as the list will grow in the future (while adding RZ/G3E SoC). - Added Reviewed-by tag from Krzysztof. --- drivers/gpu/drm/renesas/rz-du/rzg2l_du_drv.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/drivers/gpu/drm/renesas/rz-du/rzg2l_du_drv.c b/drivers/gpu/drm= /renesas/rz-du/rzg2l_du_drv.c index 5e40f0c1e7b0..e1aa6a719529 100644 --- a/drivers/gpu/drm/renesas/rz-du/rzg2l_du_drv.c +++ b/drivers/gpu/drm/renesas/rz-du/rzg2l_du_drv.c @@ -50,9 +50,20 @@ static const struct rzg2l_du_device_info rzg2l_du_r9a07g= 044_info =3D { } }; =20 +static const struct rzg2l_du_device_info rzg2l_du_r9a09g057_info =3D { + .channels_mask =3D BIT(0), + .routes =3D { + [RZG2L_DU_OUTPUT_DSI0] =3D { + .possible_outputs =3D BIT(0), + .port =3D 0, + }, + }, +}; + static const struct of_device_id rzg2l_du_of_table[] =3D { { .compatible =3D "renesas,r9a07g043u-du", .data =3D &rzg2l_du_r9a07g043u= _info }, { .compatible =3D "renesas,r9a07g044-du", .data =3D &rzg2l_du_r9a07g044_i= nfo }, + { .compatible =3D "renesas,r9a09g057-du", .data =3D &rzg2l_du_r9a09g057_i= nfo }, { /* sentinel */ } }; =20 --=20 2.49.0 From nobody Sun Dec 14 12:11:01 2025 Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) (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 87D202D0282; Wed, 30 Apr 2025 20:41:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746045687; cv=none; b=bbIhwPmHfhdGxoT3NoCo6FfppHayh8uXI1viH0fARPRy3IwcDzd1WQ6pGV353wk85dAKLLlc9MrARC3SXCrluNGbmxu14m9EewG7a7YlO/zSWcioHTgCM7MQeQen81Np1CJW73ZeJ72UrbA8TdM4HVw0Im8/bQgjkLhn4UE1oAw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746045687; c=relaxed/simple; bh=WEusjA7ReB2cxBCMHievkibW54OsTj3FYSQez5NwNOE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dBDc/sUsWQzpEmyJk51npZkN4wPhkzKAMFxq+xCtE0BrjhPB3ngQx/9EcSu3Y/MusLzR9h/MjWf0BdKKGLnJcd7aAHIauuyLQ9FKVpZYdBkye0lVukGHwvDi8wqZ/PxJBx612XwBjdwA6IjVEWquMnat5neTRVfWCKG30QFW/QA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=U5QfSty4; arc=none smtp.client-ip=209.85.221.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="U5QfSty4" Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-39c13fa05ebso165019f8f.0; Wed, 30 Apr 2025 13:41:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746045684; x=1746650484; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=/J6f44qXU4d+QYXzioKtQndqvRly6E758jI0u/hrS88=; b=U5QfSty4BzSEAY+OpZM3brcPXdq7DK36am9DuJaBWypKspLDSCAVXmpQiDQfR9rI8t CqVaq/lguscRCO4vy5e51tDM3D5W6Jf1ceuY0cGvHPNUu70KUWqpQhUriloqE2yMVOeV M3Jx7iUbWH9LJKfrn/jRce7qldtOBIa2GhA60+HMi4ULkXM0ZRcibuQPi3h5VLSVibAr go0wVPLx6GFiqoujz1QvMC75U1JZzwnJ7Zdbr0XxpOQ3ENIAciUtfAESTrz/Ld1i71FR /aLWEUlPDVUN3jUA0SNvEYGoLWR1Rjsai0MtFt2bdeYIM2WKsKroKbKB4oAQq2PZd3Mx VxtQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746045684; x=1746650484; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/J6f44qXU4d+QYXzioKtQndqvRly6E758jI0u/hrS88=; b=n7n9nJEt8vqXgvB6EhO2fui0Vxkm9wDq6hPxxnCRGTCzmkju8OAkOStV8j3EnRkTom 1A+Jp6zt2DPUfRkbE8/r8QRJjf/e0Lvz6D8JztTKN17Mg6sraw7Crsrj87Zzg3hPo0Xr IZb6xvkXJzeud8cAwTxtdeS5i5kzyLyaLREr2oraSzJt/6PTK66Qd9yMyj7Czk9l4ZZF sQm3GbGoBnVBtyPqJ7g0cYo3wcDwLLkqbUJXYO9Ew1ik+5cSOnv7YGS+Cp+7oHeheaCS +Ri9/wQrfbg+2JDAOxfWmL7bMQuw5aOQ0o9dQ5D9SO0x1WEtN9hkX6AAaHdawTW1oSA8 z2Xw== X-Forwarded-Encrypted: i=1; AJvYcCULbG2Yf2diIu0QV7ZXH/N7CoETf6x6F1yW2LztknnyEaiGciv3j5Qn5oZahgaQoM4tmGJhs9d5BtHb@vger.kernel.org, AJvYcCVF0xm80jtrfZERs6dH/qh5KaSqpHS9z8QQ4P8oxOrJ0v5Os83BOAGHpFuIrOTrcQEc+Vazrx3Rv9gf@vger.kernel.org, AJvYcCWwInyRt2BBqZwGqGqdctY73PieErhvKOxX4fNCF8aGpbsUYzN/htzH2VOVOFKjP1a1LWxJV36DagUTj3V/@vger.kernel.org, AJvYcCXKO1eWApXdOjBRwq6wwBTUuj1sq7PNY/qRLySqpUNBsOjK48Sd9dHAfinVu484inl3izQlWIhSr1G4MsIVne6QtpQ=@vger.kernel.org X-Gm-Message-State: AOJu0YyRmqZ7uYTE7IjY2M6w0hpCGKKifiIZdy9A0C35AyCYaFfhaUml VJwtRy39zePKcobWD5ZcQl6sVc8650FEnLdpdLls8+4G1AOaJnE3 X-Gm-Gg: ASbGncuTQ8OjC9PiBWVDPOJ4Zwz7jgmkfzS58GykgsZe3702r0YSRaMtjzMdVTWGFQU 2CvNS5kCbIR18mytTW7P4L0eM/Ylv4ZTBbjmeUu46jfYIP6cKGwzNEzEdViMO1CIik2wnVPSmqT a3xvfmZdPjYvCSEIlnx4u1nlV67md2Uk+tN567ckEwiyblCz7ov/Xf9aOtZOdZ3iIpa4n+K3S/4 SbeKgCgWWKNj9EWFK7QyoQFJBwjCVSTw8eLxWJYbrRNTpHIaO9cqeDt2L7aB9NfePTv5N8uX/J8 XAmCi+O+g7l4/W/fzNmB8awH4EXDM+bC4AzNkP3SqUf+0nz7XC4UkDD+5nGFOSj3s6aKTMWMbge /Wq7wXEPXSA== X-Google-Smtp-Source: AGHT+IGihVH6SKs3W13DbVj6p5AfcNt/R8LnX1oxZatYwR5jlHBRYRJRXn55KS6WCOqZEYzxUTvVqQ== X-Received: by 2002:a05:6000:2dc3:b0:39e:e588:6721 with SMTP id ffacd0b85a97d-3a08ff34cd8mr3628651f8f.3.1746045683894; Wed, 30 Apr 2025 13:41:23 -0700 (PDT) Received: from iku.example.org ([2a06:5906:61b:2d00:c5ac:bf15:f358:81a8]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a073ca56d5sm18098132f8f.32.2025.04.30.13.41.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 30 Apr 2025 13:41:23 -0700 (PDT) From: Prabhakar X-Google-Original-From: Prabhakar To: 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 , Biju Das , Geert Uytterhoeven , Michael Turquette , Stephen Boyd , Philipp Zabel , Magnus Damm Cc: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-clk@vger.kernel.org, Prabhakar , Fabrizio Castro , Lad Prabhakar Subject: [PATCH v4 06/15] drm: renesas: rz-du: mipi_dsi: Add min check for VCLK range Date: Wed, 30 Apr 2025 21:41:03 +0100 Message-ID: <20250430204112.342123-7-prabhakar.mahadev-lad.rj@bp.renesas.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250430204112.342123-1-prabhakar.mahadev-lad.rj@bp.renesas.com> References: <20250430204112.342123-1-prabhakar.mahadev-lad.rj@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Lad Prabhakar The VCLK range for Renesas RZ/G2L SoC is 148.5 MHz to 5.803 MHz. Add a minimum clock check in the mode_valid callback to ensure that the clock value does not fall below the valid range. Co-developed-by: Fabrizio Castro Signed-off-by: Fabrizio Castro Signed-off-by: Lad Prabhakar Reviewed-by: Biju Das --- v3->v4: - No changes v2->v3: - No changes v1->v2: - No changes --- drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c b/drivers/gpu/d= rm/renesas/rz-du/rzg2l_mipi_dsi.c index 4550c6d84796..ec8baecb9ba5 100644 --- a/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c +++ b/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c @@ -584,6 +584,9 @@ rzg2l_mipi_dsi_bridge_mode_valid(struct drm_bridge *bri= dge, if (mode->clock > 148500) return MODE_CLOCK_HIGH; =20 + if (mode->clock < 5803) + return MODE_CLOCK_LOW; + return MODE_OK; } =20 --=20 2.49.0 From nobody Sun Dec 14 12:11:01 2025 Received: from mail-wr1-f45.google.com (mail-wr1-f45.google.com [209.85.221.45]) (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 2DC712D0ACA; Wed, 30 Apr 2025 20:41:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746045689; cv=none; b=ClNvOWuMsKkFu11oNH4BI9t92x0AlAcZyP+y6jA3GSNbhCQ9xKc0U45S7AbA/7fFN8KetGQ74ZtB/wT9+RD6Lte3hHNz6kh8yeGfY0PAmZqHCg6Xz4/dLLBQb0gvZ/Z1Ae16jTojODYsXNPW4k6ahEf3xn5IplqQG64CvBAE1Us= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746045689; c=relaxed/simple; bh=m2WVpGudjVYKghVXuslACSMVKgAUc8Yti8rw1zX7zm8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=auLJXoq7zbRfUkL0FqvLcWp/zPMqRRizZpty42omWQYcKjcJ+MO7t7YYKdGMva/8zCbs/Jtti2CrDrIld70GHToqmQbbt72IEjojsrlPDsHYHU6Q5/GB/jR8eRipX4QrnwiWVgQ0PK3HJNzhcTMDcvJoOkW5+Fs26p17n0vs85E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=CG7hUE9g; arc=none smtp.client-ip=209.85.221.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="CG7hUE9g" Received: by mail-wr1-f45.google.com with SMTP id ffacd0b85a97d-3914aba1ce4so126871f8f.2; Wed, 30 Apr 2025 13:41:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746045685; x=1746650485; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=2FmVRNDgJPoOZl+FC+46sU6QYP5fUdspzcddo65eVNA=; b=CG7hUE9gqwNhieglhI32GYj0nEWTpB1Kb8QiiByDc1RZ0+U3/7OlIRBs36AMaKVA4q Pz/IFahiYhk3QHmAOBwnkwMxq+Qq8WXTXnS3tBL2u/XiFtql1DpkqIQfvMje0EC2n7YB RQwy6PvZo4BWZ6Wj0DufbKDctJ+fR428kmTw6pb9LL/cdjBnEIXQzyt/VkBbL0j5Nakm hUeCr9Es+ezA1IboHwn18cj9LJVkw+Cc+kwvZE/RcFBIJGq1EQwzGdQ+JrZEmulLvPUb Fk3Oeytz1RHtptOxWRY2goePwQWNYfXHg1SXqjbN0Fk0E9wNcqSzFbqOehpM/tAFQdwf 4fhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746045685; x=1746650485; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=2FmVRNDgJPoOZl+FC+46sU6QYP5fUdspzcddo65eVNA=; b=E9XHNns539AODi4+CI0/ePJKefXK3mpf87E7rVX/wGeV9U4+aWuSnFlu1GfqsjIR7c CpsOrLSwbaD+d72EV0OZIM3VOXbGQsiU862the+k+2e3llPN5nnlqyq7JChd89b15PNV 1XV+VMKwKJYl/81/wSuFQRmab7r9UoW5ivGwNIUHr/2D48Vpq3kDrRrKVQYTY96B0bHj UZOb2HO7bgnNX0lCOw5M8yZYr+jgBcMSkmqzxMcg01Du4d5e7ILYuroaT3qkFabNtAtS i7zqWRIosqQ4NiOLteTy1Os1BlSG3b8Tsczj/mRiAq+tY8NMna7LBGpizPxd2b7fZ0+i 974Q== X-Forwarded-Encrypted: i=1; AJvYcCVfL1LjVN8dHFc8NyGqsZTDtG1NHbA8XWvxcazzmeHjj7z+dN8+5r4OLU0vJQJ7ZIDZsB3Fyyf4sdb1wp7F@vger.kernel.org, AJvYcCWBalFMpc9ONCtR1IDZ9K5soSdzyhoxKLxJKpKXCR6LzEkLK9M0iAJrIL1dkAkJD/PKfMYTJ5nk0/nM@vger.kernel.org, AJvYcCWDH46OtMKRpnF7Wqbifruz1HQSWOiuBDtB+7NIvnCcFd38svNfKler2rSp6lNz2A1UE0fVl30QtKsFYdb0kXRu844=@vger.kernel.org, AJvYcCX2ylCmFnBj6Qs6CHbKU9hsXpsPo5+/V5FHoZtYelQDX1IbbIVg8rlEvyxjeA5xCvnI+B+Nre0EfcLY@vger.kernel.org X-Gm-Message-State: AOJu0Yw18MclKhGHsDWkNxiTrBxZdX4bAcozeTnf5oBFRbkt/VkveAJs XOjwEBoWS3c/G4RARc0PseANFC1oADuigJ7oc8sCWgu/25ZTkIXV X-Gm-Gg: ASbGncuAIwPIli/+pNnzUQd6qvOli5UzDABUHOLlA9Klzr9ltWlTkhOSHCwP1QR24pt f2c38RMrsJRgtOrV0Yvr/WiR7iT5QhmKuZ1VLVrWfU7cmlqMndWoWp7AygE6ldgD2/mcWckyPWO nZERhjyD+ZWEblR6qWrGsX+gNF/MicIZ6EmZNgC5N91Qq7XSYln4zBBE3cOdNrFffP4n/3jA0j+ 8kSCcLu4OMZ8Vw7zKGidiWz02JckwuiSdWa9c3C2BfW2vPwNPJx/ueTj72cWAWWH0b22hWJe6Ok gfdKAoYDOywDYv4FX2glwiIJ2keW86w8YrWsQ3bQOxf1vA52SU06KSrwYb+PTltA6mOoOUz/78G vdzhCnG/YDg== X-Google-Smtp-Source: AGHT+IH9VR/VG4GN6DoM4fsKWmDGoKDTPJxSI0HLkhKGuQTGv3jCyVAJF+y5EeS1rD6wkxPX1n97wA== X-Received: by 2002:a05:6000:310e:b0:39c:13f5:dba0 with SMTP id ffacd0b85a97d-3a08f760dcemr4921596f8f.13.1746045685394; Wed, 30 Apr 2025 13:41:25 -0700 (PDT) Received: from iku.example.org ([2a06:5906:61b:2d00:c5ac:bf15:f358:81a8]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a073ca56d5sm18098132f8f.32.2025.04.30.13.41.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 30 Apr 2025 13:41:24 -0700 (PDT) From: Prabhakar X-Google-Original-From: Prabhakar To: 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 , Biju Das , Geert Uytterhoeven , Michael Turquette , Stephen Boyd , Philipp Zabel , Magnus Damm Cc: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-clk@vger.kernel.org, Prabhakar , Fabrizio Castro , Lad Prabhakar Subject: [PATCH v4 07/15] drm: renesas: rz-du: mipi_dsi: Simplify HSFREQ calculation Date: Wed, 30 Apr 2025 21:41:04 +0100 Message-ID: <20250430204112.342123-8-prabhakar.mahadev-lad.rj@bp.renesas.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250430204112.342123-1-prabhakar.mahadev-lad.rj@bp.renesas.com> References: <20250430204112.342123-1-prabhakar.mahadev-lad.rj@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Lad Prabhakar Simplify the high-speed clock frequency (HSFREQ) calculation by removing the redundant multiplication and division by 8. The updated equation: hsfreq =3D (mode->clock * bpp) / (dsi->lanes); produces the same result while improving readability and clarity. Additionally, update the comment to clarify the relationship between HS clock bit frequency, HS byte clock frequency, and HSFREQ. Signed-off-by: Lad Prabhakar Reviewed-by: Biju Das --- v3->v4: - No changes v2->v3: - No changes v1->v2: - Added Reviewed-by tag from Biju --- drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c b/drivers/gpu/d= rm/renesas/rz-du/rzg2l_mipi_dsi.c index ec8baecb9ba5..c5f698cd74f1 100644 --- a/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c +++ b/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c @@ -277,10 +277,10 @@ static int rzg2l_mipi_dsi_startup(struct rzg2l_mipi_d= si *dsi, * hsclk: DSI HS Byte clock frequency (Hz) * lanes: number of data lanes * - * hsclk(bit) =3D hsclk(byte) * 8 + * hsclk(bit) =3D hsclk(byte) * 8 =3D hsfreq */ bpp =3D mipi_dsi_pixel_format_to_bpp(dsi->format); - hsfreq =3D (mode->clock * bpp * 8) / (8 * dsi->lanes); + hsfreq =3D (mode->clock * bpp) / dsi->lanes; =20 ret =3D pm_runtime_resume_and_get(dsi->dev); if (ret < 0) --=20 2.49.0 From nobody Sun Dec 14 12:11:01 2025 Received: from mail-wr1-f53.google.com (mail-wr1-f53.google.com [209.85.221.53]) (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 5DCA62D0AB5; Wed, 30 Apr 2025 20:41:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746045690; cv=none; b=WLzZwN42/RJoPb/AHj5uwRq62xdGf4SSRHdo3Z7mnzoPrMA9t8kyXSX9gEGVPU432hAzFJfRhdEyQ/z2HYvJsmBBV/+6YmP2TZUor80Kvl5BAebtLnWQ3dr06VB9NvvvPxhVUtBa8hwi+PNLsofIz+ErPa7hpbMxP1JtsQs6/Mo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746045690; c=relaxed/simple; bh=HR+aIE76FilKB/igcd7rtUhO3L58n4uEwSSKSgznIxk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ISqsBs6rkwOzEcwbQEhOC6pROrECnHOS57og+TheI+55Nk4ehOyMqDcdEOUiXN8DFdlcFLiTPplB6PEjM5WH35tVBJjwrFWTqOnhoRX4LNsXewEDem4HWmRZLM26Zhm4Co85f4R67Q10CezBbm13laSM5pBJuZHiNOr2XrZq+Ag= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=c9nCAZyn; arc=none smtp.client-ip=209.85.221.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="c9nCAZyn" Received: by mail-wr1-f53.google.com with SMTP id ffacd0b85a97d-39ee5ac4321so217774f8f.1; Wed, 30 Apr 2025 13:41:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746045686; x=1746650486; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=IRpEv2n9J5HGBO9DCYBHcPTp671s69vNmtGzOWiwJsU=; b=c9nCAZynG/prdnt+TIwaR6XYxoVgZMrkYsL/epi4VCvt620llnKIm1OOIpZ8VMnxPC UIjWBqJic5bmwC1dT4h2JBjsj5ozSGfk39wGCLm6iugLjAhWBd/q+X0tQWhdD8Zp6O2z ROyY+RUG7nQzqjnGH/A5Y9jwMFeLwRXp6JCspkhs6+F0pDs2KrDSCmdMW/qgVIbkzZVc EZxMkmyWTensYP5bff5WoLW317RoNGUIZMB3bQlscvG7uDe9Ed+UfCfvEjzOoMMiikjo KyqLuDx6i5Xrsp+9dk1jx+kSIu1Ol1nAT4H3vsML+5LgMVYyxcUqJvCtwkcXJtJ625Y5 BcCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746045686; x=1746650486; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=IRpEv2n9J5HGBO9DCYBHcPTp671s69vNmtGzOWiwJsU=; b=FJ8c5icAHfeeIj7sDBlonCmH26CsdyKhPmQeoLite7kEpuCrAo/ViiiMUSpQENstUE AtZ+Z7gs0zE1luM4cuQY6Mkix9BlUkBcrTofELwAyiMj3g5OduArIcVq6qmXfi5n2CCM VRkT0KQW5O52U8CfJVpT7UJpRaJjraBcPGlS1Yd9shVe9sNsQl8VyxiTlsDVtz9rTcpT OfPkZA7qyDCgDfYrI1/5zeSWqpJrgPCt+sETRnMdA6tL6L2hp365OfL19cg1QbqqbZJb Y8/WeqqyN94YfLCDrdkaFgdUg+0DCmMp9AgZfJDe8B817UiGTkrxC9SVAlCi/8ac0BV6 YiVg== X-Forwarded-Encrypted: i=1; AJvYcCURK09yp17Ln2du/9LD9IsE2x+LBQRm2NRgbC2C+kOXpfmu5WZvgEbAKkcE9zvdtkzQFpP7QS1izgfDKB9F8qC/n40=@vger.kernel.org, AJvYcCV4WEaXPKgsSilZGwXbd9AGb5YGAyBuKuNr0+vm+TAYD2MKjptuJVEtUYAYJdBaInj3iiiYLLF0ihVWpIvg@vger.kernel.org, AJvYcCWneyqoTm0H2xWktk2Wz8N6sy1t/W1Uk3xfGzz0xwYPP6dfqTxtn0uBo8uBQD4vDgipVY/4JE0gtKUv@vger.kernel.org, AJvYcCWpR7Mxx+tmtlKG0iRd2dS/edfhP+BL68pWEU/luLfVUrxnKkctVvYIPVkOmBmMSGpARv1pagGtxb2F@vger.kernel.org X-Gm-Message-State: AOJu0YzI3GTDfklY9Jfo9JMgIwhxDt7kBGZ3KJnH2mzZT/3HR3X5YvsB QgFGtr/WOj8ieq8pZO6Do8rrD4TG2qOOBSjxZ7sh0smCMTinzHYV X-Gm-Gg: ASbGncv9+bs5jMmOyXYysvXbN4Tb3/FCCYR9EiHdQp3EcdALRs6U39u+WjS+W1JBLbX urJOGnt1payaRJHabhtCk8qsN10DNM9D54VgEB59ALLcuMeVF/kpEPDEGP2LEDGWzSeqjaFhP+7 0z156B4ucH7QINpfK4WndSuRwNqQgjuihcM8fj4x+hjwMnpQ5IJDLEw+BuFKzCslDOYIXMyn8Lr gvB0ybEIMRh+Z6d5Bme8vvK8yli9YEX0P16Vwlp5IOi0mkye/K/OIMOBw4OSl9rCwnRS0K8DTk3 bHTDA8H4jL6U6kVHBGctvJYSjmGCZUu9MKCLVSjZ26ybWmFfTh6tajGA4TnSy/ziOxQhph5VAh8 = X-Google-Smtp-Source: AGHT+IH/c+64xT1u6uRv9KzfE/tbFO5aveN/8JrQ7IU5Vzp6l3KgHMGtvRlzXP8/hReziRt7IXeIJw== X-Received: by 2002:a05:6000:4201:b0:39c:2688:6edf with SMTP id ffacd0b85a97d-3a08f761273mr4573560f8f.14.1746045686546; Wed, 30 Apr 2025 13:41:26 -0700 (PDT) Received: from iku.example.org ([2a06:5906:61b:2d00:c5ac:bf15:f358:81a8]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a073ca56d5sm18098132f8f.32.2025.04.30.13.41.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 30 Apr 2025 13:41:25 -0700 (PDT) From: Prabhakar X-Google-Original-From: Prabhakar To: 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 , Biju Das , Geert Uytterhoeven , Michael Turquette , Stephen Boyd , Philipp Zabel , Magnus Damm Cc: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-clk@vger.kernel.org, Prabhakar , Fabrizio Castro , Lad Prabhakar Subject: [PATCH v4 08/15] drm: renesas: rz-du: mipi_dsi: Use VCLK for HSFREQ calculation Date: Wed, 30 Apr 2025 21:41:05 +0100 Message-ID: <20250430204112.342123-9-prabhakar.mahadev-lad.rj@bp.renesas.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250430204112.342123-1-prabhakar.mahadev-lad.rj@bp.renesas.com> References: <20250430204112.342123-1-prabhakar.mahadev-lad.rj@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Lad Prabhakar Update the RZ/G2L MIPI DSI driver to calculate HSFREQ using the actual VCLK rate instead of the mode clock. The relationship between HSCLK and VCLK is: vclk * bpp <=3D hsclk * 8 * lanes Retrieve the VCLK rate using `clk_get_rate(dsi->vclk)`, ensuring that HSFREQ accurately reflects the clock rate set in hardware, leading to better precision in data transmission. Additionally, use `DIV_ROUND_CLOSEST_ULL` for a more precise division when computing `hsfreq`. Also, update unit conversions to use correct scaling factors for better clarity and correctness. Since `clk_get_rate()` returns the clock rate in Hz, update the HSFREQ threshold comparisons to use Hz instead of kHz to ensure correct behavior. Co-developed-by: Fabrizio Castro Signed-off-by: Fabrizio Castro Signed-off-by: Lad Prabhakar --- v3->v4: - Used MILLI instead of KILO v2->v3: - No changes v1->v2: - No changes --- .../gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c b/drivers/gpu/d= rm/renesas/rz-du/rzg2l_mipi_dsi.c index c5f698cd74f1..911c955a3a76 100644 --- a/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c +++ b/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -15,6 +16,7 @@ #include #include #include +#include =20 #include #include @@ -199,7 +201,7 @@ static int rzg2l_mipi_dsi_dphy_init(struct rzg2l_mipi_d= si *dsi, /* All DSI global operation timings are set with recommended setting */ for (i =3D 0; i < ARRAY_SIZE(rzg2l_mipi_dsi_global_timings); ++i) { dphy_timings =3D &rzg2l_mipi_dsi_global_timings[i]; - if (hsfreq <=3D dphy_timings->hsfreq_max) + if (hsfreq <=3D (dphy_timings->hsfreq_max * MILLI)) break; } =20 @@ -258,7 +260,7 @@ static void rzg2l_mipi_dsi_dphy_exit(struct rzg2l_mipi_= dsi *dsi) static int rzg2l_mipi_dsi_startup(struct rzg2l_mipi_dsi *dsi, const struct drm_display_mode *mode) { - unsigned long hsfreq; + unsigned long hsfreq, vclk_rate; unsigned int bpp; u32 txsetr; u32 clstptsetr; @@ -269,6 +271,12 @@ static int rzg2l_mipi_dsi_startup(struct rzg2l_mipi_ds= i *dsi, u32 golpbkt; int ret; =20 + ret =3D pm_runtime_resume_and_get(dsi->dev); + if (ret < 0) + return ret; + + clk_set_rate(dsi->vclk, mode->clock * MILLI); + /* * Relationship between hsclk and vclk must follow * vclk * bpp =3D hsclk * 8 * lanes @@ -280,13 +288,8 @@ static int rzg2l_mipi_dsi_startup(struct rzg2l_mipi_ds= i *dsi, * hsclk(bit) =3D hsclk(byte) * 8 =3D hsfreq */ bpp =3D mipi_dsi_pixel_format_to_bpp(dsi->format); - hsfreq =3D (mode->clock * bpp) / dsi->lanes; - - ret =3D pm_runtime_resume_and_get(dsi->dev); - if (ret < 0) - return ret; - - clk_set_rate(dsi->vclk, mode->clock * 1000); + vclk_rate =3D clk_get_rate(dsi->vclk); + hsfreq =3D DIV_ROUND_CLOSEST_ULL(vclk_rate * bpp, dsi->lanes); =20 ret =3D rzg2l_mipi_dsi_dphy_init(dsi, hsfreq); if (ret < 0) @@ -304,12 +307,12 @@ static int rzg2l_mipi_dsi_startup(struct rzg2l_mipi_d= si *dsi, * - data lanes: maximum 4 lanes * Therefore maximum hsclk will be 891 Mbps. */ - if (hsfreq > 445500) { + if (hsfreq > 445500000) { clkkpt =3D 12; clkbfht =3D 15; clkstpt =3D 48; golpbkt =3D 75; - } else if (hsfreq > 250000) { + } else if (hsfreq > 250000000) { clkkpt =3D 7; clkbfht =3D 8; clkstpt =3D 27; @@ -753,7 +756,7 @@ static int rzg2l_mipi_dsi_probe(struct platform_device = *pdev) * mode->clock and format are not available. So initialize DPHY with * timing parameters for 80Mbps. */ - ret =3D rzg2l_mipi_dsi_dphy_init(dsi, 80000); + ret =3D rzg2l_mipi_dsi_dphy_init(dsi, 80000000); if (ret < 0) goto err_phy; =20 --=20 2.49.0 From nobody Sun Dec 14 12:11:01 2025 Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) (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 2D8F42D1133; Wed, 30 Apr 2025 20:41:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746045692; cv=none; b=nyj53SabLyZ2EwhglwjQnejl+6hO2lC97urFqjr8vlCVcI6hTxcbZ+yd7mI6B1JWITSa4KcwiKWjGQvdIcQfIan6teSqvauENM3StXUga92ks/zs2doW+ZStaLekoxmKHZWaOp61k/E0zZ1iJ14Ug/pYgZ5zQZ1Jw/sNgmSe/DU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746045692; c=relaxed/simple; bh=o6o3O2k8DhnwSGiYLtIeL/AJt4wX/kh2NdA6Zdz7nio=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sPDJc1MXKuU5yX1JWiYtKtTbLlsFCDm+8pp7fWTAqBeM+EJiIR6g+NEfFRhVsonyBLianWMxtfIxg1R8PyGBr7ZZwBOky04RgG2+nL1rjMFqy+COIYlYK0Zl9FrvwxdL3HHjzTo5k+w59vx1lHhb88lMDrsODebAqD8WqU981r4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=lspd+pXG; arc=none smtp.client-ip=209.85.221.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="lspd+pXG" Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-3995ff6b066so104222f8f.3; Wed, 30 Apr 2025 13:41:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746045688; x=1746650488; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=LdHVlv+Wt0T+RNvnXR/CEU/ln6WGQvZ6QYYazSH6yMM=; b=lspd+pXG57f3srtMTvHVtZMR3wINiq7UH2rpVmVJS6WL2a38hVs1Idtpk8YqTjnA6P uMjW+hHZonsstQybFyx95qoVklSdOTfQvdJzmBK9a5+SDMP9hqonj2ri+zuz1pD/GHdK DUj8R6pwTbIe4vujcrw+cYKzo2XHpAivYTm9rM4x6TvOV0igrfKJpznSJFNj+Bdw6Zh5 q1EfBoNLyFlZAGCIzqP+JVwc7UoEdK6Jx2Ou8rlt1qrLbWRtxGOO1v5aeTM/5R8TuSq1 XqtWjAVzLrvDOFFwiwiaEaEYw96+d5WFO8Q4A9uHEA0owfTbKdWt5ETUgtsAuyTiWy4/ aFpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746045688; x=1746650488; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=LdHVlv+Wt0T+RNvnXR/CEU/ln6WGQvZ6QYYazSH6yMM=; b=jrDIeoClW3lDlupc4vrXm7nGpB2kAWA6fddFD0iwVCbJCDrk/kzVrqelEKq7fAjzmC 0XBO8k/pCR8iaYZCe8DJOkF0YLofG5TZ4nVhQqGgv39Q8cYG+wl1zrlSwdqvrz3lwN7M 8cwFGt+NDT47LpdsjfUeIWDFcme3wcTKzO/igf5N1A405vdteYEMn9WyGFKeuC6ZtBvB heUwEcBfECcpvnkyZdL2967pnzylGm4xXCKUxPKz/loc3IfgiLhiICQKsD9ozwr1VAiJ qwuo+gtzvNsRvLbilzDnL7xTuZu+LynV0HCnhIWs5tu3OxSKuudQ0xgwu0JK0n4Iy2C9 TJDw== X-Forwarded-Encrypted: i=1; AJvYcCUAFTEJMup9qvnDA7tymJxeJ+h+kpwdb0xdZBp20Ipq3zq1sIYCpuZZBz6V8v4fpZnHa0MYRr0fD1EY@vger.kernel.org, AJvYcCUDBoAPe5kFjEPeJKg6spJMLzVBHPFmBZOuF9Kxx1iyvjGglJh1J6ef8JetRWOcmK9gSOQtYh0zGBzy@vger.kernel.org, AJvYcCUaic7oOoCIpTN1KIHICwvCjPv1nkSG2ZbQVV43q8KrzYXY90PFb4cZeeS//8Den+7FgSXL1T+tUGXSkbyt@vger.kernel.org, AJvYcCV60UJsJu3ganN/hw1VTIhW7LEP7dwaUvi1jy5QCwc+6T2agtQ3Dxp5zOZ8PI9cMLC72+uOVtU4XooR3x6O2ecj3FM=@vger.kernel.org X-Gm-Message-State: AOJu0YwtbVMLwN9Sb0b8UhBmQjY9KE6PWBgfMgAskidFE+5yvE/EhCJA 0uqqddsFqHgIgEpg+Khogjc5vvLTQMFTfjtwWNC5XHEBJx2zVLIv X-Gm-Gg: ASbGncvCH+oh7QmnTtk4h3/oBQx8DtCF29pZNpfoAikcji7z8Hv6UyBkV8GsyYVCUbt agf84A3nrqxgx5yYdAcYlhSBSZrzhxdppLaoXGS3Uco+GfBH6uq6UF2zCwbFqSPfnBCMRLusLA9 8keLd5MpTkq5tp3SCG2Bo3DzKPkWPw8Md84Pr8jClu11cqA9yDvesg/MLH95+fs+eTn6lQg46W3 JZpRE+Mq1uRPdihzovx3iW0nz0+Z9n0WldT4+xHPfcG18N0XelHmp6eOFffK14aIUbIj0lpkP0g wFJC3iMr9ZI4Nmr0i1N9TZaf/5HUJ61KvoCX/adIuM71g9lyBNgf1HXNHpPsxI/5ZPQRL0SJ+1E EAb0OcmUHhA== X-Google-Smtp-Source: AGHT+IGrGVz3l7nxhUwn5J4c4U2Mfe8x4kHiO67bslT+JuNjwQKln1+3tyq6cjIwttJYt9+I2uPPzg== X-Received: by 2002:a5d:64c8:0:b0:38d:e401:fd61 with SMTP id ffacd0b85a97d-3a09307d07amr344752f8f.49.1746045688423; Wed, 30 Apr 2025 13:41:28 -0700 (PDT) Received: from iku.example.org ([2a06:5906:61b:2d00:c5ac:bf15:f358:81a8]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a073ca56d5sm18098132f8f.32.2025.04.30.13.41.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 30 Apr 2025 13:41:27 -0700 (PDT) From: Prabhakar X-Google-Original-From: Prabhakar To: 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 , Biju Das , Geert Uytterhoeven , Michael Turquette , Stephen Boyd , Philipp Zabel , Magnus Damm Cc: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-clk@vger.kernel.org, Prabhakar , Fabrizio Castro , Lad Prabhakar Subject: [PATCH v4 09/15] drm: renesas: rz-du: mipi_dsi: Add OF data support Date: Wed, 30 Apr 2025 21:41:06 +0100 Message-ID: <20250430204112.342123-10-prabhakar.mahadev-lad.rj@bp.renesas.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250430204112.342123-1-prabhakar.mahadev-lad.rj@bp.renesas.com> References: <20250430204112.342123-1-prabhakar.mahadev-lad.rj@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Lad Prabhakar In preparation for adding support for the Renesas RZ/V2H(P) SoC, this patch introduces a mechanism to pass SoC-specific information via OF data in the DSI driver. This enables the driver to adapt dynamically to various SoC-specific requirements without hardcoding configurations. The MIPI DSI interface on the RZ/V2H(P) SoC is nearly identical to the one on the RZ/G2L SoC. While the LINK registers are shared between the two SoCs, the D-PHY registers differ. Also the VCLK range differs on both these SoCs. To accommodate these differences `struct rzg2l_mipi_dsi_hw_info` is introduced and as now passed as OF data. These changes lay the groundwork for the upcoming RZ/V2H(P) SoC support by allowing SoC-specific data to be passed through OF. Co-developed-by: Fabrizio Castro Signed-off-by: Fabrizio Castro Signed-off-by: Lad Prabhakar --- v3->v4: - No changes v2->v3: - Dropped !dsi->info check in rzg2l_mipi_dsi_probe() as it is not needed. v1->v2: - Added DPHY_RST as feature flag --- .../gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c | 65 ++++++++++++++----- .../drm/renesas/rz-du/rzg2l_mipi_dsi_regs.h | 2 - 2 files changed, 48 insertions(+), 19 deletions(-) diff --git a/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c b/drivers/gpu/d= rm/renesas/rz-du/rzg2l_mipi_dsi.c index 911c955a3a76..ed259627f5e8 100644 --- a/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c +++ b/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c @@ -28,10 +28,26 @@ =20 #include "rzg2l_mipi_dsi_regs.h" =20 +#define RZ_MIPI_DSI_FEATURE_DPHY_RST BIT(0) + +struct rzg2l_mipi_dsi; + +struct rzg2l_mipi_dsi_hw_info { + int (*dphy_init)(struct rzg2l_mipi_dsi *dsi, unsigned long hsfreq); + void (*dphy_exit)(struct rzg2l_mipi_dsi *dsi); + u32 phy_reg_offset; + u32 link_reg_offset; + unsigned long max_dclk; + unsigned long min_dclk; + u8 features; +}; + struct rzg2l_mipi_dsi { struct device *dev; void __iomem *mmio; =20 + const struct rzg2l_mipi_dsi_hw_info *info; + struct reset_control *rstc; struct reset_control *arstc; struct reset_control *prstc; @@ -164,22 +180,22 @@ static const struct rzg2l_mipi_dsi_timings rzg2l_mipi= _dsi_global_timings[] =3D { =20 static void rzg2l_mipi_dsi_phy_write(struct rzg2l_mipi_dsi *dsi, u32 reg, = u32 data) { - iowrite32(data, dsi->mmio + reg); + iowrite32(data, dsi->mmio + dsi->info->phy_reg_offset + reg); } =20 static void rzg2l_mipi_dsi_link_write(struct rzg2l_mipi_dsi *dsi, u32 reg,= u32 data) { - iowrite32(data, dsi->mmio + LINK_REG_OFFSET + reg); + iowrite32(data, dsi->mmio + dsi->info->link_reg_offset + reg); } =20 static u32 rzg2l_mipi_dsi_phy_read(struct rzg2l_mipi_dsi *dsi, u32 reg) { - return ioread32(dsi->mmio + reg); + return ioread32(dsi->mmio + dsi->info->phy_reg_offset + reg); } =20 static u32 rzg2l_mipi_dsi_link_read(struct rzg2l_mipi_dsi *dsi, u32 reg) { - return ioread32(dsi->mmio + LINK_REG_OFFSET + reg); + return ioread32(dsi->mmio + dsi->info->link_reg_offset + reg); } =20 /* -----------------------------------------------------------------------= ------ @@ -291,7 +307,7 @@ static int rzg2l_mipi_dsi_startup(struct rzg2l_mipi_dsi= *dsi, vclk_rate =3D clk_get_rate(dsi->vclk); hsfreq =3D DIV_ROUND_CLOSEST_ULL(vclk_rate * bpp, dsi->lanes); =20 - ret =3D rzg2l_mipi_dsi_dphy_init(dsi, hsfreq); + ret =3D dsi->info->dphy_init(dsi, hsfreq); if (ret < 0) goto err_phy; =20 @@ -334,7 +350,7 @@ static int rzg2l_mipi_dsi_startup(struct rzg2l_mipi_dsi= *dsi, return 0; =20 err_phy: - rzg2l_mipi_dsi_dphy_exit(dsi); + dsi->info->dphy_exit(dsi); pm_runtime_put(dsi->dev); =20 return ret; @@ -342,7 +358,7 @@ static int rzg2l_mipi_dsi_startup(struct rzg2l_mipi_dsi= *dsi, =20 static void rzg2l_mipi_dsi_stop(struct rzg2l_mipi_dsi *dsi) { - rzg2l_mipi_dsi_dphy_exit(dsi); + dsi->info->dphy_exit(dsi); pm_runtime_put(dsi->dev); } =20 @@ -584,10 +600,12 @@ rzg2l_mipi_dsi_bridge_mode_valid(struct drm_bridge *b= ridge, const struct drm_display_info *info, const struct drm_display_mode *mode) { - if (mode->clock > 148500) + struct rzg2l_mipi_dsi *dsi =3D bridge_to_rzg2l_mipi_dsi(bridge); + + if (mode->clock > dsi->info->max_dclk) return MODE_CLOCK_HIGH; =20 - if (mode->clock < 5803) + if (mode->clock < dsi->info->min_dclk) return MODE_CLOCK_LOW; =20 return MODE_OK; @@ -713,6 +731,8 @@ static int rzg2l_mipi_dsi_probe(struct platform_device = *pdev) platform_set_drvdata(pdev, dsi); dsi->dev =3D &pdev->dev; =20 + dsi->info =3D of_device_get_match_data(&pdev->dev); + ret =3D drm_of_get_data_lanes_count_ep(dsi->dev->of_node, 1, 0, 1, 4); if (ret < 0) return dev_err_probe(dsi->dev, ret, @@ -728,10 +748,12 @@ static int rzg2l_mipi_dsi_probe(struct platform_devic= e *pdev) if (IS_ERR(dsi->vclk)) return PTR_ERR(dsi->vclk); =20 - dsi->rstc =3D devm_reset_control_get_exclusive(dsi->dev, "rst"); - if (IS_ERR(dsi->rstc)) - return dev_err_probe(dsi->dev, PTR_ERR(dsi->rstc), - "failed to get rst\n"); + if (dsi->info->features & RZ_MIPI_DSI_FEATURE_DPHY_RST) { + dsi->rstc =3D devm_reset_control_get_exclusive(dsi->dev, "rst"); + if (IS_ERR(dsi->rstc)) + return dev_err_probe(dsi->dev, PTR_ERR(dsi->rstc), + "failed to get rst\n"); + } =20 dsi->arstc =3D devm_reset_control_get_exclusive(dsi->dev, "arst"); if (IS_ERR(dsi->arstc)) @@ -756,13 +778,13 @@ static int rzg2l_mipi_dsi_probe(struct platform_devic= e *pdev) * mode->clock and format are not available. So initialize DPHY with * timing parameters for 80Mbps. */ - ret =3D rzg2l_mipi_dsi_dphy_init(dsi, 80000000); + ret =3D dsi->info->dphy_init(dsi, 80000000); if (ret < 0) goto err_phy; =20 txsetr =3D rzg2l_mipi_dsi_link_read(dsi, TXSETR); dsi->num_data_lanes =3D min(((txsetr >> 16) & 3) + 1, num_data_lanes); - rzg2l_mipi_dsi_dphy_exit(dsi); + dsi->info->dphy_exit(dsi); pm_runtime_put(dsi->dev); =20 /* Initialize the DRM bridge. */ @@ -779,7 +801,7 @@ static int rzg2l_mipi_dsi_probe(struct platform_device = *pdev) return 0; =20 err_phy: - rzg2l_mipi_dsi_dphy_exit(dsi); + dsi->info->dphy_exit(dsi); pm_runtime_put(dsi->dev); err_pm_disable: pm_runtime_disable(dsi->dev); @@ -794,8 +816,17 @@ static void rzg2l_mipi_dsi_remove(struct platform_devi= ce *pdev) pm_runtime_disable(&pdev->dev); } =20 +static const struct rzg2l_mipi_dsi_hw_info rzg2l_mipi_dsi_info =3D { + .dphy_init =3D rzg2l_mipi_dsi_dphy_init, + .dphy_exit =3D rzg2l_mipi_dsi_dphy_exit, + .link_reg_offset =3D 0x10000, + .max_dclk =3D 148500, + .min_dclk =3D 5803, + .features =3D RZ_MIPI_DSI_FEATURE_DPHY_RST, +}; + static const struct of_device_id rzg2l_mipi_dsi_of_table[] =3D { - { .compatible =3D "renesas,rzg2l-mipi-dsi" }, + { .compatible =3D "renesas,rzg2l-mipi-dsi", .data =3D &rzg2l_mipi_dsi_inf= o, }, { /* sentinel */ } }; =20 diff --git a/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi_regs.h b/drivers/= gpu/drm/renesas/rz-du/rzg2l_mipi_dsi_regs.h index 1dbc16ec64a4..16efe4dc59f4 100644 --- a/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi_regs.h +++ b/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi_regs.h @@ -41,8 +41,6 @@ #define DSIDPHYTIM3_THS_ZERO(x) ((x) << 0) =20 /* --------------------------------------------------------*/ -/* Link Registers */ -#define LINK_REG_OFFSET 0x10000 =20 /* Link Status Register */ #define LINKSR 0x10 --=20 2.49.0 From nobody Sun Dec 14 12:11:01 2025 Received: from mail-wr1-f43.google.com (mail-wr1-f43.google.com [209.85.221.43]) (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 7053E2D1F42; Wed, 30 Apr 2025 20:41:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746045693; cv=none; b=N25TVdlrlxg/RSiZSSB1d2Z9C9JAfs9jZFJTcTQVr/4Ta3EVHRGIESvB86V4i4X5t5GPAkQS+jwDK17+SJqKeRNheXh8AnnrIBf4oyrHGO7LuFGcBOKqOk6M0Uleb513GXpxUIcR78QI9iff5KC7OTcaqwbOvRsV6baDkhYks7U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746045693; c=relaxed/simple; bh=JkpsOE7X8o5qO22dmaMBGmVvdrdUHjIGbZoMegLrt7M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=FBt0faSUxi5nRSBvm3LhgqWo8CEqhG/GpNCFecelvhpoZxguVZv+lEfyig78veU6ntwPCAqtr/YimizGwT7ev+WypPnwrMtT4xxoa6404ibWFGwPrp7uJcaxLwQcCkH31j52Zqx6IHeWTI67yTPtXRYQ9SqfBLiNxQJyzCWaeAk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=MQcpRRKn; arc=none smtp.client-ip=209.85.221.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="MQcpRRKn" Received: by mail-wr1-f43.google.com with SMTP id ffacd0b85a97d-39c266c1389so186533f8f.1; Wed, 30 Apr 2025 13:41:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746045690; x=1746650490; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=SjeGEHFhQrwReOhsdL4NgFWDff3mxawseiq2vCwBk4w=; b=MQcpRRKnuQDaJu/HjmQXPHLYZjh5LOG6rmrcl9db4/UNj2M6o7TZbLtQK7MkhIW6OC 46Fn2TNJE5QJCzlhhCgLnIAF3d7n8PO7fwhkPDKfnJTtdOIyhcCUDA2nexWvyrmIRzZw qPKle8MkKit4WfTH3Om2ytUwhm33lw33YstZr/aBVkLh/BHUYUi1Masx6KF92VGQDQZv JUgq7NfARX7fSSESTjUmidLtDpuHV0LIZTXOZPazawOI4otlxl/aZOLdSMv4z5Qr8hhQ yT71a8SCbozGPx5uzh5Qdzy0NHkoEHXIJASF5VkdSf40rPRTVwbbw+gVGBsGgYwMRF2n oLhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746045690; x=1746650490; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=SjeGEHFhQrwReOhsdL4NgFWDff3mxawseiq2vCwBk4w=; b=M7Uk24AQcb36Q9iruB7gzoFQpx3bxM4mA4bHkmYcmtarYs7tiBvMoA2mBfsVdC46HV qnRSO+WUctHpj1suW7IpuF/spTlvEmmc4Rvu2K0hL6Q4RbW2bZ3JXtjwfSHjRB9DByzt N17IEPeVujf6+Qjige/RAkfGCRkd1wlLb5LZZ435M0fyfzJXVLuTqMrqcD9pV6lwkMO5 8frlgTPY04EczwGXppp6cC8OHxOnAkRiBDN+gWTdk34JrBKmNFuu6MP3mEGCYI+X4o8f 3JqYyVRfseDdbs/N3BvtRZaFK7WUeChm04FX2R3FD6fBu3EVZAGW8L1Dtv/zKN11N+tz zrEQ== X-Forwarded-Encrypted: i=1; AJvYcCURGuj3pG8a2ntnY4FByl5cIltXP9kYD0pz/4tBzU9g2N6EKt8Bn7azaT1a85A+Q6RbgIkvSsnE2ReC@vger.kernel.org, AJvYcCWg/tGdYdM23oSmUuiz9pds+WIDvfqV7BfgEdmL9RaMb5lNIEaAXS3ZzOgPk2Ui7srY/m3b3Ll14t8y@vger.kernel.org, AJvYcCXjPEvAaPmBQzp14sNBy7uTMctT6VUUVzRMywjqRQrvqewl1a5HByWCHFzzxX074frzJOKA4hbM6PI6n2YV@vger.kernel.org, AJvYcCXqwuEswkRGbf9N+KQU6QKKLlM5sNeRc5U8ZA+wYcAryoqiuNUvwGxKOVQjM17Odd+3yTSeGtncInfFLDEVbqDupUM=@vger.kernel.org X-Gm-Message-State: AOJu0Yz/xQ+nQQ+n5JpwTtotHuq3TYSEKojlumRuvyTB/cBvdxGGDUE6 +4dzZsM6+1cnbt3h4QGYPfmZcbscTQtagc/736D15nplX+tLUiB0 X-Gm-Gg: ASbGnculWm+IZn8Ifc1Twxi9NbI9d4DPGpLjknPl904/J0WDC9qFipL9oF39BpmipBo wXAzK21BKlzui7kQv7W+ZpHAK7ySJdxKyQh8Y4zY6LaEll4mQP4XYHiygn2voyDy5NpOh/qmnU5 yXkhPGmdv9Pkzc1fN9Nslf2gDsJqz1VBDjycgVW28qAoquG/cFIrza5RyIJjDBbIHZy6mNFl5GY Lt5AeGLgBpCzwBlAdJgW9kztbu48TUVlL1SfQFKMn+uHmC8W6qXdRBe35JfoaBNDvNZDXCktHUN tCDLi7RAedpvIbiB0ZncH4qWHl6dVGhkP845RNERAe9lLQE1mRig3WNt9djhEmwIXoWD/PAhfyk = X-Google-Smtp-Source: AGHT+IGqhYGb+EftLhll49pvj3i+SCNYO3DMsEER3+g1HHBc8aDZKCP96zTu6RJGkUAISRfoTnMojg== X-Received: by 2002:a5d:64cb:0:b0:3a0:7a5d:bc01 with SMTP id ffacd0b85a97d-3a08f79d2demr4724264f8f.13.1746045689487; Wed, 30 Apr 2025 13:41:29 -0700 (PDT) Received: from iku.example.org ([2a06:5906:61b:2d00:c5ac:bf15:f358:81a8]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a073ca56d5sm18098132f8f.32.2025.04.30.13.41.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 30 Apr 2025 13:41:28 -0700 (PDT) From: Prabhakar X-Google-Original-From: Prabhakar To: 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 , Biju Das , Geert Uytterhoeven , Michael Turquette , Stephen Boyd , Philipp Zabel , Magnus Damm Cc: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-clk@vger.kernel.org, Prabhakar , Fabrizio Castro , Lad Prabhakar Subject: [PATCH v4 10/15] drm: renesas: rz-du: mipi_dsi: Use mHz for D-PHY frequency calculations Date: Wed, 30 Apr 2025 21:41:07 +0100 Message-ID: <20250430204112.342123-11-prabhakar.mahadev-lad.rj@bp.renesas.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250430204112.342123-1-prabhakar.mahadev-lad.rj@bp.renesas.com> References: <20250430204112.342123-1-prabhakar.mahadev-lad.rj@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Lad Prabhakar Pass the HSFREQ in milli-Hz to the `dphy_init()` callback to improve precision, especially for the RZ/V2H(P) SoC, where PLL dividers require high accuracy. These changes prepare the driver for upcoming RZ/V2H(P) SoC support. Co-developed-by: Fabrizio Castro Signed-off-by: Fabrizio Castro Signed-off-by: Lad Prabhakar --- v3->v4: - Used MILLI instead of KILO - Made use of mul_u32_u32() for multiplication v2->v3: - Replaced `unsigned long long` with `u64` - Replaced *_mhz with *_millihz` in functions v1->v2: - No changes --- --- drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c b/drivers/gpu/d= rm/renesas/rz-du/rzg2l_mipi_dsi.c index ed259627f5e8..a4c0dbae4a46 100644 --- a/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c +++ b/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c @@ -33,7 +33,7 @@ struct rzg2l_mipi_dsi; =20 struct rzg2l_mipi_dsi_hw_info { - int (*dphy_init)(struct rzg2l_mipi_dsi *dsi, unsigned long hsfreq); + int (*dphy_init)(struct rzg2l_mipi_dsi *dsi, u64 hsfreq_millihz); void (*dphy_exit)(struct rzg2l_mipi_dsi *dsi); u32 phy_reg_offset; u32 link_reg_offset; @@ -203,8 +203,9 @@ static u32 rzg2l_mipi_dsi_link_read(struct rzg2l_mipi_d= si *dsi, u32 reg) */ =20 static int rzg2l_mipi_dsi_dphy_init(struct rzg2l_mipi_dsi *dsi, - unsigned long hsfreq) + u64 hsfreq_millihz) { + unsigned long hsfreq =3D DIV_ROUND_CLOSEST_ULL(hsfreq_millihz, MILLI); const struct rzg2l_mipi_dsi_timings *dphy_timings; unsigned int i; u32 dphyctrl0; @@ -277,6 +278,7 @@ static int rzg2l_mipi_dsi_startup(struct rzg2l_mipi_dsi= *dsi, const struct drm_display_mode *mode) { unsigned long hsfreq, vclk_rate; + u64 hsfreq_millihz; unsigned int bpp; u32 txsetr; u32 clstptsetr; @@ -305,9 +307,9 @@ static int rzg2l_mipi_dsi_startup(struct rzg2l_mipi_dsi= *dsi, */ bpp =3D mipi_dsi_pixel_format_to_bpp(dsi->format); vclk_rate =3D clk_get_rate(dsi->vclk); - hsfreq =3D DIV_ROUND_CLOSEST_ULL(vclk_rate * bpp, dsi->lanes); + hsfreq_millihz =3D DIV_ROUND_CLOSEST_ULL(mul_u32_u32(vclk_rate, bpp * MIL= LI), dsi->lanes); =20 - ret =3D dsi->info->dphy_init(dsi, hsfreq); + ret =3D dsi->info->dphy_init(dsi, hsfreq_millihz); if (ret < 0) goto err_phy; =20 @@ -315,6 +317,7 @@ static int rzg2l_mipi_dsi_startup(struct rzg2l_mipi_dsi= *dsi, txsetr =3D TXSETR_DLEN | TXSETR_NUMLANEUSE(dsi->lanes - 1) | TXSETR_CLEN; rzg2l_mipi_dsi_link_write(dsi, TXSETR, txsetr); =20 + hsfreq =3D DIV_ROUND_CLOSEST_ULL(hsfreq_millihz, MILLI); /* * Global timings characteristic depends on high speed Clock Frequency * Currently MIPI DSI-IF just supports maximum FHD@60 with: @@ -778,7 +781,7 @@ static int rzg2l_mipi_dsi_probe(struct platform_device = *pdev) * mode->clock and format are not available. So initialize DPHY with * timing parameters for 80Mbps. */ - ret =3D dsi->info->dphy_init(dsi, 80000000); + ret =3D dsi->info->dphy_init(dsi, 80000000ULL * MILLI); if (ret < 0) goto err_phy; =20 --=20 2.49.0 From nobody Sun Dec 14 12:11:01 2025 Received: from mail-wr1-f50.google.com (mail-wr1-f50.google.com [209.85.221.50]) (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 E7B022D2691; Wed, 30 Apr 2025 20:41:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746045694; cv=none; b=gGtQKGscVCnToun9pNhCh7F8mhesSet5rJFdN9nZzDPrVwpPNIzmm7QvhMIOowAsIfe+AOjQJVPV7aunJ+sGts5pTBcjeDeULiZDuod/8GCri4FDTTT9nH++X84Lgp498qG9ayamcSuobY6yY//3B0kAvcgg0TagdQycnxSTyiY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746045694; c=relaxed/simple; bh=UCoz0MtvAKMfDVwyQT6bBeR1YcYMU0rVSKiqil9gQdY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PkJneqNp40AP//z8YxMoRR08iy2aUyi9Jf9smlS6KFDmzBK8P6S5zTpudDvgZW6CoJJpWFIFrmn/X8tPxD7/4LhhPfU7zel7DMR/ygvPv1uSMBZmF88bcNeFfzouZK92F68aXZ0YOzEbbIlzifR4jUBI2wbkSJNDO5Bz4sAHL/o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Qq3lSl6Y; arc=none smtp.client-ip=209.85.221.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Qq3lSl6Y" Received: by mail-wr1-f50.google.com with SMTP id ffacd0b85a97d-3913d129c1aso230051f8f.0; Wed, 30 Apr 2025 13:41:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746045691; x=1746650491; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=BeIimSTGkxAiQACuV5flhhZMsgNREPFEsZ2/L02ocZU=; b=Qq3lSl6YQbxz+6hmyI9Er6mSgjtIzH2s1Y8kOHEM/cyg3poGMenU5oUVgbEYD1epFZ oi8BRmuxhOVDaNw6zc5J8UVzO12RIMgedI6ogKxSWWiFHxVHJUbOfreOqfpmAVl7p87d OlDhTApF4Q23QFB95rwm2cufFIx+L0dg6IOTCiY3x6rCG82oIvWmQJVpX9zZit0b8yyy rbQh5lsiolM9qM2nZgwd9jlLFR07BdXh+pPega9r3jLnSypbUKHnCq8zhsLj2QPDI7uW /hzXYV2qpAtuDAHE1Gpx2zPBsU7wo4cuNzsHFvdmdGP3HNHuJ/dh7aaVm99sYkMxQK// JBlA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746045691; x=1746650491; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=BeIimSTGkxAiQACuV5flhhZMsgNREPFEsZ2/L02ocZU=; b=O6td/isckLEDundX1W06uf/4tWmOuTPtKnYlOYv34YzC+1Lgz0L0GPJpYOKwAtm6/u pt3TLMBsrNz0bElScVasnivRu1N/B5IPJIeCNW19qAgLs+++b3hTt8LSnDuWGRG0z9fR WLytFeANqwwNO0YFoyMxxLyPbrpHhDwuxjdxaiRG6gPgRZ6QsxqLJZGOZJsJRYnP4kGq ISwlhpE4rwlZ2FEryYM+ZvO5j8eE+p4Gk3QCg576tnjRCulF6vJSpKN85gzKTJLPLoMi nXb4/uRsJi4ailVm7fy+y1GFnIcrFogs8Onqk6Fp1Ow/+tKlzAjzsp9c7FT47K16+DOv ohnQ== X-Forwarded-Encrypted: i=1; AJvYcCU4BjnQ277wFkQGORoimpgKKbXw4QxM8qUBkG7zZoew0DaiTR6b/hswke+JZW7E8FhiqiPtQy3WRuVxBllx@vger.kernel.org, AJvYcCULpL0cHA45yG1itYfg5bOhFVmQFiRfjmMW010/cOKKUtKPlOZqpAPKqPuBHybGvZTHG+7+xaidYBx5@vger.kernel.org, AJvYcCVKrUVLhLrbXitAovqrf6jwTC9Fn1+YHYRrFVJjy0sl+2nM34eIDyonraMIBEnyZDg8C7ea4sahz36r@vger.kernel.org, AJvYcCXef86mpNh1gM9wpoLBxLQ3bvgHme06AVJ5jJBjl3RK2Hzu2oin+Axw5aPo5uaLuILJeiG+TfH3alvH9Z2CHXVUxZw=@vger.kernel.org X-Gm-Message-State: AOJu0YzoPKlsIklx96Oc6R8y1hbp1W5Gwe59+rlEX7wYi8df0omdyonb yWFmogJZY4Ho1dXQFicG2qTG263x3sG4QUy17UnkVWtQ33CFmUPl X-Gm-Gg: ASbGncsJiIrVFYTV0VQP+hk0tHVNSdK1X2TE5PQUq5IUmoGNMF7ImaJVzjqw6kXGZn2 3RZQ825/bT8zAbH4I5SNRZbB+Jn7RWEXXBn2IifKvbOZY/tTl8NKL6kka59ofT1WGZygo2hJoi0 6NQ4Br5Qh07sIV6UPoj9+8M/XHg6RAWmYCssdAvEUaN2UoKCJtCUrQ6HRkmXX6kxesBKD9SGuuu XecZy61zpaSP+dKRk0uepCvenGVtbehe7i4hX2n8ddmiBFlmmcGgv10eIbmmIyHukf6AluK41CO Avv2rj6yF+SgZZFQzP5oSp3JyIiQIQdds2kn249A8jE8lp0A4MUoR78g0Bkt3knHFadKkcyNFzU = X-Google-Smtp-Source: AGHT+IGXi9gEHMu2kkOiJyeElS9pMvis5d/bb/bWjaAFc2lIThqPQuTspcq9AFbQpjJeQQy6eLr92g== X-Received: by 2002:a5d:4d0c:0:b0:3a0:7cbd:ffb7 with SMTP id ffacd0b85a97d-3a092cf7e96mr629197f8f.16.1746045691125; Wed, 30 Apr 2025 13:41:31 -0700 (PDT) Received: from iku.example.org ([2a06:5906:61b:2d00:c5ac:bf15:f358:81a8]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a073ca56d5sm18098132f8f.32.2025.04.30.13.41.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 30 Apr 2025 13:41:30 -0700 (PDT) From: Prabhakar X-Google-Original-From: Prabhakar To: 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 , Biju Das , Geert Uytterhoeven , Michael Turquette , Stephen Boyd , Philipp Zabel , Magnus Damm Cc: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-clk@vger.kernel.org, Prabhakar , Fabrizio Castro , Lad Prabhakar Subject: [PATCH v4 11/15] drm: renesas: rz-du: mipi_dsi: Add feature flag for 16BPP support Date: Wed, 30 Apr 2025 21:41:08 +0100 Message-ID: <20250430204112.342123-12-prabhakar.mahadev-lad.rj@bp.renesas.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250430204112.342123-1-prabhakar.mahadev-lad.rj@bp.renesas.com> References: <20250430204112.342123-1-prabhakar.mahadev-lad.rj@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Lad Prabhakar Introduce the `RZ_MIPI_DSI_FEATURE_16BPP` flag in `rzg2l_mipi_dsi_hw_info` to indicate support for 16BPP pixel formats. The RZ/V2H(P) SoC supports 16BPP, whereas this feature is missing on the RZ/G2L SoC. Update the `mipi_dsi_host_attach()` function to check this flag before allowing 16BPP formats. If the SoC does not support 16BPP, return an error to prevent incorrect format selection. This change enables finer-grained format support control for different SoC variants. Co-developed-by: Fabrizio Castro Signed-off-by: Fabrizio Castro Signed-off-by: Lad Prabhakar --- v3->v4: - No changes v2->v3: - No changes v1->v2: - Renamed RZ_MIPI_DSI_FEATURE_16BPP --- drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c b/drivers/gpu/d= rm/renesas/rz-du/rzg2l_mipi_dsi.c index a4c0dbae4a46..8c7384b95411 100644 --- a/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c +++ b/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c @@ -29,6 +29,7 @@ #include "rzg2l_mipi_dsi_regs.h" =20 #define RZ_MIPI_DSI_FEATURE_DPHY_RST BIT(0) +#define RZ_MIPI_DSI_FEATURE_16BPP BIT(1) =20 struct rzg2l_mipi_dsi; =20 @@ -643,8 +644,16 @@ static int rzg2l_mipi_dsi_host_attach(struct mipi_dsi_= host *host, =20 switch (mipi_dsi_pixel_format_to_bpp(device->format)) { case 24: + break; case 18: break; + case 16: + if (!(dsi->info->features & RZ_MIPI_DSI_FEATURE_16BPP)) { + dev_err(dsi->dev, "Unsupported format 0x%04x\n", + device->format); + return -EINVAL; + } + break; default: dev_err(dsi->dev, "Unsupported format 0x%04x\n", device->format); return -EINVAL; --=20 2.49.0 From nobody Sun Dec 14 12:11:01 2025 Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) (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 0A2412D26A9; Wed, 30 Apr 2025 20:41:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746045695; cv=none; b=mqmb8Ur+/ejzV6D/NtYice649VjJB7baPQlMvw3YJIdkyPorksqi27rWwjVf9dLh0F7Bbpl2+HZRKtPgo6QBqBffhyEfwUQPlwzi/LV5/9wSjwgIQ8fV7lczVG1Mxqc9p8VFB5PTbnLjA+QFOTgG+4n4BY6zbWmZcKI8moNs5fg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746045695; c=relaxed/simple; bh=VV/pg8YLwFQnxxqs2siRxCPlNz4t70mLfHqgSUHDnUs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=BjBJb0Rv/rHoaSCquiwka9+vy7Gj3j0YzmV8e188fBJ9JE7wqd8YobLzUrKc3cMAfxIY7qmx7PnuUjXoki3u3mc3aAquBPW9EMar5ZSlA9uqzAFb/d6qsDifYkc+XQavtQanm7GBt3KNnxaOEeLQG581PLrIqC7M1al1Cws6O7k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=RjL3vzR2; arc=none smtp.client-ip=209.85.221.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="RjL3vzR2" Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-39bf44be22fso157071f8f.0; Wed, 30 Apr 2025 13:41:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746045692; x=1746650492; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=zs5IS+IIZjSL2dWZDqgTPqknuqZPmDccKzSPgZKtB/A=; b=RjL3vzR2rSrIQVniiW5RDLR/d3DCGoV0jMFPPAgf7ZnHRFGBlnngeFUnnNExSla3Pg 6ToDUkwj6BFgRqFKDkGkHsM80FREREvapEtFMd1/Pt+Gk8Q3jl3yngYc1HUSpP98l4Vk +XuPsaY0Z8aeSVN6j9T9mKYcYROLEubiBSqCdr3wugbXMz0jyhz10Kko6U+L5alXzuhw DZqMIVhh47qFWBSgxYRMiA3JAvKpw81l0iWcvItSOS1a9jneQmxQvWeKZ4JaYOyPKlm2 TTvGJM56X64Ee1LYR8XJ2ZnAUwgLlOttrCW/VM7GTwa7ZDDh/boujbSwSQDMsi4JKlZm xSiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746045692; x=1746650492; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=zs5IS+IIZjSL2dWZDqgTPqknuqZPmDccKzSPgZKtB/A=; b=Xxt0UQj4z04IUs2LT2qN/TMcBPXIAEPdoXiwcTsv8kWDAtXWXa7mJW9v+zo1iCO3VL en38ppqcpkjlIcnMV5qwjNtJUT5c2ib0B9hHw2qbDNusS3086IMWDTDFDYugXkHuxD99 AiALSg4dB3F88kR6aXyAO76L2SoZDppTynoyZWgysybWTy7+rZBloqgw2FPN6/KvsydZ trxhplQ9yLCF2JBO+XH4TYxYv4Gd/WbncWPBFgCqIc98Per5TqBbCz56lQIb6cwYsGHB cJz5hDm0RAe/+rZd8qNgb/ho2/ZcP00mcS/O4Qgan6Bpe2JBwj5mA3s8XSQ0uQsCuXtI B20w== X-Forwarded-Encrypted: i=1; AJvYcCVYQtl0i3ZkPDD8qdHYrGq5p8GuaYolcMTvVYKLIpsZZd3wKdAYuBGPsB8Ce7JSmSfnCSxNTmKuJr1Z@vger.kernel.org, AJvYcCXjkM7fEywICNMmxhFQaVrjInmOCg2/DINwabcsjdOXxPbX+l9GV7Sevex7jpAcbbig/96fQz+nolWGffCj@vger.kernel.org, AJvYcCXraXaLSUbvZ6rOS248g7tlWi1bgq1XWo9JDpNKNuZtsuYr5zXuq9LudDmqg5AaYYyYqdKcKLoBo+RWk32YslpU5BI=@vger.kernel.org, AJvYcCXxOzyF97EnDWbKuUKbmJWIjewGLCg8tjolJy/CJhTBeJH/sIW2+4IvdS1SFYR/YoJchkfRQh8XvkAb@vger.kernel.org X-Gm-Message-State: AOJu0YwQGXXwtY8/FBt0n0eLQCWIixQZ4INqQkiBWY4m5h5M/VqVpUCz oh1l2RQjsAnHQwymLXTTaPnFCPWB+PfMuFabWY8ZebbcSGbI+YC+ X-Gm-Gg: ASbGnctMaEBB5olNBeqsHOoPboERSwwABsQXej7RMX53mANIHY0WWAl/E21mK4zAc66 cGGCBeRda/pxghMMg0nDQ+1kuk2/CA1e5BV1O6maHq+wg/hoysWRW3n9txhlndqTpu9luZ5VQZO ToO7gH8S+CT8z2pf7wweWetgOeWk9HpA79VzNuL8H5n3w7HTnV1FBZn/PdkCQhcgVg6Gto9NGOZ vFqcRdmX1Pf6oF2OeTDEjZ2YJ8zlpP+5VOYGNMxQ3yfGQ0qO+YYMzvbfnrf0m9xemCo/wNsaarM cac016LZBDt1s9yGY/XUWOlIUOG9cuKMRiwkZB2SpM3cQhDn6Xg+LGnC1vxYcCN2a9OpFJQCNEc = X-Google-Smtp-Source: AGHT+IF6WostFapxQBw6ajNHWZp/i5PjEELly2sDADJ+hQXmv+3xRiGu0yOTdYUI6fnh+IIxhIZCmQ== X-Received: by 2002:a05:6000:2287:b0:39c:1f10:ba54 with SMTP id ffacd0b85a97d-3a09303bbb3mr428578f8f.35.1746045692273; Wed, 30 Apr 2025 13:41:32 -0700 (PDT) Received: from iku.example.org ([2a06:5906:61b:2d00:c5ac:bf15:f358:81a8]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a073ca56d5sm18098132f8f.32.2025.04.30.13.41.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 30 Apr 2025 13:41:31 -0700 (PDT) From: Prabhakar X-Google-Original-From: Prabhakar To: 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 , Biju Das , Geert Uytterhoeven , Michael Turquette , Stephen Boyd , Philipp Zabel , Magnus Damm Cc: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-clk@vger.kernel.org, Prabhakar , Fabrizio Castro , Lad Prabhakar Subject: [PATCH v4 12/15] drm: renesas: rz-du: mipi_dsi: Add dphy_late_init() callback for RZ/V2H(P) Date: Wed, 30 Apr 2025 21:41:09 +0100 Message-ID: <20250430204112.342123-13-prabhakar.mahadev-lad.rj@bp.renesas.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250430204112.342123-1-prabhakar.mahadev-lad.rj@bp.renesas.com> References: <20250430204112.342123-1-prabhakar.mahadev-lad.rj@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Lad Prabhakar Introduce the `dphy_late_init` callback in `rzg2l_mipi_dsi_hw_info` to allow additional D-PHY register configurations after enabling data and clock lanes. This is required for the RZ/V2H(P) SoC but not for the RZ/G2L SoC. Modify `rzg2l_mipi_dsi_startup()` to invoke `dphy_late_init` if defined, ensuring SoC-specific initialization is performed only when necessary. This change prepares for RZ/V2H(P) SoC support while maintaining compatibility with existing platforms. Co-developed-by: Fabrizio Castro Signed-off-by: Fabrizio Castro Signed-off-by: Lad Prabhakar --- v3->v4: - No changes v2->v3: - No changes v1->v2: - No changes --- drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c b/drivers/gpu/d= rm/renesas/rz-du/rzg2l_mipi_dsi.c index 8c7384b95411..66eef39af35e 100644 --- a/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c +++ b/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c @@ -35,6 +35,7 @@ struct rzg2l_mipi_dsi; =20 struct rzg2l_mipi_dsi_hw_info { int (*dphy_init)(struct rzg2l_mipi_dsi *dsi, u64 hsfreq_millihz); + void (*dphy_late_init)(struct rzg2l_mipi_dsi *dsi); void (*dphy_exit)(struct rzg2l_mipi_dsi *dsi); u32 phy_reg_offset; u32 link_reg_offset; @@ -318,6 +319,9 @@ static int rzg2l_mipi_dsi_startup(struct rzg2l_mipi_dsi= *dsi, txsetr =3D TXSETR_DLEN | TXSETR_NUMLANEUSE(dsi->lanes - 1) | TXSETR_CLEN; rzg2l_mipi_dsi_link_write(dsi, TXSETR, txsetr); =20 + if (dsi->info->dphy_late_init) + dsi->info->dphy_late_init(dsi); + hsfreq =3D DIV_ROUND_CLOSEST_ULL(hsfreq_millihz, MILLI); /* * Global timings characteristic depends on high speed Clock Frequency --=20 2.49.0 From nobody Sun Dec 14 12:11:01 2025 Received: from mail-wr1-f54.google.com (mail-wr1-f54.google.com [209.85.221.54]) (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 984D42D29D7; Wed, 30 Apr 2025 20:41:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746045698; cv=none; b=LKLUa9J2gkcBb8u31s17BJeooVdK0hg6gwgh+UmgCk2fZ4MV2emN3KMTPgIax0mlbsGoi/38OyGPa7DC2wNNx+Q21rWkzPFGXSaJv71U7itmM0ErvjKkQnPrTzHUT+2RtOsFaxwBfhMNCl7s/tUbEGxakJ/GDFB0y9NYHUwjIBM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746045698; c=relaxed/simple; bh=5MSzxppsRyafWoVHin2yQZESy+SYszPQbnGhsNJ9twY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Buvw2xA0V15RJb6olOFGj1hVEw1bOORTWmNkircx7yHXLfZjeggV/FNfUXTKMBq6izagN+dcvyN2vGNqEhcQsNeSOGSvEg0SAuaDFoLj57OE3z51MNCGERUV99Lm194F6mwJTB7Z/69mEPXnmIGpgfhLarFMGm1KKQbxY2h88F8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Zv1C4cDy; arc=none smtp.client-ip=209.85.221.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Zv1C4cDy" Received: by mail-wr1-f54.google.com with SMTP id ffacd0b85a97d-39ac9aea656so211788f8f.3; Wed, 30 Apr 2025 13:41:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746045694; x=1746650494; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=xkhLH7dnQyU3etCQVumdh211vuWSpqHQ3BzyQ1XIwYU=; b=Zv1C4cDy3al9/4gtp8U1/bWPpZ/BqwDXknIAKGDCQuGRTBfoO6oMsXBpH6j/lszf6+ QiTW7Peo0t8ZedgRLYJ2WWk/7iJb2YHXd2KV3krTc/CRJ/5NAHh2qQJ8S7WmkHQMAzQg SbeP80Txf0i28nOCMid3cOKeI6Lvm0X3EtTOjLhP77xDyTDJLKwTWmX9kyGXMMEdh6sg A9EVADOTwmNRBb9nKn01CXaZXdTphet2qD0xijfByGUTmnqj49wLEYJSGmkN/ewDP9V1 doPAED87IPmMqWrdzchoQ0UOWwVelj4+QZhorv9tLnugTNrgRE32aeg1Sz8/8iliH+uG riFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746045694; x=1746650494; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=xkhLH7dnQyU3etCQVumdh211vuWSpqHQ3BzyQ1XIwYU=; b=o1JlbfVbgdcUoGyT8jR81ayid1g/5QUQv7UgnEmFZLBd4qQF2vsW9lobWCUlnuJJGK ovm6S2Gy7GaVzTgG2IdO6C3nkEjFMP3OeT33vC3aZfpVeYcs2WvLp8ra7yYnLDKk9uzL u3vVObgJLv+E8Plx6gyGxHiyYvogHum9m8mn8B0PsEUMSfuFC4yNn3ShX+NS3uEukIly 6aHSwyDreFiU6gZeCWCuxCzBi0it9U/9J1YObPnTSBBcczrCH59duBb7ImyM3sjhWOA7 97qDQzYA6+wFCS1/t9h5/VZJyROAtbj75ms03Xr+Lwq74ZUyP0oJG/pnmb10isoMJJsK ceTQ== X-Forwarded-Encrypted: i=1; AJvYcCVDNbL0FmvwRvf16RBnVLzTFzPAFCFVa/eb9ZxOoEGu57fmeQWNe33ZLdKJV/+sZf8NYfaoUl11Sc6UZi/k@vger.kernel.org, AJvYcCVi30juUG4eLeGdkKku9MusqLe3oiJ8Dr2mrN0tj10+mQm6j3nJ5TdgWYqFEy47cp6I2sODt0mHF96o@vger.kernel.org, AJvYcCWTzDPrpbD8PmaO49/xev0GjQi1bhtY3mr3e/ISXhjOTqzzm8BzVFEFJKSYVq68UpD218IvtRmiOaye@vger.kernel.org, AJvYcCXuOiKHlRk+IHBb1ESKJTBfKReRSAxfLEfeGjlh85SXBvOas1xSGC8P9GRrpavnBfGDBcz702+p1iO+8oIio0E16Vk=@vger.kernel.org X-Gm-Message-State: AOJu0YxhuaRkc89yRYqy9yi6GYUFaEOrOmqvpnnVSva1cQkOGK794ztx VC0TZ/F1VvM3mEV+PRVKw/qRDAgydAM3bka7PX+iOpGTyvV6mViT X-Gm-Gg: ASbGnctoTnxWVlPV7Nc7rSWTisCZdsMwR8BrsazRRDTG4AA7ELRot0nrTf+8CMrv4VS 1x2dZ5hLQAIQgeR4R04rZgXAzU3w0G+5IeYQtcXFVdPUcF1QjivWm6ShQoLAocuyMFvZTilZeg0 NZvxQbnARtJShE2bYUbe0ZLB7uJjvyJdPtxt0362TaQJ7bebytj4NWr5SbVWbsHb186wWc13d/R 93mjLcIltbYWuu93RI4qkIOqNwTpCN/1PcEiCD8wCu0vUc42o2A3g0usUufF1AOgUM+zPKo3Wcn 983NMr1dvw5MgOzHr7mO7alLzpWpYp+7npme19IjzZrmAPr9KlKpnjLQ7JICK3LYZ/bQehcw/Ta BHHiIxCWyvQ== X-Google-Smtp-Source: AGHT+IHEIlbtM7xvalF9D7EXKLKcnL75aEs0H0RB2iSqcEZDMqmvK2X4aJcZi4+SHluDcRseBCjUiA== X-Received: by 2002:a05:6000:2401:b0:39c:1f0e:95af with SMTP id ffacd0b85a97d-3a08f75398bmr4300949f8f.3.1746045693789; Wed, 30 Apr 2025 13:41:33 -0700 (PDT) Received: from iku.example.org ([2a06:5906:61b:2d00:c5ac:bf15:f358:81a8]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a073ca56d5sm18098132f8f.32.2025.04.30.13.41.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 30 Apr 2025 13:41:32 -0700 (PDT) From: Prabhakar X-Google-Original-From: Prabhakar To: 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 , Biju Das , Geert Uytterhoeven , Michael Turquette , Stephen Boyd , Philipp Zabel , Magnus Damm Cc: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-clk@vger.kernel.org, Prabhakar , Fabrizio Castro , Lad Prabhakar Subject: [PATCH v4 13/15] drm: renesas: rz-du: mipi_dsi: Add function pointers for configuring VCLK and mode validation Date: Wed, 30 Apr 2025 21:41:10 +0100 Message-ID: <20250430204112.342123-14-prabhakar.mahadev-lad.rj@bp.renesas.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250430204112.342123-1-prabhakar.mahadev-lad.rj@bp.renesas.com> References: <20250430204112.342123-1-prabhakar.mahadev-lad.rj@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Lad Prabhakar Introduce `dphy_conf_clks` and `dphy_mode_clk_check` callbacks in `rzg2l_mipi_dsi_hw_info` to configure the VCLK and validate supported display modes. On the RZ/V2H(P) SoC, the DSI PLL dividers need to be as accurate as possible. To ensure compatibility with both RZ/G2L and RZ/V2H(P) SoCs, function pointers are introduced. Modify `rzg2l_mipi_dsi_startup()` to use `dphy_conf_clks` for clock configuration and `rzg2l_mipi_dsi_bridge_mode_valid()` to invoke `dphy_mode_clk_check` for mode validation. This change ensures proper operation across different SoC variants by allowing fine-grained control over clock configuration and mode validation. Co-developed-by: Fabrizio Castro Signed-off-by: Fabrizio Castro Signed-off-by: Lad Prabhakar --- v3->v4: - Replaced KILO with MILLI v2->v3: - Replaced unsigned long long with u64 v1->v2: - No changes --- .../gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c | 59 +++++++++++++------ 1 file changed, 42 insertions(+), 17 deletions(-) diff --git a/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c b/drivers/gpu/d= rm/renesas/rz-du/rzg2l_mipi_dsi.c index 66eef39af35e..df43ff59e08e 100644 --- a/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c +++ b/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c @@ -37,6 +37,10 @@ struct rzg2l_mipi_dsi_hw_info { int (*dphy_init)(struct rzg2l_mipi_dsi *dsi, u64 hsfreq_millihz); void (*dphy_late_init)(struct rzg2l_mipi_dsi *dsi); void (*dphy_exit)(struct rzg2l_mipi_dsi *dsi); + int (*dphy_conf_clks)(struct rzg2l_mipi_dsi *dsi, unsigned long mode_freq, + u64 *hsfreq_millihz); + unsigned int (*dphy_mode_clk_check)(struct rzg2l_mipi_dsi *dsi, + unsigned long mode_freq); u32 phy_reg_offset; u32 link_reg_offset; unsigned long max_dclk; @@ -276,12 +280,36 @@ static void rzg2l_mipi_dsi_dphy_exit(struct rzg2l_mip= i_dsi *dsi) reset_control_assert(dsi->rstc); } =20 +static int rzg2l_dphy_conf_clks(struct rzg2l_mipi_dsi *dsi, unsigned long = mode_freq, + u64 *hsfreq_millihz) +{ + unsigned long vclk_rate; + unsigned int bpp; + + clk_set_rate(dsi->vclk, mode_freq * MILLI); + /* + * Relationship between hsclk and vclk must follow + * vclk * bpp =3D hsclk * 8 * lanes + * where vclk: video clock (Hz) + * bpp: video pixel bit depth + * hsclk: DSI HS Byte clock frequency (Hz) + * lanes: number of data lanes + * + * hsclk(bit) =3D hsclk(byte) * 8 =3D hsfreq + */ + bpp =3D mipi_dsi_pixel_format_to_bpp(dsi->format); + vclk_rate =3D clk_get_rate(dsi->vclk); + *hsfreq_millihz =3D DIV_ROUND_CLOSEST_ULL(mul_u32_u32(vclk_rate, bpp * MI= LLI), + dsi->lanes); + + return 0; +} + static int rzg2l_mipi_dsi_startup(struct rzg2l_mipi_dsi *dsi, const struct drm_display_mode *mode) { - unsigned long hsfreq, vclk_rate; + unsigned long hsfreq; u64 hsfreq_millihz; - unsigned int bpp; u32 txsetr; u32 clstptsetr; u32 lptrnstsetr; @@ -295,21 +323,9 @@ static int rzg2l_mipi_dsi_startup(struct rzg2l_mipi_ds= i *dsi, if (ret < 0) return ret; =20 - clk_set_rate(dsi->vclk, mode->clock * MILLI); - - /* - * Relationship between hsclk and vclk must follow - * vclk * bpp =3D hsclk * 8 * lanes - * where vclk: video clock (Hz) - * bpp: video pixel bit depth - * hsclk: DSI HS Byte clock frequency (Hz) - * lanes: number of data lanes - * - * hsclk(bit) =3D hsclk(byte) * 8 =3D hsfreq - */ - bpp =3D mipi_dsi_pixel_format_to_bpp(dsi->format); - vclk_rate =3D clk_get_rate(dsi->vclk); - hsfreq_millihz =3D DIV_ROUND_CLOSEST_ULL(mul_u32_u32(vclk_rate, bpp * MIL= LI), dsi->lanes); + ret =3D dsi->info->dphy_conf_clks(dsi, mode->clock, &hsfreq_millihz); + if (ret < 0) + goto err_phy; =20 ret =3D dsi->info->dphy_init(dsi, hsfreq_millihz); if (ret < 0) @@ -616,6 +632,14 @@ rzg2l_mipi_dsi_bridge_mode_valid(struct drm_bridge *br= idge, if (mode->clock < dsi->info->min_dclk) return MODE_CLOCK_LOW; =20 + if (dsi->info->dphy_mode_clk_check) { + enum drm_mode_status status; + + status =3D dsi->info->dphy_mode_clk_check(dsi, mode->clock); + if (status !=3D MODE_OK) + return status; + } + return MODE_OK; } =20 @@ -835,6 +859,7 @@ static void rzg2l_mipi_dsi_remove(struct platform_devic= e *pdev) static const struct rzg2l_mipi_dsi_hw_info rzg2l_mipi_dsi_info =3D { .dphy_init =3D rzg2l_mipi_dsi_dphy_init, .dphy_exit =3D rzg2l_mipi_dsi_dphy_exit, + .dphy_conf_clks =3D rzg2l_dphy_conf_clks, .link_reg_offset =3D 0x10000, .max_dclk =3D 148500, .min_dclk =3D 5803, --=20 2.49.0 From nobody Sun Dec 14 12:11:01 2025 Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) (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 165E62D1F42; Wed, 30 Apr 2025 20:41:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746045698; cv=none; b=UohbaLLQEd33+srxX+JtUSPxcUPTEFAiLEDc11Nf27FBRIRvLmJQBd58gM4uHeEUQkOzcW3TfNoTiX+A+blSRDuGwbke+qML0bIRTw9XLiGwL2FEYw02ATsToOGx96UujoUaaofWOPQqau53xsznXCrnd5aJ6Alz807qNnJwjlQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746045698; c=relaxed/simple; bh=Sz2skzXhVthG1Z+7MrnpvHGzpTfhIvgUb6omDw22uhw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=eJacah72GhNabNWVD8KcmP+xz46qhPCbdWk1+yLz6cJ48hvNWCcCyhDK8HiqIhOORr5op2QMRla7gvn3039GleE2Xb0t7pwTvhHmpsntwtvCA2OtWG/pR70v3czMDQUM8TA+pGQPLcLP8HsQTHmJoyduNLfZ2pQAFhjFRY9Q+9A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=RU5nAZPJ; arc=none smtp.client-ip=209.85.128.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="RU5nAZPJ" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-43ce70f9afbso2222415e9.0; Wed, 30 Apr 2025 13:41:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746045695; x=1746650495; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=AO0gGQ8XJg55vakvgacq+nstPR//vJTN3SM+V+tV6y8=; b=RU5nAZPJl63rqaD4mrk+FEjiR8Bh6rNl2wN3z7ZMydx8qSoat1m+QuGWJJrC9B1SuO tb2ZOw37bzR4UjJnQW1RODF2mR3TJNY/NIffw/RXdnaWjRblfIInQW9ZbqAjJqTDTRS0 2SMMWsp0f8hV7i612t3uuZ+CjKPhdVYZDraj7ybI/rr4gBYjFza6B5rZJgnlwbZVH/Ld 07NYvo69yyQi22DLn/JoO7zgeMaS64nFvUhhmtd8GYLKLfhfd5zBxPvtwXBCxBSk8mVn ShQ1j8v8GmCvxiItimH7oaIwikgAGxo1Zs7Oi6ssdJw/UcC56vTCidS5pZfC9nU6YlXH oDWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746045695; x=1746650495; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=AO0gGQ8XJg55vakvgacq+nstPR//vJTN3SM+V+tV6y8=; b=W9DNKaQvYvngVhN5GzuyKbNQomawJGD2eHTc9b7h57D44jUp+t730+MOKFSfFUng/h 7iecOggHMqR11yCtJa2X87XcscU7TapJ4wcjND+3A1PiVD1pwoIJCjjxMBROyl1bVQj/ j65dpIsdY/ZsGZUs+ZC6h0OtVrSE+9nk0lnA5+cu4ICBco4oHvDEs5B7yfkPt6v6b2y+ uRkcuL+qqrV6Sh3Q0b6m6Ev22ospCDj/7cSN7DpBXga6WUJVoVTaY8/lVm06YrAG+XBD KaV8fqKK9tt132r94hLlwfDBrGgKrcylgMAc/BLz0xmm0eTb9xo2hhkOYttZi8uWNEwC ArmQ== X-Forwarded-Encrypted: i=1; AJvYcCUBl2Of13vvQiuMiHo5cVRBKUyAIiN8JeqZs3VnjaMsZ2aDc8KyULDEPWiKhRNwQTYnY1qN/7nEfTsD@vger.kernel.org, AJvYcCUZoLBXBUyZVEh/Erw5Bu4nRYYdsUZdP8+3DopbpOn9W4xzkr8nT3gG9bny5Nvd8oY1D1FTM8ox3OaGBGbJq3gz6r0=@vger.kernel.org, AJvYcCXBUxfJuNr53ky/3/A01Sajg0juvD69nyLK1YGv6Drpy7SR3fcIMLJI0ueRHgEO5JIcsVLyzU8SvIr9@vger.kernel.org, AJvYcCXwn3v7wjqyyKyh+pSIhnry6AGUlr7bhZwPtH6+NhttJprkD3qw8suNowHGJmQXKKO4dTeFHAhWz2z4Q4BK@vger.kernel.org X-Gm-Message-State: AOJu0Yw24v5NXsETsa49NABWkaUySi81iC4vzLzlTDi5xJZDqf8DHX1E NA38HC1+93jBsrLVzR8O8Zx7TX17BRziWoSEGYdFmfGV/hwYVG03 X-Gm-Gg: ASbGncv8p7Agz+VKai/kTu39vzT5dG/xUCvyOuZbFkmEiYLkgQNRFnpiX4SByWRaNM3 guIXgxU59rv9XodCCeUnx0Dy1Ax7YXI0ditEtUybu/mXcSEL+dWnOUwnZgDq5JV37NfYzOl4PSX j7qnmPEE4q3Zucmu8/cW+wdF8zkbHj+qmP00VQQMCghsh3KZsuDrWANR3zj7WMEJMXPgzLR0Huu DJDOQD0TnGKSWcjlhhsrGcbUktSK6FFsHCKG2kLC7Hax6cIfGqbj5hC3drPf7au6I6x+fNbWafm LPvd8RCWxNYdGEscG8tpTZLfvV158rzGlpQ5U6NQntan+su7XNePn9CRlqNsl3iC/t/RD/4hn+o mM9/jfxMjuA== X-Google-Smtp-Source: AGHT+IHsecdyrGlNtI82mqkkhJLEKR/PshNRP/65SFVobBGuVGxd9oW8pr0BSn7ldq8EinhadMpN0g== X-Received: by 2002:a05:6000:2284:b0:3a0:830a:3d63 with SMTP id ffacd0b85a97d-3a08f753ce9mr4332262f8f.9.1746045695308; Wed, 30 Apr 2025 13:41:35 -0700 (PDT) Received: from iku.example.org ([2a06:5906:61b:2d00:c5ac:bf15:f358:81a8]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a073ca56d5sm18098132f8f.32.2025.04.30.13.41.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 30 Apr 2025 13:41:34 -0700 (PDT) From: Prabhakar X-Google-Original-From: Prabhakar To: 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 , Biju Das , Geert Uytterhoeven , Michael Turquette , Stephen Boyd , Philipp Zabel , Magnus Damm Cc: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-clk@vger.kernel.org, Prabhakar , Fabrizio Castro , Lad Prabhakar Subject: [PATCH v4 14/15] drm: renesas: rz-du: mipi_dsi: Add support for LPCLK handling Date: Wed, 30 Apr 2025 21:41:11 +0100 Message-ID: <20250430204112.342123-15-prabhakar.mahadev-lad.rj@bp.renesas.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250430204112.342123-1-prabhakar.mahadev-lad.rj@bp.renesas.com> References: <20250430204112.342123-1-prabhakar.mahadev-lad.rj@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Lad Prabhakar Introduce the `RZ_MIPI_DSI_FEATURE_LPCLK` feature flag in `rzg2l_mipi_dsi_hw_info` to indicate the need for LPCLK configuration. On the RZ/V2H(P) SoC, the LPCLK clock rate influences the required DPHY register configuration, whereas on the RZ/G2L SoC, this clock is not present. To accommodate this difference, add an `lpclk` clock handle in `rzg2l_mipi_dsi` and update the probe function to conditionally acquire LPCLK if the SoC supports it. Co-developed-by: Fabrizio Castro Signed-off-by: Fabrizio Castro Signed-off-by: Lad Prabhakar --- v3->v4 - No changes v2->v3: - No changes v1->v2: - Added LPCLK as feature flag --- drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c b/drivers/gpu/d= rm/renesas/rz-du/rzg2l_mipi_dsi.c index df43ff59e08e..22a386ca8ae3 100644 --- a/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c +++ b/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c @@ -30,6 +30,7 @@ =20 #define RZ_MIPI_DSI_FEATURE_DPHY_RST BIT(0) #define RZ_MIPI_DSI_FEATURE_16BPP BIT(1) +#define RZ_MIPI_DSI_FEATURE_LPCLK BIT(2) =20 struct rzg2l_mipi_dsi; =20 @@ -63,6 +64,7 @@ struct rzg2l_mipi_dsi { struct drm_bridge *next_bridge; =20 struct clk *vclk; + struct clk *lpclk; =20 enum mipi_dsi_pixel_format format; unsigned int num_data_lanes; @@ -788,6 +790,12 @@ static int rzg2l_mipi_dsi_probe(struct platform_device= *pdev) if (IS_ERR(dsi->vclk)) return PTR_ERR(dsi->vclk); =20 + if (dsi->info->features & RZ_MIPI_DSI_FEATURE_LPCLK) { + dsi->lpclk =3D devm_clk_get(dsi->dev, "lpclk"); + if (IS_ERR(dsi->lpclk)) + return PTR_ERR(dsi->lpclk); + } + if (dsi->info->features & RZ_MIPI_DSI_FEATURE_DPHY_RST) { dsi->rstc =3D devm_reset_control_get_exclusive(dsi->dev, "rst"); if (IS_ERR(dsi->rstc)) --=20 2.49.0 From nobody Sun Dec 14 12:11:01 2025 Received: from mail-wr1-f47.google.com (mail-wr1-f47.google.com [209.85.221.47]) (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 9FD492D3A74; Wed, 30 Apr 2025 20:41:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746045700; cv=none; b=bOBQeIw9ejBkrKwd59RtDTYYPsNth7ilIE+bkwImuwc83N2Olv4gQOl/k+s7QTY+fC8mFXlj9pKLNDm8efKmUJ2926KpK5vs+kuvw2r/th3bXu4DVzUGvoF668SYpQbq8JaDEpCUPrlA3Gc236KI5hCZ0QPujxxVESi8jv/NWNI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746045700; c=relaxed/simple; bh=EnTjnmHftkHm6H+Q8gGpHqx/S/sh/b2twjXC6gZ30Hs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lSUwpEp7BODPC78ORhc2SHqOb0dH6uG+bBim6BsKx6LO4wlikoUnc0Ojo4Xq6nLnO6kB08UHjj4MjfPefQbFSuHnPvp2y0w12i07M2z+Ke6zN6dO2APG9RcGe1pNqrMdKrrJtI0uSzu3PiJcIpvkDfwZQPu3qCF6bTywBKGOieM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ZUfEgsz7; arc=none smtp.client-ip=209.85.221.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ZUfEgsz7" Received: by mail-wr1-f47.google.com with SMTP id ffacd0b85a97d-3913d129c1aso230120f8f.0; Wed, 30 Apr 2025 13:41:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1746045697; x=1746650497; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=nHSENBRba839dKZ5HLC9qv9Nui7oFbAenx3n9SP1y7Q=; b=ZUfEgsz77kEjq0dcugr3wUpegQCClNy2WVVw6qoTh/ozLVXukL4XoxmUNwZ+dmiCKM xmQlzCfI9gffUaN5FHxjhgie4uyPlIUzyjvUz8z6qJ1/Zln4qynYoWshNAcIvHDB7HAM 4R8RKscgFGrKJ1ILS1eXyP6PdVWp3+NDnzrQ23IC+5GD+L4yKfWmBXQSeHrM7NlstbNv ZLaL4S4jcO60MFbiVECSuqvDhLykMrXtS4I27Cb3tJ8jen3Bjo+K1Qgpg21/a/8bMaVN vRyOKNVVPoPdrv8EpE8teiY3311BESDEATU4Ab4B303RLpzKL1dbvye1Cc1QnVyLJjGl Jbag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1746045697; x=1746650497; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=nHSENBRba839dKZ5HLC9qv9Nui7oFbAenx3n9SP1y7Q=; b=cn5DUIBPMGfipjIjLHtxsop0mshs4jTGGPvpBLWmty+WeExZ5VlVA2BfSHyUQSR5Hg Z2Eg/XjfiJ0tbNUADIVimIT9wveJ3dNSg7BH1vB0c/kB7oTSoyZppMGSYdsGVcVDftxd S3tlLs2A8qKE2kf+wi0mYyJK5vZ07PwBhlrfnf6xyzt+nMaDU9ABCsC+vvxTOgjHJbJ0 xC9MAbJATvM72/j4jE2z/PAIJibNi3vqmnYSk5AGtRTnYPp/AZ0H34/51O26mb+X7l2a vJCN2n6HN+TjGKtnJMlPdrI6U95/dijwnEy1NyakS+VVKS3UT9Ly390ahr3SGt13i/EX XdGw== X-Forwarded-Encrypted: i=1; AJvYcCVWQfsXE6/iuj3HXOAYOlOiRw3XoAiYKGJhfES2XG8OYCpeKOE61PKX5q28LvFdLvE3SOWRqxJJTaDeJUGN@vger.kernel.org, AJvYcCVsYP0wgspfjX+BX5eFmjcxM0358mfYh0RA1XmQrNZ8a3bdgpSbS+h9mzADkWVJIhNohat3qpSnxuLI@vger.kernel.org, AJvYcCWpqH4q3YaaEhJB0E+2EcH0GhLALm1GmxUKXVnYj1c/47m4G8USKztemgY0OWEHjFyaRHVLhy8KfEm7@vger.kernel.org, AJvYcCXTERyuLSsvBYVh1WwjaqDaBxdyJBvDZo1i6tiJxBDXMnI5KU26M48Qt1mFVqc4ofPq1QlodF7NX5WDLIRzkm3C5/0=@vger.kernel.org X-Gm-Message-State: AOJu0YwskKVUhxTWRP1CEcqXGOu/Afi73H8PKM5rYiFpe1rRrTPG+gFM gabyP591QS0pBdS54aP340PCS4I6ZBJEAmfPTa1a2yKaFl2MQ8L2 X-Gm-Gg: ASbGncu+X4cE3z6NRcFYtEmk4S5r6wnlSn8soLyfENw4TOhyzjgBl8lj1F+HeZQ7bhV EKokXxX9hqHSy/VwwwltQgwPgBb6sHoFD8XOBShlwX1rSz/FA6ZY/ZC1a4v7nk/zQQUmhYUFQFq c9pzKdiQ5A1ccL0Q7+c1s7uPQ4nuT0eGjuAyZ1Qf9TKcPDqxchjMqILQPadalcik44YtCfNXSo0 Gr85r4UeKklsCwMndnLaRK7iGmHDnLoJ+yB/9odUzRkL93hgwaCcVzDznGYnfjmmELjJX6+JudZ 6dejRweJEdpex4usaWO6d6vJ/zCUjza6K7fClM/FzvW6rxebME+KKSpruYn1zkB6TUddw99UT5Q = X-Google-Smtp-Source: AGHT+IE73Q9oFzikeNr6aktsW+t4EAvTbiy5T3YhrYhEeD3rnBgssIzFCnuAb+9Z3EGLGt144zQsBg== X-Received: by 2002:a05:6000:2a9:b0:39c:1258:d12c with SMTP id ffacd0b85a97d-3a092d096d1mr690384f8f.28.1746045696801; Wed, 30 Apr 2025 13:41:36 -0700 (PDT) Received: from iku.example.org ([2a06:5906:61b:2d00:c5ac:bf15:f358:81a8]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a073ca56d5sm18098132f8f.32.2025.04.30.13.41.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 30 Apr 2025 13:41:35 -0700 (PDT) From: Prabhakar X-Google-Original-From: Prabhakar To: 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 , Biju Das , Geert Uytterhoeven , Michael Turquette , Stephen Boyd , Philipp Zabel , Magnus Damm Cc: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-clk@vger.kernel.org, Prabhakar , Fabrizio Castro , Lad Prabhakar Subject: [PATCH v4 15/15] drm: renesas: rz-du: mipi_dsi: Add support for RZ/V2H(P) SoC Date: Wed, 30 Apr 2025 21:41:12 +0100 Message-ID: <20250430204112.342123-16-prabhakar.mahadev-lad.rj@bp.renesas.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250430204112.342123-1-prabhakar.mahadev-lad.rj@bp.renesas.com> References: <20250430204112.342123-1-prabhakar.mahadev-lad.rj@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Lad Prabhakar Add DSI support for Renesas RZ/V2H(P) SoC. Co-developed-by: Fabrizio Castro Signed-off-by: Fabrizio Castro Signed-off-by: Lad Prabhakar --- v3->v4 - In rzv2h_dphy_find_ulpsexit() made the array static const. =20 v2->v3: - Simplifed V2H DSI timings array to save space - Switched to use fsleep() instead of udelay() v1->v2: - Dropped unused macros - Added missing LPCLK flag to rzvv2h info --- .../gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c | 344 ++++++++++++++++++ .../drm/renesas/rz-du/rzg2l_mipi_dsi_regs.h | 34 ++ 2 files changed, 378 insertions(+) diff --git a/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c b/drivers/gpu/d= rm/renesas/rz-du/rzg2l_mipi_dsi.c index 22a386ca8ae3..b75dddfe0e94 100644 --- a/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c +++ b/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi.c @@ -5,6 +5,7 @@ * Copyright (C) 2022 Renesas Electronics Corporation */ #include +#include #include #include #include @@ -32,6 +33,9 @@ #define RZ_MIPI_DSI_FEATURE_16BPP BIT(1) #define RZ_MIPI_DSI_FEATURE_LPCLK BIT(2) =20 +#define RZV2H_MIPI_DPHY_FOUT_MIN_IN_MEGA (80 * MEGA) +#define RZV2H_MIPI_DPHY_FOUT_MAX_IN_MEGA (1500 * MEGA) + struct rzg2l_mipi_dsi; =20 struct rzg2l_mipi_dsi_hw_info { @@ -42,6 +46,7 @@ struct rzg2l_mipi_dsi_hw_info { u64 *hsfreq_millihz); unsigned int (*dphy_mode_clk_check)(struct rzg2l_mipi_dsi *dsi, unsigned long mode_freq); + const struct rzv2h_pll_div_limits *cpg_dsi_limits; u32 phy_reg_offset; u32 link_reg_offset; unsigned long max_dclk; @@ -49,6 +54,11 @@ struct rzg2l_mipi_dsi_hw_info { u8 features; }; =20 +struct rzv2h_dsi_mode_calc { + unsigned long mode_freq; + u64 mode_freq_hz; +}; + struct rzg2l_mipi_dsi { struct device *dev; void __iomem *mmio; @@ -70,6 +80,18 @@ struct rzg2l_mipi_dsi { unsigned int num_data_lanes; unsigned int lanes; unsigned long mode_flags; + + struct rzv2h_dsi_mode_calc mode_calc; + struct rzv2h_plldsi_parameters dsi_parameters; +}; + +static const struct rzv2h_pll_div_limits rzv2h_plldsi_div_limits =3D { + .fvco =3D { .min =3D 1050 * MEGA, .max =3D 2100 * MEGA }, + .m =3D { .min =3D 64, .max =3D 1023 }, + .p =3D { .min =3D 1, .max =3D 4 }, + .s =3D { .min =3D 0, .max =3D 5 }, + .k =3D { .min =3D -32768, .max =3D 32767 }, + .csdiv =3D { .min =3D 1, .max =3D 1 }, }; =20 static inline struct rzg2l_mipi_dsi * @@ -186,6 +208,155 @@ static const struct rzg2l_mipi_dsi_timings rzg2l_mipi= _dsi_global_timings[] =3D { }, }; =20 +struct rzv2h_mipi_dsi_timings { + const u8 *hsfreq; + u8 len; + u8 start_index; +}; + +enum { + TCLKPRPRCTL, + TCLKZEROCTL, + TCLKPOSTCTL, + TCLKTRAILCTL, + THSPRPRCTL, + THSZEROCTL, + THSTRAILCTL, + TLPXCTL, + THSEXITCTL, +}; + +static const u8 tclkprprctl[] =3D { + 15, 26, 37, 47, 58, 69, 79, 90, 101, 111, 122, 133, 143, 150, +}; + +static const u8 tclkzeroctl[] =3D { + 9, 11, 13, 15, 18, 21, 23, 24, 25, 27, 29, 31, 34, 36, 38, + 41, 43, 45, 47, 50, 52, 54, 57, 59, 61, 63, 66, 68, 70, 73, + 75, 77, 79, 82, 84, 86, 89, 91, 93, 95, 98, 100, 102, 105, + 107, 109, 111, 114, 116, 118, 121, 123, 125, 127, 130, 132, + 134, 137, 139, 141, 143, 146, 148, 150, +}; + +static const u8 tclkpostctl[] =3D { + 8, 21, 34, 48, 61, 74, 88, 101, 114, 128, 141, 150, +}; + +static const u8 tclktrailctl[] =3D { + 14, 25, 37, 48, 59, 71, 82, 94, 105, 117, 128, 139, 150, +}; + +static const u8 thsprprctl[] =3D { + 11, 19, 29, 40, 50, 61, 72, 82, 93, 103, 114, 125, 135, 146, 150, +}; + +static const u8 thszeroctl[] =3D { + 18, 24, 29, 35, 40, 46, 51, 57, 62, 68, 73, 79, 84, 90, + 95, 101, 106, 112, 117, 123, 128, 134, 139, 145, 150, +}; + +static const u8 thstrailctl[] =3D { + 10, 21, 32, 42, 53, 64, 75, 85, 96, 107, 118, 128, 139, 150, +}; + +static const u8 tlpxctl[] =3D { + 13, 26, 39, 53, 66, 79, 93, 106, 119, 133, 146, 150, +}; + +static const u8 thsexitctl[] =3D { + 15, 23, 31, 39, 47, 55, 63, 71, 79, 87, + 95, 103, 111, 119, 127, 135, 143, 150, +}; + +static const struct rzv2h_mipi_dsi_timings rzv2h_dsi_timings_tables[] =3D { + [TCLKPRPRCTL] =3D { + .hsfreq =3D tclkprprctl, + .len =3D ARRAY_SIZE(tclkprprctl), + .start_index =3D 0, + }, + [TCLKZEROCTL] =3D { + .hsfreq =3D tclkzeroctl, + .len =3D ARRAY_SIZE(tclkzeroctl), + .start_index =3D 2, + }, + [TCLKPOSTCTL] =3D { + .hsfreq =3D tclkpostctl, + .len =3D ARRAY_SIZE(tclkpostctl), + .start_index =3D 6, + }, + [TCLKTRAILCTL] =3D { + .hsfreq =3D tclktrailctl, + .len =3D ARRAY_SIZE(tclktrailctl), + .start_index =3D 1, + }, + [THSPRPRCTL] =3D { + .hsfreq =3D thsprprctl, + .len =3D ARRAY_SIZE(thsprprctl), + .start_index =3D 0, + }, + [THSZEROCTL] =3D { + .hsfreq =3D thszeroctl, + .len =3D ARRAY_SIZE(thszeroctl), + .start_index =3D 0, + }, + [THSTRAILCTL] =3D { + .hsfreq =3D thstrailctl, + .len =3D ARRAY_SIZE(thstrailctl), + .start_index =3D 3, + }, + [TLPXCTL] =3D { + .hsfreq =3D tlpxctl, + .len =3D ARRAY_SIZE(tlpxctl), + .start_index =3D 0, + }, + [THSEXITCTL] =3D { + .hsfreq =3D thsexitctl, + .len =3D ARRAY_SIZE(thsexitctl), + .start_index =3D 1, + }, +}; + +static u16 rzv2h_dphy_find_ulpsexit(unsigned long freq) +{ + static const unsigned long hsfreq[] =3D { + 1953125UL, + 3906250UL, + 7812500UL, + 15625000UL, + }; + static const u16 ulpsexit[] =3D {49, 98, 195, 391}; + unsigned int i; + + for (i =3D 0; i < ARRAY_SIZE(hsfreq); i++) { + if (freq <=3D hsfreq[i]) + break; + } + + if (i =3D=3D ARRAY_SIZE(hsfreq)) + i -=3D 1; + + return ulpsexit[i]; +} + +static u16 rzv2h_dphy_find_timings_val(unsigned long freq, u8 index) +{ + const struct rzv2h_mipi_dsi_timings *timings; + u16 i; + + timings =3D &rzv2h_dsi_timings_tables[index]; + for (i =3D 0; i < timings->len; i++) { + unsigned long hsfreq =3D timings->hsfreq[i] * 10000000UL; + + if (freq <=3D hsfreq) + break; + } + + if (i =3D=3D timings->len) + i -=3D 1; + + return timings->start_index + i; +}; + static void rzg2l_mipi_dsi_phy_write(struct rzg2l_mipi_dsi *dsi, u32 reg, = u32 data) { iowrite32(data, dsi->mmio + dsi->info->phy_reg_offset + reg); @@ -307,6 +478,158 @@ static int rzg2l_dphy_conf_clks(struct rzg2l_mipi_dsi= *dsi, unsigned long mode_f return 0; } =20 +static unsigned int rzv2h_dphy_mode_clk_check(struct rzg2l_mipi_dsi *dsi, + unsigned long mode_freq) +{ + struct rzv2h_plldsi_parameters *dsi_parameters =3D &dsi->dsi_parameters; + u64 hsfreq_millihz, mode_freq_hz, mode_freq_millihz; + struct rzv2h_plldsi_parameters cpg_dsi_parameters; + unsigned int bpp, i; + + bpp =3D mipi_dsi_pixel_format_to_bpp(dsi->format); + + for (i =3D 0; i < 10; i +=3D 1) { + unsigned long hsfreq; + bool parameters_found; + + mode_freq_hz =3D mode_freq * MILLI + i; + mode_freq_millihz =3D mode_freq_hz * MILLI * 1ULL; + parameters_found =3D rzv2h_dsi_get_pll_parameters_values(dsi->info->cpg_= dsi_limits, + &cpg_dsi_parameters, + mode_freq_millihz); + if (!parameters_found) + continue; + + hsfreq_millihz =3D DIV_ROUND_CLOSEST_ULL(cpg_dsi_parameters.freq_millihz= * bpp, + dsi->lanes); + parameters_found =3D rzv2h_dsi_get_pll_parameters_values(&rzv2h_plldsi_d= iv_limits, + dsi_parameters, + hsfreq_millihz); + if (!parameters_found) + continue; + + if (abs(dsi_parameters->error_millihz) >=3D 500) + continue; + + hsfreq =3D DIV_ROUND_CLOSEST_ULL(hsfreq_millihz, MILLI); + if (hsfreq >=3D RZV2H_MIPI_DPHY_FOUT_MIN_IN_MEGA && + hsfreq <=3D RZV2H_MIPI_DPHY_FOUT_MAX_IN_MEGA) { + dsi->mode_calc.mode_freq_hz =3D mode_freq_hz; + dsi->mode_calc.mode_freq =3D mode_freq; + return MODE_OK; + } + } + + return MODE_CLOCK_RANGE; +} + +static int rzv2h_dphy_conf_clks(struct rzg2l_mipi_dsi *dsi, unsigned long = mode_freq, + u64 *hsfreq_millihz) +{ + struct rzv2h_plldsi_parameters *dsi_parameters =3D &dsi->dsi_parameters; + unsigned long status; + + if (dsi->mode_calc.mode_freq !=3D mode_freq) { + status =3D rzv2h_dphy_mode_clk_check(dsi, mode_freq); + if (status !=3D MODE_OK) { + dev_err(dsi->dev, "No PLL parameters found for mode clk %lu\n", + mode_freq); + return -EINVAL; + } + } + + clk_set_rate(dsi->vclk, dsi->mode_calc.mode_freq_hz); + *hsfreq_millihz =3D dsi_parameters->freq_millihz; + + return 0; +} + +static int rzv2h_mipi_dsi_dphy_init(struct rzg2l_mipi_dsi *dsi, + u64 hsfreq_millihz) +{ + struct rzv2h_plldsi_parameters *dsi_parameters =3D &dsi->dsi_parameters; + unsigned long lpclk_rate =3D clk_get_rate(dsi->lpclk); + u32 phytclksetr, phythssetr, phytlpxsetr, phycr; + struct rzg2l_mipi_dsi_timings dphy_timings; + u16 ulpsexit; + u64 hsfreq; + + hsfreq =3D DIV_ROUND_CLOSEST_ULL(hsfreq_millihz, MILLI); + + if (dsi_parameters->freq_millihz =3D=3D hsfreq_millihz) + goto parameters_found; + + if (rzv2h_dsi_get_pll_parameters_values(&rzv2h_plldsi_div_limits, + dsi_parameters, hsfreq_millihz)) + goto parameters_found; + + dev_err(dsi->dev, "No PLL parameters found for HSFREQ %lluHz\n", hsfreq); + return -EINVAL; + +parameters_found: + dphy_timings.tclk_trail =3D + rzv2h_dphy_find_timings_val(hsfreq, TCLKTRAILCTL); + dphy_timings.tclk_post =3D + rzv2h_dphy_find_timings_val(hsfreq, TCLKPOSTCTL); + dphy_timings.tclk_zero =3D + rzv2h_dphy_find_timings_val(hsfreq, TCLKZEROCTL); + dphy_timings.tclk_prepare =3D + rzv2h_dphy_find_timings_val(hsfreq, TCLKPRPRCTL); + dphy_timings.ths_exit =3D + rzv2h_dphy_find_timings_val(hsfreq, THSEXITCTL); + dphy_timings.ths_trail =3D + rzv2h_dphy_find_timings_val(hsfreq, THSTRAILCTL); + dphy_timings.ths_zero =3D + rzv2h_dphy_find_timings_val(hsfreq, THSZEROCTL); + dphy_timings.ths_prepare =3D + rzv2h_dphy_find_timings_val(hsfreq, THSPRPRCTL); + dphy_timings.tlpx =3D + rzv2h_dphy_find_timings_val(hsfreq, TLPXCTL); + ulpsexit =3D rzv2h_dphy_find_ulpsexit(lpclk_rate); + + phytclksetr =3D PHYTCLKSETR_TCLKTRAILCTL(dphy_timings.tclk_trail) | + PHYTCLKSETR_TCLKPOSTCTL(dphy_timings.tclk_post) | + PHYTCLKSETR_TCLKZEROCTL(dphy_timings.tclk_zero) | + PHYTCLKSETR_TCLKPRPRCTL(dphy_timings.tclk_prepare); + phythssetr =3D PHYTHSSETR_THSEXITCTL(dphy_timings.ths_exit) | + PHYTHSSETR_THSTRAILCTL(dphy_timings.ths_trail) | + PHYTHSSETR_THSZEROCTL(dphy_timings.ths_zero) | + PHYTHSSETR_THSPRPRCTL(dphy_timings.ths_prepare); + phytlpxsetr =3D rzg2l_mipi_dsi_phy_read(dsi, PHYTLPXSETR) & ~GENMASK(7, 0= ); + phytlpxsetr |=3D PHYTLPXSETR_TLPXCTL(dphy_timings.tlpx); + phycr =3D rzg2l_mipi_dsi_phy_read(dsi, PHYCR) & ~GENMASK(9, 0); + phycr |=3D PHYCR_ULPSEXIT(ulpsexit); + + /* Setting all D-PHY Timings Registers */ + rzg2l_mipi_dsi_phy_write(dsi, PHYTCLKSETR, phytclksetr); + rzg2l_mipi_dsi_phy_write(dsi, PHYTHSSETR, phythssetr); + rzg2l_mipi_dsi_phy_write(dsi, PHYTLPXSETR, phytlpxsetr); + rzg2l_mipi_dsi_phy_write(dsi, PHYCR, phycr); + + rzg2l_mipi_dsi_phy_write(dsi, PLLCLKSET0R, + PLLCLKSET0R_PLL_S(dsi_parameters->s) | + PLLCLKSET0R_PLL_P(dsi_parameters->p) | + PLLCLKSET0R_PLL_M(dsi_parameters->m)); + rzg2l_mipi_dsi_phy_write(dsi, PLLCLKSET1R, PLLCLKSET1R_PLL_K(dsi_paramete= rs->k)); + fsleep(20); + + rzg2l_mipi_dsi_phy_write(dsi, PLLENR, PLLENR_PLLEN); + fsleep(500); + + return 0; +} + +static void rzv2h_mipi_dsi_dphy_late_init(struct rzg2l_mipi_dsi *dsi) +{ + fsleep(220); + rzg2l_mipi_dsi_phy_write(dsi, PHYRSTR, PHYRSTR_PHYMRSTN); +} + +static void rzv2h_mipi_dsi_dphy_exit(struct rzg2l_mipi_dsi *dsi) +{ + rzg2l_mipi_dsi_phy_write(dsi, PLLENR, 0); +} + static int rzg2l_mipi_dsi_startup(struct rzg2l_mipi_dsi *dsi, const struct drm_display_mode *mode) { @@ -409,6 +732,9 @@ static void rzg2l_mipi_dsi_set_display_timing(struct rz= g2l_mipi_dsi *dsi, case 18: vich1ppsetr =3D VICH1PPSETR_DT_RGB18; break; + case 16: + vich1ppsetr =3D VICH1PPSETR_DT_RGB16; + break; } =20 if ((dsi->mode_flags & MIPI_DSI_MODE_VIDEO_SYNC_PULSE) && @@ -864,6 +1190,23 @@ static void rzg2l_mipi_dsi_remove(struct platform_dev= ice *pdev) pm_runtime_disable(&pdev->dev); } =20 +RZV2H_CPG_PLL_DSI_LIMITS(rzv2h_cpg_pll_dsi_limits); + +static const struct rzg2l_mipi_dsi_hw_info rzv2h_mipi_dsi_info =3D { + .dphy_init =3D rzv2h_mipi_dsi_dphy_init, + .dphy_late_init =3D rzv2h_mipi_dsi_dphy_late_init, + .dphy_exit =3D rzv2h_mipi_dsi_dphy_exit, + .dphy_mode_clk_check =3D rzv2h_dphy_mode_clk_check, + .dphy_conf_clks =3D rzv2h_dphy_conf_clks, + .cpg_dsi_limits =3D &rzv2h_cpg_pll_dsi_limits, + .phy_reg_offset =3D 0x10000, + .link_reg_offset =3D 0, + .max_dclk =3D 187500, + .min_dclk =3D 5440, + .features =3D RZ_MIPI_DSI_FEATURE_16BPP | + RZ_MIPI_DSI_FEATURE_LPCLK, +}; + static const struct rzg2l_mipi_dsi_hw_info rzg2l_mipi_dsi_info =3D { .dphy_init =3D rzg2l_mipi_dsi_dphy_init, .dphy_exit =3D rzg2l_mipi_dsi_dphy_exit, @@ -875,6 +1218,7 @@ static const struct rzg2l_mipi_dsi_hw_info rzg2l_mipi_= dsi_info =3D { }; =20 static const struct of_device_id rzg2l_mipi_dsi_of_table[] =3D { + { .compatible =3D "renesas,r9a09g057-mipi-dsi", .data =3D &rzv2h_mipi_dsi= _info, }, { .compatible =3D "renesas,rzg2l-mipi-dsi", .data =3D &rzg2l_mipi_dsi_inf= o, }, { /* sentinel */ } }; diff --git a/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi_regs.h b/drivers/= gpu/drm/renesas/rz-du/rzg2l_mipi_dsi_regs.h index 16efe4dc59f4..68165395d61c 100644 --- a/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi_regs.h +++ b/drivers/gpu/drm/renesas/rz-du/rzg2l_mipi_dsi_regs.h @@ -40,6 +40,39 @@ #define DSIDPHYTIM3_THS_TRAIL(x) ((x) << 8) #define DSIDPHYTIM3_THS_ZERO(x) ((x) << 0) =20 +/* RZ/V2H DPHY Registers */ +#define PLLENR 0x000 +#define PLLENR_PLLEN BIT(0) + +#define PHYRSTR 0x004 +#define PHYRSTR_PHYMRSTN BIT(0) + +#define PLLCLKSET0R 0x010 +#define PLLCLKSET0R_PLL_S(x) ((x) << 0) +#define PLLCLKSET0R_PLL_P(x) ((x) << 8) +#define PLLCLKSET0R_PLL_M(x) ((x) << 16) + +#define PLLCLKSET1R 0x014 +#define PLLCLKSET1R_PLL_K(x) ((x) << 0) + +#define PHYTCLKSETR 0x020 +#define PHYTCLKSETR_TCLKTRAILCTL(x) ((x) << 0) +#define PHYTCLKSETR_TCLKPOSTCTL(x) ((x) << 8) +#define PHYTCLKSETR_TCLKZEROCTL(x) ((x) << 16) +#define PHYTCLKSETR_TCLKPRPRCTL(x) ((x) << 24) + +#define PHYTHSSETR 0x024 +#define PHYTHSSETR_THSEXITCTL(x) ((x) << 0) +#define PHYTHSSETR_THSTRAILCTL(x) ((x) << 8) +#define PHYTHSSETR_THSZEROCTL(x) ((x) << 16) +#define PHYTHSSETR_THSPRPRCTL(x) ((x) << 24) + +#define PHYTLPXSETR 0x028 +#define PHYTLPXSETR_TLPXCTL(x) ((x) << 0) + +#define PHYCR 0x030 +#define PHYCR_ULPSEXIT(x) ((x) << 0) + /* --------------------------------------------------------*/ =20 /* Link Status Register */ @@ -116,6 +149,7 @@ =20 /* Video-Input Channel 1 Pixel Packet Set Register */ #define VICH1PPSETR 0x420 +#define VICH1PPSETR_DT_RGB16 (0x0e << 16) #define VICH1PPSETR_DT_RGB18 (0x1e << 16) #define VICH1PPSETR_DT_RGB18_LS (0x2e << 16) #define VICH1PPSETR_DT_RGB24 (0x3e << 16) --=20 2.49.0