1263295Sadrian/*
2263295Sadrian * Copyright (c) 2014 Adrian Chadd <adrian@FreeBSD.org>.
3263295Sadrian *  All rights reserved.
4263295Sadrian *
5263295Sadrian * Redistribution and use in source and binary forms, with or without
6263295Sadrian * modification, are permitted provided that the following conditions
7263295Sadrian * are met:
8263295Sadrian * 1. Redistributions of source code must retain the above copyright
9263295Sadrian *    notice, this list of conditions and the following disclaimer.
10263295Sadrian * 2. Redistributions in binary form must reproduce the above copyright
11263295Sadrian *    notice, this list of conditions and the following disclaimer in the
12263295Sadrian *    documentation and/or other materials provided with the distribution.
13263295Sadrian *
14263295Sadrian * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15263295Sadrian * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16263295Sadrian * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17263295Sadrian * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18263295Sadrian * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19263295Sadrian * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20263295Sadrian * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21263295Sadrian * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22263295Sadrian * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23263295Sadrian * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24263295Sadrian * SUCH DAMAGE.
25263295Sadrian *
26263295Sadrian * $FreeBSD: releng/11.0/sys/mips/atheros/ar934x_nfcreg.h 263295 2014-03-18 12:18:35Z adrian $
27263295Sadrian */
28263295Sadrian/*
29263295Sadrian * Register definitions for the built-in NAND controller
30263295Sadrian * of the Atheros AR934x and QCA955x SoCs.
31263295Sadrian *
32263295Sadrian * This file is based on the AR934x SoC driver from OpenWRT.
33263295Sadrian *
34263295Sadrian * Copyright (C) 2011-2013 Gabor Juhos <juhosg@openwrt.org>
35263295Sadrian *
36263295Sadrian * Used with permission.
37263295Sadrian */
38263295Sadrian#ifndef	__AR934X_NFCREG_H__
39263295Sadrian#define	__AR934X_NFCREG_H__
40263295Sadrian
41263295Sadrian#define	BIT(x)		(1 << (x))
42263295Sadrian
43263295Sadrian#define AR934X_NFC_REG_CMD		0x00
44263295Sadrian#define AR934X_NFC_REG_CTRL		0x04
45263295Sadrian#define AR934X_NFC_REG_STATUS		0x08
46263295Sadrian#define AR934X_NFC_REG_INT_MASK		0x0c
47263295Sadrian#define AR934X_NFC_REG_INT_STATUS	0x10
48263295Sadrian#define AR934X_NFC_REG_ECC_CTRL		0x14
49263295Sadrian#define AR934X_NFC_REG_ECC_OFFSET	0x18
50263295Sadrian#define AR934X_NFC_REG_ADDR0_0		0x1c
51263295Sadrian#define AR934X_NFC_REG_ADDR0_1		0x24
52263295Sadrian#define AR934X_NFC_REG_ADDR1_0		0x20
53263295Sadrian#define AR934X_NFC_REG_ADDR1_1		0x28
54263295Sadrian#define AR934X_NFC_REG_SPARE_SIZE	0x30
55263295Sadrian#define AR934X_NFC_REG_PROTECT		0x38
56263295Sadrian#define AR934X_NFC_REG_LOOKUP_EN	0x40
57263295Sadrian#define AR934X_NFC_REG_LOOKUP(_x)	(0x44 + (_i) * 4)
58263295Sadrian#define AR934X_NFC_REG_DMA_ADDR		0x64
59263295Sadrian#define AR934X_NFC_REG_DMA_COUNT	0x68
60263295Sadrian#define AR934X_NFC_REG_DMA_CTRL		0x6c
61263295Sadrian#define AR934X_NFC_REG_MEM_CTRL		0x80
62263295Sadrian#define AR934X_NFC_REG_DATA_SIZE	0x84
63263295Sadrian#define AR934X_NFC_REG_READ_STATUS	0x88
64263295Sadrian#define AR934X_NFC_REG_TIME_SEQ		0x8c
65263295Sadrian#define AR934X_NFC_REG_TIMINGS_ASYN	0x90
66263295Sadrian#define AR934X_NFC_REG_TIMINGS_SYN	0x94
67263295Sadrian#define AR934X_NFC_REG_FIFO_DATA	0x98
68263295Sadrian#define AR934X_NFC_REG_TIME_MODE	0x9c
69263295Sadrian#define AR934X_NFC_REG_DMA_ADDR_OFFS	0xa0
70263295Sadrian#define AR934X_NFC_REG_FIFO_INIT	0xb0
71263295Sadrian#define AR934X_NFC_REG_GEN_SEQ_CTRL	0xb4
72263295Sadrian
73263295Sadrian#define AR934X_NFC_CMD_CMD_SEQ_S		0
74263295Sadrian#define AR934X_NFC_CMD_CMD_SEQ_M		0x3f
75263295Sadrian#define   AR934X_NFC_CMD_SEQ_1C			0x00
76263295Sadrian#define   AR934X_NFC_CMD_SEQ_ERASE		0x0e
77263295Sadrian#define   AR934X_NFC_CMD_SEQ_12			0x0c
78263295Sadrian#define   AR934X_NFC_CMD_SEQ_1C1AXR		0x21
79263295Sadrian#define   AR934X_NFC_CMD_SEQ_S			0x24
80263295Sadrian#define   AR934X_NFC_CMD_SEQ_1C3AXR		0x27
81263295Sadrian#define   AR934X_NFC_CMD_SEQ_1C5A1CXR		0x2a
82263295Sadrian#define   AR934X_NFC_CMD_SEQ_18			0x32
83263295Sadrian#define AR934X_NFC_CMD_INPUT_SEL_SIU		0
84263295Sadrian#define AR934X_NFC_CMD_INPUT_SEL_DMA		BIT(6)
85263295Sadrian#define AR934X_NFC_CMD_ADDR_SEL_0		0
86263295Sadrian#define AR934X_NFC_CMD_ADDR_SEL_1		BIT(7)
87263295Sadrian#define AR934X_NFC_CMD_CMD0_S			8
88263295Sadrian#define AR934X_NFC_CMD_CMD0_M			0xff
89263295Sadrian#define AR934X_NFC_CMD_CMD1_S			16
90263295Sadrian#define AR934X_NFC_CMD_CMD1_M			0xff
91263295Sadrian#define AR934X_NFC_CMD_CMD2_S			24
92263295Sadrian#define AR934X_NFC_CMD_CMD2_M			0xff
93263295Sadrian
94263295Sadrian#define AR934X_NFC_CTRL_ADDR_CYCLE0_M		0x7
95263295Sadrian#define AR934X_NFC_CTRL_ADDR_CYCLE0_S		0
96263295Sadrian#define AR934X_NFC_CTRL_SPARE_EN		BIT(3)
97263295Sadrian#define AR934X_NFC_CTRL_INT_EN			BIT(4)
98263295Sadrian#define AR934X_NFC_CTRL_ECC_EN			BIT(5)
99263295Sadrian#define AR934X_NFC_CTRL_BLOCK_SIZE_S		6
100263295Sadrian#define AR934X_NFC_CTRL_BLOCK_SIZE_M		0x3
101263295Sadrian#define   AR934X_NFC_CTRL_BLOCK_SIZE_32		0
102263295Sadrian#define   AR934X_NFC_CTRL_BLOCK_SIZE_64		1
103263295Sadrian#define   AR934X_NFC_CTRL_BLOCK_SIZE_128	2
104263295Sadrian#define   AR934X_NFC_CTRL_BLOCK_SIZE_256	3
105263295Sadrian#define AR934X_NFC_CTRL_PAGE_SIZE_S		8
106263295Sadrian#define AR934X_NFC_CTRL_PAGE_SIZE_M		0x7
107263295Sadrian#define   AR934X_NFC_CTRL_PAGE_SIZE_256		0
108263295Sadrian#define   AR934X_NFC_CTRL_PAGE_SIZE_512		1
109263295Sadrian#define   AR934X_NFC_CTRL_PAGE_SIZE_1024	2
110263295Sadrian#define   AR934X_NFC_CTRL_PAGE_SIZE_2048	3
111263295Sadrian#define   AR934X_NFC_CTRL_PAGE_SIZE_4096	4
112263295Sadrian#define   AR934X_NFC_CTRL_PAGE_SIZE_8192	5
113263295Sadrian#define   AR934X_NFC_CTRL_PAGE_SIZE_16384	6
114263295Sadrian#define AR934X_NFC_CTRL_CUSTOM_SIZE_EN		BIT(11)
115263295Sadrian#define AR934X_NFC_CTRL_IO_WIDTH_8BITS		0
116263295Sadrian#define AR934X_NFC_CTRL_IO_WIDTH_16BITS		BIT(12)
117263295Sadrian#define AR934X_NFC_CTRL_LOOKUP_EN		BIT(13)
118263295Sadrian#define AR934X_NFC_CTRL_PROT_EN			BIT(14)
119263295Sadrian#define AR934X_NFC_CTRL_WORK_MODE_ASYNC		0
120263295Sadrian#define AR934X_NFC_CTRL_WORK_MODE_SYNC		BIT(15)
121263295Sadrian#define AR934X_NFC_CTRL_ADDR0_AUTO_INC		BIT(16)
122263295Sadrian#define AR934X_NFC_CTRL_ADDR1_AUTO_INC		BIT(17)
123263295Sadrian#define AR934X_NFC_CTRL_ADDR_CYCLE1_M		0x7
124263295Sadrian#define AR934X_NFC_CTRL_ADDR_CYCLE1_S		18
125263295Sadrian#define AR934X_NFC_CTRL_SMALL_PAGE		BIT(21)
126263295Sadrian
127263295Sadrian#define AR934X_NFC_DMA_CTRL_DMA_START		BIT(7)
128263295Sadrian#define AR934X_NFC_DMA_CTRL_DMA_DIR_WRITE	0
129263295Sadrian#define AR934X_NFC_DMA_CTRL_DMA_DIR_READ	BIT(6)
130263295Sadrian#define AR934X_NFC_DMA_CTRL_DMA_MODE_SG		BIT(5)
131263295Sadrian#define AR934X_NFC_DMA_CTRL_DMA_BURST_S		2
132263295Sadrian#define AR934X_NFC_DMA_CTRL_DMA_BURST_0		0
133263295Sadrian#define AR934X_NFC_DMA_CTRL_DMA_BURST_1		1
134263295Sadrian#define AR934X_NFC_DMA_CTRL_DMA_BURST_2		2
135263295Sadrian#define AR934X_NFC_DMA_CTRL_DMA_BURST_3		3
136263295Sadrian#define AR934X_NFC_DMA_CTRL_DMA_BURST_4		4
137263295Sadrian#define AR934X_NFC_DMA_CTRL_DMA_BURST_5		5
138263295Sadrian#define AR934X_NFC_DMA_CTRL_ERR_FLAG		BIT(1)
139263295Sadrian#define AR934X_NFC_DMA_CTRL_DMA_READY		BIT(0)
140263295Sadrian
141263295Sadrian#define AR934X_NFC_INT_DEV_RDY(_x)		BIT(4 + (_x))
142263295Sadrian#define AR934X_NFC_INT_CMD_END			BIT(1)
143263295Sadrian
144263295Sadrian#define AR934X_NFC_ECC_CTRL_ERR_THRES_S		8
145263295Sadrian#define AR934X_NFC_ECC_CTRL_ERR_THRES_M		0x1f
146263295Sadrian#define AR934X_NFC_ECC_CTRL_ECC_CAP_S		5
147263295Sadrian#define AR934X_NFC_ECC_CTRL_ECC_CAP_M		0x7
148263295Sadrian#define AR934X_NFC_ECC_CTRL_ECC_CAP_2		0
149263295Sadrian#define AR934X_NFC_ECC_CTRL_ECC_CAP_4		1
150263295Sadrian#define AR934X_NFC_ECC_CTRL_ECC_CAP_6		2
151263295Sadrian#define AR934X_NFC_ECC_CTRL_ECC_CAP_8		3
152263295Sadrian#define AR934X_NFC_ECC_CTRL_ECC_CAP_10		4
153263295Sadrian#define AR934X_NFC_ECC_CTRL_ECC_CAP_12		5
154263295Sadrian#define AR934X_NFC_ECC_CTRL_ECC_CAP_14		6
155263295Sadrian#define AR934X_NFC_ECC_CTRL_ECC_CAP_16		7
156263295Sadrian#define AR934X_NFC_ECC_CTRL_ERR_OVER		BIT(2)
157263295Sadrian#define AR934X_NFC_ECC_CTRL_ERR_UNCORRECT	BIT(1)
158263295Sadrian#define AR934X_NFC_ECC_CTRL_ERR_CORRECT		BIT(0)
159263295Sadrian
160263295Sadrian#define AR934X_NFC_ECC_OFFS_OFSET_M		0xffff
161263295Sadrian
162263295Sadrian/* default timing values */
163263295Sadrian#define AR934X_NFC_TIME_SEQ_DEFAULT	0x7fff
164263295Sadrian#define AR934X_NFC_TIMINGS_ASYN_DEFAULT	0x22
165263295Sadrian#define AR934X_NFC_TIMINGS_SYN_DEFAULT	0xf
166263295Sadrian
167263295Sadrian#define AR934X_NFC_ID_BUF_SIZE		8
168263295Sadrian#define AR934X_NFC_DEV_READY_TIMEOUT	25 /* msecs */
169263295Sadrian#define AR934X_NFC_DMA_READY_TIMEOUT	25 /* msecs */
170263295Sadrian#define AR934X_NFC_DONE_TIMEOUT		1000
171263295Sadrian#define AR934X_NFC_DMA_RETRIES		20
172263295Sadrian
173263295Sadrian#define AR934X_NFC_IRQ_MASK		AR934X_NFC_INT_DEV_RDY(0)
174263295Sadrian
175263295Sadrian#define  AR934X_NFC_GENSEQ_SMALL_PAGE_READ	0x30043
176263295Sadrian
177263295Sadrian#endif /* __AR934X_NFCREG_H__ */
178