Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ARM: u300: move the gated system controller clocks to DT

This moves the slow, fast, AHB bridge and "rest" clocks on
the U300 system controller over to registration from the
device tree.

Acked-by: Mike Turquette <mturquette@linaro.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>

+418 -110
+57
Documentation/devicetree/bindings/clock/ste-u300-syscon-clock.txt
··· 1 + Clock bindings for ST-Ericsson U300 System Controller Clocks 2 + 3 + Bindings for the gated system controller clocks: 4 + 5 + Required properties: 6 + - compatible: must be "stericsson,u300-syscon-clk" 7 + - #clock-cells: must be <0> 8 + - clock-type: specifies the type of clock: 9 + 0 = slow clock 10 + 1 = fast clock 11 + 2 = rest/remaining clock 12 + - clock-id: specifies the clock in the type range 13 + 14 + Optional properties: 15 + - clocks: parent clock(s) 16 + 17 + The available clocks per type are as follows: 18 + 19 + Type: ID: Clock: 20 + ------------------- 21 + 0 0 Slow peripheral bridge clock 22 + 0 1 UART0 clock 23 + 0 4 GPIO clock 24 + 0 6 RTC clock 25 + 0 7 Application timer clock 26 + 0 8 Access timer clock 27 + 28 + 1 0 Fast peripheral bridge clock 29 + 1 1 I2C bus 0 clock 30 + 1 2 I2C bus 1 clock 31 + 1 5 MMC interface peripheral (silicon) clock 32 + 1 6 SPI clock 33 + 34 + 2 3 CPU clock 35 + 2 4 DMA controller clock 36 + 2 5 External Memory Interface (EMIF) clock 37 + 2 6 NAND flask interface clock 38 + 2 8 XGAM graphics engine clock 39 + 2 9 Shared External Memory Interface (SEMI) clock 40 + 2 10 AHB Subsystem Bridge clock 41 + 2 12 Interrupt controller clock 42 + 43 + Example: 44 + 45 + gpio_clk: gpio_clk@13M { 46 + #clock-cells = <0>; 47 + compatible = "stericsson,u300-syscon-clk"; 48 + clock-type = <0>; /* Slow */ 49 + clock-id = <4>; 50 + clocks = <&slow_clk>; 51 + }; 52 + 53 + gpio: gpio@c0016000 { 54 + compatible = "stericsson,gpio-coh901"; 55 + (...) 56 + clocks = <&gpio_clk>; 57 + };
+149
arch/arm/boot/dts/ste-u300.dts
··· 43 43 compatible = "fixed-clock"; 44 44 clock-frequency = <13000000>; 45 45 }; 46 + /* Slow bridge clocks under PLL13 */ 47 + slow_clk: slow_clk@13M { 48 + #clock-cells = <0>; 49 + compatible = "stericsson,u300-syscon-clk"; 50 + clock-type = <0>; /* Slow */ 51 + clock-id = <0>; 52 + clocks = <&pll13>; 53 + }; 54 + uart0_clk: uart0_clk@13M { 55 + #clock-cells = <0>; 56 + compatible = "stericsson,u300-syscon-clk"; 57 + clock-type = <0>; /* Slow */ 58 + clock-id = <1>; 59 + clocks = <&slow_clk>; 60 + }; 61 + gpio_clk: gpio_clk@13M { 62 + #clock-cells = <0>; 63 + compatible = "stericsson,u300-syscon-clk"; 64 + clock-type = <0>; /* Slow */ 65 + clock-id = <4>; 66 + clocks = <&slow_clk>; 67 + }; 68 + rtc_clk: rtc_clk@13M { 69 + #clock-cells = <0>; 70 + compatible = "stericsson,u300-syscon-clk"; 71 + clock-type = <0>; /* Slow */ 72 + clock-id = <6>; 73 + clocks = <&slow_clk>; 74 + }; 75 + apptimer_clk: app_tmr_clk@13M { 76 + #clock-cells = <0>; 77 + compatible = "stericsson,u300-syscon-clk"; 78 + clock-type = <0>; /* Slow */ 79 + clock-id = <7>; 80 + clocks = <&slow_clk>; 81 + }; 82 + acc_tmr_clk@13M { 83 + #clock-cells = <0>; 84 + compatible = "stericsson,u300-syscon-clk"; 85 + clock-type = <0>; /* Slow */ 86 + clock-id = <8>; 87 + clocks = <&slow_clk>; 88 + }; 46 89 pll208: pll208@208M { 47 90 #clock-cells = <0>; 48 91 compatible = "fixed-clock"; ··· 98 55 clock-mult = <1>; 99 56 clocks = <&pll208>; 100 57 }; 58 + cpu_clk@208M { 59 + #clock-cells = <0>; 60 + compatible = "stericsson,u300-syscon-clk"; 61 + clock-type = <2>; /* Rest */ 62 + clock-id = <3>; 63 + clocks = <&app208>; 64 + }; 101 65 app104: app_104_clk@104M { 102 66 #clock-cells = <0>; 103 67 compatible = "fixed-factor-clock"; 104 68 clock-div = <2>; 105 69 clock-mult = <1>; 106 70 clocks = <&pll208>; 71 + }; 72 + semi_clk@104M { 73 + #clock-cells = <0>; 74 + compatible = "stericsson,u300-syscon-clk"; 75 + clock-type = <2>; /* Rest */ 76 + clock-id = <9>; 77 + clocks = <&app104>; 107 78 }; 108 79 app52: app_52_clk@52M { 109 80 #clock-cells = <0>; ··· 126 69 clock-mult = <1>; 127 70 clocks = <&pll208>; 128 71 }; 72 + /* AHB subsystem clocks */ 73 + ahb_clk: ahb_subsys_clk@52M { 74 + #clock-cells = <0>; 75 + compatible = "stericsson,u300-syscon-clk"; 76 + clock-type = <2>; /* Rest */ 77 + clock-id = <10>; 78 + clocks = <&app52>; 79 + }; 80 + intcon_clk@52M { 81 + #clock-cells = <0>; 82 + compatible = "stericsson,u300-syscon-clk"; 83 + clock-type = <2>; /* Rest */ 84 + clock-id = <12>; 85 + clocks = <&ahb_clk>; 86 + }; 87 + emif_clk@52M { 88 + #clock-cells = <0>; 89 + compatible = "stericsson,u300-syscon-clk"; 90 + clock-type = <2>; /* Rest */ 91 + clock-id = <5>; 92 + clocks = <&ahb_clk>; 93 + }; 94 + dmac_clk: dmac_clk@52M { 95 + #clock-cells = <0>; 96 + compatible = "stericsson,u300-syscon-clk"; 97 + clock-type = <2>; /* Rest */ 98 + clock-id = <4>; 99 + clocks = <&app52>; 100 + }; 101 + fsmc_clk: fsmc_clk@52M { 102 + #clock-cells = <0>; 103 + compatible = "stericsson,u300-syscon-clk"; 104 + clock-type = <2>; /* Rest */ 105 + clock-id = <6>; 106 + clocks = <&app52>; 107 + }; 108 + xgam_clk: xgam_clk@52M { 109 + #clock-cells = <0>; 110 + compatible = "stericsson,u300-syscon-clk"; 111 + clock-type = <2>; /* Rest */ 112 + clock-id = <8>; 113 + clocks = <&app52>; 114 + }; 129 115 app26: app_26_clk@26M { 130 116 #clock-cells = <0>; 131 117 compatible = "fixed-factor-clock"; 132 118 clock-div = <2>; 133 119 clock-mult = <1>; 134 120 clocks = <&app52>; 121 + }; 122 + /* Fast bridge clocks */ 123 + fast_clk: fast_clk@26M { 124 + #clock-cells = <0>; 125 + compatible = "stericsson,u300-syscon-clk"; 126 + clock-type = <1>; /* Fast */ 127 + clock-id = <0>; 128 + clocks = <&app26>; 129 + }; 130 + i2c0_clk: i2c0_clk@26M { 131 + #clock-cells = <0>; 132 + compatible = "stericsson,u300-syscon-clk"; 133 + clock-type = <1>; /* Fast */ 134 + clock-id = <1>; 135 + clocks = <&fast_clk>; 136 + }; 137 + i2c1_clk: i2c1_clk@26M { 138 + #clock-cells = <0>; 139 + compatible = "stericsson,u300-syscon-clk"; 140 + clock-type = <1>; /* Fast */ 141 + clock-id = <2>; 142 + clocks = <&fast_clk>; 143 + }; 144 + mmc_pclk: mmc_p_clk@26M { 145 + #clock-cells = <0>; 146 + compatible = "stericsson,u300-syscon-clk"; 147 + clock-type = <1>; /* Fast */ 148 + clock-id = <5>; 149 + clocks = <&fast_clk>; 150 + }; 151 + spi_clk: spi_p_clk@26M { 152 + #clock-cells = <0>; 153 + compatible = "stericsson,u300-syscon-clk"; 154 + clock-type = <1>; /* Fast */ 155 + clock-id = <6>; 156 + clocks = <&fast_clk>; 135 157 }; 136 158 }; 137 159 ··· 219 83 reg = <0xc0014000 0x1000>; 220 84 interrupt-parent = <&vica>; 221 85 interrupts = <24 25 26 27>; 86 + clocks = <&apptimer_clk>; 222 87 }; 223 88 224 89 gpio: gpio@c0016000 { ··· 227 90 reg = <0xc0016000 0x1000>; 228 91 interrupt-parent = <&vicb>; 229 92 interrupts = <0 1 2 18 21 22 23>; 93 + clocks = <&gpio_clk>; 230 94 interrupt-names = "gpio0", "gpio1", "gpio2", "gpio3", 231 95 "gpio4", "gpio5", "gpio6"; 232 96 interrupt-controller; ··· 254 116 reg = <0xc0017000 0x1000>; 255 117 interrupt-parent = <&vicb>; 256 118 interrupts = <10>; 119 + clocks = <&rtc_clk>; 257 120 }; 258 121 259 122 dmac: dma-controller@c00020000 { ··· 264 125 interrupts = <2>; 265 126 #dma-cells = <1>; 266 127 dma-channels = <40>; 128 + clocks = <&dmac_clk>; 267 129 }; 268 130 269 131 /* A NAND flash of 128 MiB */ ··· 278 138 <0x80010000 0x4000>; /* NAND Base CMD */ 279 139 reg-names = "fsmc_regs", "nand_data", "nand_addr", "nand_cmd"; 280 140 nand-skip-bbtscan; 141 + clocks = <&fsmc_clk>; 281 142 282 143 partition@0 { 283 144 label = "boot records"; ··· 299 158 reg = <0xc0004000 0x1000>; 300 159 interrupt-parent = <&vicb>; 301 160 interrupts = <8>; 161 + clocks = <&i2c0_clk>; 302 162 #address-cells = <1>; 303 163 #size-cells = <0>; 304 164 ab3100: ab3100@0x48 { ··· 377 235 reg = <0xc0005000 0x1000>; 378 236 interrupt-parent = <&vicb>; 379 237 interrupts = <9>; 238 + clocks = <&i2c1_clk>; 380 239 #address-cells = <1>; 381 240 #size-cells = <0>; 382 241 fwcam0: fwcam@0x10 { ··· 413 270 reg = <0xc0013000 0x1000>; 414 271 interrupt-parent = <&vica>; 415 272 interrupts = <22>; 273 + clocks = <&uart0_clk>, <&uart0_clk>; 274 + clock-names = "apb_pclk", "uart0_clk"; 416 275 dmas = <&dmac 17 &dmac 18>; 417 276 dma-names = "tx", "rx"; 418 277 }; ··· 433 288 reg = <0xc0001000 0x1000>; 434 289 interrupt-parent = <&vicb>; 435 290 interrupts = <6 7>; 291 + clocks = <&mmc_pclk>; 292 + clock-names = "apb_pclk"; 436 293 max-frequency = <24000000>; 437 294 bus-width = <4>; // SD-card slot 438 295 mmc-cap-mmc-highspeed; ··· 451 304 reg = <0xc0006000 0x1000>; 452 305 interrupt-parent = <&vica>; 453 306 interrupts = <23>; 307 + clocks = <&spi_clk>, <&spi_clk>; 308 + clock-names = "apb_pclk", "spi_clk"; 454 309 dmas = <&dmac 27 &dmac 28>; 455 310 dma-names = "tx", "rx"; 456 311 num-cs = <3>;
+1 -1
arch/arm/mach-u300/timer.c
··· 375 375 pr_info("U300 GP1 timer @ base: %p, IRQ: %d\n", u300_timer_base, irq); 376 376 377 377 /* Clock the interrupt controller */ 378 - clk = clk_get_sys("apptimer", NULL); 378 + clk = of_clk_get(np, 0); 379 379 BUG_ON(IS_ERR(clk)); 380 380 clk_prepare_enable(clk); 381 381 rate = clk_get_rate(clk);
+211 -109
drivers/clk/clk-u300.c
··· 728 728 return clk; 729 729 } 730 730 731 + #define U300_CLK_TYPE_SLOW 0 732 + #define U300_CLK_TYPE_FAST 1 733 + #define U300_CLK_TYPE_REST 2 734 + 735 + /** 736 + * struct u300_clock - defines the bits and pieces for a certain clock 737 + * @type: the clock type, slow fast or rest 738 + * @id: the bit in the slow/fast/rest register for this clock 739 + * @hw_ctrld: whether the clock is hardware controlled 740 + * @clk_val: a value to poke in the one-write enable/disable registers 741 + */ 742 + struct u300_clock { 743 + u8 type; 744 + u8 id; 745 + bool hw_ctrld; 746 + u16 clk_val; 747 + }; 748 + 749 + struct u300_clock const __initconst u300_clk_lookup[] = { 750 + { 751 + .type = U300_CLK_TYPE_REST, 752 + .id = 3, 753 + .hw_ctrld = true, 754 + .clk_val = U300_SYSCON_SBCER_CPU_CLK_EN, 755 + }, 756 + { 757 + .type = U300_CLK_TYPE_REST, 758 + .id = 4, 759 + .hw_ctrld = true, 760 + .clk_val = U300_SYSCON_SBCER_DMAC_CLK_EN, 761 + }, 762 + { 763 + .type = U300_CLK_TYPE_REST, 764 + .id = 5, 765 + .hw_ctrld = false, 766 + .clk_val = U300_SYSCON_SBCER_EMIF_CLK_EN, 767 + }, 768 + { 769 + .type = U300_CLK_TYPE_REST, 770 + .id = 6, 771 + .hw_ctrld = false, 772 + .clk_val = U300_SYSCON_SBCER_NANDIF_CLK_EN, 773 + }, 774 + { 775 + .type = U300_CLK_TYPE_REST, 776 + .id = 8, 777 + .hw_ctrld = true, 778 + .clk_val = U300_SYSCON_SBCER_XGAM_CLK_EN, 779 + }, 780 + { 781 + .type = U300_CLK_TYPE_REST, 782 + .id = 9, 783 + .hw_ctrld = false, 784 + .clk_val = U300_SYSCON_SBCER_SEMI_CLK_EN, 785 + }, 786 + { 787 + .type = U300_CLK_TYPE_REST, 788 + .id = 10, 789 + .hw_ctrld = true, 790 + .clk_val = U300_SYSCON_SBCER_AHB_SUBSYS_BRIDGE_CLK_EN, 791 + }, 792 + { 793 + .type = U300_CLK_TYPE_REST, 794 + .id = 12, 795 + .hw_ctrld = false, 796 + /* INTCON: cannot be enabled, just taken out of reset */ 797 + .clk_val = 0xFFFFU, 798 + }, 799 + { 800 + .type = U300_CLK_TYPE_FAST, 801 + .id = 0, 802 + .hw_ctrld = true, 803 + .clk_val = U300_SYSCON_SBCER_FAST_BRIDGE_CLK_EN, 804 + }, 805 + { 806 + .type = U300_CLK_TYPE_FAST, 807 + .id = 1, 808 + .hw_ctrld = false, 809 + .clk_val = U300_SYSCON_SBCER_I2C0_CLK_EN, 810 + }, 811 + { 812 + .type = U300_CLK_TYPE_FAST, 813 + .id = 2, 814 + .hw_ctrld = false, 815 + .clk_val = U300_SYSCON_SBCER_I2C1_CLK_EN, 816 + }, 817 + { 818 + .type = U300_CLK_TYPE_FAST, 819 + .id = 5, 820 + .hw_ctrld = false, 821 + .clk_val = U300_SYSCON_SBCER_MMC_CLK_EN, 822 + }, 823 + { 824 + .type = U300_CLK_TYPE_FAST, 825 + .id = 6, 826 + .hw_ctrld = false, 827 + .clk_val = U300_SYSCON_SBCER_SPI_CLK_EN, 828 + }, 829 + { 830 + .type = U300_CLK_TYPE_SLOW, 831 + .id = 0, 832 + .hw_ctrld = true, 833 + .clk_val = U300_SYSCON_SBCER_SLOW_BRIDGE_CLK_EN, 834 + }, 835 + { 836 + .type = U300_CLK_TYPE_SLOW, 837 + .id = 1, 838 + .hw_ctrld = false, 839 + .clk_val = U300_SYSCON_SBCER_UART_CLK_EN, 840 + }, 841 + { 842 + .type = U300_CLK_TYPE_SLOW, 843 + .id = 4, 844 + .hw_ctrld = false, 845 + .clk_val = U300_SYSCON_SBCER_GPIO_CLK_EN, 846 + }, 847 + { 848 + .type = U300_CLK_TYPE_SLOW, 849 + .id = 6, 850 + .hw_ctrld = true, 851 + /* No clock enable register bit */ 852 + .clk_val = 0xFFFFU, 853 + }, 854 + { 855 + .type = U300_CLK_TYPE_SLOW, 856 + .id = 7, 857 + .hw_ctrld = false, 858 + .clk_val = U300_SYSCON_SBCER_APP_TMR_CLK_EN, 859 + }, 860 + { 861 + .type = U300_CLK_TYPE_SLOW, 862 + .id = 8, 863 + .hw_ctrld = false, 864 + .clk_val = U300_SYSCON_SBCER_ACC_TMR_CLK_EN, 865 + }, 866 + }; 867 + 868 + static void __init of_u300_syscon_clk_init(struct device_node *np) 869 + { 870 + struct clk *clk = ERR_PTR(-EINVAL); 871 + const char *clk_name = np->name; 872 + const char *parent_name; 873 + void __iomem *res_reg; 874 + void __iomem *en_reg; 875 + u32 clk_type; 876 + u32 clk_id; 877 + int i; 878 + 879 + if (of_property_read_u32(np, "clock-type", &clk_type)) { 880 + pr_err("%s: syscon clock \"%s\" missing clock-type property\n", 881 + __func__, clk_name); 882 + return; 883 + } 884 + if (of_property_read_u32(np, "clock-id", &clk_id)) { 885 + pr_err("%s: syscon clock \"%s\" missing clock-id property\n", 886 + __func__, clk_name); 887 + return; 888 + } 889 + parent_name = of_clk_get_parent_name(np, 0); 890 + 891 + switch (clk_type) { 892 + case U300_CLK_TYPE_SLOW: 893 + res_reg = syscon_vbase + U300_SYSCON_RSR; 894 + en_reg = syscon_vbase + U300_SYSCON_CESR; 895 + break; 896 + case U300_CLK_TYPE_FAST: 897 + res_reg = syscon_vbase + U300_SYSCON_RFR; 898 + en_reg = syscon_vbase + U300_SYSCON_CEFR; 899 + break; 900 + case U300_CLK_TYPE_REST: 901 + res_reg = syscon_vbase + U300_SYSCON_RRR; 902 + en_reg = syscon_vbase + U300_SYSCON_CERR; 903 + break; 904 + default: 905 + pr_err("unknown clock type %x specified\n", clk_type); 906 + return; 907 + } 908 + 909 + for (i = 0; i < ARRAY_SIZE(u300_clk_lookup); i++) { 910 + const struct u300_clock *u3clk = &u300_clk_lookup[i]; 911 + 912 + if (u3clk->type == clk_type && u3clk->id == clk_id) 913 + clk = syscon_clk_register(NULL, 914 + clk_name, parent_name, 915 + 0, u3clk->hw_ctrld, 916 + res_reg, u3clk->id, 917 + en_reg, u3clk->id, 918 + u3clk->clk_val); 919 + } 920 + 921 + if (!IS_ERR(clk)) { 922 + of_clk_add_provider(np, of_clk_src_simple_get, clk); 923 + 924 + /* 925 + * Some few system clocks - device tree does not 926 + * represent clocks without a corresponding device node. 927 + * for now we add these three clocks here. 928 + */ 929 + if (clk_type == U300_CLK_TYPE_REST && clk_id == 5) 930 + clk_register_clkdev(clk, NULL, "pl172"); 931 + if (clk_type == U300_CLK_TYPE_REST && clk_id == 9) 932 + clk_register_clkdev(clk, NULL, "semi"); 933 + if (clk_type == U300_CLK_TYPE_REST && clk_id == 12) 934 + clk_register_clkdev(clk, NULL, "intcon"); 935 + } 936 + } 937 + 731 938 /** 732 939 * struct clk_mclk - U300 MCLK clock (MMC/SD clock) 733 940 * @hw: corresponding clock hardware entry ··· 1148 941 .compatible = "fixed-factor-clock", 1149 942 .data = of_fixed_factor_clk_setup, 1150 943 }, 944 + { 945 + .compatible = "stericsson,u300-syscon-clk", 946 + .data = of_u300_syscon_clk_init, 947 + }, 1151 948 }; 1152 949 1153 950 void __init u300_clk_init(void __iomem *base) ··· 1175 964 writew(val, syscon_vbase + U300_SYSCON_PMCR); 1176 965 1177 966 of_clk_init(u300_clk_match); 1178 - 1179 - /* Directly on the AMBA interconnect */ 1180 - clk = syscon_clk_register(NULL, "cpu_clk", "app_208_clk", 0, true, 1181 - syscon_vbase + U300_SYSCON_RRR, 3, 1182 - syscon_vbase + U300_SYSCON_CERR, 3, 1183 - U300_SYSCON_SBCER_CPU_CLK_EN); 1184 - clk = syscon_clk_register(NULL, "dmac_clk", "app_52_clk", 0, true, 1185 - syscon_vbase + U300_SYSCON_RRR, 4, 1186 - syscon_vbase + U300_SYSCON_CERR, 4, 1187 - U300_SYSCON_SBCER_DMAC_CLK_EN); 1188 - clk_register_clkdev(clk, NULL, "dma"); 1189 - clk = syscon_clk_register(NULL, "fsmc_clk", "app_52_clk", 0, false, 1190 - syscon_vbase + U300_SYSCON_RRR, 6, 1191 - syscon_vbase + U300_SYSCON_CERR, 6, 1192 - U300_SYSCON_SBCER_NANDIF_CLK_EN); 1193 - clk_register_clkdev(clk, NULL, "fsmc-nand"); 1194 - clk = syscon_clk_register(NULL, "xgam_clk", "app_52_clk", 0, true, 1195 - syscon_vbase + U300_SYSCON_RRR, 8, 1196 - syscon_vbase + U300_SYSCON_CERR, 8, 1197 - U300_SYSCON_SBCER_XGAM_CLK_EN); 1198 - clk_register_clkdev(clk, NULL, "xgam"); 1199 - clk = syscon_clk_register(NULL, "semi_clk", "app_104_clk", 0, false, 1200 - syscon_vbase + U300_SYSCON_RRR, 9, 1201 - syscon_vbase + U300_SYSCON_CERR, 9, 1202 - U300_SYSCON_SBCER_SEMI_CLK_EN); 1203 - clk_register_clkdev(clk, NULL, "semi"); 1204 - 1205 - /* AHB bridge clocks */ 1206 - clk = syscon_clk_register(NULL, "ahb_subsys_clk", "app_52_clk", 0, true, 1207 - syscon_vbase + U300_SYSCON_RRR, 10, 1208 - syscon_vbase + U300_SYSCON_CERR, 10, 1209 - U300_SYSCON_SBCER_AHB_SUBSYS_BRIDGE_CLK_EN); 1210 - clk = syscon_clk_register(NULL, "intcon_clk", "ahb_subsys_clk", 0, false, 1211 - syscon_vbase + U300_SYSCON_RRR, 12, 1212 - syscon_vbase + U300_SYSCON_CERR, 12, 1213 - /* Cannot be enabled, just taken out of reset */ 1214 - 0xFFFFU); 1215 - clk_register_clkdev(clk, NULL, "intcon"); 1216 - clk = syscon_clk_register(NULL, "emif_clk", "ahb_subsys_clk", 0, false, 1217 - syscon_vbase + U300_SYSCON_RRR, 5, 1218 - syscon_vbase + U300_SYSCON_CERR, 5, 1219 - U300_SYSCON_SBCER_EMIF_CLK_EN); 1220 - clk_register_clkdev(clk, NULL, "pl172"); 1221 - 1222 - /* FAST bridge clocks */ 1223 - clk = syscon_clk_register(NULL, "fast_clk", "app_26_clk", 0, true, 1224 - syscon_vbase + U300_SYSCON_RFR, 0, 1225 - syscon_vbase + U300_SYSCON_CEFR, 0, 1226 - U300_SYSCON_SBCER_FAST_BRIDGE_CLK_EN); 1227 - clk = syscon_clk_register(NULL, "i2c0_p_clk", "fast_clk", 0, false, 1228 - syscon_vbase + U300_SYSCON_RFR, 1, 1229 - syscon_vbase + U300_SYSCON_CEFR, 1, 1230 - U300_SYSCON_SBCER_I2C0_CLK_EN); 1231 - clk_register_clkdev(clk, NULL, "stu300.0"); 1232 - clk = syscon_clk_register(NULL, "i2c1_p_clk", "fast_clk", 0, false, 1233 - syscon_vbase + U300_SYSCON_RFR, 2, 1234 - syscon_vbase + U300_SYSCON_CEFR, 2, 1235 - U300_SYSCON_SBCER_I2C1_CLK_EN); 1236 - clk_register_clkdev(clk, NULL, "stu300.1"); 1237 - clk = syscon_clk_register(NULL, "mmc_p_clk", "fast_clk", 0, false, 1238 - syscon_vbase + U300_SYSCON_RFR, 5, 1239 - syscon_vbase + U300_SYSCON_CEFR, 5, 1240 - U300_SYSCON_SBCER_MMC_CLK_EN); 1241 - clk_register_clkdev(clk, "apb_pclk", "mmci"); 1242 - clk = syscon_clk_register(NULL, "spi_p_clk", "fast_clk", 0, false, 1243 - syscon_vbase + U300_SYSCON_RFR, 6, 1244 - syscon_vbase + U300_SYSCON_CEFR, 6, 1245 - U300_SYSCON_SBCER_SPI_CLK_EN); 1246 - /* The SPI has no external clock for the outward bus, uses the pclk */ 1247 - clk_register_clkdev(clk, NULL, "pl022"); 1248 - clk_register_clkdev(clk, "apb_pclk", "pl022"); 1249 - 1250 - /* SLOW bridge clocks */ 1251 - clk = syscon_clk_register(NULL, "slow_clk", "pll13", 0, true, 1252 - syscon_vbase + U300_SYSCON_RSR, 0, 1253 - syscon_vbase + U300_SYSCON_CESR, 0, 1254 - U300_SYSCON_SBCER_SLOW_BRIDGE_CLK_EN); 1255 - clk = syscon_clk_register(NULL, "uart0_clk", "slow_clk", 0, false, 1256 - syscon_vbase + U300_SYSCON_RSR, 1, 1257 - syscon_vbase + U300_SYSCON_CESR, 1, 1258 - U300_SYSCON_SBCER_UART_CLK_EN); 1259 - /* Same clock is used for APB and outward bus */ 1260 - clk_register_clkdev(clk, NULL, "uart0"); 1261 - clk_register_clkdev(clk, "apb_pclk", "uart0"); 1262 - clk = syscon_clk_register(NULL, "gpio_clk", "slow_clk", 0, false, 1263 - syscon_vbase + U300_SYSCON_RSR, 4, 1264 - syscon_vbase + U300_SYSCON_CESR, 4, 1265 - U300_SYSCON_SBCER_GPIO_CLK_EN); 1266 - clk_register_clkdev(clk, NULL, "u300-gpio"); 1267 - clk = syscon_clk_register(NULL, "keypad_clk", "slow_clk", 0, false, 1268 - syscon_vbase + U300_SYSCON_RSR, 5, 1269 - syscon_vbase + U300_SYSCON_CESR, 6, 1270 - U300_SYSCON_SBCER_KEYPAD_CLK_EN); 1271 - clk_register_clkdev(clk, NULL, "coh901461-keypad"); 1272 - clk = syscon_clk_register(NULL, "rtc_clk", "slow_clk", 0, true, 1273 - syscon_vbase + U300_SYSCON_RSR, 6, 1274 - /* No clock enable register bit */ 1275 - NULL, 0, 0xFFFFU); 1276 - clk_register_clkdev(clk, NULL, "rtc-coh901331"); 1277 - clk = syscon_clk_register(NULL, "app_tmr_clk", "slow_clk", 0, false, 1278 - syscon_vbase + U300_SYSCON_RSR, 7, 1279 - syscon_vbase + U300_SYSCON_CESR, 7, 1280 - U300_SYSCON_SBCER_APP_TMR_CLK_EN); 1281 - clk_register_clkdev(clk, NULL, "apptimer"); 1282 - clk = syscon_clk_register(NULL, "acc_tmr_clk", "slow_clk", 0, false, 1283 - syscon_vbase + U300_SYSCON_RSR, 8, 1284 - syscon_vbase + U300_SYSCON_CESR, 8, 1285 - U300_SYSCON_SBCER_ACC_TMR_CLK_EN); 1286 - clk_register_clkdev(clk, NULL, "timer"); 1287 967 1288 968 /* Then this special MMC/SD clock */ 1289 969 clk = mclk_clk_register(NULL, "mmc_clk", "mmc_p_clk", false);