[PATCH v2 2/2] clk: mediatek: add MT8188 clock driver

Mattijs Korpershoek mkorpershoek at kernel.org
Fri Dec 12 19:32:31 CET 2025


Hi David,

On Thu, Dec 11, 2025 at 22:22, David Lechner <dlechner at baylibre.com> wrote:

> On 12/11/25 11:55 AM, David Lechner wrote:
>> On 12/11/25 2:39 AM, Mattijs Korpershoek wrote:
>>> Hi Julien,
>>>
>>> Thank you for the patch.
>>>
>>> On Tue, Dec 09, 2025 at 11:22, Julien Stephan <jstephan at baylibre.com> wrote:
>>>
>>>> From: Julien Masson <jmasson at baylibre.com>
>>>>
>>>> The following clocks have been added for MT8188 SoC:
>>>> apmixedsys, topckgen, infracfg, pericfg and imp_iic_wrap
>>>>
>>>> These clocks driver are based on the ones present in the kernel:
>>>> drivers/clk/mediatek/clk-mt8188-*
>>>>
>>>> Signed-off-by: Julien Masson <jmasson at baylibre.com>
>>>> Signed-off-by: Julien Stephan <jstephan at baylibre.com>
>>>> ---
>>>>  drivers/clk/mediatek/Makefile     |    1 +
>>>>  drivers/clk/mediatek/clk-mt8188.c | 1840 +++++++++++++++++++++++++++++++++++++
>>>>  2 files changed, 1841 insertions(+)
>>>>
>>>> diff --git a/drivers/clk/mediatek/Makefile b/drivers/clk/mediatek/Makefile
>>>> index 12893687b68fc6c136a06e19305b1dd0c8a8101a..68b3d6e9610d8e7f4c4c625f52e525174e92787a 100644
>>>> --- a/drivers/clk/mediatek/Makefile
>>>> +++ b/drivers/clk/mediatek/Makefile
>>>> @@ -11,6 +11,7 @@ obj-$(CONFIG_TARGET_MT7981) += clk-mt7981.o
>>>>  obj-$(CONFIG_TARGET_MT7988) += clk-mt7988.o
>>>>  obj-$(CONFIG_TARGET_MT7987) += clk-mt7987.o
>>>>  obj-$(CONFIG_TARGET_MT8183) += clk-mt8183.o
>>>> +obj-$(CONFIG_TARGET_MT8188) += clk-mt8188.o
>>>>  obj-$(CONFIG_TARGET_MT8365) += clk-mt8365.o
>>>>  obj-$(CONFIG_TARGET_MT8512) += clk-mt8512.o
>>>>  obj-$(CONFIG_TARGET_MT8516) += clk-mt8516.o
>>>> diff --git a/drivers/clk/mediatek/clk-mt8188.c b/drivers/clk/mediatek/clk-mt8188.c
>>>> new file mode 100644
>>>> index 0000000000000000000000000000000000000000..55dfadddfe3cf743602533de30275bc93d4f15a5
>>>> --- /dev/null
>>>> +++ b/drivers/clk/mediatek/clk-mt8188.c
>>>> @@ -0,0 +1,1840 @@
>>>> +// SPDX-License-Identifier: GPL-2.0
>>>> +/*
>>>> + * MediaTek clock driver for MT8188 SoC
>>>> + *
>>>> + * Copyright (C) 2025 BayLibre, SAS
>>>> + * Copyright (c) 2025 MediaTek Inc.
>>>> + * Authors: Julien Masson <jmasson at baylibre.com>
>>>> + *          Garmin Chang <garmin.chang at mediatek.com>
>>>> + */
>>>> +
>>>> +#include <clk-uclass.h>
>>>> +#include <dm/device_compat.h>
>>>> +#include <dm.h>
>>>> +#include <asm/io.h>
>>>> +#include <dt-bindings/clock/mediatek,mt8188-clk.h>
>>>> +
>>>> +#include "clk-mtk.h"
>>>> +
>>>> +#define MT8188_PLL_FMAX		(3800UL * MHZ)
>>>> +#define MT8188_PLL_FMIN		(1500UL * MHZ)
>>>> +
>>>> +/* Missing topckgen clocks definition in dt-bindings */
>>>> +#define CLK_TOP_ADSPPLL		206
>>>> +#define CLK_TOP_CLK13M		207
>>>> +#define CLK_TOP_CLK26M		208
>>>> +#define CLK_TOP_CLK32K		209
>>>> +#define CLK_TOP_IMGPLL		210
>>>> +#define CLK_TOP_MSDCPLL		211
>>>> +#define CLK_TOP_ULPOSC1_CK1	212
>>>> +#define CLK_TOP_ULPOSC_CK1	213
>>>
>>> Why are these clock definitions missing from the dt-bindings?
>>> Were they just forgotten, or is there another reason?
>
> It took me all day, but I learned some more. So some of what I wrote
> below is wrong.

Thank you for investigating. This is very helpful.

I'd say that we should update the above comment to include something
like you wrote below:

/*
 * Missing topckgen clocks definition in dt-bindings
 * Note: we can't add these to the upstream bindings without
 * breaking the ABI so add them here instead.
 */

>
>> 
>> I was looking at mt8365 clocks yesterday and noticed a similar pattern.
>> So I am interested in getting feedback on this too. And I can give at
>> least a partial answer.
>> 
>> Root clocks
>> -----------
>> 
>> The three CLK_TOP_CLKXXX clocks are in the devicetree as "fixed-clock"
>> with labels "clkXXx".
>> 
>> These should go in a separate group named "PAD" since they aren't
>> part of the TOPCKGEN group. And it would make sense to make the
>> macros CLK_PAD_CLKXXX.
>> 
>> Unless we should be reading these from devicetree somehow instead?
>
> I see now that this driver is using mt8188_id_offs_map to correct
> these issues, so the suggestion to rename to "PAD" is wrong. Don't
> do that.
>
> (Conceptually it made sense, but it doesn't match how the drivers
> are implemented for other mediatek clocks already.)

Ack.

>
>> 
>> PLL clocks
>> ----------
>> 
>> This is just a guess, but I suspect in Linux, since CLK_TOP_ADSPPL is
>> just a 1:1 divider clock of CLK_APMIXED_ADSPPLL, they took the shortcut
>> of leaving out CLK_TOP_ADSPPL from the clock tree and set the parent
>> of CLK_TOP_ADSPPLL_Dx to CLK_APMIXED_ADSPPLL instead of CLK_TOP_ADSPPLL.
>> 
>> The actual full picture should be like this:
>> 
>> 	77, /* CLK_TOP_ADSPPLL */
>> 
>> 	...
>> 
>> 	FACTOR0(CLK_TOP_ADSPPL, CLK_APMIXED_ADSPPLL, 1, 1),
>> 	FACTOR0(CLK_TOP_ADSPPLL_D2, CLK_TOP_ADSPPL, 1, 2),
>> 	FACTOR0(CLK_TOP_ADSPPLL_D4, CLK_TOP_ADSPPL, 1, 4),
>> 	FACTOR0(CLK_TOP_ADSPPLL_D8, CLK_TOP_ADSPPL, 1, 8),
>> 
>> Instead of:
>> 	
>> 	-1, /* CLK_TOP_ADSPPLL */
>> 
>> 	...
>> 
>> 	FACTOR0(CLK_TOP_ADSPPLL_D2, CLK_APMIXED_ADSPPLL, 1, 2),
>> 	FACTOR0(CLK_TOP_ADSPPLL_D4, CLK_APMIXED_ADSPPLL, 1, 4),
>> 	FACTOR0(CLK_TOP_ADSPPLL_D8, CLK_APMIXED_ADSPPLL, 1, 8),
>> 
>> So we could either follow Linux and use CLK_APMIXED_ADSPPLL everywhere
>> instead of adding CLK_TOP_ADSPPL. Or we could be more correct and add
>> the missing clocks.
>> 
>> The other PLL clocks seem to follow a similar pattern. So whatever we
>> do for ADSPPLL would apply to the others.
>> 
>> CK1 clocks
>> ----------
>> 
>> I can't see why these would be different from the same name without the
>> _CK1 suffix. There is already CLK_TOP_ULPOSC and CLK_TOP_ULPOSC1 and they
>> seem like they should be the same clocks.
>> 
>> Perhaps we could not add these?
>> 
>>>
>>> Could we (long term) add these definitions to the dt-bindings by
>>> contributing them to the kernel?
>> 
>
> Since these values are devicetree ABI, we unfortunately can't really
> fix them upstream. The problem is that the order matters, so we can't
> insert the missing values in the correct position and change all of
> the other numbers. We only get away with adding additional numbers
> here because we have mt8188_id_offs_map to workaround the problem.
>
> Most of these "missing" ones are only parent clocks of other clocks
> so wouldn't be used in the devicetree anyway. (Maybe they were skipped
> intentionally for that reason).

That is a little unfortunate but I understand.

Adding a more detailed comment next to the additional clock definitions
would be enough then. (In my opinion)


>
>
>> I guess it depends on if taking these PLL shortcuts was intentional or
>> not if upstream would want to add them or not. But clearly the PAD clocks
>> are fine they way they are upstream.
>> 
>>>
>>> Note: I'm not requesting to change this patch, I'm just curious as of
>>> why we need to add these definitions here.
>>>
>>> Note that I also don't see these CLKs in the linux driver so why are
>>> they needed for U-Boot ?
>> 
>> I have a feeling someone will be asking me the same question soon. :-)
>> 
>>> (I searched for CLK_TOP_CLK13M in Linux master commit e7c375b18160 ("Merge tag 'vfs-6.18-rc7.fixes' of gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs"))
>>>


More information about the U-Boot mailing list