Aw: [PATCH 5/5] clk: mediatek: mt7623: remap peri clock ID and add MUX

Frank Wunderlich frank-w at public-files.de
Sat Aug 10 14:28:56 CEST 2024


Hi,

does not break downstream dts (still have some issues with ethernet without the series, which i cannot nail down) so only tested: usb,mmc,pci,sata

also works with upstream dts and a bunch of modifications (i still need to clean)

Tested-by: Frank Wunderlich <frank-w at public-files.de>

regards Frank


> Gesendet: Freitag, 02. August 2024 um 15:45 Uhr
> Von: "Christian Marangi" <ansuelsmth at gmail.com>
> An: "Lukasz Majewski" <lukma at denx.de>, "Sean Anderson" <seanga2 at gmail.com>, "Ryder Lee" <ryder.lee at mediatek.com>, "Weijie Gao" <weijie.gao at mediatek.com>, "Chunfeng Yun" <chunfeng.yun at mediatek.com>, "GSS_MTK_Uboot_upstream" <GSS_MTK_Uboot_upstream at mediatek.com>, "Tom Rini" <trini at konsulko.com>, "Christian Marangi" <ansuelsmth at gmail.com>, u-boot at lists.denx.de
> Betreff: [PATCH 5/5] clk: mediatek: mt7623: remap peri clock ID and add MUX
>
> Upstream kernel linux makes use of peri clock MUX to setup UART.
>
> Add definition for these and add remap table as in the upstream clock ID
> order gates are before MUX but we require MUX first and then clocks in
> our downstream driver.
>
> Convert the peri clk tree to MUX + GATE implementation.
>
> Signed-off-by: Christian Marangi <ansuelsmth at gmail.com>
> ---
>  drivers/clk/mediatek/clk-mt7623.c | 83 +++++++++++++++++++++++++++++--
>  1 file changed, 80 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/clk/mediatek/clk-mt7623.c b/drivers/clk/mediatek/clk-mt7623.c
> index 78e390d49f8..d0b80f48b0a 100644
> --- a/drivers/clk/mediatek/clk-mt7623.c
> +++ b/drivers/clk/mediatek/clk-mt7623.c
> @@ -807,6 +807,74 @@ static const struct mtk_gate infra_cgs[] = {
>  };
>
>  /* pericfg */
> +static const int peri_id_offs_map[] = {
> +	/* MUX CLK */
> +	[CLK_PERI_UART0_SEL]			= 1,
> +	[CLK_PERI_UART1_SEL]			= 2,
> +	[CLK_PERI_UART2_SEL]			= 3,
> +	[CLK_PERI_UART3_SEL]			= 4,
> +	/* GATE CLK */
> +	[CLK_PERI_NFI]				= 5,
> +	[CLK_PERI_THERM]			= 6,
> +	[CLK_PERI_PWM1]				= 7,
> +	[CLK_PERI_PWM2]				= 8,
> +	[CLK_PERI_PWM3]				= 9,
> +	[CLK_PERI_PWM4]				= 10,
> +	[CLK_PERI_PWM5]				= 11,
> +	[CLK_PERI_PWM6]				= 12,
> +	[CLK_PERI_PWM7]				= 13,
> +	[CLK_PERI_PWM]				= 14,
> +	[CLK_PERI_USB0]				= 15,
> +	[CLK_PERI_USB1]				= 16,
> +	[CLK_PERI_AP_DMA]			= 17,
> +	[CLK_PERI_MSDC30_0]			= 18,
> +	[CLK_PERI_MSDC30_1]			= 19,
> +	[CLK_PERI_MSDC30_2]			= 20,
> +	[CLK_PERI_MSDC30_3]			= 21,
> +	[CLK_PERI_MSDC50_3]			= 22,
> +	[CLK_PERI_NLI]				= 23,
> +	[CLK_PERI_UART0]			= 24,
> +	[CLK_PERI_UART1]			= 25,
> +	[CLK_PERI_UART2]			= 26,
> +	[CLK_PERI_UART3]			= 27,
> +	[CLK_PERI_BTIF]				= 28,
> +	[CLK_PERI_I2C0]				= 29,
> +	[CLK_PERI_I2C1]				= 30,
> +	[CLK_PERI_I2C2]				= 31,
> +	[CLK_PERI_I2C3]				= 32,
> +	[CLK_PERI_AUXADC]			= 33,
> +	[CLK_PERI_SPI0]				= 34,
> +	[CLK_PERI_ETH]				= 35,
> +	[CLK_PERI_USB0_MCU]			= 36,
> +	[CLK_PERI_USB1_MCU]			= 37,
> +	[CLK_PERI_USB_SLV]			= 38,
> +	[CLK_PERI_GCPU]				= 39,
> +	[CLK_PERI_NFI_ECC]			= 40,
> +	[CLK_PERI_NFI_PAD]			= 41,
> +	[CLK_PERI_FLASH]			= 42,
> +	[CLK_PERI_HOST89_INT]			= 43,
> +	[CLK_PERI_HOST89_SPI]			= 44,
> +	[CLK_PERI_HOST89_DVD]			= 45,
> +	[CLK_PERI_SPI1]				= 46,
> +	[CLK_PERI_SPI2]				= 47,
> +	[CLK_PERI_FCI]				= 48,
> +};
> +
> +#define TOP_PARENT(_id) PARENT(_id, CLK_PARENT_TOPCKGEN)
> +#define XTAL_PARENT(_id) PARENT(_id, CLK_PARENT_XTAL)
> +
> +static const struct mtk_parent uart_ck_sel_parents[] = {
> +	XTAL_PARENT(CLK_XTAL),
> +	TOP_PARENT(CLK_TOP_UART_SEL),
> +};
> +
> +static const struct mtk_composite peri_muxes[] = {
> +	MUX_MIXED(CLK_PERI_UART0_SEL, uart_ck_sel_parents, 0x40C, 0, 1),
> +	MUX_MIXED(CLK_PERI_UART1_SEL, uart_ck_sel_parents, 0x40C, 1, 1),
> +	MUX_MIXED(CLK_PERI_UART2_SEL, uart_ck_sel_parents, 0x40C, 2, 1),
> +	MUX_MIXED(CLK_PERI_UART3_SEL, uart_ck_sel_parents, 0x40C, 3, 1),
> +};
> +
>  static const struct mtk_gate_regs peri0_cg_regs = {
>  	.set_ofs = 0x8,
>  	.clr_ofs = 0x10,
> @@ -980,6 +1048,7 @@ static int mt7623_topckgen_probe(struct udevice *dev)
>  static const struct mtk_clk_tree mt7623_clk_gate_tree = {
>  	/* Each CLK ID for gates clock starts at index 1 */
>  	.gates_offs = 1,
> +	.xtal_rate = 26 * MHZ,
>  };
>
>  static int mt7623_infracfg_probe(struct udevice *dev)
> @@ -988,10 +1057,18 @@ static int mt7623_infracfg_probe(struct udevice *dev)
>  					infra_cgs);
>  }
>
> +static const struct mtk_clk_tree mt7623_clk_peri_tree = {
> +	.id_offs_map = peri_id_offs_map,
> +	.muxes_offs = peri_id_offs_map[CLK_PERI_UART0_SEL],
> +	.gates_offs = peri_id_offs_map[CLK_PERI_NFI],
> +	.muxes = peri_muxes,
> +	.gates = peri_cgs,
> +	.xtal_rate = 26 * MHZ,
> +};
> +
>  static int mt7623_pericfg_probe(struct udevice *dev)
>  {
> -	return mtk_common_clk_gate_init(dev, &mt7623_clk_gate_tree,
> -					peri_cgs);
> +	return mtk_common_clk_infrasys_init(dev, &mt7623_clk_peri_tree);
>  }
>
>  static int mt7623_hifsys_probe(struct udevice *dev)
> @@ -1098,7 +1175,7 @@ U_BOOT_DRIVER(mtk_clk_pericfg) = {
>  	.of_match = mt7623_pericfg_compat,
>  	.probe = mt7623_pericfg_probe,
>  	.priv_auto	= sizeof(struct mtk_cg_priv),
> -	.ops = &mtk_clk_gate_ops,
> +	.ops = &mtk_clk_infrasys_ops,
>  	.flags = DM_FLAG_PRE_RELOC,
>  };
>
> --
> 2.45.2
>
>


More information about the U-Boot mailing list