xref: /openbmc/linux/drivers/clk/baikal-t1/ccu-rst.h (revision fa6bd541)
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 Semin struct 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 Semin static 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