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

/*	$NetBSD: mvsdioreg.h,v 1.2 2016/03/12 00:41:31 jklos Exp $	*/
/*
 * Copyright (c) 2010 KIYOHARA Takashi
 * All rights reserved.
 *
 * 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 ``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 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.
 */
#ifndef _MVSDIOREG_H_
#define _MVSDIOREG_H_

#define MVSDIO_SIZE	0x10000

#ifndef MVSDIO_MAX_CLOCK
#define MVSDIO_MAX_CLOCK	(50 * 1000)	/* 50,000 kHz */
#endif  /* MVSDIO_MAX_CLOCK */

#define MVSDIO_DMABA16LSB	0x0000	/* DMA Buffer Address 16 LSB */
#define MVSDIO_DMABA16MSB	0x0004	/* DMA Buffer Address 16 MSB */
#define MVSDIO_DBS		0x0008	/* Data Block Size */
#define   DBS_BLOCKSIZE_MASK		0xfff
#define   DBS_BLOCKSIZE(s)		((s) & DBS_BLOCKSIZE_MASK)
#define   DBS_BLOCKSIZE_MAX		0x800
#define MVSDIO_DBC		0x000c	/* Data Block Count */
#define   DBC_BLOCKCOUNT_MASK		0xfff
#define   DBC_BLOCKCOUNT(c)		((c) & DBC_BLOCKCOUNT_MASK)
#define MVSDIO_AC16LSB		0x0010	/* Argument in Command 16 LSB */
#define MVSDIO_AC16MSB		0x0014	/* Argument in Command 16 MSB */
#define MVSDIO_TM		0x0018	/* Transfer Mode */
#define   TM_SWWRDATASTART		(1 << 0)	/* InitWrDataXfer */
#define   TM_HWWRDATAEN			(1 << 1)	/* SWInitWrDataXfer */
#define   TM_AUTOCMD12EN		(1 << 2)	/* SWIssuesCMD12 */
#define   TM_INTCHKEN			(1 << 3)	/* CheckInterrupts */
#define   TM_DATAXFERTOWARDHOST		(1 << 4)	/* XferDataToSDHost */
#define   TM_STOPCLKEN			(1 << 5)	/* StopSDClocks */
#define   TM_HOSTXFERMODE		(1 << 6)	/* SW Write */
#define MVSDIO_C		0x001c	/* Command */
#define   C_RESPTYPE_NR			(0 << 0)	/* NoResponse */
#define   C_RESPTYPE_136BR		(1 << 0)	/* 136BitResponse */
#define   C_RESPTYPE_48BR		(2 << 0)	/* 48BitResponse */
#define   C_RESPTYPE_48BRCB		(3 << 0)	/*48BitResponseChkBusy*/
#define   C_DATACRC16CHKEN		(1 << 2)	/* EnableCrc16Chk */
#define   C_CMDCRCCHKEN			(1 << 3)	/* HCCrcChk */
#define   C_CMDINDEXCHKEN		(1 << 4)	/* HCChkIndex */
#define   C_DATAPRESENT			(1 << 5)	/* DataAwaitsTransfer */
#define   C_UNEXPECTEDRESPEN		(1 << 7)	/* UnexpectedRespEn */
#define   C_CMDINDEX(c)			((c) << 8)
#define MVSDIO_NRH		8
#define MVSDIO_RH(n)		(0x0020	+ ((n) << 2)) /* Response Halfword n */
#define   RH_MASK			0xffff
#define MVSDIO_16DWACPU		0x0040	/* 16-bit Data Word Accessed by CPU */
#define MVSDIO_CRC7lR		0x0044	/* CRC7 of l Response */
#define   CRC7lR_CRC7RESPTOKEN_MASK	0x7f
#define MVSDIO_HPS16LSB		0x0048	/* Host Present State 16 LSB */
#define   HPS16LSB_CMDINHIBITCMD	(1 <<  0)	/* CmdRegWrite */
#define   HPS16LSB_CARDBUSY		(1 <<  1)	/* Card Busy */
#define   HPS16LSB_DATLEVEL(x)		(((x) >> 3) & 0xf)	/* DAT[3:0] Line Signal Level */
#define   HPS16LSB_CMDLEVEL		(1 <<  7)    /* CMD line Signal Level */
#define   HPS16LSB_TXACTIVE		(1 <<  8)	/* TxEnabled */
#define   HPS16LSB_RXACTIVE		(1 <<  9)	/* RxDisabled */
#define   HPS16LSB_FIFOFULL		(1 << 12)	/* FIFO Full */
#define   HPS16LSB_FIFOEMPTY		(1 << 13)	/* FIFO Empty */
#define   HPS16LSB_AUTOCMD12ACTIVE	(1 << 14)	/*auto_cmd12 is active*/
#define MVSDIO_HC		0x0050	/* Host Control */
#define   HC_PUSHPULLEN			(1 <<  0)	/* PushPullEn */
#define   HC_CARDTYPE_MASK		(3 <<  1)	/* Card type */
#define   HC_CARDTYPE_MEMORYONLY	(0 <<  1)	/*   Mem only SD card */
#define   HC_CARDTYPE_IOONLY		(1 <<  1)	/*   IO only SD card */
#define   HC_CARDTYPE_IOMEMCOMBO	(2 <<  1)	/*   IO and mem combo */
#define   HC_CARDTYPE_MMC		(3 <<  1)	/*   MMC card */
#define   HC_BIGENDIAN			(1 <<  3)	/* BigEndian */
#define   HC_LSBFIRST			(1 <<  4)	/* LSB */
#define   HC_DATAWIDTH			(1 <<  9)	/* Data Width */
#define   HC_HISPEEDEN			(1 << 10)	/* HighSpeedEnable */
#define   HC_TIMEOUTVALUE_MAX		(0xf << 11)
#define   HC_TIMEOUTEN			(1 << 15)	/* Timeout */
#define MVSDIO_DBGC		0x0054	/* Data Block Gap Control */
#define   DBGC_STOPATBLOCKGAPREQ	(1 << 0) /* Stop at block gap request */
#define   DBGC_CONTREQ			(1 << 1)	/* Continue request */
#define   DBGC_RDWAITCTL		(1 << 2)	/* EnableRdWait */
#define   DBGC_STOPDATXFER		(1 << 3)	/* StopDataXferEn */
#define   DBGC_RESUME			(1 << 4)
#define   DBGC_SUSPEND			(1 << 5)
#define MVSDIO_CC		0x0058	/* Clock Control */
#define   CC_SCLKMASTEREN		(1 << 0)	/* SdclkEn */
#define MVSDIO_SR		0x005c	/* Software Reset */
#define   SR_SWRESET			(1 << 8)

#define MVSDIO_NIS		0x0060	/* Normal Interrupt Status */
#define MVSDIO_NISE		0x0068	/* Normal Interrupt Status Enable */
#define MVSDIO_NISIE		0x0070	/* Normal Intr Status Intr Enable */
#define   NIS_CMDCOMPLETE		(1 <<  0)	/* Command Complete */
#define   NIS_XFERCOMPLETE		(1 <<  1)	/* Transfer Complete */
#define   NIS_BLOCKGAPEV		(1 <<  2)	/* Block gap event */
#define   NIS_DMAINT			(1 <<  3)	/* DMA interrupt */
#define   NIS_TXRDY			(1 <<  4)
#define   NIS_RXRDY			(1 <<  5)
#define   NIS_CARDINT			(1 <<  8)	/* Card interrupt */
#define   NIS_READWAITON		(1 <<  9)    /* Read Wait state is on */
#define   NIS_IMBFIFO8WFULL		(1 << 10)
#define   NIS_IMBFIFO8WAVAIL		(1 << 11)
#define   NIS_SUSPENSEON		(1 << 12)
#define   NIS_AUTOCMD12COMPLETE		(1 << 13)	/* Auto_cmd12 is comp */
#define   NIS_UNEXPECTEDRESPDET		(1 << 14)
#define   NIS_ERRINT			(1 << 15)	/* Error interrupt */
#define MVSDIO_EIS		0x0064	/* Error Interrupt Status */
#define MVSDIO_EISE		0x006c	/* Error Interrupt Status Enable */
#define MVSDIO_EISIE		0x0074	/* Error Intr Status Interrupt Enable */
#define   EIS_CMDTIMEOUTERR		(1 <<  0)	/*Command timeout err*/
#define   EIS_CMDCRCERR			(1 <<  1)	/* Command CRC Error */
#define   EIS_CMDENDBITERR		(1 <<  2)	/*Command end bit err*/
#define   EIS_CMDINDEXERR		(1 <<  3)	/*Command Index Error*/
#define   EIS_DATATIMEOUTERR		(1 <<  4)	/* Data timeout error */
#define   EIS_RDDATACRCERR		(1 <<  5)	/* Read data CRC err */
#define   EIS_RDDATAENDBITERR		(1 <<  6)	/*Rd data end bit err*/
#define   EIS_AUTOCMD12ERR		(1 <<  8)	/* Auto CMD12 error */
#define   EIS_CMDSTARTBITERR		(1 <<  9)	/*Cmd start bit error*/
#define   EIS_XFERSIZEERR		(1 << 10)     /*Tx size mismatched err*/
#define   EIS_RESPTBITERR		(1 << 11)	/* Response T bit err */
#define   EIS_CRCENDBITERR		(1 << 12)	/* CRC end bit error */
#define   EIS_CRCSTARTBITERR		(1 << 13)	/* CRC start bit err */
#define   EIS_CRCSTATERR		(1 << 14)	/* CRC status error */

#define MVSDIO_ACMD12IS		0x0078	/* Auto CMD12 Interrupt Status */
#define   ACMD12IS_AUTOCMD12NOTEXE	(1 << 0)
#define   ACMD12IS_AUTOCMD12TIMEOUTER	(1 << 1)
#define   ACMD12IS_AUTOCMD12CRCER	(1 << 2)
#define   ACMD12IS_AUTOCMD12ENDBITER	(1 << 3)
#define   ACMD12IS_AUTOCMD12INDEXER	(1 << 4)
#define   ACMD12IS_AUTOCMD12RESPTBITER	(1 << 5)
#define   ACMD12IS_AUTOCMD12RESPSTARTBITER (1 << 6)
#define MVSDIO_CNBRDB		0x007c/*Current Num of Bytes Remaining in Data*/
#define MVSDIO_CNDBLBT		0x0080/*Current Num of Data Blk Left ToBe Txed*/
#define MVSDIO_AACC16LSBT	0x0084 /*Arg in Auto Cmd12 Command 16 LSB Txed*/
#define MVSDIO_AACC16MSBT	0x0088 /*Arg in Auto Cmd12 Command 16 MSB Txed*/
#define MVSDIO_IACCT		0x008c	/* Index of Auto Cmd12 Commands Tx-ed */
#define   IACCT_AUTOCMD12BUSYCHKEN	(1 << 0)
#define   IACCT_AUTOCMD12INDEXCHKEN	(1 << 1)
#define   IACCT_AUTOCMD12INDEX		(MMC_STOP_TRANSMISSION << 8)
#define MVSDIO_ACRH(n)		(0x0090	+ ((n) << 2)) /* Auto Cmd12 Response Halfword n */


#define MVSDIO_MCL		0x0100	/* Mbus Control Low */
#define MVSDIO_MCH		0x0104	/* Mbus Control High */
#define   MCL_SDARBENTRY(n, x)		(((x) & 0xf) << ((n) << 2))

#define MVSDIO_NWINDOW	4
#define MVSDIO_WC(n)		(0x0108 + ((n) << 3)) 	/* Window n Control */
#define   WC_WINEN			(1 << 0)	/* Window n Enable */
#define   WC_TARGET(t)			(((t) & 0xf) << 4)
#define   WC_ATTR(a)			(((a) & 0xff) << 8)
#define   WC_SIZE(s)			(((s) - 1) & 0xffff0000)
#define MVSDIO_WB(n)		(0x010c	+ ((n) << 3))	/* Window n Base */
#define   WB_BASE(b)			((b) & 0xffff0000)
#define MVSDIO_CDV		0x0128	/* Clock Divider Value */
#define   CDV_CLKDVDRMVALUE_MASK	0x7ff
#define MVSDIO_ADE		0x012c	/* Address Decoder Error */
#define   ADE_ADD_DEC_MISS_ERR		(1 << 0)
#define   ADE_ADD_DEC_MULTI_ERR		(1 << 1)
#define MVSDIO_ADEM		0x0130	/* Address Decoder Error Mask */
#define   ADEM_VARIOUS(x)		((x) << 0)	/* Do not mask */

#endif	/* _MVSDIOREG_H_ */