blob: 5920d9e6d96c3c332c48e397fcf8c05c355daf29 [file] [log] [blame]
/*
* include/ambhw/ts.h
*
* History:
* 2008/08/06 - [Chien-Yang Chen] created file
*
* Copyright (C) 2006-2008, Ambarella, Inc.
*/
#ifndef __AMBHW__TS_H__
#define __AMBHW__TS_H__
#include <ambhw/chip.h>
#include <ambhw/busaddr.h>
/****************************************************/
/* Capabilities based on chip revision */
/****************************************************/
#if (CHIP_REV == A6)
#define TS_ESC_DEAD_LOCK 1
#else
#define TS_ESC_DEAD_LOCK 0
#endif
#define TS_TX_MAX_CHANS 2
#define TS_RX_MAX_CHANS 2
#define TS_MAX_CHANS (TS_TX_MAX_CHANS + TS_RX_MAX_CHANS)
/****************************************************/
/* Controller registers definitions */
/****************************************************/
/* Offset */
#define TS_CH0_TX_CTR_OFFSET 0x100
#define TS_CH0_TX_STS_OFFSET 0x104
#define TS_CH0_TX_PKT_INFO_OFFSET 0x108
#define TS_CH0_TX_DMA_BASE_OFFSET 0x10c
#define TS_CH0_TX_DMA_LIMIT_OFFSET 0x110
#define TS_CH0_TX_DMA_RPTR_OFFSET 0x114
#define TS_CH0_TX_DMA_STOP_OFFSET 0x118
#define TS_CH0_TX_DMA_CTRL_OFFSET 0x124
#define TS_CH0_TX_DMA_NOTIFY_OFFSET 0x128
#define TS_CH1_TX_CTR_OFFSET 0x180
#define TS_CH1_TX_STS_OFFSET 0x184
#define TS_CH1_TX_PKT_INFO_OFFSET 0x188
#define TS_CH1_TX_DMA_BASE_OFFSET 0x18c
#define TS_CH1_TX_DMA_LIMIT_OFFSET 0x190
#define TS_CH1_TX_DMA_RPTR_OFFSET 0x194
#define TS_CH1_TX_DMA_STOP_OFFSET 0x198
#define TS_CH1_TX_DMA_CTRL_OFFSET 0x1a4
#define TS_CH1_TX_DMA_NOTIFY_OFFSET 0x1a8
#define TS_CH0_RX_CTR_OFFSET 0x200
#define TS_CH0_RX_STS_OFFSET 0x204
#define TS_CH0_RX_TM_OFFSET 0x208
#define TS_CH0_RX_TEST_CTR_OFFSET 0x20c
#define TS_CH0_RX_PKT_INFO_OFFSET 0x210
#define TS_CH0_RX_DMA_BASE_OFFSET 0x214
#define TS_CH0_RX_DMA_LIMIT_OFFSET 0x218
#define TS_CH0_RX_DMA_WPTR_OFFSET 0x21c
#define TS_CH0_RX_DMA_STOP_OFFSET 0x220
#define TS_CH0_RX_DMA_CTRL_OFFSET 0x228
#define TS_CH0_RX_DMA_NOTIFY_OFFSET 0x22c
#define TS_CH1_RX_CTR_OFFSET 0x280
#define TS_CH1_RX_STS_OFFSET 0x284
#define TS_CH1_RX_TM_OFFSET 0x288
#define TS_CH1_RX_TEST_CTR_OFFSET 0x28c
#define TS_CH1_RX_PKT_INFO_OFFSET 0x290
#define TS_CH1_RX_DMA_BASE_OFFSET 0x294
#define TS_CH1_RX_DMA_LIMIT_OFFSET 0x298
#define TS_CH1_RX_DMA_WPTR_OFFSET 0x29c
#define TS_CH1_RX_DMA_STOP_OFFSET 0x2a0
#define TS_CH1_RX_DMA_CTRL_OFFSET 0x2a8
#define TS_CH1_RX_DMA_NOTIFY_OFFSET 0x2ac
/* Registers */
#define TS_CH0_TX_CTR_REG TS_REG(0x100)
#define TS_CH0_TX_STS_REG TS_REG(0x104)
#define TS_CH0_TX_PKT_INFO_REG TS_REG(0x108)
#define TS_CH0_TX_DMA_BASE_REG TS_REG(0x10c)
#define TS_CH0_TX_DMA_LIMIT_REG TS_REG(0x110)
#define TS_CH0_TX_DMA_RPTR_REG TS_REG(0x114)
#define TS_CH0_TX_DMA_STOP_REG TS_REG(0x118)
#define TS_CH0_TX_DMA_CTRL_REG TS_REG(0x124)
#define TS_CH0_TX_DMA_NOTIFY_REG TS_REG(0x128)
#define TS_CH1_TX_CTR_REG TS_REG(0x180)
#define TS_CH1_TX_STS_REG TS_REG(0x184)
#define TS_CH1_TX_PKT_INFO_REG TS_REG(0x188)
#define TS_CH1_TX_DMA_BASE_REG TS_REG(0x18c)
#define TS_CH1_TX_DMA_LIMIT_REG TS_REG(0x190)
#define TS_CH1_TX_DMA_RPTR_REG TS_REG(0x194)
#define TS_CH1_TX_DMA_STOP_REG TS_REG(0x198)
#define TS_CH1_TX_DMA_CTRL_REG TS_REG(0x1a4)
#define TS_CH1_TX_DMA_NOTIFY_REG TS_REG(0x1a8)
#define TS_CH0_RX_CTR_REG TS_REG(0x200)
#define TS_CH0_RX_STS_REG TS_REG(0x204)
#define TS_CH0_RX_TM_REG TS_REG(0x208)
#define TS_CH0_RX_TEST_CTR_REG TS_REG(0x20c)
#define TS_CH0_RX_PKT_INFO_REG TS_REG(0x210)
#define TS_CH0_RX_DMA_BASE_REG TS_REG(0x214)
#define TS_CH0_RX_DMA_LIMIT_REG TS_REG(0x218)
#define TS_CH0_RX_DMA_WPTR_REG TS_REG(0x21c)
#define TS_CH0_RX_DMA_STOP_REG TS_REG(0x220)
#define TS_CH0_RX_DMA_CTRL_REG TS_REG(0x228)
#define TS_CH0_RX_DMA_NOTIFY_REG TS_REG(0x22c)
#define TS_CH1_RX_CTR_REG TS_REG(0x280)
#define TS_CH1_RX_STS_REG TS_REG(0x284)
#define TS_CH1_RX_TM_REG TS_REG(0x288)
#define TS_CH1_RX_TEST_CTR_REG TS_REG(0x28c)
#define TS_CH1_RX_PKT_INFO_REG TS_REG(0x290)
#define TS_CH1_RX_DMA_BASE_REG TS_REG(0x294)
#define TS_CH1_RX_DMA_LIMIT_REG TS_REG(0x298)
#define TS_CH1_RX_DMA_WPTR_REG TS_REG(0x29c)
#define TS_CH1_RX_DMA_STOP_REG TS_REG(0x2a0)
#define TS_CH1_RX_DMA_CTRL_REG TS_REG(0x2a8)
#define TS_CH1_RX_DMA_NOTIFY_REG TS_REG(0x2ac)
/* ChanX */
#define TS_CHX_TX_CTR_REG(x) TS_REG(0x100 + (0x80 * (x)))
#define TS_CHX_TX_STS_REG(x) TS_REG(0x104 + (0x80 * (x)))
#define TS_CHX_TX_PKT_INFO_REG(x) TS_REG(0x108 + (0x80 * (x)))
#define TS_CHX_TX_DMA_BASE_REG(x) TS_REG(0x10c + (0x80 * (x)))
#define TS_CHX_TX_DMA_LIMIT_REG(x) TS_REG(0x110 + (0x80 * (x)))
#define TS_CHX_TX_DMA_RPTR_REG(x) TS_REG(0x114 + (0x80 * (x)))
#define TS_CHX_TX_DMA_STOP_REG(x) TS_REG(0x118 + (0x80 * (x)))
#define TS_CHX_TX_DMA_CTRL_REG(x) TS_REG(0x124 + (0x80 * (x)))
#define TS_CHX_TX_DMA_NOTIFY_REG(x) TS_REG(0x128 + (0x80 * (x)))
#define TS_CHX_RX_CTR_REG(x) TS_REG(0x200 + (0x80 * (x)))
#define TS_CHX_RX_STS_REG(x) TS_REG(0x204 + (0x80 * (x)))
#define TS_CHX_RX_TM_REG(x) TS_REG(0x208 + (0x80 * (x)))
#define TS_CHX_RX_TEST_CTR_REG(x) TS_REG(0x20c + (0x80 * (x)))
#define TS_CHX_RX_PKT_INFO_REG(x) TS_REG(0x210 + (0x80 * (x)))
#define TS_CHX_RX_DMA_BASE_REG(x) TS_REG(0x214 + (0x80 * (x)))
#define TS_CHX_RX_DMA_LIMIT_REG(x) TS_REG(0x218 + (0x80 * (x)))
#define TS_CHX_RX_DMA_WPTR_REG(x) TS_REG(0x21c + (0x80 * (x)))
#define TS_CHX_RX_DMA_STOP_REG(x) TS_REG(0x220 + (0x80 * (x)))
#define TS_CHX_RX_DMA_CTRL_REG(x) TS_REG(0x228 + (0x80 * (x)))
#define TS_CHX_RX_DMA_NOTIFY_REG(x) TS_REG(0x22c + (0x80 * (x)))
/***************************/
/* TX bitfileds definition */
/***************************/
/* TS_CHX_TX_CTR_REG */
#define TS_TX_CTR_INVALID_CLK_DIS 0x00020000
#define TS_TX_CTR_DMA_NOTIFY_EN 0x00010000
#define TS_TX_CTR_STOP 0x00008000
#define TS_TX_CTR_CLK_EN 0x00004000
#define TS_TX_CTR_SRC_EXT 0x00001000
#define TS_TX_CTR_SRC_CORE 0x00000000
#define TS_TX_CTR_DIV(x) (((x) & 0x1f) << 7)
#define TS_TX_CTR_CLK_POL_NE 0x00000040
#define TS_TX_CTR_CLK_POL_PE 0x00000000
#define TS_TX_CTR_START 0x00000020
#define TS_TX_CTR_IDLE 0x00000000
#define TS_TX_CTR_PKT_SSI 0x00000008
#define TS_TX_CTR_PKT_SPI 0x00000000
#define TS_TX_CTR_RST 0x00000004
#define TS_TX_CTR_FINISH_INT_EN 0x00000002
#define TS_TX_CTR_FIFO_UNDER_ERR_EN 0x00000001
/* TS_CHX_TX_STS_REG */
#define TS_TX_STS_DMA_NOTIFY 0x00000400
#define TS_TX_STS_FIFO_WM(x) (((x) & 0x3f3) >> 2)
#define TS_TX_STS_FINISH_INT 0x00000002
#define TS_TX_STS_FIFO_UNDER_ERR 0x00000001
/* TS_CHX_TX_PKT_INFO_REG */
#define TS_TX_PKT_INFO_LEN(x) (((x) & 0x3ff) << 16)
#define TS_TX_PKT_INFO_VALID_LEN(x) ((x) & 0x3ff)
/* TS_CHX_TX_DMA_CTRL_REG */
#define TS_TX_DMA_CTRL_ADDR_MODE(x) (((x) & 0x1) << 4)
#define TS_TX_DMA_CTRL_FIFO_TH(x) ((x) & 0x3)
/***************************/
/* RX bitfileds definition */
/***************************/
/* TS_CHX_RX_CTR_REG */
#define TS_TX_CTR_STRICT_PKT_ERR 0x20000000
#define TS_RX_CTR_CLK_SEL_RX 0x00000000
#define TS_RX_CTR_CLK_SEL_HCLK 0x10000000
#define TS_RX_CTR_DMA_NOTIFY_EN 0x08000000
#define TS_RX_CTR_STOP 0x04000000
#define TS_RX_CTR_CLK_EN 0x02000000
#define TS_RX_CTR_TIMEOUT(x) (((x) & 0xffff) << 8)
#define TS_RX_CTR_PKT_LEN_ERR_EN 0x00000080
#define TS_RX_CTR_CLK_POL_NE 0x00000040
#define TS_RX_CTR_CLK_POL_PE 0x00000000
#define TS_RX_CTR_START 0x00000020
#define TS_RX_CTR_IDLE 0x00000000
#define TS_RX_CTR_DATA_RAW 0x00000010
#define TS_RX_CTR_DATA_TS 0x00000000
#define TS_RX_CTR_PKT_SSI 0x00000008
#define TS_RX_CTR_PKT_SPI 0x00000000
#define TS_RX_CTR_RST 0x00000004
#define TS_RX_CTR_FINISH_INT_EN 0x00000002
#define TS_RX_CTR_FIFO_OVER_ERR_EN 0x00000001
/* TS_CHX_RX_STS_REG */
#define TS_RX_STS_DMA_NOTIFY 0x00010000
#define TS_RX_STS_FIFO_WM(x) (((x) & 0xff00) >> 8)
#define TS_RX_STS_PKT_LEN_ERR 0x00000080
#define TS_RX_STS_FINISH_INT 0x00000002
#define TS_RX_STS_FIFO_OVER_ERR 0x00000001
/* TS_CHX_RX_TM_REG */
/* Read only */
/* TS_CHX_RX_TEST_CTR_REG */
#define TS_RX_TEST_CTR_LOOPBACK_EN 0x00000001
/* TS_CHX_RX_PKT_INFO_REG */
#define TS_RX_PKT_INFO_LEN(x) (((x) & 0x3ff) << 16)
#define TS_RX_PKT_INFO_VALID_LEN(x) ((x) & 0x3ff)
/* TS_CHX_RX_DMA_CTRL_REG */
#define TS_RX_DMA_CTRL_ADDR_MODE(x) (((x) & 0x1) << 4)
#endif