1*eb69ed7fSRuslan Bukin /*- 2*eb69ed7fSRuslan Bukin * Copyright (c) 2017-2018 Ruslan Bukin <br@bsdpad.com> 3*eb69ed7fSRuslan Bukin * All rights reserved. 4*eb69ed7fSRuslan Bukin * 5*eb69ed7fSRuslan Bukin * This software was developed by SRI International and the University of 6*eb69ed7fSRuslan Bukin * Cambridge Computer Laboratory under DARPA/AFRL contract FA8750-10-C-0237 7*eb69ed7fSRuslan Bukin * ("CTSRD"), as part of the DARPA CRASH research programme. 8*eb69ed7fSRuslan Bukin * 9*eb69ed7fSRuslan Bukin * Redistribution and use in source and binary forms, with or without 10*eb69ed7fSRuslan Bukin * modification, are permitted provided that the following conditions 11*eb69ed7fSRuslan Bukin * are met: 12*eb69ed7fSRuslan Bukin * 1. Redistributions of source code must retain the above copyright 13*eb69ed7fSRuslan Bukin * notice, this list of conditions and the following disclaimer. 14*eb69ed7fSRuslan Bukin * 2. Redistributions in binary form must reproduce the above copyright 15*eb69ed7fSRuslan Bukin * notice, this list of conditions and the following disclaimer in the 16*eb69ed7fSRuslan Bukin * documentation and/or other materials provided with the distribution. 17*eb69ed7fSRuslan Bukin * 18*eb69ed7fSRuslan Bukin * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 19*eb69ed7fSRuslan Bukin * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20*eb69ed7fSRuslan Bukin * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21*eb69ed7fSRuslan Bukin * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 22*eb69ed7fSRuslan Bukin * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23*eb69ed7fSRuslan Bukin * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 24*eb69ed7fSRuslan Bukin * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25*eb69ed7fSRuslan Bukin * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26*eb69ed7fSRuslan Bukin * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27*eb69ed7fSRuslan Bukin * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28*eb69ed7fSRuslan Bukin * SUCH DAMAGE. 29*eb69ed7fSRuslan Bukin */ 30*eb69ed7fSRuslan Bukin 31*eb69ed7fSRuslan Bukin #ifndef _CQSPI_H_ 32*eb69ed7fSRuslan Bukin #define _CQSPI_H_ 33*eb69ed7fSRuslan Bukin 34*eb69ed7fSRuslan Bukin #define CQSPI_CFG 0x00 /* QSPI Configuration */ 35*eb69ed7fSRuslan Bukin #define CFG_IDLE (1 << 31) 36*eb69ed7fSRuslan Bukin #define CFG_ENDMA (1 << 15) 37*eb69ed7fSRuslan Bukin #define CFG_IDLE (1 << 31) 38*eb69ed7fSRuslan Bukin #define CFG_BAUD_S 19 39*eb69ed7fSRuslan Bukin #define CFG_BAUD_M (0xf << CFG_BAUD_S) 40*eb69ed7fSRuslan Bukin #define CFG_BAUD2 (0 << CFG_BAUD_S) 41*eb69ed7fSRuslan Bukin #define CFG_BAUD4 (1 << CFG_BAUD_S) 42*eb69ed7fSRuslan Bukin #define CFG_BAUD6 (2 << CFG_BAUD_S) 43*eb69ed7fSRuslan Bukin #define CFG_BAUD8 (3 << CFG_BAUD_S) 44*eb69ed7fSRuslan Bukin #define CFG_BAUD10 (4 << CFG_BAUD_S) 45*eb69ed7fSRuslan Bukin #define CFG_BAUD12 (5 << CFG_BAUD_S) 46*eb69ed7fSRuslan Bukin #define CFG_BAUD14 (6 << CFG_BAUD_S) 47*eb69ed7fSRuslan Bukin #define CFG_BAUD16 (7 << CFG_BAUD_S) 48*eb69ed7fSRuslan Bukin #define CFG_BAUD18 (8 << CFG_BAUD_S) 49*eb69ed7fSRuslan Bukin #define CFG_BAUD20 (9 << CFG_BAUD_S) 50*eb69ed7fSRuslan Bukin #define CFG_BAUD22 (10 << CFG_BAUD_S) 51*eb69ed7fSRuslan Bukin #define CFG_BAUD24 (11 << CFG_BAUD_S) 52*eb69ed7fSRuslan Bukin #define CFG_BAUD26 (12 << CFG_BAUD_S) 53*eb69ed7fSRuslan Bukin #define CFG_BAUD28 (13 << CFG_BAUD_S) 54*eb69ed7fSRuslan Bukin #define CFG_BAUD30 (14 << CFG_BAUD_S) 55*eb69ed7fSRuslan Bukin #define CFG_BAUD32 (0xf << CFG_BAUD_S) 56*eb69ed7fSRuslan Bukin #define CFG_EN (1 << 0) 57*eb69ed7fSRuslan Bukin #define CQSPI_DEVRD 0x04 /* Device Read Instruction Configuration */ 58*eb69ed7fSRuslan Bukin #define DEVRD_DUMMYRDCLKS_S 24 59*eb69ed7fSRuslan Bukin #define DEVRD_ENMODEBITS (1 << 20) 60*eb69ed7fSRuslan Bukin #define DEVRD_DATA_WIDTH_S 16 61*eb69ed7fSRuslan Bukin #define DEVRD_DATA_WIDTH_QUAD (2 << DEVRD_DATA_WIDTH_S) 62*eb69ed7fSRuslan Bukin #define DEVRD_ADDR_WIDTH_S 12 63*eb69ed7fSRuslan Bukin #define DEVRD_ADDR_WIDTH_SINGLE (0 << DEVRD_ADDR_WIDTH_S) 64*eb69ed7fSRuslan Bukin #define DEVRD_INST_WIDTH_S 8 65*eb69ed7fSRuslan Bukin #define DEVRD_INST_WIDTH_SINGLE (0 << DEVRD_INST_WIDTH_S) 66*eb69ed7fSRuslan Bukin #define DEVRD_RDOPCODE_S 0 67*eb69ed7fSRuslan Bukin #define CQSPI_DEVWR 0x08 /* Device Write Instruction Configuration */ 68*eb69ed7fSRuslan Bukin #define DEVWR_DUMMYWRCLKS_S 24 69*eb69ed7fSRuslan Bukin #define DEVWR_WROPCODE_S 0 70*eb69ed7fSRuslan Bukin #define DEVWR_DATA_WIDTH_S 16 71*eb69ed7fSRuslan Bukin #define DEVWR_DATA_WIDTH_QUAD (2 << DEVWR_DATA_WIDTH_S) 72*eb69ed7fSRuslan Bukin #define DEVWR_ADDR_WIDTH_S 12 73*eb69ed7fSRuslan Bukin #define DEVWR_ADDR_WIDTH_SINGLE (0 << DEVWR_ADDR_WIDTH_S) 74*eb69ed7fSRuslan Bukin #define CQSPI_DELAY 0x0C /* QSPI Device Delay Register */ 75*eb69ed7fSRuslan Bukin #define DELAY_NSS_S 24 76*eb69ed7fSRuslan Bukin #define DELAY_BTWN_S 16 77*eb69ed7fSRuslan Bukin #define DELAY_AFTER_S 8 78*eb69ed7fSRuslan Bukin #define DELAY_INIT_S 0 79*eb69ed7fSRuslan Bukin #define CQSPI_RDDATACAP 0x10 /* Read Data Capture Register */ 80*eb69ed7fSRuslan Bukin #define RDDATACAP_DELAY_S 1 81*eb69ed7fSRuslan Bukin #define RDDATACAP_DELAY_M (0xf << RDDATACAP_DELAY_S) 82*eb69ed7fSRuslan Bukin #define CQSPI_DEVSZ 0x14 /* Device Size Configuration Register */ 83*eb69ed7fSRuslan Bukin #define DEVSZ_NUMADDRBYTES_S 0 84*eb69ed7fSRuslan Bukin #define DEVSZ_NUMADDRBYTES_M (0xf << DEVSZ_NUMADDRBYTES_S) 85*eb69ed7fSRuslan Bukin #define CQSPI_SRAMPART 0x18 /* SRAM Partition Configuration Register */ 86*eb69ed7fSRuslan Bukin #define CQSPI_INDADDRTRIG 0x1C /* Indirect AHB Address Trigger Register */ 87*eb69ed7fSRuslan Bukin #define CQSPI_DMAPER 0x20 /* DMA Peripheral Configuration Register */ 88*eb69ed7fSRuslan Bukin #define DMAPER_NUMSGLREQBYTES_S 0 89*eb69ed7fSRuslan Bukin #define DMAPER_NUMBURSTREQBYTES_S 8 90*eb69ed7fSRuslan Bukin #define DMAPER_NUMSGLREQBYTES_4 (2 << DMAPER_NUMSGLREQBYTES_S); 91*eb69ed7fSRuslan Bukin #define DMAPER_NUMBURSTREQBYTES_4 (2 << DMAPER_NUMBURSTREQBYTES_S); 92*eb69ed7fSRuslan Bukin #define CQSPI_REMAPADDR 0x24 /* Remap Address Register */ 93*eb69ed7fSRuslan Bukin #define CQSPI_MODEBIT 0x28 /* Mode Bit Configuration */ 94*eb69ed7fSRuslan Bukin #define CQSPI_SRAMFILL 0x2C /* SRAM Fill Register */ 95*eb69ed7fSRuslan Bukin #define CQSPI_TXTHRESH 0x30 /* TX Threshold Register */ 96*eb69ed7fSRuslan Bukin #define CQSPI_RXTHRESH 0x34 /* RX Threshold Register */ 97*eb69ed7fSRuslan Bukin #define CQSPI_IRQSTAT 0x40 /* Interrupt Status Register */ 98*eb69ed7fSRuslan Bukin #define CQSPI_IRQMASK 0x44 /* Interrupt Mask */ 99*eb69ed7fSRuslan Bukin #define IRQMASK_INDSRAMFULL (1 << 12) 100*eb69ed7fSRuslan Bukin #define IRQMASK_INDXFRLVL (1 << 6) 101*eb69ed7fSRuslan Bukin #define IRQMASK_INDOPDONE (1 << 2) 102*eb69ed7fSRuslan Bukin #define CQSPI_LOWWRPROT 0x50 /* Lower Write Protection */ 103*eb69ed7fSRuslan Bukin #define CQSPI_UPPWRPROT 0x54 /* Upper Write Protection */ 104*eb69ed7fSRuslan Bukin #define CQSPI_WRPROT 0x58 /* Write Protection Control Register */ 105*eb69ed7fSRuslan Bukin #define CQSPI_INDRD 0x60 /* Indirect Read Transfer Control Register */ 106*eb69ed7fSRuslan Bukin #define INDRD_IND_OPS_DONE_STATUS (1 << 5) 107*eb69ed7fSRuslan Bukin #define INDRD_START (1 << 0) 108*eb69ed7fSRuslan Bukin #define CQSPI_INDRDWATER 0x64 /* Indirect Read Transfer Watermark Register */ 109*eb69ed7fSRuslan Bukin #define CQSPI_INDRDSTADDR 0x68 /* Indirect Read Transfer Start Address Register */ 110*eb69ed7fSRuslan Bukin #define CQSPI_INDRDCNT 0x6C /* Indirect Read Transfer Number Bytes Register */ 111*eb69ed7fSRuslan Bukin #define CQSPI_INDWR 0x70 /* Indirect Write Transfer Control Register */ 112*eb69ed7fSRuslan Bukin #define CQSPI_INDWRWATER 0x74 /* Indirect Write Transfer Watermark Register */ 113*eb69ed7fSRuslan Bukin #define CQSPI_INDWRSTADDR 0x78 /* Indirect Write Transfer Start Address Register */ 114*eb69ed7fSRuslan Bukin #define CQSPI_INDWRCNT 0x7C /* Indirect Write Transfer Number Bytes Register */ 115*eb69ed7fSRuslan Bukin #define CQSPI_FLASHCMD 0x90 /* Flash Command Control Register */ 116*eb69ed7fSRuslan Bukin #define FLASHCMD_NUMADDRBYTES_S 16 117*eb69ed7fSRuslan Bukin #define FLASHCMD_NUMRDDATABYTES_S 20 118*eb69ed7fSRuslan Bukin #define FLASHCMD_NUMRDDATABYTES_M (0x7 << FLASHCMD_NUMRDDATABYTES_S) 119*eb69ed7fSRuslan Bukin #define FLASHCMD_ENCMDADDR (1 << 19) 120*eb69ed7fSRuslan Bukin #define FLASHCMD_ENRDDATA (1 << 23) 121*eb69ed7fSRuslan Bukin #define FLASHCMD_CMDOPCODE_S 24 122*eb69ed7fSRuslan Bukin #define FLASHCMD_CMDOPCODE_M (0xff << FLASHCMD_CMDOPCODE_S) 123*eb69ed7fSRuslan Bukin #define FLASHCMD_CMDEXECSTAT (1 << 1) /* Command execution in progress. */ 124*eb69ed7fSRuslan Bukin #define FLASHCMD_EXECCMD (1 << 0) /* Execute the command. */ 125*eb69ed7fSRuslan Bukin #define CQSPI_FLASHCMDADDR 0x94 /* Flash Command Address Registers */ 126*eb69ed7fSRuslan Bukin #define CQSPI_FLASHCMDRDDATALO 0xA0 /* Flash Command Read Data Register (Lower) */ 127*eb69ed7fSRuslan Bukin #define CQSPI_FLASHCMDRDDATAUP 0xA4 /* Flash Command Read Data Register (Upper) */ 128*eb69ed7fSRuslan Bukin #define CQSPI_FLASHCMDWRDATALO 0xA8 /* Flash Command Write Data Register (Lower) */ 129*eb69ed7fSRuslan Bukin #define CQSPI_FLASHCMDWRDATAUP 0xAC /* Flash Command Write Data Register (Upper) */ 130*eb69ed7fSRuslan Bukin #define CQSPI_MODULEID 0xFC /* Module ID Register */ 131*eb69ed7fSRuslan Bukin 132*eb69ed7fSRuslan Bukin #endif /* !_CQSPI_H_ */ 133