1/* SPDX-License-Identifier: MIT */
2/* Copyright © 2025 Intel Corporation */
3
4#ifndef __INTEL_PFIT_REGS_H__
5#define __INTEL_PFIT_REGS_H__
6
7#include "intel_display_reg_defs.h"
8
9/* Panel fitting */
10#define PFIT_CONTROL(dev_priv) _MMIO(DISPLAY_MMIO_BASE(dev_priv) + 0x61230)
11#define PFIT_ENABLE REG_BIT(31)
12#define PFIT_PIPE_MASK REG_GENMASK(30, 29) /* 965+ */
13#define PFIT_PIPE(pipe) REG_FIELD_PREP(PFIT_PIPE_MASK, (pipe))
14#define PFIT_SCALING_MASK REG_GENMASK(28, 26) /* 965+ */
15#define PFIT_SCALING_AUTO REG_FIELD_PREP(PFIT_SCALING_MASK, 0)
16#define PFIT_SCALING_PROGRAMMED REG_FIELD_PREP(PFIT_SCALING_MASK, 1)
17#define PFIT_SCALING_PILLAR REG_FIELD_PREP(PFIT_SCALING_MASK, 2)
18#define PFIT_SCALING_LETTER REG_FIELD_PREP(PFIT_SCALING_MASK, 3)
19#define PFIT_FILTER_MASK REG_GENMASK(25, 24) /* 965+ */
20#define PFIT_FILTER_FUZZY REG_FIELD_PREP(PFIT_FILTER_MASK, 0)
21#define PFIT_FILTER_CRISP REG_FIELD_PREP(PFIT_FILTER_MASK, 1)
22#define PFIT_FILTER_MEDIAN REG_FIELD_PREP(PFIT_FILTER_MASK, 2)
23#define PFIT_VERT_INTERP_MASK REG_GENMASK(11, 10) /* pre-965 */
24#define PFIT_VERT_INTERP_BILINEAR REG_FIELD_PREP(PFIT_VERT_INTERP_MASK, 1)
25#define PFIT_VERT_AUTO_SCALE REG_BIT(9) /* pre-965 */
26#define PFIT_HORIZ_INTERP_MASK REG_GENMASK(7, 6) /* pre-965 */
27#define PFIT_HORIZ_INTERP_BILINEAR REG_FIELD_PREP(PFIT_HORIZ_INTERP_MASK, 1)
28#define PFIT_HORIZ_AUTO_SCALE REG_BIT(5) /* pre-965 */
29#define PFIT_PANEL_8TO6_DITHER_ENABLE REG_BIT(3) /* pre-965 */
30
31#define PFIT_PGM_RATIOS(dev_priv) _MMIO(DISPLAY_MMIO_BASE(dev_priv) + 0x61234)
32#define PFIT_VERT_SCALE_MASK REG_GENMASK(31, 20) /* pre-965 */
33#define PFIT_VERT_SCALE(x) REG_FIELD_PREP(PFIT_VERT_SCALE_MASK, (x))
34#define PFIT_HORIZ_SCALE_MASK REG_GENMASK(15, 4) /* pre-965 */
35#define PFIT_HORIZ_SCALE(x) REG_FIELD_PREP(PFIT_HORIZ_SCALE_MASK, (x))
36#define PFIT_VERT_SCALE_MASK_965 REG_GENMASK(28, 16) /* 965+ */
37#define PFIT_HORIZ_SCALE_MASK_965 REG_GENMASK(12, 0) /* 965+ */
38
39#define PFIT_AUTO_RATIOS(dev_priv) _MMIO(DISPLAY_MMIO_BASE(dev_priv) + 0x61238)
40
41/* CPU panel fitter */
42/* IVB+ has 3 fitters, 0 is 7x5 capable, the other two only 3x3 */
43#define _PFA_CTL_1 0x68080
44#define _PFB_CTL_1 0x68880
45#define PF_CTL(pipe) _MMIO_PIPE(pipe, _PFA_CTL_1, _PFB_CTL_1)
46#define PF_ENABLE REG_BIT(31)
47#define PF_PIPE_SEL_MASK_IVB REG_GENMASK(30, 29) /* ivb/hsw */
48#define PF_PIPE_SEL_IVB(pipe) REG_FIELD_PREP(PF_PIPE_SEL_MASK_IVB, (pipe))
49#define PF_FILTER_MASK REG_GENMASK(24, 23)
50#define PF_FILTER_PROGRAMMED REG_FIELD_PREP(PF_FILTER_MASK, 0)
51#define PF_FILTER_MED_3x3 REG_FIELD_PREP(PF_FILTER_MASK, 1)
52#define PF_FILTER_EDGE_ENHANCE REG_FIELD_PREP(PF_FILTER_EDGE_MASK, 2)
53#define PF_FILTER_EDGE_SOFTEN REG_FIELD_PREP(PF_FILTER_EDGE_MASK, 3)
54
55#define _PFA_WIN_SZ 0x68074
56#define _PFB_WIN_SZ 0x68874
57#define PF_WIN_SZ(pipe) _MMIO_PIPE(pipe, _PFA_WIN_SZ, _PFB_WIN_SZ)
58#define PF_WIN_XSIZE_MASK REG_GENMASK(31, 16)
59#define PF_WIN_XSIZE(w) REG_FIELD_PREP(PF_WIN_XSIZE_MASK, (w))
60#define PF_WIN_YSIZE_MASK REG_GENMASK(15, 0)
61#define PF_WIN_YSIZE(h) REG_FIELD_PREP(PF_WIN_YSIZE_MASK, (h))
62
63#define _PFA_WIN_POS 0x68070
64#define _PFB_WIN_POS 0x68870
65#define PF_WIN_POS(pipe) _MMIO_PIPE(pipe, _PFA_WIN_POS, _PFB_WIN_POS)
66#define PF_WIN_XPOS_MASK REG_GENMASK(31, 16)
67#define PF_WIN_XPOS(x) REG_FIELD_PREP(PF_WIN_XPOS_MASK, (x))
68#define PF_WIN_YPOS_MASK REG_GENMASK(15, 0)
69#define PF_WIN_YPOS(y) REG_FIELD_PREP(PF_WIN_YPOS_MASK, (y))
70
71#define _PFA_VSCALE 0x68084
72#define _PFB_VSCALE 0x68884
73#define PF_VSCALE(pipe) _MMIO_PIPE(pipe, _PFA_VSCALE, _PFB_VSCALE)
74
75#define _PFA_HSCALE 0x68090
76#define _PFB_HSCALE 0x68890
77#define PF_HSCALE(pipe) _MMIO_PIPE(pipe, _PFA_HSCALE, _PFB_HSCALE)
78
79#endif /* __INTEL_PFIT_REGS_H__ */
80

source code of linux/drivers/gpu/drm/i915/display/intel_pfit_regs.h