blob: f8ade9a5604e2ba649534f43192097083b9b5764 [file] [log] [blame]
/*******************************************************************************
Copyright (C) Marvell International Ltd. and its affiliates
This software file (the "File") is owned and distributed by Marvell
International Ltd. and/or its affiliates ("Marvell") under the following
alternative licensing terms. Once you have made an election to distribute the
File under one of the following license alternatives, please (i) delete this
introductory statement regarding license alternatives, (ii) delete the two
license alternatives that you have not elected to use and (iii) preserve the
Marvell copyright notice above.
********************************************************************************
Marvell Commercial License Option
If you received this File from Marvell and you have entered into a commercial
license agreement (a "Commercial License") with Marvell, the File is licensed
to you under the terms of the applicable Commercial License.
********************************************************************************
Marvell GPL License Option
If you received this File from Marvell, you may opt to use, redistribute and/or
modify this File in accordance with the terms and conditions of the General
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
available along with the File in the license.txt file or by writing to the Free
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
DISCLAIMED. The GPL License provides additional details about this warranty
disclaimer.
********************************************************************************
Marvell BSD License Option
If you received this File from Marvell, you may opt to use, redistribute and/or
modify this File under the following licensing terms.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* 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.
* Neither the name of Marvell nor the names of its contributors may be
used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************/
#ifndef __INCmvTdmRegsh
#define __INCmvTdmRegsh
#include "mvSysTdmConfig.h"
/************************************************/
/* TDM to Mbus Bridge Register Map */
/************************************************/
#define TDM_SPI_MUX_REG (MV_TDM_REGS_BASE + 0x4000)
#define TDM_MBUS_CONFIG_REG (MV_TDM_REGS_BASE + 0x4010)
#define TDM_MISC_REG (MV_TDM_REGS_BASE + 0x4070)
#define TDM_CLK_DIV_REG (MV_TDM_REGS_BASE + 0x4074)
/*****************************************/
/* TDM Control Register Map */
/*****************************************/
#define PCM_CTRL_REG MV_TDM_REGS_BASE
#define TIMESLOT_CTRL_REG (MV_TDM_REGS_BASE + 0x4)
#define FRAME_TIMESLOT_REG (MV_TDM_REGS_BASE + 0x38)
#define PCM_CLK_RATE_DIV_REG (MV_TDM_REGS_BASE + 0x3c)
#define INT_EVENT_MASK_REG (MV_TDM_REGS_BASE + 0x40)
/*#define INT_EVENT_REG 0xb0044*/
#define INT_STATUS_MASK_REG (MV_TDM_REGS_BASE + 0x48)
#define INT_RESET_SELECT_REG (MV_TDM_REGS_BASE + 0x4c)
#define INT_STATUS_REG (MV_TDM_REGS_BASE + 0x50)
#define DUMMY_RX_WRITE_DATA_REG (MV_TDM_REGS_BASE + 0x54)
#define MISC_CTRL_REG (MV_TDM_REGS_BASE + 0x58)
#define TESTBUS_MUX_SELECT_REG (MV_TDM_REGS_BASE + 0x5c)
#define CUR_TIMESLOT_REG (MV_TDM_REGS_BASE + 0x70)
#define TDM_REV_REG (MV_TDM_REGS_BASE + 0x74)
#define DMA_ABORT_ADDR_REG (MV_TDM_REGS_BASE + 0x80)
#define DMA_ABORT_INFO_REG (MV_TDM_REGS_BASE + 0x84)
#define CH_WB_DELAY_CTRL_REG(ch) ((MV_TDM_REGS_BASE + 0x88) | ((ch)<<2))
#define CH_DELAY_CTRL_REG(ch) ((MV_TDM_REGS_BASE + 0x8) | ((ch)<<2))
#define CH_SAMPLE_REG(ch) ((MV_TDM_REGS_BASE + 0x30) | ((ch)<<2))
#define CH_DBG_REG(ch) ((MV_TDM_REGS_BASE + 0x78) | ((ch)<<2))
#define CH_TX_CUR_ADDR_REG(ch) ((MV_TDM_REGS_BASE + 0x60) | ((ch)<<3))
#define CH_RX_CUR_ADDR_REG(ch) ((MV_TDM_REGS_BASE + 0x64) | ((ch)<<3))
#define CH_ENABLE_REG(ch) ((MV_TDM_REGS_BASE) | (((ch)+1)<<4))
#define CH_BUFF_OWN_REG(ch) ((MV_TDM_REGS_BASE + 0x4) | (((ch)+1)<<4))
#define CH_TX_ADDR_REG(ch) ((MV_TDM_REGS_BASE + 0x8) | (((ch)+1)<<4))
#define CH_RX_ADDR_REG(ch) ((MV_TDM_REGS_BASE + 0xc) | (((ch)+1)<<4))
/* PCM_CLK_RATE_DIV_REG bits */
#define PCM_256KHZ 1
#define PCM_512KHZ (1<<1)
#define PCM_1024KHZ (1<<2)
#define PCM_2048KHZ (1<<3)
#define PCM_4096KHZ (1<<4)
#define PCM_8192KHZ (1<<5)
#define PCM_DIV_PASS (1<<6)
/* FRAME_TIMESLOT_REG bits */
#define TIMESLOTS4_256KHZ (1<<2)
#define TIMESLOTS8_512KHZ (1<<3)
#define TIMESLOTS16_1024KHZ (1<<4)
#define TIMESLOTS32_2048KHZ (1<<5)
#define TIMESLOTS64_4096KHZ (1<<6)
#define TIMESLOTS128_8192KHZ (1<<7)
/* PCM_CTRL_REG bits */
#define MASTER_PCLK_OFFS 0
#define MASTER_PCLK_TDM (0<<MASTER_PCLK_OFFS)
#define MASTER_PCLK_EXTERNAL (1<<MASTER_PCLK_OFFS)
#define MASTER_FS_OFFS 1
#define MASTER_FS_TDM (0<<MASTER_FS_OFFS)
#define MASTER_FS_EXTERNAL (1<<MASTER_FS_OFFS)
#define DATA_POLAR_OFFS 2
#define DATA_POLAR_NEG (0<<DATA_POLAR_OFFS)
#define DATA_POLAR_POS (1<<DATA_POLAR_OFFS)
#define FS_POLAR_OFFS 3
#define FS_POLAR_NEG (0<<FS_POLAR_OFFS)
#define FS_POLAR_POS (1<<FS_POLAR_OFFS)
#define INVERT_FS_OFFS 4
#define INVERT_FS_HI (0<<INVERT_FS_OFFS)
#define INVERT_FS_LO (1<<INVERT_FS_OFFS)
#define FS_TYPE_OFFS 5
#define FS_TYPE_SHORT (0<<FS_TYPE_OFFS)
#define FS_TYPE_LONG (1<<FS_TYPE_OFFS)
#define PCM_SAMPLE_SIZE_OFFS 6
#define PCM_SAMPLE_SIZE_1 (0<<PCM_SAMPLE_SIZE_OFFS)
#define PCM_SAMPLE_SIZE_2 (1<<PCM_SAMPLE_SIZE_OFFS)
#define CH_DELAY_OFFS 8
#define CH_DELAY_DISABLE (0<<CH_DELAY_OFFS)
#define CH_DELAY_ENABLE (3<<CH_DELAY_OFFS)
#define CH_QUALITY_OFFS 10
#define CH_QUALITY_DISABLE (0<<CH_QUALITY_OFFS)
#define CH_QUALITY_ENABLE (3<<CH_QUALITY_OFFS)
#define QUALITY_POLARITY_OFFS 12
#define QUALITY_POLARITY_NEG (0<<QUALITY_POLARITY_OFFS)
#define QUALITY_POLARITY_POS (1<<QUALITY_POLARITY_OFFS)
#define QUALITY_TYPE_OFFS 13
#define QUALITY_TYPE_TIME_SLOT (0<<QUALITY_TYPE_OFFS)
#define QUALITY_TYPE_MSB (3<<QUALITY_TYPE_OFFS)
#define CS_CTRL_OFFS 15
#define CS_CTRL_DONT_CARE (0<<CS_CTRL_OFFS)
#define CS_CTRL (1<<CS_CTRL_OFFS)
#define CS_CTRL_0 (0<<CS_CTRL_OFFS)
#define CS_CTRL_1 (1<<CS_CTRL_OFFS)
#define WIDEBAND_OFFS 16
#define WIDEBAND_OFF (0<<WIDEBAND_OFFS)
#define WIDEBAND_ON (3<<WIDEBAND_OFFS)
#define PERF_GBUS_OFFS 31
#define PERF_GBUS_ONE_ACCESS (0<<PERF_GBUS_OFFS)
#define PERF_GBUS_TWO_ACCESS (1<<PERF_GBUS_OFFS)
/* TIMESLOT_CTRL_REG bits */
#define CH0_RX_SLOT_OFFS 0
#define CH0_TX_SLOT_OFFS 8
#define CH1_RX_SLOT_OFFS 16
#define CH1_TX_SLOT_OFFS 24
/* CH_SAMPLE_REG bits */
#define TOTAL_CNT_OFFS 0
#define TOTAL_CNT_MASK (0xff<<TOTAL_CNT_OFFS)
#define INT_CNT_OFFS 8
#define INT_CNT_MASK (0xff<<INT_CNT_OFFS)
/* CH_BUFF_OWN_REG bits */
#define RX_OWN_BYTE_OFFS 0
#define TX_OWN_BYTE_OFFS 1
#define OWNER_MASK 1
#define OWN_BY_SW 0
#define OWN_BY_HW 1
/* CH_ENABLE_REG bits */
#define RX_ENABLE_BYTE_OFFS 0
#define TX_ENABLE_BYTE_OFFS 1
#define CH_ENABLE 1
#define CH_DISABLE 0
/* INT_STATUS_REG bits */
#define RX_OVERFLOW_BIT(ch) (1<<(0+(ch)*2))
#define TX_UNDERFLOW_BIT(ch) (1<<(1+((ch)*2)))
#define RX_BIT(ch) (1<<(4+((ch)*2)))
#define TX_BIT(ch) (1<<(5+((ch)*2)))
#define RX_IDLE_BIT(ch) (1<<(8+((ch)*2)))
#define TX_IDLE_BIT(ch) (1<<(9+((ch)*2)))
#define RX_FIFO_FULL(ch) (1<<(12+((ch)*2)))
#define TX_FIFO_EMPTY(ch) (1<<(13+((ch)*2)))
#define DMA_ABORT_BIT (1<<16)
#define SLIC_INT_BIT (1<<17)
/* TDU_INTR_SET_RESET bits */
#define CLEAR_MODE_OFFS 0
#define CLEAR_ON_READ (1<<CLEAR_MODE_OFFS)
#define CLEAR_ON_ZERO (0<<CLEAR_MODE_OFFS)
/* CH_DELAY_CTRL_REG bits */
#define CH_RX_DELAY_OFFS 0
#define CH_RX_DELAY_MASK (0x3ff<<CH_RX_DELAY_OFFS)
#define CH_TX_DELAY_OFFS 16
#define CH_TX_DELAY_MASK (0x3ff<<CH_RX_DELAY_OFFS)
/*********************************/
/* SPI Register Map */
/*********************************/
#define SPI_CLK_PRESCALAR_REG (MV_TDM_REGS_BASE + 0x3100)
#define SPI_GLOBAL_CTRL_REG (MV_TDM_REGS_BASE + 0x3104)
#define SPI_CTRL_REG (MV_TDM_REGS_BASE + 0x3108)
#define SPI_MICRO_WIRE_CTRL_REG (MV_TDM_REGS_BASE + 0x310c)
#define SPI_TWSI_CTRL_REG (MV_TDM_REGS_BASE + 0x3110)
#define SPI_MV_STATUS_REG (MV_TDM_REGS_BASE + 0x311c)
#define SPI_INT_MASK_REG (MV_TDM_REGS_BASE + 0x3120)
#define SPI_DATA_REG (MV_TDM_REGS_BASE + 0x3124)
#define SPI_ADDR_REG (MV_TDM_REGS_BASE + 0x3128)
#define SPI_CODEC_CMD_LO_REG (MV_TDM_REGS_BASE + 0x3130)
#define SPI_CODEC_CMD_HI_REG (MV_TDM_REGS_BASE + 0x3134)
#define SPI_CODEC_CTRL_REG (MV_TDM_REGS_BASE + 0x3138)
#define SPI_CODEC_READ_DATA_REG (MV_TDM_REGS_BASE + 0x313c)
/* SPI CLK_PRESCALAR_REG bits */
#define SPI_CLK_2MHZ 0x2A64 /* refers to tclk = 200MHz */
#define SPI_CLK_4MHZ 0x2A32 /* refers to tclk = 200MHz */
#define SPI_CLK_8MHZ 0x2A19 /* refers to tclk = 200MHz */
/* SPI_CTRL_REG bits */
#define SPI_STAT_OFFS 10
#define SPI_STAT_MASK (1<<SPI_STAT_OFFS)
#define SPI_READY (0<<SPI_STAT_OFFS)
#define SPI_ACTIVE (1<<SPI_STAT_OFFS)
/* SPI_GLOBAL_CTRL_REG bits */
#define SPI_GLOBAL_ENABLE_OFFS 0
#define SPI_GLOBAL_ENABLE_MASK (1<<SPI_GLOBAL_ENABLE_OFFS)
#define SPI_GLOBAL_DISABLE (0<<SPI_GLOBAL_ENABLE_OFFS)
#define SPI_GLOBAL_ENABLE (1<<SPI_GLOBAL_ENABLE_OFFS)
/* SPI_CODEC_CTRL_REG bits */
#define TRANSFER_BYTES_OFFS 0
#define TRANSFER_BYTES(count) ((count-1)<<TRANSFER_BYTES_OFFS)
#define ENDIANESS_MODE_OFFS 2
#define ENDIANESS_MSB_MODE (0<<ENDIANESS_MODE_OFFS)
#define ENDIANESS_LSB_MODE (1<<ENDIANESS_MODE_OFFS)
#define RD_WR_MODE_OFFS 3
#define WR_MODE (0<<RD_WR_MODE_OFFS)
#define RD_MODE (1<<RD_WR_MODE_OFFS)
#define READ_BYTES_OFFS 4
#define READ_1_BYTE (0<<READ_BYTES_OFFS)
#define READ_2_BYTE (1<<READ_BYTES_OFFS)
#define CLK_SPEED_OFFS 5
#define CLK_SPEED_LO_DIV (0<<CLK_SPEED_OFFS)
#define CLK_SPEED_HI_DIV (1<<CLK_SPEED_OFFS)
#define CS_HI_CNT_VAL_RD_OFFS 6
#define CS_HI_CNT_VAL_RD_MASK (0xff3<<CS_HI_CNT_VAL_RD_OFFS)
/*********************************/
/* TDM Address Decoding */
/*********************************/
#define TDM_MBUS_MAX_WIN 4
#define TDM_WIN_CTRL_REG(win) ((MV_TDM_REGS_BASE + 0x4030) + (win<<4))
#define TDM_WIN_BASE_REG(win) ((MV_TDM_REGS_BASE + 0x4034) + (win<<4))
/* TDM_WIN_CTRL_REG bits */
#define TDM_WIN_ENABLE_OFFS 0
#define TDM_WIN_ENABLE_MASK (1<<TDM_WIN_ENABLE_OFFS)
#define TDM_WIN_ENABLE 1
#define TDM_WIN_TARGET_OFFS 4
#define TDM_WIN_TARGET_MASK (0xf<<TDM_WIN_TARGET_OFFS)
#define TDM_WIN_ATTRIB_OFFS 8
#define TDM_WIN_ATTRIB_MASK (0xff<<TDM_WIN_ATTRIB_OFFS)
#define TDM_WIN_SIZE_OFFS 16
#define TDM_WIN_SIZE_MASK (0xffff<<TDM_WIN_SIZE_OFFS)
/* TDM_WIN_BASE_REG bits */
#define TDM_BASE_OFFS 16
#define TDM_BASE_MASK (0xffff<<TDM_BASE_OFFS)
#define MV_TDM_WIN_SIZE_ALIGN _64K
#endif /*__INCmvTdmRegsh*/