148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine/*
248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine * Tsi721 PCIExpress-to-SRIO bridge definitions
348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine *
448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine * Copyright 2011, Integrated Device Technology, Inc.
548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine *
648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine * This program is free software; you can redistribute it and/or modify it
748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine * under the terms of the GNU General Public License as published by the Free
848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine * Software Foundation; either version 2 of the License, or (at your option)
948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine * any later version.
1048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine *
1148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine * This program is distributed in the hope that it will be useful, but WITHOUT
1248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
1448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine * more details.
1548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine *
1648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine * You should have received a copy of the GNU General Public License along with
1748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine * this program; if not, write to the Free Software Foundation, Inc., 59
1848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine * Temple Place - Suite 330, Boston, MA  02111-1307, USA.
1948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine */
2048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
2148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#ifndef __TSI721_H
2248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define __TSI721_H
2348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
2448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define DRV_NAME	"tsi721"
2548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
2648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define DEFAULT_HOPCOUNT	0xff
2748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define DEFAULT_DESTID		0xff
2848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
2948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine/* PCI device ID */
3048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define PCI_DEVICE_ID_TSI721		0x80ab
3148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
3248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define BAR_0	0
3348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define BAR_1	1
3448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define BAR_2	2
3548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define BAR_4	4
3648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
3748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_PC2SR_BARS	2
3848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_PC2SR_WINS	8
3948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_PC2SR_ZONES	8
4048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_MAINT_WIN	0 /* Window for outbound maintenance requests */
4148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define IDB_QUEUE		0 /* Inbound Doorbell Queue to use */
4248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define IDB_QSIZE		512 /* Inbound Doorbell Queue size */
4348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
4448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine/* Memory space sizes */
4548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_REG_SPACE_SIZE		(512 * 1024) /* 512K */
4648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DB_WIN_SIZE		(16 * 1024 * 1024) /* 16MB */
4748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
4848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define  RIO_TT_CODE_8		0x00000000
4948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define  RIO_TT_CODE_16		0x00000001
5048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
5148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMA_MAXCH	8
5248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMA_MINSTSSZ	32
5348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMA_STSBLKSZ	8
5448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
5548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_SRIO_MAXCH	8
5648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
5748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define DBELL_SID(buf)		(((u8)buf[2] << 8) | (u8)buf[3])
5848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define DBELL_TID(buf)		(((u8)buf[4] << 8) | (u8)buf[5])
5948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define DBELL_INF(buf)		(((u8)buf[0] << 8) | (u8)buf[1])
6048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
6148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_RIO_PW_MSG_SIZE	16  /* Tsi721 saves only 16 bytes of PW msg */
6248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
6348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine/* Register definitions */
6448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
6548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine/*
6648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine * Registers in PCIe configuration space
6748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine */
6848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
6948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_PCIECFG_MSIXTBL	0x0a4
7048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_MSIXTBL_OFFSET	0x2c000
7148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_PCIECFG_MSIXPBA	0x0a8
7248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_MSIXPBA_OFFSET	0x2a000
7348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_PCIECFG_EPCTL	0x400
7448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
751cee22b7f385b6c4f716846203a96e1f302132aaAlexandre Bounine#define MAX_READ_REQUEST_SZ_SHIFT	12
761cee22b7f385b6c4f716846203a96e1f302132aaAlexandre Bounine
7748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine/*
7848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine * Event Management Registers
7948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine */
8048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
8148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_RIO_EM_INT_STAT		0x10910
8248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_RIO_EM_INT_STAT_PW_RX	0x00010000
8348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
8448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_RIO_EM_INT_ENABLE	0x10914
8548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_RIO_EM_INT_ENABLE_PW_RX	0x00010000
8648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
8748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_RIO_EM_DEV_INT_EN	0x10930
8848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_RIO_EM_DEV_INT_EN_INT	0x00000001
8948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
9048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine/*
9148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine * Port-Write Block Registers
9248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine */
9348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
9448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_RIO_PW_CTL		0x10a04
9548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_RIO_PW_CTL_PW_TIMER	0xf0000000
9648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_RIO_PW_CTL_PWT_DIS	(0 << 28)
9748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_RIO_PW_CTL_PWT_103	(1 << 28)
9848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_RIO_PW_CTL_PWT_205	(1 << 29)
9948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_RIO_PW_CTL_PWT_410	(1 << 30)
10048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_RIO_PW_CTL_PWT_820	(1 << 31)
10148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_RIO_PW_CTL_PWC_MODE	0x01000000
10248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_RIO_PW_CTL_PWC_CONT	0x00000000
10348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_RIO_PW_CTL_PWC_REL	0x01000000
10448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
10548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_RIO_PW_RX_STAT		0x10a10
10648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_RIO_PW_RX_STAT_WR_SIZE	0x0000f000
10748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI_RIO_PW_RX_STAT_WDPTR	0x00000100
10848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_RIO_PW_RX_STAT_PW_SHORT	0x00000008
10948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_RIO_PW_RX_STAT_PW_TRUNC	0x00000004
11048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_RIO_PW_RX_STAT_PW_DISC	0x00000002
11148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_RIO_PW_RX_STAT_PW_VAL	0x00000001
11248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
11348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_RIO_PW_RX_CAPT(x)	(0x10a20 + (x)*4)
11448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
11548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine/*
11648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine * Inbound Doorbells
11748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine */
11848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
11948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IDB_ENTRY_SIZE	64
12048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
12148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IDQ_CTL(x)	(0x20000 + (x) * 1000)
12248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IDQ_SUSPEND	0x00000002
12348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IDQ_INIT		0x00000001
12448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
12548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IDQ_STS(x)	(0x20004 + (x) * 1000)
12648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IDQ_RUN		0x00200000
12748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
12848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IDQ_MASK(x)	(0x20008 + (x) * 1000)
12948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IDQ_MASK_MASK	0xffff0000
13048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IDQ_MASK_PATT	0x0000ffff
13148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
13248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IDQ_RP(x)	(0x2000c + (x) * 1000)
13348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IDQ_RP_PTR	0x0007ffff
13448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
13548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IDQ_WP(x)	(0x20010 + (x) * 1000)
13648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IDQ_WP_PTR	0x0007ffff
13748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
13848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IDQ_BASEL(x)	(0x20014 + (x) * 1000)
13948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IDQ_BASEL_ADDR	0xffffffc0
14048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IDQ_BASEU(x)	(0x20018 + (x) * 1000)
14148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IDQ_SIZE(x)	(0x2001c + (x) * 1000)
14248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IDQ_SIZE_VAL(size)	(__fls(size) - 4)
14348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IDQ_SIZE_MIN	512
14448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IDQ_SIZE_MAX	(512 * 1024)
14548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
14648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_SR_CHINT(x)	(0x20040 + (x) * 1000)
14748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_SR_CHINTE(x)	(0x20044 + (x) * 1000)
14848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_SR_CHINTSET(x)	(0x20048 + (x) * 1000)
14948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_SR_CHINT_ODBOK	0x00000020
15048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_SR_CHINT_IDBQRCV	0x00000010
15148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_SR_CHINT_SUSP	0x00000008
15248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_SR_CHINT_ODBTO	0x00000004
15348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_SR_CHINT_ODBRTRY	0x00000002
15448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_SR_CHINT_ODBERR	0x00000001
15548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_SR_CHINT_ALL	0x0000003f
15648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
15748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBWIN_NUM	8
15848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
15948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBWINLB(x)	(0x29000 + (x) * 20)
16048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBWINLB_BA	0xfffff000
16148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBWINLB_WEN	0x00000001
16248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
16348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_SR2PC_GEN_INTE	0x29800
16448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_SR2PC_PWE	0x29804
16548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_SR2PC_GEN_INT	0x29808
16648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
16748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DEV_INTE		0x29840
16848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DEV_INT		0x29844
16948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DEV_INTSET	0x29848
17048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DEV_INT_SMSG_CH	0x00000800
17148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DEV_INT_SMSG_NCH	0x00000400
17248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DEV_INT_SR2PC_CH	0x00000200
17348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DEV_INT_SRIO	0x00000020
17448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
17548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DEV_CHAN_INTE	0x2984c
17648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DEV_CHAN_INT	0x29850
17748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
17848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_INT_SR2PC_CHAN_M	0xff000000
17948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_INT_SR2PC_CHAN(x) (1 << (24 + (x)))
18048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_INT_IMSG_CHAN_M	0x00ff0000
18148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_INT_IMSG_CHAN(x)	(1 << (16 + (x)))
18248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_INT_OMSG_CHAN_M	0x0000ff00
18348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_INT_OMSG_CHAN(x)	(1 << (8 + (x)))
18448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
18548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine/*
18648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine * PC2SR block registers
18748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine */
18848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBWIN_NUM	TSI721_PC2SR_WINS
18948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
19048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBWINLB(x)	(0x40000 + (x) * 20)
19148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBWINLB_BA	0xffff8000
19248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBWINLB_WEN	0x00000001
19348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
19448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBWINUB(x)	(0x40004 + (x) * 20)
19548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
19648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBWINSZ(x)	(0x40008 + (x) * 20)
19748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBWINSZ_SIZE	0x00001f00
19848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBWIN_SIZE(size)	(__fls(size) - 15)
19948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
20048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_ZONE_SEL		0x41300
20148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_ZONE_SEL_RD_WRB	0x00020000
20248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_ZONE_SEL_GO	0x00010000
20348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_ZONE_SEL_WIN	0x00000038
20448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_ZONE_SEL_ZONE	0x00000007
20548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
20648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_LUT_DATA0	0x41304
20748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_LUT_DATA0_ADD	0xfffff000
20848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_LUT_DATA0_RDTYPE	0x00000f00
20948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_LUT_DATA0_NREAD	0x00000100
21048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_LUT_DATA0_MNTRD	0x00000200
21148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_LUT_DATA0_RDCRF	0x00000020
21248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_LUT_DATA0_WRCRF	0x00000010
21348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_LUT_DATA0_WRTYPE	0x0000000f
21448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_LUT_DATA0_NWR	0x00000001
21548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_LUT_DATA0_MNTWR	0x00000002
21648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_LUT_DATA0_NWR_R	0x00000004
21748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
21848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_LUT_DATA1	0x41308
21948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
22048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_LUT_DATA2	0x4130c
22148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_LUT_DATA2_HC	0xff000000
22248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_LUT_DATA2_ADD65	0x000c0000
22348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_LUT_DATA2_TT	0x00030000
22448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_LUT_DATA2_DSTID	0x0000ffff
22548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
22648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_PC2SR_INTE	0x41310
22748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
22848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DEVCTL		0x48004
22948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DEVCTL_SRBOOT_CMPL	0x00000004
23048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
23148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_I2C_INT_ENABLE	0x49120
23248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
23348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine/*
23448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine * Block DMA Engine Registers
23548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine *   x = 0..7
23648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine */
23748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
23848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAC_DWRCNT(x)	(0x51000 + (x) * 0x1000)
23948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAC_DRDCNT(x)	(0x51004 + (x) * 0x1000)
24048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
24148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAC_CTL(x)	(0x51008 + (x) * 0x1000)
24248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAC_CTL_SUSP	0x00000002
24348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAC_CTL_INIT	0x00000001
24448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
24548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAC_INT(x)	(0x5100c + (x) * 0x1000)
24648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAC_INT_STFULL	0x00000010
24748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAC_INT_DONE	0x00000008
24848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAC_INT_SUSP	0x00000004
24948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAC_INT_ERR	0x00000002
25048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAC_INT_IOFDONE	0x00000001
25148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAC_INT_ALL	0x0000001f
25248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
25348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAC_INTSET(x)	(0x51010 + (x) * 0x1000)
25448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
25548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAC_STS(x)	(0x51014 + (x) * 0x1000)
25648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAC_STS_ABORT	0x00400000
25748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAC_STS_RUN	0x00200000
25848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAC_STS_CS	0x001f0000
25948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
26048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAC_INTE(x)	(0x51018 + (x) * 0x1000)
26148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
26248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAC_DPTRL(x)	(0x51024 + (x) * 0x1000)
26348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAC_DPTRL_MASK	0xffffffe0
26448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
26548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAC_DPTRH(x)	(0x51028 + (x) * 0x1000)
26648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
26748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAC_DSBL(x)	(0x5102c + (x) * 0x1000)
26848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAC_DSBL_MASK	0xffffffc0
26948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
27048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAC_DSBH(x)	(0x51030 + (x) * 0x1000)
27148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
27248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAC_DSSZ(x)	(0x51034 + (x) * 0x1000)
27348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAC_DSSZ_SIZE_M	0x0000000f
27448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAC_DSSZ_SIZE(size)	(__fls(size) - 4)
27548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
27648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
27748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAC_DSRP(x)	(0x51038 + (x) * 0x1000)
27848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAC_DSRP_MASK	0x0007ffff
27948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
28048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAC_DSWP(x)	(0x5103c + (x) * 0x1000)
28148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAC_DSWP_MASK	0x0007ffff
28248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
28348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_BDMA_INTE	0x5f000
28448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
28548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine/*
28648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine * Messaging definitions
28748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine */
28848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_MSG_BUFFER_SIZE		RIO_MAX_MSG_SIZE
28948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_MSG_MAX_SIZE		RIO_MAX_MSG_SIZE
29048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IMSG_MAXCH		8
29148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IMSG_CHNUM		TSI721_IMSG_MAXCH
29248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IMSGD_MIN_RING_SIZE	32
29348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IMSGD_RING_SIZE		512
29448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
29548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OMSG_CHNUM		4 /* One channel per MBOX */
29648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OMSGD_MIN_RING_SIZE	32
29748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OMSGD_RING_SIZE		512
29848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
29948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine/*
30048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine * Outbound Messaging Engine Registers
30148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine *   x = 0..7
30248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine */
30348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
30448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_DWRCNT(x)		(0x61000 + (x) * 0x1000)
30548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
30648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_DRDCNT(x)		(0x61004 + (x) * 0x1000)
30748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
30848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_CTL(x)		(0x61008 + (x) * 0x1000)
30948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_CTL_MASK		0x00000007
31048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_CTL_RETRY_THR	0x00000004
31148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_CTL_SUSPEND	0x00000002
31248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_CTL_INIT		0x00000001
31348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
31448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_INT(x)		(0x6100c + (x) * 0x1000)
31548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_INTSET(x)		(0x61010 + (x) * 0x1000)
31648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_INTE(x)		(0x61018 + (x) * 0x1000)
31748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_INT_MASK		0x0000001F
31848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_INT_ST_FULL	0x00000010
31948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_INT_DONE		0x00000008
32048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_INT_SUSPENDED	0x00000004
32148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_INT_ERROR		0x00000002
32248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_INT_IOF_DONE	0x00000001
32348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_INT_ALL		TSI721_OBDMAC_INT_MASK
32448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
32548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_STS(x)		(0x61014 + (x) * 0x1000)
32648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_STS_MASK		0x007f0000
32748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_STS_ABORT		0x00400000
32848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_STS_RUN		0x00200000
32948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_STS_CS		0x001f0000
33048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
33148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_PWE(x)		(0x6101c + (x) * 0x1000)
33248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_PWE_MASK		0x00000002
33348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_PWE_ERROR_EN	0x00000002
33448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
33548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_DPTRL(x)		(0x61020 + (x) * 0x1000)
33648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_DPTRL_MASK	0xfffffff0
33748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
33848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_DPTRH(x)		(0x61024 + (x) * 0x1000)
33948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_DPTRH_MASK	0xffffffff
34048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
34148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_DSBL(x)		(0x61040 + (x) * 0x1000)
34248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_DSBL_MASK		0xffffffc0
34348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
34448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_DSBH(x)		(0x61044 + (x) * 0x1000)
34548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_DSBH_MASK		0xffffffff
34648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
34748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_DSSZ(x)		(0x61048 + (x) * 0x1000)
34848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_DSSZ_MASK		0x0000000f
34948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
35048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_DSRP(x)		(0x6104c + (x) * 0x1000)
35148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_DSRP_MASK		0x0007ffff
35248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
35348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_DSWP(x)		(0x61050 + (x) * 0x1000)
35448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OBDMAC_DSWP_MASK		0x0007ffff
35548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
35648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_RQRPTO			0x60010
35748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_RQRPTO_MASK		0x00ffffff
35848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_RQRPTO_VAL		400	/* Response TO value */
35948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
36048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine/*
36148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine * Inbound Messaging Engine Registers
36248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine *   x = 0..7
36348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine */
36448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
36548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IB_DEVID_GLOBAL		0xffff
36648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_FQBL(x)		(0x61200 + (x) * 0x1000)
36748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_FQBL_MASK		0xffffffc0
36848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
36948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_FQBH(x)		(0x61204 + (x) * 0x1000)
37048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_FQBH_MASK		0xffffffff
37148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
37248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_FQSZ_ENTRY_INX	TSI721_IMSGD_RING_SIZE
37348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_FQSZ(x)		(0x61208 + (x) * 0x1000)
37448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_FQSZ_MASK		0x0000000f
37548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
37648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_FQRP(x)		(0x6120c + (x) * 0x1000)
37748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_FQRP_MASK		0x0007ffff
37848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
37948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_FQWP(x)		(0x61210 + (x) * 0x1000)
38048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_FQWP_MASK		0x0007ffff
38148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
38248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_FQTH(x)		(0x61214 + (x) * 0x1000)
38348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_FQTH_MASK		0x0007ffff
38448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
38548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IB_DEVID			0x60020
38648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IB_DEVID_MASK		0x0000ffff
38748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
38848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_CTL(x)		(0x61240 + (x) * 0x1000)
38948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_CTL_MASK		0x00000003
39048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_CTL_SUSPEND	0x00000002
39148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_CTL_INIT		0x00000001
39248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
39348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_STS(x)		(0x61244 + (x) * 0x1000)
39448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_STS_MASK		0x007f0000
39548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBSMAC_STS_ABORT		0x00400000
39648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBSMAC_STS_RUN		0x00200000
39748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBSMAC_STS_CS		0x001f0000
39848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
39948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_INT(x)		(0x61248 + (x) * 0x1000)
40048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_INTSET(x)		(0x6124c + (x) * 0x1000)
40148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_INTE(x)		(0x61250 + (x) * 0x1000)
40248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_INT_MASK		0x0000100f
40348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_INT_SRTO		0x00001000
40448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_INT_SUSPENDED	0x00000008
40548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_INT_PC_ERROR	0x00000004
40648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_INT_FQ_LOW	0x00000002
40748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_INT_DQ_RCV	0x00000001
40848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_INT_ALL		TSI721_IBDMAC_INT_MASK
40948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
41048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_PWE(x)		(0x61254 + (x) * 0x1000)
41148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_PWE_MASK		0x00001700
41248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_PWE_SRTO		0x00001000
41348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_PWE_ILL_FMT	0x00000400
41448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_PWE_ILL_DEC	0x00000200
41548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_PWE_IMP_SP	0x00000100
41648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
41748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_DQBL(x)		(0x61300 + (x) * 0x1000)
41848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_DQBL_MASK		0xffffffc0
41948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_DQBL_ADDR		0xffffffc0
42048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
42148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_DQBH(x)		(0x61304 + (x) * 0x1000)
42248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_DQBH_MASK		0xffffffff
42348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
42448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_DQRP(x)		(0x61308 + (x) * 0x1000)
42548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_DQRP_MASK		0x0007ffff
42648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
42748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_DQWR(x)		(0x6130c + (x) * 0x1000)
42848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_DQWR_MASK		0x0007ffff
42948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
43048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_DQSZ(x)		(0x61314 + (x) * 0x1000)
43148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IBDMAC_DQSZ_MASK		0x0000000f
43248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
43348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine/*
43448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine * Messaging Engine Interrupts
43548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine */
43648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
43748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_SMSG_PWE			0x6a004
43848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
43948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_SMSG_INTE		0x6a000
44048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_SMSG_INT			0x6a008
44148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_SMSG_INTSET		0x6a010
44248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_SMSG_INT_MASK		0x0086ffff
44348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_SMSG_INT_UNS_RSP		0x00800000
44448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_SMSG_INT_ECC_NCOR	0x00040000
44548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_SMSG_INT_ECC_COR		0x00020000
44648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_SMSG_INT_ECC_NCOR_CH	0x0000ff00
44748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_SMSG_INT_ECC_COR_CH	0x000000ff
44848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
44948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_SMSG_ECC_LOG		0x6a014
45048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_SMSG_ECC_LOG_MASK	0x00070007
45148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_SMSG_ECC_LOG_ECC_NCOR_M	0x00070000
45248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_SMSG_ECC_LOG_ECC_COR_M	0x00000007
45348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
45448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_RETRY_GEN_CNT		0x6a100
45548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_RETRY_GEN_CNT_MASK	0xffffffff
45648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
45748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_RETRY_RX_CNT		0x6a104
45848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_RETRY_RX_CNT_MASK	0xffffffff
45948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
46048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_SMSG_ECC_COR_LOG(x)	(0x6a300 + (x) * 4)
46148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_SMSG_ECC_COR_LOG_MASK	0x000000ff
46248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
46348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_SMSG_ECC_NCOR(x)		(0x6a340 + (x) * 4)
46448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_SMSG_ECC_NCOR_MASK	0x000000ff
46548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
46648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine/*
46748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine * Block DMA Descriptors
46848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine */
46948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
47048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bouninestruct tsi721_dma_desc {
47148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	__le32 type_id;
47248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
47348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAD_DEVID	0x0000ffff
47448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAD_CRF		0x00010000
47548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAD_PRIO	0x00060000
47648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAD_RTYPE	0x00780000
47748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAD_IOF		0x08000000
47848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAD_DTYPE	0xe0000000
47948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
48048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	__le32 bcount;
48148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
48248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAD_BCOUNT1	0x03ffffff /* if DTYPE == 1 */
48348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAD_BCOUNT2	0x0000000f /* if DTYPE == 2 */
48448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAD_TT		0x0c000000
48548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAD_RADDR0	0xc0000000
48648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
48748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	union {
48848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine		__le32 raddr_lo;	   /* if DTYPE == (1 || 2) */
48948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine		__le32 next_lo;		   /* if DTYPE == 3 */
49048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	};
49148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
49248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAD_CFGOFF	0x00ffffff
49348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMAD_HOPCNT	0xff000000
49448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
49548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	union {
49648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine		__le32 raddr_hi;	   /* if DTYPE == (1 || 2) */
49748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine		__le32 next_hi;		   /* if DTYPE == 3 */
49848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	};
49948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
50048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	union {
50148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine		struct {		   /* if DTYPE == 1 */
50248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine			__le32 bufptr_lo;
50348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine			__le32 bufptr_hi;
50448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine			__le32 s_dist;
50548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine			__le32 s_size;
50648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine		} t1;
50748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine		__le32 data[4];		   /* if DTYPE == 2 */
50848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine		u32    reserved[4];	   /* if DTYPE == 3 */
50948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	};
51048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine} __aligned(32);
51148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
51248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine/*
51348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine * Inbound Messaging Descriptor
51448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine */
51548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bouninestruct tsi721_imsg_desc {
51648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	__le32 type_id;
51748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
51848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IMD_DEVID	0x0000ffff
51948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IMD_CRF		0x00010000
52048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IMD_PRIO		0x00060000
52148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IMD_TT		0x00180000
52248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IMD_DTYPE	0xe0000000
52348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
52448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	__le32 msg_info;
52548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
52648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IMD_BCOUNT	0x00000ff8
52748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IMD_SSIZE	0x0000f000
52848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IMD_LETER	0x00030000
52948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IMD_XMBOX	0x003c0000
53048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IMD_MBOX		0x00c00000
53148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IMD_CS		0x78000000
53248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_IMD_HO		0x80000000
53348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
53448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	__le32 bufptr_lo;
53548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	__le32 bufptr_hi;
53648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	u32    reserved[12];
53748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
53848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine} __aligned(64);
53948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
54048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine/*
54148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine * Outbound Messaging Descriptor
54248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine */
54348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bouninestruct tsi721_omsg_desc {
54448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	__le32 type_id;
54548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
54648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OMD_DEVID	0x0000ffff
54748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OMD_CRF		0x00010000
54848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OMD_PRIO		0x00060000
54948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OMD_IOF		0x08000000
55048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OMD_DTYPE	0xe0000000
55148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OMD_RSRVD	0x17f80000
55248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
55348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	__le32 msg_info;
55448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
55548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OMD_BCOUNT	0x00000ff8
55648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OMD_SSIZE	0x0000f000
55748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OMD_LETER	0x00030000
55848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OMD_XMBOX	0x003c0000
55948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OMD_MBOX		0x00c00000
56048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_OMD_TT		0x0c000000
56148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
56248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	union {
56348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine		__le32 bufptr_lo;	/* if DTYPE == 4 */
56448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine		__le32 next_lo;		/* if DTYPE == 5 */
56548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	};
56648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
56748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	union {
56848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine		__le32 bufptr_hi;	/* if DTYPE == 4 */
56948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine		__le32 next_hi;		/* if DTYPE == 5 */
57048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	};
57148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
57248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine} __aligned(16);
57348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
57448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bouninestruct tsi721_dma_sts {
57548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	__le64	desc_sts[8];
57648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine} __aligned(64);
57748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
57848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bouninestruct tsi721_desc_sts_fifo {
57948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	union {
58048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine		__le64	da64;
58148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine		struct {
58248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine			__le32	lo;
58348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine			__le32	hi;
58448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine		} da32;
58548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	} stat[8];
58648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine} __aligned(64);
58748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
58848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine/* Descriptor types for BDMA and Messaging blocks */
58948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounineenum dma_dtype {
59048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	DTYPE1 = 1, /* Data Transfer DMA Descriptor */
59148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	DTYPE2 = 2, /* Immediate Data Transfer DMA Descriptor */
59248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	DTYPE3 = 3, /* Block Pointer DMA Descriptor */
59348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	DTYPE4 = 4, /* Outbound Msg DMA Descriptor */
59448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	DTYPE5 = 5, /* OB Messaging Block Pointer Descriptor */
59548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	DTYPE6 = 6  /* Inbound Messaging Descriptor */
59648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine};
59748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
59848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounineenum dma_rtype {
59948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	NREAD = 0,
60048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	LAST_NWRITE_R = 1,
60148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	ALL_NWRITE = 2,
60248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	ALL_NWRITE_R = 3,
60348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	MAINT_RD = 4,
60448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	MAINT_WR = 5
60548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine};
60648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
60748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine/*
60848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine * mport Driver Definitions
60948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine */
61048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMA_CHNUM	TSI721_DMA_MAXCH
61148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
61248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMACH_MAINT	0	/* DMA channel for maint requests */
61348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_DMACH_MAINT_NBD	32	/* Number of BDs for maint requests */
61448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
61548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define MSG_DMA_ENTRY_INX_TO_SIZE(x)	((0x10 << (x)) & 0xFFFF0)
61648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
61748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounineenum tsi721_smsg_int_flag {
61848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	SMSG_INT_NONE		= 0x00000000,
61948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	SMSG_INT_ECC_COR_CH	= 0x000000ff,
62048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	SMSG_INT_ECC_NCOR_CH	= 0x0000ff00,
62148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	SMSG_INT_ECC_COR	= 0x00020000,
62248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	SMSG_INT_ECC_NCOR	= 0x00040000,
62348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	SMSG_INT_UNS_RSP	= 0x00800000,
62448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	SMSG_INT_ALL		= 0x0006ffff
62548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine};
62648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
62748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine/* Structures */
62848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
62948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bouninestruct tsi721_bdma_chan {
63048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	int		bd_num;		/* number of buffer descriptors */
63148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	void		*bd_base;	/* start of DMA descriptors */
63248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	dma_addr_t	bd_phys;
63348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	void		*sts_base;	/* start of DMA BD status FIFO */
63448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	dma_addr_t	sts_phys;
63548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	int		sts_size;
63648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine};
63748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
63848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bouninestruct tsi721_imsg_ring {
63948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	u32		size;
64048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	/* VA/PA of data buffers for incoming messages */
64148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	void		*buf_base;
64248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	dma_addr_t	buf_phys;
64348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	/* VA/PA of circular free buffer list */
64448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	void		*imfq_base;
64548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	dma_addr_t	imfq_phys;
64648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	/* VA/PA of Inbound message descriptors */
64748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	void		*imd_base;
64848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	dma_addr_t	imd_phys;
64948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	 /* Inbound Queue buffer pointers */
65048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	void		*imq_base[TSI721_IMSGD_RING_SIZE];
65148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
65248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	u32		rx_slot;
65348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	void		*dev_id;
65448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	u32		fq_wrptr;
65548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	u32		desc_rdptr;
65648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	spinlock_t	lock;
65748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine};
65848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
65948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bouninestruct tsi721_omsg_ring {
66048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	u32		size;
66148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	/* VA/PA of OB Msg descriptors */
66248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	void		*omd_base;
66348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	dma_addr_t	omd_phys;
66448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	/* VA/PA of OB Msg data buffers */
66548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	void		*omq_base[TSI721_OMSGD_RING_SIZE];
66648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	dma_addr_t	omq_phys[TSI721_OMSGD_RING_SIZE];
66748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	/* VA/PA of OB Msg descriptor status FIFO */
66848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	void		*sts_base;
66948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	dma_addr_t	sts_phys;
67048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	u32		sts_size; /* # of allocated status entries */
67148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	u32		sts_rdptr;
67248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
67348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	u32		tx_slot;
67448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	void		*dev_id;
67548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	u32		wr_count;
67648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	spinlock_t	lock;
67748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine};
67848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
67948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounineenum tsi721_flags {
68048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	TSI721_USING_MSI	= (1 << 0),
68148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	TSI721_USING_MSIX	= (1 << 1),
68248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	TSI721_IMSGID_SET	= (1 << 2),
68348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine};
68448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
68548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#ifdef CONFIG_PCI_MSI
68648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine/*
68748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine * MSI-X Table Entries (0 ... 69)
68848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine */
68948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_MSIX_DMACH_DONE(x)	(0 + (x))
69048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_MSIX_DMACH_INT(x)	(8 + (x))
69148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_MSIX_BDMA_INT		16
69248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_MSIX_OMSG_DONE(x)	(17 + (x))
69348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_MSIX_OMSG_INT(x)		(25 + (x))
69448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_MSIX_IMSG_DQ_RCV(x)	(33 + (x))
69548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_MSIX_IMSG_INT(x)		(41 + (x))
69648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_MSIX_MSG_INT		49
69748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_MSIX_SR2PC_IDBQ_RCV(x)	(50 + (x))
69848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_MSIX_SR2PC_CH_INT(x)	(58 + (x))
69948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_MSIX_SR2PC_INT		66
70048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_MSIX_PC2SR_INT		67
70148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_MSIX_SRIO_MAC_INT	68
70248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define TSI721_MSIX_I2C_INT		69
70348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
70448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine/* MSI-X vector and init table entry indexes */
70548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounineenum tsi721_msix_vect {
70648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	TSI721_VECT_IDB,
70748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	TSI721_VECT_PWRX, /* PW_RX is part of SRIO MAC Interrupt reporting */
70848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	TSI721_VECT_OMB0_DONE,
70948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	TSI721_VECT_OMB1_DONE,
71048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	TSI721_VECT_OMB2_DONE,
71148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	TSI721_VECT_OMB3_DONE,
71248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	TSI721_VECT_OMB0_INT,
71348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	TSI721_VECT_OMB1_INT,
71448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	TSI721_VECT_OMB2_INT,
71548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	TSI721_VECT_OMB3_INT,
71648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	TSI721_VECT_IMB0_RCV,
71748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	TSI721_VECT_IMB1_RCV,
71848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	TSI721_VECT_IMB2_RCV,
71948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	TSI721_VECT_IMB3_RCV,
72048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	TSI721_VECT_IMB0_INT,
72148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	TSI721_VECT_IMB1_INT,
72248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	TSI721_VECT_IMB2_INT,
72348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	TSI721_VECT_IMB3_INT,
72448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	TSI721_VECT_MAX
72548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine};
72648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
72748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#define IRQ_DEVICE_NAME_MAX	64
72848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
72948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bouninestruct msix_irq {
73048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	u16	vector;
73148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	char	irq_name[IRQ_DEVICE_NAME_MAX];
73248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine};
73348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#endif /* CONFIG_PCI_MSI */
73448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
73548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bouninestruct tsi721_device {
73648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	struct pci_dev	*pdev;
73748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	struct rio_mport *mport;
73848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	u32		flags;
73948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	void __iomem	*regs;
74048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#ifdef CONFIG_PCI_MSI
74148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	struct msix_irq	msix[TSI721_VECT_MAX];
74248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#endif
74348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	/* Doorbells */
74448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	void __iomem	*odb_base;
74548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	void		*idb_base;
74648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	dma_addr_t	idb_dma;
74748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	struct work_struct idb_work;
74848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	u32		db_discard_count;
74948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
75048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	/* Inbound Port-Write */
75148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	struct work_struct pw_work;
75248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	struct kfifo	pw_fifo;
75348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	spinlock_t	pw_fifo_lock;
75448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	u32		pw_discard_count;
75548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
75648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	/* BDMA Engine */
75748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	struct tsi721_bdma_chan bdma[TSI721_DMA_CHNUM];
75848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
75948618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	/* Inbound Messaging */
76048618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	int		imsg_init[TSI721_IMSG_CHNUM];
76148618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	struct tsi721_imsg_ring imsg_ring[TSI721_IMSG_CHNUM];
76248618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
76348618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	/* Outbound Messaging */
76448618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	int		omsg_init[TSI721_OMSG_CHNUM];
76548618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine	struct tsi721_omsg_ring	omsg_ring[TSI721_OMSG_CHNUM];
76648618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine};
76748618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine
76848618fb4e522d9d02e217ac05f52749545c1af20Alexandre Bounine#endif
769