15
15
16
16
#define RK3576_GRF_SOC_STATUS0 0x600
17
17
#define RK3576_PMU0_GRF_OSC_CON6 0x18
18
+ #define RK3576_VCCIO_IOC_MISC_CON0 0x6400
18
19
19
20
enum rk3576_plls {
20
21
bpll , lpll , vpll , aupll , cpll , gpll , ppll ,
@@ -1479,6 +1480,14 @@ static struct rockchip_clk_branch rk3576_clk_branches[] __initdata = {
1479
1480
RK3576_CLKGATE_CON (10 ), 0 , GFLAGS ),
1480
1481
GATE (CLK_SAI0_MCLKOUT , "clk_sai0_mclkout" , "mclk_sai0_8ch" , 0 ,
1481
1482
RK3576_CLKGATE_CON (10 ), 1 , GFLAGS ),
1483
+ GATE_GRF (CLK_SAI0_MCLKOUT_TO_IO , "mclk_sai0_to_io" , "clk_sai0_mclkout" ,
1484
+ 0 , RK3576_VCCIO_IOC_MISC_CON0 , 0 , GFLAGS , grf_type_ioc ),
1485
+ GATE_GRF (CLK_SAI1_MCLKOUT_TO_IO , "mclk_sai1_to_io" , "clk_sai1_mclkout" ,
1486
+ 0 , RK3576_VCCIO_IOC_MISC_CON0 , 1 , GFLAGS , grf_type_ioc ),
1487
+ GATE_GRF (CLK_SAI2_MCLKOUT_TO_IO , "mclk_sai2_to_io" , "clk_sai2_mclkout" ,
1488
+ 0 , RK3576_VCCIO_IOC_MISC_CON0 , 2 , GFLAGS , grf_type_ioc ),
1489
+ GATE_GRF (CLK_SAI3_MCLKOUT_TO_IO , "mclk_sai3_to_io" , "clk_sai3_mclkout" ,
1490
+ 0 , RK3576_VCCIO_IOC_MISC_CON0 , 3 , GFLAGS , grf_type_ioc ),
1482
1491
1483
1492
/* sdgmac */
1484
1493
COMPOSITE_NODIV (HCLK_SDGMAC_ROOT , "hclk_sdgmac_root" , mux_200m_100m_50m_24m_p , 0 ,
@@ -1725,7 +1734,9 @@ static void __init rk3576_clk_init(struct device_node *np)
1725
1734
struct rockchip_clk_provider * ctx ;
1726
1735
unsigned long clk_nr_clks ;
1727
1736
void __iomem * reg_base ;
1737
+ struct rockchip_aux_grf * ioc_grf_e ;
1728
1738
struct rockchip_aux_grf * pmu0_grf_e ;
1739
+ struct regmap * ioc_grf ;
1729
1740
struct regmap * pmu0_grf ;
1730
1741
1731
1742
clk_nr_clks = rockchip_clk_find_max_clk_id (rk3576_clk_branches ,
@@ -1737,6 +1748,12 @@ static void __init rk3576_clk_init(struct device_node *np)
1737
1748
return ;
1738
1749
}
1739
1750
1751
+ ioc_grf = syscon_regmap_lookup_by_compatible ("rockchip,rk3576-ioc-grf" );
1752
+ if (IS_ERR (ioc_grf )) {
1753
+ pr_err ("%s: could not get IOC GRF syscon\n" , __func__ );
1754
+ return ;
1755
+ }
1756
+
1740
1757
reg_base = of_iomap (np , 0 );
1741
1758
if (!reg_base ) {
1742
1759
pr_err ("%s: could not map cru region\n" , __func__ );
@@ -1757,6 +1774,14 @@ static void __init rk3576_clk_init(struct device_node *np)
1757
1774
pmu0_grf_e -> type = grf_type_pmu0 ;
1758
1775
hash_add (ctx -> aux_grf_table , & pmu0_grf_e -> node , grf_type_pmu0 );
1759
1776
1777
+ ioc_grf_e = kzalloc (sizeof (* ioc_grf_e ), GFP_KERNEL );
1778
+ if (!ioc_grf_e )
1779
+ goto err_free_pmu0 ;
1780
+
1781
+ ioc_grf_e -> grf = ioc_grf ;
1782
+ ioc_grf_e -> type = grf_type_ioc ;
1783
+ hash_add (ctx -> aux_grf_table , & ioc_grf_e -> node , grf_type_ioc );
1784
+
1760
1785
rockchip_clk_register_plls (ctx , rk3576_pll_clks ,
1761
1786
ARRAY_SIZE (rk3576_pll_clks ),
1762
1787
RK3576_GRF_SOC_STATUS0 );
@@ -1781,6 +1806,8 @@ static void __init rk3576_clk_init(struct device_node *np)
1781
1806
1782
1807
return ;
1783
1808
1809
+ err_free_pmu0 :
1810
+ kfree (pmu0_grf_e );
1784
1811
err_unmap :
1785
1812
iounmap (reg_base );
1786
1813
return ;
0 commit comments