1*ba07fd2fSBen Hoff /* SPDX-License-Identifier: GPL-2.0-only */ 2*ba07fd2fSBen Hoff #ifndef _HWS_PCIE_REG_H 3*ba07fd2fSBen Hoff #define _HWS_PCIE_REG_H 4*ba07fd2fSBen Hoff 5*ba07fd2fSBen Hoff #include <linux/bits.h> 6*ba07fd2fSBen Hoff #include <linux/sizes.h> 7*ba07fd2fSBen Hoff 8*ba07fd2fSBen Hoff #define XDMA_CHANNEL_NUM_MAX (1) 9*ba07fd2fSBen Hoff #define MAX_NUM_ENGINES (XDMA_CHANNEL_NUM_MAX * 2) 10*ba07fd2fSBen Hoff 11*ba07fd2fSBen Hoff #define PCIE_BARADDROFSIZE 4u 12*ba07fd2fSBen Hoff 13*ba07fd2fSBen Hoff #define PCI_BUS_ACCESS_BASE 0x00000000U 14*ba07fd2fSBen Hoff #define INT_EN_REG_BASE (PCI_BUS_ACCESS_BASE + 0x0134U) 15*ba07fd2fSBen Hoff #define PCIEBR_EN_REG_BASE (PCI_BUS_ACCESS_BASE + 0x0148U) 16*ba07fd2fSBen Hoff #define PCIE_INT_DEC_REG_BASE (PCI_BUS_ACCESS_BASE + 0x0138U) 17*ba07fd2fSBen Hoff 18*ba07fd2fSBen Hoff #define HWS_INT_EN_MASK 0x0003FFFFU 19*ba07fd2fSBen Hoff 20*ba07fd2fSBen Hoff #define PCIEBAR_AXI_BASE 0x20000000U 21*ba07fd2fSBen Hoff 22*ba07fd2fSBen Hoff #define CTL_REG_ACC_BASE 0x0 23*ba07fd2fSBen Hoff #define PCI_ADDR_TABLE_BASE CTL_REG_ACC_BASE 24*ba07fd2fSBen Hoff 25*ba07fd2fSBen Hoff #define CVBS_IN_BASE 0x00004000U 26*ba07fd2fSBen Hoff #define CVBS_IN_BUF_BASE (CVBS_IN_BASE + (16U * PCIE_BARADDROFSIZE)) 27*ba07fd2fSBen Hoff #define CVBS_IN_BUF_BASE2 (CVBS_IN_BASE + (50U * PCIE_BARADDROFSIZE)) 28*ba07fd2fSBen Hoff 29*ba07fd2fSBen Hoff /* 2 Mib */ 30*ba07fd2fSBen Hoff #define MAX_L_VIDEO_SIZE 0x200000U 31*ba07fd2fSBen Hoff 32*ba07fd2fSBen Hoff #define PCI_E_BAR_PAGE_SIZE 0x20000000 33*ba07fd2fSBen Hoff #define PCI_E_BAR_ADD_MASK 0xE0000000 34*ba07fd2fSBen Hoff #define PCI_E_BAR_ADD_LOWMASK 0x1FFFFFFF 35*ba07fd2fSBen Hoff 36*ba07fd2fSBen Hoff #define MAX_VID_CHANNELS 4 37*ba07fd2fSBen Hoff 38*ba07fd2fSBen Hoff #define MAX_MM_VIDEO_SIZE SZ_4M 39*ba07fd2fSBen Hoff 40*ba07fd2fSBen Hoff #define MAX_VIDEO_HW_W 1920 41*ba07fd2fSBen Hoff #define MAX_VIDEO_HW_H 1080 42*ba07fd2fSBen Hoff #define MAX_VIDEO_SCALER_SIZE (1920U * 1080U * 2U) 43*ba07fd2fSBen Hoff 44*ba07fd2fSBen Hoff #define MIN_VAMP_BRIGHTNESS_UNITS 0 45*ba07fd2fSBen Hoff #define MAX_VAMP_BRIGHTNESS_UNITS 0xff 46*ba07fd2fSBen Hoff 47*ba07fd2fSBen Hoff #define MIN_VAMP_CONTRAST_UNITS 0 48*ba07fd2fSBen Hoff #define MAX_VAMP_CONTRAST_UNITS 0xff 49*ba07fd2fSBen Hoff 50*ba07fd2fSBen Hoff #define MIN_VAMP_SATURATION_UNITS 0 51*ba07fd2fSBen Hoff #define MAX_VAMP_SATURATION_UNITS 0xff 52*ba07fd2fSBen Hoff 53*ba07fd2fSBen Hoff #define MIN_VAMP_HUE_UNITS 0 54*ba07fd2fSBen Hoff #define MAX_VAMP_HUE_UNITS 0xff 55*ba07fd2fSBen Hoff 56*ba07fd2fSBen Hoff #define HWS_BRIGHTNESS_DEFAULT 0x80 57*ba07fd2fSBen Hoff #define HWS_CONTRAST_DEFAULT 0x80 58*ba07fd2fSBen Hoff #define HWS_SATURATION_DEFAULT 0x80 59*ba07fd2fSBen Hoff #define HWS_HUE_DEFAULT 0x00 60*ba07fd2fSBen Hoff 61*ba07fd2fSBen Hoff /* Core/global status. */ 62*ba07fd2fSBen Hoff #define HWS_REG_SYS_STATUS (CVBS_IN_BASE + 0 * PCIE_BARADDROFSIZE) 63*ba07fd2fSBen Hoff /* bit3: DMA busy, bit2: int, ... */ 64*ba07fd2fSBen Hoff 65*ba07fd2fSBen Hoff #define HWS_SYS_DMA_BUSY_BIT BIT(3) /* 0x08 = DMA busy flag */ 66*ba07fd2fSBen Hoff 67*ba07fd2fSBen Hoff #define HWS_REG_DEC_MODE (CVBS_IN_BASE + 0 * PCIE_BARADDROFSIZE) 68*ba07fd2fSBen Hoff /* Main control register */ 69*ba07fd2fSBen Hoff #define HWS_REG_CTL (CVBS_IN_BASE + 4 * PCIE_BARADDROFSIZE) 70*ba07fd2fSBen Hoff #define HWS_CTL_IRQ_ENABLE_BIT BIT(0) /* Global interrupt enable bit */ 71*ba07fd2fSBen Hoff /* Write 0x00 to fully reset decoder, 72*ba07fd2fSBen Hoff * set bit 31=1 to "start run", 73*ba07fd2fSBen Hoff * low byte=0x13 selects YUYV/BT.709/etc, 74*ba07fd2fSBen Hoff * in ReadChipId() we also write 0x00 and 0x10 here for chip-ID sequencing. 75*ba07fd2fSBen Hoff */ 76*ba07fd2fSBen Hoff 77*ba07fd2fSBen Hoff /* Per-channel done flags. */ 78*ba07fd2fSBen Hoff #define HWS_REG_INT_STATUS (CVBS_IN_BASE + 1 * PCIE_BARADDROFSIZE) 79*ba07fd2fSBen Hoff #define HWS_SYS_BUSY_BIT BIT(2) /* matches old 0x04 test */ 80*ba07fd2fSBen Hoff 81*ba07fd2fSBen Hoff /* Capture enable switches. */ 82*ba07fd2fSBen Hoff /* bit0-3: CH0-CH3 video enable */ 83*ba07fd2fSBen Hoff #define HWS_REG_VCAP_ENABLE (CVBS_IN_BASE + 2 * PCIE_BARADDROFSIZE) 84*ba07fd2fSBen Hoff /* bits0-3: signal present, bits8-11: interlace */ 85*ba07fd2fSBen Hoff #define HWS_REG_ACTIVE_STATUS (CVBS_IN_BASE + 5 * PCIE_BARADDROFSIZE) 86*ba07fd2fSBen Hoff /* bits0-3: HDCP detected */ 87*ba07fd2fSBen Hoff #define HWS_REG_HDCP_STATUS (CVBS_IN_BASE + 8 * PCIE_BARADDROFSIZE) 88*ba07fd2fSBen Hoff #define HWS_REG_DMA_MAX_SIZE (CVBS_IN_BASE + 9 * PCIE_BARADDROFSIZE) 89*ba07fd2fSBen Hoff 90*ba07fd2fSBen Hoff /* Buffer addresses (written once during init/reset). */ 91*ba07fd2fSBen Hoff /* Base of host-visible buffer. */ 92*ba07fd2fSBen Hoff #define HWS_REG_VBUF1_ADDR (CVBS_IN_BASE + 25 * PCIE_BARADDROFSIZE) 93*ba07fd2fSBen Hoff /* Per-channel DMA address. */ 94*ba07fd2fSBen Hoff #define HWS_REG_DMA_ADDR(ch) (CVBS_IN_BASE + (26 + (ch)) * PCIE_BARADDROFSIZE) 95*ba07fd2fSBen Hoff 96*ba07fd2fSBen Hoff /* Per-channel live buffer toggles (read-only). */ 97*ba07fd2fSBen Hoff #define HWS_REG_VBUF_TOGGLE(ch) (CVBS_IN_BASE + (32 + (ch)) * PCIE_BARADDROFSIZE) 98*ba07fd2fSBen Hoff /* 99*ba07fd2fSBen Hoff * Returns 0 or 1 = which half of the video ring the DMA engine is 100*ba07fd2fSBen Hoff * currently filling for channel *ch* (0-3). 101*ba07fd2fSBen Hoff */ 102*ba07fd2fSBen Hoff 103*ba07fd2fSBen Hoff /* Per-interrupt bits (video 0-3). */ 104*ba07fd2fSBen Hoff #define HWS_INT_VDONE_BIT(ch) BIT(ch) /* 0x01,0x02,0x04,0x08 */ 105*ba07fd2fSBen Hoff 106*ba07fd2fSBen Hoff #define HWS_REG_INT_ACK (CVBS_IN_BASE + 0x4000 + 1 * PCIE_BARADDROFSIZE) 107*ba07fd2fSBen Hoff 108*ba07fd2fSBen Hoff /* 16-bit W | 16-bit H. */ 109*ba07fd2fSBen Hoff #define HWS_REG_IN_RES(ch) (CVBS_IN_BASE + (90 + (ch) * 2) * PCIE_BARADDROFSIZE) 110*ba07fd2fSBen Hoff /* B|C|H|S packed bytes. */ 111*ba07fd2fSBen Hoff #define HWS_REG_BCHS(ch) (CVBS_IN_BASE + (91 + (ch) * 2) * PCIE_BARADDROFSIZE) 112*ba07fd2fSBen Hoff 113*ba07fd2fSBen Hoff /* Input fps. */ 114*ba07fd2fSBen Hoff #define HWS_REG_FRAME_RATE(ch) (CVBS_IN_BASE + (110 + (ch)) * PCIE_BARADDROFSIZE) 115*ba07fd2fSBen Hoff /* Programmed out W|H. */ 116*ba07fd2fSBen Hoff #define HWS_REG_OUT_RES(ch) (CVBS_IN_BASE + (120 + (ch)) * PCIE_BARADDROFSIZE) 117*ba07fd2fSBen Hoff /* Programmed out fps. */ 118*ba07fd2fSBen Hoff #define HWS_REG_OUT_FRAME_RATE(ch) (CVBS_IN_BASE + (130 + (ch)) * PCIE_BARADDROFSIZE) 119*ba07fd2fSBen Hoff 120*ba07fd2fSBen Hoff /* Device version/port ID/subversion register. */ 121*ba07fd2fSBen Hoff #define HWS_REG_DEVICE_INFO (CVBS_IN_BASE + 88 * PCIE_BARADDROFSIZE) 122*ba07fd2fSBen Hoff /* 123*ba07fd2fSBen Hoff * Reading this 32-bit word returns: 124*ba07fd2fSBen Hoff * bits 7:0 = "device version" 125*ba07fd2fSBen Hoff * bits 15:8 = "device sub-version" 126*ba07fd2fSBen Hoff * bits 23:24 = "HW key / port ID" etc. 127*ba07fd2fSBen Hoff * bits 31:28 = "support YV12" flags 128*ba07fd2fSBen Hoff */ 129*ba07fd2fSBen Hoff 130*ba07fd2fSBen Hoff /* Convenience aliases for individual channels. */ 131*ba07fd2fSBen Hoff #define HWS_REG_VBUF_TOGGLE_CH0 HWS_REG_VBUF_TOGGLE(0) 132*ba07fd2fSBen Hoff #define HWS_REG_VBUF_TOGGLE_CH1 HWS_REG_VBUF_TOGGLE(1) 133*ba07fd2fSBen Hoff #define HWS_REG_VBUF_TOGGLE_CH2 HWS_REG_VBUF_TOGGLE(2) 134*ba07fd2fSBen Hoff #define HWS_REG_VBUF_TOGGLE_CH3 HWS_REG_VBUF_TOGGLE(3) 135*ba07fd2fSBen Hoff 136*ba07fd2fSBen Hoff #endif /* _HWS_PCIE_REG_H */ 137