xref: /linux/drivers/media/pci/hws/hws_reg.h (revision 3d5e48944e824bddc20d7b874e784f7b279636fe)
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