xref: /freebsd/sys/contrib/alpine-hal/al_hal_udma_regs.h (revision 2414e86439f4c53aff73d1afe0453fb48145d9e5)
1*49b49cdaSZbigniew Bodek /*-
2*49b49cdaSZbigniew Bodek *******************************************************************************
3*49b49cdaSZbigniew Bodek Copyright (C) 2015 Annapurna Labs Ltd.
4*49b49cdaSZbigniew Bodek 
5*49b49cdaSZbigniew Bodek This file may be licensed under the terms of the Annapurna Labs Commercial
6*49b49cdaSZbigniew Bodek License Agreement.
7*49b49cdaSZbigniew Bodek 
8*49b49cdaSZbigniew Bodek Alternatively, this file can be distributed under the terms of the GNU General
9*49b49cdaSZbigniew Bodek Public License V2 as published by the Free Software Foundation and can be
10*49b49cdaSZbigniew Bodek found at http://www.gnu.org/licenses/gpl-2.0.html
11*49b49cdaSZbigniew Bodek 
12*49b49cdaSZbigniew Bodek Alternatively, redistribution and use in source and binary forms, with or
13*49b49cdaSZbigniew Bodek without modification, are permitted provided that the following conditions are
14*49b49cdaSZbigniew Bodek met:
15*49b49cdaSZbigniew Bodek 
16*49b49cdaSZbigniew Bodek     *     Redistributions of source code must retain the above copyright notice,
17*49b49cdaSZbigniew Bodek this list of conditions and the following disclaimer.
18*49b49cdaSZbigniew Bodek 
19*49b49cdaSZbigniew Bodek     *     Redistributions in binary form must reproduce the above copyright
20*49b49cdaSZbigniew Bodek notice, this list of conditions and the following disclaimer in
21*49b49cdaSZbigniew Bodek the documentation and/or other materials provided with the
22*49b49cdaSZbigniew Bodek distribution.
23*49b49cdaSZbigniew Bodek 
24*49b49cdaSZbigniew Bodek THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
25*49b49cdaSZbigniew Bodek ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
26*49b49cdaSZbigniew Bodek WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
27*49b49cdaSZbigniew Bodek DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
28*49b49cdaSZbigniew Bodek ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
29*49b49cdaSZbigniew Bodek (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
30*49b49cdaSZbigniew Bodek LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
31*49b49cdaSZbigniew Bodek ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
32*49b49cdaSZbigniew Bodek (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
33*49b49cdaSZbigniew Bodek SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34*49b49cdaSZbigniew Bodek 
35*49b49cdaSZbigniew Bodek *******************************************************************************/
36*49b49cdaSZbigniew Bodek 
37*49b49cdaSZbigniew Bodek /**
38*49b49cdaSZbigniew Bodek  *  @{
39*49b49cdaSZbigniew Bodek  * @file   al_hal_udma_regs.h
40*49b49cdaSZbigniew Bodek  *
41*49b49cdaSZbigniew Bodek  * @brief  udma registers definition
42*49b49cdaSZbigniew Bodek  *
43*49b49cdaSZbigniew Bodek  *
44*49b49cdaSZbigniew Bodek  */
45*49b49cdaSZbigniew Bodek #ifndef __AL_HAL_UDMA_REG_H
46*49b49cdaSZbigniew Bodek #define __AL_HAL_UDMA_REG_H
47*49b49cdaSZbigniew Bodek 
48*49b49cdaSZbigniew Bodek #include "al_hal_udma_regs_m2s.h"
49*49b49cdaSZbigniew Bodek #include "al_hal_udma_regs_s2m.h"
50*49b49cdaSZbigniew Bodek #include "al_hal_udma_regs_gen.h"
51*49b49cdaSZbigniew Bodek 
52*49b49cdaSZbigniew Bodek #define AL_UDMA_REV_ID_REV0   0
53*49b49cdaSZbigniew Bodek #define AL_UDMA_REV_ID_REV1   1
54*49b49cdaSZbigniew Bodek #define AL_UDMA_REV_ID_REV2   2
55*49b49cdaSZbigniew Bodek 
56*49b49cdaSZbigniew Bodek #ifdef __cplusplus
57*49b49cdaSZbigniew Bodek extern "C" {
58*49b49cdaSZbigniew Bodek #endif
59*49b49cdaSZbigniew Bodek 
60*49b49cdaSZbigniew Bodek /** UDMA registers, either m2s or s2m */
61*49b49cdaSZbigniew Bodek union udma_regs {
62*49b49cdaSZbigniew Bodek 	struct udma_m2s_regs m2s;
63*49b49cdaSZbigniew Bodek 	struct udma_s2m_regs s2m;
64*49b49cdaSZbigniew Bodek };
65*49b49cdaSZbigniew Bodek 
66*49b49cdaSZbigniew Bodek struct unit_regs {
67*49b49cdaSZbigniew Bodek 	struct udma_m2s_regs m2s;
68*49b49cdaSZbigniew Bodek 	uint32_t rsrvd0[(0x10000 - sizeof(struct udma_m2s_regs)) >> 2];
69*49b49cdaSZbigniew Bodek 	struct udma_s2m_regs s2m;
70*49b49cdaSZbigniew Bodek 	uint32_t rsrvd1[((0x1C000 - 0x10000) - sizeof(struct udma_s2m_regs)) >> 2];
71*49b49cdaSZbigniew Bodek 	struct udma_gen_regs gen;
72*49b49cdaSZbigniew Bodek };
73*49b49cdaSZbigniew Bodek 
74*49b49cdaSZbigniew Bodek /** UDMA submission and completion registers, M2S and S2M UDMAs have same stucture */
75*49b49cdaSZbigniew Bodek struct udma_rings_regs {
76*49b49cdaSZbigniew Bodek 	uint32_t rsrvd0[8];
77*49b49cdaSZbigniew Bodek 	uint32_t cfg;		/* Descriptor ring configuration */
78*49b49cdaSZbigniew Bodek 	uint32_t status;	/* Descriptor ring status and information */
79*49b49cdaSZbigniew Bodek 	uint32_t drbp_low;	/* Descriptor Ring Base Pointer [31:4] */
80*49b49cdaSZbigniew Bodek 	uint32_t drbp_high;	/* Descriptor Ring Base Pointer [63:32] */
81*49b49cdaSZbigniew Bodek 	uint32_t drl;		/* Descriptor Ring Length[23:2] */
82*49b49cdaSZbigniew Bodek 	uint32_t drhp;		/* Descriptor Ring Head Pointer */
83*49b49cdaSZbigniew Bodek 	uint32_t drtp_inc;	/* Descriptor Tail Pointer increment */
84*49b49cdaSZbigniew Bodek 	uint32_t drtp;		/* Descriptor Tail Pointer */
85*49b49cdaSZbigniew Bodek 	uint32_t dcp;		/* Descriptor Current Pointer */
86*49b49cdaSZbigniew Bodek 	uint32_t crbp_low;	/* Completion Ring Base Pointer [31:4] */
87*49b49cdaSZbigniew Bodek 	uint32_t crbp_high;	/* Completion Ring Base Pointer [63:32] */
88*49b49cdaSZbigniew Bodek 	uint32_t crhp;		/* Completion Ring Head Pointer */
89*49b49cdaSZbigniew Bodek 	uint32_t crhp_internal;	/* Completion Ring Head Pointer internal, before AX ... */
90*49b49cdaSZbigniew Bodek };
91*49b49cdaSZbigniew Bodek 
92*49b49cdaSZbigniew Bodek /** M2S and S2M generic structure of Q registers */
93*49b49cdaSZbigniew Bodek union udma_q_regs {
94*49b49cdaSZbigniew Bodek 	struct udma_rings_regs	rings;
95*49b49cdaSZbigniew Bodek 	struct udma_m2s_q	m2s_q;
96*49b49cdaSZbigniew Bodek 	struct udma_s2m_q	s2m_q;
97*49b49cdaSZbigniew Bodek };
98*49b49cdaSZbigniew Bodek 
99*49b49cdaSZbigniew Bodek #ifdef __cplusplus
100*49b49cdaSZbigniew Bodek }
101*49b49cdaSZbigniew Bodek #endif
102*49b49cdaSZbigniew Bodek 
103*49b49cdaSZbigniew Bodek #endif /* __AL_HAL_UDMA_REG_H */
104*49b49cdaSZbigniew Bodek /** @} end of UDMA group */
105