@@ -22,9 +22,10 @@ static int imx8qxp_clk_probe(struct platform_device *pdev)
2222 struct device_node * ccm_node = pdev -> dev .of_node ;
2323 struct clk_hw_onecell_data * clk_data ;
2424 struct clk_hw * * clks ;
25+ u32 clk_cells ;
2526 int ret , i ;
2627
27- ret = imx_clk_scu_init ();
28+ ret = imx_clk_scu_init (ccm_node );
2829 if (ret )
2930 return ret ;
3031
@@ -33,6 +34,9 @@ static int imx8qxp_clk_probe(struct platform_device *pdev)
3334 if (!clk_data )
3435 return - ENOMEM ;
3536
37+ if (of_property_read_u32 (ccm_node , "#clock-cells" , & clk_cells ))
38+ return - EINVAL ;
39+
3640 clk_data -> num = IMX_SCU_CLK_END ;
3741 clks = clk_data -> hws ;
3842
@@ -55,86 +59,98 @@ static int imx8qxp_clk_probe(struct platform_device *pdev)
5559 clks [IMX_LSIO_BUS_CLK ] = clk_hw_register_fixed_rate (NULL , "lsio_bus_clk_root" , NULL , 0 , 100000000 );
5660
5761 /* ARM core */
58- clks [IMX_A35_CLK ] = imx_clk_scu ("a35_clk" , IMX_SC_R_A35 , IMX_SC_PM_CLK_CPU );
62+ clks [IMX_A35_CLK ] = imx_clk_scu ("a35_clk" , IMX_SC_R_A35 , IMX_SC_PM_CLK_CPU , clk_cells );
5963
6064 /* LSIO SS */
61- clks [IMX_LSIO_PWM0_CLK ] = imx_clk_scu ("pwm0_clk" , IMX_SC_R_PWM_0 , IMX_SC_PM_CLK_PER );
62- clks [IMX_LSIO_PWM1_CLK ] = imx_clk_scu ("pwm1_clk" , IMX_SC_R_PWM_1 , IMX_SC_PM_CLK_PER );
63- clks [IMX_LSIO_PWM2_CLK ] = imx_clk_scu ("pwm2_clk" , IMX_SC_R_PWM_2 , IMX_SC_PM_CLK_PER );
64- clks [IMX_LSIO_PWM3_CLK ] = imx_clk_scu ("pwm3_clk" , IMX_SC_R_PWM_3 , IMX_SC_PM_CLK_PER );
65- clks [IMX_LSIO_PWM4_CLK ] = imx_clk_scu ("pwm4_clk" , IMX_SC_R_PWM_4 , IMX_SC_PM_CLK_PER );
66- clks [IMX_LSIO_PWM5_CLK ] = imx_clk_scu ("pwm5_clk" , IMX_SC_R_PWM_5 , IMX_SC_PM_CLK_PER );
67- clks [IMX_LSIO_PWM6_CLK ] = imx_clk_scu ("pwm6_clk" , IMX_SC_R_PWM_6 , IMX_SC_PM_CLK_PER );
68- clks [IMX_LSIO_PWM7_CLK ] = imx_clk_scu ("pwm7_clk" , IMX_SC_R_PWM_7 , IMX_SC_PM_CLK_PER );
69- clks [IMX_LSIO_GPT0_CLK ] = imx_clk_scu ("gpt0_clk" , IMX_SC_R_GPT_0 , IMX_SC_PM_CLK_PER );
70- clks [IMX_LSIO_GPT1_CLK ] = imx_clk_scu ("gpt1_clk" , IMX_SC_R_GPT_1 , IMX_SC_PM_CLK_PER );
71- clks [IMX_LSIO_GPT2_CLK ] = imx_clk_scu ("gpt2_clk" , IMX_SC_R_GPT_2 , IMX_SC_PM_CLK_PER );
72- clks [IMX_LSIO_GPT3_CLK ] = imx_clk_scu ("gpt3_clk" , IMX_SC_R_GPT_3 , IMX_SC_PM_CLK_PER );
73- clks [IMX_LSIO_GPT4_CLK ] = imx_clk_scu ("gpt4_clk" , IMX_SC_R_GPT_4 , IMX_SC_PM_CLK_PER );
74- clks [IMX_LSIO_FSPI0_CLK ] = imx_clk_scu ("fspi0_clk" , IMX_SC_R_FSPI_0 , IMX_SC_PM_CLK_PER );
75- clks [IMX_LSIO_FSPI1_CLK ] = imx_clk_scu ("fspi1_clk" , IMX_SC_R_FSPI_1 , IMX_SC_PM_CLK_PER );
65+ clks [IMX_LSIO_PWM0_CLK ] = imx_clk_scu ("pwm0_clk" , IMX_SC_R_PWM_0 , IMX_SC_PM_CLK_PER , clk_cells );
66+ clks [IMX_LSIO_PWM1_CLK ] = imx_clk_scu ("pwm1_clk" , IMX_SC_R_PWM_1 , IMX_SC_PM_CLK_PER , clk_cells );
67+ clks [IMX_LSIO_PWM2_CLK ] = imx_clk_scu ("pwm2_clk" , IMX_SC_R_PWM_2 , IMX_SC_PM_CLK_PER , clk_cells );
68+ clks [IMX_LSIO_PWM3_CLK ] = imx_clk_scu ("pwm3_clk" , IMX_SC_R_PWM_3 , IMX_SC_PM_CLK_PER , clk_cells );
69+ clks [IMX_LSIO_PWM4_CLK ] = imx_clk_scu ("pwm4_clk" , IMX_SC_R_PWM_4 , IMX_SC_PM_CLK_PER , clk_cells );
70+ clks [IMX_LSIO_PWM5_CLK ] = imx_clk_scu ("pwm5_clk" , IMX_SC_R_PWM_5 , IMX_SC_PM_CLK_PER , clk_cells );
71+ clks [IMX_LSIO_PWM6_CLK ] = imx_clk_scu ("pwm6_clk" , IMX_SC_R_PWM_6 , IMX_SC_PM_CLK_PER , clk_cells );
72+ clks [IMX_LSIO_PWM7_CLK ] = imx_clk_scu ("pwm7_clk" , IMX_SC_R_PWM_7 , IMX_SC_PM_CLK_PER , clk_cells );
73+ clks [IMX_LSIO_GPT0_CLK ] = imx_clk_scu ("gpt0_clk" , IMX_SC_R_GPT_0 , IMX_SC_PM_CLK_PER , clk_cells );
74+ clks [IMX_LSIO_GPT1_CLK ] = imx_clk_scu ("gpt1_clk" , IMX_SC_R_GPT_1 , IMX_SC_PM_CLK_PER , clk_cells );
75+ clks [IMX_LSIO_GPT2_CLK ] = imx_clk_scu ("gpt2_clk" , IMX_SC_R_GPT_2 , IMX_SC_PM_CLK_PER , clk_cells );
76+ clks [IMX_LSIO_GPT3_CLK ] = imx_clk_scu ("gpt3_clk" , IMX_SC_R_GPT_3 , IMX_SC_PM_CLK_PER , clk_cells );
77+ clks [IMX_LSIO_GPT4_CLK ] = imx_clk_scu ("gpt4_clk" , IMX_SC_R_GPT_4 , IMX_SC_PM_CLK_PER , clk_cells );
78+ clks [IMX_LSIO_FSPI0_CLK ] = imx_clk_scu ("fspi0_clk" , IMX_SC_R_FSPI_0 , IMX_SC_PM_CLK_PER , clk_cells );
79+ clks [IMX_LSIO_FSPI1_CLK ] = imx_clk_scu ("fspi1_clk" , IMX_SC_R_FSPI_1 , IMX_SC_PM_CLK_PER , clk_cells );
7680
7781 /* ADMA SS */
78- clks [IMX_ADMA_UART0_CLK ] = imx_clk_scu ("uart0_clk" , IMX_SC_R_UART_0 , IMX_SC_PM_CLK_PER );
79- clks [IMX_ADMA_UART1_CLK ] = imx_clk_scu ("uart1_clk" , IMX_SC_R_UART_1 , IMX_SC_PM_CLK_PER );
80- clks [IMX_ADMA_UART2_CLK ] = imx_clk_scu ("uart2_clk" , IMX_SC_R_UART_2 , IMX_SC_PM_CLK_PER );
81- clks [IMX_ADMA_UART3_CLK ] = imx_clk_scu ("uart3_clk" , IMX_SC_R_UART_3 , IMX_SC_PM_CLK_PER );
82- clks [IMX_ADMA_SPI0_CLK ] = imx_clk_scu ("spi0_clk" , IMX_SC_R_SPI_0 , IMX_SC_PM_CLK_PER );
83- clks [IMX_ADMA_SPI1_CLK ] = imx_clk_scu ("spi1_clk" , IMX_SC_R_SPI_1 , IMX_SC_PM_CLK_PER );
84- clks [IMX_ADMA_SPI2_CLK ] = imx_clk_scu ("spi2_clk" , IMX_SC_R_SPI_2 , IMX_SC_PM_CLK_PER );
85- clks [IMX_ADMA_SPI3_CLK ] = imx_clk_scu ("spi3_clk" , IMX_SC_R_SPI_3 , IMX_SC_PM_CLK_PER );
86- clks [IMX_ADMA_CAN0_CLK ] = imx_clk_scu ("can0_clk" , IMX_SC_R_CAN_0 , IMX_SC_PM_CLK_PER );
87- clks [IMX_ADMA_I2C0_CLK ] = imx_clk_scu ("i2c0_clk" , IMX_SC_R_I2C_0 , IMX_SC_PM_CLK_PER );
88- clks [IMX_ADMA_I2C1_CLK ] = imx_clk_scu ("i2c1_clk" , IMX_SC_R_I2C_1 , IMX_SC_PM_CLK_PER );
89- clks [IMX_ADMA_I2C2_CLK ] = imx_clk_scu ("i2c2_clk" , IMX_SC_R_I2C_2 , IMX_SC_PM_CLK_PER );
90- clks [IMX_ADMA_I2C3_CLK ] = imx_clk_scu ("i2c3_clk" , IMX_SC_R_I2C_3 , IMX_SC_PM_CLK_PER );
91- clks [IMX_ADMA_FTM0_CLK ] = imx_clk_scu ("ftm0_clk" , IMX_SC_R_FTM_0 , IMX_SC_PM_CLK_PER );
92- clks [IMX_ADMA_FTM1_CLK ] = imx_clk_scu ("ftm1_clk" , IMX_SC_R_FTM_1 , IMX_SC_PM_CLK_PER );
93- clks [IMX_ADMA_ADC0_CLK ] = imx_clk_scu ("adc0_clk" , IMX_SC_R_ADC_0 , IMX_SC_PM_CLK_PER );
94- clks [IMX_ADMA_PWM_CLK ] = imx_clk_scu ("pwm_clk" , IMX_SC_R_LCD_0_PWM_0 , IMX_SC_PM_CLK_PER );
95- clks [IMX_ADMA_LCD_CLK ] = imx_clk_scu ("lcd_clk" , IMX_SC_R_LCD_0 , IMX_SC_PM_CLK_PER );
82+ clks [IMX_ADMA_UART0_CLK ] = imx_clk_scu ("uart0_clk" , IMX_SC_R_UART_0 , IMX_SC_PM_CLK_PER , clk_cells );
83+ clks [IMX_ADMA_UART1_CLK ] = imx_clk_scu ("uart1_clk" , IMX_SC_R_UART_1 , IMX_SC_PM_CLK_PER , clk_cells );
84+ clks [IMX_ADMA_UART2_CLK ] = imx_clk_scu ("uart2_clk" , IMX_SC_R_UART_2 , IMX_SC_PM_CLK_PER , clk_cells );
85+ clks [IMX_ADMA_UART3_CLK ] = imx_clk_scu ("uart3_clk" , IMX_SC_R_UART_3 , IMX_SC_PM_CLK_PER , clk_cells );
86+ clks [IMX_ADMA_SPI0_CLK ] = imx_clk_scu ("spi0_clk" , IMX_SC_R_SPI_0 , IMX_SC_PM_CLK_PER , clk_cells );
87+ clks [IMX_ADMA_SPI1_CLK ] = imx_clk_scu ("spi1_clk" , IMX_SC_R_SPI_1 , IMX_SC_PM_CLK_PER , clk_cells );
88+ clks [IMX_ADMA_SPI2_CLK ] = imx_clk_scu ("spi2_clk" , IMX_SC_R_SPI_2 , IMX_SC_PM_CLK_PER , clk_cells );
89+ clks [IMX_ADMA_SPI3_CLK ] = imx_clk_scu ("spi3_clk" , IMX_SC_R_SPI_3 , IMX_SC_PM_CLK_PER , clk_cells );
90+ clks [IMX_ADMA_CAN0_CLK ] = imx_clk_scu ("can0_clk" , IMX_SC_R_CAN_0 , IMX_SC_PM_CLK_PER , clk_cells );
91+ clks [IMX_ADMA_I2C0_CLK ] = imx_clk_scu ("i2c0_clk" , IMX_SC_R_I2C_0 , IMX_SC_PM_CLK_PER , clk_cells );
92+ clks [IMX_ADMA_I2C1_CLK ] = imx_clk_scu ("i2c1_clk" , IMX_SC_R_I2C_1 , IMX_SC_PM_CLK_PER , clk_cells );
93+ clks [IMX_ADMA_I2C2_CLK ] = imx_clk_scu ("i2c2_clk" , IMX_SC_R_I2C_2 , IMX_SC_PM_CLK_PER , clk_cells );
94+ clks [IMX_ADMA_I2C3_CLK ] = imx_clk_scu ("i2c3_clk" , IMX_SC_R_I2C_3 , IMX_SC_PM_CLK_PER , clk_cells );
95+ clks [IMX_ADMA_FTM0_CLK ] = imx_clk_scu ("ftm0_clk" , IMX_SC_R_FTM_0 , IMX_SC_PM_CLK_PER , clk_cells );
96+ clks [IMX_ADMA_FTM1_CLK ] = imx_clk_scu ("ftm1_clk" , IMX_SC_R_FTM_1 , IMX_SC_PM_CLK_PER , clk_cells );
97+ clks [IMX_ADMA_ADC0_CLK ] = imx_clk_scu ("adc0_clk" , IMX_SC_R_ADC_0 , IMX_SC_PM_CLK_PER , clk_cells );
98+ clks [IMX_ADMA_PWM_CLK ] = imx_clk_scu ("pwm_clk" , IMX_SC_R_LCD_0_PWM_0 , IMX_SC_PM_CLK_PER , clk_cells );
99+ clks [IMX_ADMA_LCD_CLK ] = imx_clk_scu ("lcd_clk" , IMX_SC_R_LCD_0 , IMX_SC_PM_CLK_PER , clk_cells );
96100
97101 /* Connectivity */
98- clks [IMX_CONN_SDHC0_CLK ] = imx_clk_scu ("sdhc0_clk" , IMX_SC_R_SDHC_0 , IMX_SC_PM_CLK_PER );
99- clks [IMX_CONN_SDHC1_CLK ] = imx_clk_scu ("sdhc1_clk" , IMX_SC_R_SDHC_1 , IMX_SC_PM_CLK_PER );
100- clks [IMX_CONN_SDHC2_CLK ] = imx_clk_scu ("sdhc2_clk" , IMX_SC_R_SDHC_2 , IMX_SC_PM_CLK_PER );
101- clks [IMX_CONN_ENET0_ROOT_CLK ] = imx_clk_scu ("enet0_clk" , IMX_SC_R_ENET_0 , IMX_SC_PM_CLK_PER );
102- clks [IMX_CONN_ENET0_BYPASS_CLK ] = imx_clk_scu ("enet0_bypass_clk" , IMX_SC_R_ENET_0 , IMX_SC_PM_CLK_BYPASS );
103- clks [IMX_CONN_ENET0_RGMII_CLK ] = imx_clk_scu ("enet0_rgmii_clk" , IMX_SC_R_ENET_0 , IMX_SC_PM_CLK_MISC0 );
104- clks [IMX_CONN_ENET1_ROOT_CLK ] = imx_clk_scu ("enet1_clk" , IMX_SC_R_ENET_1 , IMX_SC_PM_CLK_PER );
105- clks [IMX_CONN_ENET1_BYPASS_CLK ] = imx_clk_scu ("enet1_bypass_clk" , IMX_SC_R_ENET_1 , IMX_SC_PM_CLK_BYPASS );
106- clks [IMX_CONN_ENET1_RGMII_CLK ] = imx_clk_scu ("enet1_rgmii_clk" , IMX_SC_R_ENET_1 , IMX_SC_PM_CLK_MISC0 );
107- clks [IMX_CONN_GPMI_BCH_IO_CLK ] = imx_clk_scu ("gpmi_io_clk" , IMX_SC_R_NAND , IMX_SC_PM_CLK_MST_BUS );
108- clks [IMX_CONN_GPMI_BCH_CLK ] = imx_clk_scu ("gpmi_bch_clk" , IMX_SC_R_NAND , IMX_SC_PM_CLK_PER );
109- clks [IMX_CONN_USB2_ACLK ] = imx_clk_scu ("usb3_aclk_div" , IMX_SC_R_USB_2 , IMX_SC_PM_CLK_PER );
110- clks [IMX_CONN_USB2_BUS_CLK ] = imx_clk_scu ("usb3_bus_div" , IMX_SC_R_USB_2 , IMX_SC_PM_CLK_MST_BUS );
111- clks [IMX_CONN_USB2_LPM_CLK ] = imx_clk_scu ("usb3_lpm_div" , IMX_SC_R_USB_2 , IMX_SC_PM_CLK_MISC );
102+ clks [IMX_CONN_SDHC0_CLK ] = imx_clk_scu ("sdhc0_clk" , IMX_SC_R_SDHC_0 , IMX_SC_PM_CLK_PER , clk_cells );
103+ clks [IMX_CONN_SDHC1_CLK ] = imx_clk_scu ("sdhc1_clk" , IMX_SC_R_SDHC_1 , IMX_SC_PM_CLK_PER , clk_cells );
104+ clks [IMX_CONN_SDHC2_CLK ] = imx_clk_scu ("sdhc2_clk" , IMX_SC_R_SDHC_2 , IMX_SC_PM_CLK_PER , clk_cells );
105+ clks [IMX_CONN_ENET0_ROOT_CLK ] = imx_clk_scu ("enet0_clk" , IMX_SC_R_ENET_0 , IMX_SC_PM_CLK_PER , clk_cells );
106+ clks [IMX_CONN_ENET0_BYPASS_CLK ] = imx_clk_scu ("enet0_bypass_clk" , IMX_SC_R_ENET_0 , IMX_SC_PM_CLK_BYPASS , clk_cells );
107+ clks [IMX_CONN_ENET0_RGMII_CLK ] = imx_clk_scu ("enet0_rgmii_clk" , IMX_SC_R_ENET_0 , IMX_SC_PM_CLK_MISC0 , clk_cells );
108+ clks [IMX_CONN_ENET1_ROOT_CLK ] = imx_clk_scu ("enet1_clk" , IMX_SC_R_ENET_1 , IMX_SC_PM_CLK_PER , clk_cells );
109+ clks [IMX_CONN_ENET1_BYPASS_CLK ] = imx_clk_scu ("enet1_bypass_clk" , IMX_SC_R_ENET_1 , IMX_SC_PM_CLK_BYPASS , clk_cells );
110+ clks [IMX_CONN_ENET1_RGMII_CLK ] = imx_clk_scu ("enet1_rgmii_clk" , IMX_SC_R_ENET_1 , IMX_SC_PM_CLK_MISC0 , clk_cells );
111+ clks [IMX_CONN_GPMI_BCH_IO_CLK ] = imx_clk_scu ("gpmi_io_clk" , IMX_SC_R_NAND , IMX_SC_PM_CLK_MST_BUS , clk_cells );
112+ clks [IMX_CONN_GPMI_BCH_CLK ] = imx_clk_scu ("gpmi_bch_clk" , IMX_SC_R_NAND , IMX_SC_PM_CLK_PER , clk_cells );
113+ clks [IMX_CONN_USB2_ACLK ] = imx_clk_scu ("usb3_aclk_div" , IMX_SC_R_USB_2 , IMX_SC_PM_CLK_PER , clk_cells );
114+ clks [IMX_CONN_USB2_BUS_CLK ] = imx_clk_scu ("usb3_bus_div" , IMX_SC_R_USB_2 , IMX_SC_PM_CLK_MST_BUS , clk_cells );
115+ clks [IMX_CONN_USB2_LPM_CLK ] = imx_clk_scu ("usb3_lpm_div" , IMX_SC_R_USB_2 , IMX_SC_PM_CLK_MISC , clk_cells );
112116
113117 /* Display controller SS */
114- clks [IMX_DC0_DISP0_CLK ] = imx_clk_scu ("dc0_disp0_clk" , IMX_SC_R_DC_0 , IMX_SC_PM_CLK_MISC0 );
115- clks [IMX_DC0_DISP1_CLK ] = imx_clk_scu ("dc0_disp1_clk" , IMX_SC_R_DC_0 , IMX_SC_PM_CLK_MISC1 );
118+ clks [IMX_DC0_DISP0_CLK ] = imx_clk_scu ("dc0_disp0_clk" , IMX_SC_R_DC_0 , IMX_SC_PM_CLK_MISC0 , clk_cells );
119+ clks [IMX_DC0_DISP1_CLK ] = imx_clk_scu ("dc0_disp1_clk" , IMX_SC_R_DC_0 , IMX_SC_PM_CLK_MISC1 , clk_cells );
116120
117121 /* MIPI-LVDS SS */
118- clks [IMX_MIPI0_I2C0_CLK ] = imx_clk_scu ("mipi0_i2c0_clk" , IMX_SC_R_MIPI_0_I2C_0 , IMX_SC_PM_CLK_MISC2 );
119- clks [IMX_MIPI0_I2C1_CLK ] = imx_clk_scu ("mipi0_i2c1_clk" , IMX_SC_R_MIPI_0_I2C_1 , IMX_SC_PM_CLK_MISC2 );
122+ clks [IMX_MIPI0_I2C0_CLK ] = imx_clk_scu ("mipi0_i2c0_clk" , IMX_SC_R_MIPI_0_I2C_0 , IMX_SC_PM_CLK_MISC2 , clk_cells );
123+ clks [IMX_MIPI0_I2C1_CLK ] = imx_clk_scu ("mipi0_i2c1_clk" , IMX_SC_R_MIPI_0_I2C_1 , IMX_SC_PM_CLK_MISC2 , clk_cells );
120124
121125 /* MIPI CSI SS */
122- clks [IMX_CSI0_CORE_CLK ] = imx_clk_scu ("mipi_csi0_core_clk" , IMX_SC_R_CSI_0 , IMX_SC_PM_CLK_PER );
123- clks [IMX_CSI0_ESC_CLK ] = imx_clk_scu ("mipi_csi0_esc_clk" , IMX_SC_R_CSI_0 , IMX_SC_PM_CLK_MISC );
124- clks [IMX_CSI0_I2C0_CLK ] = imx_clk_scu ("mipi_csi0_i2c0_clk" , IMX_SC_R_CSI_0_I2C_0 , IMX_SC_PM_CLK_PER );
125- clks [IMX_CSI0_PWM0_CLK ] = imx_clk_scu ("mipi_csi0_pwm0_clk" , IMX_SC_R_CSI_0_PWM_0 , IMX_SC_PM_CLK_PER );
126+ clks [IMX_CSI0_CORE_CLK ] = imx_clk_scu ("mipi_csi0_core_clk" , IMX_SC_R_CSI_0 , IMX_SC_PM_CLK_PER , clk_cells );
127+ clks [IMX_CSI0_ESC_CLK ] = imx_clk_scu ("mipi_csi0_esc_clk" , IMX_SC_R_CSI_0 , IMX_SC_PM_CLK_MISC , clk_cells );
128+ clks [IMX_CSI0_I2C0_CLK ] = imx_clk_scu ("mipi_csi0_i2c0_clk" , IMX_SC_R_CSI_0_I2C_0 , IMX_SC_PM_CLK_PER , clk_cells );
129+ clks [IMX_CSI0_PWM0_CLK ] = imx_clk_scu ("mipi_csi0_pwm0_clk" , IMX_SC_R_CSI_0_PWM_0 , IMX_SC_PM_CLK_PER , clk_cells );
126130
127131 /* GPU SS */
128- clks [IMX_GPU0_CORE_CLK ] = imx_clk_scu ("gpu_core0_clk" , IMX_SC_R_GPU_0_PID0 , IMX_SC_PM_CLK_PER );
129- clks [IMX_GPU0_SHADER_CLK ] = imx_clk_scu ("gpu_shader0_clk" , IMX_SC_R_GPU_0_PID0 , IMX_SC_PM_CLK_MISC );
132+ clks [IMX_GPU0_CORE_CLK ] = imx_clk_scu ("gpu_core0_clk" , IMX_SC_R_GPU_0_PID0 , IMX_SC_PM_CLK_PER , clk_cells );
133+ clks [IMX_GPU0_SHADER_CLK ] = imx_clk_scu ("gpu_shader0_clk" , IMX_SC_R_GPU_0_PID0 , IMX_SC_PM_CLK_MISC , clk_cells );
130134
131135 for (i = 0 ; i < clk_data -> num ; i ++ ) {
132136 if (IS_ERR (clks [i ]))
133137 pr_warn ("i.MX clk %u: register failed with %ld\n" ,
134138 i , PTR_ERR (clks [i ]));
135139 }
136140
137- return of_clk_add_hw_provider (ccm_node , of_clk_hw_onecell_get , clk_data );
141+ if (clk_cells == 2 ) {
142+ ret = of_clk_add_hw_provider (ccm_node , imx_scu_of_clk_src_get , imx_scu_clks );
143+ if (ret )
144+ imx_clk_scu_unregister ();
145+ } else {
146+ /*
147+ * legacy binding code path doesn't unregister here because
148+ * it will be removed later.
149+ */
150+ ret = of_clk_add_hw_provider (ccm_node , of_clk_hw_onecell_get , clk_data );
151+ }
152+
153+ return ret ;
138154}
139155
140156static const struct of_device_id imx8qxp_match [] = {
0 commit comments