From patchwork Wed Oct 28 13:59:06 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dario Binacchi X-Patchwork-Id: 4903 Return-Path: X-Original-To: linux-amarula@patchwork.amarulasolutions.com Delivered-To: linux-amarula@patchwork.amarulasolutions.com Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by ganimede.amarulasolutions.com (Postfix) with ESMTPS id 180983F130 for ; Wed, 28 Oct 2026 14:59:26 +0100 (CET) Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-48dfdc0f491sf592084f8f.1 for ; Wed, 28 Oct 2026 06:59:26 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1793195965; cv=pass; d=google.com; s=arc-20260327; b=a/5mw3PuQtYkyuDqIPaSzDzAps+OVNwdd6piaNzqYdYM/RlzWoFfYLozgWstQ8XglR whD0SbGQJ7PjUAgOw2DwNUFeXqlonrF6E8x+2kI5hJFxqpXzISnJmVnxRscVq/95E3lq LW/MM2KmB9McDDsG6cWTSbUgLWaUGN76a+cE9jrs8KooagCEhvQAtEj2dPEtJH8XkMdM LYie8JyE70hFrshJmggV7P8eIvjw2oLHogQcohe6saF1Cr4dz9f0QIpx1I/SGzlANDXx Bive6XPMtLxWLMxyl9zeFYL1HPhiAcn+B85pcmFTIJ8xbG/GZq3WaKA5LeEUgAvbmq1s dD3w== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=list-unsubscribe:list-archive:list-help:list-post:list-id :mailing-list:precedence:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=s+YZHFnSizh00UINnFFrzR8+0tnTn84dG/vk99fs9OY=; fh=sUCyv1NGgckFbIfYM1yutqqzfPLwremCgOa9TTViIgU=; b=C64qTfXjNtK81iUFm1JC/RSBx2t52KtVcy3xe3nn/jTxLozF8VVkAbDlfNElrEEC7W kPMlyKd0wWLS/kv3xTdgDE+btbAA1X0FGCufkIo0U6Ri9jZ6G6MB5r/ocggdR5Z/SDz2 iY4oNp4TfT3hK4CH0jJLr4jHfaIHCG63UMAfhQvHFSmuxHU3142YUjKXZ2G1ZqxD8JGe OpsUSHtCc36+HwergGrxTySL1fmobOnmkaWKVLqVtrYVHNeJQFyPns73mFPvsbybyNpr wBvZDcLjIoNESeK5TFHNTz4H8UlidAePA3PNJlc5FmjBPOsoyQiwf4B7Ay182uDBT1fA QRAQ==; darn=patchwork.amarulasolutions.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=gtBBGsg4; spf=pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=dario.binacchi@amarulasolutions.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amarulasolutions.com; dara=neutral header.i=@amarulasolutions.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; t=1793195965; x=1793800765; darn=patchwork.amarulasolutions.com; h=list-unsubscribe:list-archive:list-help:list-post:list-id :mailing-list:precedence:content-type :x-original-authentication-results:x-original-sender:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to:content-type; bh=s+YZHFnSizh00UINnFFrzR8+0tnTn84dG/vk99fs9OY=; b=OhDHcwBDbfuLz8+7fIAPkuCZwXD9vUo+q4St8/3VoBPPNVouhGznZs367a6RjRKPrc byw8VViHxJOora/AOqS3QRKC4sC7KoXokv36I1uRldl1OHq7sTbJN4cc+vlDdPQ8Jbck Yh2pjEXwAh8DHksYwi/MzW2cgBsMzGFfeGiro= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1793195965; x=1793800765; h=list-unsubscribe:list-archive:list-help:list-post :x-spam-checked-in-group:list-id:mailing-list:precedence :content-type:x-original-authentication-results:x-original-sender :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:x-gm-gg:x-beenthere:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=s+YZHFnSizh00UINnFFrzR8+0tnTn84dG/vk99fs9OY=; b=xn8+3THvtbwQAoldZJ0ojmLARBZ3FhBR7ZDuCTlTByv7oWvkWeL6/aNljDIMH86lTd AAvbeAN/vvAnLlIg94KZbBbbWgBlRu88oPdQ95+zPZ2pd2xd2h5MReVZcw404EkqO6xK su+kPxL2MEx11YKL9gJh0ICpV6sKs1Qx6RzUyMo1AAXB1fkTsYAyLcSGzKXbm7ZexSRf LSw+WJCJzOuwAowH/b4QgKDkH5z8rUKXtytJ/awkYe48UpUDXxrHZGCN+CjbgqVgaIJR ko9TgvnjU3LYTmRbyjba9hgYK84wPhT7SUEHGdGYV8CS+Ov5QqkkNIEtq/sib85lWgff blCQ== X-Forwarded-Encrypted: i=2; AKwUvBxJ/u5qlPVhTfQ0FX9gXJ+iEJbDNlPKnvep3GrEeDK/4CPrD/BumlxGeMr5XF0MAkahq9SqnD5J1Bf+XiPe@patchwork.amarulasolutions.com X-Gm-Message-State: AFq9FYImGaeFjL+xzXlby2ARu/75bVC6MyWkS7j0uvXCnqWvd3V1/QAL DV+dyce0Y+cWAo5OtdzQ852dUeUIsILoRLZpjwtoNWGGYiJtfn/Bp+N4BIDFf7sa/6P+Tw== X-Received: by 2002:a05:600c:1387:b0:4a5:87b3:ddc1 with SMTP id 5b1f17b1804b1-4a96667c215mr51034815e9.13.1793195965475; Wed, 28 Oct 2026 06:59:25 -0700 (PDT) X-BeenThere: linux-amarula@amarulasolutions.com; h="ATskLde5279+bxR5BNT+Bp51We782whijlcRw6AGPy53tbGTPQ==" Received: by 2002:a05:600c:3b0e:b0:4a1:dae5:1dd with SMTP id 5b1f17b1804b1-4a92753439bls10963635e9.2.-pod-prod-06-eu; Wed, 28 Oct 2026 06:59:24 -0700 (PDT) X-Forwarded-Encrypted: i=2; AKwUvBy59neD4f9W49+n8A5X2RJFCDYiipRIkpW8lNu3NBoi8ldaHj06rM2CNxObdppzLC8qu2dHR3gIYKXcLzXT@amarulasolutions.com X-Received: by 2002:a05:600c:810c:b0:4a2:150f:1613 with SMTP id 5b1f17b1804b1-4a9660b4fcbmr49544675e9.7.1793195963517; Wed, 28 Oct 2026 06:59:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1793195963; cv=none; d=google.com; s=arc-20260327; b=N4XUOYuaY3uTKVAhanfQa+KgNXwd03dvSJup7zSJ1anjzA38VWvT3hC7TnPC2pvNSV p9cTBPHkTqiD631nOp8Fp2txEiTAX20kyKt2iMr3/2AIEoWYDAkdJOqxnfZQWj1fZmvf XtA/wqil+6qekrimzbtSeXj6D+hrJgzEwsWmCt2TDZhtKjYQpw+mSfW5t1W7eBVaUL31 rfXNSICtTc6qVOW4zSFwtFSYd/qfNY4Oym/ipUm3CWsG6y9c9JdwCjPT0O8aZVdxe6If oy5p2b0eGKT00ilddloFhN5jJqKdYYJtyHEacmuOTu38aSDyuPkTk7JAeSKxrj2iEOEO /2PA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=RBz08268AVURbWerFfGZQvoJEMhx0Fe3EfTMgya6HMo=; fh=mSGJAzxXARGV5JMjGtSKN6jz91RLZiGwDrzh9reRDNs=; b=DR/jN/HflWeS8Iv/6Wu0iUc7DUIrBUEcvUTNBYqu0DBcoMqSaApEG8/j8CjcoCXhac 436yzJBdrl3KXas3lUpO0+hd+G99mm32Vg1/rDeLaIPMaoZaDhfq1GFn0cvFmb13uqEr CrB81SV8RPpWjHWZNW8o12Hket33ZYlZkg0QEzi+2z674auCOAi3HM3RMroPxCpGpZXv 8tn+SRvTK9kv4G9npLV8ifWdHnc/G1ZAn2Y0N73aYbmQhZoxIxuahKwB4aesJtblgUFD ZKuwBvmCXiHl746YPMAxeZN4W7G9FySmMqdGmVblpzAEoVOXk6WAqnncsQ5IIdsTicFb 1XSg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=gtBBGsg4; spf=pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=dario.binacchi@amarulasolutions.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amarulasolutions.com; dara=neutral header.i=@amarulasolutions.com Received: from mail-sor-f41.google.com (mail-sor-f41.google.com. [209.85.220.41]) by mx.google.com with SMTPS id 5b1f17b1804b1-4a94f90a6adsor4138465e9.17.2026.10.28.06.59.23 for (Google Transport Security); Wed, 28 Oct 2026 06:59:23 -0700 (PDT) Received-SPF: pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) client-ip=209.85.220.41; X-Forwarded-Encrypted: i=1; AKwUvByLX7q4NtT+mfagbUzreDRLQFW2jS80kIACrhckP8IXEwz6CNncPKzJdNbYdBzPzXKIs7ktuZE7c6smZbIC@amarulasolutions.com X-Gm-Gg: AYBFou19l8V16comDD5l2Z9h3o2Cz/CyvZ3CF8pb+B8zYBdP1o5v8i8j4Iat0OP8CQx +Z2ciK+4UV/Ap5uPL5swhoZURldquoL/ylQX1uTEjA8gf7oIGUyToYoXEeGhqwz4wEt6OyXkb6R LEZmpNp+xhODGM+g3sSxivW/rJwnk24/k3540DlwqSnq6g4iJtdX9EYl8HHVSL0SLkIt3sR9av4 mp1R+2td/wXGShXYDw5jLVX/BZiMGgMO5/PyAppV/cPeCEBR68/qrshPw8EbAkzQAu64S3hCl1D u1hprB+hwQZ7bxlhpqq/t6hkbVGH8eaUDv2jk8nCQCUgTJ/AA79ESz6KfuFwlV2xftTNitVNN44 qCNyvP9Ey3YZB2GhxAecaCvBuIIlnZIINn2OWR4GXmMYBcbwc7v0tMqKg6VEOdqDP7ilC5qucVu R9eddvibe/xYPehmUefE3atFSf9dFBFTDM+m+HB2KPF5+I+qJA7Dh+tp2m9M0ZzsoXam4VBk01m J/e5reiOrJzTZoTkxwIx66Vp8X6wxP1jS9zJKh+2+deVeUMBRPHwjh6KynsTSq26oky3Xi1UWZT GgZeticrEvH9pxwM0XzoWnqqNsKEBqMWSGd7HIg3jIXSJhdJFMwdi679RXWXtO3VyLU5X5BGpf/ yfIeSpxAEsm6+/DhTaK3uMKkXvhHfG/EqsjhRgdd94H72om4A X-Received: by 2002:a05:600c:19c8:b0:4a1:d459:db4b with SMTP id 5b1f17b1804b1-4a966e2a979mr54893215e9.24.1793195963058; Wed, 28 Oct 2026 06:59:23 -0700 (PDT) Received: from dario-ThinkPad-P14s-Gen-5.amarulasolutions.com ([2.196.42.39]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4a94f05f168sm37077165e9.4.2026.10.28.06.59.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 28 Oct 2026 06:59:22 -0700 (PDT) From: Dario Binacchi To: Alexandre Torgue , Stephen Boyd Cc: Marek Vasut , Gabriel Fernandez , michael@amarulasolutions.com, linux-amarula@amarulasolutions.com, Yannick Fertre , Raphael Gallais-Pou , Dario Binacchi , Brian Masney , Jerome Brunet , Maxime Coquelin , linux-arm-kernel@lists.infradead.org, linux-clk@vger.kernel.org, linux-kernel@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com Subject: [RFC PATCH 2/4] clk: stm32: add STM32MP25 SYSCFG clock driver Date: Wed, 28 Oct 2026 14:59:06 +0100 Message-ID: <20261028135915.2665857-3-dario.binacchi@amarulasolutions.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20261028135915.2665857-1-dario.binacchi@amarulasolutions.com> References: <20261028135915.2665857-1-dario.binacchi@amarulasolutions.com> MIME-Version: 1.0 X-Original-Sender: dario.binacchi@amarulasolutions.com X-Original-Authentication-Results: mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=gtBBGsg4; spf=pass (google.com: domain of dario.binacchi@amarulasolutions.com designates 209.85.220.41 as permitted sender) smtp.mailfrom=dario.binacchi@amarulasolutions.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=amarulasolutions.com; dara=neutral header.i=@amarulasolutions.com Precedence: list Mailing-list: list linux-amarula@amarulasolutions.com; contact linux-amarula+owners@amarulasolutions.com List-ID: X-Spam-Checked-In-Group: linux-amarula@amarulasolutions.com X-Google-Group-Id: 476853432473 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , On STM32MP25 the LTDC pixel clock is selected in the SYSCFG DISPLAYCLKCR register among the DSI byte lane clock, the LVDS PHY pixel clock (reset value) and the LTDC kernel clock, the latter being the one needed by the RGB (DPI) output. The SYSCFG node already provides this clock ("#clock-cells = <0>"), referenced by the LTDC as "ref" clock, but no driver registers it, so the selection is stuck at the reset value and a display connected to the LTDC RGB output can't work. Add a driver registering this clock as a mux. The SYSCFG node is already bound to the STM32MP2 SYSCFG driver, so the clock driver is bound to an auxiliary device created by the latter, which shares the SYSCFG node and regmap. Signed-off-by: Dario Binacchi --- drivers/clk/stm32/Kconfig | 12 +++ drivers/clk/stm32/Makefile | 1 + drivers/clk/stm32/clk-stm32mp25-syscfg.c | 111 +++++++++++++++++++++++ 3 files changed, 124 insertions(+) create mode 100644 drivers/clk/stm32/clk-stm32mp25-syscfg.c diff --git a/drivers/clk/stm32/Kconfig b/drivers/clk/stm32/Kconfig index 5dbd75cde657..906044aacaa1 100644 --- a/drivers/clk/stm32/Kconfig +++ b/drivers/clk/stm32/Kconfig @@ -39,5 +39,17 @@ config COMMON_CLK_STM32MP257 help Support for stm32mp25x SoC family clocks. +config COMMON_CLK_STM32MP25_SYSCFG + tristate "Clock driver for stm32mp25x SYSCFG clocks" + depends on COMMON_CLK_STM32MP257 + select AUXILIARY_BUS + select MFD_SYSCON + default COMMON_CLK_STM32MP257 + help + Support for the clocks provided by the stm32mp25x SYSCFG, i.e. + the LTDC pixel clock source selection between the LTDC kernel + clock (RGB output), the LVDS PHY pixel clock and the DSI byte + lane clock. + endif diff --git a/drivers/clk/stm32/Makefile b/drivers/clk/stm32/Makefile index e04727b59449..8088d172651f 100644 --- a/drivers/clk/stm32/Makefile +++ b/drivers/clk/stm32/Makefile @@ -2,3 +2,4 @@ obj-$(CONFIG_COMMON_CLK_STM32MP135) += clk-stm32mp13.o clk-stm32-core.o reset-st obj-$(CONFIG_COMMON_CLK_STM32MP157) += clk-stm32mp1.o reset-stm32.o obj-$(CONFIG_COMMON_CLK_STM32MP215) += clk-stm32mp21.o clk-stm32-core.o reset-stm32.o obj-$(CONFIG_COMMON_CLK_STM32MP257) += clk-stm32mp25.o clk-stm32-core.o reset-stm32.o +obj-$(CONFIG_COMMON_CLK_STM32MP25_SYSCFG) += clk-stm32mp25-syscfg.o diff --git a/drivers/clk/stm32/clk-stm32mp25-syscfg.c b/drivers/clk/stm32/clk-stm32mp25-syscfg.c new file mode 100644 index 000000000000..1cb2459f0370 --- /dev/null +++ b/drivers/clk/stm32/clk-stm32mp25-syscfg.c @@ -0,0 +1,111 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * STM32MP25 SYSCFG clocks + * + * Copyright (C) 2026 Amarula Solutions, Dario Binacchi + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define SYSCFG_DISPLAYCLKCR 0x5000 +#define DISPLAYCLKCR_DPIVSLVDS GENMASK(1, 0) + +/* + * The LTDC pixel clock source is selected in SYSCFG_DISPLAYCLKCR among + * the DSI byte lane clock, the LVDS PHY pixel clock (reset value) and + * the LTDC kernel clock, which is used with the RGB (DPI) output. + */ +static const char * const clk_pix_ltdc_parents[] = { + "txbyteclk", "clk_pix_lvds", "ck_ker_ltdc", +}; + +struct stm32mp25_syscfg_mux { + struct clk_hw hw; + struct regmap *regmap; +}; + +static inline struct stm32mp25_syscfg_mux *to_syscfg_mux(struct clk_hw *hw) +{ + return container_of(hw, struct stm32mp25_syscfg_mux, hw); +} + +static u8 stm32mp25_syscfg_mux_get_parent(struct clk_hw *hw) +{ + struct stm32mp25_syscfg_mux *mux = to_syscfg_mux(hw); + unsigned int val; + + regmap_read(mux->regmap, SYSCFG_DISPLAYCLKCR, &val); + + return FIELD_GET(DISPLAYCLKCR_DPIVSLVDS, val); +} + +static int stm32mp25_syscfg_mux_set_parent(struct clk_hw *hw, u8 index) +{ + struct stm32mp25_syscfg_mux *mux = to_syscfg_mux(hw); + + return regmap_update_bits(mux->regmap, SYSCFG_DISPLAYCLKCR, + DISPLAYCLKCR_DPIVSLVDS, + FIELD_PREP(DISPLAYCLKCR_DPIVSLVDS, index)); +} + +static const struct clk_ops stm32mp25_syscfg_mux_ops = { + .get_parent = stm32mp25_syscfg_mux_get_parent, + .set_parent = stm32mp25_syscfg_mux_set_parent, + .determine_rate = clk_hw_determine_rate_no_reparent, +}; + +static int stm32mp25_syscfg_clk_probe(struct auxiliary_device *adev, + const struct auxiliary_device_id *id) +{ + struct device *dev = &adev->dev; + struct clk_init_data init = { }; + struct stm32mp25_syscfg_mux *mux; + int ret; + + mux = devm_kzalloc(dev, sizeof(*mux), GFP_KERNEL); + if (!mux) + return -ENOMEM; + + mux->regmap = syscon_node_to_regmap(dev->of_node); + if (IS_ERR(mux->regmap)) + return dev_err_probe(dev, PTR_ERR(mux->regmap), + "failed to get the SYSCFG regmap\n"); + + init.name = "clk_pix_ltdc"; + init.ops = &stm32mp25_syscfg_mux_ops; + init.parent_names = clk_pix_ltdc_parents; + init.num_parents = ARRAY_SIZE(clk_pix_ltdc_parents); + init.flags = CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT; + mux->hw.init = &init; + + ret = devm_clk_hw_register(dev, &mux->hw); + if (ret) + return dev_err_probe(dev, ret, "failed to register %s\n", + init.name); + + return devm_of_clk_add_hw_provider(dev, of_clk_hw_simple_get, &mux->hw); +} + +static const struct auxiliary_device_id stm32mp25_syscfg_clk_ids[] = { + { .name = "stm32mp2_syscfg.clk" }, + { } +}; +MODULE_DEVICE_TABLE(auxiliary, stm32mp25_syscfg_clk_ids); + +static struct auxiliary_driver stm32mp25_syscfg_clk_driver = { + .probe = stm32mp25_syscfg_clk_probe, + .id_table = stm32mp25_syscfg_clk_ids, +}; +module_auxiliary_driver(stm32mp25_syscfg_clk_driver); + +MODULE_AUTHOR("Dario Binacchi "); +MODULE_DESCRIPTION("STM32MP25 SYSCFG clock driver"); +MODULE_LICENSE("GPL");