]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/arm64/rockchip/clk/rk_cru.h
Upgrade to OpenSSH 7.8p1.
[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         RK_CLK_PLL,
65         RK_CLK_COMPOSITE,
66         RK_CLK_MUX,
67         RK_CLK_ARMCLK,
68 };
69
70 struct rk_clk {
71         enum rk_clk_type        type;
72         union {
73                 struct rk_clk_pll_def           *pll;
74                 struct rk_clk_composite_def     *composite;
75                 struct rk_clk_mux_def           *mux;
76                 struct rk_clk_armclk_def        *armclk;
77         } clk;
78 };
79
80 struct rk_cru_softc {
81         device_t                dev;
82         struct resource         *res;
83         struct clkdom           *clkdom;
84         struct mtx              mtx;
85         int                     type;
86         struct rk_cru_reset     *resets;
87         int                     nresets;
88         struct rk_cru_gate      *gates;
89         int                     ngates;
90         struct rk_clk           *clks;
91         int                     nclks;
92         struct rk_clk_armclk_def        *armclk;
93         struct rk_clk_armclk_rates      *armclk_rates;
94         int                     narmclk_rates;
95 };
96
97 DECLARE_CLASS(rk_cru_driver);
98
99 int     rk_cru_attach(device_t dev);
100
101 #endif /* __RK_CRU_H__ */