1*4882a593Smuzhiyun* Samsung Exynos5260 Clock Controller 2*4882a593Smuzhiyun 3*4882a593SmuzhiyunExynos5260 has 13 clock controllers which are instantiated 4*4882a593Smuzhiyunindependently from the device-tree. These clock controllers 5*4882a593Smuzhiyungenerate and supply clocks to various hardware blocks within 6*4882a593Smuzhiyunthe SoC. 7*4882a593Smuzhiyun 8*4882a593SmuzhiyunEach clock is assigned an identifier and client nodes can use 9*4882a593Smuzhiyunthis identifier to specify the clock which they consume. All 10*4882a593Smuzhiyunavailable clocks are defined as preprocessor macros in 11*4882a593Smuzhiyundt-bindings/clock/exynos5260-clk.h header and can be used in 12*4882a593Smuzhiyundevice tree sources. 13*4882a593Smuzhiyun 14*4882a593SmuzhiyunExternal clocks: 15*4882a593Smuzhiyun 16*4882a593SmuzhiyunThere are several clocks that are generated outside the SoC. It 17*4882a593Smuzhiyunis expected that they are defined using standard clock bindings 18*4882a593Smuzhiyunwith following clock-output-names: 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun - "fin_pll" - PLL input clock from XXTI 21*4882a593Smuzhiyun - "xrtcxti" - input clock from XRTCXTI 22*4882a593Smuzhiyun - "ioclk_pcm_extclk" - pcm external operation clock 23*4882a593Smuzhiyun - "ioclk_spdif_extclk" - spdif external operation clock 24*4882a593Smuzhiyun - "ioclk_i2s_cdclk" - i2s0 codec clock 25*4882a593Smuzhiyun 26*4882a593SmuzhiyunPhy clocks: 27*4882a593Smuzhiyun 28*4882a593SmuzhiyunThere are several clocks which are generated by specific PHYs. 29*4882a593SmuzhiyunThese clocks are fed into the clock controller and then routed to 30*4882a593Smuzhiyunthe hardware blocks. These clocks are defined as fixed clocks in the 31*4882a593Smuzhiyundriver with following names: 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun - "phyclk_dptx_phy_ch3_txd_clk" - dp phy clock for channel 3 34*4882a593Smuzhiyun - "phyclk_dptx_phy_ch2_txd_clk" - dp phy clock for channel 2 35*4882a593Smuzhiyun - "phyclk_dptx_phy_ch1_txd_clk" - dp phy clock for channel 1 36*4882a593Smuzhiyun - "phyclk_dptx_phy_ch0_txd_clk" - dp phy clock for channel 0 37*4882a593Smuzhiyun - "phyclk_hdmi_phy_tmds_clko" - hdmi phy tmds clock 38*4882a593Smuzhiyun - "phyclk_hdmi_phy_pixel_clko" - hdmi phy pixel clock 39*4882a593Smuzhiyun - "phyclk_hdmi_link_o_tmds_clkhi" - hdmi phy for hdmi link 40*4882a593Smuzhiyun - "phyclk_dptx_phy_o_ref_clk_24m" - dp phy reference clock 41*4882a593Smuzhiyun - "phyclk_dptx_phy_clk_div2" 42*4882a593Smuzhiyun - "phyclk_mipi_dphy_4l_m_rxclkesc0" 43*4882a593Smuzhiyun - "phyclk_usbhost20_phy_phyclock" - usb 2.0 phy clock 44*4882a593Smuzhiyun - "phyclk_usbhost20_phy_freeclk" 45*4882a593Smuzhiyun - "phyclk_usbhost20_phy_clk48mohci" 46*4882a593Smuzhiyun - "phyclk_usbdrd30_udrd30_pipe_pclk" 47*4882a593Smuzhiyun - "phyclk_usbdrd30_udrd30_phyclock" - usb 3.0 phy clock 48*4882a593Smuzhiyun 49*4882a593SmuzhiyunRequired Properties for Clock Controller: 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun - compatible: should be one of the following. 52*4882a593Smuzhiyun 1) "samsung,exynos5260-clock-top" 53*4882a593Smuzhiyun 2) "samsung,exynos5260-clock-peri" 54*4882a593Smuzhiyun 3) "samsung,exynos5260-clock-egl" 55*4882a593Smuzhiyun 4) "samsung,exynos5260-clock-kfc" 56*4882a593Smuzhiyun 5) "samsung,exynos5260-clock-g2d" 57*4882a593Smuzhiyun 6) "samsung,exynos5260-clock-mif" 58*4882a593Smuzhiyun 7) "samsung,exynos5260-clock-mfc" 59*4882a593Smuzhiyun 8) "samsung,exynos5260-clock-g3d" 60*4882a593Smuzhiyun 9) "samsung,exynos5260-clock-fsys" 61*4882a593Smuzhiyun 10) "samsung,exynos5260-clock-aud" 62*4882a593Smuzhiyun 11) "samsung,exynos5260-clock-isp" 63*4882a593Smuzhiyun 12) "samsung,exynos5260-clock-gscl" 64*4882a593Smuzhiyun 13) "samsung,exynos5260-clock-disp" 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun - reg: physical base address of the controller and the length of 67*4882a593Smuzhiyun memory mapped region. 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun - #clock-cells: should be 1. 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun - clocks: list of clock identifiers which are fed as the input to 72*4882a593Smuzhiyun the given clock controller. Please refer the next section to find 73*4882a593Smuzhiyun the input clocks for a given controller. 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun - clock-names: list of names of clocks which are fed as the input 76*4882a593Smuzhiyun to the given clock controller. 77*4882a593Smuzhiyun 78*4882a593SmuzhiyunInput clocks for top clock controller: 79*4882a593Smuzhiyun - fin_pll 80*4882a593Smuzhiyun - dout_mem_pll 81*4882a593Smuzhiyun - dout_bus_pll 82*4882a593Smuzhiyun - dout_media_pll 83*4882a593Smuzhiyun 84*4882a593SmuzhiyunInput clocks for peri clock controller: 85*4882a593Smuzhiyun - fin_pll 86*4882a593Smuzhiyun - ioclk_pcm_extclk 87*4882a593Smuzhiyun - ioclk_i2s_cdclk 88*4882a593Smuzhiyun - ioclk_spdif_extclk 89*4882a593Smuzhiyun - phyclk_hdmi_phy_ref_cko 90*4882a593Smuzhiyun - dout_aclk_peri_66 91*4882a593Smuzhiyun - dout_sclk_peri_uart0 92*4882a593Smuzhiyun - dout_sclk_peri_uart1 93*4882a593Smuzhiyun - dout_sclk_peri_uart2 94*4882a593Smuzhiyun - dout_sclk_peri_spi0_b 95*4882a593Smuzhiyun - dout_sclk_peri_spi1_b 96*4882a593Smuzhiyun - dout_sclk_peri_spi2_b 97*4882a593Smuzhiyun - dout_aclk_peri_aud 98*4882a593Smuzhiyun - dout_sclk_peri_spi0_b 99*4882a593Smuzhiyun 100*4882a593SmuzhiyunInput clocks for egl clock controller: 101*4882a593Smuzhiyun - fin_pll 102*4882a593Smuzhiyun - dout_bus_pll 103*4882a593Smuzhiyun 104*4882a593SmuzhiyunInput clocks for kfc clock controller: 105*4882a593Smuzhiyun - fin_pll 106*4882a593Smuzhiyun - dout_media_pll 107*4882a593Smuzhiyun 108*4882a593SmuzhiyunInput clocks for g2d clock controller: 109*4882a593Smuzhiyun - fin_pll 110*4882a593Smuzhiyun - dout_aclk_g2d_333 111*4882a593Smuzhiyun 112*4882a593SmuzhiyunInput clocks for mif clock controller: 113*4882a593Smuzhiyun - fin_pll 114*4882a593Smuzhiyun 115*4882a593SmuzhiyunInput clocks for mfc clock controller: 116*4882a593Smuzhiyun - fin_pll 117*4882a593Smuzhiyun - dout_aclk_mfc_333 118*4882a593Smuzhiyun 119*4882a593SmuzhiyunInput clocks for g3d clock controller: 120*4882a593Smuzhiyun - fin_pll 121*4882a593Smuzhiyun 122*4882a593SmuzhiyunInput clocks for fsys clock controller: 123*4882a593Smuzhiyun - fin_pll 124*4882a593Smuzhiyun - phyclk_usbhost20_phy_phyclock 125*4882a593Smuzhiyun - phyclk_usbhost20_phy_freeclk 126*4882a593Smuzhiyun - phyclk_usbhost20_phy_clk48mohci 127*4882a593Smuzhiyun - phyclk_usbdrd30_udrd30_pipe_pclk 128*4882a593Smuzhiyun - phyclk_usbdrd30_udrd30_phyclock 129*4882a593Smuzhiyun - dout_aclk_fsys_200 130*4882a593Smuzhiyun 131*4882a593SmuzhiyunInput clocks for aud clock controller: 132*4882a593Smuzhiyun - fin_pll 133*4882a593Smuzhiyun - fout_aud_pll 134*4882a593Smuzhiyun - ioclk_i2s_cdclk 135*4882a593Smuzhiyun - ioclk_pcm_extclk 136*4882a593Smuzhiyun 137*4882a593SmuzhiyunInput clocks for isp clock controller: 138*4882a593Smuzhiyun - fin_pll 139*4882a593Smuzhiyun - dout_aclk_isp1_266 140*4882a593Smuzhiyun - dout_aclk_isp1_400 141*4882a593Smuzhiyun - mout_aclk_isp1_266 142*4882a593Smuzhiyun 143*4882a593SmuzhiyunInput clocks for gscl clock controller: 144*4882a593Smuzhiyun - fin_pll 145*4882a593Smuzhiyun - dout_aclk_gscl_400 146*4882a593Smuzhiyun - dout_aclk_gscl_333 147*4882a593Smuzhiyun 148*4882a593SmuzhiyunInput clocks for disp clock controller: 149*4882a593Smuzhiyun - fin_pll 150*4882a593Smuzhiyun - phyclk_dptx_phy_ch3_txd_clk 151*4882a593Smuzhiyun - phyclk_dptx_phy_ch2_txd_clk 152*4882a593Smuzhiyun - phyclk_dptx_phy_ch1_txd_clk 153*4882a593Smuzhiyun - phyclk_dptx_phy_ch0_txd_clk 154*4882a593Smuzhiyun - phyclk_hdmi_phy_tmds_clko 155*4882a593Smuzhiyun - phyclk_hdmi_phy_ref_clko 156*4882a593Smuzhiyun - phyclk_hdmi_phy_pixel_clko 157*4882a593Smuzhiyun - phyclk_hdmi_link_o_tmds_clkhi 158*4882a593Smuzhiyun - phyclk_mipi_dphy_4l_m_txbyte_clkhs 159*4882a593Smuzhiyun - phyclk_dptx_phy_o_ref_clk_24m 160*4882a593Smuzhiyun - phyclk_dptx_phy_clk_div2 161*4882a593Smuzhiyun - phyclk_mipi_dphy_4l_m_rxclkesc0 162*4882a593Smuzhiyun - phyclk_hdmi_phy_ref_cko 163*4882a593Smuzhiyun - ioclk_spdif_extclk 164*4882a593Smuzhiyun - dout_aclk_peri_aud 165*4882a593Smuzhiyun - dout_aclk_disp_222 166*4882a593Smuzhiyun - dout_sclk_disp_pixel 167*4882a593Smuzhiyun - dout_aclk_disp_333 168*4882a593Smuzhiyun 169*4882a593SmuzhiyunExample 1: An example of a clock controller node is listed below. 170*4882a593Smuzhiyun 171*4882a593Smuzhiyun clock_mfc: clock-controller@11090000 { 172*4882a593Smuzhiyun compatible = "samsung,exynos5260-clock-mfc"; 173*4882a593Smuzhiyun clock = <&fin_pll>, <&clock_top TOP_DOUT_ACLK_MFC_333>; 174*4882a593Smuzhiyun clock-names = "fin_pll", "dout_aclk_mfc_333"; 175*4882a593Smuzhiyun reg = <0x11090000 0x10000>; 176*4882a593Smuzhiyun #clock-cells = <1>; 177*4882a593Smuzhiyun }; 178*4882a593Smuzhiyun 179*4882a593SmuzhiyunExample 2: UART controller node that consumes the clock generated by the 180*4882a593Smuzhiyun peri clock controller. Refer to the standard clock bindings for 181*4882a593Smuzhiyun information about 'clocks' and 'clock-names' property. 182*4882a593Smuzhiyun 183*4882a593Smuzhiyun serial@12c00000 { 184*4882a593Smuzhiyun compatible = "samsung,exynos4210-uart"; 185*4882a593Smuzhiyun reg = <0x12C00000 0x100>; 186*4882a593Smuzhiyun interrupts = <0 146 0>; 187*4882a593Smuzhiyun clocks = <&clock_peri PERI_PCLK_UART0>, <&clock_peri PERI_SCLK_UART0>; 188*4882a593Smuzhiyun clock-names = "uart", "clk_uart_baud0"; 189*4882a593Smuzhiyun }; 190*4882a593Smuzhiyun 191