]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/arm64/rockchip/clk/rk_cru.h
MFV r345988:
[FreeBSD/FreeBSD.git] / sys / arm64 / rockchip / clk / rk_cru.h
1 /*-
2  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3  *
4  * Copyright (c) 2018 Emmanuel Vadot <manu@freebsd.org>
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26  * SUCH DAMAGE.
27  *
28  * $FreeBSD$
29  */
30
31 #ifndef __RK_CRU_H__
32 #define __RK_CRU_H__
33
34 #include <arm64/rockchip/clk/rk_clk_armclk.h>
35 #include <arm64/rockchip/clk/rk_clk_composite.h>
36 #include <arm64/rockchip/clk/rk_clk_gate.h>
37 #include <arm64/rockchip/clk/rk_clk_mux.h>
38 #include <arm64/rockchip/clk/rk_clk_pll.h>
39
40 struct rk_cru_reset {
41         uint32_t        offset;
42         uint32_t        shift;
43 };
44
45 struct rk_cru_gate {
46         const char      *name;
47         const char      *parent_name;
48         uint32_t        id;
49         uint32_t        offset;
50         uint32_t        shift;
51 };
52
53 #define CRU_GATE(idx, clkname, pname, o, s)     \
54         {                               \
55                 .id = idx,                      \
56                 .name = clkname,                \
57                 .parent_name = pname,           \
58                 .offset = o,                    \
59                 .shift = s,                     \
60         },
61
62 enum rk_clk_type {
63         RK_CLK_UNDEFINED = 0,
64         RK3328_CLK_PLL,
65         RK3399_CLK_PLL,
66         RK_CLK_COMPOSITE,
67         RK_CLK_MUX,
68         RK_CLK_ARMCLK,
69 };
70
71 struct rk_clk {
72         enum rk_clk_type        type;
73         union {
74                 struct rk_clk_pll_def           *pll;
75                 struct rk_clk_composite_def     *composite;
76                 struct rk_clk_mux_def           *mux;
77                 struct rk_clk_armclk_def        *armclk;
78         } clk;
79 };
80
81 struct rk_cru_softc {
82         device_t                dev;
83         struct resource         *res;
84         struct clkdom           *clkdom;
85         struct mtx              mtx;
86         int                     type;
87         struct rk_cru_reset     *resets;
88         int                     nresets;
89         struct rk_cru_gate      *gates;
90         int                     ngates;
91         struct rk_clk           *clks;
92         int                     nclks;
93         struct rk_clk_armclk_def        *armclk;
94         struct rk_clk_armclk_rates      *armclk_rates;
95         int                     narmclk_rates;
96 };
97
98 DECLARE_CLASS(rk_cru_driver);
99
100 int     rk_cru_attach(device_t dev);
101
102 #endif /* __RK_CRU_H__ */