1170525Syongari/* SPDX-License-Identifier: GPL-2.0-or-later */ 2170525Syongari/* Hisilicon Hibmc SoC drm driver 3170525Syongari * 4170525Syongari * Based on the bochs drm driver. 5170525Syongari * 6170525Syongari * Copyright (c) 2016 Huawei Limited. 7170525Syongari * 8170525Syongari * Author: 9170525Syongari * Rongrong Zou <zourongrong@huawei.com> 10170525Syongari * Rongrong Zou <zourongrong@gmail.com> 11170525Syongari * Jianhua Li <lijianhua@huawei.com> 12170525Syongari */ 13170525Syongari 14170525Syongari#ifndef HIBMC_DRM_HW_H 15170525Syongari#define HIBMC_DRM_HW_H 16170525Syongari 17170525Syongari/* register definition */ 18170525Syongari#define HIBMC_MISC_CTRL 0x4 19170525Syongari 20170525Syongari#define HIBMC_MSCCTL_LOCALMEM_RESET(x) ((x) << 6) 21170525Syongari#define HIBMC_MSCCTL_LOCALMEM_RESET_MASK 0x40 22170525Syongari 23170525Syongari#define HIBMC_CURRENT_GATE 0x000040 24170525Syongari#define HIBMC_CURR_GATE_DISPLAY(x) ((x) << 2) 25170525Syongari#define HIBMC_CURR_GATE_DISPLAY_MASK 0x4 26170525Syongari 27170525Syongari#define HIBMC_CURR_GATE_LOCALMEM(x) ((x) << 1) 28170525Syongari#define HIBMC_CURR_GATE_LOCALMEM_MASK 0x2 29170525Syongari 30170525Syongari#define HIBMC_MODE0_GATE 0x000044 31170525Syongari#define HIBMC_MODE1_GATE 0x000048 32170525Syongari#define HIBMC_POWER_MODE_CTRL 0x00004C 33170525Syongari 34170525Syongari#define HIBMC_PW_MODE_CTL_OSC_INPUT(x) ((x) << 3) 35170525Syongari#define HIBMC_PW_MODE_CTL_OSC_INPUT_MASK 0x8 36170525Syongari 37170525Syongari#define HIBMC_PW_MODE_CTL_MODE(x) ((x) << 0) 38170525Syongari#define HIBMC_PW_MODE_CTL_MODE_MASK 0x03 39170525Syongari#define HIBMC_PW_MODE_CTL_MODE_SHIFT 0 40170525Syongari 41170525Syongari#define HIBMC_PW_MODE_CTL_MODE_MODE0 0 42170525Syongari#define HIBMC_PW_MODE_CTL_MODE_MODE1 1 43170525Syongari#define HIBMC_PW_MODE_CTL_MODE_SLEEP 2 44170525Syongari 45170525Syongari#define HIBMC_PANEL_PLL_CTRL 0x00005C 46170525Syongari#define HIBMC_CRT_PLL_CTRL 0x000060 47170525Syongari 48170525Syongari#define HIBMC_PLL_CTRL_BYPASS(x) ((x) << 18) 49170525Syongari#define HIBMC_PLL_CTRL_BYPASS_MASK 0x40000 50170525Syongari 51170525Syongari#define HIBMC_PLL_CTRL_POWER(x) ((x) << 17) 52170525Syongari#define HIBMC_PLL_CTRL_POWER_MASK 0x20000 53170525Syongari 54170525Syongari#define HIBMC_PLL_CTRL_INPUT(x) ((x) << 16) 55170525Syongari#define HIBMC_PLL_CTRL_INPUT_MASK 0x10000 56170525Syongari 57170525Syongari#define HIBMC_PLL_CTRL_POD(x) ((x) << 14) 58170525Syongari#define HIBMC_PLL_CTRL_POD_MASK 0xC000 59170525Syongari 60170525Syongari#define HIBMC_PLL_CTRL_OD(x) ((x) << 12) 61170525Syongari#define HIBMC_PLL_CTRL_OD_MASK 0x3000 62170525Syongari 63170525Syongari#define HIBMC_PLL_CTRL_N(x) ((x) << 8) 64170525Syongari#define HIBMC_PLL_CTRL_N_MASK 0xF00 65170525Syongari 66170525Syongari#define HIBMC_PLL_CTRL_M(x) ((x) << 0) 67170525Syongari#define HIBMC_PLL_CTRL_M_MASK 0xFF 68170525Syongari 69170525Syongari#define HIBMC_CRT_DISP_CTL 0x80200 70170525Syongari 71170525Syongari#define HIBMC_CRT_DISP_CTL_DPMS(x) ((x) << 30) 72170525Syongari#define HIBMC_CRT_DISP_CTL_DPMS_MASK 0xc0000000 73170525Syongari 74170525Syongari#define HIBMC_CRT_DPMS_ON 0 75170525Syongari#define HIBMC_CRT_DPMS_OFF 3 76170525Syongari 77170525Syongari#define HIBMC_CRT_DISP_CTL_CRTSELECT(x) ((x) << 25) 78170525Syongari#define HIBMC_CRT_DISP_CTL_CRTSELECT_MASK 0x2000000 79170525Syongari 80170525Syongari#define HIBMC_CRTSELECT_CRT 1 81170525Syongari 82170525Syongari#define HIBMC_CRT_DISP_CTL_CLOCK_PHASE(x) ((x) << 14) 83170525Syongari#define HIBMC_CRT_DISP_CTL_CLOCK_PHASE_MASK 0x4000 84170525Syongari 85170525Syongari#define HIBMC_CRT_DISP_CTL_VSYNC_PHASE(x) ((x) << 13) 86170525Syongari#define HIBMC_CRT_DISP_CTL_VSYNC_PHASE_MASK 0x2000 87170525Syongari 88170525Syongari#define HIBMC_CRT_DISP_CTL_HSYNC_PHASE(x) ((x) << 12) 89170525Syongari#define HIBMC_CRT_DISP_CTL_HSYNC_PHASE_MASK 0x1000 90170525Syongari 91170525Syongari#define HIBMC_CRT_DISP_CTL_TIMING(x) ((x) << 8) 92227908Smarius#define HIBMC_CRT_DISP_CTL_TIMING_MASK 0x100 93170525Syongari 94170525Syongari#define HIBMC_CTL_DISP_CTL_GAMMA(x) ((x) << 3) 95170525Syongari#define HIBMC_CTL_DISP_CTL_GAMMA_MASK 0x08 96170525Syongari 97170525Syongari#define HIBMC_CRT_DISP_CTL_PLANE(x) ((x) << 2) 98170525Syongari#define HIBMC_CRT_DISP_CTL_PLANE_MASK 4 99170525Syongari 100221407Smarius#define HIBMC_CRT_DISP_CTL_FORMAT(x) ((x) << 0) 101170525Syongari#define HIBMC_CRT_DISP_CTL_FORMAT_MASK 0x03 102170525Syongari 103170525Syongari#define HIBMC_CRT_FB_ADDRESS 0x080204 104170525Syongari 105170525Syongari#define HIBMC_CRT_FB_WIDTH 0x080208 106170525Syongari#define HIBMC_CRT_FB_WIDTH_WIDTH(x) ((x) << 16) 107170525Syongari#define HIBMC_CRT_FB_WIDTH_WIDTH_MASK 0x3FFF0000 108170525Syongari#define HIBMC_CRT_FB_WIDTH_OFFS(x) ((x) << 0) 109170525Syongari#define HIBMC_CRT_FB_WIDTH_OFFS_MASK 0x3FFF 110221407Smarius 111221407Smarius#define HIBMC_CRT_HORZ_TOTAL 0x08020C 112221407Smarius#define HIBMC_CRT_HORZ_TOTAL_TOTAL(x) ((x) << 16) 113221407Smarius#define HIBMC_CRT_HORZ_TOTAL_TOTAL_MASK 0xFFF0000 114337755Smarkj 115170525Syongari#define HIBMC_CRT_HORZ_TOTAL_DISP_END(x) ((x) << 0) 116170525Syongari#define HIBMC_CRT_HORZ_TOTAL_DISP_END_MASK 0xFFF 117170525Syongari 118221407Smarius#define HIBMC_CRT_HORZ_SYNC 0x080210 119221407Smarius#define HIBMC_CRT_HORZ_SYNC_WIDTH(x) ((x) << 16) 120221407Smarius#define HIBMC_CRT_HORZ_SYNC_WIDTH_MASK 0xFF0000 121221407Smarius 122221407Smarius#define HIBMC_CRT_HORZ_SYNC_START(x) ((x) << 0) 123221407Smarius#define HIBMC_CRT_HORZ_SYNC_START_MASK 0xFFF 124170525Syongari 125170525Syongari#define HIBMC_CRT_VERT_TOTAL 0x080214 126170525Syongari#define HIBMC_CRT_VERT_TOTAL_TOTAL(x) ((x) << 16) 127170525Syongari#define HIBMC_CRT_VERT_TOTAL_TOTAL_MASK 0x7FFF0000 128170525Syongari 129170525Syongari#define HIBMC_CRT_VERT_TOTAL_DISP_END(x) ((x) << 0) 130170525Syongari#define HIBMC_CRT_VERT_TOTAL_DISP_END_MASK 0x7FF 131170525Syongari 132170525Syongari#define HIBMC_CRT_VERT_SYNC 0x080218 133170525Syongari#define HIBMC_CRT_VERT_SYNC_HEIGHT(x) ((x) << 16) 134170525Syongari#define HIBMC_CRT_VERT_SYNC_HEIGHT_MASK 0x3F0000 135221407Smarius 136221407Smarius#define HIBMC_CRT_VERT_SYNC_START(x) ((x) << 0) 137170525Syongari#define HIBMC_CRT_VERT_SYNC_START_MASK 0x7FF 138170525Syongari 139170525Syongari/* Auto Centering */ 140170525Syongari#define HIBMC_CRT_AUTO_CENTERING_TL 0x080280 141170525Syongari#define HIBMC_CRT_AUTO_CENTERING_TL_TOP(x) ((x) << 16) 142170525Syongari#define HIBMC_CRT_AUTO_CENTERING_TL_TOP_MASK 0x7FF0000 143170525Syongari 144170525Syongari#define HIBMC_CRT_AUTO_CENTERING_TL_LEFT(x) ((x) << 0) 145170525Syongari#define HIBMC_CRT_AUTO_CENTERING_TL_LEFT_MASK 0x7FF 146170525Syongari 147170525Syongari#define HIBMC_CRT_AUTO_CENTERING_BR 0x080284 148170525Syongari#define HIBMC_CRT_AUTO_CENTERING_BR_BOTTOM(x) ((x) << 16) 149170525Syongari#define HIBMC_CRT_AUTO_CENTERING_BR_BOTTOM_MASK 0x7FF0000 150170525Syongari 151170525Syongari#define HIBMC_CRT_AUTO_CENTERING_BR_RIGHT(x) ((x) << 0) 152170525Syongari#define HIBMC_CRT_AUTO_CENTERING_BR_RIGHT_MASK 0x7FF 153170525Syongari 154170525Syongari/* register to control panel output */ 155170525Syongari#define HIBMC_DISPLAY_CONTROL_HISILE 0x80288 156170525Syongari#define HIBMC_DISPLAY_CONTROL_FPVDDEN(x) ((x) << 0) 157170525Syongari#define HIBMC_DISPLAY_CONTROL_PANELDATE(x) ((x) << 1) 158170525Syongari#define HIBMC_DISPLAY_CONTROL_FPEN(x) ((x) << 2) 159221407Smarius#define HIBMC_DISPLAY_CONTROL_VBIASEN(x) ((x) << 3) 160170525Syongari 161170525Syongari#define HIBMC_RAW_INTERRUPT 0x80290 162170525Syongari#define HIBMC_RAW_INTERRUPT_VBLANK(x) ((x) << 2) 163170525Syongari#define HIBMC_RAW_INTERRUPT_VBLANK_MASK 0x4 164170525Syongari 165170525Syongari#define HIBMC_RAW_INTERRUPT_EN 0x80298 166170525Syongari#define HIBMC_RAW_INTERRUPT_EN_VBLANK(x) ((x) << 2) 167170525Syongari#define HIBMC_RAW_INTERRUPT_EN_VBLANK_MASK 0x4 168170525Syongari 169170525Syongari/* register and values for PLL control */ 170170525Syongari#define CRT_PLL1_HS 0x802a8 171170525Syongari#define CRT_PLL1_HS_OUTER_BYPASS(x) ((x) << 30) 172170525Syongari#define CRT_PLL1_HS_INTER_BYPASS(x) ((x) << 29) 173170525Syongari#define CRT_PLL1_HS_POWERON(x) ((x) << 24) 174170525Syongari 175170525Syongari#define CRT_PLL1_HS_25MHZ 0x23d40f02 176170525Syongari#define CRT_PLL1_HS_40MHZ 0x23940801 177170525Syongari#define CRT_PLL1_HS_65MHZ 0x23940d01 178170525Syongari#define CRT_PLL1_HS_78MHZ 0x23540F82 179170525Syongari#define CRT_PLL1_HS_74MHZ 0x23941dc2 180170525Syongari#define CRT_PLL1_HS_80MHZ 0x23941001 181170525Syongari#define CRT_PLL1_HS_80MHZ_1152 0x23540fc2 182170525Syongari#define CRT_PLL1_HS_106MHZ 0x237C1641 183170525Syongari#define CRT_PLL1_HS_108MHZ 0x23b41b01 184170525Syongari#define CRT_PLL1_HS_162MHZ 0x23480681 185170525Syongari#define CRT_PLL1_HS_148MHZ 0x23541dc2 186170525Syongari#define CRT_PLL1_HS_193MHZ 0x234807c1 187170525Syongari 188170525Syongari#define CRT_PLL2_HS 0x802ac 189170525Syongari#define CRT_PLL2_HS_25MHZ 0x206B851E 190170525Syongari#define CRT_PLL2_HS_40MHZ 0x30000000 191170525Syongari#define CRT_PLL2_HS_65MHZ 0x40000000 192170525Syongari#define CRT_PLL2_HS_78MHZ 0x50E147AE 193170525Syongari#define CRT_PLL2_HS_74MHZ 0x602B6AE7 194170525Syongari#define CRT_PLL2_HS_80MHZ 0x70000000 195170525Syongari#define CRT_PLL2_HS_106MHZ 0x0075c28f 196170525Syongari#define CRT_PLL2_HS_108MHZ 0x80000000 197170525Syongari#define CRT_PLL2_HS_162MHZ 0xA0000000 198170525Syongari#define CRT_PLL2_HS_148MHZ 0xB0CCCCCD 199170525Syongari#define CRT_PLL2_HS_193MHZ 0xC0872B02 200170525Syongari 201170525Syongari#define HIBMC_CRT_PALETTE 0x80C00 202170525Syongari 203170525Syongari#define HIBMC_FIELD(field, value) (field(value) & field##_MASK) 204170525Syongari#endif 205170525Syongari