Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

/*-
 * Copyright (c) 2017-2018 Ruslan Bukin <br@bsdpad.com>
 * All rights reserved.
 *
 * This software was developed by SRI International and the University of
 * Cambridge Computer Laboratory under DARPA/AFRL contract FA8750-10-C-0237
 * ("CTSRD"), as part of the DARPA CRASH research programme.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 * $FreeBSD$
 */

#ifndef _CQSPI_H_
#define _CQSPI_H_

#define	CQSPI_CFG		0x00	/* QSPI Configuration */
#define	 CFG_IDLE		(1 << 31)
#define	 CFG_ENDMA		(1 << 15)
#define	 CFG_IDLE		(1 << 31)
#define	 CFG_BAUD_S		19
#define	 CFG_BAUD_M		(0xf << CFG_BAUD_S)
#define	 CFG_BAUD2		(0 << CFG_BAUD_S)
#define	 CFG_BAUD4		(1 << CFG_BAUD_S)
#define	 CFG_BAUD6		(2 << CFG_BAUD_S)
#define	 CFG_BAUD8		(3 << CFG_BAUD_S)
#define	 CFG_BAUD10		(4 << CFG_BAUD_S)
#define	 CFG_BAUD12		(5 << CFG_BAUD_S)
#define	 CFG_BAUD14		(6 << CFG_BAUD_S)
#define	 CFG_BAUD16		(7 << CFG_BAUD_S)
#define	 CFG_BAUD18		(8 << CFG_BAUD_S)
#define	 CFG_BAUD20		(9 << CFG_BAUD_S)
#define	 CFG_BAUD22		(10 << CFG_BAUD_S)
#define	 CFG_BAUD24		(11 << CFG_BAUD_S)
#define	 CFG_BAUD26		(12 << CFG_BAUD_S)
#define	 CFG_BAUD28		(13 << CFG_BAUD_S)
#define	 CFG_BAUD30		(14 << CFG_BAUD_S)
#define	 CFG_BAUD32		(0xf << CFG_BAUD_S)
#define	 CFG_EN			(1 << 0)
#define	CQSPI_DEVRD		0x04	/* Device Read Instruction Configuration */
#define	 DEVRD_DUMMYRDCLKS_S	24
#define	 DEVRD_ENMODEBITS	(1 << 20)
#define	 DEVRD_DATA_WIDTH_S	16
#define	 DEVRD_DATA_WIDTH_QUAD	(2 << DEVRD_DATA_WIDTH_S)
#define	 DEVRD_ADDR_WIDTH_S	12
#define	 DEVRD_ADDR_WIDTH_SINGLE	(0 << DEVRD_ADDR_WIDTH_S)
#define	 DEVRD_INST_WIDTH_S	8
#define	 DEVRD_INST_WIDTH_SINGLE	(0 << DEVRD_INST_WIDTH_S)
#define	 DEVRD_RDOPCODE_S	0
#define	CQSPI_DEVWR		0x08	/* Device Write Instruction Configuration */
#define	 DEVWR_DUMMYWRCLKS_S	24
#define	 DEVWR_WROPCODE_S	0
#define	 DEVWR_DATA_WIDTH_S	16
#define	 DEVWR_DATA_WIDTH_QUAD	(2 << DEVWR_DATA_WIDTH_S)
#define	 DEVWR_ADDR_WIDTH_S	12
#define	 DEVWR_ADDR_WIDTH_SINGLE	(0 << DEVWR_ADDR_WIDTH_S)
#define	CQSPI_DELAY		0x0C	/* QSPI Device Delay Register */
#define	 DELAY_NSS_S		24
#define	 DELAY_BTWN_S		16
#define	 DELAY_AFTER_S		8
#define	 DELAY_INIT_S		0
#define	CQSPI_RDDATACAP		0x10	/* Read Data Capture Register */
#define	 RDDATACAP_DELAY_S	1
#define	 RDDATACAP_DELAY_M	(0xf << RDDATACAP_DELAY_S)
#define	CQSPI_DEVSZ		0x14	/* Device Size Configuration Register */
#define	 DEVSZ_NUMADDRBYTES_S	0
#define	 DEVSZ_NUMADDRBYTES_M	(0xf << DEVSZ_NUMADDRBYTES_S)
#define	CQSPI_SRAMPART		0x18	/* SRAM Partition Configuration Register */
#define	CQSPI_INDADDRTRIG	0x1C	/* Indirect AHB Address Trigger Register */
#define	CQSPI_DMAPER		0x20	/* DMA Peripheral Configuration Register */
#define	 DMAPER_NUMSGLREQBYTES_S	0
#define	 DMAPER_NUMBURSTREQBYTES_S	8
#define	 DMAPER_NUMSGLREQBYTES_4	(2 << DMAPER_NUMSGLREQBYTES_S);
#define	 DMAPER_NUMBURSTREQBYTES_4	(2 << DMAPER_NUMBURSTREQBYTES_S);
#define	CQSPI_REMAPADDR		0x24	/* Remap Address Register */
#define	CQSPI_MODEBIT		0x28	/* Mode Bit Configuration */
#define	CQSPI_SRAMFILL		0x2C	/* SRAM Fill Register */
#define	CQSPI_TXTHRESH		0x30	/* TX Threshold Register */
#define	CQSPI_RXTHRESH		0x34	/* RX Threshold Register */
#define	CQSPI_IRQSTAT		0x40	/* Interrupt Status Register */
#define	CQSPI_IRQMASK		0x44	/* Interrupt Mask */
#define	 IRQMASK_INDSRAMFULL	(1 << 12)
#define	 IRQMASK_INDXFRLVL	(1 << 6)
#define	 IRQMASK_INDOPDONE	(1 << 2)
#define	CQSPI_LOWWRPROT		0x50	/* Lower Write Protection */
#define	CQSPI_UPPWRPROT		0x54	/* Upper Write Protection */
#define	CQSPI_WRPROT		0x58	/* Write Protection Control Register */
#define	CQSPI_INDRD		0x60	/* Indirect Read Transfer Control Register */
#define	 INDRD_IND_OPS_DONE_STATUS	(1 << 5)
#define	 INDRD_START		(1 << 0)
#define	CQSPI_INDRDWATER	0x64	/* Indirect Read Transfer Watermark Register */
#define	CQSPI_INDRDSTADDR	0x68	/* Indirect Read Transfer Start Address Register */
#define	CQSPI_INDRDCNT		0x6C	/* Indirect Read Transfer Number Bytes Register */
#define	CQSPI_INDWR		0x70	/* Indirect Write Transfer Control Register */
#define	CQSPI_INDWRWATER	0x74	/* Indirect Write Transfer Watermark Register */
#define	CQSPI_INDWRSTADDR	0x78	/* Indirect Write Transfer Start Address Register */
#define	CQSPI_INDWRCNT		0x7C	/* Indirect Write Transfer Number Bytes Register */
#define	CQSPI_FLASHCMD		0x90	/* Flash Command Control Register */
#define	 FLASHCMD_NUMADDRBYTES_S	16
#define	 FLASHCMD_NUMRDDATABYTES_S	20
#define	 FLASHCMD_NUMRDDATABYTES_M	(0x7 << FLASHCMD_NUMRDDATABYTES_S)
#define	 FLASHCMD_ENCMDADDR	(1 << 19)
#define	 FLASHCMD_ENRDDATA	(1 << 23)
#define	 FLASHCMD_CMDOPCODE_S	24
#define	 FLASHCMD_CMDOPCODE_M	(0xff << FLASHCMD_CMDOPCODE_S)
#define	 FLASHCMD_CMDEXECSTAT	(1 << 1) /* Command execution in progress. */
#define	 FLASHCMD_EXECCMD	(1 << 0) /* Execute the command. */
#define	CQSPI_FLASHCMDADDR	0x94	/* Flash Command Address Registers */
#define	CQSPI_FLASHCMDRDDATALO	0xA0	/* Flash Command Read Data Register (Lower) */
#define	CQSPI_FLASHCMDRDDATAUP	0xA4	/* Flash Command Read Data Register (Upper) */
#define	CQSPI_FLASHCMDWRDATALO	0xA8	/* Flash Command Write Data Register (Lower) */
#define	CQSPI_FLASHCMDWRDATAUP	0xAC	/* Flash Command Write Data Register (Upper) */
#define	CQSPI_MODULEID		0xFC	/* Module ID Register */

#endif /* !_CQSPI_H_ */