162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (C) 2012 Avionic Design GmbH 462306a36Sopenharmony_ci * Copyright (C) 2012 NVIDIA CORPORATION. All rights reserved. 562306a36Sopenharmony_ci */ 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#ifndef TEGRA_DC_H 862306a36Sopenharmony_ci#define TEGRA_DC_H 1 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#include <linux/host1x.h> 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#include <drm/drm_crtc.h> 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#include "drm.h" 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_cistruct tegra_output; 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci#define TEGRA_DC_LEGACY_PLANES_NUM 7 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_cistruct tegra_dc_state { 2162306a36Sopenharmony_ci struct drm_crtc_state base; 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci struct clk *clk; 2462306a36Sopenharmony_ci unsigned long pclk; 2562306a36Sopenharmony_ci unsigned int div; 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci u32 planes; 2862306a36Sopenharmony_ci}; 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_cistatic inline struct tegra_dc_state *to_dc_state(struct drm_crtc_state *state) 3162306a36Sopenharmony_ci{ 3262306a36Sopenharmony_ci if (state) 3362306a36Sopenharmony_ci return container_of(state, struct tegra_dc_state, base); 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci return NULL; 3662306a36Sopenharmony_ci} 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_cistruct tegra_dc_stats { 3962306a36Sopenharmony_ci unsigned long frames; 4062306a36Sopenharmony_ci unsigned long vblank; 4162306a36Sopenharmony_ci unsigned long underflow; 4262306a36Sopenharmony_ci unsigned long overflow; 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci unsigned long frames_total; 4562306a36Sopenharmony_ci unsigned long vblank_total; 4662306a36Sopenharmony_ci unsigned long underflow_total; 4762306a36Sopenharmony_ci unsigned long overflow_total; 4862306a36Sopenharmony_ci}; 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_cistruct tegra_windowgroup_soc { 5162306a36Sopenharmony_ci unsigned int index; 5262306a36Sopenharmony_ci unsigned int dc; 5362306a36Sopenharmony_ci const unsigned int *windows; 5462306a36Sopenharmony_ci unsigned int num_windows; 5562306a36Sopenharmony_ci}; 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_cistruct tegra_dc_soc_info { 5862306a36Sopenharmony_ci bool supports_background_color; 5962306a36Sopenharmony_ci bool supports_interlacing; 6062306a36Sopenharmony_ci bool supports_cursor; 6162306a36Sopenharmony_ci bool supports_block_linear; 6262306a36Sopenharmony_ci bool supports_sector_layout; 6362306a36Sopenharmony_ci bool has_legacy_blending; 6462306a36Sopenharmony_ci unsigned int pitch_align; 6562306a36Sopenharmony_ci bool has_powergate; 6662306a36Sopenharmony_ci bool coupled_pm; 6762306a36Sopenharmony_ci bool has_nvdisplay; 6862306a36Sopenharmony_ci const struct tegra_windowgroup_soc *wgrps; 6962306a36Sopenharmony_ci unsigned int num_wgrps; 7062306a36Sopenharmony_ci const u32 *primary_formats; 7162306a36Sopenharmony_ci unsigned int num_primary_formats; 7262306a36Sopenharmony_ci const u32 *overlay_formats; 7362306a36Sopenharmony_ci unsigned int num_overlay_formats; 7462306a36Sopenharmony_ci const u64 *modifiers; 7562306a36Sopenharmony_ci bool has_win_a_without_filters; 7662306a36Sopenharmony_ci bool has_win_b_vfilter_mem_client; 7762306a36Sopenharmony_ci bool has_win_c_without_vert_filter; 7862306a36Sopenharmony_ci bool plane_tiled_memory_bandwidth_x2; 7962306a36Sopenharmony_ci bool has_pll_d2_out0; 8062306a36Sopenharmony_ci}; 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_cistruct tegra_dc { 8362306a36Sopenharmony_ci struct host1x_client client; 8462306a36Sopenharmony_ci struct host1x_syncpt *syncpt; 8562306a36Sopenharmony_ci struct device *dev; 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ci struct drm_crtc base; 8862306a36Sopenharmony_ci unsigned int powergate; 8962306a36Sopenharmony_ci int pipe; 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ci struct clk *clk; 9262306a36Sopenharmony_ci struct reset_control *rst; 9362306a36Sopenharmony_ci void __iomem *regs; 9462306a36Sopenharmony_ci int irq; 9562306a36Sopenharmony_ci 9662306a36Sopenharmony_ci struct tegra_output *rgb; 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_ci struct tegra_dc_stats stats; 9962306a36Sopenharmony_ci struct list_head list; 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_ci struct drm_info_list *debugfs_files; 10262306a36Sopenharmony_ci 10362306a36Sopenharmony_ci const struct tegra_dc_soc_info *soc; 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ci bool has_opp_table; 10662306a36Sopenharmony_ci}; 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_cistatic inline struct tegra_dc * 10962306a36Sopenharmony_cihost1x_client_to_dc(struct host1x_client *client) 11062306a36Sopenharmony_ci{ 11162306a36Sopenharmony_ci return container_of(client, struct tegra_dc, client); 11262306a36Sopenharmony_ci} 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_cistatic inline struct tegra_dc *to_tegra_dc(struct drm_crtc *crtc) 11562306a36Sopenharmony_ci{ 11662306a36Sopenharmony_ci return crtc ? container_of(crtc, struct tegra_dc, base) : NULL; 11762306a36Sopenharmony_ci} 11862306a36Sopenharmony_ci 11962306a36Sopenharmony_cistatic inline void tegra_dc_writel(struct tegra_dc *dc, u32 value, 12062306a36Sopenharmony_ci unsigned int offset) 12162306a36Sopenharmony_ci{ 12262306a36Sopenharmony_ci trace_dc_writel(dc->dev, offset, value); 12362306a36Sopenharmony_ci writel(value, dc->regs + (offset << 2)); 12462306a36Sopenharmony_ci} 12562306a36Sopenharmony_ci 12662306a36Sopenharmony_cistatic inline u32 tegra_dc_readl(struct tegra_dc *dc, unsigned int offset) 12762306a36Sopenharmony_ci{ 12862306a36Sopenharmony_ci u32 value = readl(dc->regs + (offset << 2)); 12962306a36Sopenharmony_ci 13062306a36Sopenharmony_ci trace_dc_readl(dc->dev, offset, value); 13162306a36Sopenharmony_ci 13262306a36Sopenharmony_ci return value; 13362306a36Sopenharmony_ci} 13462306a36Sopenharmony_ci 13562306a36Sopenharmony_cistruct tegra_dc_window { 13662306a36Sopenharmony_ci struct { 13762306a36Sopenharmony_ci unsigned int x; 13862306a36Sopenharmony_ci unsigned int y; 13962306a36Sopenharmony_ci unsigned int w; 14062306a36Sopenharmony_ci unsigned int h; 14162306a36Sopenharmony_ci } src; 14262306a36Sopenharmony_ci struct { 14362306a36Sopenharmony_ci unsigned int x; 14462306a36Sopenharmony_ci unsigned int y; 14562306a36Sopenharmony_ci unsigned int w; 14662306a36Sopenharmony_ci unsigned int h; 14762306a36Sopenharmony_ci } dst; 14862306a36Sopenharmony_ci unsigned int bits_per_pixel; 14962306a36Sopenharmony_ci unsigned int stride[2]; 15062306a36Sopenharmony_ci unsigned long base[3]; 15162306a36Sopenharmony_ci unsigned int zpos; 15262306a36Sopenharmony_ci bool reflect_x; 15362306a36Sopenharmony_ci bool reflect_y; 15462306a36Sopenharmony_ci 15562306a36Sopenharmony_ci struct tegra_bo_tiling tiling; 15662306a36Sopenharmony_ci u32 format; 15762306a36Sopenharmony_ci u32 swap; 15862306a36Sopenharmony_ci}; 15962306a36Sopenharmony_ci 16062306a36Sopenharmony_ci/* from dc.c */ 16162306a36Sopenharmony_cibool tegra_dc_has_output(struct tegra_dc *dc, struct device *dev); 16262306a36Sopenharmony_civoid tegra_dc_commit(struct tegra_dc *dc); 16362306a36Sopenharmony_ciint tegra_dc_state_setup_clock(struct tegra_dc *dc, 16462306a36Sopenharmony_ci struct drm_crtc_state *crtc_state, 16562306a36Sopenharmony_ci struct clk *clk, unsigned long pclk, 16662306a36Sopenharmony_ci unsigned int div); 16762306a36Sopenharmony_civoid tegra_crtc_atomic_post_commit(struct drm_crtc *crtc, 16862306a36Sopenharmony_ci struct drm_atomic_state *state); 16962306a36Sopenharmony_ci 17062306a36Sopenharmony_ci/* from rgb.c */ 17162306a36Sopenharmony_ciint tegra_dc_rgb_probe(struct tegra_dc *dc); 17262306a36Sopenharmony_civoid tegra_dc_rgb_remove(struct tegra_dc *dc); 17362306a36Sopenharmony_ciint tegra_dc_rgb_init(struct drm_device *drm, struct tegra_dc *dc); 17462306a36Sopenharmony_ciint tegra_dc_rgb_exit(struct tegra_dc *dc); 17562306a36Sopenharmony_ci 17662306a36Sopenharmony_ci#define DC_CMD_GENERAL_INCR_SYNCPT 0x000 17762306a36Sopenharmony_ci#define DC_CMD_GENERAL_INCR_SYNCPT_CNTRL 0x001 17862306a36Sopenharmony_ci#define SYNCPT_CNTRL_NO_STALL (1 << 8) 17962306a36Sopenharmony_ci#define SYNCPT_CNTRL_SOFT_RESET (1 << 0) 18062306a36Sopenharmony_ci#define DC_CMD_GENERAL_INCR_SYNCPT_ERROR 0x002 18162306a36Sopenharmony_ci#define DC_CMD_WIN_A_INCR_SYNCPT 0x008 18262306a36Sopenharmony_ci#define DC_CMD_WIN_A_INCR_SYNCPT_CNTRL 0x009 18362306a36Sopenharmony_ci#define DC_CMD_WIN_A_INCR_SYNCPT_ERROR 0x00a 18462306a36Sopenharmony_ci#define DC_CMD_WIN_B_INCR_SYNCPT 0x010 18562306a36Sopenharmony_ci#define DC_CMD_WIN_B_INCR_SYNCPT_CNTRL 0x011 18662306a36Sopenharmony_ci#define DC_CMD_WIN_B_INCR_SYNCPT_ERROR 0x012 18762306a36Sopenharmony_ci#define DC_CMD_WIN_C_INCR_SYNCPT 0x018 18862306a36Sopenharmony_ci#define DC_CMD_WIN_C_INCR_SYNCPT_CNTRL 0x019 18962306a36Sopenharmony_ci#define DC_CMD_WIN_C_INCR_SYNCPT_ERROR 0x01a 19062306a36Sopenharmony_ci#define DC_CMD_CONT_SYNCPT_VSYNC 0x028 19162306a36Sopenharmony_ci#define SYNCPT_VSYNC_ENABLE (1 << 8) 19262306a36Sopenharmony_ci#define DC_CMD_DISPLAY_COMMAND_OPTION0 0x031 19362306a36Sopenharmony_ci#define DC_CMD_DISPLAY_COMMAND 0x032 19462306a36Sopenharmony_ci#define DISP_CTRL_MODE_STOP (0 << 5) 19562306a36Sopenharmony_ci#define DISP_CTRL_MODE_C_DISPLAY (1 << 5) 19662306a36Sopenharmony_ci#define DISP_CTRL_MODE_NC_DISPLAY (2 << 5) 19762306a36Sopenharmony_ci#define DISP_CTRL_MODE_MASK (3 << 5) 19862306a36Sopenharmony_ci#define DC_CMD_SIGNAL_RAISE 0x033 19962306a36Sopenharmony_ci#define DC_CMD_DISPLAY_POWER_CONTROL 0x036 20062306a36Sopenharmony_ci#define PW0_ENABLE (1 << 0) 20162306a36Sopenharmony_ci#define PW1_ENABLE (1 << 2) 20262306a36Sopenharmony_ci#define PW2_ENABLE (1 << 4) 20362306a36Sopenharmony_ci#define PW3_ENABLE (1 << 6) 20462306a36Sopenharmony_ci#define PW4_ENABLE (1 << 8) 20562306a36Sopenharmony_ci#define PM0_ENABLE (1 << 16) 20662306a36Sopenharmony_ci#define PM1_ENABLE (1 << 18) 20762306a36Sopenharmony_ci 20862306a36Sopenharmony_ci#define DC_CMD_INT_STATUS 0x037 20962306a36Sopenharmony_ci#define DC_CMD_INT_MASK 0x038 21062306a36Sopenharmony_ci#define DC_CMD_INT_ENABLE 0x039 21162306a36Sopenharmony_ci#define DC_CMD_INT_TYPE 0x03a 21262306a36Sopenharmony_ci#define DC_CMD_INT_POLARITY 0x03b 21362306a36Sopenharmony_ci#define CTXSW_INT (1 << 0) 21462306a36Sopenharmony_ci#define FRAME_END_INT (1 << 1) 21562306a36Sopenharmony_ci#define VBLANK_INT (1 << 2) 21662306a36Sopenharmony_ci#define V_PULSE3_INT (1 << 4) 21762306a36Sopenharmony_ci#define V_PULSE2_INT (1 << 5) 21862306a36Sopenharmony_ci#define REGION_CRC_INT (1 << 6) 21962306a36Sopenharmony_ci#define REG_TMOUT_INT (1 << 7) 22062306a36Sopenharmony_ci#define WIN_A_UF_INT (1 << 8) 22162306a36Sopenharmony_ci#define WIN_B_UF_INT (1 << 9) 22262306a36Sopenharmony_ci#define WIN_C_UF_INT (1 << 10) 22362306a36Sopenharmony_ci#define MSF_INT (1 << 12) 22462306a36Sopenharmony_ci#define WIN_A_OF_INT (1 << 14) 22562306a36Sopenharmony_ci#define WIN_B_OF_INT (1 << 15) 22662306a36Sopenharmony_ci#define WIN_C_OF_INT (1 << 16) 22762306a36Sopenharmony_ci#define HEAD_UF_INT (1 << 23) 22862306a36Sopenharmony_ci#define SD3_BUCKET_WALK_DONE_INT (1 << 24) 22962306a36Sopenharmony_ci#define DSC_OBUF_UF_INT (1 << 26) 23062306a36Sopenharmony_ci#define DSC_RBUF_UF_INT (1 << 27) 23162306a36Sopenharmony_ci#define DSC_BBUF_UF_INT (1 << 28) 23262306a36Sopenharmony_ci#define DSC_TO_UF_INT (1 << 29) 23362306a36Sopenharmony_ci 23462306a36Sopenharmony_ci#define DC_CMD_SIGNAL_RAISE1 0x03c 23562306a36Sopenharmony_ci#define DC_CMD_SIGNAL_RAISE2 0x03d 23662306a36Sopenharmony_ci#define DC_CMD_SIGNAL_RAISE3 0x03e 23762306a36Sopenharmony_ci 23862306a36Sopenharmony_ci#define DC_CMD_STATE_ACCESS 0x040 23962306a36Sopenharmony_ci#define READ_MUX (1 << 0) 24062306a36Sopenharmony_ci#define WRITE_MUX (1 << 2) 24162306a36Sopenharmony_ci 24262306a36Sopenharmony_ci#define DC_CMD_STATE_CONTROL 0x041 24362306a36Sopenharmony_ci#define GENERAL_ACT_REQ (1 << 0) 24462306a36Sopenharmony_ci#define WIN_A_ACT_REQ (1 << 1) 24562306a36Sopenharmony_ci#define WIN_B_ACT_REQ (1 << 2) 24662306a36Sopenharmony_ci#define WIN_C_ACT_REQ (1 << 3) 24762306a36Sopenharmony_ci#define CURSOR_ACT_REQ (1 << 7) 24862306a36Sopenharmony_ci#define GENERAL_UPDATE (1 << 8) 24962306a36Sopenharmony_ci#define WIN_A_UPDATE (1 << 9) 25062306a36Sopenharmony_ci#define WIN_B_UPDATE (1 << 10) 25162306a36Sopenharmony_ci#define WIN_C_UPDATE (1 << 11) 25262306a36Sopenharmony_ci#define CURSOR_UPDATE (1 << 15) 25362306a36Sopenharmony_ci#define COMMON_ACTREQ (1 << 16) 25462306a36Sopenharmony_ci#define COMMON_UPDATE (1 << 17) 25562306a36Sopenharmony_ci#define NC_HOST_TRIG (1 << 24) 25662306a36Sopenharmony_ci 25762306a36Sopenharmony_ci#define DC_CMD_DISPLAY_WINDOW_HEADER 0x042 25862306a36Sopenharmony_ci#define WINDOW_A_SELECT (1 << 4) 25962306a36Sopenharmony_ci#define WINDOW_B_SELECT (1 << 5) 26062306a36Sopenharmony_ci#define WINDOW_C_SELECT (1 << 6) 26162306a36Sopenharmony_ci 26262306a36Sopenharmony_ci#define DC_CMD_REG_ACT_CONTROL 0x043 26362306a36Sopenharmony_ci 26462306a36Sopenharmony_ci#define DC_COM_CRC_CONTROL 0x300 26562306a36Sopenharmony_ci#define DC_COM_CRC_CONTROL_ALWAYS (1 << 3) 26662306a36Sopenharmony_ci#define DC_COM_CRC_CONTROL_FULL_FRAME (0 << 2) 26762306a36Sopenharmony_ci#define DC_COM_CRC_CONTROL_ACTIVE_DATA (1 << 2) 26862306a36Sopenharmony_ci#define DC_COM_CRC_CONTROL_WAIT (1 << 1) 26962306a36Sopenharmony_ci#define DC_COM_CRC_CONTROL_ENABLE (1 << 0) 27062306a36Sopenharmony_ci#define DC_COM_CRC_CHECKSUM 0x301 27162306a36Sopenharmony_ci#define DC_COM_PIN_OUTPUT_ENABLE(x) (0x302 + (x)) 27262306a36Sopenharmony_ci#define DC_COM_PIN_OUTPUT_POLARITY(x) (0x306 + (x)) 27362306a36Sopenharmony_ci#define LVS_OUTPUT_POLARITY_LOW (1 << 28) 27462306a36Sopenharmony_ci#define LHS_OUTPUT_POLARITY_LOW (1 << 30) 27562306a36Sopenharmony_ci#define DC_COM_PIN_OUTPUT_DATA(x) (0x30a + (x)) 27662306a36Sopenharmony_ci#define DC_COM_PIN_INPUT_ENABLE(x) (0x30e + (x)) 27762306a36Sopenharmony_ci#define DC_COM_PIN_INPUT_DATA(x) (0x312 + (x)) 27862306a36Sopenharmony_ci#define DC_COM_PIN_OUTPUT_SELECT(x) (0x314 + (x)) 27962306a36Sopenharmony_ci 28062306a36Sopenharmony_ci#define DC_COM_PIN_MISC_CONTROL 0x31b 28162306a36Sopenharmony_ci#define DC_COM_PIN_PM0_CONTROL 0x31c 28262306a36Sopenharmony_ci#define DC_COM_PIN_PM0_DUTY_CYCLE 0x31d 28362306a36Sopenharmony_ci#define DC_COM_PIN_PM1_CONTROL 0x31e 28462306a36Sopenharmony_ci#define DC_COM_PIN_PM1_DUTY_CYCLE 0x31f 28562306a36Sopenharmony_ci 28662306a36Sopenharmony_ci#define DC_COM_SPI_CONTROL 0x320 28762306a36Sopenharmony_ci#define DC_COM_SPI_START_BYTE 0x321 28862306a36Sopenharmony_ci#define DC_COM_HSPI_WRITE_DATA_AB 0x322 28962306a36Sopenharmony_ci#define DC_COM_HSPI_WRITE_DATA_CD 0x323 29062306a36Sopenharmony_ci#define DC_COM_HSPI_CS_DC 0x324 29162306a36Sopenharmony_ci#define DC_COM_SCRATCH_REGISTER_A 0x325 29262306a36Sopenharmony_ci#define DC_COM_SCRATCH_REGISTER_B 0x326 29362306a36Sopenharmony_ci#define DC_COM_GPIO_CTRL 0x327 29462306a36Sopenharmony_ci#define DC_COM_GPIO_DEBOUNCE_COUNTER 0x328 29562306a36Sopenharmony_ci#define DC_COM_CRC_CHECKSUM_LATCHED 0x329 29662306a36Sopenharmony_ci 29762306a36Sopenharmony_ci#define DC_COM_RG_UNDERFLOW 0x365 29862306a36Sopenharmony_ci#define UNDERFLOW_MODE_RED (1 << 8) 29962306a36Sopenharmony_ci#define UNDERFLOW_REPORT_ENABLE (1 << 0) 30062306a36Sopenharmony_ci 30162306a36Sopenharmony_ci#define DC_DISP_DISP_SIGNAL_OPTIONS0 0x400 30262306a36Sopenharmony_ci#define H_PULSE0_ENABLE (1 << 8) 30362306a36Sopenharmony_ci#define H_PULSE1_ENABLE (1 << 10) 30462306a36Sopenharmony_ci#define H_PULSE2_ENABLE (1 << 12) 30562306a36Sopenharmony_ci 30662306a36Sopenharmony_ci#define DC_DISP_DISP_SIGNAL_OPTIONS1 0x401 30762306a36Sopenharmony_ci 30862306a36Sopenharmony_ci#define DC_DISP_DISP_WIN_OPTIONS 0x402 30962306a36Sopenharmony_ci#define HDMI_ENABLE (1 << 30) 31062306a36Sopenharmony_ci#define DSI_ENABLE (1 << 29) 31162306a36Sopenharmony_ci#define SOR1_TIMING_CYA (1 << 27) 31262306a36Sopenharmony_ci#define CURSOR_ENABLE (1 << 16) 31362306a36Sopenharmony_ci 31462306a36Sopenharmony_ci#define SOR_ENABLE(x) (1 << (25 + (((x) > 1) ? ((x) + 1) : (x)))) 31562306a36Sopenharmony_ci 31662306a36Sopenharmony_ci#define DC_DISP_DISP_MEM_HIGH_PRIORITY 0x403 31762306a36Sopenharmony_ci#define CURSOR_THRESHOLD(x) (((x) & 0x03) << 24) 31862306a36Sopenharmony_ci#define WINDOW_A_THRESHOLD(x) (((x) & 0x7f) << 16) 31962306a36Sopenharmony_ci#define WINDOW_B_THRESHOLD(x) (((x) & 0x7f) << 8) 32062306a36Sopenharmony_ci#define WINDOW_C_THRESHOLD(x) (((x) & 0xff) << 0) 32162306a36Sopenharmony_ci 32262306a36Sopenharmony_ci#define DC_DISP_DISP_MEM_HIGH_PRIORITY_TIMER 0x404 32362306a36Sopenharmony_ci#define CURSOR_DELAY(x) (((x) & 0x3f) << 24) 32462306a36Sopenharmony_ci#define WINDOW_A_DELAY(x) (((x) & 0x3f) << 16) 32562306a36Sopenharmony_ci#define WINDOW_B_DELAY(x) (((x) & 0x3f) << 8) 32662306a36Sopenharmony_ci#define WINDOW_C_DELAY(x) (((x) & 0x3f) << 0) 32762306a36Sopenharmony_ci 32862306a36Sopenharmony_ci#define DC_DISP_DISP_TIMING_OPTIONS 0x405 32962306a36Sopenharmony_ci#define VSYNC_H_POSITION(x) ((x) & 0xfff) 33062306a36Sopenharmony_ci 33162306a36Sopenharmony_ci#define DC_DISP_REF_TO_SYNC 0x406 33262306a36Sopenharmony_ci#define DC_DISP_SYNC_WIDTH 0x407 33362306a36Sopenharmony_ci#define DC_DISP_BACK_PORCH 0x408 33462306a36Sopenharmony_ci#define DC_DISP_ACTIVE 0x409 33562306a36Sopenharmony_ci#define DC_DISP_FRONT_PORCH 0x40a 33662306a36Sopenharmony_ci#define DC_DISP_H_PULSE0_CONTROL 0x40b 33762306a36Sopenharmony_ci#define DC_DISP_H_PULSE0_POSITION_A 0x40c 33862306a36Sopenharmony_ci#define DC_DISP_H_PULSE0_POSITION_B 0x40d 33962306a36Sopenharmony_ci#define DC_DISP_H_PULSE0_POSITION_C 0x40e 34062306a36Sopenharmony_ci#define DC_DISP_H_PULSE0_POSITION_D 0x40f 34162306a36Sopenharmony_ci#define DC_DISP_H_PULSE1_CONTROL 0x410 34262306a36Sopenharmony_ci#define DC_DISP_H_PULSE1_POSITION_A 0x411 34362306a36Sopenharmony_ci#define DC_DISP_H_PULSE1_POSITION_B 0x412 34462306a36Sopenharmony_ci#define DC_DISP_H_PULSE1_POSITION_C 0x413 34562306a36Sopenharmony_ci#define DC_DISP_H_PULSE1_POSITION_D 0x414 34662306a36Sopenharmony_ci#define DC_DISP_H_PULSE2_CONTROL 0x415 34762306a36Sopenharmony_ci#define DC_DISP_H_PULSE2_POSITION_A 0x416 34862306a36Sopenharmony_ci#define DC_DISP_H_PULSE2_POSITION_B 0x417 34962306a36Sopenharmony_ci#define DC_DISP_H_PULSE2_POSITION_C 0x418 35062306a36Sopenharmony_ci#define DC_DISP_H_PULSE2_POSITION_D 0x419 35162306a36Sopenharmony_ci#define DC_DISP_V_PULSE0_CONTROL 0x41a 35262306a36Sopenharmony_ci#define DC_DISP_V_PULSE0_POSITION_A 0x41b 35362306a36Sopenharmony_ci#define DC_DISP_V_PULSE0_POSITION_B 0x41c 35462306a36Sopenharmony_ci#define DC_DISP_V_PULSE0_POSITION_C 0x41d 35562306a36Sopenharmony_ci#define DC_DISP_V_PULSE1_CONTROL 0x41e 35662306a36Sopenharmony_ci#define DC_DISP_V_PULSE1_POSITION_A 0x41f 35762306a36Sopenharmony_ci#define DC_DISP_V_PULSE1_POSITION_B 0x420 35862306a36Sopenharmony_ci#define DC_DISP_V_PULSE1_POSITION_C 0x421 35962306a36Sopenharmony_ci#define DC_DISP_V_PULSE2_CONTROL 0x422 36062306a36Sopenharmony_ci#define DC_DISP_V_PULSE2_POSITION_A 0x423 36162306a36Sopenharmony_ci#define DC_DISP_V_PULSE3_CONTROL 0x424 36262306a36Sopenharmony_ci#define DC_DISP_V_PULSE3_POSITION_A 0x425 36362306a36Sopenharmony_ci#define DC_DISP_M0_CONTROL 0x426 36462306a36Sopenharmony_ci#define DC_DISP_M1_CONTROL 0x427 36562306a36Sopenharmony_ci#define DC_DISP_DI_CONTROL 0x428 36662306a36Sopenharmony_ci#define DC_DISP_PP_CONTROL 0x429 36762306a36Sopenharmony_ci#define DC_DISP_PP_SELECT_A 0x42a 36862306a36Sopenharmony_ci#define DC_DISP_PP_SELECT_B 0x42b 36962306a36Sopenharmony_ci#define DC_DISP_PP_SELECT_C 0x42c 37062306a36Sopenharmony_ci#define DC_DISP_PP_SELECT_D 0x42d 37162306a36Sopenharmony_ci 37262306a36Sopenharmony_ci#define PULSE_MODE_NORMAL (0 << 3) 37362306a36Sopenharmony_ci#define PULSE_MODE_ONE_CLOCK (1 << 3) 37462306a36Sopenharmony_ci#define PULSE_POLARITY_HIGH (0 << 4) 37562306a36Sopenharmony_ci#define PULSE_POLARITY_LOW (1 << 4) 37662306a36Sopenharmony_ci#define PULSE_QUAL_ALWAYS (0 << 6) 37762306a36Sopenharmony_ci#define PULSE_QUAL_VACTIVE (2 << 6) 37862306a36Sopenharmony_ci#define PULSE_QUAL_VACTIVE1 (3 << 6) 37962306a36Sopenharmony_ci#define PULSE_LAST_START_A (0 << 8) 38062306a36Sopenharmony_ci#define PULSE_LAST_END_A (1 << 8) 38162306a36Sopenharmony_ci#define PULSE_LAST_START_B (2 << 8) 38262306a36Sopenharmony_ci#define PULSE_LAST_END_B (3 << 8) 38362306a36Sopenharmony_ci#define PULSE_LAST_START_C (4 << 8) 38462306a36Sopenharmony_ci#define PULSE_LAST_END_C (5 << 8) 38562306a36Sopenharmony_ci#define PULSE_LAST_START_D (6 << 8) 38662306a36Sopenharmony_ci#define PULSE_LAST_END_D (7 << 8) 38762306a36Sopenharmony_ci 38862306a36Sopenharmony_ci#define PULSE_START(x) (((x) & 0xfff) << 0) 38962306a36Sopenharmony_ci#define PULSE_END(x) (((x) & 0xfff) << 16) 39062306a36Sopenharmony_ci 39162306a36Sopenharmony_ci#define DC_DISP_DISP_CLOCK_CONTROL 0x42e 39262306a36Sopenharmony_ci#define PIXEL_CLK_DIVIDER_PCD1 (0 << 8) 39362306a36Sopenharmony_ci#define PIXEL_CLK_DIVIDER_PCD1H (1 << 8) 39462306a36Sopenharmony_ci#define PIXEL_CLK_DIVIDER_PCD2 (2 << 8) 39562306a36Sopenharmony_ci#define PIXEL_CLK_DIVIDER_PCD3 (3 << 8) 39662306a36Sopenharmony_ci#define PIXEL_CLK_DIVIDER_PCD4 (4 << 8) 39762306a36Sopenharmony_ci#define PIXEL_CLK_DIVIDER_PCD6 (5 << 8) 39862306a36Sopenharmony_ci#define PIXEL_CLK_DIVIDER_PCD8 (6 << 8) 39962306a36Sopenharmony_ci#define PIXEL_CLK_DIVIDER_PCD9 (7 << 8) 40062306a36Sopenharmony_ci#define PIXEL_CLK_DIVIDER_PCD12 (8 << 8) 40162306a36Sopenharmony_ci#define PIXEL_CLK_DIVIDER_PCD16 (9 << 8) 40262306a36Sopenharmony_ci#define PIXEL_CLK_DIVIDER_PCD18 (10 << 8) 40362306a36Sopenharmony_ci#define PIXEL_CLK_DIVIDER_PCD24 (11 << 8) 40462306a36Sopenharmony_ci#define PIXEL_CLK_DIVIDER_PCD13 (12 << 8) 40562306a36Sopenharmony_ci#define SHIFT_CLK_DIVIDER(x) ((x) & 0xff) 40662306a36Sopenharmony_ci 40762306a36Sopenharmony_ci#define DC_DISP_DISP_INTERFACE_CONTROL 0x42f 40862306a36Sopenharmony_ci#define DISP_DATA_FORMAT_DF1P1C (0 << 0) 40962306a36Sopenharmony_ci#define DISP_DATA_FORMAT_DF1P2C24B (1 << 0) 41062306a36Sopenharmony_ci#define DISP_DATA_FORMAT_DF1P2C18B (2 << 0) 41162306a36Sopenharmony_ci#define DISP_DATA_FORMAT_DF1P2C16B (3 << 0) 41262306a36Sopenharmony_ci#define DISP_DATA_FORMAT_DF2S (4 << 0) 41362306a36Sopenharmony_ci#define DISP_DATA_FORMAT_DF3S (5 << 0) 41462306a36Sopenharmony_ci#define DISP_DATA_FORMAT_DFSPI (6 << 0) 41562306a36Sopenharmony_ci#define DISP_DATA_FORMAT_DF1P3C24B (7 << 0) 41662306a36Sopenharmony_ci#define DISP_DATA_FORMAT_DF1P3C18B (8 << 0) 41762306a36Sopenharmony_ci#define DISP_ALIGNMENT_MSB (0 << 8) 41862306a36Sopenharmony_ci#define DISP_ALIGNMENT_LSB (1 << 8) 41962306a36Sopenharmony_ci#define DISP_ORDER_RED_BLUE (0 << 9) 42062306a36Sopenharmony_ci#define DISP_ORDER_BLUE_RED (1 << 9) 42162306a36Sopenharmony_ci 42262306a36Sopenharmony_ci#define DC_DISP_DISP_COLOR_CONTROL 0x430 42362306a36Sopenharmony_ci#define BASE_COLOR_SIZE666 ( 0 << 0) 42462306a36Sopenharmony_ci#define BASE_COLOR_SIZE111 ( 1 << 0) 42562306a36Sopenharmony_ci#define BASE_COLOR_SIZE222 ( 2 << 0) 42662306a36Sopenharmony_ci#define BASE_COLOR_SIZE333 ( 3 << 0) 42762306a36Sopenharmony_ci#define BASE_COLOR_SIZE444 ( 4 << 0) 42862306a36Sopenharmony_ci#define BASE_COLOR_SIZE555 ( 5 << 0) 42962306a36Sopenharmony_ci#define BASE_COLOR_SIZE565 ( 6 << 0) 43062306a36Sopenharmony_ci#define BASE_COLOR_SIZE332 ( 7 << 0) 43162306a36Sopenharmony_ci#define BASE_COLOR_SIZE888 ( 8 << 0) 43262306a36Sopenharmony_ci#define BASE_COLOR_SIZE101010 (10 << 0) 43362306a36Sopenharmony_ci#define BASE_COLOR_SIZE121212 (12 << 0) 43462306a36Sopenharmony_ci#define DITHER_CONTROL_MASK (3 << 8) 43562306a36Sopenharmony_ci#define DITHER_CONTROL_DISABLE (0 << 8) 43662306a36Sopenharmony_ci#define DITHER_CONTROL_ORDERED (2 << 8) 43762306a36Sopenharmony_ci#define DITHER_CONTROL_ERRDIFF (3 << 8) 43862306a36Sopenharmony_ci#define BASE_COLOR_SIZE_MASK (0xf << 0) 43962306a36Sopenharmony_ci#define BASE_COLOR_SIZE_666 ( 0 << 0) 44062306a36Sopenharmony_ci#define BASE_COLOR_SIZE_111 ( 1 << 0) 44162306a36Sopenharmony_ci#define BASE_COLOR_SIZE_222 ( 2 << 0) 44262306a36Sopenharmony_ci#define BASE_COLOR_SIZE_333 ( 3 << 0) 44362306a36Sopenharmony_ci#define BASE_COLOR_SIZE_444 ( 4 << 0) 44462306a36Sopenharmony_ci#define BASE_COLOR_SIZE_555 ( 5 << 0) 44562306a36Sopenharmony_ci#define BASE_COLOR_SIZE_565 ( 6 << 0) 44662306a36Sopenharmony_ci#define BASE_COLOR_SIZE_332 ( 7 << 0) 44762306a36Sopenharmony_ci#define BASE_COLOR_SIZE_888 ( 8 << 0) 44862306a36Sopenharmony_ci#define BASE_COLOR_SIZE_101010 ( 10 << 0) 44962306a36Sopenharmony_ci#define BASE_COLOR_SIZE_121212 ( 12 << 0) 45062306a36Sopenharmony_ci 45162306a36Sopenharmony_ci#define DC_DISP_SHIFT_CLOCK_OPTIONS 0x431 45262306a36Sopenharmony_ci#define SC1_H_QUALIFIER_NONE (1 << 16) 45362306a36Sopenharmony_ci#define SC0_H_QUALIFIER_NONE (1 << 0) 45462306a36Sopenharmony_ci 45562306a36Sopenharmony_ci#define DC_DISP_DATA_ENABLE_OPTIONS 0x432 45662306a36Sopenharmony_ci#define DE_SELECT_ACTIVE_BLANK (0 << 0) 45762306a36Sopenharmony_ci#define DE_SELECT_ACTIVE (1 << 0) 45862306a36Sopenharmony_ci#define DE_SELECT_ACTIVE_IS (2 << 0) 45962306a36Sopenharmony_ci#define DE_CONTROL_ONECLK (0 << 2) 46062306a36Sopenharmony_ci#define DE_CONTROL_NORMAL (1 << 2) 46162306a36Sopenharmony_ci#define DE_CONTROL_EARLY_EXT (2 << 2) 46262306a36Sopenharmony_ci#define DE_CONTROL_EARLY (3 << 2) 46362306a36Sopenharmony_ci#define DE_CONTROL_ACTIVE_BLANK (4 << 2) 46462306a36Sopenharmony_ci 46562306a36Sopenharmony_ci#define DC_DISP_SERIAL_INTERFACE_OPTIONS 0x433 46662306a36Sopenharmony_ci#define DC_DISP_LCD_SPI_OPTIONS 0x434 46762306a36Sopenharmony_ci#define DC_DISP_BORDER_COLOR 0x435 46862306a36Sopenharmony_ci#define DC_DISP_COLOR_KEY0_LOWER 0x436 46962306a36Sopenharmony_ci#define DC_DISP_COLOR_KEY0_UPPER 0x437 47062306a36Sopenharmony_ci#define DC_DISP_COLOR_KEY1_LOWER 0x438 47162306a36Sopenharmony_ci#define DC_DISP_COLOR_KEY1_UPPER 0x439 47262306a36Sopenharmony_ci 47362306a36Sopenharmony_ci#define DC_DISP_CURSOR_FOREGROUND 0x43c 47462306a36Sopenharmony_ci#define DC_DISP_CURSOR_BACKGROUND 0x43d 47562306a36Sopenharmony_ci 47662306a36Sopenharmony_ci#define DC_DISP_CURSOR_START_ADDR 0x43e 47762306a36Sopenharmony_ci#define CURSOR_CLIP_DISPLAY (0 << 28) 47862306a36Sopenharmony_ci#define CURSOR_CLIP_WIN_A (1 << 28) 47962306a36Sopenharmony_ci#define CURSOR_CLIP_WIN_B (2 << 28) 48062306a36Sopenharmony_ci#define CURSOR_CLIP_WIN_C (3 << 28) 48162306a36Sopenharmony_ci#define CURSOR_SIZE_32x32 (0 << 24) 48262306a36Sopenharmony_ci#define CURSOR_SIZE_64x64 (1 << 24) 48362306a36Sopenharmony_ci#define CURSOR_SIZE_128x128 (2 << 24) 48462306a36Sopenharmony_ci#define CURSOR_SIZE_256x256 (3 << 24) 48562306a36Sopenharmony_ci#define DC_DISP_CURSOR_START_ADDR_NS 0x43f 48662306a36Sopenharmony_ci 48762306a36Sopenharmony_ci#define DC_DISP_CURSOR_POSITION 0x440 48862306a36Sopenharmony_ci#define DC_DISP_CURSOR_POSITION_NS 0x441 48962306a36Sopenharmony_ci 49062306a36Sopenharmony_ci#define DC_DISP_INIT_SEQ_CONTROL 0x442 49162306a36Sopenharmony_ci#define DC_DISP_SPI_INIT_SEQ_DATA_A 0x443 49262306a36Sopenharmony_ci#define DC_DISP_SPI_INIT_SEQ_DATA_B 0x444 49362306a36Sopenharmony_ci#define DC_DISP_SPI_INIT_SEQ_DATA_C 0x445 49462306a36Sopenharmony_ci#define DC_DISP_SPI_INIT_SEQ_DATA_D 0x446 49562306a36Sopenharmony_ci 49662306a36Sopenharmony_ci#define DC_DISP_DC_MCCIF_FIFOCTRL 0x480 49762306a36Sopenharmony_ci#define DC_DISP_MCCIF_DISPLAY0A_HYST 0x481 49862306a36Sopenharmony_ci#define DC_DISP_MCCIF_DISPLAY0B_HYST 0x482 49962306a36Sopenharmony_ci#define DC_DISP_MCCIF_DISPLAY1A_HYST 0x483 50062306a36Sopenharmony_ci#define DC_DISP_MCCIF_DISPLAY1B_HYST 0x484 50162306a36Sopenharmony_ci 50262306a36Sopenharmony_ci#define DC_DISP_DAC_CRT_CTRL 0x4c0 50362306a36Sopenharmony_ci#define DC_DISP_DISP_MISC_CONTROL 0x4c1 50462306a36Sopenharmony_ci#define DC_DISP_SD_CONTROL 0x4c2 50562306a36Sopenharmony_ci#define DC_DISP_SD_CSC_COEFF 0x4c3 50662306a36Sopenharmony_ci#define DC_DISP_SD_LUT(x) (0x4c4 + (x)) 50762306a36Sopenharmony_ci#define DC_DISP_SD_FLICKER_CONTROL 0x4cd 50862306a36Sopenharmony_ci#define DC_DISP_DC_PIXEL_COUNT 0x4ce 50962306a36Sopenharmony_ci#define DC_DISP_SD_HISTOGRAM(x) (0x4cf + (x)) 51062306a36Sopenharmony_ci#define DC_DISP_SD_BL_PARAMETERS 0x4d7 51162306a36Sopenharmony_ci#define DC_DISP_SD_BL_TF(x) (0x4d8 + (x)) 51262306a36Sopenharmony_ci#define DC_DISP_SD_BL_CONTROL 0x4dc 51362306a36Sopenharmony_ci#define DC_DISP_SD_HW_K_VALUES 0x4dd 51462306a36Sopenharmony_ci#define DC_DISP_SD_MAN_K_VALUES 0x4de 51562306a36Sopenharmony_ci 51662306a36Sopenharmony_ci#define DC_DISP_BLEND_BACKGROUND_COLOR 0x4e4 51762306a36Sopenharmony_ci#define BACKGROUND_COLOR_ALPHA(x) (((x) & 0xff) << 24) 51862306a36Sopenharmony_ci#define BACKGROUND_COLOR_BLUE(x) (((x) & 0xff) << 16) 51962306a36Sopenharmony_ci#define BACKGROUND_COLOR_GREEN(x) (((x) & 0xff) << 8) 52062306a36Sopenharmony_ci#define BACKGROUND_COLOR_RED(x) (((x) & 0xff) << 0) 52162306a36Sopenharmony_ci 52262306a36Sopenharmony_ci#define DC_DISP_INTERLACE_CONTROL 0x4e5 52362306a36Sopenharmony_ci#define INTERLACE_STATUS (1 << 2) 52462306a36Sopenharmony_ci#define INTERLACE_START (1 << 1) 52562306a36Sopenharmony_ci#define INTERLACE_ENABLE (1 << 0) 52662306a36Sopenharmony_ci 52762306a36Sopenharmony_ci#define DC_DISP_CURSOR_START_ADDR_HI 0x4ec 52862306a36Sopenharmony_ci#define DC_DISP_BLEND_CURSOR_CONTROL 0x4f1 52962306a36Sopenharmony_ci#define CURSOR_COMPOSITION_MODE_BLEND (0 << 25) 53062306a36Sopenharmony_ci#define CURSOR_COMPOSITION_MODE_XOR (1 << 25) 53162306a36Sopenharmony_ci#define CURSOR_MODE_LEGACY (0 << 24) 53262306a36Sopenharmony_ci#define CURSOR_MODE_NORMAL (1 << 24) 53362306a36Sopenharmony_ci#define CURSOR_DST_BLEND_ZERO (0 << 16) 53462306a36Sopenharmony_ci#define CURSOR_DST_BLEND_K1 (1 << 16) 53562306a36Sopenharmony_ci#define CURSOR_DST_BLEND_NEG_K1_TIMES_SRC (2 << 16) 53662306a36Sopenharmony_ci#define CURSOR_DST_BLEND_MASK (3 << 16) 53762306a36Sopenharmony_ci#define CURSOR_SRC_BLEND_K1 (0 << 8) 53862306a36Sopenharmony_ci#define CURSOR_SRC_BLEND_K1_TIMES_SRC (1 << 8) 53962306a36Sopenharmony_ci#define CURSOR_SRC_BLEND_MASK (3 << 8) 54062306a36Sopenharmony_ci#define CURSOR_ALPHA 0xff 54162306a36Sopenharmony_ci 54262306a36Sopenharmony_ci#define DC_WIN_CORE_ACT_CONTROL 0x50e 54362306a36Sopenharmony_ci#define VCOUNTER (0 << 0) 54462306a36Sopenharmony_ci#define HCOUNTER (1 << 0) 54562306a36Sopenharmony_ci 54662306a36Sopenharmony_ci#define DC_WIN_CORE_IHUB_WGRP_LATENCY_CTLA 0x543 54762306a36Sopenharmony_ci#define LATENCY_CTL_MODE_ENABLE (1 << 2) 54862306a36Sopenharmony_ci 54962306a36Sopenharmony_ci#define DC_WIN_CORE_IHUB_WGRP_LATENCY_CTLB 0x544 55062306a36Sopenharmony_ci#define WATERMARK_MASK 0x1fffffff 55162306a36Sopenharmony_ci 55262306a36Sopenharmony_ci#define DC_WIN_CORE_PRECOMP_WGRP_PIPE_METER 0x560 55362306a36Sopenharmony_ci#define PIPE_METER_INT(x) (((x) & 0xff) << 8) 55462306a36Sopenharmony_ci#define PIPE_METER_FRAC(x) (((x) & 0xff) << 0) 55562306a36Sopenharmony_ci 55662306a36Sopenharmony_ci#define DC_WIN_CORE_IHUB_WGRP_POOL_CONFIG 0x561 55762306a36Sopenharmony_ci#define MEMPOOL_ENTRIES(x) (((x) & 0xffff) << 0) 55862306a36Sopenharmony_ci 55962306a36Sopenharmony_ci#define DC_WIN_CORE_IHUB_WGRP_FETCH_METER 0x562 56062306a36Sopenharmony_ci#define SLOTS(x) (((x) & 0xff) << 0) 56162306a36Sopenharmony_ci 56262306a36Sopenharmony_ci#define DC_WIN_CORE_IHUB_LINEBUF_CONFIG 0x563 56362306a36Sopenharmony_ci#define MODE_TWO_LINES (0 << 14) 56462306a36Sopenharmony_ci#define MODE_FOUR_LINES (1 << 14) 56562306a36Sopenharmony_ci 56662306a36Sopenharmony_ci#define DC_WIN_CORE_IHUB_THREAD_GROUP 0x568 56762306a36Sopenharmony_ci#define THREAD_NUM_MASK (0x1f << 1) 56862306a36Sopenharmony_ci#define THREAD_NUM(x) (((x) & 0x1f) << 1) 56962306a36Sopenharmony_ci#define THREAD_GROUP_ENABLE (1 << 0) 57062306a36Sopenharmony_ci 57162306a36Sopenharmony_ci#define DC_WIN_H_FILTER_P(p) (0x601 + (p)) 57262306a36Sopenharmony_ci#define DC_WIN_V_FILTER_P(p) (0x619 + (p)) 57362306a36Sopenharmony_ci 57462306a36Sopenharmony_ci#define DC_WIN_CSC_YOF 0x611 57562306a36Sopenharmony_ci#define DC_WIN_CSC_KYRGB 0x612 57662306a36Sopenharmony_ci#define DC_WIN_CSC_KUR 0x613 57762306a36Sopenharmony_ci#define DC_WIN_CSC_KVR 0x614 57862306a36Sopenharmony_ci#define DC_WIN_CSC_KUG 0x615 57962306a36Sopenharmony_ci#define DC_WIN_CSC_KVG 0x616 58062306a36Sopenharmony_ci#define DC_WIN_CSC_KUB 0x617 58162306a36Sopenharmony_ci#define DC_WIN_CSC_KVB 0x618 58262306a36Sopenharmony_ci 58362306a36Sopenharmony_ci#define DC_WIN_WIN_OPTIONS 0x700 58462306a36Sopenharmony_ci#define H_DIRECTION (1 << 0) 58562306a36Sopenharmony_ci#define V_DIRECTION (1 << 2) 58662306a36Sopenharmony_ci#define COLOR_EXPAND (1 << 6) 58762306a36Sopenharmony_ci#define H_FILTER (1 << 8) 58862306a36Sopenharmony_ci#define V_FILTER (1 << 10) 58962306a36Sopenharmony_ci#define CSC_ENABLE (1 << 18) 59062306a36Sopenharmony_ci#define WIN_ENABLE (1 << 30) 59162306a36Sopenharmony_ci 59262306a36Sopenharmony_ci#define DC_WIN_BYTE_SWAP 0x701 59362306a36Sopenharmony_ci#define BYTE_SWAP_NOSWAP (0 << 0) 59462306a36Sopenharmony_ci#define BYTE_SWAP_SWAP2 (1 << 0) 59562306a36Sopenharmony_ci#define BYTE_SWAP_SWAP4 (2 << 0) 59662306a36Sopenharmony_ci#define BYTE_SWAP_SWAP4HW (3 << 0) 59762306a36Sopenharmony_ci 59862306a36Sopenharmony_ci#define DC_WIN_BUFFER_CONTROL 0x702 59962306a36Sopenharmony_ci#define BUFFER_CONTROL_HOST (0 << 0) 60062306a36Sopenharmony_ci#define BUFFER_CONTROL_VI (1 << 0) 60162306a36Sopenharmony_ci#define BUFFER_CONTROL_EPP (2 << 0) 60262306a36Sopenharmony_ci#define BUFFER_CONTROL_MPEGE (3 << 0) 60362306a36Sopenharmony_ci#define BUFFER_CONTROL_SB2D (4 << 0) 60462306a36Sopenharmony_ci 60562306a36Sopenharmony_ci#define DC_WIN_COLOR_DEPTH 0x703 60662306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_P1 0 60762306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_P2 1 60862306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_P4 2 60962306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_P8 3 61062306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_B4G4R4A4 4 61162306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_B5G5R5A1 5 61262306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_B5G6R5 6 61362306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_A1B5G5R5 7 61462306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_B8G8R8A8 12 61562306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_R8G8B8A8 13 61662306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_B6x2G6x2R6x2A8 14 61762306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_R6x2G6x2B6x2A8 15 61862306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_YCbCr422 16 61962306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_YUV422 17 62062306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_YCbCr420P 18 62162306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_YUV420P 19 62262306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_YCbCr422P 20 62362306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_YUV422P 21 62462306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_YCbCr422R 22 62562306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_YUV422R 23 62662306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_YCbCr422RA 24 62762306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_YUV422RA 25 62862306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_R4G4B4A4 27 62962306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_R5G5B5A 28 63062306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_AR5G5B5 29 63162306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_B5G5R5X1 30 63262306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_X1B5G5R5 31 63362306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_R5G5B5X1 32 63462306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_X1R5G5B5 33 63562306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_R5G6B5 34 63662306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_A8R8G8B8 35 63762306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_A8B8G8R8 36 63862306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_B8G8R8X8 37 63962306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_R8G8B8X8 38 64062306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_YCbCr444P 41 64162306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_YCrCb420SP 42 64262306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_YCbCr420SP 43 64362306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_YCrCb422SP 44 64462306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_YCbCr422SP 45 64562306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_YCrCb444SP 48 64662306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_YCbCr444SP 49 64762306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_X8B8G8R8 65 64862306a36Sopenharmony_ci#define WIN_COLOR_DEPTH_X8R8G8B8 66 64962306a36Sopenharmony_ci 65062306a36Sopenharmony_ci#define DC_WIN_POSITION 0x704 65162306a36Sopenharmony_ci#define H_POSITION(x) (((x) & 0x1fff) << 0) /* XXX 0x7fff on Tegra186 */ 65262306a36Sopenharmony_ci#define V_POSITION(x) (((x) & 0x1fff) << 16) /* XXX 0x7fff on Tegra186 */ 65362306a36Sopenharmony_ci 65462306a36Sopenharmony_ci#define DC_WIN_SIZE 0x705 65562306a36Sopenharmony_ci#define H_SIZE(x) (((x) & 0x1fff) << 0) /* XXX 0x7fff on Tegra186 */ 65662306a36Sopenharmony_ci#define V_SIZE(x) (((x) & 0x1fff) << 16) /* XXX 0x7fff on Tegra186 */ 65762306a36Sopenharmony_ci 65862306a36Sopenharmony_ci#define DC_WIN_PRESCALED_SIZE 0x706 65962306a36Sopenharmony_ci#define H_PRESCALED_SIZE(x) (((x) & 0x7fff) << 0) 66062306a36Sopenharmony_ci#define V_PRESCALED_SIZE(x) (((x) & 0x1fff) << 16) /* XXX 0x7fff on Tegra186 */ 66162306a36Sopenharmony_ci 66262306a36Sopenharmony_ci#define DC_WIN_H_INITIAL_DDA 0x707 66362306a36Sopenharmony_ci#define DC_WIN_V_INITIAL_DDA 0x708 66462306a36Sopenharmony_ci#define DC_WIN_DDA_INC 0x709 66562306a36Sopenharmony_ci#define H_DDA_INC(x) (((x) & 0xffff) << 0) 66662306a36Sopenharmony_ci#define V_DDA_INC(x) (((x) & 0xffff) << 16) 66762306a36Sopenharmony_ci 66862306a36Sopenharmony_ci#define DC_WIN_LINE_STRIDE 0x70a 66962306a36Sopenharmony_ci#define DC_WIN_BUF_STRIDE 0x70b 67062306a36Sopenharmony_ci#define DC_WIN_UV_BUF_STRIDE 0x70c 67162306a36Sopenharmony_ci#define DC_WIN_BUFFER_ADDR_MODE 0x70d 67262306a36Sopenharmony_ci#define DC_WIN_BUFFER_ADDR_MODE_LINEAR (0 << 0) 67362306a36Sopenharmony_ci#define DC_WIN_BUFFER_ADDR_MODE_TILE (1 << 0) 67462306a36Sopenharmony_ci#define DC_WIN_BUFFER_ADDR_MODE_LINEAR_UV (0 << 16) 67562306a36Sopenharmony_ci#define DC_WIN_BUFFER_ADDR_MODE_TILE_UV (1 << 16) 67662306a36Sopenharmony_ci 67762306a36Sopenharmony_ci#define DC_WIN_DV_CONTROL 0x70e 67862306a36Sopenharmony_ci 67962306a36Sopenharmony_ci#define DC_WIN_BLEND_NOKEY 0x70f 68062306a36Sopenharmony_ci#define BLEND_WEIGHT1(x) (((x) & 0xff) << 16) 68162306a36Sopenharmony_ci#define BLEND_WEIGHT0(x) (((x) & 0xff) << 8) 68262306a36Sopenharmony_ci 68362306a36Sopenharmony_ci#define DC_WIN_BLEND_1WIN 0x710 68462306a36Sopenharmony_ci#define BLEND_CONTROL_FIX (0 << 2) 68562306a36Sopenharmony_ci#define BLEND_CONTROL_ALPHA (1 << 2) 68662306a36Sopenharmony_ci#define BLEND_COLOR_KEY_NONE (0 << 0) 68762306a36Sopenharmony_ci#define BLEND_COLOR_KEY_0 (1 << 0) 68862306a36Sopenharmony_ci#define BLEND_COLOR_KEY_1 (2 << 0) 68962306a36Sopenharmony_ci#define BLEND_COLOR_KEY_BOTH (3 << 0) 69062306a36Sopenharmony_ci 69162306a36Sopenharmony_ci#define DC_WIN_BLEND_2WIN_X 0x711 69262306a36Sopenharmony_ci#define BLEND_CONTROL_DEPENDENT (2 << 2) 69362306a36Sopenharmony_ci 69462306a36Sopenharmony_ci#define DC_WIN_BLEND_2WIN_Y 0x712 69562306a36Sopenharmony_ci#define DC_WIN_BLEND_3WIN_XY 0x713 69662306a36Sopenharmony_ci 69762306a36Sopenharmony_ci#define DC_WIN_HP_FETCH_CONTROL 0x714 69862306a36Sopenharmony_ci 69962306a36Sopenharmony_ci#define DC_WINBUF_START_ADDR 0x800 70062306a36Sopenharmony_ci#define DC_WINBUF_START_ADDR_NS 0x801 70162306a36Sopenharmony_ci#define DC_WINBUF_START_ADDR_U 0x802 70262306a36Sopenharmony_ci#define DC_WINBUF_START_ADDR_U_NS 0x803 70362306a36Sopenharmony_ci#define DC_WINBUF_START_ADDR_V 0x804 70462306a36Sopenharmony_ci#define DC_WINBUF_START_ADDR_V_NS 0x805 70562306a36Sopenharmony_ci 70662306a36Sopenharmony_ci#define DC_WINBUF_ADDR_H_OFFSET 0x806 70762306a36Sopenharmony_ci#define DC_WINBUF_ADDR_H_OFFSET_NS 0x807 70862306a36Sopenharmony_ci#define DC_WINBUF_ADDR_V_OFFSET 0x808 70962306a36Sopenharmony_ci#define DC_WINBUF_ADDR_V_OFFSET_NS 0x809 71062306a36Sopenharmony_ci 71162306a36Sopenharmony_ci#define DC_WINBUF_UFLOW_STATUS 0x80a 71262306a36Sopenharmony_ci#define DC_WINBUF_SURFACE_KIND 0x80b 71362306a36Sopenharmony_ci#define DC_WINBUF_SURFACE_KIND_PITCH (0 << 0) 71462306a36Sopenharmony_ci#define DC_WINBUF_SURFACE_KIND_TILED (1 << 0) 71562306a36Sopenharmony_ci#define DC_WINBUF_SURFACE_KIND_BLOCK (2 << 0) 71662306a36Sopenharmony_ci#define DC_WINBUF_SURFACE_KIND_BLOCK_HEIGHT(x) (((x) & 0x7) << 4) 71762306a36Sopenharmony_ci 71862306a36Sopenharmony_ci#define DC_WINBUF_START_ADDR_HI 0x80d 71962306a36Sopenharmony_ci 72062306a36Sopenharmony_ci#define DC_WINBUF_START_ADDR_HI_U 0x80f 72162306a36Sopenharmony_ci#define DC_WINBUF_START_ADDR_HI_V 0x811 72262306a36Sopenharmony_ci 72362306a36Sopenharmony_ci#define DC_WINBUF_CDE_CONTROL 0x82f 72462306a36Sopenharmony_ci#define ENABLE_SURFACE (1 << 0) 72562306a36Sopenharmony_ci 72662306a36Sopenharmony_ci#define DC_WINBUF_AD_UFLOW_STATUS 0xbca 72762306a36Sopenharmony_ci#define DC_WINBUF_BD_UFLOW_STATUS 0xdca 72862306a36Sopenharmony_ci#define DC_WINBUF_CD_UFLOW_STATUS 0xfca 72962306a36Sopenharmony_ci 73062306a36Sopenharmony_ci/* Tegra186 and later */ 73162306a36Sopenharmony_ci#define DC_DISP_CORE_SOR_SET_CONTROL(x) (0x403 + (x)) 73262306a36Sopenharmony_ci#define PROTOCOL_MASK (0xf << 8) 73362306a36Sopenharmony_ci#define PROTOCOL_SINGLE_TMDS_A (0x1 << 8) 73462306a36Sopenharmony_ci 73562306a36Sopenharmony_ci#define DC_DISP_PCALC_HEAD_SET_CROPPED_POINT_IN_CURSOR 0x442 73662306a36Sopenharmony_ci#define DC_DISP_PCALC_HEAD_SET_CROPPED_SIZE_IN_CURSOR 0x446 73762306a36Sopenharmony_ci 73862306a36Sopenharmony_ci#define DC_WINC_PRECOMP_WGRP_PIPE_CAPA 0x500 73962306a36Sopenharmony_ci#define DC_WINC_PRECOMP_WGRP_PIPE_CAPB 0x501 74062306a36Sopenharmony_ci#define DC_WINC_PRECOMP_WGRP_PIPE_CAPC 0x502 74162306a36Sopenharmony_ci#define MAX_PIXELS_5TAP444(x) ((x) & 0xffff) 74262306a36Sopenharmony_ci#define DC_WINC_PRECOMP_WGRP_PIPE_CAPD 0x503 74362306a36Sopenharmony_ci#define DC_WINC_PRECOMP_WGRP_PIPE_CAPE 0x504 74462306a36Sopenharmony_ci#define MAX_PIXELS_2TAP444(x) ((x) & 0xffff) 74562306a36Sopenharmony_ci#define DC_WINC_PRECOMP_WGRP_PIPE_CAPF 0x505 74662306a36Sopenharmony_ci 74762306a36Sopenharmony_ci#define DC_WIN_CORE_WINDOWGROUP_SET_CONTROL 0x702 74862306a36Sopenharmony_ci#define OWNER_MASK (0xf << 0) 74962306a36Sopenharmony_ci#define OWNER(x) (((x) & 0xf) << 0) 75062306a36Sopenharmony_ci 75162306a36Sopenharmony_ci#define DC_WIN_CROPPED_SIZE 0x706 75262306a36Sopenharmony_ci 75362306a36Sopenharmony_ci#define DC_WIN_SET_INPUT_SCALER_H_START_PHASE 0x707 75462306a36Sopenharmony_ci#define DC_WIN_SET_INPUT_SCALER_V_START_PHASE 0x708 75562306a36Sopenharmony_ci 75662306a36Sopenharmony_ci#define DC_WIN_PLANAR_STORAGE 0x709 75762306a36Sopenharmony_ci#define PITCH(x) (((x) >> 6) & 0x1fff) 75862306a36Sopenharmony_ci 75962306a36Sopenharmony_ci#define DC_WIN_PLANAR_STORAGE_UV 0x70a 76062306a36Sopenharmony_ci#define PITCH_U(x) ((((x) >> 6) & 0x1fff) << 0) 76162306a36Sopenharmony_ci#define PITCH_V(x) ((((x) >> 6) & 0x1fff) << 16) 76262306a36Sopenharmony_ci 76362306a36Sopenharmony_ci#define DC_WIN_SET_INPUT_SCALER_HPHASE_INCR 0x70b 76462306a36Sopenharmony_ci#define DC_WIN_SET_INPUT_SCALER_VPHASE_INCR 0x70c 76562306a36Sopenharmony_ci 76662306a36Sopenharmony_ci#define DC_WIN_SET_PARAMS 0x70d 76762306a36Sopenharmony_ci#define CLAMP_BEFORE_BLEND (1 << 15) 76862306a36Sopenharmony_ci#define DEGAMMA_NONE (0 << 13) 76962306a36Sopenharmony_ci#define DEGAMMA_SRGB (1 << 13) 77062306a36Sopenharmony_ci#define DEGAMMA_YUV8_10 (2 << 13) 77162306a36Sopenharmony_ci#define DEGAMMA_YUV12 (3 << 13) 77262306a36Sopenharmony_ci#define INPUT_RANGE_BYPASS (0 << 10) 77362306a36Sopenharmony_ci#define INPUT_RANGE_LIMITED (1 << 10) 77462306a36Sopenharmony_ci#define INPUT_RANGE_FULL (2 << 10) 77562306a36Sopenharmony_ci#define COLOR_SPACE_RGB (0 << 8) 77662306a36Sopenharmony_ci#define COLOR_SPACE_YUV_601 (1 << 8) 77762306a36Sopenharmony_ci#define COLOR_SPACE_YUV_709 (2 << 8) 77862306a36Sopenharmony_ci#define COLOR_SPACE_YUV_2020 (3 << 8) 77962306a36Sopenharmony_ci 78062306a36Sopenharmony_ci#define DC_WIN_WINDOWGROUP_SET_CONTROL_INPUT_SCALER 0x70e 78162306a36Sopenharmony_ci#define HORIZONTAL_TAPS_2 (1 << 3) 78262306a36Sopenharmony_ci#define HORIZONTAL_TAPS_5 (4 << 3) 78362306a36Sopenharmony_ci#define VERTICAL_TAPS_2 (1 << 0) 78462306a36Sopenharmony_ci#define VERTICAL_TAPS_5 (4 << 0) 78562306a36Sopenharmony_ci 78662306a36Sopenharmony_ci#define DC_WIN_WINDOWGROUP_SET_INPUT_SCALER_COEFF 0x70f 78762306a36Sopenharmony_ci#define COEFF_INDEX(x) (((x) & 0xff) << 15) 78862306a36Sopenharmony_ci#define COEFF_DATA(x) (((x) & 0x3ff) << 0) 78962306a36Sopenharmony_ci 79062306a36Sopenharmony_ci#define DC_WIN_WINDOWGROUP_SET_INPUT_SCALER_USAGE 0x711 79162306a36Sopenharmony_ci#define INPUT_SCALER_USE422 (1 << 2) 79262306a36Sopenharmony_ci#define INPUT_SCALER_VBYPASS (1 << 1) 79362306a36Sopenharmony_ci#define INPUT_SCALER_HBYPASS (1 << 0) 79462306a36Sopenharmony_ci 79562306a36Sopenharmony_ci#define DC_WIN_BLEND_LAYER_CONTROL 0x716 79662306a36Sopenharmony_ci#define COLOR_KEY_NONE (0 << 25) 79762306a36Sopenharmony_ci#define COLOR_KEY_SRC (1 << 25) 79862306a36Sopenharmony_ci#define COLOR_KEY_DST (2 << 25) 79962306a36Sopenharmony_ci#define BLEND_BYPASS (1 << 24) 80062306a36Sopenharmony_ci#define K2(x) (((x) & 0xff) << 16) 80162306a36Sopenharmony_ci#define K1(x) (((x) & 0xff) << 8) 80262306a36Sopenharmony_ci#define WINDOW_LAYER_DEPTH(x) (((x) & 0xff) << 0) 80362306a36Sopenharmony_ci 80462306a36Sopenharmony_ci#define DC_WIN_BLEND_MATCH_SELECT 0x717 80562306a36Sopenharmony_ci#define BLEND_FACTOR_DST_ALPHA_ZERO (0 << 12) 80662306a36Sopenharmony_ci#define BLEND_FACTOR_DST_ALPHA_ONE (1 << 12) 80762306a36Sopenharmony_ci#define BLEND_FACTOR_DST_ALPHA_NEG_K1_TIMES_SRC (2 << 12) 80862306a36Sopenharmony_ci#define BLEND_FACTOR_DST_ALPHA_K2 (3 << 12) 80962306a36Sopenharmony_ci#define BLEND_FACTOR_SRC_ALPHA_ZERO (0 << 8) 81062306a36Sopenharmony_ci#define BLEND_FACTOR_SRC_ALPHA_K1 (1 << 8) 81162306a36Sopenharmony_ci#define BLEND_FACTOR_SRC_ALPHA_K2 (2 << 8) 81262306a36Sopenharmony_ci#define BLEND_FACTOR_SRC_ALPHA_NEG_K1_TIMES_DST (3 << 8) 81362306a36Sopenharmony_ci#define BLEND_FACTOR_DST_COLOR_ZERO (0 << 4) 81462306a36Sopenharmony_ci#define BLEND_FACTOR_DST_COLOR_ONE (1 << 4) 81562306a36Sopenharmony_ci#define BLEND_FACTOR_DST_COLOR_K1 (2 << 4) 81662306a36Sopenharmony_ci#define BLEND_FACTOR_DST_COLOR_K2 (3 << 4) 81762306a36Sopenharmony_ci#define BLEND_FACTOR_DST_COLOR_K1_TIMES_DST (4 << 4) 81862306a36Sopenharmony_ci#define BLEND_FACTOR_DST_COLOR_NEG_K1_TIMES_DST (5 << 4) 81962306a36Sopenharmony_ci#define BLEND_FACTOR_DST_COLOR_NEG_K1_TIMES_SRC (6 << 4) 82062306a36Sopenharmony_ci#define BLEND_FACTOR_DST_COLOR_NEG_K1 (7 << 4) 82162306a36Sopenharmony_ci#define BLEND_FACTOR_SRC_COLOR_ZERO (0 << 0) 82262306a36Sopenharmony_ci#define BLEND_FACTOR_SRC_COLOR_ONE (1 << 0) 82362306a36Sopenharmony_ci#define BLEND_FACTOR_SRC_COLOR_K1 (2 << 0) 82462306a36Sopenharmony_ci#define BLEND_FACTOR_SRC_COLOR_K1_TIMES_DST (3 << 0) 82562306a36Sopenharmony_ci#define BLEND_FACTOR_SRC_COLOR_NEG_K1_TIMES_DST (4 << 0) 82662306a36Sopenharmony_ci#define BLEND_FACTOR_SRC_COLOR_K1_TIMES_SRC (5 << 0) 82762306a36Sopenharmony_ci 82862306a36Sopenharmony_ci#define DC_WIN_BLEND_NOMATCH_SELECT 0x718 82962306a36Sopenharmony_ci 83062306a36Sopenharmony_ci#define DC_WIN_PRECOMP_WGRP_PARAMS 0x724 83162306a36Sopenharmony_ci#define SWAP_UV (1 << 0) 83262306a36Sopenharmony_ci 83362306a36Sopenharmony_ci#define DC_WIN_WINDOW_SET_CONTROL 0x730 83462306a36Sopenharmony_ci#define CONTROL_CSC_ENABLE (1 << 5) 83562306a36Sopenharmony_ci 83662306a36Sopenharmony_ci#define DC_WINBUF_CROPPED_POINT 0x806 83762306a36Sopenharmony_ci#define OFFSET_Y(x) (((x) & 0xffff) << 16) 83862306a36Sopenharmony_ci#define OFFSET_X(x) (((x) & 0xffff) << 0) 83962306a36Sopenharmony_ci 84062306a36Sopenharmony_ci#endif /* TEGRA_DC_H */ 841