ar934x_nfcreg.h revision 263295
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: head/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