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

Merge branches 'clk-hisi-usb', 'clk-silent-bulk', 'clk-mtk-hdmi', 'clk-mtk-mali' and 'clk-imx6ul-ccosr' into clk-next

* clk-hisi-usb:
clk: hisilicon: add missing usb3 clocks for Hi3798CV200 SoC

* clk-silent-bulk:
clk: bulk: silently error out on EPROBE_DEFER

* clk-mtk-hdmi:
clk: mediatek: correct the clocks for MT2701 HDMI PHY module

* clk-mtk-mali:
clk: mediatek: add g3dsys support for MT2701 and MT7623
dt-bindings: reset: mediatek: add entry for Mali-450 node to refer
dt-bindings: clock: mediatek: add entry for Mali-450 node to refer
dt-bindings: clock: mediatek: add g3dsys bindings

* clk-imx6ul-ccosr:
clk: imx: Add new clo01 and clo2 controlled by CCOSR

+219 -25
+30
Documentation/devicetree/bindings/arm/mediatek/mediatek,g3dsys.txt
··· 1 + MediaTek g3dsys controller 2 + ============================ 3 + 4 + The MediaTek g3dsys controller provides various clocks and reset controller to 5 + the GPU. 6 + 7 + Required Properties: 8 + 9 + - compatible: Should be: 10 + - "mediatek,mt2701-g3dsys", "syscon": 11 + for MT2701 SoC 12 + - "mediatek,mt7623-g3dsys", "mediatek,mt2701-g3dsys", "syscon": 13 + for MT7623 SoC 14 + - #clock-cells: Must be 1 15 + - #reset-cells: Must be 1 16 + 17 + The g3dsys controller uses the common clk binding from 18 + Documentation/devicetree/bindings/clock/clock-bindings.txt 19 + The available clocks are defined in dt-bindings/clock/mt*-clk.h. 20 + 21 + Example: 22 + 23 + g3dsys: clock-controller@13000000 { 24 + compatible = "mediatek,mt7623-g3dsys", 25 + "mediatek,mt2701-g3dsys", 26 + "syscon"; 27 + reg = <0 0x13000000 0 0x200>; 28 + #clock-cells = <1>; 29 + #reset-cells = <1>; 30 + };
+3 -2
drivers/clk/clk-bulk.c
··· 42 42 clks[i].clk = clk_get(dev, clks[i].id); 43 43 if (IS_ERR(clks[i].clk)) { 44 44 ret = PTR_ERR(clks[i].clk); 45 - dev_err(dev, "Failed to get clk '%s': %d\n", 46 - clks[i].id, ret); 45 + if (ret != -EPROBE_DEFER) 46 + dev_err(dev, "Failed to get clk '%s': %d\n", 47 + clks[i].id, ret); 47 48 clks[i].clk = NULL; 48 49 goto err; 49 50 }
+17
drivers/clk/hisilicon/crg-hi3798cv200.c
··· 186 186 CLK_SET_RATE_PARENT, 0xbc, 0, 0 }, 187 187 { HISTB_USB2_PHY2_REF_CLK, "clk_u2_phy2_ref", "24m", 188 188 CLK_SET_RATE_PARENT, 0xbc, 2, 0 }, 189 + /* USB3 */ 190 + { HISTB_USB3_BUS_CLK, "clk_u3_bus", NULL, 191 + CLK_SET_RATE_PARENT, 0xb0, 0, 0 }, 192 + { HISTB_USB3_UTMI_CLK, "clk_u3_utmi", NULL, 193 + CLK_SET_RATE_PARENT, 0xb0, 4, 0 }, 194 + { HISTB_USB3_PIPE_CLK, "clk_u3_pipe", NULL, 195 + CLK_SET_RATE_PARENT, 0xb0, 3, 0 }, 196 + { HISTB_USB3_SUSPEND_CLK, "clk_u3_suspend", NULL, 197 + CLK_SET_RATE_PARENT, 0xb0, 2, 0 }, 198 + { HISTB_USB3_BUS_CLK1, "clk_u3_bus1", NULL, 199 + CLK_SET_RATE_PARENT, 0xb0, 16, 0 }, 200 + { HISTB_USB3_UTMI_CLK1, "clk_u3_utmi1", NULL, 201 + CLK_SET_RATE_PARENT, 0xb0, 20, 0 }, 202 + { HISTB_USB3_PIPE_CLK1, "clk_u3_pipe1", NULL, 203 + CLK_SET_RATE_PARENT, 0xb0, 19, 0 }, 204 + { HISTB_USB3_SUSPEND_CLK1, "clk_u3_suspend1", NULL, 205 + CLK_SET_RATE_PARENT, 0xb0, 18, 0 }, 189 206 }; 190 207 191 208 static struct hisi_clock_data *hi3798cv200_clk_register(
+18
drivers/clk/imx/clk-imx6ul.c
··· 68 68 static const char *epdc_pre_sels[] = { "pll2_bus", "pll3_usb_otg", "pll5_video_div", "pll2_pfd0_352m", "pll2_pfd2_396m", "pll3_pfd2_508m", }; 69 69 static const char *esai_sels[] = { "pll4_audio_div", "pll3_pfd2_508m", "pll5_video_div", "pll3_usb_otg", }; 70 70 static const char *epdc_sels[] = { "epdc_podf", "ipp_di0", "ipp_di1", "ldb_di0", "ldb_di1", }; 71 + static const char *cko1_sels[] = { "dummy", "dummy", "dummy", "dummy", "dummy", "axi", "enfc", "dummy", "dummy", 72 + "dummy", "lcdif_pix", "ahb", "ipg", "ipg_per", "ckil", "pll4_audio_div", }; 73 + static const char *cko2_sels[] = { "dummy", "dummy", "dummy", "usdhc1", "dummy", "dummy", "ecspi_root", "dummy", 74 + "dummy", "dummy", "dummy", "dummy", "dummy", "dummy", "osc", "dummy", 75 + "dummy", "usdhc2", "sai1", "sai2", "sai3", "dummy", "dummy", "can_root", 76 + "dummy", "dummy", "dummy", "dummy", "uart_serial", "spdif", "dummy", "dummy", }; 77 + static const char *cko_sels[] = { "cko1", "cko2", }; 71 78 72 79 static struct clk *clks[IMX6UL_CLK_END]; 73 80 static struct clk_onecell_data clk_data; ··· 280 273 clks[IMX6UL_CLK_LDB_DI0_DIV_SEL] = imx_clk_mux("ldb_di0", base + 0x20, 10, 1, ldb_di0_div_sels, ARRAY_SIZE(ldb_di0_div_sels)); 281 274 clks[IMX6UL_CLK_LDB_DI1_DIV_SEL] = imx_clk_mux("ldb_di1", base + 0x20, 11, 1, ldb_di1_div_sels, ARRAY_SIZE(ldb_di1_div_sels)); 282 275 276 + clks[IMX6UL_CLK_CKO1_SEL] = imx_clk_mux("cko1_sel", base + 0x60, 0, 4, cko1_sels, ARRAY_SIZE(cko1_sels)); 277 + clks[IMX6UL_CLK_CKO2_SEL] = imx_clk_mux("cko2_sel", base + 0x60, 16, 5, cko2_sels, ARRAY_SIZE(cko2_sels)); 278 + clks[IMX6UL_CLK_CKO] = imx_clk_mux("cko", base + 0x60, 8, 1, cko_sels, ARRAY_SIZE(cko_sels)); 279 + 283 280 clks[IMX6UL_CLK_LDB_DI0_DIV_3_5] = imx_clk_fixed_factor("ldb_di0_div_3_5", "ldb_di0_sel", 2, 7); 284 281 clks[IMX6UL_CLK_LDB_DI0_DIV_7] = imx_clk_fixed_factor("ldb_di0_div_7", "ldb_di0_sel", 1, 7); 285 282 clks[IMX6UL_CLK_LDB_DI1_DIV_3_5] = imx_clk_fixed_factor("ldb_di1_div_3_5", "qspi1_sel", 2, 7); ··· 326 315 clks[IMX6UL_CLK_ECSPI_PODF] = imx_clk_divider("ecspi_podf", "ecspi_sel", base + 0x38, 19, 6); 327 316 clks[IMX6UL_CLK_LCDIF_PRED] = imx_clk_divider("lcdif_pred", "lcdif_pre_sel", base + 0x38, 12, 3); 328 317 clks[IMX6UL_CLK_CSI_PODF] = imx_clk_divider("csi_podf", "csi_sel", base + 0x3c, 11, 3); 318 + 319 + clks[IMX6UL_CLK_CKO1_PODF] = imx_clk_divider("cko1_podf", "cko1_sel", base + 0x60, 4, 3); 320 + clks[IMX6UL_CLK_CKO2_PODF] = imx_clk_divider("cko2_podf", "cko2_sel", base + 0x60, 21, 3); 329 321 330 322 clks[IMX6UL_CLK_ARM] = imx_clk_busy_divider("arm", "pll1_sw", base + 0x10, 0, 3, base + 0x48, 16); 331 323 clks[IMX6UL_CLK_MMDC_PODF] = imx_clk_busy_divider("mmdc_podf", "periph2", base + 0x14, 3, 3, base + 0x48, 2); ··· 458 444 clks[IMX6UL_CLK_PWM5] = imx_clk_gate2("pwm5", "perclk", base + 0x80, 26); 459 445 clks[IMX6UL_CLK_PWM6] = imx_clk_gate2("pwm6", "perclk", base + 0x80, 28); 460 446 clks[IMX6UL_CLK_PWM7] = imx_clk_gate2("pwm7", "perclk", base + 0x80, 30); 447 + 448 + /* CCOSR */ 449 + clks[IMX6UL_CLK_CKO1] = imx_clk_gate("cko1", "cko1_podf", base + 0x60, 7); 450 + clks[IMX6UL_CLK_CKO2] = imx_clk_gate("cko2", "cko2_podf", base + 0x60, 24); 461 451 462 452 /* mask handshake of mmdc */ 463 453 writel_relaxed(BM_CCM_CCDR_MMDC_CH0_MASK, base + CCDR);
+6
drivers/clk/mediatek/Kconfig
··· 60 60 ---help--- 61 61 This driver supports Mediatek MT2701 audsys clocks. 62 62 63 + config COMMON_CLK_MT2701_G3DSYS 64 + bool "Clock driver for MediaTek MT2701 g3dsys" 65 + depends on COMMON_CLK_MT2701 66 + ---help--- 67 + This driver supports MediaTek MT2701 g3dsys clocks. 68 + 63 69 config COMMON_CLK_MT2712 64 70 bool "Clock driver for MediaTek MT2712" 65 71 depends on (ARCH_MEDIATEK && ARM64) || COMPILE_TEST
+1
drivers/clk/mediatek/Makefile
··· 9 9 obj-$(CONFIG_COMMON_CLK_MT2701_AUDSYS) += clk-mt2701-aud.o 10 10 obj-$(CONFIG_COMMON_CLK_MT2701_BDPSYS) += clk-mt2701-bdp.o 11 11 obj-$(CONFIG_COMMON_CLK_MT2701_ETHSYS) += clk-mt2701-eth.o 12 + obj-$(CONFIG_COMMON_CLK_MT2701_G3DSYS) += clk-mt2701-g3d.o 12 13 obj-$(CONFIG_COMMON_CLK_MT2701_HIFSYS) += clk-mt2701-hif.o 13 14 obj-$(CONFIG_COMMON_CLK_MT2701_IMGSYS) += clk-mt2701-img.o 14 15 obj-$(CONFIG_COMMON_CLK_MT2701_MMSYS) += clk-mt2701-mm.o
+95
drivers/clk/mediatek/clk-mt2701-g3d.c
··· 1 + // SPDX-License-Identifier: GPL-2.0 2 + /* 3 + * Copyright (c) 2018 MediaTek Inc. 4 + * Author: Sean Wang <sean.wang@mediatek.com> 5 + * 6 + */ 7 + 8 + #include <linux/clk-provider.h> 9 + #include <linux/of.h> 10 + #include <linux/of_address.h> 11 + #include <linux/of_device.h> 12 + #include <linux/platform_device.h> 13 + 14 + #include "clk-mtk.h" 15 + #include "clk-gate.h" 16 + 17 + #include <dt-bindings/clock/mt2701-clk.h> 18 + 19 + #define GATE_G3D(_id, _name, _parent, _shift) { \ 20 + .id = _id, \ 21 + .name = _name, \ 22 + .parent_name = _parent, \ 23 + .regs = &g3d_cg_regs, \ 24 + .shift = _shift, \ 25 + .ops = &mtk_clk_gate_ops_setclr, \ 26 + } 27 + 28 + static const struct mtk_gate_regs g3d_cg_regs = { 29 + .sta_ofs = 0x0, 30 + .set_ofs = 0x4, 31 + .clr_ofs = 0x8, 32 + }; 33 + 34 + static const struct mtk_gate g3d_clks[] = { 35 + GATE_G3D(CLK_G3DSYS_CORE, "g3d_core", "mfg_sel", 0), 36 + }; 37 + 38 + static int clk_mt2701_g3dsys_init(struct platform_device *pdev) 39 + { 40 + struct clk_onecell_data *clk_data; 41 + struct device_node *node = pdev->dev.of_node; 42 + int r; 43 + 44 + clk_data = mtk_alloc_clk_data(CLK_G3DSYS_NR); 45 + 46 + mtk_clk_register_gates(node, g3d_clks, ARRAY_SIZE(g3d_clks), 47 + clk_data); 48 + 49 + r = of_clk_add_provider(node, of_clk_src_onecell_get, clk_data); 50 + if (r) 51 + dev_err(&pdev->dev, 52 + "could not register clock provider: %s: %d\n", 53 + pdev->name, r); 54 + 55 + mtk_register_reset_controller(node, 1, 0xc); 56 + 57 + return r; 58 + } 59 + 60 + static const struct of_device_id of_match_clk_mt2701_g3d[] = { 61 + { 62 + .compatible = "mediatek,mt2701-g3dsys", 63 + .data = clk_mt2701_g3dsys_init, 64 + }, { 65 + /* sentinel */ 66 + } 67 + }; 68 + 69 + static int clk_mt2701_g3d_probe(struct platform_device *pdev) 70 + { 71 + int (*clk_init)(struct platform_device *); 72 + int r; 73 + 74 + clk_init = of_device_get_match_data(&pdev->dev); 75 + if (!clk_init) 76 + return -EINVAL; 77 + 78 + r = clk_init(pdev); 79 + if (r) 80 + dev_err(&pdev->dev, 81 + "could not register clock provider: %s: %d\n", 82 + pdev->name, r); 83 + 84 + return r; 85 + } 86 + 87 + static struct platform_driver clk_mt2701_g3d_drv = { 88 + .probe = clk_mt2701_g3d_probe, 89 + .driver = { 90 + .name = "clk-mt2701-g3d", 91 + .of_match_table = of_match_clk_mt2701_g3d, 92 + }, 93 + }; 94 + 95 + builtin_platform_driver(clk_mt2701_g3d_drv);
+6 -2
drivers/clk/mediatek/clk-mt2701.c
··· 46 46 340 * MHZ), 47 47 FIXED_CLK(CLK_TOP_HDMI_0_PLL340M, "hdmi_0_pll340m", "clk26m", 48 48 340 * MHZ), 49 - FIXED_CLK(CLK_TOP_HDMITX_CLKDIG_CTS, "hdmitx_dig_cts", "clk26m", 50 - 300 * MHZ), 51 49 FIXED_CLK(CLK_TOP_HADDS2_FB, "hadds2_fbclk", "clk26m", 52 50 27 * MHZ), 53 51 FIXED_CLK(CLK_TOP_WBG_DIG_416M, "wbg_dig_ck_416m", "clk26m", ··· 975 977 21, 0x2d0, 4, 0x0, 0x2d4, 0), 976 978 }; 977 979 980 + static const struct mtk_fixed_factor apmixed_fixed_divs[] = { 981 + FACTOR(CLK_APMIXED_HDMI_REF, "hdmi_ref", "tvdpll", 1, 1), 982 + }; 983 + 978 984 static int mtk_apmixedsys_init(struct platform_device *pdev) 979 985 { 980 986 struct clk_onecell_data *clk_data; ··· 989 987 return -ENOMEM; 990 988 991 989 mtk_clk_register_plls(node, apmixed_plls, ARRAY_SIZE(apmixed_plls), 990 + clk_data); 991 + mtk_clk_register_factors(apmixed_fixed_divs, ARRAY_SIZE(apmixed_fixed_divs), 992 992 clk_data); 993 993 994 994 return of_clk_add_provider(node, of_clk_src_onecell_get, clk_data);
+8
include/dt-bindings/clock/histb-clock.h
··· 62 62 #define HISTB_USB2_PHY1_REF_CLK 40 63 63 #define HISTB_USB2_PHY2_REF_CLK 41 64 64 #define HISTB_COMBPHY0_CLK 42 65 + #define HISTB_USB3_BUS_CLK 43 66 + #define HISTB_USB3_UTMI_CLK 44 67 + #define HISTB_USB3_PIPE_CLK 45 68 + #define HISTB_USB3_SUSPEND_CLK 46 69 + #define HISTB_USB3_BUS_CLK1 47 70 + #define HISTB_USB3_UTMI_CLK1 48 71 + #define HISTB_USB3_PIPE_CLK1 49 72 + #define HISTB_USB3_SUSPEND_CLK1 50 65 73 66 74 /* clocks provided by mcu CRG */ 67 75 #define HISTB_MCE_CLK 1
+20 -13
include/dt-bindings/clock/imx6ul-clock.h
··· 235 235 #define IMX6UL_CLK_CSI_PODF 222 236 236 #define IMX6UL_CLK_PLL3_120M 223 237 237 #define IMX6UL_CLK_KPP 224 238 + #define IMX6UL_CLK_CKO1_SEL 225 239 + #define IMX6UL_CLK_CKO1_PODF 226 240 + #define IMX6UL_CLK_CKO1 227 241 + #define IMX6UL_CLK_CKO2_SEL 228 242 + #define IMX6UL_CLK_CKO2_PODF 229 243 + #define IMX6UL_CLK_CKO2 230 244 + #define IMX6UL_CLK_CKO 231 238 245 239 246 /* For i.MX6ULL */ 240 - #define IMX6ULL_CLK_ESAI_PRED 225 241 - #define IMX6ULL_CLK_ESAI_PODF 226 242 - #define IMX6ULL_CLK_ESAI_EXTAL 227 243 - #define IMX6ULL_CLK_ESAI_MEM 228 244 - #define IMX6ULL_CLK_ESAI_IPG 229 245 - #define IMX6ULL_CLK_DCP_CLK 230 246 - #define IMX6ULL_CLK_EPDC_PRE_SEL 231 247 - #define IMX6ULL_CLK_EPDC_SEL 232 248 - #define IMX6ULL_CLK_EPDC_PODF 233 249 - #define IMX6ULL_CLK_EPDC_ACLK 234 250 - #define IMX6ULL_CLK_EPDC_PIX 235 251 - #define IMX6ULL_CLK_ESAI_SEL 236 252 - #define IMX6UL_CLK_END 237 247 + #define IMX6ULL_CLK_ESAI_PRED 232 248 + #define IMX6ULL_CLK_ESAI_PODF 233 249 + #define IMX6ULL_CLK_ESAI_EXTAL 234 250 + #define IMX6ULL_CLK_ESAI_MEM 235 251 + #define IMX6ULL_CLK_ESAI_IPG 236 252 + #define IMX6ULL_CLK_DCP_CLK 237 253 + #define IMX6ULL_CLK_EPDC_PRE_SEL 238 254 + #define IMX6ULL_CLK_EPDC_SEL 239 255 + #define IMX6ULL_CLK_EPDC_PODF 240 256 + #define IMX6ULL_CLK_EPDC_ACLK 241 257 + #define IMX6ULL_CLK_EPDC_PIX 242 258 + #define IMX6ULL_CLK_ESAI_SEL 243 259 + #define IMX6UL_CLK_END 244 253 260 254 261 #endif /* __DT_BINDINGS_CLOCK_IMX6UL_H */
+12 -8
include/dt-bindings/clock/mt2701-clk.h
··· 171 171 #define CLK_TOP_8BDAC 151 172 172 #define CLK_TOP_WBG_DIG_416M 152 173 173 #define CLK_TOP_DPI 153 174 - #define CLK_TOP_HDMITX_CLKDIG_CTS 154 175 - #define CLK_TOP_DSI0_LNTC_DSI 155 176 - #define CLK_TOP_AUD_EXT1 156 177 - #define CLK_TOP_AUD_EXT2 157 178 - #define CLK_TOP_NFI1X_PAD 158 179 - #define CLK_TOP_AXISEL_D4 159 180 - #define CLK_TOP_NR 160 174 + #define CLK_TOP_DSI0_LNTC_DSI 154 175 + #define CLK_TOP_AUD_EXT1 155 176 + #define CLK_TOP_AUD_EXT2 156 177 + #define CLK_TOP_NFI1X_PAD 157 178 + #define CLK_TOP_AXISEL_D4 158 179 + #define CLK_TOP_NR 159 181 180 182 181 /* APMIXEDSYS */ 183 182 ··· 193 194 #define CLK_APMIXED_HADDS2PLL 11 194 195 #define CLK_APMIXED_AUD2PLL 12 195 196 #define CLK_APMIXED_TVD2PLL 13 196 - #define CLK_APMIXED_NR 14 197 + #define CLK_APMIXED_HDMI_REF 14 198 + #define CLK_APMIXED_NR 15 197 199 198 200 /* DDRPHY */ 199 201 ··· 430 430 #define CLK_ETHSYS_I2S 7 431 431 #define CLK_ETHSYS_CRYPTO 8 432 432 #define CLK_ETHSYS_NR 9 433 + 434 + /* G3DSYS */ 435 + #define CLK_G3DSYS_CORE 1 436 + #define CLK_G3DSYS_NR 2 433 437 434 438 /* BDP */ 435 439
+3
include/dt-bindings/reset/mt2701-resets.h
··· 87 87 #define MT2701_ETHSYS_GMAC_RST 23 88 88 #define MT2701_ETHSYS_PPE_RST 31 89 89 90 + /* G3DSYS resets */ 91 + #define MT2701_G3DSYS_CORE_RST 0 92 + 90 93 #endif /* _DT_BINDINGS_RESET_CONTROLLER_MT2701 */