blob: 6e6541eaa314588dfeb84d6a518892c677df705c [file] [log] [blame]
Peng Fanaca2f882025-04-28 18:37:34 +08001// SPDX-License-Identifier: GPL-2.0+
2/*
3 * Copyright 2025 NXP
4 */
5
6#include <asm/arch/clock.h>
7#include <dm/uclass.h>
8#include <scmi_agent.h>
9#include "../../../../../dts/upstream/src/arm64/freescale/imx95-clock.h"
10
11u32 get_arm_core_clk(void)
12{
13 u32 val;
14
15 val = imx_clk_scmi_get_rate(IMX95_CLK_SEL_A55C0);
16 if (val)
17 return val;
18 return imx_clk_scmi_get_rate(IMX95_CLK_A55);
19}
20
21void init_uart_clk(u32 index)
22{
23 u32 clock_id;
24
25 switch (index) {
26 case 0:
27 clock_id = IMX95_CLK_LPUART1;
28 break;
29 case 1:
30 clock_id = IMX95_CLK_LPUART2;
31 break;
32 case 2:
33 clock_id = IMX95_CLK_LPUART3;
34 break;
35 default:
36 return;
37 }
38
39 /* 24MHz */
40 imx_clk_scmi_enable(clock_id, false);
41 imx_clk_scmi_set_parent(clock_id, IMX95_CLK_24M);
42 imx_clk_scmi_set_rate(clock_id, 24000000);
43 imx_clk_scmi_enable(clock_id, true);
44}
45
46unsigned int mxc_get_clock(enum mxc_clock clk)
47{
48 switch (clk) {
49 case MXC_ARM_CLK:
50 return get_arm_core_clk();
51 case MXC_IPG_CLK:
52 return imx_clk_scmi_get_rate(IMX95_CLK_BUSWAKEUP);
53 case MXC_CSPI_CLK:
54 return imx_clk_scmi_get_rate(IMX95_CLK_LPSPI1);
55 case MXC_ESDHC_CLK:
56 return imx_clk_scmi_get_rate(IMX95_CLK_USDHC1);
57 case MXC_ESDHC2_CLK:
58 return imx_clk_scmi_get_rate(IMX95_CLK_USDHC2);
59 case MXC_ESDHC3_CLK:
60 return imx_clk_scmi_get_rate(IMX95_CLK_USDHC3);
61 case MXC_UART_CLK:
62 return imx_clk_scmi_get_rate(IMX95_CLK_LPUART1);
63 case MXC_FLEXSPI_CLK:
64 return imx_clk_scmi_get_rate(IMX95_CLK_FLEXSPI1);
65 default:
66 return -1;
67 };
68
69 return -1;
70};