Path: blob/main/sys/dev/clk/starfive/jh7110_clk.h
106915 views
/*-1* SPDX-License-Identifier: BSD-2-Clause2*3* Copyright (c) 2024 Jari Sihvola <[email protected]>4*/56#ifndef _JH7110_CLK_H_7#define _JH7110_CLK_H_89#include <dev/clk/clk.h>1011#define JH7110_CLK_HAS_GATE 0x0112#define JH7110_CLK_HAS_MUX 0x0213#define JH7110_CLK_HAS_DIV 0x0414#define JH7110_CLK_HAS_INV 0x081516#define AONCRG_RESET_SELECTOR 0x3817#define AONCRG_RESET_STATUS 0x3c18#define STGCRG_RESET_SELECTOR 0x7419#define STGCRG_RESET_STATUS 0x7820#define SYSCRG_RESET_SELECTOR 0x2f821#define SYSCRG_RESET_STATUS 0x3082223struct jh7110_clkgen_softc {24struct mtx mtx;25struct clkdom *clkdom;26struct resource *mem_res;27uint32_t reset_status_offset;28uint32_t reset_selector_offset;29};3031struct jh7110_clk_def {32struct clknode_init_def clkdef;33uint32_t offset;34uint32_t flags;35uint64_t d_max;36};3738#define JH7110_CLK(_idx, _name, _pn, _d_max, _flags) \39{ \40.clkdef.id = _idx, \41.clkdef.name = _name, \42.clkdef.parent_names = _pn, \43.clkdef.parent_cnt = nitems(_pn), \44.clkdef.flags = CLK_NODE_STATIC_STRINGS, \45.flags = _flags, \46.d_max = _d_max, \47}4849#define JH7110_GATE(_idx, _name, _pn) \50JH7110_CLK(_idx, _name, _pn, 0, JH7110_CLK_HAS_GATE)51#define JH7110_MUX(_idx, _name, _pn) \52JH7110_CLK(_idx, _name, _pn, 0, JH7110_CLK_HAS_MUX)53#define JH7110_DIV(_idx, _name, _pn, _d_max) \54JH7110_CLK(_idx, _name, _pn, _d_max, JH7110_CLK_HAS_DIV)55#define JH7110_GATEMUX(_idx, _name, _pn) \56JH7110_CLK(_idx, _name, _pn, 0, JH7110_CLK_HAS_GATE | \57JH7110_CLK_HAS_MUX)58#define JH7110_GATEDIV(_idx, _name, _pn, _d_max) \59JH7110_CLK(_idx, _name, _pn, _d_max, JH7110_CLK_HAS_GATE | \60JH7110_CLK_HAS_DIV)61#define JH7110_INV(_idx, _name, _pn) \62JH7110_CLK(_idx, _name, _pn, 0, JH7110_CLK_HAS_INV)6364int jh7110_clk_register(struct clkdom *clkdom,65const struct jh7110_clk_def *clkdef);66int jh7110_ofw_map(struct clkdom *clkdom, uint32_t ncells, phandle_t *cells,67struct clknode **clk);68int jh7110_reset_is_asserted(device_t dev, intptr_t id, bool *reset);69int jh7110_reset_assert(device_t dev, intptr_t id, bool assert);7071#endif /* _JH7110_CLK_H_ */727374