1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 281dee67eSSudip Mukherjee #ifndef ACCEL_H__ 381dee67eSSudip Mukherjee #define ACCEL_H__ 481dee67eSSudip Mukherjee 581dee67eSSudip Mukherjee #define HW_ROP2_COPY 0xc 681dee67eSSudip Mukherjee #define HW_ROP2_XOR 0x6 781dee67eSSudip Mukherjee 881dee67eSSudip Mukherjee /* notes: below address are the offset value from de_base_address (0x100000)*/ 981dee67eSSudip Mukherjee 1081dee67eSSudip Mukherjee /* for sm718/750/502 de_base is at mmreg_1mb*/ 1181dee67eSSudip Mukherjee #define DE_BASE_ADDR_TYPE1 0x100000 1281dee67eSSudip Mukherjee /* for sm712,de_base is at mmreg_32kb */ 1381dee67eSSudip Mukherjee #define DE_BASE_ADDR_TYPE2 0x8000 1481dee67eSSudip Mukherjee /* for sm722,de_base is at mmreg_0 */ 1581dee67eSSudip Mukherjee #define DE_BASE_ADDR_TYPE3 0 1681dee67eSSudip Mukherjee 1781dee67eSSudip Mukherjee /* type1 data port address is at mmreg_0x110000*/ 1881dee67eSSudip Mukherjee #define DE_PORT_ADDR_TYPE1 0x110000 1981dee67eSSudip Mukherjee /* for sm712,data port address is at mmreg_0 */ 2081dee67eSSudip Mukherjee #define DE_PORT_ADDR_TYPE2 0x100000 2181dee67eSSudip Mukherjee /* for sm722,data port address is at mmreg_1mb */ 2281dee67eSSudip Mukherjee #define DE_PORT_ADDR_TYPE3 0x100000 2381dee67eSSudip Mukherjee 2481dee67eSSudip Mukherjee #define DE_SOURCE 0x0 25cf6d8f0bSMike Rapoport #define DE_SOURCE_WRAP BIT(31) 26cf6d8f0bSMike Rapoport #define DE_SOURCE_X_K1_SHIFT 16 27cf6d8f0bSMike Rapoport #define DE_SOURCE_X_K1_MASK (0x3fff << 16) 28cf6d8f0bSMike Rapoport #define DE_SOURCE_X_K1_MONO_MASK (0x1f << 16) 29cf6d8f0bSMike Rapoport #define DE_SOURCE_Y_K2_MASK 0xffff 3081dee67eSSudip Mukherjee 3181dee67eSSudip Mukherjee #define DE_DESTINATION 0x4 32aeaab186SMike Rapoport #define DE_DESTINATION_WRAP BIT(31) 33aeaab186SMike Rapoport #define DE_DESTINATION_X_SHIFT 16 34aeaab186SMike Rapoport #define DE_DESTINATION_X_MASK (0x1fff << 16) 35aeaab186SMike Rapoport #define DE_DESTINATION_Y_MASK 0xffff 3681dee67eSSudip Mukherjee 3781dee67eSSudip Mukherjee #define DE_DIMENSION 0x8 380fab34b5SMike Rapoport #define DE_DIMENSION_X_SHIFT 16 390fab34b5SMike Rapoport #define DE_DIMENSION_X_MASK (0x1fff << 16) 400fab34b5SMike Rapoport #define DE_DIMENSION_Y_ET_MASK 0x1fff 4181dee67eSSudip Mukherjee 4281dee67eSSudip Mukherjee #define DE_CONTROL 0xC 43e2e22587SMike Rapoport #define DE_CONTROL_STATUS BIT(31) 44e2e22587SMike Rapoport #define DE_CONTROL_PATTERN BIT(30) 45e2e22587SMike Rapoport #define DE_CONTROL_UPDATE_DESTINATION_X BIT(29) 46e2e22587SMike Rapoport #define DE_CONTROL_QUICK_START BIT(28) 47e2e22587SMike Rapoport #define DE_CONTROL_DIRECTION BIT(27) 48e2e22587SMike Rapoport #define DE_CONTROL_MAJOR BIT(26) 49e2e22587SMike Rapoport #define DE_CONTROL_STEP_X BIT(25) 50e2e22587SMike Rapoport #define DE_CONTROL_STEP_Y BIT(24) 51e2e22587SMike Rapoport #define DE_CONTROL_STRETCH BIT(23) 52e2e22587SMike Rapoport #define DE_CONTROL_HOST BIT(22) 53e2e22587SMike Rapoport #define DE_CONTROL_LAST_PIXEL BIT(21) 54e2e22587SMike Rapoport #define DE_CONTROL_COMMAND_SHIFT 16 55e2e22587SMike Rapoport #define DE_CONTROL_COMMAND_MASK (0x1f << 16) 56e2e22587SMike Rapoport #define DE_CONTROL_COMMAND_BITBLT (0x0 << 16) 57e2e22587SMike Rapoport #define DE_CONTROL_COMMAND_RECTANGLE_FILL (0x1 << 16) 58e2e22587SMike Rapoport #define DE_CONTROL_COMMAND_DE_TILE (0x2 << 16) 59e2e22587SMike Rapoport #define DE_CONTROL_COMMAND_TRAPEZOID_FILL (0x3 << 16) 60e2e22587SMike Rapoport #define DE_CONTROL_COMMAND_ALPHA_BLEND (0x4 << 16) 61e2e22587SMike Rapoport #define DE_CONTROL_COMMAND_RLE_STRIP (0x5 << 16) 62e2e22587SMike Rapoport #define DE_CONTROL_COMMAND_SHORT_STROKE (0x6 << 16) 63e2e22587SMike Rapoport #define DE_CONTROL_COMMAND_LINE_DRAW (0x7 << 16) 64e2e22587SMike Rapoport #define DE_CONTROL_COMMAND_HOST_WRITE (0x8 << 16) 65e2e22587SMike Rapoport #define DE_CONTROL_COMMAND_HOST_READ (0x9 << 16) 66e2e22587SMike Rapoport #define DE_CONTROL_COMMAND_HOST_WRITE_BOTTOM_UP (0xa << 16) 67e2e22587SMike Rapoport #define DE_CONTROL_COMMAND_ROTATE (0xb << 16) 68e2e22587SMike Rapoport #define DE_CONTROL_COMMAND_FONT (0xc << 16) 69e2e22587SMike Rapoport #define DE_CONTROL_COMMAND_TEXTURE_LOAD (0xe << 16) 70e2e22587SMike Rapoport #define DE_CONTROL_ROP_SELECT BIT(15) 71e2e22587SMike Rapoport #define DE_CONTROL_ROP2_SOURCE BIT(14) 72e2e22587SMike Rapoport #define DE_CONTROL_MONO_DATA_SHIFT 12 73e2e22587SMike Rapoport #define DE_CONTROL_MONO_DATA_MASK (0x3 << 12) 74e2e22587SMike Rapoport #define DE_CONTROL_MONO_DATA_NOT_PACKED (0x0 << 12) 75e2e22587SMike Rapoport #define DE_CONTROL_MONO_DATA_8_PACKED (0x1 << 12) 76e2e22587SMike Rapoport #define DE_CONTROL_MONO_DATA_16_PACKED (0x2 << 12) 77e2e22587SMike Rapoport #define DE_CONTROL_MONO_DATA_32_PACKED (0x3 << 12) 78e2e22587SMike Rapoport #define DE_CONTROL_REPEAT_ROTATE BIT(11) 79e2e22587SMike Rapoport #define DE_CONTROL_TRANSPARENCY_MATCH BIT(10) 80e2e22587SMike Rapoport #define DE_CONTROL_TRANSPARENCY_SELECT BIT(9) 81e2e22587SMike Rapoport #define DE_CONTROL_TRANSPARENCY BIT(8) 82e2e22587SMike Rapoport #define DE_CONTROL_ROP_MASK 0xff 8381dee67eSSudip Mukherjee 845ee35ea7SJuston Li /* Pseudo fields. */ 8581dee67eSSudip Mukherjee 860d5d733bSMike Rapoport #define DE_CONTROL_SHORT_STROKE_DIR_MASK (0xf << 24) 870d5d733bSMike Rapoport #define DE_CONTROL_SHORT_STROKE_DIR_225 (0x0 << 24) 880d5d733bSMike Rapoport #define DE_CONTROL_SHORT_STROKE_DIR_135 (0x1 << 24) 890d5d733bSMike Rapoport #define DE_CONTROL_SHORT_STROKE_DIR_315 (0x2 << 24) 900d5d733bSMike Rapoport #define DE_CONTROL_SHORT_STROKE_DIR_45 (0x3 << 24) 910d5d733bSMike Rapoport #define DE_CONTROL_SHORT_STROKE_DIR_270 (0x4 << 24) 920d5d733bSMike Rapoport #define DE_CONTROL_SHORT_STROKE_DIR_90 (0x5 << 24) 930d5d733bSMike Rapoport #define DE_CONTROL_SHORT_STROKE_DIR_180 (0x8 << 24) 940d5d733bSMike Rapoport #define DE_CONTROL_SHORT_STROKE_DIR_0 (0xa << 24) 950d5d733bSMike Rapoport #define DE_CONTROL_ROTATION_MASK (0x3 << 24) 960d5d733bSMike Rapoport #define DE_CONTROL_ROTATION_0 (0x0 << 24) 970d5d733bSMike Rapoport #define DE_CONTROL_ROTATION_270 (0x1 << 24) 980d5d733bSMike Rapoport #define DE_CONTROL_ROTATION_90 (0x2 << 24) 990d5d733bSMike Rapoport #define DE_CONTROL_ROTATION_180 (0x3 << 24) 10081dee67eSSudip Mukherjee 10181dee67eSSudip Mukherjee #define DE_PITCH 0x000010 1027124080fSMike Rapoport #define DE_PITCH_DESTINATION_SHIFT 16 1037124080fSMike Rapoport #define DE_PITCH_DESTINATION_MASK (0x1fff << 16) 1047124080fSMike Rapoport #define DE_PITCH_SOURCE_MASK 0x1fff 10581dee67eSSudip Mukherjee 10681dee67eSSudip Mukherjee #define DE_FOREGROUND 0x000014 1070d5d733bSMike Rapoport #define DE_FOREGROUND_COLOR_MASK 0xffffffff 10881dee67eSSudip Mukherjee 10981dee67eSSudip Mukherjee #define DE_BACKGROUND 0x000018 1100d5d733bSMike Rapoport #define DE_BACKGROUND_COLOR_MASK 0xffffffff 11181dee67eSSudip Mukherjee 11281dee67eSSudip Mukherjee #define DE_STRETCH_FORMAT 0x00001C 113f7a61fdeSMike Rapoport #define DE_STRETCH_FORMAT_PATTERN_XY BIT(30) 114f7a61fdeSMike Rapoport #define DE_STRETCH_FORMAT_PATTERN_Y_SHIFT 27 115f7a61fdeSMike Rapoport #define DE_STRETCH_FORMAT_PATTERN_Y_MASK (0x7 << 27) 116f7a61fdeSMike Rapoport #define DE_STRETCH_FORMAT_PATTERN_X_SHIFT 23 117f7a61fdeSMike Rapoport #define DE_STRETCH_FORMAT_PATTERN_X_MASK (0x7 << 23) 118f7a61fdeSMike Rapoport #define DE_STRETCH_FORMAT_PIXEL_FORMAT_SHIFT 20 119f7a61fdeSMike Rapoport #define DE_STRETCH_FORMAT_PIXEL_FORMAT_MASK (0x3 << 20) 120f7a61fdeSMike Rapoport #define DE_STRETCH_FORMAT_PIXEL_FORMAT_8 (0x0 << 20) 121f7a61fdeSMike Rapoport #define DE_STRETCH_FORMAT_PIXEL_FORMAT_16 (0x1 << 20) 122f7a61fdeSMike Rapoport #define DE_STRETCH_FORMAT_PIXEL_FORMAT_32 (0x2 << 20) 123f7a61fdeSMike Rapoport #define DE_STRETCH_FORMAT_PIXEL_FORMAT_24 (0x3 << 20) 124f7a61fdeSMike Rapoport #define DE_STRETCH_FORMAT_ADDRESSING_SHIFT 16 125f7a61fdeSMike Rapoport #define DE_STRETCH_FORMAT_ADDRESSING_MASK (0xf << 16) 126f7a61fdeSMike Rapoport #define DE_STRETCH_FORMAT_ADDRESSING_XY (0x0 << 16) 127f7a61fdeSMike Rapoport #define DE_STRETCH_FORMAT_ADDRESSING_LINEAR (0xf << 16) 128f7a61fdeSMike Rapoport #define DE_STRETCH_FORMAT_SOURCE_HEIGHT_MASK 0xfff 12981dee67eSSudip Mukherjee 13081dee67eSSudip Mukherjee #define DE_COLOR_COMPARE 0x000020 1310d5d733bSMike Rapoport #define DE_COLOR_COMPARE_COLOR_MASK 0xffffff 13281dee67eSSudip Mukherjee 13381dee67eSSudip Mukherjee #define DE_COLOR_COMPARE_MASK 0x000024 1340d5d733bSMike Rapoport #define DE_COLOR_COMPARE_MASK_MASK 0xffffff 13581dee67eSSudip Mukherjee 13681dee67eSSudip Mukherjee #define DE_MASKS 0x000028 1370d5d733bSMike Rapoport #define DE_MASKS_BYTE_MASK (0xffff << 16) 1380d5d733bSMike Rapoport #define DE_MASKS_BIT_MASK 0xffff 13981dee67eSSudip Mukherjee 14081dee67eSSudip Mukherjee #define DE_CLIP_TL 0x00002C 1410d5d733bSMike Rapoport #define DE_CLIP_TL_TOP_MASK (0xffff << 16) 14210dfcb06SMike Rapoport #define DE_CLIP_TL_STATUS BIT(13) 14310dfcb06SMike Rapoport #define DE_CLIP_TL_INHIBIT BIT(12) 1440d5d733bSMike Rapoport #define DE_CLIP_TL_LEFT_MASK 0xfff 14581dee67eSSudip Mukherjee 14681dee67eSSudip Mukherjee #define DE_CLIP_BR 0x000030 1470d5d733bSMike Rapoport #define DE_CLIP_BR_BOTTOM_MASK (0xffff << 16) 1480d5d733bSMike Rapoport #define DE_CLIP_BR_RIGHT_MASK 0x1fff 14981dee67eSSudip Mukherjee 15081dee67eSSudip Mukherjee #define DE_MONO_PATTERN_LOW 0x000034 1510d5d733bSMike Rapoport #define DE_MONO_PATTERN_LOW_PATTERN_MASK 0xffffffff 15281dee67eSSudip Mukherjee 15381dee67eSSudip Mukherjee #define DE_MONO_PATTERN_HIGH 0x000038 1540d5d733bSMike Rapoport #define DE_MONO_PATTERN_HIGH_PATTERN_MASK 0xffffffff 15581dee67eSSudip Mukherjee 15681dee67eSSudip Mukherjee #define DE_WINDOW_WIDTH 0x00003C 1578bac9c84SMike Rapoport #define DE_WINDOW_WIDTH_DST_SHIFT 16 1588bac9c84SMike Rapoport #define DE_WINDOW_WIDTH_DST_MASK (0x1fff << 16) 1598bac9c84SMike Rapoport #define DE_WINDOW_WIDTH_SRC_MASK 0x1fff 16081dee67eSSudip Mukherjee 16181dee67eSSudip Mukherjee #define DE_WINDOW_SOURCE_BASE 0x000040 16210dfcb06SMike Rapoport #define DE_WINDOW_SOURCE_BASE_EXT BIT(27) 16310dfcb06SMike Rapoport #define DE_WINDOW_SOURCE_BASE_CS BIT(26) 1640d5d733bSMike Rapoport #define DE_WINDOW_SOURCE_BASE_ADDRESS_MASK 0x3ffffff 16581dee67eSSudip Mukherjee 16681dee67eSSudip Mukherjee #define DE_WINDOW_DESTINATION_BASE 0x000044 16710dfcb06SMike Rapoport #define DE_WINDOW_DESTINATION_BASE_EXT BIT(27) 16810dfcb06SMike Rapoport #define DE_WINDOW_DESTINATION_BASE_CS BIT(26) 1690d5d733bSMike Rapoport #define DE_WINDOW_DESTINATION_BASE_ADDRESS_MASK 0x3ffffff 17081dee67eSSudip Mukherjee 17181dee67eSSudip Mukherjee #define DE_ALPHA 0x000048 1720d5d733bSMike Rapoport #define DE_ALPHA_VALUE_MASK 0xff 17381dee67eSSudip Mukherjee 17481dee67eSSudip Mukherjee #define DE_WRAP 0x00004C 1750d5d733bSMike Rapoport #define DE_WRAP_X_MASK (0xffff << 16) 1760d5d733bSMike Rapoport #define DE_WRAP_Y_MASK 0xffff 17781dee67eSSudip Mukherjee 17881dee67eSSudip Mukherjee #define DE_STATUS 0x000050 17910dfcb06SMike Rapoport #define DE_STATUS_CSC BIT(1) 18010dfcb06SMike Rapoport #define DE_STATUS_2D BIT(0) 18181dee67eSSudip Mukherjee 18281dee67eSSudip Mukherjee /* blt direction */ 18381dee67eSSudip Mukherjee #define TOP_TO_BOTTOM 0 18481dee67eSSudip Mukherjee #define LEFT_TO_RIGHT 0 18581dee67eSSudip Mukherjee #define BOTTOM_TO_TOP 1 18681dee67eSSudip Mukherjee #define RIGHT_TO_LEFT 1 18781dee67eSSudip Mukherjee 18852d0744dSArnd Bergmann void sm750_hw_set2dformat(struct lynx_accel *accel, int fmt); 18981dee67eSSudip Mukherjee 19052d0744dSArnd Bergmann void sm750_hw_de_init(struct lynx_accel *accel); 19181dee67eSSudip Mukherjee 19252d0744dSArnd Bergmann int sm750_hw_fillrect(struct lynx_accel *accel, 19381dee67eSSudip Mukherjee u32 base, u32 pitch, u32 Bpp, 19481dee67eSSudip Mukherjee u32 x, u32 y, u32 width, u32 height, 19581dee67eSSudip Mukherjee u32 color, u32 rop); 19681dee67eSSudip Mukherjee 19713c2059fSGabriela Bittencourt /** 19813c2059fSGabriela Bittencourt * sm750_hm_copyarea 19913c2059fSGabriela Bittencourt * @sBase: Address of source: offset in frame buffer 20013c2059fSGabriela Bittencourt * @sPitch: Pitch value of source surface in BYTE 20113c2059fSGabriela Bittencourt * @sx: Starting x coordinate of source surface 20213c2059fSGabriela Bittencourt * @sy: Starting y coordinate of source surface 20313c2059fSGabriela Bittencourt * @dBase: Address of destination: offset in frame buffer 20413c2059fSGabriela Bittencourt * @dPitch: Pitch value of destination surface in BYTE 20513c2059fSGabriela Bittencourt * @Bpp: Color depth of destination surface 20613c2059fSGabriela Bittencourt * @dx: Starting x coordinate of destination surface 20713c2059fSGabriela Bittencourt * @dy: Starting y coordinate of destination surface 20813c2059fSGabriela Bittencourt * @width: width of rectangle in pixel value 20913c2059fSGabriela Bittencourt * @height: height of rectangle in pixel value 21013c2059fSGabriela Bittencourt * @rop2: ROP value 21113c2059fSGabriela Bittencourt */ 21213c2059fSGabriela Bittencourt int sm750_hw_copyarea(struct lynx_accel *accel, 21313c2059fSGabriela Bittencourt unsigned int sBase, unsigned int sPitch, 21413c2059fSGabriela Bittencourt unsigned int sx, unsigned int sy, 21513c2059fSGabriela Bittencourt unsigned int dBase, unsigned int dPitch, 21613c2059fSGabriela Bittencourt unsigned int Bpp, unsigned int dx, unsigned int dy, 21713c2059fSGabriela Bittencourt unsigned int width, unsigned int height, 21881dee67eSSudip Mukherjee unsigned int rop2); 21981dee67eSSudip Mukherjee 22013c2059fSGabriela Bittencourt /** 22113c2059fSGabriela Bittencourt * sm750_hw_imageblit 22213c2059fSGabriela Bittencourt * @pSrcbuf: pointer to start of source buffer in system memory 22313c2059fSGabriela Bittencourt * @srcDelta: Pitch value (in bytes) of the source buffer, +ive means top down 22413c2059fSGabriela Bittencourt *>----- and -ive mean button up 22513c2059fSGabriela Bittencourt * @startBit: Mono data can start at any bit in a byte, this value should be 22613c2059fSGabriela Bittencourt *>----- 0 to 7 22713c2059fSGabriela Bittencourt * @dBase: Address of destination: offset in frame buffer 22813c2059fSGabriela Bittencourt * @dPitch: Pitch value of destination surface in BYTE 22913c2059fSGabriela Bittencourt * @bytePerPixel: Color depth of destination surface 23013c2059fSGabriela Bittencourt * @dx: Starting x coordinate of destination surface 23113c2059fSGabriela Bittencourt * @dy: Starting y coordinate of destination surface 23213c2059fSGabriela Bittencourt * @width: width of rectangle in pixel value 23313c2059fSGabriela Bittencourt * @height: height of rectangle in pixel value 23413c2059fSGabriela Bittencourt * @fColor: Foreground color (corresponding to a 1 in the monochrome data 23513c2059fSGabriela Bittencourt * @bColor: Background color (corresponding to a 0 in the monochrome data 23613c2059fSGabriela Bittencourt * @rop2: ROP value 23713c2059fSGabriela Bittencourt */ 23813c2059fSGabriela Bittencourt int sm750_hw_imageblit(struct lynx_accel *accel, const char *pSrcbuf, 23913c2059fSGabriela Bittencourt u32 srcDelta, u32 startBit, u32 dBase, u32 dPitch, 24013c2059fSGabriela Bittencourt u32 bytePerPixel, u32 dx, u32 dy, u32 width, 24113c2059fSGabriela Bittencourt u32 height, u32 fColor, u32 bColor, u32 rop2); 24213c2059fSGabriela Bittencourt 24381dee67eSSudip Mukherjee #endif 244