1 // SPDX-License-Identifier: GPL-2.0+ 2 /* 3 * Copyright (C) 2018 Amarula Solutions. 4 * Author: Jagan Teki <jagan@amarulasolutions.com> 5 */ 6 7 #ifndef _ASM_ARCH_CCU_H 8 #define _ASM_ARCH_CCU_H 9 10 /** 11 * enum ccu_flags - ccu clock/reset flags 12 * 13 * @CCU_CLK_F_IS_VALID: is given clock gate is valid? 14 * @CCU_RST_F_IS_VALID: is given reset control is valid? 15 */ 16 enum ccu_flags { 17 CCU_CLK_F_IS_VALID = BIT(0), 18 CCU_RST_F_IS_VALID = BIT(1), 19 }; 20 21 /** 22 * struct ccu_clk_gate - ccu clock gate 23 * @off: gate offset 24 * @bit: gate bit 25 * @flags: ccu clock gate flags 26 */ 27 struct ccu_clk_gate { 28 u16 off; 29 u32 bit; 30 enum ccu_flags flags; 31 }; 32 33 #define GATE(_off, _bit) { \ 34 .off = _off, \ 35 .bit = _bit, \ 36 .flags = CCU_CLK_F_IS_VALID, \ 37 } 38 39 /** 40 * struct ccu_reset - ccu reset 41 * @off: reset offset 42 * @bit: reset bit 43 * @flags: ccu reset control flags 44 */ 45 struct ccu_reset { 46 u16 off; 47 u32 bit; 48 enum ccu_flags flags; 49 }; 50 51 #define RESET(_off, _bit) { \ 52 .off = _off, \ 53 .bit = _bit, \ 54 .flags = CCU_RST_F_IS_VALID, \ 55 } 56 57 /** 58 * struct ccu_desc - clock control unit descriptor 59 * 60 * @gates: clock gates 61 * @resets: reset unit 62 */ 63 struct ccu_desc { 64 const struct ccu_clk_gate *gates; 65 const struct ccu_reset *resets; 66 }; 67 68 /** 69 * struct ccu_priv - sunxi clock control unit 70 * 71 * @base: base address 72 * @desc: ccu descriptor 73 */ 74 struct ccu_priv { 75 void *base; 76 const struct ccu_desc *desc; 77 }; 78 79 /** 80 * sunxi_clk_probe - common sunxi clock probe 81 * @dev: clock device 82 */ 83 int sunxi_clk_probe(struct udevice *dev); 84 85 extern struct clk_ops sunxi_clk_ops; 86 87 /** 88 * sunxi_reset_bind() - reset binding 89 * 90 * @dev: reset device 91 * @count: reset count 92 * @return 0 success, or error value 93 */ 94 int sunxi_reset_bind(struct udevice *dev, ulong count); 95 96 #endif /* _ASM_ARCH_CCU_H */ 97