15
15
16
16
#include "clk.h"
17
17
18
+ #define IMX93_CLK_END 207
19
+
20
+ #define PLAT_IMX93 BIT(0)
21
+ #define PLAT_IMX91 BIT(1)
22
+
18
23
enum clk_sel {
19
24
LOW_SPEED_IO_SEL ,
20
25
NON_IO_SEL ,
@@ -53,6 +58,7 @@ static const struct imx93_clk_root {
53
58
u32 off ;
54
59
enum clk_sel sel ;
55
60
unsigned long flags ;
61
+ unsigned long plat ;
56
62
} root_array [] = {
57
63
/* a55/m33/bus critical clk for system run */
58
64
{ IMX93_CLK_A55_PERIPH , "a55_periph_root" , 0x0000 , FAST_SEL , CLK_IS_CRITICAL },
@@ -63,7 +69,7 @@ static const struct imx93_clk_root {
63
69
{ IMX93_CLK_BUS_AON , "bus_aon_root" , 0x0300 , LOW_SPEED_IO_SEL , CLK_IS_CRITICAL },
64
70
{ IMX93_CLK_WAKEUP_AXI , "wakeup_axi_root" , 0x0380 , FAST_SEL , CLK_IS_CRITICAL },
65
71
{ IMX93_CLK_SWO_TRACE , "swo_trace_root" , 0x0400 , LOW_SPEED_IO_SEL , },
66
- { IMX93_CLK_M33_SYSTICK , "m33_systick_root" , 0x0480 , LOW_SPEED_IO_SEL , },
72
+ { IMX93_CLK_M33_SYSTICK , "m33_systick_root" , 0x0480 , LOW_SPEED_IO_SEL , 0 , PLAT_IMX93 , },
67
73
{ IMX93_CLK_FLEXIO1 , "flexio1_root" , 0x0500 , LOW_SPEED_IO_SEL , },
68
74
{ IMX93_CLK_FLEXIO2 , "flexio2_root" , 0x0580 , LOW_SPEED_IO_SEL , },
69
75
{ IMX93_CLK_LPTMR1 , "lptmr1_root" , 0x0700 , LOW_SPEED_IO_SEL , },
@@ -120,15 +126,15 @@ static const struct imx93_clk_root {
120
126
{ IMX93_CLK_HSIO_ACSCAN_80M , "hsio_acscan_80m_root" , 0x1f80 , LOW_SPEED_IO_SEL , },
121
127
{ IMX93_CLK_HSIO_ACSCAN_480M , "hsio_acscan_480m_root" , 0x2000 , MISC_SEL , },
122
128
{ IMX93_CLK_NIC_AXI , "nic_axi_root" , 0x2080 , FAST_SEL , CLK_IS_CRITICAL , },
123
- { IMX93_CLK_ML_APB , "ml_apb_root" , 0x2180 , LOW_SPEED_IO_SEL , },
124
- { IMX93_CLK_ML , "ml_root" , 0x2200 , FAST_SEL , },
129
+ { IMX93_CLK_ML_APB , "ml_apb_root" , 0x2180 , LOW_SPEED_IO_SEL , 0 , PLAT_IMX93 , },
130
+ { IMX93_CLK_ML , "ml_root" , 0x2200 , FAST_SEL , 0 , PLAT_IMX93 , },
125
131
{ IMX93_CLK_MEDIA_AXI , "media_axi_root" , 0x2280 , FAST_SEL , },
126
132
{ IMX93_CLK_MEDIA_APB , "media_apb_root" , 0x2300 , LOW_SPEED_IO_SEL , },
127
- { IMX93_CLK_MEDIA_LDB , "media_ldb_root" , 0x2380 , VIDEO_SEL , },
133
+ { IMX93_CLK_MEDIA_LDB , "media_ldb_root" , 0x2380 , VIDEO_SEL , 0 , PLAT_IMX93 , },
128
134
{ IMX93_CLK_MEDIA_DISP_PIX , "media_disp_pix_root" , 0x2400 , VIDEO_SEL , },
129
135
{ IMX93_CLK_CAM_PIX , "cam_pix_root" , 0x2480 , VIDEO_SEL , },
130
- { IMX93_CLK_MIPI_TEST_BYTE , "mipi_test_byte_root" , 0x2500 , VIDEO_SEL , },
131
- { IMX93_CLK_MIPI_PHY_CFG , "mipi_phy_cfg_root" , 0x2580 , VIDEO_SEL , },
136
+ { IMX93_CLK_MIPI_TEST_BYTE , "mipi_test_byte_root" , 0x2500 , VIDEO_SEL , 0 , PLAT_IMX93 , },
137
+ { IMX93_CLK_MIPI_PHY_CFG , "mipi_phy_cfg_root" , 0x2580 , VIDEO_SEL , 0 , PLAT_IMX93 , },
132
138
{ IMX93_CLK_ADC , "adc_root" , 0x2700 , LOW_SPEED_IO_SEL , },
133
139
{ IMX93_CLK_PDM , "pdm_root" , 0x2780 , AUDIO_SEL , },
134
140
{ IMX93_CLK_TSTMR1 , "tstmr1_root" , 0x2800 , LOW_SPEED_IO_SEL , },
@@ -137,13 +143,16 @@ static const struct imx93_clk_root {
137
143
{ IMX93_CLK_MQS2 , "mqs2_root" , 0x2980 , AUDIO_SEL , },
138
144
{ IMX93_CLK_AUDIO_XCVR , "audio_xcvr_root" , 0x2a00 , NON_IO_SEL , },
139
145
{ IMX93_CLK_SPDIF , "spdif_root" , 0x2a80 , AUDIO_SEL , },
140
- { IMX93_CLK_ENET , "enet_root" , 0x2b00 , NON_IO_SEL , },
141
- { IMX93_CLK_ENET_TIMER1 , "enet_timer1_root" , 0x2b80 , LOW_SPEED_IO_SEL , },
142
- { IMX93_CLK_ENET_TIMER2 , "enet_timer2_root" , 0x2c00 , LOW_SPEED_IO_SEL , },
143
- { IMX93_CLK_ENET_REF , "enet_ref_root" , 0x2c80 , NON_IO_SEL , },
144
- { IMX93_CLK_ENET_REF_PHY , "enet_ref_phy_root" , 0x2d00 , LOW_SPEED_IO_SEL , },
145
- { IMX93_CLK_I3C1_SLOW , "i3c1_slow_root" , 0x2d80 , LOW_SPEED_IO_SEL , },
146
- { IMX93_CLK_I3C2_SLOW , "i3c2_slow_root" , 0x2e00 , LOW_SPEED_IO_SEL , },
146
+ { IMX93_CLK_ENET , "enet_root" , 0x2b00 , NON_IO_SEL , 0 , PLAT_IMX93 , },
147
+ { IMX93_CLK_ENET_TIMER1 , "enet_timer1_root" , 0x2b80 , LOW_SPEED_IO_SEL , 0 , PLAT_IMX93 , },
148
+ { IMX93_CLK_ENET_TIMER2 , "enet_timer2_root" , 0x2c00 , LOW_SPEED_IO_SEL , 0 , PLAT_IMX93 , },
149
+ { IMX93_CLK_ENET_REF , "enet_ref_root" , 0x2c80 , NON_IO_SEL , 0 , PLAT_IMX93 , },
150
+ { IMX93_CLK_ENET_REF_PHY , "enet_ref_phy_root" , 0x2d00 , LOW_SPEED_IO_SEL , 0 , PLAT_IMX93 , },
151
+ { IMX91_CLK_ENET1_QOS_TSN , "enet1_qos_tsn_root" , 0x2b00 , NON_IO_SEL , 0 , PLAT_IMX91 , },
152
+ { IMX91_CLK_ENET_TIMER , "enet_timer_root" , 0x2b80 , LOW_SPEED_IO_SEL , 0 , PLAT_IMX91 , },
153
+ { IMX91_CLK_ENET2_REGULAR , "enet2_regular_root" , 0x2c80 , NON_IO_SEL , 0 , PLAT_IMX91 , },
154
+ { IMX93_CLK_I3C1_SLOW , "i3c1_slow_root" , 0x2d80 , LOW_SPEED_IO_SEL , 0 , PLAT_IMX93 , },
155
+ { IMX93_CLK_I3C2_SLOW , "i3c2_slow_root" , 0x2e00 , LOW_SPEED_IO_SEL , 0 , PLAT_IMX93 , },
147
156
{ IMX93_CLK_USB_PHY_BURUNIN , "usb_phy_root" , 0x2e80 , LOW_SPEED_IO_SEL , },
148
157
{ IMX93_CLK_PAL_CAME_SCAN , "pal_came_scan_root" , 0x2f00 , MISC_SEL , }
149
158
};
@@ -155,6 +164,7 @@ static const struct imx93_clk_ccgr {
155
164
u32 off ;
156
165
unsigned long flags ;
157
166
u32 * shared_count ;
167
+ unsigned long plat ;
158
168
} ccgr_array [] = {
159
169
{ IMX93_CLK_A55_GATE , "a55_alt" , "a55_alt_root" , 0x8000 , },
160
170
/* M33 critical clk for system run */
@@ -244,8 +254,10 @@ static const struct imx93_clk_ccgr {
244
254
{ IMX93_CLK_AUD_XCVR_GATE , "aud_xcvr" , "audio_xcvr_root" , 0x9b80 , },
245
255
{ IMX93_CLK_SPDIF_GATE , "spdif" , "spdif_root" , 0x9c00 , },
246
256
{ IMX93_CLK_HSIO_32K_GATE , "hsio_32k" , "osc_32k" , 0x9dc0 , },
247
- { IMX93_CLK_ENET1_GATE , "enet1" , "wakeup_axi_root" , 0x9e00 , },
248
- { IMX93_CLK_ENET_QOS_GATE , "enet_qos" , "wakeup_axi_root" , 0x9e40 , },
257
+ { IMX93_CLK_ENET1_GATE , "enet1" , "wakeup_axi_root" , 0x9e00 , 0 , NULL , PLAT_IMX93 , },
258
+ { IMX93_CLK_ENET_QOS_GATE , "enet_qos" , "wakeup_axi_root" , 0x9e40 , 0 , NULL , PLAT_IMX93 , },
259
+ { IMX91_CLK_ENET2_REGULAR_GATE , "enet2_regular" , "wakeup_axi_root" , 0x9e00 , 0 , NULL , PLAT_IMX91 , },
260
+ { IMX91_CLK_ENET1_QOS_TSN_GATE , "enet1_qos_tsn" , "wakeup_axi_root" , 0x9e40 , 0 , NULL , PLAT_IMX91 , },
249
261
/* Critical because clk accessed during CPU idle */
250
262
{ IMX93_CLK_SYS_CNT_GATE , "sys_cnt" , "osc_24m" , 0x9e80 , CLK_IS_CRITICAL },
251
263
{ IMX93_CLK_TSTMR1_GATE , "tstmr1" , "bus_aon_root" , 0x9ec0 , },
@@ -265,6 +277,7 @@ static int imx93_clocks_probe(struct platform_device *pdev)
265
277
const struct imx93_clk_ccgr * ccgr ;
266
278
void __iomem * base , * anatop_base ;
267
279
int i , ret ;
280
+ const unsigned long plat = (unsigned long )device_get_match_data (& pdev -> dev );
268
281
269
282
clk_hw_data = devm_kzalloc (dev , struct_size (clk_hw_data , hws ,
270
283
IMX93_CLK_END ), GFP_KERNEL );
@@ -314,17 +327,20 @@ static int imx93_clocks_probe(struct platform_device *pdev)
314
327
315
328
for (i = 0 ; i < ARRAY_SIZE (root_array ); i ++ ) {
316
329
root = & root_array [i ];
317
- clks [root -> clk ] = imx93_clk_composite_flags (root -> name ,
318
- parent_names [root -> sel ],
319
- 4 , base + root -> off , 3 ,
320
- root -> flags );
330
+ if (!root -> plat || root -> plat & plat )
331
+ clks [root -> clk ] = imx93_clk_composite_flags (root -> name ,
332
+ parent_names [root -> sel ],
333
+ 4 , base + root -> off , 3 ,
334
+ root -> flags );
321
335
}
322
336
323
337
for (i = 0 ; i < ARRAY_SIZE (ccgr_array ); i ++ ) {
324
338
ccgr = & ccgr_array [i ];
325
- clks [ccgr -> clk ] = imx93_clk_gate (NULL , ccgr -> name , ccgr -> parent_name ,
326
- ccgr -> flags , base + ccgr -> off , 0 , 1 , 1 , 3 ,
327
- ccgr -> shared_count );
339
+ if (!ccgr -> plat || ccgr -> plat & plat )
340
+ clks [ccgr -> clk ] = imx93_clk_gate (NULL ,
341
+ ccgr -> name , ccgr -> parent_name ,
342
+ ccgr -> flags , base + ccgr -> off , 0 , 1 , 1 , 3 ,
343
+ ccgr -> shared_count );
328
344
}
329
345
330
346
clks [IMX93_CLK_A55_SEL ] = imx_clk_hw_mux2 ("a55_sel" , base + 0x4820 , 0 , 1 , a55_core_sels ,
@@ -354,7 +370,8 @@ static int imx93_clocks_probe(struct platform_device *pdev)
354
370
}
355
371
356
372
static const struct of_device_id imx93_clk_of_match [] = {
357
- { .compatible = "fsl,imx93-ccm" },
373
+ { .compatible = "fsl,imx93-ccm" , .data = (void * )PLAT_IMX93 },
374
+ { .compatible = "fsl,imx91-ccm" , .data = (void * )PLAT_IMX91 },
358
375
{ /* Sentinel */ },
359
376
};
360
377
MODULE_DEVICE_TABLE (of , imx93_clk_of_match );
0 commit comments