170fa8954SSerge Semin /* SPDX-License-Identifier: GPL-2.0-only */ 270fa8954SSerge Semin /* 370fa8954SSerge Semin * Copyright (C) 2021 BAIKAL ELECTRONICS, JSC 470fa8954SSerge Semin * 570fa8954SSerge Semin * Baikal-T1 CCU Resets interface driver 670fa8954SSerge Semin */ 770fa8954SSerge Semin #ifndef __CLK_BT1_CCU_RST_H__ 870fa8954SSerge Semin #define __CLK_BT1_CCU_RST_H__ 970fa8954SSerge Semin 1070fa8954SSerge Semin #include <linux/of.h> 1170fa8954SSerge Semin #include <linux/regmap.h> 1270fa8954SSerge Semin #include <linux/reset-controller.h> 1370fa8954SSerge Semin 1470fa8954SSerge Semin struct ccu_rst_info; 1570fa8954SSerge Semin 1670fa8954SSerge Semin /* 17*fa6bd541SSerge Semin * enum ccu_rst_type - CCU Reset types 18*fa6bd541SSerge Semin * @CCU_RST_TRIG: Self-deasserted reset signal. 19*fa6bd541SSerge Semin * @CCU_RST_DIR: Directly controlled reset signal. 20*fa6bd541SSerge Semin */ 21*fa6bd541SSerge Semin enum ccu_rst_type { 22*fa6bd541SSerge Semin CCU_RST_TRIG, 23*fa6bd541SSerge Semin CCU_RST_DIR, 24*fa6bd541SSerge Semin }; 25*fa6bd541SSerge Semin 26*fa6bd541SSerge Semin /* 2770fa8954SSerge Semin * struct ccu_rst_init_data - CCU Resets initialization data 2870fa8954SSerge Semin * @sys_regs: Baikal-T1 System Controller registers map. 2970fa8954SSerge Semin * @np: Pointer to the node with the System CCU block. 3070fa8954SSerge Semin */ 3170fa8954SSerge Semin struct ccu_rst_init_data { 3270fa8954SSerge Semin struct regmap *sys_regs; 3370fa8954SSerge Semin struct device_node *np; 3470fa8954SSerge Semin }; 3570fa8954SSerge Semin 3670fa8954SSerge Semin /* 3770fa8954SSerge Semin * struct ccu_rst - CCU Reset descriptor 3870fa8954SSerge Semin * @rcdev: Reset controller descriptor. 3970fa8954SSerge Semin * @sys_regs: Baikal-T1 System Controller registers map. 4070fa8954SSerge Semin * @rsts_info: Reset flag info (base address and mask). 4170fa8954SSerge Semin */ 4270fa8954SSerge Semin struct ccu_rst { 4370fa8954SSerge Semin struct reset_controller_dev rcdev; 4470fa8954SSerge Semin struct regmap *sys_regs; 4570fa8954SSerge Semin const struct ccu_rst_info *rsts_info; 4670fa8954SSerge Semin }; 4770fa8954SSerge Semin #define to_ccu_rst(_rcdev) container_of(_rcdev, struct ccu_rst, rcdev) 4870fa8954SSerge Semin 4970fa8954SSerge Semin #ifdef CONFIG_CLK_BT1_CCU_RST 5070fa8954SSerge Semin 5170fa8954SSerge Semin struct ccu_rst *ccu_rst_hw_register(const struct ccu_rst_init_data *init); 5270fa8954SSerge Semin 5370fa8954SSerge Semin void ccu_rst_hw_unregister(struct ccu_rst *rst); 5470fa8954SSerge Semin 5570fa8954SSerge Semin #else 5670fa8954SSerge Semin 5770fa8954SSerge Semin static inline ccu_rst_hw_register(const struct ccu_rst_init_data * init)5870fa8954SSerge Seminstruct ccu_rst *ccu_rst_hw_register(const struct ccu_rst_init_data *init) 5970fa8954SSerge Semin { 6070fa8954SSerge Semin return NULL; 6170fa8954SSerge Semin } 6270fa8954SSerge Semin ccu_rst_hw_unregister(struct ccu_rst * rst)6370fa8954SSerge Seminstatic inline void ccu_rst_hw_unregister(struct ccu_rst *rst) {} 6470fa8954SSerge Semin 6570fa8954SSerge Semin #endif 6670fa8954SSerge Semin 6770fa8954SSerge Semin #endif /* __CLK_BT1_CCU_RST_H__ */ 68