Home | History | Annotate | Line # | Download | only in dev
      1  1.1  rkujawa /*	$NetBSD: dwcsatareg.h,v 1.1 2026/06/14 00:02:35 rkujawa Exp $	*/
      2  1.1  rkujawa 
      3  1.1  rkujawa /*
      4  1.1  rkujawa  * Copyright (c) 2026 The NetBSD Foundation, Inc.
      5  1.1  rkujawa  * All rights reserved.
      6  1.1  rkujawa  *
      7  1.1  rkujawa  * This code is derived from software contributed to The NetBSD Foundation
      8  1.1  rkujawa  * by Radoslaw Kujawa.
      9  1.1  rkujawa  *
     10  1.1  rkujawa  * Redistribution and use in source and binary forms, with or without
     11  1.1  rkujawa  * modification, are permitted provided that the following conditions
     12  1.1  rkujawa  * are met:
     13  1.1  rkujawa  * 1. Redistributions of source code must retain the above copyright
     14  1.1  rkujawa  *    notice, this list of conditions and the following disclaimer.
     15  1.1  rkujawa  * 2. Redistributions in binary form must reproduce the above copyright
     16  1.1  rkujawa  *    notice, this list of conditions and the following disclaimer in the
     17  1.1  rkujawa  *    documentation and/or other materials provided with the distribution.
     18  1.1  rkujawa  *
     19  1.1  rkujawa  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     20  1.1  rkujawa  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     21  1.1  rkujawa  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     22  1.1  rkujawa  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     23  1.1  rkujawa  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     24  1.1  rkujawa  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     25  1.1  rkujawa  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     26  1.1  rkujawa  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     27  1.1  rkujawa  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     28  1.1  rkujawa  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     29  1.1  rkujawa  */
     30  1.1  rkujawa 
     31  1.1  rkujawa /*
     32  1.1  rkujawa  * Synopsys DesignWare Cores SATA-II AHB host as integrated in the
     33  1.1  rkujawa  * AMCC/AppliedMicro PPC460EX
     34  1.1  rkujawa  */
     35  1.1  rkujawa 
     36  1.1  rkujawa #ifndef _IBM4XX_DWCSATAREG_H_
     37  1.1  rkujawa #define	_IBM4XX_DWCSATAREG_H_
     38  1.1  rkujawa 
     39  1.1  rkujawa #define	DWCSATA_SIZE		0x800	/* whole block, incl. DMADR window */
     40  1.1  rkujawa 
     41  1.1  rkujawa /*
     42  1.1  rkujawa  * ATA taskfile shadow registers (SATA0_CDR0-CDR7), 4-byte stride, in
     43  1.1  rkujawa  * the standard wd_* order: data, error/features, seccnt, sector,
     44  1.1  rkujawa  * cyl_lo, cyl_hi, sdh, command/status.
     45  1.1  rkujawa  */
     46  1.1  rkujawa #define	DWCSATA_CDR_BASE	0x00
     47  1.1  rkujawa #define	DWCSATA_CDR_STRIDE	4
     48  1.1  rkujawa 
     49  1.1  rkujawa #define	DWCSATA_CLR0		0x20	/* altstatus / device control */
     50  1.1  rkujawa 
     51  1.1  rkujawa /* SATA status and control registers (SATA0_SCR0-SCR4) */
     52  1.1  rkujawa #define	DWCSATA_SSTATUS		0x24
     53  1.1  rkujawa #define	DWCSATA_SERROR		0x28	/* write 1s to clear */
     54  1.1  rkujawa #define	DWCSATA_SCONTROL	0x2c
     55  1.1  rkujawa #define	DWCSATA_SACTIVE		0x30
     56  1.1  rkujawa #define	DWCSATA_SNOTIFICATION	0x34
     57  1.1  rkujawa 
     58  1.1  rkujawa /*
     59  1.1  rkujawa  * DWC-specific control block. (NCQ) DMA registers and
     60  1.1  rkujawa  * DMACR/DBTSR only matter on the DMA data path.
     61  1.1  rkujawa  */
     62  1.1  rkujawa #define	DWCSATA_FPTAGR		0x64	/* first-party DMA tag */
     63  1.1  rkujawa #define	DWCSATA_FPBOR		0x68	/* first-party DMA buffer offset */
     64  1.1  rkujawa #define	DWCSATA_FPTCR		0x6c	/* first-party DMA transfer count */
     65  1.1  rkujawa 
     66  1.1  rkujawa #define	DWCSATA_DMACR		0x70	/* DMA channel control */
     67  1.1  rkujawa #define	DWCSATA_DMACR_TXCHEN	0x00000001 /* TX channel enable */
     68  1.1  rkujawa #define	DWCSATA_DMACR_RXCHEN	0x00000002 /* RX channel enable */
     69  1.1  rkujawa #define	DWCSATA_DMACR_TXMODE	0x00000004 /* close TX FIS on TXCHEN clear */
     70  1.1  rkujawa /* clears both channel enables; TXMODE is what U-Boot/Linux run with */
     71  1.1  rkujawa #define	DWCSATA_DMACR_TXRXCH_CLEAR DWCSATA_DMACR_TXMODE
     72  1.1  rkujawa /* TXMODE must accompany every DMACR write, including the RMW clears */
     73  1.1  rkujawa #define	DWCSATA_DMACR_TX_START	(DWCSATA_DMACR_TXCHEN | DWCSATA_DMACR_TXMODE)
     74  1.1  rkujawa #define	DWCSATA_DMACR_RX_START	(DWCSATA_DMACR_RXCHEN | DWCSATA_DMACR_TXMODE)
     75  1.1  rkujawa #define	DWCSATA_DMACR_TX_CLEAR(v) \
     76  1.1  rkujawa 	(((v) & ~DWCSATA_DMACR_TXCHEN) | DWCSATA_DMACR_TXMODE)
     77  1.1  rkujawa #define	DWCSATA_DMACR_RX_CLEAR(v) \
     78  1.1  rkujawa 	(((v) & ~DWCSATA_DMACR_RXCHEN) | DWCSATA_DMACR_TXMODE)
     79  1.1  rkujawa 
     80  1.1  rkujawa #define	DWCSATA_DBTSR		0x74	/* DMA burst transaction size */
     81  1.1  rkujawa #define	DWCSATA_DBTSR_MWR(bytes) (((bytes) / 4) & 0x01ff)
     82  1.1  rkujawa #define	DWCSATA_DBTSR_MRD(bytes) ((((bytes) / 4) & 0x01ff) << 16)
     83  1.1  rkujawa 
     84  1.1  rkujawa #define	DWCSATA_INTPR		0x78	/* interrupt pending, write 1 clears */
     85  1.1  rkujawa #define	DWCSATA_INTPR_DMAT	0x00000001 /* DMA transfer done */
     86  1.1  rkujawa #define	DWCSATA_INTPR_NEWFP	0x00000002 /* new first-party DMA FIS */
     87  1.1  rkujawa #define	DWCSATA_INTPR_PMABRT	0x00000004 /* power mgmt request aborted */
     88  1.1  rkujawa #define	DWCSATA_INTPR_ERR	0x00000008 /* SError & ERRMR nonzero */
     89  1.1  rkujawa #define	DWCSATA_INTPR_NEWBIST	0x00000010 /* BIST activate FIS received */
     90  1.1  rkujawa #define	DWCSATA_INTPR_PRIMERR	0x00000020 /* link layer primitive error */
     91  1.1  rkujawa #define	DWCSATA_INTPR_CMDABORT	0x00000040 /* Reg/SDB FIS w/ Status.ERR=1 */
     92  1.1  rkujawa #define	DWCSATA_INTPR_CMDGOOD	0x00000080 /* Reg/SDB FIS w/ Status.ERR=0 */
     93  1.1  rkujawa #define	DWCSATA_INTPR_ERRADDR	0x07ff0000 /* AHB slave bad-access addr bits:
     94  1.1  rkujawa 					      haddr[21:31] of the offending
     95  1.1  rkujawa 					      access (0x3ff = dma_finish_tx
     96  1.1  rkujawa 					      with nothing in DMADR) */
     97  1.1  rkujawa #define	DWCSATA_INTPR_ERRADDR_GET(v) (((v) & DWCSATA_INTPR_ERRADDR) >> 16)
     98  1.1  rkujawa #define	DWCSATA_INTPR_IPF	0x10000000 /* ATA interrupt flag (D2H intrq) */
     99  1.1  rkujawa 
    100  1.1  rkujawa #define	DWCSATA_INTMR		0x7c	/* interrupt mask, 1 = enabled */
    101  1.1  rkujawa #define	DWCSATA_INTMR_DMATM	0x00000001
    102  1.1  rkujawa #define	DWCSATA_INTMR_NEWFPM	0x00000002
    103  1.1  rkujawa #define	DWCSATA_INTMR_PMABRTM	0x00000004
    104  1.1  rkujawa #define	DWCSATA_INTMR_ERRM	0x00000008
    105  1.1  rkujawa #define	DWCSATA_INTMR_NEWBISTM	0x00000010
    106  1.1  rkujawa 
    107  1.1  rkujawa #define	DWCSATA_ERRMR		0x80	/* SError bits allowed into INTPR_ERR */
    108  1.1  rkujawa #define	DWCSATA_ERRMR_ERR_BITS	0x0fff0f03 /* all error (non-DIAG) bits */
    109  1.1  rkujawa 
    110  1.1  rkujawa #define	DWCSATA_LLCR		0x84	/* link layer control */
    111  1.1  rkujawa #define	DWCSATA_LLCR_SCRAMEN	0x00000001 /* scrambler enable */
    112  1.1  rkujawa #define	DWCSATA_LLCR_DESCRAMEN	0x00000002 /* descrambler enable */
    113  1.1  rkujawa #define	DWCSATA_LLCR_RPDEN	0x00000004 /* random pattern (BIST) enable */
    114  1.1  rkujawa 
    115  1.1  rkujawa /* BIST registers (0x88-0xb4 area per the Synopsys layout) not listed */
    116  1.1  rkujawa 
    117  1.1  rkujawa #define	DWCSATA_TESTR		0xf4	/* test mode */
    118  1.1  rkujawa #define	DWCSATA_VERSIONR	0xf8	/* core version, 4 ASCII chars */
    119  1.1  rkujawa #define	DWCSATA_IDR		0xfc	/* core ID; reset value 0 on 460EX! */
    120  1.1  rkujawa 
    121  1.1  rkujawa /*
    122  1.1  rkujawa  * DMA data FIFO window
    123  1.1  rkujawa  */
    124  1.1  rkujawa #define	DWCSATA_DMADR		0x400
    125  1.1  rkujawa #define	DWCSATA_DMADR_PHYS(base) ((uint32_t)(base) + DWCSATA_DMADR)
    126  1.1  rkujawa 
    127  1.1  rkujawa #endif	/* _IBM4XX_DWCSATAREG_H_ */
    128