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