xref: /netbsd-src/sys/arch/arm/sunxi/sunxi_can.h (revision 6bdb7968c2a5f6966f7e79d3f23c23c92bb797a1)
1*6bdb7968Sbouyer /*	$NetBSD: sunxi_can.h,v 1.1 2018/03/07 20:55:31 bouyer Exp $	*/
2*6bdb7968Sbouyer 
3*6bdb7968Sbouyer /*-
4*6bdb7968Sbouyer  * Copyright (c) 2017,2018 The NetBSD Foundation, Inc.
5*6bdb7968Sbouyer  * All rights reserved.
6*6bdb7968Sbouyer  *
7*6bdb7968Sbouyer  * This code is derived from software contributed to The NetBSD Foundation
8*6bdb7968Sbouyer  * by Manuel Bouyer.
9*6bdb7968Sbouyer  *
10*6bdb7968Sbouyer  * Redistribution and use in source and binary forms, with or without
11*6bdb7968Sbouyer  * modification, are permitted provided that the following conditions
12*6bdb7968Sbouyer  * are met:
13*6bdb7968Sbouyer  * 1. Redistributions of source code must retain the above copyright
14*6bdb7968Sbouyer  *    notice, this list of conditions and the following disclaimer.
15*6bdb7968Sbouyer  * 2. Redistributions in binary form must reproduce the above copyright
16*6bdb7968Sbouyer  *    notice, this list of conditions and the following disclaimer in the
17*6bdb7968Sbouyer  *    documentation and/or other materials provided with the distribution.
18*6bdb7968Sbouyer  *
19*6bdb7968Sbouyer  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20*6bdb7968Sbouyer  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21*6bdb7968Sbouyer  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22*6bdb7968Sbouyer  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23*6bdb7968Sbouyer  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24*6bdb7968Sbouyer  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25*6bdb7968Sbouyer  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26*6bdb7968Sbouyer  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27*6bdb7968Sbouyer  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28*6bdb7968Sbouyer  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29*6bdb7968Sbouyer  * POSSIBILITY OF SUCH DAMAGE.
30*6bdb7968Sbouyer  */
31*6bdb7968Sbouyer 
32*6bdb7968Sbouyer /* CAN mode select register */
33*6bdb7968Sbouyer #define SUNXI_CAN_MODSEL_REG		0x00
34*6bdb7968Sbouyer #define SUNXI_CAN_MODSEL_SLEEP		__BIT(4)
35*6bdb7968Sbouyer #define SUNXI_CAN_MODSEL_ACP_FLT_MOD	__BIT(3)
36*6bdb7968Sbouyer #define SUNXI_CAN_MODSEL_LB_MOD		__BIT(2)
37*6bdb7968Sbouyer #define SUNXI_CAN_MODSEL_LST_ONLY	__BIT(1)
38*6bdb7968Sbouyer #define SUNXI_CAN_MODSEL_RST		__BIT(0)
39*6bdb7968Sbouyer 
40*6bdb7968Sbouyer /* CAN command register */
41*6bdb7968Sbouyer #define SUNXI_CAN_CMD_REG	0x04
42*6bdb7968Sbouyer #define SUNXI_CAN_CMD_BUS_OFF		__BIT(5)
43*6bdb7968Sbouyer #define SUNXI_CAN_CMD_SELF_REQ		__BIT(4)
44*6bdb7968Sbouyer #define SUNXI_CAN_CMD_CLR_OR		__BIT(3)
45*6bdb7968Sbouyer #define SUNXI_CAN_CMD_REL_RX_BUF		__BIT(2)
46*6bdb7968Sbouyer #define SUNXI_CAN_CMD_ABT_REQ		__BIT(1)
47*6bdb7968Sbouyer #define SUNXI_CAN_CMD_TANS_REQ		__BIT(0)
48*6bdb7968Sbouyer 
49*6bdb7968Sbouyer /* CAN status register */
50*6bdb7968Sbouyer #define SUNXI_CAN_STA_REG	0x08
51*6bdb7968Sbouyer #define SUNXI_CAN_STA_ERR_CODE		__BITS(23,22)
52*6bdb7968Sbouyer #define SUNXI_CAN_STA_ERR_CODE_BIT		0
53*6bdb7968Sbouyer #define SUNXI_CAN_STA_ERR_CODE_FORM		1
54*6bdb7968Sbouyer #define SUNXI_CAN_STA_ERR_CODE_STUFF		2
55*6bdb7968Sbouyer #define SUNXI_CAN_STA_ERR_CODE_OTHER		3
56*6bdb7968Sbouyer #define SUNXI_CAN_STA_ERR_DIR		_BIT(21)
57*6bdb7968Sbouyer #define SUNXI_CAN_STA_ERR_SEG_CODE	__BITS(20,16)
58*6bdb7968Sbouyer #define SUNXI_CAN_STA_ARB_LOST		__BITS(12,8)
59*6bdb7968Sbouyer #define SUNXI_CAN_STA_BUS		__BIT(7)
60*6bdb7968Sbouyer #define SUNXI_CAN_STA_ERR		__BIT(6)
61*6bdb7968Sbouyer #define SUNXI_CAN_STA_TX 		__BIT(5)
62*6bdb7968Sbouyer #define SUNXI_CAN_STA_RX 		__BIT(4)
63*6bdb7968Sbouyer #define SUNXI_CAN_STA_TX_OVER		__BIT(3)
64*6bdb7968Sbouyer #define SUNXI_CAN_STA_TX_RDY		__BIT(2)
65*6bdb7968Sbouyer #define SUNXI_CAN_STA_DATA_OR		__BIT(1)
66*6bdb7968Sbouyer #define SUNXI_CAN_STA_RX_RDY		__BIT(0)
67*6bdb7968Sbouyer 
68*6bdb7968Sbouyer /* CAN interrupt register */
69*6bdb7968Sbouyer #define SUNXI_CAN_INT_REG	0x0c
70*6bdb7968Sbouyer #define SUNXI_CAN_INT_BERR		__BIT(7)
71*6bdb7968Sbouyer #define SUNXI_CAN_INT_ARB_LOST		__BIT(6)
72*6bdb7968Sbouyer #define SUNXI_CAN_INT_ERR_PASSIVE	__BIT(5)
73*6bdb7968Sbouyer #define SUNXI_CAN_INT_WAKEUP		__BIT(4)
74*6bdb7968Sbouyer #define SUNXI_CAN_INT_DATA_OR		__BIT(3)
75*6bdb7968Sbouyer #define SUNXI_CAN_INT_ERR		__BIT(2)
76*6bdb7968Sbouyer #define SUNXI_CAN_INT_TX_FLAG		__BIT(1)
77*6bdb7968Sbouyer #define SUNXI_CAN_INT_RX_FLAG		__BIT(0)
78*6bdb7968Sbouyer 
79*6bdb7968Sbouyer /* CAN interrupt enable register */
80*6bdb7968Sbouyer #define SUNXI_CAN_INTE_REG	0x10
81*6bdb7968Sbouyer 
82*6bdb7968Sbouyer /* CAN bus timing register */
83*6bdb7968Sbouyer #define SUNXI_CAN_BUS_TIME_REG	0x14
84*6bdb7968Sbouyer #define SUNXI_CAN_BUS_TIME_SAM		__BIT(23)
85*6bdb7968Sbouyer #define SUNXI_CAN_BUS_TIME_PHSEG2	__BITS(22,20)
86*6bdb7968Sbouyer #define SUNXI_CAN_BUS_TIME_PHSEG1	__BITS(19,16)
87*6bdb7968Sbouyer #define SUNXI_CAN_BUS_TIME_SJW		__BITS(15,14)
88*6bdb7968Sbouyer #define SUNXI_CAN_BUS_TIME_TQ_BRP	__BITS(9,0)
89*6bdb7968Sbouyer 
90*6bdb7968Sbouyer /* CAN tx error warning limit register */
91*6bdb7968Sbouyer #define SUNXI_CAN_EWL_REG	0x18
92*6bdb7968Sbouyer #define SUNXI_CAN_EWL_ERR_WRN_LMT	__BITS(7,0)
93*6bdb7968Sbouyer 
94*6bdb7968Sbouyer /* CAN error counter register */
95*6bdb7968Sbouyer #define SUNXI_CAN_REC_REG	0x1c
96*6bdb7968Sbouyer #define SUNXI_CAN_REC_RX_ERR_CNT		__BITS(23,16)
97*6bdb7968Sbouyer #define SUNXI_CAN_REC_TX_ERR_CNT		__BITS(7,0)
98*6bdb7968Sbouyer 
99*6bdb7968Sbouyer /* CAN receive message register */
100*6bdb7968Sbouyer #define SUNXI_CAN_RMSGC_REG	0x20
101*6bdb7968Sbouyer #define SUNXI_CAN_RMSGC_RX_MSG_CNT	__BITS(7,0)
102*6bdb7968Sbouyer 
103*6bdb7968Sbouyer /* CAN receive buffer start address register */
104*6bdb7968Sbouyer #define SUNXI_CAN_RSADDR_REG	0x24
105*6bdb7968Sbouyer #define SUNXI_CAN_RSADDR_RX_BUF_SADDR	__BITS(5,0)
106*6bdb7968Sbouyer 
107*6bdb7968Sbouyer /* CAN rx/tx message buffer 0 register */
108*6bdb7968Sbouyer #define SUNXI_CAN_TXBUF0_REG	0x40
109*6bdb7968Sbouyer #define SUNXI_CAN_TXBUF0_EFF		__BIT(7)
110*6bdb7968Sbouyer #define SUNXI_CAN_TXBUF0_RTR		__BIT(6)
111*6bdb7968Sbouyer #define SUNXI_CAN_TXBUF0_DL		__BITS(3,0)
112*6bdb7968Sbouyer 
113*6bdb7968Sbouyer /* CAN rx/tx message buffer registers */
114*6bdb7968Sbouyer #define SUNXI_CAN_TXBUF1_REG	0x44
115*6bdb7968Sbouyer #define SUNXI_CAN_TXBUF2_REG	0x48
116*6bdb7968Sbouyer #define SUNXI_CAN_TXBUF3_REG	0x4c
117*6bdb7968Sbouyer #define SUNXI_CAN_TXBUF4_REG	0x50
118*6bdb7968Sbouyer #define SUNXI_CAN_TXBUF5_REG	0x54
119*6bdb7968Sbouyer #define SUNXI_CAN_TXBUF6_REG	0x58
120*6bdb7968Sbouyer #define SUNXI_CAN_TXBUF7_REG	0x5c
121*6bdb7968Sbouyer #define SUNXI_CAN_TXBUF8_REG	0x60
122*6bdb7968Sbouyer #define SUNXI_CAN_TXBUF9_REG	0x64
123*6bdb7968Sbouyer #define SUNXI_CAN_TXBUF10_REG	0x68
124*6bdb7968Sbouyer #define SUNXI_CAN_TXBUF11_REG	0x6c
125*6bdb7968Sbouyer #define SUNXI_CAN_TXBUF12_REG	0x70
126*6bdb7968Sbouyer 
127*6bdb7968Sbouyer /* CAN acceptance code 0 register */
128*6bdb7968Sbouyer #define SUNXI_CAN_ACPC		0x40
129*6bdb7968Sbouyer 
130*6bdb7968Sbouyer /* CAN acceptance mask 0 register */
131*6bdb7968Sbouyer #define SUNXI_CAN_ACPM		0x44
132*6bdb7968Sbouyer 
133*6bdb7968Sbouyer /* CAN transmit buffer for read back registers */
134*6bdb7968Sbouyer #define SUNXI_CAN_RBUF_RBACK0	0x180
135*6bdb7968Sbouyer #define SUNXI_CAN_RBUF_RBACK1	0x184
136*6bdb7968Sbouyer #define SUNXI_CAN_RBUF_RBACK2	0x188
137*6bdb7968Sbouyer #define SUNXI_CAN_RBUF_RBACK3	0x18c
138*6bdb7968Sbouyer #define SUNXI_CAN_RBUF_RBACK4	0x190
139*6bdb7968Sbouyer #define SUNXI_CAN_RBUF_RBACK5	0x194
140*6bdb7968Sbouyer #define SUNXI_CAN_RBUF_RBACK6	0x198
141*6bdb7968Sbouyer #define SUNXI_CAN_RBUF_RBACK7	0x19c
142*6bdb7968Sbouyer #define SUNXI_CAN_RBUF_RBACK8	0x1a0
143*6bdb7968Sbouyer #define SUNXI_CAN_RBUF_RBACK9	0x1a4
144*6bdb7968Sbouyer #define SUNXI_CAN_RBUF_RBACK10	0x1a8
145*6bdb7968Sbouyer #define SUNXI_CAN_RBUF_RBACK11	0x1ac
146*6bdb7968Sbouyer #define SUNXI_CAN_RBUF_RBACK12	0x1b0
147