blob: 5d9dd3550c1b1eed43807b844e7ebcab7d93afb3 [file] [log] [blame]
/* Paintbox register header file
*
* Copyright (C) 2016 The Android Open Source Project
*
* This software is licensed under the terms of the GNU General Public
* License version 2, as published by the Free Software Foundation, and
* may be copied, distributed, and modified under those terms.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#ifndef _PAINTBOX_REGS_H
#define _PAINTBOX_REGS_H
#include <linux/types.h>
#include "paintbox-regs-v0-generated.h"
/* TODO: The following information should be eventually be generated
* by the generator script from the RTL.
*/
#define REG_UNUSED "UNKNOWN"
/* TODO: Switch this to uint64_t once all the registers are
* converted to 64bit.
*/
#define IPU_REG_WIDTH sizeof(uint32_t)
#define IPU_REG_WIDTH_BYTES sizeof(uint64_t)
/* Number of bytes allocated for each register trace when dumping the register
* contents through verbose logging or debugfs.
*/
#define REG_DEBUG_BUFFER_SIZE 96
#define REG_INDEX(r) ((r) / IPU_REG_WIDTH)
#define REG_NAME_ENTRY(r) [(r) / IPU_REG_WIDTH] = #r
#define STP_INST_SRAM_INSTRUCTION_WIDTH_BYTES 16
#define STP_CONST_SRAM_WORD_WIDTH_BYTES 2
#define STP_SCALAR_SRAM_WORD_WIDTH_BYTES 2
#define STP_VECTOR_SRAM_WORD_WIDTH_BYTES 2
/* Width of STP RAM transfer through PIO interface */
#define STP_PIO_WORD_WIDTH_BYTES 16
#define IPU_RESERVED_OFFSET 0x1C00
/* IPU_I{M,S}R:
* ... | 30 29 | 28 26 |...
* ... | MIF_INT | ...
* ... | MPO_INTR | MPI_INTR | ...
*/
#define IPU_IMR_MPI_INTR_SHIFT IPU_IMR_MIF_INTR_SHIFT
#define IPU_IMR_MPO_INTR_SHIFT (IPU_IMR_MPI_INTR_SHIFT + 3)
#define IPU_ISR_MPI_INTR_M 0x7ULL
#define IPU_ISR_MPI_INTR_SHIFT IPU_ISR_MIF_INTR_SHIFT
#define IPU_ISR_MPI_INTR_MASK (IPU_ISR_MPI_INTR_M << IPU_ISR_MPI_INTR_SHIFT)
#define IPU_ISR_MPO_INTR_M 0x3ULL
#define IPU_ISR_MPO_INTR_SHIFT (IPU_ISR_MPI_INTR_SHIFT + 3)
#define IPU_ISR_MPO_INTR_MASK (IPU_ISR_MPO_INTR_M << IPU_ISR_MPO_INTR_SHIFT)
/* TODO: Switch these to IPU_REG_WIDTH_BYTES when the trace code is
* fully switched over.
*/
#if CONFIG_PAINTBOX_VERSION_MAJOR >= 1
#define IO_AON_BLOCK_LEN (AON_SPARE + IPU_REG_WIDTH)
#define IO_AON_NUM_REGS (IO_AON_BLOCK_LEN / IPU_REG_WIDTH)
#else
#define IO_AON_BLOCK_LEN (APB_SPARE + IPU_REG_WIDTH)
#define IO_AON_NUM_REGS (IO_APB_BLOCK_LEN / IPU_REG_WIDTH)
#endif
/* TODO: Switch these to IPU_REG_WIDTH_BYTES when the trace code is
* fully switched over.
*/
#define IO_APB_BLOCK_LEN (APB_SPARE + IPU_REG_WIDTH)
#define IO_APB_NUM_REGS (IO_APB_BLOCK_LEN / IPU_REG_WIDTH)
/* TODO: Switch these to IPU_REG_WIDTH_BYTES when the trace code is
* fully switched over.
*/
#define IO_AXI_BLOCK_LEN (AXI_SPARE + IPU_REG_WIDTH)
#define IO_AXI_NUM_REGS (IO_AXI_BLOCK_LEN / IPU_REG_WIDTH)
/* TODO: Switch these to IPU_REG_WIDTH_BYTES when the trace code is
* fully switched over.
*/
#define STP_BLOCK_LEN (STP_PMON_CNT_1_STS + IPU_REG_WIDTH)
#define STP_NUM_REGS (STP_BLOCK_LEN / IPU_REG_WIDTH)
/* TODO: Switch these to IPU_REG_WIDTH_BYTES when the trace code is
* fully switched over.
*/
/* LBP Block Boundaries */
#define LBP_POOL_BLOCK_LEN (LBP_PMON_CNT_1_STS + IPU_REG_WIDTH)
#define LBP_POOL_NUM_REGS (LBP_POOL_BLOCK_LEN / IPU_REG_WIDTH)
#if CONFIG_PAINTBOX_VERSION_MAJOR >= 1
#define LBP_BLOCK_LEN (LB_SB_DELTA + IPU_REG_WIDTH)
#else
#define LBP_BLOCK_LEN (LB_L_PARAM + IPU_REG_WIDTH)
#endif
#define LBP_NUM_REGS (LBP_BLOCK_LEN / IPU_REG_WIDTH)
/* Block length for just the line buffer registers */
#define LB_BLOCK_START LB_CTRL0
#define LB_BLOCK_LEN (LBP_BLOCK_LEN - LB_BLOCK_START)
#define LB_NUM_REGS (LB_BLOCK_LEN / IPU_REG_WIDTH)
#define LB_BLOCK_LEN (LBP_BLOCK_LEN - LB_BLOCK_START)
/* LBP_CAP0 Register Bits */
#define LBP_CAP0_MAX_LB_MAX LBP_CAP0_MAX_LB_M
/* LB_CTRL0 Register Bits */
#define LB_CTRL0_NUM_RPTR_MAX LB_CTRL0_NUM_RPTR_M
#define LB_CTRL0_NUM_CHAN_MAX LB_CTRL0_NUM_CHAN_M
#define LB_CTRL0_FB_ROWS_MAX LB_CTRL0_FB_ROWS_M
#define LB_CTRL0_REUSE_ROWS_MAX LB_CTRL0_REUSE_ROWS_M
/* LB_OFFSET Register Bits */
#define LB_OFFSET_OFFSET_X_MIN -32767
#define LB_OFFSET_OFFSET_X_MAX 32767
#define LB_OFFSET_OFFSET_Y_MIN -32767
#define LB_OFFSET_OFFSET_Y_MAX 32767
#define LB_OFFSET_OFFSET_CHAN_MAX LB_OFFSET_OFFSET_CHAN_M
/* LB_BDRY Register Bits */
#define LB_BDRY_BDRY_VAL_CLAMP 0x00000000
#define LB_BDRY_BDRY_VAL_REPEAT 0x00000001
#define LB_BDRY_BDRY_VAL_REFLECT 0x00000002
#define LB_BDRY_BDRY_VAL_RESERVED 0x00000003
/* LB_BASE Register Bits */
#define LB_BASE_FB_BASE_ALIGN_MASK 0x1F
#define LB_BASE_FB_BASE_ALIGN_SHIFT 5
#define LB_BASE_SB_BASE_ALIGN_MASK 0x1F
#define LB_BASE_SB_BASE_ALIGN_SHIFT 5
/* LB_STAT Register Bits */
#define LB_STAT_EMPTY0 (1 << 1)
#define LB_STAT_EMPTY1 (1 << 2)
#define LB_STAT_EMPTY2 (1 << 3)
/* LB_L_PARAM Register Bits */
#define LB_L_PARAM_L_INC_MAX LB_L_PARAM_L_INC_M
#define LB_L_PARAM_L_WIDTH_MAX LB_L_PARAM_L_WIDTH_M
#define LBP_DATA_REG_COUNT 4
/* MMU_ERR_LOG */
#define MMU_IOVA_SHIFT 12
/* MMU_TABLE_BASE */
#if CONFIG_PAINTBOX_VERSION_MAJOR == 0
#ifdef CONFIG_PAINTBOX_FPGA_SUPPORT
#define MMU_TABLE_BASE_RSHIFT 12
#else
#define MMU_TABLE_BASE_RSHIFT 13
#endif
#else
#define MMU_TABLE_BASE_RSHIFT 12
#endif
/* MMU_ERR_BASE */
#define MMU_ERROR_BASE_RSHIFT 12
/* MMU_FLUSH_ADDRESS */
#define MMU_FLUSH_ADDRESS_RSHIFT 12
/* MMU_ISR / MMU_IMR */
#define NUM_MMU_INTERRUPTS 1
/* BIF_ISR / BIF_IMR */
#define NUM_BIF_INTERRUPTS 1
#define STP_LBP_MASK_DEF 0xFFFF
#define STP_DATA_REG_COUNT 2
/* Vector Memory Address Bits */
#define STP_RAM_ADDR_ROW 0x0F
#define STP_RAM_ADDR_ROW_SHIFT 7
#define STP_RAM_ADDR_ROW_MASK (STP_RAM_ADDR_ROW << STP_RAM_ADDR_ROW_SHIFT)
#define STP_RAM_ADDR_OFFSET_MASK 0x7F
#define STP_RAM_TARG_INST_RAM 0
#define STP_RAM_TARG_CNST_RAM 1
#define STP_RAM_TARG_DATA_RAM 2
#define STP_RAM_TARG_ALU_IO_RF_0 3
#define STP_RAM_TARG_ALU_IO_RF_1 4
#define STP_RAM_TARG_ALU_IO_RF_2 5
#define STP_RAM_TARG_ALU_IO_RF_3 6
#define STP_RAM_TARG_ALU_IO_RF_4 7
#define STP_RAM_TARG_ALU_IO_RAM_0 11
#define STP_RAM_TARG_ALU_IO_RAM_1 12
#define STP_RAM_TARG_ALU_IO_RAM_2 13
#define STP_RAM_TARG_ALU_IO_RAM_3 14
#define STP_RAM_TARG_ALU_IO_RAM_4 15
#define COMMON_RAM_ADDR 0xFFFF
#define COMMON_RAM_ADDR_SHIFT 16
#define STP_LANE_GROUP_WIDTH 4
#define VECTOR_GROUP_ROW_OFFSET_BYTES 4
/* DMA Block Boundaries */
#define DMA_CTRL_BLOCK_START DMA_CTRL
#define DMA_CTRL_BLOCK_END (DMA_PMON_CNT_3_STS + IPU_REG_WIDTH_BYTES)
#define DMA_CTRL_BLOCK_LEN DMA_CTRL_BLOCK_END
#define DMA_CTRL_NUM_REGS (DMA_CTRL_BLOCK_LEN / IPU_REG_WIDTH)
#define DMA_CHAN_BLOCK_START DMA_CHAN_MODE
#define DMA_CHAN_BLOCK_END (DMA_CHAN_DEPENDENCY + IPU_REG_WIDTH_BYTES)
#define DMA_CHAN_BLOCK_LEN (DMA_CHAN_BLOCK_END - DMA_CHAN_BLOCK_START)
#define DMA_CHAN_NUM_REGS (DMA_CHAN_BLOCK_LEN / IPU_REG_WIDTH)
#define DMA_STAT_BLOCK_START DMA_STAT_CTRL
#define DMA_STAT_BLOCK_END (DMA_SPARE + IPU_REG_WIDTH_BYTES)
#define DMA_STAT_BLOCK_LEN (DMA_STAT_BLOCK_END - DMA_STAT_BLOCK_START)
#define DMA_STAT_NUM_REGS (DMA_STAT_BLOCK_LEN / IPU_REG_WIDTH)
#define DMA_BLOCK_LEN DMA_STAT_BLOCK_END
#define DMA_NUM_REGS (DMA_BLOCK_LEN / IPU_REG_WIDTH)
/* DMA_CTRL Register Bits */
#define DMA_CTRL_AXI_SWIZZLE_NONE 0
#define DMA_CTRL_AXI_SWIZZLE_BIG_ENDIAN 1
#define DMA_CTRL_AXI_SWIZZLE_NEIGHBOR_BYTES 2
/* DMA_CHAN_MODE Register Bits */
#define DMA_CHAN_MODE_SRC_DRAM 0
#define DMA_CHAN_MODE_SRC_LBP 1
#define DMA_CHAN_MODE_SRC_STP 2
#define DMA_CHAN_MODE_SRC_MIPI_IN 3
#define DMA_CHAN_MODE_DST_DRAM 0
#define DMA_CHAN_MODE_DST_LBP 1
#define DMA_CHAN_MODE_DST_STP 2
#define DMA_CHAN_MODE_DST_MIPI_OUT 3
/* DMA_CHAN_IMG_FORMAT Register Bits */
#define DMA_CHAN_IMG_FORMAT_COMPONENTS_MIN 1
#define DMA_CHAN_IMG_FORMAT_COMPONENTS_MAX \
(DMA_CHAN_IMG_FORMAT_COMPONENTS_M + 1)
#define DMA_CHAN_IMG_FORMAT_PLANES_MIN 1
#define DMA_CHAN_IMG_FORMAT_PLANES_MAX (DMA_CHAN_IMG_FORMAT_PLANES_M + 1)
#define DMA_CHAN_IMG_FORMAT_BIT_DEPTH8 0
#define DMA_CHAN_IMG_FORMAT_BIT_DEPTH10 1
#define DMA_CHAN_IMG_FORMAT_BIT_DEPTH12 2
#define DMA_CHAN_IMG_FORMAT_BIT_DEPTH14 3
#define DMA_CHAN_IMG_FORMAT_BIT_DEPTH16 4
#define DMA_CHAN_IMG_FORMAT_RGBA_FORMAT_DISABLED 0
#define DMA_CHAN_IMG_FORMAT_RGBA_FORMAT_RGBA 1
#define DMA_CHAN_IMG_FORMAT_RGBA_FORMAT_ARGB 2
/* DMA_CHAN_IMG_SIZE Register Bits */
#define DMA_CHAN_IMG_SIZE_HEIGHT_MAX DMA_CHAN_IMG_SIZE_IMG_HEIGHT_M
#define DMA_CHAN_IMG_SIZE_WIDTH_MAX DMA_CHAN_IMG_SIZE_IMG_WIDTH_M
/* DMA_CHAN_IMG_POS Register Bits */
#define DMA_CHAN_IMG_POS_START_MAX 32767
#define DMA_CHAN_IMG_POS_START_MIN -32767
#define DMA_CHAN_IMG_POS_LB_START_MAX 32767
#define DMA_CHAN_IMG_POS_LB_START_MIN -32767
/* DMA CHAN_IMG_POS DRAM -> STP Register Bits */
#define DMA_CHAN_LB_START_Y_STP_IRAM (0ULL << 2)
#define DMA_CHAN_LB_START_Y_STP_CRAM (1ULL << 2)
#define DMA_CHAN_LB_START_Y_STP_DRAM (2ULL << 2)
#define DMA_CHAN_LB_START_Y_STP_ARRAY_16x16 (3ULL << 2)
#define DMA_CHAN_LB_START_Y_STP_ARRAY_32x32 (4ULL << 2)
/* DMA_CHAN_IMG_LAYOUT Register Bits */
#define DMA_CHAN_IMG_LAYOUT_ROW_STRIDE_MAX DMA_CHAN_IMG_LAYOUT_ROW_STRIDE_M
#define DMA_CHAN_IMG_LAYOUT_PLANE_STRIDE_MAX DMA_CHAN_IMG_LAYOUT_PLANE_STRIDE_M
/* DMA_CHAN_VA_BDRY Register Bits */
#define DMA_CHAN_VA_BDRY_LEN_MAX DMA_CHAN_VA_BDRY_LEN_M
/* DMA_CHAN_BIF_XFER Register Bits */
#define DMA_CHAN_BIF_XFER_STRIPE_HEIGHT_MAX 256
#define DMA_CHAN_BIF_XFER_OUTSTANDING_MIN 1
#define DMA_CHAN_BIF_XFER_OUTSTANDING_MAX 64
/* DMA_CHAN_NOC_XFER Register Bits */
#define DMA_CHAN_NOC_XFER_SHEET_WIDTH_MAX 256
#define DMA_CHAN_NOC_XFER_SHEET_HEIGHT_MAX 16
#define DMA_CHAN_NOC_XFER_OUTSTANDING_MIN 1
#define DMA_CHAN_NOC_XFER_OUTSTANDING_MAX 8
#define DMA_CHAN_NOC_XFER_RETRY_INTERVAL_MIN 1
#define DMA_CHAN_NOC_XFER_RETRY_INTERVAL_MAX DMA_CHAN_NOC_XFER_RETRY_INTERVAL_M
/* MIPI Block Boundaries */
#define MPI_COMMON_BLOCK_START MPI_CAP
#define MPI_COMMON_BLOCK_END (MPI_STRM_SEL + IPU_REG_WIDTH_BYTES)
#define MPI_COMMON_BLOCK_LEN MPI_COMMON_BLOCK_END
#define MPI_COMMON_NUM_REGS (MPI_COMMON_BLOCK_LEN / IPU_REG_WIDTH)
#define MPI_STRM_BLOCK_START MPI_STRM_CTRL
#define MPI_STRM_BLOCK_END (MPI_STRM_CNFG1_RO + IPU_REG_WIDTH_BYTES)
#define MPI_STRM_BLOCK_LEN (MPI_STRM_BLOCK_END - MPI_STRM_BLOCK_START)
#define MPI_STRM_NUM_REGS (MPI_STRM_BLOCK_LEN / IPU_REG_WIDTH)
#define MPO_COMMON_BLOCK_START MPO_CAP
#define MPO_COMMON_BLOCK_END (MPO_STRM_SEL + IPU_REG_WIDTH_BYTES)
#define MPO_COMMON_BLOCK_LEN (MPO_COMMON_BLOCK_END - MPO_COMMON_BLOCK_START)
#define MPO_COMMON_NUM_REGS (MPO_COMMON_BLOCK_LEN / IPU_REG_WIDTH)
#define MPO_STRM_BLOCK_START MPO_STRM_CTRL
#define MPO_STRM_BLOCK_END (MPO_STRM_CNFG1_RO + IPU_REG_WIDTH_BYTES)
#define MPO_STRM_BLOCK_LEN (MPO_STRM_BLOCK_END - MPO_STRM_BLOCK_START)
#define MPO_STRM_NUM_REGS (MPO_STRM_BLOCK_LEN / IPU_REG_WIDTH)
#define IO_IPU_BLOCK_LEN MPO_STRM_BLOCK_END
#define IO_IPU_NUM_REGS (IO_IPU_BLOCK_LEN / IPU_REG_WIDTH)
#if CONFIG_PAINTBOX_VERSION_MAJOR >= 1
#define MPI_CTRL_STRM_CONTINUOUS_SHIFT MPI_CTRL_STRM_CONTINUOUS0_SHIFT
#define MPI_CTRL_STRM_CONTINUOUS_MASK \
(0xfffULL << MPI_CTRL_STRM_CONTINUOUS_SHIFT)
#define MPO_CTRL_STRM_CONTINUOUS_SHIFT MPO_CTRL_STRM_CONTINUOUS0_SHIFT
#define MPO_CTRL_STRM_CONTINUOUS_MASK \
(0xfffULL << MPO_CTRL_STRM_CONTINUOUS_SHIFT)
#endif
/* MPI_STRM_CNFG0 Register Bits */
#define MPI_STRM_CNFG0_VC_MAX MPI_STRM_CNFG0_VC_M
#define MPI_STRM_CNFG0_DT_IN_MAX MPI_STRM_CNFG0_DT_IN_M
#define MPI_STRM_CNFG0_DT_PROC_MAX MPI_STRM_CNFG0_DT_PROC_M
#define MPI_STRM_CNFG0_STRP_HEIGHT_MIN 1
/* Easel Errata b/32334151
* MIPI input stripe height is restricted to 28 on V0 IPU
*/
#if CONFIG_PAINTBOX_VERSION_MAJOR == 0
#define MPI_STRM_CNFG0_STRP_HEIGHT_MAX 28
#else
#define MPI_STRM_CNFG0_STRP_HEIGHT_MAX 32
#endif
#define MPI_STRM_CNFG0_STRP_HEIGHT_ROW_ALIGN 4
#define MPI_STRM_CNFG0_IMG_WIDTH_MAX MPI_STRM_CNFG0_IMG_WIDTH_M
#define MPI_STRM_CNFG0_IMG_HEIGHT_MAX MPI_STRM_CNFG0_IMG_HEIGHT_M
/* MPI_STRM_CNFG1 Register Bits */
#define MPI_STRM_CNFG1_SEG_START_MAX MPI_STRM_CNFG1_SEG_START_M
#define MPI_STRM_CNFG1_SEG_END_MIN 1
#define MPI_STRM_CNFG1_SEG_END_MAX 128
#define MPI_STRM_CNFG1_SEGS_PER_ROW_MIN 1
#define MPI_STRM_CNFG1_SEGS_PER_ROW_MAX 128
#define MPI_STRM_CNFG1_SEG_WORDS_PER_ROW_MIN 1
#define MPI_STRM_CNFG1_SEG_WORDS_PER_ROW_MAX 4096
/* MPO_STRM_CNFG0 Register Bits */
#define MPO_STRM_CNFG0_STRP_HEIGHT_MIN 1
#define MPO_STRM_CNFG0_STRP_HEIGHT_MAX 32
#endif /* __PAINTBOX_REGS_H__ */