msm a6xx new hardware support
-----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJbdh8EAAoJEAx081l5xIa+DUYP/1M5JEJRH59bgmvzW2gVfVPU JCK300umHiGDiPmuGY/mHITw9deZ9Kgrgk6YmrjqeR3W2P/9nbxwhL6PLYKPI/j2 qgdzKhJ+5BHjHgEbzl2w1Vq5T70djoqrlxkJHedG+NgypNsDkNxFQIW5qfD5CQ8R a+FhK0LetnhBzuGUTqMzCcewErC+omQtgilxbEmkHyv5l2qkkerNRLRZmNUlkH3m N+hhsBjWSFHG9TpBngObbY97MKJlx1CeGO8Q+wnLAgJZ/bqkpN3pG/5UTr41FjYq hsOKo7Drs8uTokjJyL5hVPZa8fQLrTWM+u+ieEm6ag2Sx7hbD+cqzcwkWVgUKjL9 7ONyxrFZvyO7dqninC8hEvvlakYo7k9CrHFKt69bdZ6Z0IYWebEvkKZpK3tOFU3N pln3xTtEjOoMjA/vmEphlvksJV6XeJMJmdzbUYKDOR3VWONmNqlrJJ0wBmSTCAMY 5KrHsepvQ1Qu5giXjNdyc31lWorHOdIfyRnK2EZ2217jHUzFfQQ6YU1DZYNh2AJY 0cVlAVggWV9KsWpSwDWsk6wq2tWv701u8LxncjeyxH+8eW8FF9oyTA85nreykyze LDIGiLQF4CpZaBilXmxyWzl71ZDvfBs9OhZIWHL1Obq4hbRQW02JQNv0UTqgfC4i ZMJbHvBmCXV+bhEbKZrx =vyiz -----END PGP SIGNATURE----- Merge tag 'drm-next-2018-08-17-1' of git://anongit.freedesktop.org/drm/drm Pull drm msm support for adreno a6xx from Dave Airlie: "This is the support for new Qualcomm Snapdragon SoCs with the A6xx core. Userspace support is in mesa now" * tag 'drm-next-2018-08-17-1' of git://anongit.freedesktop.org/drm/drm: drm/msm: a6xx: fix spelling mistake: "initalization" -> "initialization" drm/msm: Add A6XX device support drm/msm: update generated headers drm/msm/adreno: Load the firmware before bringing up the hardware drm/msm: Add a helper function to parse clock names
This commit is contained in:
commit
022ff62c3d
|
@ -11,6 +11,9 @@ msm-y := \
|
|||
adreno/a5xx_gpu.o \
|
||||
adreno/a5xx_power.o \
|
||||
adreno/a5xx_preempt.o \
|
||||
adreno/a6xx_gpu.o \
|
||||
adreno/a6xx_gmu.o \
|
||||
adreno/a6xx_hfi.o \
|
||||
hdmi/hdmi.o \
|
||||
hdmi/hdmi_audio.o \
|
||||
hdmi/hdmi_bridge.o \
|
||||
|
|
|
@ -8,17 +8,19 @@ http://github.com/freedreno/envytools/
|
|||
git clone https://github.com/freedreno/envytools.git
|
||||
|
||||
The rules-ng-ng source files this header was generated from are:
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno.xml ( 431 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1572 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 37162 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 13324 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 31866 bytes, from 2017-06-06 18:26:14)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 83840 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 111898 bytes, from 2017-06-06 18:23:59)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a5xx.xml ( 139480 bytes, from 2017-06-16 12:44:39)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/ocmem.xml ( 1773 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/envytools/rnndb/adreno.xml ( 501 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/freedreno_copyright.xml ( 1572 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a2xx.xml ( 36805 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/adreno_common.xml ( 13634 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/adreno_pm4.xml ( 42393 bytes, from 2018-08-06 18:45:45)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a3xx.xml ( 83840 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a4xx.xml ( 112086 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a5xx.xml ( 147240 bytes, from 2018-08-06 18:45:45)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a6xx.xml ( 101627 bytes, from 2018-08-06 18:45:45)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a6xx_gmu.xml ( 10431 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/ocmem.xml ( 1773 bytes, from 2018-07-03 19:37:13)
|
||||
|
||||
Copyright (C) 2013-2017 by the following authors:
|
||||
Copyright (C) 2013-2018 by the following authors:
|
||||
- Rob Clark <robdclark@gmail.com> (robclark)
|
||||
- Ilia Mirkin <imirkin@alum.mit.edu> (imirkin)
|
||||
|
||||
|
@ -84,13 +86,12 @@ enum a2xx_sq_surfaceformat {
|
|||
FMT_5_5_5_1 = 13,
|
||||
FMT_8_8_8_8_A = 14,
|
||||
FMT_4_4_4_4 = 15,
|
||||
FMT_10_11_11 = 16,
|
||||
FMT_11_11_10 = 17,
|
||||
FMT_8_8_8 = 16,
|
||||
FMT_DXT1 = 18,
|
||||
FMT_DXT2_3 = 19,
|
||||
FMT_DXT4_5 = 20,
|
||||
FMT_10_10_10_2 = 21,
|
||||
FMT_24_8 = 22,
|
||||
FMT_24_8_FLOAT = 23,
|
||||
FMT_16 = 24,
|
||||
FMT_16_16 = 25,
|
||||
FMT_16_16_16_16 = 26,
|
||||
|
@ -106,29 +107,23 @@ enum a2xx_sq_surfaceformat {
|
|||
FMT_32_FLOAT = 36,
|
||||
FMT_32_32_FLOAT = 37,
|
||||
FMT_32_32_32_32_FLOAT = 38,
|
||||
FMT_32_AS_8 = 39,
|
||||
FMT_32_AS_8_8 = 40,
|
||||
FMT_16_MPEG = 41,
|
||||
FMT_16_16_MPEG = 42,
|
||||
FMT_8_INTERLACED = 43,
|
||||
FMT_32_AS_8_INTERLACED = 44,
|
||||
FMT_32_AS_8_8_INTERLACED = 45,
|
||||
FMT_16_INTERLACED = 46,
|
||||
FMT_16_MPEG_INTERLACED = 47,
|
||||
FMT_16_16_MPEG_INTERLACED = 48,
|
||||
FMT_ATI_TC_RGB = 39,
|
||||
FMT_ATI_TC_RGBA = 40,
|
||||
FMT_ATI_TC_555_565_RGB = 41,
|
||||
FMT_ATI_TC_555_565_RGBA = 42,
|
||||
FMT_ATI_TC_RGBA_INTERP = 43,
|
||||
FMT_ATI_TC_555_565_RGBA_INTERP = 44,
|
||||
FMT_ETC1_RGBA_INTERP = 46,
|
||||
FMT_ETC1_RGB = 47,
|
||||
FMT_ETC1_RGBA = 48,
|
||||
FMT_DXN = 49,
|
||||
FMT_8_8_8_8_AS_16_16_16_16 = 50,
|
||||
FMT_DXT1_AS_16_16_16_16 = 51,
|
||||
FMT_DXT2_3_AS_16_16_16_16 = 52,
|
||||
FMT_DXT4_5_AS_16_16_16_16 = 53,
|
||||
FMT_2_3_3 = 51,
|
||||
FMT_2_10_10_10_AS_16_16_16_16 = 54,
|
||||
FMT_10_11_11_AS_16_16_16_16 = 55,
|
||||
FMT_11_11_10_AS_16_16_16_16 = 56,
|
||||
FMT_10_10_10_2_AS_16_16_16_16 = 55,
|
||||
FMT_32_32_32_FLOAT = 57,
|
||||
FMT_DXT3A = 58,
|
||||
FMT_DXT5A = 59,
|
||||
FMT_CTX1 = 60,
|
||||
FMT_DXT3A_AS_1_1_1_1 = 61,
|
||||
};
|
||||
|
||||
enum a2xx_sq_ps_vtx_mode {
|
||||
|
|
|
@ -8,17 +8,19 @@ http://github.com/freedreno/envytools/
|
|||
git clone https://github.com/freedreno/envytools.git
|
||||
|
||||
The rules-ng-ng source files this header was generated from are:
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno.xml ( 431 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1572 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 37162 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 13324 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 31866 bytes, from 2017-06-06 18:26:14)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 83840 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 111898 bytes, from 2017-06-06 18:23:59)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a5xx.xml ( 139480 bytes, from 2017-06-16 12:44:39)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/ocmem.xml ( 1773 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/envytools/rnndb/adreno.xml ( 501 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/freedreno_copyright.xml ( 1572 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a2xx.xml ( 36805 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/adreno_common.xml ( 13634 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/adreno_pm4.xml ( 42393 bytes, from 2018-08-06 18:45:45)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a3xx.xml ( 83840 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a4xx.xml ( 112086 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a5xx.xml ( 147240 bytes, from 2018-08-06 18:45:45)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a6xx.xml ( 101627 bytes, from 2018-08-06 18:45:45)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a6xx_gmu.xml ( 10431 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/ocmem.xml ( 1773 bytes, from 2018-07-03 19:37:13)
|
||||
|
||||
Copyright (C) 2013-2017 by the following authors:
|
||||
Copyright (C) 2013-2018 by the following authors:
|
||||
- Rob Clark <robdclark@gmail.com> (robclark)
|
||||
- Ilia Mirkin <imirkin@alum.mit.edu> (imirkin)
|
||||
|
||||
|
|
|
@ -8,17 +8,19 @@ http://github.com/freedreno/envytools/
|
|||
git clone https://github.com/freedreno/envytools.git
|
||||
|
||||
The rules-ng-ng source files this header was generated from are:
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno.xml ( 431 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1572 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 37162 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 13324 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 31866 bytes, from 2017-06-06 18:26:14)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 83840 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 111898 bytes, from 2017-06-06 18:23:59)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a5xx.xml ( 139480 bytes, from 2017-06-16 12:44:39)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/ocmem.xml ( 1773 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/envytools/rnndb/adreno.xml ( 501 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/freedreno_copyright.xml ( 1572 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a2xx.xml ( 36805 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/adreno_common.xml ( 13634 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/adreno_pm4.xml ( 42393 bytes, from 2018-08-06 18:45:45)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a3xx.xml ( 83840 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a4xx.xml ( 112086 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a5xx.xml ( 147240 bytes, from 2018-08-06 18:45:45)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a6xx.xml ( 101627 bytes, from 2018-08-06 18:45:45)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a6xx_gmu.xml ( 10431 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/ocmem.xml ( 1773 bytes, from 2018-07-03 19:37:13)
|
||||
|
||||
Copyright (C) 2013-2017 by the following authors:
|
||||
Copyright (C) 2013-2018 by the following authors:
|
||||
- Rob Clark <robdclark@gmail.com> (robclark)
|
||||
- Ilia Mirkin <imirkin@alum.mit.edu> (imirkin)
|
||||
|
||||
|
@ -263,12 +265,6 @@ enum a4xx_depth_format {
|
|||
DEPTH4_32 = 3,
|
||||
};
|
||||
|
||||
enum a4xx_tess_spacing {
|
||||
EQUAL_SPACING = 0,
|
||||
ODD_SPACING = 2,
|
||||
EVEN_SPACING = 3,
|
||||
};
|
||||
|
||||
enum a4xx_ccu_perfcounter_select {
|
||||
CCU_BUSY_CYCLES = 0,
|
||||
CCU_RB_DEPTH_RETURN_STALL = 2,
|
||||
|
@ -3544,12 +3540,13 @@ static inline uint32_t A4XX_HLSQ_VS_CONTROL_REG_CONSTLENGTH(uint32_t val)
|
|||
{
|
||||
return ((val) << A4XX_HLSQ_VS_CONTROL_REG_CONSTLENGTH__SHIFT) & A4XX_HLSQ_VS_CONTROL_REG_CONSTLENGTH__MASK;
|
||||
}
|
||||
#define A4XX_HLSQ_VS_CONTROL_REG_CONSTOBJECTOFFSET__MASK 0x0000ff00
|
||||
#define A4XX_HLSQ_VS_CONTROL_REG_CONSTOBJECTOFFSET__MASK 0x00007f00
|
||||
#define A4XX_HLSQ_VS_CONTROL_REG_CONSTOBJECTOFFSET__SHIFT 8
|
||||
static inline uint32_t A4XX_HLSQ_VS_CONTROL_REG_CONSTOBJECTOFFSET(uint32_t val)
|
||||
{
|
||||
return ((val) << A4XX_HLSQ_VS_CONTROL_REG_CONSTOBJECTOFFSET__SHIFT) & A4XX_HLSQ_VS_CONTROL_REG_CONSTOBJECTOFFSET__MASK;
|
||||
}
|
||||
#define A4XX_HLSQ_VS_CONTROL_REG_SSBO_ENABLE 0x00008000
|
||||
#define A4XX_HLSQ_VS_CONTROL_REG_ENABLED 0x00010000
|
||||
#define A4XX_HLSQ_VS_CONTROL_REG_SHADEROBJOFFSET__MASK 0x00fe0000
|
||||
#define A4XX_HLSQ_VS_CONTROL_REG_SHADEROBJOFFSET__SHIFT 17
|
||||
|
@ -3571,12 +3568,13 @@ static inline uint32_t A4XX_HLSQ_FS_CONTROL_REG_CONSTLENGTH(uint32_t val)
|
|||
{
|
||||
return ((val) << A4XX_HLSQ_FS_CONTROL_REG_CONSTLENGTH__SHIFT) & A4XX_HLSQ_FS_CONTROL_REG_CONSTLENGTH__MASK;
|
||||
}
|
||||
#define A4XX_HLSQ_FS_CONTROL_REG_CONSTOBJECTOFFSET__MASK 0x0000ff00
|
||||
#define A4XX_HLSQ_FS_CONTROL_REG_CONSTOBJECTOFFSET__MASK 0x00007f00
|
||||
#define A4XX_HLSQ_FS_CONTROL_REG_CONSTOBJECTOFFSET__SHIFT 8
|
||||
static inline uint32_t A4XX_HLSQ_FS_CONTROL_REG_CONSTOBJECTOFFSET(uint32_t val)
|
||||
{
|
||||
return ((val) << A4XX_HLSQ_FS_CONTROL_REG_CONSTOBJECTOFFSET__SHIFT) & A4XX_HLSQ_FS_CONTROL_REG_CONSTOBJECTOFFSET__MASK;
|
||||
}
|
||||
#define A4XX_HLSQ_FS_CONTROL_REG_SSBO_ENABLE 0x00008000
|
||||
#define A4XX_HLSQ_FS_CONTROL_REG_ENABLED 0x00010000
|
||||
#define A4XX_HLSQ_FS_CONTROL_REG_SHADEROBJOFFSET__MASK 0x00fe0000
|
||||
#define A4XX_HLSQ_FS_CONTROL_REG_SHADEROBJOFFSET__SHIFT 17
|
||||
|
@ -3598,12 +3596,13 @@ static inline uint32_t A4XX_HLSQ_HS_CONTROL_REG_CONSTLENGTH(uint32_t val)
|
|||
{
|
||||
return ((val) << A4XX_HLSQ_HS_CONTROL_REG_CONSTLENGTH__SHIFT) & A4XX_HLSQ_HS_CONTROL_REG_CONSTLENGTH__MASK;
|
||||
}
|
||||
#define A4XX_HLSQ_HS_CONTROL_REG_CONSTOBJECTOFFSET__MASK 0x0000ff00
|
||||
#define A4XX_HLSQ_HS_CONTROL_REG_CONSTOBJECTOFFSET__MASK 0x00007f00
|
||||
#define A4XX_HLSQ_HS_CONTROL_REG_CONSTOBJECTOFFSET__SHIFT 8
|
||||
static inline uint32_t A4XX_HLSQ_HS_CONTROL_REG_CONSTOBJECTOFFSET(uint32_t val)
|
||||
{
|
||||
return ((val) << A4XX_HLSQ_HS_CONTROL_REG_CONSTOBJECTOFFSET__SHIFT) & A4XX_HLSQ_HS_CONTROL_REG_CONSTOBJECTOFFSET__MASK;
|
||||
}
|
||||
#define A4XX_HLSQ_HS_CONTROL_REG_SSBO_ENABLE 0x00008000
|
||||
#define A4XX_HLSQ_HS_CONTROL_REG_ENABLED 0x00010000
|
||||
#define A4XX_HLSQ_HS_CONTROL_REG_SHADEROBJOFFSET__MASK 0x00fe0000
|
||||
#define A4XX_HLSQ_HS_CONTROL_REG_SHADEROBJOFFSET__SHIFT 17
|
||||
|
@ -3625,12 +3624,13 @@ static inline uint32_t A4XX_HLSQ_DS_CONTROL_REG_CONSTLENGTH(uint32_t val)
|
|||
{
|
||||
return ((val) << A4XX_HLSQ_DS_CONTROL_REG_CONSTLENGTH__SHIFT) & A4XX_HLSQ_DS_CONTROL_REG_CONSTLENGTH__MASK;
|
||||
}
|
||||
#define A4XX_HLSQ_DS_CONTROL_REG_CONSTOBJECTOFFSET__MASK 0x0000ff00
|
||||
#define A4XX_HLSQ_DS_CONTROL_REG_CONSTOBJECTOFFSET__MASK 0x00007f00
|
||||
#define A4XX_HLSQ_DS_CONTROL_REG_CONSTOBJECTOFFSET__SHIFT 8
|
||||
static inline uint32_t A4XX_HLSQ_DS_CONTROL_REG_CONSTOBJECTOFFSET(uint32_t val)
|
||||
{
|
||||
return ((val) << A4XX_HLSQ_DS_CONTROL_REG_CONSTOBJECTOFFSET__SHIFT) & A4XX_HLSQ_DS_CONTROL_REG_CONSTOBJECTOFFSET__MASK;
|
||||
}
|
||||
#define A4XX_HLSQ_DS_CONTROL_REG_SSBO_ENABLE 0x00008000
|
||||
#define A4XX_HLSQ_DS_CONTROL_REG_ENABLED 0x00010000
|
||||
#define A4XX_HLSQ_DS_CONTROL_REG_SHADEROBJOFFSET__MASK 0x00fe0000
|
||||
#define A4XX_HLSQ_DS_CONTROL_REG_SHADEROBJOFFSET__SHIFT 17
|
||||
|
@ -3652,12 +3652,13 @@ static inline uint32_t A4XX_HLSQ_GS_CONTROL_REG_CONSTLENGTH(uint32_t val)
|
|||
{
|
||||
return ((val) << A4XX_HLSQ_GS_CONTROL_REG_CONSTLENGTH__SHIFT) & A4XX_HLSQ_GS_CONTROL_REG_CONSTLENGTH__MASK;
|
||||
}
|
||||
#define A4XX_HLSQ_GS_CONTROL_REG_CONSTOBJECTOFFSET__MASK 0x0000ff00
|
||||
#define A4XX_HLSQ_GS_CONTROL_REG_CONSTOBJECTOFFSET__MASK 0x00007f00
|
||||
#define A4XX_HLSQ_GS_CONTROL_REG_CONSTOBJECTOFFSET__SHIFT 8
|
||||
static inline uint32_t A4XX_HLSQ_GS_CONTROL_REG_CONSTOBJECTOFFSET(uint32_t val)
|
||||
{
|
||||
return ((val) << A4XX_HLSQ_GS_CONTROL_REG_CONSTOBJECTOFFSET__SHIFT) & A4XX_HLSQ_GS_CONTROL_REG_CONSTOBJECTOFFSET__MASK;
|
||||
}
|
||||
#define A4XX_HLSQ_GS_CONTROL_REG_SSBO_ENABLE 0x00008000
|
||||
#define A4XX_HLSQ_GS_CONTROL_REG_ENABLED 0x00010000
|
||||
#define A4XX_HLSQ_GS_CONTROL_REG_SHADEROBJOFFSET__MASK 0x00fe0000
|
||||
#define A4XX_HLSQ_GS_CONTROL_REG_SHADEROBJOFFSET__SHIFT 17
|
||||
|
@ -3672,23 +3673,103 @@ static inline uint32_t A4XX_HLSQ_GS_CONTROL_REG_INSTRLENGTH(uint32_t val)
|
|||
return ((val) << A4XX_HLSQ_GS_CONTROL_REG_INSTRLENGTH__SHIFT) & A4XX_HLSQ_GS_CONTROL_REG_INSTRLENGTH__MASK;
|
||||
}
|
||||
|
||||
#define REG_A4XX_HLSQ_CS_CONTROL 0x000023ca
|
||||
#define REG_A4XX_HLSQ_CS_CONTROL_REG 0x000023ca
|
||||
#define A4XX_HLSQ_CS_CONTROL_REG_CONSTLENGTH__MASK 0x000000ff
|
||||
#define A4XX_HLSQ_CS_CONTROL_REG_CONSTLENGTH__SHIFT 0
|
||||
static inline uint32_t A4XX_HLSQ_CS_CONTROL_REG_CONSTLENGTH(uint32_t val)
|
||||
{
|
||||
return ((val) << A4XX_HLSQ_CS_CONTROL_REG_CONSTLENGTH__SHIFT) & A4XX_HLSQ_CS_CONTROL_REG_CONSTLENGTH__MASK;
|
||||
}
|
||||
#define A4XX_HLSQ_CS_CONTROL_REG_CONSTOBJECTOFFSET__MASK 0x00007f00
|
||||
#define A4XX_HLSQ_CS_CONTROL_REG_CONSTOBJECTOFFSET__SHIFT 8
|
||||
static inline uint32_t A4XX_HLSQ_CS_CONTROL_REG_CONSTOBJECTOFFSET(uint32_t val)
|
||||
{
|
||||
return ((val) << A4XX_HLSQ_CS_CONTROL_REG_CONSTOBJECTOFFSET__SHIFT) & A4XX_HLSQ_CS_CONTROL_REG_CONSTOBJECTOFFSET__MASK;
|
||||
}
|
||||
#define A4XX_HLSQ_CS_CONTROL_REG_SSBO_ENABLE 0x00008000
|
||||
#define A4XX_HLSQ_CS_CONTROL_REG_ENABLED 0x00010000
|
||||
#define A4XX_HLSQ_CS_CONTROL_REG_SHADEROBJOFFSET__MASK 0x00fe0000
|
||||
#define A4XX_HLSQ_CS_CONTROL_REG_SHADEROBJOFFSET__SHIFT 17
|
||||
static inline uint32_t A4XX_HLSQ_CS_CONTROL_REG_SHADEROBJOFFSET(uint32_t val)
|
||||
{
|
||||
return ((val) << A4XX_HLSQ_CS_CONTROL_REG_SHADEROBJOFFSET__SHIFT) & A4XX_HLSQ_CS_CONTROL_REG_SHADEROBJOFFSET__MASK;
|
||||
}
|
||||
#define A4XX_HLSQ_CS_CONTROL_REG_INSTRLENGTH__MASK 0xff000000
|
||||
#define A4XX_HLSQ_CS_CONTROL_REG_INSTRLENGTH__SHIFT 24
|
||||
static inline uint32_t A4XX_HLSQ_CS_CONTROL_REG_INSTRLENGTH(uint32_t val)
|
||||
{
|
||||
return ((val) << A4XX_HLSQ_CS_CONTROL_REG_INSTRLENGTH__SHIFT) & A4XX_HLSQ_CS_CONTROL_REG_INSTRLENGTH__MASK;
|
||||
}
|
||||
|
||||
#define REG_A4XX_HLSQ_CL_NDRANGE_0 0x000023cd
|
||||
#define A4XX_HLSQ_CL_NDRANGE_0_KERNELDIM__MASK 0x00000003
|
||||
#define A4XX_HLSQ_CL_NDRANGE_0_KERNELDIM__SHIFT 0
|
||||
static inline uint32_t A4XX_HLSQ_CL_NDRANGE_0_KERNELDIM(uint32_t val)
|
||||
{
|
||||
return ((val) << A4XX_HLSQ_CL_NDRANGE_0_KERNELDIM__SHIFT) & A4XX_HLSQ_CL_NDRANGE_0_KERNELDIM__MASK;
|
||||
}
|
||||
#define A4XX_HLSQ_CL_NDRANGE_0_LOCALSIZEX__MASK 0x00000ffc
|
||||
#define A4XX_HLSQ_CL_NDRANGE_0_LOCALSIZEX__SHIFT 2
|
||||
static inline uint32_t A4XX_HLSQ_CL_NDRANGE_0_LOCALSIZEX(uint32_t val)
|
||||
{
|
||||
return ((val) << A4XX_HLSQ_CL_NDRANGE_0_LOCALSIZEX__SHIFT) & A4XX_HLSQ_CL_NDRANGE_0_LOCALSIZEX__MASK;
|
||||
}
|
||||
#define A4XX_HLSQ_CL_NDRANGE_0_LOCALSIZEY__MASK 0x003ff000
|
||||
#define A4XX_HLSQ_CL_NDRANGE_0_LOCALSIZEY__SHIFT 12
|
||||
static inline uint32_t A4XX_HLSQ_CL_NDRANGE_0_LOCALSIZEY(uint32_t val)
|
||||
{
|
||||
return ((val) << A4XX_HLSQ_CL_NDRANGE_0_LOCALSIZEY__SHIFT) & A4XX_HLSQ_CL_NDRANGE_0_LOCALSIZEY__MASK;
|
||||
}
|
||||
#define A4XX_HLSQ_CL_NDRANGE_0_LOCALSIZEZ__MASK 0xffc00000
|
||||
#define A4XX_HLSQ_CL_NDRANGE_0_LOCALSIZEZ__SHIFT 22
|
||||
static inline uint32_t A4XX_HLSQ_CL_NDRANGE_0_LOCALSIZEZ(uint32_t val)
|
||||
{
|
||||
return ((val) << A4XX_HLSQ_CL_NDRANGE_0_LOCALSIZEZ__SHIFT) & A4XX_HLSQ_CL_NDRANGE_0_LOCALSIZEZ__MASK;
|
||||
}
|
||||
|
||||
#define REG_A4XX_HLSQ_CL_NDRANGE_1 0x000023ce
|
||||
#define A4XX_HLSQ_CL_NDRANGE_1_SIZE_X__MASK 0xffffffff
|
||||
#define A4XX_HLSQ_CL_NDRANGE_1_SIZE_X__SHIFT 0
|
||||
static inline uint32_t A4XX_HLSQ_CL_NDRANGE_1_SIZE_X(uint32_t val)
|
||||
{
|
||||
return ((val) << A4XX_HLSQ_CL_NDRANGE_1_SIZE_X__SHIFT) & A4XX_HLSQ_CL_NDRANGE_1_SIZE_X__MASK;
|
||||
}
|
||||
|
||||
#define REG_A4XX_HLSQ_CL_NDRANGE_2 0x000023cf
|
||||
|
||||
#define REG_A4XX_HLSQ_CL_NDRANGE_3 0x000023d0
|
||||
#define A4XX_HLSQ_CL_NDRANGE_3_SIZE_Y__MASK 0xffffffff
|
||||
#define A4XX_HLSQ_CL_NDRANGE_3_SIZE_Y__SHIFT 0
|
||||
static inline uint32_t A4XX_HLSQ_CL_NDRANGE_3_SIZE_Y(uint32_t val)
|
||||
{
|
||||
return ((val) << A4XX_HLSQ_CL_NDRANGE_3_SIZE_Y__SHIFT) & A4XX_HLSQ_CL_NDRANGE_3_SIZE_Y__MASK;
|
||||
}
|
||||
|
||||
#define REG_A4XX_HLSQ_CL_NDRANGE_4 0x000023d1
|
||||
|
||||
#define REG_A4XX_HLSQ_CL_NDRANGE_5 0x000023d2
|
||||
#define A4XX_HLSQ_CL_NDRANGE_5_SIZE_Z__MASK 0xffffffff
|
||||
#define A4XX_HLSQ_CL_NDRANGE_5_SIZE_Z__SHIFT 0
|
||||
static inline uint32_t A4XX_HLSQ_CL_NDRANGE_5_SIZE_Z(uint32_t val)
|
||||
{
|
||||
return ((val) << A4XX_HLSQ_CL_NDRANGE_5_SIZE_Z__SHIFT) & A4XX_HLSQ_CL_NDRANGE_5_SIZE_Z__MASK;
|
||||
}
|
||||
|
||||
#define REG_A4XX_HLSQ_CL_NDRANGE_6 0x000023d3
|
||||
|
||||
#define REG_A4XX_HLSQ_CL_CONTROL_0 0x000023d4
|
||||
#define A4XX_HLSQ_CL_CONTROL_0_WGIDCONSTID__MASK 0x000000ff
|
||||
#define A4XX_HLSQ_CL_CONTROL_0_WGIDCONSTID__SHIFT 0
|
||||
static inline uint32_t A4XX_HLSQ_CL_CONTROL_0_WGIDCONSTID(uint32_t val)
|
||||
{
|
||||
return ((val) << A4XX_HLSQ_CL_CONTROL_0_WGIDCONSTID__SHIFT) & A4XX_HLSQ_CL_CONTROL_0_WGIDCONSTID__MASK;
|
||||
}
|
||||
#define A4XX_HLSQ_CL_CONTROL_0_LOCALIDREGID__MASK 0xff000000
|
||||
#define A4XX_HLSQ_CL_CONTROL_0_LOCALIDREGID__SHIFT 24
|
||||
static inline uint32_t A4XX_HLSQ_CL_CONTROL_0_LOCALIDREGID(uint32_t val)
|
||||
{
|
||||
return ((val) << A4XX_HLSQ_CL_CONTROL_0_LOCALIDREGID__SHIFT) & A4XX_HLSQ_CL_CONTROL_0_LOCALIDREGID__MASK;
|
||||
}
|
||||
|
||||
#define REG_A4XX_HLSQ_CL_CONTROL_1 0x000023d5
|
||||
|
||||
|
@ -4087,5 +4168,71 @@ static inline uint32_t A4XX_TEX_CONST_4_BASE(uint32_t val)
|
|||
|
||||
#define REG_A4XX_TEX_CONST_7 0x00000007
|
||||
|
||||
#define REG_A4XX_SSBO_0_0 0x00000000
|
||||
#define A4XX_SSBO_0_0_BASE__MASK 0xffffffe0
|
||||
#define A4XX_SSBO_0_0_BASE__SHIFT 5
|
||||
static inline uint32_t A4XX_SSBO_0_0_BASE(uint32_t val)
|
||||
{
|
||||
return ((val >> 5) << A4XX_SSBO_0_0_BASE__SHIFT) & A4XX_SSBO_0_0_BASE__MASK;
|
||||
}
|
||||
|
||||
#define REG_A4XX_SSBO_0_1 0x00000001
|
||||
#define A4XX_SSBO_0_1_PITCH__MASK 0x003fffff
|
||||
#define A4XX_SSBO_0_1_PITCH__SHIFT 0
|
||||
static inline uint32_t A4XX_SSBO_0_1_PITCH(uint32_t val)
|
||||
{
|
||||
return ((val) << A4XX_SSBO_0_1_PITCH__SHIFT) & A4XX_SSBO_0_1_PITCH__MASK;
|
||||
}
|
||||
|
||||
#define REG_A4XX_SSBO_0_2 0x00000002
|
||||
#define A4XX_SSBO_0_2_ARRAY_PITCH__MASK 0x03fff000
|
||||
#define A4XX_SSBO_0_2_ARRAY_PITCH__SHIFT 12
|
||||
static inline uint32_t A4XX_SSBO_0_2_ARRAY_PITCH(uint32_t val)
|
||||
{
|
||||
return ((val >> 12) << A4XX_SSBO_0_2_ARRAY_PITCH__SHIFT) & A4XX_SSBO_0_2_ARRAY_PITCH__MASK;
|
||||
}
|
||||
|
||||
#define REG_A4XX_SSBO_0_3 0x00000003
|
||||
#define A4XX_SSBO_0_3_CPP__MASK 0x0000003f
|
||||
#define A4XX_SSBO_0_3_CPP__SHIFT 0
|
||||
static inline uint32_t A4XX_SSBO_0_3_CPP(uint32_t val)
|
||||
{
|
||||
return ((val) << A4XX_SSBO_0_3_CPP__SHIFT) & A4XX_SSBO_0_3_CPP__MASK;
|
||||
}
|
||||
|
||||
#define REG_A4XX_SSBO_1_0 0x00000000
|
||||
#define A4XX_SSBO_1_0_CPP__MASK 0x0000001f
|
||||
#define A4XX_SSBO_1_0_CPP__SHIFT 0
|
||||
static inline uint32_t A4XX_SSBO_1_0_CPP(uint32_t val)
|
||||
{
|
||||
return ((val) << A4XX_SSBO_1_0_CPP__SHIFT) & A4XX_SSBO_1_0_CPP__MASK;
|
||||
}
|
||||
#define A4XX_SSBO_1_0_FMT__MASK 0x0000ff00
|
||||
#define A4XX_SSBO_1_0_FMT__SHIFT 8
|
||||
static inline uint32_t A4XX_SSBO_1_0_FMT(enum a4xx_color_fmt val)
|
||||
{
|
||||
return ((val) << A4XX_SSBO_1_0_FMT__SHIFT) & A4XX_SSBO_1_0_FMT__MASK;
|
||||
}
|
||||
#define A4XX_SSBO_1_0_WIDTH__MASK 0xffff0000
|
||||
#define A4XX_SSBO_1_0_WIDTH__SHIFT 16
|
||||
static inline uint32_t A4XX_SSBO_1_0_WIDTH(uint32_t val)
|
||||
{
|
||||
return ((val) << A4XX_SSBO_1_0_WIDTH__SHIFT) & A4XX_SSBO_1_0_WIDTH__MASK;
|
||||
}
|
||||
|
||||
#define REG_A4XX_SSBO_1_1 0x00000001
|
||||
#define A4XX_SSBO_1_1_HEIGHT__MASK 0x0000ffff
|
||||
#define A4XX_SSBO_1_1_HEIGHT__SHIFT 0
|
||||
static inline uint32_t A4XX_SSBO_1_1_HEIGHT(uint32_t val)
|
||||
{
|
||||
return ((val) << A4XX_SSBO_1_1_HEIGHT__SHIFT) & A4XX_SSBO_1_1_HEIGHT__MASK;
|
||||
}
|
||||
#define A4XX_SSBO_1_1_DEPTH__MASK 0xffff0000
|
||||
#define A4XX_SSBO_1_1_DEPTH__SHIFT 16
|
||||
static inline uint32_t A4XX_SSBO_1_1_DEPTH(uint32_t val)
|
||||
{
|
||||
return ((val) << A4XX_SSBO_1_1_DEPTH__SHIFT) & A4XX_SSBO_1_1_DEPTH__MASK;
|
||||
}
|
||||
|
||||
|
||||
#endif /* A4XX_XML */
|
||||
|
|
|
@ -8,17 +8,19 @@ http://github.com/freedreno/envytools/
|
|||
git clone https://github.com/freedreno/envytools.git
|
||||
|
||||
The rules-ng-ng source files this header was generated from are:
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno.xml ( 431 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1572 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 37162 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 13324 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 31866 bytes, from 2017-06-06 18:26:14)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 83840 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 111898 bytes, from 2017-06-06 18:23:59)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a5xx.xml ( 139480 bytes, from 2017-06-16 12:44:39)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/ocmem.xml ( 1773 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/envytools/rnndb/adreno.xml ( 501 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/freedreno_copyright.xml ( 1572 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a2xx.xml ( 36805 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/adreno_common.xml ( 13634 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/adreno_pm4.xml ( 42393 bytes, from 2018-08-06 18:45:45)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a3xx.xml ( 83840 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a4xx.xml ( 112086 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a5xx.xml ( 147240 bytes, from 2018-08-06 18:45:45)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a6xx.xml ( 101627 bytes, from 2018-08-06 18:45:45)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a6xx_gmu.xml ( 10431 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/ocmem.xml ( 1773 bytes, from 2018-07-03 19:37:13)
|
||||
|
||||
Copyright (C) 2013-2017 by the following authors:
|
||||
Copyright (C) 2013-2018 by the following authors:
|
||||
- Rob Clark <robdclark@gmail.com> (robclark)
|
||||
- Ilia Mirkin <imirkin@alum.mit.edu> (imirkin)
|
||||
|
||||
|
@ -119,6 +121,11 @@ enum a5xx_vtx_fmt {
|
|||
VFMT5_8_8_8_8_SNORM = 50,
|
||||
VFMT5_8_8_8_8_UINT = 51,
|
||||
VFMT5_8_8_8_8_SINT = 52,
|
||||
VFMT5_10_10_10_2_UNORM = 54,
|
||||
VFMT5_10_10_10_2_SNORM = 57,
|
||||
VFMT5_10_10_10_2_UINT = 58,
|
||||
VFMT5_10_10_10_2_SINT = 59,
|
||||
VFMT5_11_11_10_FLOAT = 66,
|
||||
VFMT5_16_16_UNORM = 67,
|
||||
VFMT5_16_16_SNORM = 68,
|
||||
VFMT5_16_16_FLOAT = 69,
|
||||
|
@ -204,14 +211,45 @@ enum a5xx_tex_fmt {
|
|||
TFMT5_32_32_FLOAT = 103,
|
||||
TFMT5_32_32_UINT = 104,
|
||||
TFMT5_32_32_SINT = 105,
|
||||
TFMT5_32_32_32_UINT = 114,
|
||||
TFMT5_32_32_32_SINT = 115,
|
||||
TFMT5_32_32_32_FLOAT = 116,
|
||||
TFMT5_32_32_32_32_FLOAT = 130,
|
||||
TFMT5_32_32_32_32_UINT = 131,
|
||||
TFMT5_32_32_32_32_SINT = 132,
|
||||
TFMT5_X8Z24_UNORM = 160,
|
||||
TFMT5_ETC2_RG11_UNORM = 171,
|
||||
TFMT5_ETC2_RG11_SNORM = 172,
|
||||
TFMT5_ETC2_R11_UNORM = 173,
|
||||
TFMT5_ETC2_R11_SNORM = 174,
|
||||
TFMT5_ETC1 = 175,
|
||||
TFMT5_ETC2_RGB8 = 176,
|
||||
TFMT5_ETC2_RGBA8 = 177,
|
||||
TFMT5_ETC2_RGB8A1 = 178,
|
||||
TFMT5_DXT1 = 179,
|
||||
TFMT5_DXT3 = 180,
|
||||
TFMT5_DXT5 = 181,
|
||||
TFMT5_RGTC1_UNORM = 183,
|
||||
TFMT5_RGTC1_SNORM = 184,
|
||||
TFMT5_RGTC2_UNORM = 187,
|
||||
TFMT5_RGTC2_SNORM = 188,
|
||||
TFMT5_BPTC_UFLOAT = 190,
|
||||
TFMT5_BPTC_FLOAT = 191,
|
||||
TFMT5_BPTC = 192,
|
||||
TFMT5_ASTC_4x4 = 193,
|
||||
TFMT5_ASTC_5x4 = 194,
|
||||
TFMT5_ASTC_5x5 = 195,
|
||||
TFMT5_ASTC_6x5 = 196,
|
||||
TFMT5_ASTC_6x6 = 197,
|
||||
TFMT5_ASTC_8x5 = 198,
|
||||
TFMT5_ASTC_8x6 = 199,
|
||||
TFMT5_ASTC_8x8 = 200,
|
||||
TFMT5_ASTC_10x5 = 201,
|
||||
TFMT5_ASTC_10x6 = 202,
|
||||
TFMT5_ASTC_10x8 = 203,
|
||||
TFMT5_ASTC_10x10 = 204,
|
||||
TFMT5_ASTC_12x10 = 205,
|
||||
TFMT5_ASTC_12x12 = 206,
|
||||
};
|
||||
|
||||
enum a5xx_tex_fetchsize {
|
||||
|
@ -239,7 +277,7 @@ enum a5xx_blit_buf {
|
|||
BLIT_MRT6 = 6,
|
||||
BLIT_MRT7 = 7,
|
||||
BLIT_ZS = 8,
|
||||
BLIT_Z32 = 9,
|
||||
BLIT_S = 9,
|
||||
};
|
||||
|
||||
enum a5xx_cp_perfcounter_select {
|
||||
|
@ -899,6 +937,12 @@ enum a5xx_tex_type {
|
|||
|
||||
#define REG_A5XX_CP_DRAW_STATE_DATA 0x0000080c
|
||||
|
||||
#define REG_A5XX_CP_ME_NRT_ADDR_LO 0x0000080d
|
||||
|
||||
#define REG_A5XX_CP_ME_NRT_ADDR_HI 0x0000080e
|
||||
|
||||
#define REG_A5XX_CP_ME_NRT_DATA 0x00000810
|
||||
|
||||
#define REG_A5XX_CP_CRASH_SCRIPT_BASE_LO 0x00000817
|
||||
|
||||
#define REG_A5XX_CP_CRASH_SCRIPT_BASE_HI 0x00000818
|
||||
|
@ -2072,9 +2116,17 @@ static inline uint32_t A5XX_VSC_RESOLVE_CNTL_Y(uint32_t val)
|
|||
|
||||
#define REG_A5XX_PC_MODE_CNTL 0x00000d02
|
||||
|
||||
#define REG_A5XX_UNKNOWN_0D08 0x00000d08
|
||||
#define REG_A5XX_PC_INDEX_BUF_LO 0x00000d04
|
||||
|
||||
#define REG_A5XX_UNKNOWN_0D09 0x00000d09
|
||||
#define REG_A5XX_PC_INDEX_BUF_HI 0x00000d05
|
||||
|
||||
#define REG_A5XX_PC_START_INDEX 0x00000d06
|
||||
|
||||
#define REG_A5XX_PC_MAX_INDEX 0x00000d07
|
||||
|
||||
#define REG_A5XX_PC_TESSFACTOR_ADDR_LO 0x00000d08
|
||||
|
||||
#define REG_A5XX_PC_TESSFACTOR_ADDR_HI 0x00000d09
|
||||
|
||||
#define REG_A5XX_PC_PERFCTR_PC_SEL_0 0x00000d10
|
||||
|
||||
|
@ -2327,6 +2379,14 @@ static inline uint32_t A5XX_VSC_RESOLVE_CNTL_Y(uint32_t val)
|
|||
|
||||
#define REG_A5XX_VBIF_PERF_CNT_EN3 0x000030c3
|
||||
|
||||
#define REG_A5XX_VBIF_PERF_CNT_CLR0 0x000030c8
|
||||
|
||||
#define REG_A5XX_VBIF_PERF_CNT_CLR1 0x000030c9
|
||||
|
||||
#define REG_A5XX_VBIF_PERF_CNT_CLR2 0x000030ca
|
||||
|
||||
#define REG_A5XX_VBIF_PERF_CNT_CLR3 0x000030cb
|
||||
|
||||
#define REG_A5XX_VBIF_PERF_CNT_SEL0 0x000030d0
|
||||
|
||||
#define REG_A5XX_VBIF_PERF_CNT_SEL1 0x000030d1
|
||||
|
@ -2590,6 +2650,7 @@ static inline uint32_t A5XX_VSC_RESOLVE_CNTL_Y(uint32_t val)
|
|||
#define REG_A5XX_GPU_CS_AMP_CALIBRATION_CONTROL1 0x0000c557
|
||||
|
||||
#define REG_A5XX_GRAS_CL_CNTL 0x0000e000
|
||||
#define A5XX_GRAS_CL_CNTL_ZERO_GB_SCALE_Z 0x00000040
|
||||
|
||||
#define REG_A5XX_UNKNOWN_E001 0x0000e001
|
||||
|
||||
|
@ -2700,7 +2761,7 @@ static inline uint32_t A5XX_GRAS_SU_POINT_SIZE(float val)
|
|||
return ((((int32_t)(val * 16.0))) << A5XX_GRAS_SU_POINT_SIZE__SHIFT) & A5XX_GRAS_SU_POINT_SIZE__MASK;
|
||||
}
|
||||
|
||||
#define REG_A5XX_UNKNOWN_E093 0x0000e093
|
||||
#define REG_A5XX_GRAS_SU_LAYERED 0x0000e093
|
||||
|
||||
#define REG_A5XX_GRAS_SU_DEPTH_PLANE_CNTL 0x0000e094
|
||||
#define A5XX_GRAS_SU_DEPTH_PLANE_CNTL_FRAG_WRITES_Z 0x00000001
|
||||
|
@ -2936,7 +2997,9 @@ static inline uint32_t A5XX_RB_DEST_MSAA_CNTL_SAMPLES(enum a3xx_msaa_samples val
|
|||
#define A5XX_RB_RENDER_CONTROL0_WCOORD 0x00000200
|
||||
|
||||
#define REG_A5XX_RB_RENDER_CONTROL1 0x0000e145
|
||||
#define A5XX_RB_RENDER_CONTROL1_SAMPLEMASK 0x00000001
|
||||
#define A5XX_RB_RENDER_CONTROL1_FACENESS 0x00000002
|
||||
#define A5XX_RB_RENDER_CONTROL1_SAMPLEID 0x00000004
|
||||
|
||||
#define REG_A5XX_RB_FS_OUTPUT_CNTL 0x0000e146
|
||||
#define A5XX_RB_FS_OUTPUT_CNTL_MRT__MASK 0x0000000f
|
||||
|
@ -3002,6 +3065,13 @@ static inline uint32_t REG_A5XX_RB_MRT(uint32_t i0) { return 0x0000e150 + 0x7*i0
|
|||
static inline uint32_t REG_A5XX_RB_MRT_CONTROL(uint32_t i0) { return 0x0000e150 + 0x7*i0; }
|
||||
#define A5XX_RB_MRT_CONTROL_BLEND 0x00000001
|
||||
#define A5XX_RB_MRT_CONTROL_BLEND2 0x00000002
|
||||
#define A5XX_RB_MRT_CONTROL_ROP_ENABLE 0x00000004
|
||||
#define A5XX_RB_MRT_CONTROL_ROP_CODE__MASK 0x00000078
|
||||
#define A5XX_RB_MRT_CONTROL_ROP_CODE__SHIFT 3
|
||||
static inline uint32_t A5XX_RB_MRT_CONTROL_ROP_CODE(enum a3xx_rop_code val)
|
||||
{
|
||||
return ((val) << A5XX_RB_MRT_CONTROL_ROP_CODE__SHIFT) & A5XX_RB_MRT_CONTROL_ROP_CODE__MASK;
|
||||
}
|
||||
#define A5XX_RB_MRT_CONTROL_COMPONENT_ENABLE__MASK 0x00000780
|
||||
#define A5XX_RB_MRT_CONTROL_COMPONENT_ENABLE__SHIFT 7
|
||||
static inline uint32_t A5XX_RB_MRT_CONTROL_COMPONENT_ENABLE(uint32_t val)
|
||||
|
@ -3060,6 +3130,12 @@ static inline uint32_t A5XX_RB_MRT_BUF_INFO_COLOR_TILE_MODE(enum a5xx_tile_mode
|
|||
{
|
||||
return ((val) << A5XX_RB_MRT_BUF_INFO_COLOR_TILE_MODE__SHIFT) & A5XX_RB_MRT_BUF_INFO_COLOR_TILE_MODE__MASK;
|
||||
}
|
||||
#define A5XX_RB_MRT_BUF_INFO_DITHER_MODE__MASK 0x00001800
|
||||
#define A5XX_RB_MRT_BUF_INFO_DITHER_MODE__SHIFT 11
|
||||
static inline uint32_t A5XX_RB_MRT_BUF_INFO_DITHER_MODE(enum adreno_rb_dither_mode val)
|
||||
{
|
||||
return ((val) << A5XX_RB_MRT_BUF_INFO_DITHER_MODE__SHIFT) & A5XX_RB_MRT_BUF_INFO_DITHER_MODE__MASK;
|
||||
}
|
||||
#define A5XX_RB_MRT_BUF_INFO_COLOR_SWAP__MASK 0x00006000
|
||||
#define A5XX_RB_MRT_BUF_INFO_COLOR_SWAP__SHIFT 13
|
||||
static inline uint32_t A5XX_RB_MRT_BUF_INFO_COLOR_SWAP(enum a3xx_color_swap val)
|
||||
|
@ -3223,6 +3299,7 @@ static inline uint32_t A5XX_RB_BLEND_CNTL_ENABLE_BLEND(uint32_t val)
|
|||
return ((val) << A5XX_RB_BLEND_CNTL_ENABLE_BLEND__SHIFT) & A5XX_RB_BLEND_CNTL_ENABLE_BLEND__MASK;
|
||||
}
|
||||
#define A5XX_RB_BLEND_CNTL_INDEPENDENT_BLEND 0x00000100
|
||||
#define A5XX_RB_BLEND_CNTL_ALPHA_TO_COVERAGE 0x00000400
|
||||
#define A5XX_RB_BLEND_CNTL_SAMPLE_MASK__MASK 0xffff0000
|
||||
#define A5XX_RB_BLEND_CNTL_SAMPLE_MASK__SHIFT 16
|
||||
static inline uint32_t A5XX_RB_BLEND_CNTL_SAMPLE_MASK(uint32_t val)
|
||||
|
@ -3369,7 +3446,25 @@ static inline uint32_t A5XX_RB_STENCILREFMASK_STENCILWRITEMASK(uint32_t val)
|
|||
return ((val) << A5XX_RB_STENCILREFMASK_STENCILWRITEMASK__SHIFT) & A5XX_RB_STENCILREFMASK_STENCILWRITEMASK__MASK;
|
||||
}
|
||||
|
||||
#define REG_A5XX_UNKNOWN_E1C7 0x0000e1c7
|
||||
#define REG_A5XX_RB_STENCILREFMASK_BF 0x0000e1c7
|
||||
#define A5XX_RB_STENCILREFMASK_BF_STENCILREF__MASK 0x000000ff
|
||||
#define A5XX_RB_STENCILREFMASK_BF_STENCILREF__SHIFT 0
|
||||
static inline uint32_t A5XX_RB_STENCILREFMASK_BF_STENCILREF(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_RB_STENCILREFMASK_BF_STENCILREF__SHIFT) & A5XX_RB_STENCILREFMASK_BF_STENCILREF__MASK;
|
||||
}
|
||||
#define A5XX_RB_STENCILREFMASK_BF_STENCILMASK__MASK 0x0000ff00
|
||||
#define A5XX_RB_STENCILREFMASK_BF_STENCILMASK__SHIFT 8
|
||||
static inline uint32_t A5XX_RB_STENCILREFMASK_BF_STENCILMASK(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_RB_STENCILREFMASK_BF_STENCILMASK__SHIFT) & A5XX_RB_STENCILREFMASK_BF_STENCILMASK__MASK;
|
||||
}
|
||||
#define A5XX_RB_STENCILREFMASK_BF_STENCILWRITEMASK__MASK 0x00ff0000
|
||||
#define A5XX_RB_STENCILREFMASK_BF_STENCILWRITEMASK__SHIFT 16
|
||||
static inline uint32_t A5XX_RB_STENCILREFMASK_BF_STENCILWRITEMASK(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_RB_STENCILREFMASK_BF_STENCILWRITEMASK__SHIFT) & A5XX_RB_STENCILREFMASK_BF_STENCILWRITEMASK__MASK;
|
||||
}
|
||||
|
||||
#define REG_A5XX_RB_WINDOW_OFFSET 0x0000e1d0
|
||||
#define A5XX_RB_WINDOW_OFFSET_WINDOW_OFFSET_DISABLE 0x80000000
|
||||
|
@ -3428,6 +3523,7 @@ static inline uint32_t A5XX_RB_RESOLVE_CNTL_2_Y(uint32_t val)
|
|||
}
|
||||
|
||||
#define REG_A5XX_RB_RESOLVE_CNTL_3 0x0000e213
|
||||
#define A5XX_RB_RESOLVE_CNTL_3_TILED 0x00000001
|
||||
|
||||
#define REG_A5XX_RB_BLIT_DST_LO 0x0000e214
|
||||
|
||||
|
@ -3459,6 +3555,7 @@ static inline uint32_t A5XX_RB_BLIT_DST_ARRAY_PITCH(uint32_t val)
|
|||
|
||||
#define REG_A5XX_RB_CLEAR_CNTL 0x0000e21c
|
||||
#define A5XX_RB_CLEAR_CNTL_FAST_CLEAR 0x00000002
|
||||
#define A5XX_RB_CLEAR_CNTL_MSAA_RESOLVE 0x00000004
|
||||
#define A5XX_RB_CLEAR_CNTL_MASK__MASK 0x000000f0
|
||||
#define A5XX_RB_CLEAR_CNTL_MASK__SHIFT 4
|
||||
static inline uint32_t A5XX_RB_CLEAR_CNTL_MASK(uint32_t val)
|
||||
|
@ -3627,22 +3724,69 @@ static inline uint32_t A5XX_PC_PRIMITIVE_CNTL_STRIDE_IN_VPC(uint32_t val)
|
|||
{
|
||||
return ((val) << A5XX_PC_PRIMITIVE_CNTL_STRIDE_IN_VPC__SHIFT) & A5XX_PC_PRIMITIVE_CNTL_STRIDE_IN_VPC__MASK;
|
||||
}
|
||||
#define A5XX_PC_PRIMITIVE_CNTL_PRIMITIVE_RESTART 0x00000100
|
||||
#define A5XX_PC_PRIMITIVE_CNTL_COUNT_PRIMITIVES 0x00000200
|
||||
#define A5XX_PC_PRIMITIVE_CNTL_PROVOKING_VTX_LAST 0x00000400
|
||||
|
||||
#define REG_A5XX_PC_PRIM_VTX_CNTL 0x0000e385
|
||||
#define A5XX_PC_PRIM_VTX_CNTL_PSIZE 0x00000800
|
||||
|
||||
#define REG_A5XX_PC_RASTER_CNTL 0x0000e388
|
||||
#define A5XX_PC_RASTER_CNTL_POLYMODE_FRONT_PTYPE__MASK 0x00000007
|
||||
#define A5XX_PC_RASTER_CNTL_POLYMODE_FRONT_PTYPE__SHIFT 0
|
||||
static inline uint32_t A5XX_PC_RASTER_CNTL_POLYMODE_FRONT_PTYPE(enum adreno_pa_su_sc_draw val)
|
||||
{
|
||||
return ((val) << A5XX_PC_RASTER_CNTL_POLYMODE_FRONT_PTYPE__SHIFT) & A5XX_PC_RASTER_CNTL_POLYMODE_FRONT_PTYPE__MASK;
|
||||
}
|
||||
#define A5XX_PC_RASTER_CNTL_POLYMODE_BACK_PTYPE__MASK 0x00000038
|
||||
#define A5XX_PC_RASTER_CNTL_POLYMODE_BACK_PTYPE__SHIFT 3
|
||||
static inline uint32_t A5XX_PC_RASTER_CNTL_POLYMODE_BACK_PTYPE(enum adreno_pa_su_sc_draw val)
|
||||
{
|
||||
return ((val) << A5XX_PC_RASTER_CNTL_POLYMODE_BACK_PTYPE__SHIFT) & A5XX_PC_RASTER_CNTL_POLYMODE_BACK_PTYPE__MASK;
|
||||
}
|
||||
#define A5XX_PC_RASTER_CNTL_POLYMODE_ENABLE 0x00000040
|
||||
|
||||
#define REG_A5XX_UNKNOWN_E389 0x0000e389
|
||||
|
||||
#define REG_A5XX_PC_RESTART_INDEX 0x0000e38c
|
||||
|
||||
#define REG_A5XX_UNKNOWN_E38D 0x0000e38d
|
||||
#define REG_A5XX_PC_GS_LAYERED 0x0000e38d
|
||||
|
||||
#define REG_A5XX_PC_GS_PARAM 0x0000e38e
|
||||
#define A5XX_PC_GS_PARAM_MAX_VERTICES__MASK 0x000003ff
|
||||
#define A5XX_PC_GS_PARAM_MAX_VERTICES__SHIFT 0
|
||||
static inline uint32_t A5XX_PC_GS_PARAM_MAX_VERTICES(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_PC_GS_PARAM_MAX_VERTICES__SHIFT) & A5XX_PC_GS_PARAM_MAX_VERTICES__MASK;
|
||||
}
|
||||
#define A5XX_PC_GS_PARAM_INVOCATIONS__MASK 0x0000f800
|
||||
#define A5XX_PC_GS_PARAM_INVOCATIONS__SHIFT 11
|
||||
static inline uint32_t A5XX_PC_GS_PARAM_INVOCATIONS(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_PC_GS_PARAM_INVOCATIONS__SHIFT) & A5XX_PC_GS_PARAM_INVOCATIONS__MASK;
|
||||
}
|
||||
#define A5XX_PC_GS_PARAM_PRIMTYPE__MASK 0x01800000
|
||||
#define A5XX_PC_GS_PARAM_PRIMTYPE__SHIFT 23
|
||||
static inline uint32_t A5XX_PC_GS_PARAM_PRIMTYPE(enum adreno_pa_su_sc_draw val)
|
||||
{
|
||||
return ((val) << A5XX_PC_GS_PARAM_PRIMTYPE__SHIFT) & A5XX_PC_GS_PARAM_PRIMTYPE__MASK;
|
||||
}
|
||||
|
||||
#define REG_A5XX_PC_HS_PARAM 0x0000e38f
|
||||
#define A5XX_PC_HS_PARAM_VERTICES_OUT__MASK 0x0000003f
|
||||
#define A5XX_PC_HS_PARAM_VERTICES_OUT__SHIFT 0
|
||||
static inline uint32_t A5XX_PC_HS_PARAM_VERTICES_OUT(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_PC_HS_PARAM_VERTICES_OUT__SHIFT) & A5XX_PC_HS_PARAM_VERTICES_OUT__MASK;
|
||||
}
|
||||
#define A5XX_PC_HS_PARAM_SPACING__MASK 0x00600000
|
||||
#define A5XX_PC_HS_PARAM_SPACING__SHIFT 21
|
||||
static inline uint32_t A5XX_PC_HS_PARAM_SPACING(enum a4xx_tess_spacing val)
|
||||
{
|
||||
return ((val) << A5XX_PC_HS_PARAM_SPACING__SHIFT) & A5XX_PC_HS_PARAM_SPACING__MASK;
|
||||
}
|
||||
#define A5XX_PC_HS_PARAM_CW 0x00800000
|
||||
#define A5XX_PC_HS_PARAM_CONNECTED 0x01000000
|
||||
|
||||
#define REG_A5XX_PC_POWER_CNTL 0x0000e3b0
|
||||
|
||||
|
@ -3667,10 +3811,40 @@ static inline uint32_t A5XX_VFD_CONTROL_1_REGID4INST(uint32_t val)
|
|||
{
|
||||
return ((val) << A5XX_VFD_CONTROL_1_REGID4INST__SHIFT) & A5XX_VFD_CONTROL_1_REGID4INST__MASK;
|
||||
}
|
||||
#define A5XX_VFD_CONTROL_1_REGID4PRIMID__MASK 0x00ff0000
|
||||
#define A5XX_VFD_CONTROL_1_REGID4PRIMID__SHIFT 16
|
||||
static inline uint32_t A5XX_VFD_CONTROL_1_REGID4PRIMID(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_VFD_CONTROL_1_REGID4PRIMID__SHIFT) & A5XX_VFD_CONTROL_1_REGID4PRIMID__MASK;
|
||||
}
|
||||
|
||||
#define REG_A5XX_VFD_CONTROL_2 0x0000e402
|
||||
#define A5XX_VFD_CONTROL_2_REGID_PATCHID__MASK 0x000000ff
|
||||
#define A5XX_VFD_CONTROL_2_REGID_PATCHID__SHIFT 0
|
||||
static inline uint32_t A5XX_VFD_CONTROL_2_REGID_PATCHID(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_VFD_CONTROL_2_REGID_PATCHID__SHIFT) & A5XX_VFD_CONTROL_2_REGID_PATCHID__MASK;
|
||||
}
|
||||
|
||||
#define REG_A5XX_VFD_CONTROL_3 0x0000e403
|
||||
#define A5XX_VFD_CONTROL_3_REGID_PATCHID__MASK 0x0000ff00
|
||||
#define A5XX_VFD_CONTROL_3_REGID_PATCHID__SHIFT 8
|
||||
static inline uint32_t A5XX_VFD_CONTROL_3_REGID_PATCHID(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_VFD_CONTROL_3_REGID_PATCHID__SHIFT) & A5XX_VFD_CONTROL_3_REGID_PATCHID__MASK;
|
||||
}
|
||||
#define A5XX_VFD_CONTROL_3_REGID_TESSX__MASK 0x00ff0000
|
||||
#define A5XX_VFD_CONTROL_3_REGID_TESSX__SHIFT 16
|
||||
static inline uint32_t A5XX_VFD_CONTROL_3_REGID_TESSX(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_VFD_CONTROL_3_REGID_TESSX__SHIFT) & A5XX_VFD_CONTROL_3_REGID_TESSX__MASK;
|
||||
}
|
||||
#define A5XX_VFD_CONTROL_3_REGID_TESSY__MASK 0xff000000
|
||||
#define A5XX_VFD_CONTROL_3_REGID_TESSY__SHIFT 24
|
||||
static inline uint32_t A5XX_VFD_CONTROL_3_REGID_TESSY(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_VFD_CONTROL_3_REGID_TESSY__SHIFT) & A5XX_VFD_CONTROL_3_REGID_TESSY__MASK;
|
||||
}
|
||||
|
||||
#define REG_A5XX_VFD_CONTROL_4 0x0000e404
|
||||
|
||||
|
@ -3700,12 +3874,18 @@ static inline uint32_t A5XX_VFD_DECODE_INSTR_IDX(uint32_t val)
|
|||
return ((val) << A5XX_VFD_DECODE_INSTR_IDX__SHIFT) & A5XX_VFD_DECODE_INSTR_IDX__MASK;
|
||||
}
|
||||
#define A5XX_VFD_DECODE_INSTR_INSTANCED 0x00020000
|
||||
#define A5XX_VFD_DECODE_INSTR_FORMAT__MASK 0x3ff00000
|
||||
#define A5XX_VFD_DECODE_INSTR_FORMAT__MASK 0x0ff00000
|
||||
#define A5XX_VFD_DECODE_INSTR_FORMAT__SHIFT 20
|
||||
static inline uint32_t A5XX_VFD_DECODE_INSTR_FORMAT(enum a5xx_vtx_fmt val)
|
||||
{
|
||||
return ((val) << A5XX_VFD_DECODE_INSTR_FORMAT__SHIFT) & A5XX_VFD_DECODE_INSTR_FORMAT__MASK;
|
||||
}
|
||||
#define A5XX_VFD_DECODE_INSTR_SWAP__MASK 0x30000000
|
||||
#define A5XX_VFD_DECODE_INSTR_SWAP__SHIFT 28
|
||||
static inline uint32_t A5XX_VFD_DECODE_INSTR_SWAP(enum a3xx_color_swap val)
|
||||
{
|
||||
return ((val) << A5XX_VFD_DECODE_INSTR_SWAP__SHIFT) & A5XX_VFD_DECODE_INSTR_SWAP__MASK;
|
||||
}
|
||||
#define A5XX_VFD_DECODE_INSTR_UNK30 0x40000000
|
||||
#define A5XX_VFD_DECODE_INSTR_FLOAT 0x80000000
|
||||
|
||||
|
@ -3960,6 +4140,7 @@ static inline uint32_t A5XX_SP_FS_CTRL_REG0_BRANCHSTACK(uint32_t val)
|
|||
#define REG_A5XX_SP_BLEND_CNTL 0x0000e5c9
|
||||
#define A5XX_SP_BLEND_CNTL_ENABLED 0x00000001
|
||||
#define A5XX_SP_BLEND_CNTL_UNK8 0x00000100
|
||||
#define A5XX_SP_BLEND_CNTL_ALPHA_TO_COVERAGE 0x00000400
|
||||
|
||||
#define REG_A5XX_SP_FS_OUTPUT_CNTL 0x0000e5ca
|
||||
#define A5XX_SP_FS_OUTPUT_CNTL_MRT__MASK 0x0000000f
|
||||
|
@ -4001,16 +4182,12 @@ static inline uint32_t A5XX_SP_FS_MRT_REG_COLOR_FORMAT(enum a5xx_color_fmt val)
|
|||
{
|
||||
return ((val) << A5XX_SP_FS_MRT_REG_COLOR_FORMAT__SHIFT) & A5XX_SP_FS_MRT_REG_COLOR_FORMAT__MASK;
|
||||
}
|
||||
#define A5XX_SP_FS_MRT_REG_COLOR_SINT 0x00000100
|
||||
#define A5XX_SP_FS_MRT_REG_COLOR_UINT 0x00000200
|
||||
#define A5XX_SP_FS_MRT_REG_COLOR_SRGB 0x00000400
|
||||
|
||||
#define REG_A5XX_UNKNOWN_E5DB 0x0000e5db
|
||||
|
||||
#define REG_A5XX_UNKNOWN_E5F2 0x0000e5f2
|
||||
|
||||
#define REG_A5XX_SP_CS_OBJ_START_LO 0x0000e5f3
|
||||
|
||||
#define REG_A5XX_SP_CS_OBJ_START_HI 0x0000e5f4
|
||||
|
||||
#define REG_A5XX_SP_CS_CTRL_REG0 0x0000e5f0
|
||||
#define A5XX_SP_CS_CTRL_REG0_THREADSIZE__MASK 0x00000008
|
||||
#define A5XX_SP_CS_CTRL_REG0_THREADSIZE__SHIFT 3
|
||||
|
@ -4039,7 +4216,39 @@ static inline uint32_t A5XX_SP_CS_CTRL_REG0_BRANCHSTACK(uint32_t val)
|
|||
return ((val) << A5XX_SP_CS_CTRL_REG0_BRANCHSTACK__SHIFT) & A5XX_SP_CS_CTRL_REG0_BRANCHSTACK__MASK;
|
||||
}
|
||||
|
||||
#define REG_A5XX_UNKNOWN_E600 0x0000e600
|
||||
#define REG_A5XX_UNKNOWN_E5F2 0x0000e5f2
|
||||
|
||||
#define REG_A5XX_SP_CS_OBJ_START_LO 0x0000e5f3
|
||||
|
||||
#define REG_A5XX_SP_CS_OBJ_START_HI 0x0000e5f4
|
||||
|
||||
#define REG_A5XX_SP_HS_CTRL_REG0 0x0000e600
|
||||
#define A5XX_SP_HS_CTRL_REG0_THREADSIZE__MASK 0x00000008
|
||||
#define A5XX_SP_HS_CTRL_REG0_THREADSIZE__SHIFT 3
|
||||
static inline uint32_t A5XX_SP_HS_CTRL_REG0_THREADSIZE(enum a3xx_threadsize val)
|
||||
{
|
||||
return ((val) << A5XX_SP_HS_CTRL_REG0_THREADSIZE__SHIFT) & A5XX_SP_HS_CTRL_REG0_THREADSIZE__MASK;
|
||||
}
|
||||
#define A5XX_SP_HS_CTRL_REG0_HALFREGFOOTPRINT__MASK 0x000003f0
|
||||
#define A5XX_SP_HS_CTRL_REG0_HALFREGFOOTPRINT__SHIFT 4
|
||||
static inline uint32_t A5XX_SP_HS_CTRL_REG0_HALFREGFOOTPRINT(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_SP_HS_CTRL_REG0_HALFREGFOOTPRINT__SHIFT) & A5XX_SP_HS_CTRL_REG0_HALFREGFOOTPRINT__MASK;
|
||||
}
|
||||
#define A5XX_SP_HS_CTRL_REG0_FULLREGFOOTPRINT__MASK 0x0000fc00
|
||||
#define A5XX_SP_HS_CTRL_REG0_FULLREGFOOTPRINT__SHIFT 10
|
||||
static inline uint32_t A5XX_SP_HS_CTRL_REG0_FULLREGFOOTPRINT(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_SP_HS_CTRL_REG0_FULLREGFOOTPRINT__SHIFT) & A5XX_SP_HS_CTRL_REG0_FULLREGFOOTPRINT__MASK;
|
||||
}
|
||||
#define A5XX_SP_HS_CTRL_REG0_VARYING 0x00010000
|
||||
#define A5XX_SP_HS_CTRL_REG0_PIXLODENABLE 0x00100000
|
||||
#define A5XX_SP_HS_CTRL_REG0_BRANCHSTACK__MASK 0xfe000000
|
||||
#define A5XX_SP_HS_CTRL_REG0_BRANCHSTACK__SHIFT 25
|
||||
static inline uint32_t A5XX_SP_HS_CTRL_REG0_BRANCHSTACK(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_SP_HS_CTRL_REG0_BRANCHSTACK__SHIFT) & A5XX_SP_HS_CTRL_REG0_BRANCHSTACK__MASK;
|
||||
}
|
||||
|
||||
#define REG_A5XX_UNKNOWN_E602 0x0000e602
|
||||
|
||||
|
@ -4047,13 +4256,67 @@ static inline uint32_t A5XX_SP_CS_CTRL_REG0_BRANCHSTACK(uint32_t val)
|
|||
|
||||
#define REG_A5XX_SP_HS_OBJ_START_HI 0x0000e604
|
||||
|
||||
#define REG_A5XX_SP_DS_CTRL_REG0 0x0000e610
|
||||
#define A5XX_SP_DS_CTRL_REG0_THREADSIZE__MASK 0x00000008
|
||||
#define A5XX_SP_DS_CTRL_REG0_THREADSIZE__SHIFT 3
|
||||
static inline uint32_t A5XX_SP_DS_CTRL_REG0_THREADSIZE(enum a3xx_threadsize val)
|
||||
{
|
||||
return ((val) << A5XX_SP_DS_CTRL_REG0_THREADSIZE__SHIFT) & A5XX_SP_DS_CTRL_REG0_THREADSIZE__MASK;
|
||||
}
|
||||
#define A5XX_SP_DS_CTRL_REG0_HALFREGFOOTPRINT__MASK 0x000003f0
|
||||
#define A5XX_SP_DS_CTRL_REG0_HALFREGFOOTPRINT__SHIFT 4
|
||||
static inline uint32_t A5XX_SP_DS_CTRL_REG0_HALFREGFOOTPRINT(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_SP_DS_CTRL_REG0_HALFREGFOOTPRINT__SHIFT) & A5XX_SP_DS_CTRL_REG0_HALFREGFOOTPRINT__MASK;
|
||||
}
|
||||
#define A5XX_SP_DS_CTRL_REG0_FULLREGFOOTPRINT__MASK 0x0000fc00
|
||||
#define A5XX_SP_DS_CTRL_REG0_FULLREGFOOTPRINT__SHIFT 10
|
||||
static inline uint32_t A5XX_SP_DS_CTRL_REG0_FULLREGFOOTPRINT(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_SP_DS_CTRL_REG0_FULLREGFOOTPRINT__SHIFT) & A5XX_SP_DS_CTRL_REG0_FULLREGFOOTPRINT__MASK;
|
||||
}
|
||||
#define A5XX_SP_DS_CTRL_REG0_VARYING 0x00010000
|
||||
#define A5XX_SP_DS_CTRL_REG0_PIXLODENABLE 0x00100000
|
||||
#define A5XX_SP_DS_CTRL_REG0_BRANCHSTACK__MASK 0xfe000000
|
||||
#define A5XX_SP_DS_CTRL_REG0_BRANCHSTACK__SHIFT 25
|
||||
static inline uint32_t A5XX_SP_DS_CTRL_REG0_BRANCHSTACK(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_SP_DS_CTRL_REG0_BRANCHSTACK__SHIFT) & A5XX_SP_DS_CTRL_REG0_BRANCHSTACK__MASK;
|
||||
}
|
||||
|
||||
#define REG_A5XX_UNKNOWN_E62B 0x0000e62b
|
||||
|
||||
#define REG_A5XX_SP_DS_OBJ_START_LO 0x0000e62c
|
||||
|
||||
#define REG_A5XX_SP_DS_OBJ_START_HI 0x0000e62d
|
||||
|
||||
#define REG_A5XX_UNKNOWN_E640 0x0000e640
|
||||
#define REG_A5XX_SP_GS_CTRL_REG0 0x0000e640
|
||||
#define A5XX_SP_GS_CTRL_REG0_THREADSIZE__MASK 0x00000008
|
||||
#define A5XX_SP_GS_CTRL_REG0_THREADSIZE__SHIFT 3
|
||||
static inline uint32_t A5XX_SP_GS_CTRL_REG0_THREADSIZE(enum a3xx_threadsize val)
|
||||
{
|
||||
return ((val) << A5XX_SP_GS_CTRL_REG0_THREADSIZE__SHIFT) & A5XX_SP_GS_CTRL_REG0_THREADSIZE__MASK;
|
||||
}
|
||||
#define A5XX_SP_GS_CTRL_REG0_HALFREGFOOTPRINT__MASK 0x000003f0
|
||||
#define A5XX_SP_GS_CTRL_REG0_HALFREGFOOTPRINT__SHIFT 4
|
||||
static inline uint32_t A5XX_SP_GS_CTRL_REG0_HALFREGFOOTPRINT(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_SP_GS_CTRL_REG0_HALFREGFOOTPRINT__SHIFT) & A5XX_SP_GS_CTRL_REG0_HALFREGFOOTPRINT__MASK;
|
||||
}
|
||||
#define A5XX_SP_GS_CTRL_REG0_FULLREGFOOTPRINT__MASK 0x0000fc00
|
||||
#define A5XX_SP_GS_CTRL_REG0_FULLREGFOOTPRINT__SHIFT 10
|
||||
static inline uint32_t A5XX_SP_GS_CTRL_REG0_FULLREGFOOTPRINT(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_SP_GS_CTRL_REG0_FULLREGFOOTPRINT__SHIFT) & A5XX_SP_GS_CTRL_REG0_FULLREGFOOTPRINT__MASK;
|
||||
}
|
||||
#define A5XX_SP_GS_CTRL_REG0_VARYING 0x00010000
|
||||
#define A5XX_SP_GS_CTRL_REG0_PIXLODENABLE 0x00100000
|
||||
#define A5XX_SP_GS_CTRL_REG0_BRANCHSTACK__MASK 0xfe000000
|
||||
#define A5XX_SP_GS_CTRL_REG0_BRANCHSTACK__SHIFT 25
|
||||
static inline uint32_t A5XX_SP_GS_CTRL_REG0_BRANCHSTACK(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_SP_GS_CTRL_REG0_BRANCHSTACK__SHIFT) & A5XX_SP_GS_CTRL_REG0_BRANCHSTACK__MASK;
|
||||
}
|
||||
|
||||
#define REG_A5XX_UNKNOWN_E65B 0x0000e65b
|
||||
|
||||
|
@ -4173,6 +4436,18 @@ static inline uint32_t A5XX_HLSQ_CONTROL_2_REG_FACEREGID(uint32_t val)
|
|||
{
|
||||
return ((val) << A5XX_HLSQ_CONTROL_2_REG_FACEREGID__SHIFT) & A5XX_HLSQ_CONTROL_2_REG_FACEREGID__MASK;
|
||||
}
|
||||
#define A5XX_HLSQ_CONTROL_2_REG_SAMPLEID__MASK 0x0000ff00
|
||||
#define A5XX_HLSQ_CONTROL_2_REG_SAMPLEID__SHIFT 8
|
||||
static inline uint32_t A5XX_HLSQ_CONTROL_2_REG_SAMPLEID(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_HLSQ_CONTROL_2_REG_SAMPLEID__SHIFT) & A5XX_HLSQ_CONTROL_2_REG_SAMPLEID__MASK;
|
||||
}
|
||||
#define A5XX_HLSQ_CONTROL_2_REG_SAMPLEMASK__MASK 0x00ff0000
|
||||
#define A5XX_HLSQ_CONTROL_2_REG_SAMPLEMASK__SHIFT 16
|
||||
static inline uint32_t A5XX_HLSQ_CONTROL_2_REG_SAMPLEMASK(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_HLSQ_CONTROL_2_REG_SAMPLEMASK__SHIFT) & A5XX_HLSQ_CONTROL_2_REG_SAMPLEMASK__MASK;
|
||||
}
|
||||
|
||||
#define REG_A5XX_HLSQ_CONTROL_3_REG 0x0000e787
|
||||
#define A5XX_HLSQ_CONTROL_3_REG_FRAGCOORDXYREGID__MASK 0x000000ff
|
||||
|
@ -4375,34 +4650,52 @@ static inline uint32_t A5XX_HLSQ_CS_NDRANGE_0_LOCALSIZEZ(uint32_t val)
|
|||
}
|
||||
|
||||
#define REG_A5XX_HLSQ_CS_NDRANGE_1 0x0000e7b1
|
||||
#define A5XX_HLSQ_CS_NDRANGE_1_SIZE_X__MASK 0xffffffff
|
||||
#define A5XX_HLSQ_CS_NDRANGE_1_SIZE_X__SHIFT 0
|
||||
static inline uint32_t A5XX_HLSQ_CS_NDRANGE_1_SIZE_X(uint32_t val)
|
||||
#define A5XX_HLSQ_CS_NDRANGE_1_GLOBALSIZE_X__MASK 0xffffffff
|
||||
#define A5XX_HLSQ_CS_NDRANGE_1_GLOBALSIZE_X__SHIFT 0
|
||||
static inline uint32_t A5XX_HLSQ_CS_NDRANGE_1_GLOBALSIZE_X(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_HLSQ_CS_NDRANGE_1_SIZE_X__SHIFT) & A5XX_HLSQ_CS_NDRANGE_1_SIZE_X__MASK;
|
||||
return ((val) << A5XX_HLSQ_CS_NDRANGE_1_GLOBALSIZE_X__SHIFT) & A5XX_HLSQ_CS_NDRANGE_1_GLOBALSIZE_X__MASK;
|
||||
}
|
||||
|
||||
#define REG_A5XX_HLSQ_CS_NDRANGE_2 0x0000e7b2
|
||||
#define A5XX_HLSQ_CS_NDRANGE_2_GLOBALOFF_X__MASK 0xffffffff
|
||||
#define A5XX_HLSQ_CS_NDRANGE_2_GLOBALOFF_X__SHIFT 0
|
||||
static inline uint32_t A5XX_HLSQ_CS_NDRANGE_2_GLOBALOFF_X(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_HLSQ_CS_NDRANGE_2_GLOBALOFF_X__SHIFT) & A5XX_HLSQ_CS_NDRANGE_2_GLOBALOFF_X__MASK;
|
||||
}
|
||||
|
||||
#define REG_A5XX_HLSQ_CS_NDRANGE_3 0x0000e7b3
|
||||
#define A5XX_HLSQ_CS_NDRANGE_3_SIZE_Y__MASK 0xffffffff
|
||||
#define A5XX_HLSQ_CS_NDRANGE_3_SIZE_Y__SHIFT 0
|
||||
static inline uint32_t A5XX_HLSQ_CS_NDRANGE_3_SIZE_Y(uint32_t val)
|
||||
#define A5XX_HLSQ_CS_NDRANGE_3_GLOBALSIZE_Y__MASK 0xffffffff
|
||||
#define A5XX_HLSQ_CS_NDRANGE_3_GLOBALSIZE_Y__SHIFT 0
|
||||
static inline uint32_t A5XX_HLSQ_CS_NDRANGE_3_GLOBALSIZE_Y(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_HLSQ_CS_NDRANGE_3_SIZE_Y__SHIFT) & A5XX_HLSQ_CS_NDRANGE_3_SIZE_Y__MASK;
|
||||
return ((val) << A5XX_HLSQ_CS_NDRANGE_3_GLOBALSIZE_Y__SHIFT) & A5XX_HLSQ_CS_NDRANGE_3_GLOBALSIZE_Y__MASK;
|
||||
}
|
||||
|
||||
#define REG_A5XX_HLSQ_CS_NDRANGE_4 0x0000e7b4
|
||||
#define A5XX_HLSQ_CS_NDRANGE_4_GLOBALOFF_Y__MASK 0xffffffff
|
||||
#define A5XX_HLSQ_CS_NDRANGE_4_GLOBALOFF_Y__SHIFT 0
|
||||
static inline uint32_t A5XX_HLSQ_CS_NDRANGE_4_GLOBALOFF_Y(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_HLSQ_CS_NDRANGE_4_GLOBALOFF_Y__SHIFT) & A5XX_HLSQ_CS_NDRANGE_4_GLOBALOFF_Y__MASK;
|
||||
}
|
||||
|
||||
#define REG_A5XX_HLSQ_CS_NDRANGE_5 0x0000e7b5
|
||||
#define A5XX_HLSQ_CS_NDRANGE_5_SIZE_Z__MASK 0xffffffff
|
||||
#define A5XX_HLSQ_CS_NDRANGE_5_SIZE_Z__SHIFT 0
|
||||
static inline uint32_t A5XX_HLSQ_CS_NDRANGE_5_SIZE_Z(uint32_t val)
|
||||
#define A5XX_HLSQ_CS_NDRANGE_5_GLOBALSIZE_Z__MASK 0xffffffff
|
||||
#define A5XX_HLSQ_CS_NDRANGE_5_GLOBALSIZE_Z__SHIFT 0
|
||||
static inline uint32_t A5XX_HLSQ_CS_NDRANGE_5_GLOBALSIZE_Z(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_HLSQ_CS_NDRANGE_5_SIZE_Z__SHIFT) & A5XX_HLSQ_CS_NDRANGE_5_SIZE_Z__MASK;
|
||||
return ((val) << A5XX_HLSQ_CS_NDRANGE_5_GLOBALSIZE_Z__SHIFT) & A5XX_HLSQ_CS_NDRANGE_5_GLOBALSIZE_Z__MASK;
|
||||
}
|
||||
|
||||
#define REG_A5XX_HLSQ_CS_NDRANGE_6 0x0000e7b6
|
||||
#define A5XX_HLSQ_CS_NDRANGE_6_GLOBALOFF_Z__MASK 0xffffffff
|
||||
#define A5XX_HLSQ_CS_NDRANGE_6_GLOBALOFF_Z__SHIFT 0
|
||||
static inline uint32_t A5XX_HLSQ_CS_NDRANGE_6_GLOBALOFF_Z(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_HLSQ_CS_NDRANGE_6_GLOBALOFF_Z__SHIFT) & A5XX_HLSQ_CS_NDRANGE_6_GLOBALOFF_Z__MASK;
|
||||
}
|
||||
|
||||
#define REG_A5XX_HLSQ_CS_CNTL_0 0x0000e7b7
|
||||
#define A5XX_HLSQ_CS_CNTL_0_WGIDCONSTID__MASK 0x000000ff
|
||||
|
@ -4468,6 +4761,8 @@ static inline uint32_t A5XX_HLSQ_CS_CNTL_0_LOCALIDREGID(uint32_t val)
|
|||
|
||||
#define REG_A5XX_HLSQ_CS_INSTRLEN 0x0000e7dd
|
||||
|
||||
#define REG_A5XX_RB_2D_BLIT_CNTL 0x00002100
|
||||
|
||||
#define REG_A5XX_RB_2D_SRC_SOLID_DW0 0x00002101
|
||||
|
||||
#define REG_A5XX_RB_2D_SRC_SOLID_DW1 0x00002102
|
||||
|
@ -4483,12 +4778,19 @@ static inline uint32_t A5XX_RB_2D_SRC_INFO_COLOR_FORMAT(enum a5xx_color_fmt val)
|
|||
{
|
||||
return ((val) << A5XX_RB_2D_SRC_INFO_COLOR_FORMAT__SHIFT) & A5XX_RB_2D_SRC_INFO_COLOR_FORMAT__MASK;
|
||||
}
|
||||
#define A5XX_RB_2D_SRC_INFO_TILE_MODE__MASK 0x00000300
|
||||
#define A5XX_RB_2D_SRC_INFO_TILE_MODE__SHIFT 8
|
||||
static inline uint32_t A5XX_RB_2D_SRC_INFO_TILE_MODE(enum a5xx_tile_mode val)
|
||||
{
|
||||
return ((val) << A5XX_RB_2D_SRC_INFO_TILE_MODE__SHIFT) & A5XX_RB_2D_SRC_INFO_TILE_MODE__MASK;
|
||||
}
|
||||
#define A5XX_RB_2D_SRC_INFO_COLOR_SWAP__MASK 0x00000c00
|
||||
#define A5XX_RB_2D_SRC_INFO_COLOR_SWAP__SHIFT 10
|
||||
static inline uint32_t A5XX_RB_2D_SRC_INFO_COLOR_SWAP(enum a3xx_color_swap val)
|
||||
{
|
||||
return ((val) << A5XX_RB_2D_SRC_INFO_COLOR_SWAP__SHIFT) & A5XX_RB_2D_SRC_INFO_COLOR_SWAP__MASK;
|
||||
}
|
||||
#define A5XX_RB_2D_SRC_INFO_FLAGS 0x00001000
|
||||
|
||||
#define REG_A5XX_RB_2D_SRC_LO 0x00002108
|
||||
|
||||
|
@ -4515,12 +4817,19 @@ static inline uint32_t A5XX_RB_2D_DST_INFO_COLOR_FORMAT(enum a5xx_color_fmt val)
|
|||
{
|
||||
return ((val) << A5XX_RB_2D_DST_INFO_COLOR_FORMAT__SHIFT) & A5XX_RB_2D_DST_INFO_COLOR_FORMAT__MASK;
|
||||
}
|
||||
#define A5XX_RB_2D_DST_INFO_TILE_MODE__MASK 0x00000300
|
||||
#define A5XX_RB_2D_DST_INFO_TILE_MODE__SHIFT 8
|
||||
static inline uint32_t A5XX_RB_2D_DST_INFO_TILE_MODE(enum a5xx_tile_mode val)
|
||||
{
|
||||
return ((val) << A5XX_RB_2D_DST_INFO_TILE_MODE__SHIFT) & A5XX_RB_2D_DST_INFO_TILE_MODE__MASK;
|
||||
}
|
||||
#define A5XX_RB_2D_DST_INFO_COLOR_SWAP__MASK 0x00000c00
|
||||
#define A5XX_RB_2D_DST_INFO_COLOR_SWAP__SHIFT 10
|
||||
static inline uint32_t A5XX_RB_2D_DST_INFO_COLOR_SWAP(enum a3xx_color_swap val)
|
||||
{
|
||||
return ((val) << A5XX_RB_2D_DST_INFO_COLOR_SWAP__SHIFT) & A5XX_RB_2D_DST_INFO_COLOR_SWAP__MASK;
|
||||
}
|
||||
#define A5XX_RB_2D_DST_INFO_FLAGS 0x00001000
|
||||
|
||||
#define REG_A5XX_RB_2D_DST_LO 0x00002111
|
||||
|
||||
|
@ -4548,6 +4857,8 @@ static inline uint32_t A5XX_RB_2D_DST_SIZE_ARRAY_PITCH(uint32_t val)
|
|||
|
||||
#define REG_A5XX_RB_2D_DST_FLAGS_HI 0x00002144
|
||||
|
||||
#define REG_A5XX_GRAS_2D_BLIT_CNTL 0x00002180
|
||||
|
||||
#define REG_A5XX_GRAS_2D_SRC_INFO 0x00002181
|
||||
#define A5XX_GRAS_2D_SRC_INFO_COLOR_FORMAT__MASK 0x000000ff
|
||||
#define A5XX_GRAS_2D_SRC_INFO_COLOR_FORMAT__SHIFT 0
|
||||
|
@ -4555,12 +4866,19 @@ static inline uint32_t A5XX_GRAS_2D_SRC_INFO_COLOR_FORMAT(enum a5xx_color_fmt va
|
|||
{
|
||||
return ((val) << A5XX_GRAS_2D_SRC_INFO_COLOR_FORMAT__SHIFT) & A5XX_GRAS_2D_SRC_INFO_COLOR_FORMAT__MASK;
|
||||
}
|
||||
#define A5XX_GRAS_2D_SRC_INFO_TILE_MODE__MASK 0x00000300
|
||||
#define A5XX_GRAS_2D_SRC_INFO_TILE_MODE__SHIFT 8
|
||||
static inline uint32_t A5XX_GRAS_2D_SRC_INFO_TILE_MODE(enum a5xx_tile_mode val)
|
||||
{
|
||||
return ((val) << A5XX_GRAS_2D_SRC_INFO_TILE_MODE__SHIFT) & A5XX_GRAS_2D_SRC_INFO_TILE_MODE__MASK;
|
||||
}
|
||||
#define A5XX_GRAS_2D_SRC_INFO_COLOR_SWAP__MASK 0x00000c00
|
||||
#define A5XX_GRAS_2D_SRC_INFO_COLOR_SWAP__SHIFT 10
|
||||
static inline uint32_t A5XX_GRAS_2D_SRC_INFO_COLOR_SWAP(enum a3xx_color_swap val)
|
||||
{
|
||||
return ((val) << A5XX_GRAS_2D_SRC_INFO_COLOR_SWAP__SHIFT) & A5XX_GRAS_2D_SRC_INFO_COLOR_SWAP__MASK;
|
||||
}
|
||||
#define A5XX_GRAS_2D_SRC_INFO_FLAGS 0x00001000
|
||||
|
||||
#define REG_A5XX_GRAS_2D_DST_INFO 0x00002182
|
||||
#define A5XX_GRAS_2D_DST_INFO_COLOR_FORMAT__MASK 0x000000ff
|
||||
|
@ -4569,12 +4887,19 @@ static inline uint32_t A5XX_GRAS_2D_DST_INFO_COLOR_FORMAT(enum a5xx_color_fmt va
|
|||
{
|
||||
return ((val) << A5XX_GRAS_2D_DST_INFO_COLOR_FORMAT__SHIFT) & A5XX_GRAS_2D_DST_INFO_COLOR_FORMAT__MASK;
|
||||
}
|
||||
#define A5XX_GRAS_2D_DST_INFO_TILE_MODE__MASK 0x00000300
|
||||
#define A5XX_GRAS_2D_DST_INFO_TILE_MODE__SHIFT 8
|
||||
static inline uint32_t A5XX_GRAS_2D_DST_INFO_TILE_MODE(enum a5xx_tile_mode val)
|
||||
{
|
||||
return ((val) << A5XX_GRAS_2D_DST_INFO_TILE_MODE__SHIFT) & A5XX_GRAS_2D_DST_INFO_TILE_MODE__MASK;
|
||||
}
|
||||
#define A5XX_GRAS_2D_DST_INFO_COLOR_SWAP__MASK 0x00000c00
|
||||
#define A5XX_GRAS_2D_DST_INFO_COLOR_SWAP__SHIFT 10
|
||||
static inline uint32_t A5XX_GRAS_2D_DST_INFO_COLOR_SWAP(enum a3xx_color_swap val)
|
||||
{
|
||||
return ((val) << A5XX_GRAS_2D_DST_INFO_COLOR_SWAP__SHIFT) & A5XX_GRAS_2D_DST_INFO_COLOR_SWAP__MASK;
|
||||
}
|
||||
#define A5XX_GRAS_2D_DST_INFO_FLAGS 0x00001000
|
||||
|
||||
#define REG_A5XX_UNKNOWN_2100 0x00002100
|
||||
|
||||
|
@ -4698,6 +5023,12 @@ static inline uint32_t A5XX_TEX_CONST_0_MIPLVLS(uint32_t val)
|
|||
{
|
||||
return ((val) << A5XX_TEX_CONST_0_MIPLVLS__SHIFT) & A5XX_TEX_CONST_0_MIPLVLS__MASK;
|
||||
}
|
||||
#define A5XX_TEX_CONST_0_SAMPLES__MASK 0x00300000
|
||||
#define A5XX_TEX_CONST_0_SAMPLES__SHIFT 20
|
||||
static inline uint32_t A5XX_TEX_CONST_0_SAMPLES(enum a3xx_msaa_samples val)
|
||||
{
|
||||
return ((val) << A5XX_TEX_CONST_0_SAMPLES__SHIFT) & A5XX_TEX_CONST_0_SAMPLES__MASK;
|
||||
}
|
||||
#define A5XX_TEX_CONST_0_FMT__MASK 0x3fc00000
|
||||
#define A5XX_TEX_CONST_0_FMT__SHIFT 22
|
||||
static inline uint32_t A5XX_TEX_CONST_0_FMT(enum a5xx_tex_fmt val)
|
||||
|
@ -4788,5 +5119,81 @@ static inline uint32_t A5XX_TEX_CONST_5_DEPTH(uint32_t val)
|
|||
|
||||
#define REG_A5XX_TEX_CONST_11 0x0000000b
|
||||
|
||||
#define REG_A5XX_SSBO_0_0 0x00000000
|
||||
#define A5XX_SSBO_0_0_BASE_LO__MASK 0xffffffe0
|
||||
#define A5XX_SSBO_0_0_BASE_LO__SHIFT 5
|
||||
static inline uint32_t A5XX_SSBO_0_0_BASE_LO(uint32_t val)
|
||||
{
|
||||
return ((val >> 5) << A5XX_SSBO_0_0_BASE_LO__SHIFT) & A5XX_SSBO_0_0_BASE_LO__MASK;
|
||||
}
|
||||
|
||||
#define REG_A5XX_SSBO_0_1 0x00000001
|
||||
#define A5XX_SSBO_0_1_PITCH__MASK 0x003fffff
|
||||
#define A5XX_SSBO_0_1_PITCH__SHIFT 0
|
||||
static inline uint32_t A5XX_SSBO_0_1_PITCH(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_SSBO_0_1_PITCH__SHIFT) & A5XX_SSBO_0_1_PITCH__MASK;
|
||||
}
|
||||
|
||||
#define REG_A5XX_SSBO_0_2 0x00000002
|
||||
#define A5XX_SSBO_0_2_ARRAY_PITCH__MASK 0x03fff000
|
||||
#define A5XX_SSBO_0_2_ARRAY_PITCH__SHIFT 12
|
||||
static inline uint32_t A5XX_SSBO_0_2_ARRAY_PITCH(uint32_t val)
|
||||
{
|
||||
return ((val >> 12) << A5XX_SSBO_0_2_ARRAY_PITCH__SHIFT) & A5XX_SSBO_0_2_ARRAY_PITCH__MASK;
|
||||
}
|
||||
|
||||
#define REG_A5XX_SSBO_0_3 0x00000003
|
||||
#define A5XX_SSBO_0_3_CPP__MASK 0x0000003f
|
||||
#define A5XX_SSBO_0_3_CPP__SHIFT 0
|
||||
static inline uint32_t A5XX_SSBO_0_3_CPP(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_SSBO_0_3_CPP__SHIFT) & A5XX_SSBO_0_3_CPP__MASK;
|
||||
}
|
||||
|
||||
#define REG_A5XX_SSBO_1_0 0x00000000
|
||||
#define A5XX_SSBO_1_0_FMT__MASK 0x0000ff00
|
||||
#define A5XX_SSBO_1_0_FMT__SHIFT 8
|
||||
static inline uint32_t A5XX_SSBO_1_0_FMT(enum a5xx_tex_fmt val)
|
||||
{
|
||||
return ((val) << A5XX_SSBO_1_0_FMT__SHIFT) & A5XX_SSBO_1_0_FMT__MASK;
|
||||
}
|
||||
#define A5XX_SSBO_1_0_WIDTH__MASK 0xffff0000
|
||||
#define A5XX_SSBO_1_0_WIDTH__SHIFT 16
|
||||
static inline uint32_t A5XX_SSBO_1_0_WIDTH(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_SSBO_1_0_WIDTH__SHIFT) & A5XX_SSBO_1_0_WIDTH__MASK;
|
||||
}
|
||||
|
||||
#define REG_A5XX_SSBO_1_1 0x00000001
|
||||
#define A5XX_SSBO_1_1_HEIGHT__MASK 0x0000ffff
|
||||
#define A5XX_SSBO_1_1_HEIGHT__SHIFT 0
|
||||
static inline uint32_t A5XX_SSBO_1_1_HEIGHT(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_SSBO_1_1_HEIGHT__SHIFT) & A5XX_SSBO_1_1_HEIGHT__MASK;
|
||||
}
|
||||
#define A5XX_SSBO_1_1_DEPTH__MASK 0xffff0000
|
||||
#define A5XX_SSBO_1_1_DEPTH__SHIFT 16
|
||||
static inline uint32_t A5XX_SSBO_1_1_DEPTH(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_SSBO_1_1_DEPTH__SHIFT) & A5XX_SSBO_1_1_DEPTH__MASK;
|
||||
}
|
||||
|
||||
#define REG_A5XX_SSBO_2_0 0x00000000
|
||||
#define A5XX_SSBO_2_0_BASE_LO__MASK 0xffffffff
|
||||
#define A5XX_SSBO_2_0_BASE_LO__SHIFT 0
|
||||
static inline uint32_t A5XX_SSBO_2_0_BASE_LO(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_SSBO_2_0_BASE_LO__SHIFT) & A5XX_SSBO_2_0_BASE_LO__MASK;
|
||||
}
|
||||
|
||||
#define REG_A5XX_SSBO_2_1 0x00000001
|
||||
#define A5XX_SSBO_2_1_BASE_HI__MASK 0xffffffff
|
||||
#define A5XX_SSBO_2_1_BASE_HI__SHIFT 0
|
||||
static inline uint32_t A5XX_SSBO_2_1_BASE_HI(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_SSBO_2_1_BASE_HI__SHIFT) & A5XX_SSBO_2_1_BASE_HI__MASK;
|
||||
}
|
||||
|
||||
|
||||
#endif /* A5XX_XML */
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,162 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/* Copyright (c) 2017 The Linux Foundation. All rights reserved. */
|
||||
|
||||
#ifndef _A6XX_GMU_H_
|
||||
#define _A6XX_GMU_H_
|
||||
|
||||
#include <linux/interrupt.h>
|
||||
#include "msm_drv.h"
|
||||
#include "a6xx_hfi.h"
|
||||
|
||||
struct a6xx_gmu_bo {
|
||||
void *virt;
|
||||
size_t size;
|
||||
u64 iova;
|
||||
struct page **pages;
|
||||
};
|
||||
|
||||
/*
|
||||
* These define the different GMU wake up options - these define how both the
|
||||
* CPU and the GMU bring up the hardware
|
||||
*/
|
||||
|
||||
/* THe GMU has already been booted and the rentention registers are active */
|
||||
#define GMU_WARM_BOOT 0
|
||||
|
||||
/* the GMU is coming up for the first time or back from a power collapse */
|
||||
#define GMU_COLD_BOOT 1
|
||||
|
||||
/* The GMU is being soft reset after a fault */
|
||||
#define GMU_RESET 2
|
||||
|
||||
/*
|
||||
* These define the level of control that the GMU has - the higher the number
|
||||
* the more things that the GMU hardware controls on its own.
|
||||
*/
|
||||
|
||||
/* The GMU does not do any idle state management */
|
||||
#define GMU_IDLE_STATE_ACTIVE 0
|
||||
|
||||
/* The GMU manages SPTP power collapse */
|
||||
#define GMU_IDLE_STATE_SPTP 2
|
||||
|
||||
/* The GMU does automatic IFPC (intra-frame power collapse) */
|
||||
#define GMU_IDLE_STATE_IFPC 3
|
||||
|
||||
struct a6xx_gmu {
|
||||
struct device *dev;
|
||||
|
||||
void * __iomem mmio;
|
||||
void * __iomem pdc_mmio;
|
||||
|
||||
int hfi_irq;
|
||||
int gmu_irq;
|
||||
|
||||
struct regulator *gx;
|
||||
|
||||
struct iommu_domain *domain;
|
||||
u64 uncached_iova_base;
|
||||
|
||||
int idle_level;
|
||||
|
||||
struct a6xx_gmu_bo *hfi;
|
||||
struct a6xx_gmu_bo *debug;
|
||||
|
||||
int nr_clocks;
|
||||
struct clk_bulk_data *clocks;
|
||||
struct clk *core_clk;
|
||||
|
||||
int nr_gpu_freqs;
|
||||
unsigned long gpu_freqs[16];
|
||||
u32 gx_arc_votes[16];
|
||||
|
||||
int nr_gmu_freqs;
|
||||
unsigned long gmu_freqs[4];
|
||||
u32 cx_arc_votes[4];
|
||||
|
||||
struct a6xx_hfi_queue queues[2];
|
||||
|
||||
struct tasklet_struct hfi_tasklet;
|
||||
};
|
||||
|
||||
static inline u32 gmu_read(struct a6xx_gmu *gmu, u32 offset)
|
||||
{
|
||||
return msm_readl(gmu->mmio + (offset << 2));
|
||||
}
|
||||
|
||||
static inline void gmu_write(struct a6xx_gmu *gmu, u32 offset, u32 value)
|
||||
{
|
||||
return msm_writel(value, gmu->mmio + (offset << 2));
|
||||
}
|
||||
|
||||
static inline void pdc_write(struct a6xx_gmu *gmu, u32 offset, u32 value)
|
||||
{
|
||||
return msm_writel(value, gmu->pdc_mmio + (offset << 2));
|
||||
}
|
||||
|
||||
static inline void gmu_rmw(struct a6xx_gmu *gmu, u32 reg, u32 mask, u32 or)
|
||||
{
|
||||
u32 val = gmu_read(gmu, reg);
|
||||
|
||||
val &= ~mask;
|
||||
|
||||
gmu_write(gmu, reg, val | or);
|
||||
}
|
||||
|
||||
#define gmu_poll_timeout(gmu, addr, val, cond, interval, timeout) \
|
||||
readl_poll_timeout((gmu)->mmio + ((addr) << 2), val, cond, \
|
||||
interval, timeout)
|
||||
|
||||
/*
|
||||
* These are the available OOB (out of band requests) to the GMU where "out of
|
||||
* band" means that the CPU talks to the GMU directly and not through HFI.
|
||||
* Normally this works by writing a ITCM/DTCM register and then triggering a
|
||||
* interrupt (the "request" bit) and waiting for an acknowledgment (the "ack"
|
||||
* bit). The state is cleared by writing the "clear' bit to the GMU interrupt.
|
||||
*
|
||||
* These are used to force the GMU/GPU to stay on during a critical sequence or
|
||||
* for hardware workarounds.
|
||||
*/
|
||||
|
||||
enum a6xx_gmu_oob_state {
|
||||
GMU_OOB_BOOT_SLUMBER = 0,
|
||||
GMU_OOB_GPU_SET,
|
||||
GMU_OOB_DCVS_SET,
|
||||
};
|
||||
|
||||
/* These are the interrupt / ack bits for each OOB request that are set
|
||||
* in a6xx_gmu_set_oob and a6xx_clear_oob
|
||||
*/
|
||||
|
||||
/*
|
||||
* Let the GMU know that a boot or slumber operation has started. The value in
|
||||
* REG_A6XX_GMU_BOOT_SLUMBER_OPTION lets the GMU know which operation we are
|
||||
* doing
|
||||
*/
|
||||
#define GMU_OOB_BOOT_SLUMBER_REQUEST 22
|
||||
#define GMU_OOB_BOOT_SLUMBER_ACK 30
|
||||
#define GMU_OOB_BOOT_SLUMBER_CLEAR 30
|
||||
|
||||
/*
|
||||
* Set a new power level for the GPU when the CPU is doing frequency scaling
|
||||
*/
|
||||
#define GMU_OOB_DCVS_REQUEST 23
|
||||
#define GMU_OOB_DCVS_ACK 31
|
||||
#define GMU_OOB_DCVS_CLEAR 31
|
||||
|
||||
/*
|
||||
* Let the GMU know to not turn off any GPU registers while the CPU is in a
|
||||
* critical section
|
||||
*/
|
||||
#define GMU_OOB_GPU_SET_REQUEST 16
|
||||
#define GMU_OOB_GPU_SET_ACK 24
|
||||
#define GMU_OOB_GPU_SET_CLEAR 24
|
||||
|
||||
|
||||
void a6xx_hfi_init(struct a6xx_gmu *gmu);
|
||||
int a6xx_hfi_start(struct a6xx_gmu *gmu, int boot_state);
|
||||
void a6xx_hfi_stop(struct a6xx_gmu *gmu);
|
||||
|
||||
void a6xx_hfi_task(unsigned long data);
|
||||
|
||||
#endif
|
|
@ -0,0 +1,382 @@
|
|||
#ifndef A6XX_GMU_XML
|
||||
#define A6XX_GMU_XML
|
||||
|
||||
/* Autogenerated file, DO NOT EDIT manually!
|
||||
|
||||
This file was generated by the rules-ng-ng headergen tool in this git repository:
|
||||
http://github.com/freedreno/envytools/
|
||||
git clone https://github.com/freedreno/envytools.git
|
||||
|
||||
The rules-ng-ng source files this header was generated from are:
|
||||
- /home/robclark/src/envytools/rnndb/adreno.xml ( 501 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/freedreno_copyright.xml ( 1572 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a2xx.xml ( 36805 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/adreno_common.xml ( 13634 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/adreno_pm4.xml ( 42393 bytes, from 2018-08-06 18:45:45)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a3xx.xml ( 83840 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a4xx.xml ( 112086 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a5xx.xml ( 147240 bytes, from 2018-08-06 18:45:45)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a6xx.xml ( 101627 bytes, from 2018-08-06 18:45:45)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a6xx_gmu.xml ( 10431 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/ocmem.xml ( 1773 bytes, from 2018-07-03 19:37:13)
|
||||
|
||||
Copyright (C) 2013-2018 by the following authors:
|
||||
- Rob Clark <robdclark@gmail.com> (robclark)
|
||||
- Ilia Mirkin <imirkin@alum.mit.edu> (imirkin)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice (including the
|
||||
next paragraph) shall be included in all copies or substantial
|
||||
portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
|
||||
#define A6XX_GMU_GPU_IDLE_STATUS_BUSY_IGN_AHB 0x00800000
|
||||
#define A6XX_GMU_GPU_IDLE_STATUS_CX_GX_CPU_BUSY_IGN_AHB 0x40000000
|
||||
#define A6XX_GMU_OOB_BOOT_SLUMBER_SET_MASK 0x00400000
|
||||
#define A6XX_GMU_OOB_BOOT_SLUMBER_CHECK_MASK 0x40000000
|
||||
#define A6XX_GMU_OOB_BOOT_SLUMBER_CLEAR_MASK 0x40000000
|
||||
#define A6XX_GMU_OOB_DCVS_SET_MASK 0x00800000
|
||||
#define A6XX_GMU_OOB_DCVS_CHECK_MASK 0x80000000
|
||||
#define A6XX_GMU_OOB_DCVS_CLEAR_MASK 0x80000000
|
||||
#define A6XX_GMU_OOB_GPU_SET_MASK 0x00040000
|
||||
#define A6XX_GMU_OOB_GPU_CHECK_MASK 0x04000000
|
||||
#define A6XX_GMU_OOB_GPU_CLEAR_MASK 0x04000000
|
||||
#define A6XX_GMU_OOB_PERFCNTR_SET_MASK 0x00020000
|
||||
#define A6XX_GMU_OOB_PERFCNTR_CHECK_MASK 0x02000000
|
||||
#define A6XX_GMU_OOB_PERFCNTR_CLEAR_MASK 0x02000000
|
||||
#define A6XX_HFI_IRQ_MSGQ_MASK 0x00000001
|
||||
#define A6XX_HFI_IRQ_DSGQ_MASK 0x00000002
|
||||
#define A6XX_HFI_IRQ_BLOCKED_MSG_MASK 0x00000004
|
||||
#define A6XX_HFI_IRQ_CM3_FAULT_MASK 0x00800000
|
||||
#define A6XX_HFI_IRQ_GMU_ERR_MASK__MASK 0x007f0000
|
||||
#define A6XX_HFI_IRQ_GMU_ERR_MASK__SHIFT 16
|
||||
static inline uint32_t A6XX_HFI_IRQ_GMU_ERR_MASK(uint32_t val)
|
||||
{
|
||||
return ((val) << A6XX_HFI_IRQ_GMU_ERR_MASK__SHIFT) & A6XX_HFI_IRQ_GMU_ERR_MASK__MASK;
|
||||
}
|
||||
#define A6XX_HFI_IRQ_OOB_MASK__MASK 0xff000000
|
||||
#define A6XX_HFI_IRQ_OOB_MASK__SHIFT 24
|
||||
static inline uint32_t A6XX_HFI_IRQ_OOB_MASK(uint32_t val)
|
||||
{
|
||||
return ((val) << A6XX_HFI_IRQ_OOB_MASK__SHIFT) & A6XX_HFI_IRQ_OOB_MASK__MASK;
|
||||
}
|
||||
#define A6XX_HFI_H2F_IRQ_MASK_BIT 0x00000001
|
||||
#define REG_A6XX_GPU_GMU_GX_SPTPRAC_CLOCK_CONTROL 0x00000080
|
||||
|
||||
#define REG_A6XX_GMU_GX_SPTPRAC_POWER_CONTROL 0x00000081
|
||||
|
||||
#define REG_A6XX_GMU_CM3_ITCM_START 0x00000c00
|
||||
|
||||
#define REG_A6XX_GMU_CM3_DTCM_START 0x00001c00
|
||||
|
||||
#define REG_A6XX_GMU_NMI_CONTROL_STATUS 0x000023f0
|
||||
|
||||
#define REG_A6XX_GMU_BOOT_SLUMBER_OPTION 0x000023f8
|
||||
|
||||
#define REG_A6XX_GMU_GX_VOTE_IDX 0x000023f9
|
||||
|
||||
#define REG_A6XX_GMU_MX_VOTE_IDX 0x000023fa
|
||||
|
||||
#define REG_A6XX_GMU_DCVS_ACK_OPTION 0x000023fc
|
||||
|
||||
#define REG_A6XX_GMU_DCVS_PERF_SETTING 0x000023fd
|
||||
|
||||
#define REG_A6XX_GMU_DCVS_BW_SETTING 0x000023fe
|
||||
|
||||
#define REG_A6XX_GMU_DCVS_RETURN 0x000023ff
|
||||
|
||||
#define REG_A6XX_GMU_SYS_BUS_CONFIG 0x00004c0f
|
||||
|
||||
#define REG_A6XX_GMU_CM3_SYSRESET 0x00005000
|
||||
|
||||
#define REG_A6XX_GMU_CM3_BOOT_CONFIG 0x00005001
|
||||
|
||||
#define REG_A6XX_GMU_CM3_FW_BUSY 0x0000501a
|
||||
|
||||
#define REG_A6XX_GMU_CM3_FW_INIT_RESULT 0x0000501c
|
||||
|
||||
#define REG_A6XX_GMU_CM3_CFG 0x0000502d
|
||||
|
||||
#define REG_A6XX_GMU_CX_GMU_POWER_COUNTER_ENABLE 0x00005040
|
||||
|
||||
#define REG_A6XX_GMU_CX_GMU_POWER_COUNTER_SELECT_0 0x00005041
|
||||
|
||||
#define REG_A6XX_GMU_CX_GMU_POWER_COUNTER_SELECT_1 0x00005042
|
||||
|
||||
#define REG_A6XX_GMU_CX_GMU_POWER_COUNTER_XOCLK_0_L 0x00005044
|
||||
|
||||
#define REG_A6XX_GMU_CX_GMU_POWER_COUNTER_XOCLK_0_H 0x00005045
|
||||
|
||||
#define REG_A6XX_GMU_CX_GMU_POWER_COUNTER_XOCLK_1_L 0x00005046
|
||||
|
||||
#define REG_A6XX_GMU_CX_GMU_POWER_COUNTER_XOCLK_1_H 0x00005047
|
||||
|
||||
#define REG_A6XX_GMU_CX_GMU_POWER_COUNTER_XOCLK_2_L 0x00005048
|
||||
|
||||
#define REG_A6XX_GMU_CX_GMU_POWER_COUNTER_XOCLK_2_H 0x00005049
|
||||
|
||||
#define REG_A6XX_GMU_CX_GMU_POWER_COUNTER_XOCLK_3_L 0x0000504a
|
||||
|
||||
#define REG_A6XX_GMU_CX_GMU_POWER_COUNTER_XOCLK_3_H 0x0000504b
|
||||
|
||||
#define REG_A6XX_GMU_CX_GMU_POWER_COUNTER_XOCLK_4_L 0x0000504c
|
||||
|
||||
#define REG_A6XX_GMU_CX_GMU_POWER_COUNTER_XOCLK_4_H 0x0000504d
|
||||
|
||||
#define REG_A6XX_GMU_CX_GMU_POWER_COUNTER_XOCLK_5_L 0x0000504e
|
||||
|
||||
#define REG_A6XX_GMU_CX_GMU_POWER_COUNTER_XOCLK_5_H 0x0000504f
|
||||
|
||||
#define REG_A6XX_GMU_PWR_COL_INTER_FRAME_CTRL 0x000050c0
|
||||
#define A6XX_GMU_PWR_COL_INTER_FRAME_CTRL_IFPC_ENABLE 0x00000001
|
||||
#define A6XX_GMU_PWR_COL_INTER_FRAME_CTRL_HM_POWER_COLLAPSE_ENABLE 0x00000002
|
||||
#define A6XX_GMU_PWR_COL_INTER_FRAME_CTRL_SPTPRAC_POWER_CONTROL_ENABLE 0x00000004
|
||||
#define A6XX_GMU_PWR_COL_INTER_FRAME_CTRL_NUM_PASS_SKIPS__MASK 0x00003c00
|
||||
#define A6XX_GMU_PWR_COL_INTER_FRAME_CTRL_NUM_PASS_SKIPS__SHIFT 10
|
||||
static inline uint32_t A6XX_GMU_PWR_COL_INTER_FRAME_CTRL_NUM_PASS_SKIPS(uint32_t val)
|
||||
{
|
||||
return ((val) << A6XX_GMU_PWR_COL_INTER_FRAME_CTRL_NUM_PASS_SKIPS__SHIFT) & A6XX_GMU_PWR_COL_INTER_FRAME_CTRL_NUM_PASS_SKIPS__MASK;
|
||||
}
|
||||
#define A6XX_GMU_PWR_COL_INTER_FRAME_CTRL_MIN_PASS_LENGTH__MASK 0xffffc000
|
||||
#define A6XX_GMU_PWR_COL_INTER_FRAME_CTRL_MIN_PASS_LENGTH__SHIFT 14
|
||||
static inline uint32_t A6XX_GMU_PWR_COL_INTER_FRAME_CTRL_MIN_PASS_LENGTH(uint32_t val)
|
||||
{
|
||||
return ((val) << A6XX_GMU_PWR_COL_INTER_FRAME_CTRL_MIN_PASS_LENGTH__SHIFT) & A6XX_GMU_PWR_COL_INTER_FRAME_CTRL_MIN_PASS_LENGTH__MASK;
|
||||
}
|
||||
|
||||
#define REG_A6XX_GMU_PWR_COL_INTER_FRAME_HYST 0x000050c1
|
||||
|
||||
#define REG_A6XX_GMU_PWR_COL_SPTPRAC_HYST 0x000050c2
|
||||
|
||||
#define REG_A6XX_GMU_SPTPRAC_PWR_CLK_STATUS 0x000050d0
|
||||
#define A6XX_GMU_SPTPRAC_PWR_CLK_STATUS_SPTPRAC_GDSC_POWERING_OFF 0x00000001
|
||||
#define A6XX_GMU_SPTPRAC_PWR_CLK_STATUS_SPTPRAC_GDSC_POWERING_ON 0x00000002
|
||||
#define A6XX_GMU_SPTPRAC_PWR_CLK_STATUS_SPTPRAC_GDSC_POWER_ON 0x00000004
|
||||
#define A6XX_GMU_SPTPRAC_PWR_CLK_STATUS_SPTPRAC_GDSC_POWER_OFF 0x00000008
|
||||
#define A6XX_GMU_SPTPRAC_PWR_CLK_STATUS_SP_CLOCK_OFF 0x00000010
|
||||
#define A6XX_GMU_SPTPRAC_PWR_CLK_STATUS_GMU_UP_POWER_STATE 0x00000020
|
||||
#define A6XX_GMU_SPTPRAC_PWR_CLK_STATUS_GX_HM_GDSC_POWER_OFF 0x00000040
|
||||
#define A6XX_GMU_SPTPRAC_PWR_CLK_STATUS_GX_HM_CLK_OFF 0x00000080
|
||||
|
||||
#define REG_A6XX_GMU_GPU_NAP_CTRL 0x000050e4
|
||||
#define A6XX_GMU_GPU_NAP_CTRL_HW_NAP_ENABLE 0x00000001
|
||||
#define A6XX_GMU_GPU_NAP_CTRL_SID__MASK 0x000001f0
|
||||
#define A6XX_GMU_GPU_NAP_CTRL_SID__SHIFT 4
|
||||
static inline uint32_t A6XX_GMU_GPU_NAP_CTRL_SID(uint32_t val)
|
||||
{
|
||||
return ((val) << A6XX_GMU_GPU_NAP_CTRL_SID__SHIFT) & A6XX_GMU_GPU_NAP_CTRL_SID__MASK;
|
||||
}
|
||||
|
||||
#define REG_A6XX_GMU_RPMH_CTRL 0x000050e8
|
||||
#define A6XX_GMU_RPMH_CTRL_RPMH_INTERFACE_ENABLE 0x00000001
|
||||
#define A6XX_GMU_RPMH_CTRL_LLC_VOTE_ENABLE 0x00000010
|
||||
#define A6XX_GMU_RPMH_CTRL_DDR_VOTE_ENABLE 0x00000100
|
||||
#define A6XX_GMU_RPMH_CTRL_MX_VOTE_ENABLE 0x00000200
|
||||
#define A6XX_GMU_RPMH_CTRL_CX_VOTE_ENABLE 0x00000400
|
||||
#define A6XX_GMU_RPMH_CTRL_GFX_VOTE_ENABLE 0x00000800
|
||||
#define A6XX_GMU_RPMH_CTRL_DDR_MIN_VOTE_ENABLE 0x00001000
|
||||
#define A6XX_GMU_RPMH_CTRL_MX_MIN_VOTE_ENABLE 0x00002000
|
||||
#define A6XX_GMU_RPMH_CTRL_CX_MIN_VOTE_ENABLE 0x00004000
|
||||
#define A6XX_GMU_RPMH_CTRL_GFX_MIN_VOTE_ENABLE 0x00008000
|
||||
|
||||
#define REG_A6XX_GMU_RPMH_HYST_CTRL 0x000050e9
|
||||
|
||||
#define REG_A6XX_GPU_GMU_CX_GMU_RPMH_POWER_STATE 0x000050ec
|
||||
|
||||
#define REG_A6XX_GMU_BOOT_KMD_LM_HANDSHAKE 0x000051f0
|
||||
|
||||
#define REG_A6XX_GMU_LLM_GLM_SLEEP_CTRL 0x00005157
|
||||
|
||||
#define REG_A6XX_GMU_LLM_GLM_SLEEP_STATUS 0x00005158
|
||||
|
||||
#define REG_A6XX_GMU_ALWAYS_ON_COUNTER_L 0x00005088
|
||||
|
||||
#define REG_A6XX_GMU_ALWAYS_ON_COUNTER_H 0x00005089
|
||||
|
||||
#define REG_A6XX_GMU_GMU_PWR_COL_KEEPALIVE 0x000050c3
|
||||
|
||||
#define REG_A6XX_GMU_HFI_CTRL_STATUS 0x00005180
|
||||
|
||||
#define REG_A6XX_GMU_HFI_VERSION_INFO 0x00005181
|
||||
|
||||
#define REG_A6XX_GMU_HFI_SFR_ADDR 0x00005182
|
||||
|
||||
#define REG_A6XX_GMU_HFI_MMAP_ADDR 0x00005183
|
||||
|
||||
#define REG_A6XX_GMU_HFI_QTBL_INFO 0x00005184
|
||||
|
||||
#define REG_A6XX_GMU_HFI_QTBL_ADDR 0x00005185
|
||||
|
||||
#define REG_A6XX_GMU_HFI_CTRL_INIT 0x00005186
|
||||
|
||||
#define REG_A6XX_GMU_GMU2HOST_INTR_SET 0x00005190
|
||||
|
||||
#define REG_A6XX_GMU_GMU2HOST_INTR_CLR 0x00005191
|
||||
|
||||
#define REG_A6XX_GMU_GMU2HOST_INTR_INFO 0x00005192
|
||||
#define A6XX_GMU_GMU2HOST_INTR_INFO_MSGQ 0x00000001
|
||||
#define A6XX_GMU_GMU2HOST_INTR_INFO_CM3_FAULT 0x00800000
|
||||
|
||||
#define REG_A6XX_GMU_GMU2HOST_INTR_MASK 0x00005193
|
||||
|
||||
#define REG_A6XX_GMU_HOST2GMU_INTR_SET 0x00005194
|
||||
|
||||
#define REG_A6XX_GMU_HOST2GMU_INTR_CLR 0x00005195
|
||||
|
||||
#define REG_A6XX_GMU_HOST2GMU_INTR_RAW_INFO 0x00005196
|
||||
|
||||
#define REG_A6XX_GMU_HOST2GMU_INTR_EN_0 0x00005197
|
||||
|
||||
#define REG_A6XX_GMU_HOST2GMU_INTR_EN_1 0x00005198
|
||||
|
||||
#define REG_A6XX_GMU_HOST2GMU_INTR_EN_2 0x00005199
|
||||
|
||||
#define REG_A6XX_GMU_HOST2GMU_INTR_EN_3 0x0000519a
|
||||
|
||||
#define REG_A6XX_GMU_HOST2GMU_INTR_INFO_0 0x0000519b
|
||||
|
||||
#define REG_A6XX_GMU_HOST2GMU_INTR_INFO_1 0x0000519c
|
||||
|
||||
#define REG_A6XX_GMU_HOST2GMU_INTR_INFO_2 0x0000519d
|
||||
|
||||
#define REG_A6XX_GMU_HOST2GMU_INTR_INFO_3 0x0000519e
|
||||
|
||||
#define REG_A6XX_GMU_GENERAL_1 0x000051c6
|
||||
|
||||
#define REG_A6XX_GMU_GENERAL_7 0x000051cc
|
||||
|
||||
#define REG_A6XX_GMU_ISENSE_CTRL 0x0000515d
|
||||
|
||||
#define REG_A6XX_GPU_CS_ENABLE_REG 0x00008920
|
||||
|
||||
#define REG_A6XX_GPU_GMU_CX_GMU_ISENSE_CTRL 0x0000515d
|
||||
|
||||
#define REG_A6XX_GPU_CS_AMP_CALIBRATION_CONTROL3 0x00008578
|
||||
|
||||
#define REG_A6XX_GPU_CS_AMP_CALIBRATION_CONTROL2 0x00008558
|
||||
|
||||
#define REG_A6XX_GPU_CS_A_SENSOR_CTRL_0 0x00008580
|
||||
|
||||
#define REG_A6XX_GPU_CS_A_SENSOR_CTRL_2 0x00027ada
|
||||
|
||||
#define REG_A6XX_GPU_CS_SENSOR_GENERAL_STATUS 0x0000881a
|
||||
|
||||
#define REG_A6XX_GPU_CS_AMP_CALIBRATION_CONTROL1 0x00008957
|
||||
|
||||
#define REG_A6XX_GPU_CS_SENSOR_GENERAL_STATUS 0x0000881a
|
||||
|
||||
#define REG_A6XX_GPU_CS_AMP_CALIBRATION_STATUS1_0 0x0000881d
|
||||
|
||||
#define REG_A6XX_GPU_CS_AMP_CALIBRATION_STATUS1_2 0x0000881f
|
||||
|
||||
#define REG_A6XX_GPU_CS_AMP_CALIBRATION_STATUS1_4 0x00008821
|
||||
|
||||
#define REG_A6XX_GPU_CS_AMP_CALIBRATION_DONE 0x00008965
|
||||
|
||||
#define REG_A6XX_GPU_CS_AMP_PERIOD_CTRL 0x0000896d
|
||||
|
||||
#define REG_A6XX_GPU_CS_AMP_CALIBRATION_DONE 0x00008965
|
||||
|
||||
#define REG_A6XX_GPU_GMU_CX_GMU_PWR_THRESHOLD 0x0000514d
|
||||
|
||||
#define REG_A6XX_GMU_AO_INTERRUPT_EN 0x00009303
|
||||
|
||||
#define REG_A6XX_GMU_AO_HOST_INTERRUPT_CLR 0x00009304
|
||||
|
||||
#define REG_A6XX_GMU_AO_HOST_INTERRUPT_STATUS 0x00009305
|
||||
#define A6XX_GMU_AO_HOST_INTERRUPT_STATUS_WDOG_BITE 0x00000001
|
||||
#define A6XX_GMU_AO_HOST_INTERRUPT_STATUS_RSCC_COMP 0x00000002
|
||||
#define A6XX_GMU_AO_HOST_INTERRUPT_STATUS_VDROOP 0x00000004
|
||||
#define A6XX_GMU_AO_HOST_INTERRUPT_STATUS_FENCE_ERR 0x00000008
|
||||
#define A6XX_GMU_AO_HOST_INTERRUPT_STATUS_DBD_WAKEUP 0x00000010
|
||||
#define A6XX_GMU_AO_HOST_INTERRUPT_STATUS_HOST_AHB_BUS_ERROR 0x00000020
|
||||
|
||||
#define REG_A6XX_GMU_AO_HOST_INTERRUPT_MASK 0x00009306
|
||||
|
||||
#define REG_A6XX_GPU_GMU_AO_GMU_CGC_MODE_CNTL 0x00009309
|
||||
|
||||
#define REG_A6XX_GPU_GMU_AO_GMU_CGC_DELAY_CNTL 0x0000930a
|
||||
|
||||
#define REG_A6XX_GPU_GMU_AO_GMU_CGC_HYST_CNTL 0x0000930b
|
||||
|
||||
#define REG_A6XX_GPU_GMU_AO_GPU_CX_BUSY_STATUS 0x0000930c
|
||||
#define A6XX_GPU_GMU_AO_GPU_CX_BUSY_STATUS_GPUBUSYIGNAHB 0x00800000
|
||||
|
||||
#define REG_A6XX_GPU_GMU_AO_GPU_CX_BUSY_STATUS2 0x0000930d
|
||||
|
||||
#define REG_A6XX_GPU_GMU_AO_GPU_CX_BUSY_MASK 0x0000930e
|
||||
|
||||
#define REG_A6XX_GMU_AO_AHB_FENCE_CTRL 0x00009310
|
||||
|
||||
#define REG_A6XX_GMU_AHB_FENCE_STATUS 0x00009313
|
||||
|
||||
#define REG_A6XX_GMU_RBBM_INT_UNMASKED_STATUS 0x00009315
|
||||
|
||||
#define REG_A6XX_GMU_AO_SPARE_CNTL 0x00009316
|
||||
|
||||
#define REG_A6XX_GPU_RSCC_RSC_STATUS0_DRV0 0x00008c04
|
||||
|
||||
#define REG_A6XX_GMU_RSCC_CONTROL_REQ 0x00009307
|
||||
|
||||
#define REG_A6XX_GMU_RSCC_CONTROL_ACK 0x00009308
|
||||
|
||||
#define REG_A6XX_GMU_AHB_FENCE_RANGE_0 0x00009311
|
||||
|
||||
#define REG_A6XX_GMU_AHB_FENCE_RANGE_1 0x00009312
|
||||
|
||||
#define REG_A6XX_GPU_CC_GX_GDSCR 0x00009c03
|
||||
|
||||
#define REG_A6XX_GPU_CC_GX_DOMAIN_MISC 0x00009d42
|
||||
|
||||
#define REG_A6XX_RSCC_PDC_SEQ_START_ADDR 0x00008c08
|
||||
|
||||
#define REG_A6XX_RSCC_PDC_MATCH_VALUE_LO 0x00008c09
|
||||
|
||||
#define REG_A6XX_RSCC_PDC_MATCH_VALUE_HI 0x00008c0a
|
||||
|
||||
#define REG_A6XX_RSCC_PDC_SLAVE_ID_DRV0 0x00008c0b
|
||||
|
||||
#define REG_A6XX_RSCC_HIDDEN_TCS_CMD0_ADDR 0x00008c0d
|
||||
|
||||
#define REG_A6XX_RSCC_HIDDEN_TCS_CMD0_DATA 0x00008c0e
|
||||
|
||||
#define REG_A6XX_RSCC_TIMESTAMP_UNIT0_TIMESTAMP_L_DRV0 0x00008c82
|
||||
|
||||
#define REG_A6XX_RSCC_TIMESTAMP_UNIT0_TIMESTAMP_H_DRV0 0x00008c83
|
||||
|
||||
#define REG_A6XX_RSCC_TIMESTAMP_UNIT1_EN_DRV0 0x00008c89
|
||||
|
||||
#define REG_A6XX_RSCC_TIMESTAMP_UNIT1_OUTPUT_DRV0 0x00008c8c
|
||||
|
||||
#define REG_A6XX_RSCC_OVERRIDE_START_ADDR 0x00008d00
|
||||
|
||||
#define REG_A6XX_RSCC_SEQ_BUSY_DRV0 0x00008d01
|
||||
|
||||
#define REG_A6XX_RSCC_SEQ_MEM_0_DRV0 0x00008d80
|
||||
|
||||
#define REG_A6XX_RSCC_TCS0_DRV0_STATUS 0x00008f46
|
||||
|
||||
#define REG_A6XX_RSCC_TCS1_DRV0_STATUS 0x000090ae
|
||||
|
||||
#define REG_A6XX_RSCC_TCS2_DRV0_STATUS 0x00009216
|
||||
|
||||
#define REG_A6XX_RSCC_TCS3_DRV0_STATUS 0x0000937e
|
||||
|
||||
|
||||
#endif /* A6XX_GMU_XML */
|
|
@ -0,0 +1,818 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/* Copyright (c) 2017-2018 The Linux Foundation. All rights reserved. */
|
||||
|
||||
|
||||
#include "msm_gem.h"
|
||||
#include "msm_mmu.h"
|
||||
#include "a6xx_gpu.h"
|
||||
#include "a6xx_gmu.xml.h"
|
||||
|
||||
static inline bool _a6xx_check_idle(struct msm_gpu *gpu)
|
||||
{
|
||||
struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu);
|
||||
struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
|
||||
|
||||
/* Check that the GMU is idle */
|
||||
if (!a6xx_gmu_isidle(&a6xx_gpu->gmu))
|
||||
return false;
|
||||
|
||||
/* Check tha the CX master is idle */
|
||||
if (gpu_read(gpu, REG_A6XX_RBBM_STATUS) &
|
||||
~A6XX_RBBM_STATUS_CP_AHB_BUSY_CX_MASTER)
|
||||
return false;
|
||||
|
||||
return !(gpu_read(gpu, REG_A6XX_RBBM_INT_0_STATUS) &
|
||||
A6XX_RBBM_INT_0_MASK_RBBM_HANG_DETECT);
|
||||
}
|
||||
|
||||
bool a6xx_idle(struct msm_gpu *gpu, struct msm_ringbuffer *ring)
|
||||
{
|
||||
/* wait for CP to drain ringbuffer: */
|
||||
if (!adreno_idle(gpu, ring))
|
||||
return false;
|
||||
|
||||
if (spin_until(_a6xx_check_idle(gpu))) {
|
||||
DRM_ERROR("%s: %ps: timeout waiting for GPU to idle: status %8.8X irq %8.8X rptr/wptr %d/%d\n",
|
||||
gpu->name, __builtin_return_address(0),
|
||||
gpu_read(gpu, REG_A6XX_RBBM_STATUS),
|
||||
gpu_read(gpu, REG_A6XX_RBBM_INT_0_STATUS),
|
||||
gpu_read(gpu, REG_A6XX_CP_RB_RPTR),
|
||||
gpu_read(gpu, REG_A6XX_CP_RB_WPTR));
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static void a6xx_flush(struct msm_gpu *gpu, struct msm_ringbuffer *ring)
|
||||
{
|
||||
uint32_t wptr;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&ring->lock, flags);
|
||||
|
||||
/* Copy the shadow to the actual register */
|
||||
ring->cur = ring->next;
|
||||
|
||||
/* Make sure to wrap wptr if we need to */
|
||||
wptr = get_wptr(ring);
|
||||
|
||||
spin_unlock_irqrestore(&ring->lock, flags);
|
||||
|
||||
/* Make sure everything is posted before making a decision */
|
||||
mb();
|
||||
|
||||
gpu_write(gpu, REG_A6XX_CP_RB_WPTR, wptr);
|
||||
}
|
||||
|
||||
static void a6xx_submit(struct msm_gpu *gpu, struct msm_gem_submit *submit,
|
||||
struct msm_file_private *ctx)
|
||||
{
|
||||
struct msm_drm_private *priv = gpu->dev->dev_private;
|
||||
struct msm_ringbuffer *ring = submit->ring;
|
||||
unsigned int i;
|
||||
|
||||
/* Invalidate CCU depth and color */
|
||||
OUT_PKT7(ring, CP_EVENT_WRITE, 1);
|
||||
OUT_RING(ring, PC_CCU_INVALIDATE_DEPTH);
|
||||
|
||||
OUT_PKT7(ring, CP_EVENT_WRITE, 1);
|
||||
OUT_RING(ring, PC_CCU_INVALIDATE_COLOR);
|
||||
|
||||
/* Submit the commands */
|
||||
for (i = 0; i < submit->nr_cmds; i++) {
|
||||
switch (submit->cmd[i].type) {
|
||||
case MSM_SUBMIT_CMD_IB_TARGET_BUF:
|
||||
break;
|
||||
case MSM_SUBMIT_CMD_CTX_RESTORE_BUF:
|
||||
if (priv->lastctx == ctx)
|
||||
break;
|
||||
case MSM_SUBMIT_CMD_BUF:
|
||||
OUT_PKT7(ring, CP_INDIRECT_BUFFER_PFE, 3);
|
||||
OUT_RING(ring, lower_32_bits(submit->cmd[i].iova));
|
||||
OUT_RING(ring, upper_32_bits(submit->cmd[i].iova));
|
||||
OUT_RING(ring, submit->cmd[i].size);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Write the fence to the scratch register */
|
||||
OUT_PKT4(ring, REG_A6XX_CP_SCRATCH_REG(2), 1);
|
||||
OUT_RING(ring, submit->seqno);
|
||||
|
||||
/*
|
||||
* Execute a CACHE_FLUSH_TS event. This will ensure that the
|
||||
* timestamp is written to the memory and then triggers the interrupt
|
||||
*/
|
||||
OUT_PKT7(ring, CP_EVENT_WRITE, 4);
|
||||
OUT_RING(ring, CACHE_FLUSH_TS | (1 << 31));
|
||||
OUT_RING(ring, lower_32_bits(rbmemptr(ring, fence)));
|
||||
OUT_RING(ring, upper_32_bits(rbmemptr(ring, fence)));
|
||||
OUT_RING(ring, submit->seqno);
|
||||
|
||||
a6xx_flush(gpu, ring);
|
||||
}
|
||||
|
||||
static const struct {
|
||||
u32 offset;
|
||||
u32 value;
|
||||
} a6xx_hwcg[] = {
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL_SP0, 0x22222222},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL_SP1, 0x22222222},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL_SP2, 0x22222222},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL_SP3, 0x22222222},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL2_SP0, 0x02022220},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL2_SP1, 0x02022220},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL2_SP2, 0x02022220},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL2_SP3, 0x02022220},
|
||||
{REG_A6XX_RBBM_CLOCK_DELAY_SP0, 0x00000080},
|
||||
{REG_A6XX_RBBM_CLOCK_DELAY_SP1, 0x00000080},
|
||||
{REG_A6XX_RBBM_CLOCK_DELAY_SP2, 0x00000080},
|
||||
{REG_A6XX_RBBM_CLOCK_DELAY_SP3, 0x00000080},
|
||||
{REG_A6XX_RBBM_CLOCK_HYST_SP0, 0x0000f3cf},
|
||||
{REG_A6XX_RBBM_CLOCK_HYST_SP1, 0x0000f3cf},
|
||||
{REG_A6XX_RBBM_CLOCK_HYST_SP2, 0x0000f3cf},
|
||||
{REG_A6XX_RBBM_CLOCK_HYST_SP3, 0x0000f3cf},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL_TP0, 0x02222222},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL_TP1, 0x02222222},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL_TP2, 0x02222222},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL_TP3, 0x02222222},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL2_TP0, 0x22222222},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL2_TP1, 0x22222222},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL2_TP2, 0x22222222},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL2_TP3, 0x22222222},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL3_TP0, 0x22222222},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL3_TP1, 0x22222222},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL3_TP2, 0x22222222},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL3_TP3, 0x22222222},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL4_TP0, 0x00022222},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL4_TP1, 0x00022222},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL4_TP2, 0x00022222},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL4_TP3, 0x00022222},
|
||||
{REG_A6XX_RBBM_CLOCK_HYST_TP0, 0x77777777},
|
||||
{REG_A6XX_RBBM_CLOCK_HYST_TP1, 0x77777777},
|
||||
{REG_A6XX_RBBM_CLOCK_HYST_TP2, 0x77777777},
|
||||
{REG_A6XX_RBBM_CLOCK_HYST_TP3, 0x77777777},
|
||||
{REG_A6XX_RBBM_CLOCK_HYST2_TP0, 0x77777777},
|
||||
{REG_A6XX_RBBM_CLOCK_HYST2_TP1, 0x77777777},
|
||||
{REG_A6XX_RBBM_CLOCK_HYST2_TP2, 0x77777777},
|
||||
{REG_A6XX_RBBM_CLOCK_HYST2_TP3, 0x77777777},
|
||||
{REG_A6XX_RBBM_CLOCK_HYST3_TP0, 0x77777777},
|
||||
{REG_A6XX_RBBM_CLOCK_HYST3_TP1, 0x77777777},
|
||||
{REG_A6XX_RBBM_CLOCK_HYST3_TP2, 0x77777777},
|
||||
{REG_A6XX_RBBM_CLOCK_HYST3_TP3, 0x77777777},
|
||||
{REG_A6XX_RBBM_CLOCK_HYST4_TP0, 0x00077777},
|
||||
{REG_A6XX_RBBM_CLOCK_HYST4_TP1, 0x00077777},
|
||||
{REG_A6XX_RBBM_CLOCK_HYST4_TP2, 0x00077777},
|
||||
{REG_A6XX_RBBM_CLOCK_HYST4_TP3, 0x00077777},
|
||||
{REG_A6XX_RBBM_CLOCK_DELAY_TP0, 0x11111111},
|
||||
{REG_A6XX_RBBM_CLOCK_DELAY_TP1, 0x11111111},
|
||||
{REG_A6XX_RBBM_CLOCK_DELAY_TP2, 0x11111111},
|
||||
{REG_A6XX_RBBM_CLOCK_DELAY_TP3, 0x11111111},
|
||||
{REG_A6XX_RBBM_CLOCK_DELAY2_TP0, 0x11111111},
|
||||
{REG_A6XX_RBBM_CLOCK_DELAY2_TP1, 0x11111111},
|
||||
{REG_A6XX_RBBM_CLOCK_DELAY2_TP2, 0x11111111},
|
||||
{REG_A6XX_RBBM_CLOCK_DELAY2_TP3, 0x11111111},
|
||||
{REG_A6XX_RBBM_CLOCK_DELAY3_TP0, 0x11111111},
|
||||
{REG_A6XX_RBBM_CLOCK_DELAY3_TP1, 0x11111111},
|
||||
{REG_A6XX_RBBM_CLOCK_DELAY3_TP2, 0x11111111},
|
||||
{REG_A6XX_RBBM_CLOCK_DELAY3_TP3, 0x11111111},
|
||||
{REG_A6XX_RBBM_CLOCK_DELAY4_TP0, 0x00011111},
|
||||
{REG_A6XX_RBBM_CLOCK_DELAY4_TP1, 0x00011111},
|
||||
{REG_A6XX_RBBM_CLOCK_DELAY4_TP2, 0x00011111},
|
||||
{REG_A6XX_RBBM_CLOCK_DELAY4_TP3, 0x00011111},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL_UCHE, 0x22222222},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL2_UCHE, 0x22222222},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL3_UCHE, 0x22222222},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL4_UCHE, 0x00222222},
|
||||
{REG_A6XX_RBBM_CLOCK_HYST_UCHE, 0x00000004},
|
||||
{REG_A6XX_RBBM_CLOCK_DELAY_UCHE, 0x00000002},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL_RB0, 0x22222222},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL_RB1, 0x22222222},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL_RB2, 0x22222222},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL_RB3, 0x22222222},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL2_RB0, 0x00002222},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL2_RB1, 0x00002222},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL2_RB2, 0x00002222},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL2_RB3, 0x00002222},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL_CCU0, 0x00002220},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL_CCU1, 0x00002220},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL_CCU2, 0x00002220},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL_CCU3, 0x00002220},
|
||||
{REG_A6XX_RBBM_CLOCK_HYST_RB_CCU0, 0x00040f00},
|
||||
{REG_A6XX_RBBM_CLOCK_HYST_RB_CCU1, 0x00040f00},
|
||||
{REG_A6XX_RBBM_CLOCK_HYST_RB_CCU2, 0x00040f00},
|
||||
{REG_A6XX_RBBM_CLOCK_HYST_RB_CCU3, 0x00040f00},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL_RAC, 0x05022022},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL2_RAC, 0x00005555},
|
||||
{REG_A6XX_RBBM_CLOCK_DELAY_RAC, 0x00000011},
|
||||
{REG_A6XX_RBBM_CLOCK_HYST_RAC, 0x00445044},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL_TSE_RAS_RBBM, 0x04222222},
|
||||
{REG_A6XX_RBBM_CLOCK_MODE_GPC, 0x00222222},
|
||||
{REG_A6XX_RBBM_CLOCK_MODE_VFD, 0x00002222},
|
||||
{REG_A6XX_RBBM_CLOCK_HYST_TSE_RAS_RBBM, 0x00000000},
|
||||
{REG_A6XX_RBBM_CLOCK_HYST_GPC, 0x04104004},
|
||||
{REG_A6XX_RBBM_CLOCK_HYST_VFD, 0x00000000},
|
||||
{REG_A6XX_RBBM_CLOCK_DELAY_HLSQ, 0x00000000},
|
||||
{REG_A6XX_RBBM_CLOCK_DELAY_TSE_RAS_RBBM, 0x00004000},
|
||||
{REG_A6XX_RBBM_CLOCK_DELAY_GPC, 0x00000200},
|
||||
{REG_A6XX_RBBM_CLOCK_DELAY_VFD, 0x00002222},
|
||||
{REG_A6XX_RBBM_CLOCK_DELAY_HLSQ_2, 0x00000002},
|
||||
{REG_A6XX_RBBM_CLOCK_MODE_HLSQ, 0x00002222},
|
||||
{REG_A6XX_RBBM_CLOCK_CNTL_GMU_GX, 0x00000222},
|
||||
{REG_A6XX_RBBM_CLOCK_DELAY_GMU_GX, 0x00000111},
|
||||
{REG_A6XX_RBBM_CLOCK_HYST_GMU_GX, 0x00000555}
|
||||
};
|
||||
|
||||
static void a6xx_set_hwcg(struct msm_gpu *gpu, bool state)
|
||||
{
|
||||
struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu);
|
||||
struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
|
||||
struct a6xx_gmu *gmu = &a6xx_gpu->gmu;
|
||||
unsigned int i;
|
||||
u32 val;
|
||||
|
||||
val = gpu_read(gpu, REG_A6XX_RBBM_CLOCK_CNTL);
|
||||
|
||||
/* Don't re-program the registers if they are already correct */
|
||||
if ((!state && !val) || (state && (val == 0x8aa8aa02)))
|
||||
return;
|
||||
|
||||
/* Disable SP clock before programming HWCG registers */
|
||||
gmu_rmw(gmu, REG_A6XX_GPU_GMU_GX_SPTPRAC_CLOCK_CONTROL, 1, 0);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(a6xx_hwcg); i++)
|
||||
gpu_write(gpu, a6xx_hwcg[i].offset,
|
||||
state ? a6xx_hwcg[i].value : 0);
|
||||
|
||||
/* Enable SP clock */
|
||||
gmu_rmw(gmu, REG_A6XX_GPU_GMU_GX_SPTPRAC_CLOCK_CONTROL, 0, 1);
|
||||
|
||||
gpu_write(gpu, REG_A6XX_RBBM_CLOCK_CNTL, state ? 0x8aa8aa02 : 0);
|
||||
}
|
||||
|
||||
static int a6xx_cp_init(struct msm_gpu *gpu)
|
||||
{
|
||||
struct msm_ringbuffer *ring = gpu->rb[0];
|
||||
|
||||
OUT_PKT7(ring, CP_ME_INIT, 8);
|
||||
|
||||
OUT_RING(ring, 0x0000002f);
|
||||
|
||||
/* Enable multiple hardware contexts */
|
||||
OUT_RING(ring, 0x00000003);
|
||||
|
||||
/* Enable error detection */
|
||||
OUT_RING(ring, 0x20000000);
|
||||
|
||||
/* Don't enable header dump */
|
||||
OUT_RING(ring, 0x00000000);
|
||||
OUT_RING(ring, 0x00000000);
|
||||
|
||||
/* No workarounds enabled */
|
||||
OUT_RING(ring, 0x00000000);
|
||||
|
||||
/* Pad rest of the cmds with 0's */
|
||||
OUT_RING(ring, 0x00000000);
|
||||
OUT_RING(ring, 0x00000000);
|
||||
|
||||
a6xx_flush(gpu, ring);
|
||||
return a6xx_idle(gpu, ring) ? 0 : -EINVAL;
|
||||
}
|
||||
|
||||
static int a6xx_ucode_init(struct msm_gpu *gpu)
|
||||
{
|
||||
struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu);
|
||||
struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
|
||||
|
||||
if (!a6xx_gpu->sqe_bo) {
|
||||
a6xx_gpu->sqe_bo = adreno_fw_create_bo(gpu,
|
||||
adreno_gpu->fw[ADRENO_FW_SQE], &a6xx_gpu->sqe_iova);
|
||||
|
||||
if (IS_ERR(a6xx_gpu->sqe_bo)) {
|
||||
int ret = PTR_ERR(a6xx_gpu->sqe_bo);
|
||||
|
||||
a6xx_gpu->sqe_bo = NULL;
|
||||
DRM_DEV_ERROR(&gpu->pdev->dev,
|
||||
"Could not allocate SQE ucode: %d\n", ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
gpu_write64(gpu, REG_A6XX_CP_SQE_INSTR_BASE_LO,
|
||||
REG_A6XX_CP_SQE_INSTR_BASE_HI, a6xx_gpu->sqe_iova);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define A6XX_INT_MASK (A6XX_RBBM_INT_0_MASK_CP_AHB_ERROR | \
|
||||
A6XX_RBBM_INT_0_MASK_RBBM_ATB_ASYNCFIFO_OVERFLOW | \
|
||||
A6XX_RBBM_INT_0_MASK_CP_HW_ERROR | \
|
||||
A6XX_RBBM_INT_0_MASK_CP_IB2 | \
|
||||
A6XX_RBBM_INT_0_MASK_CP_IB1 | \
|
||||
A6XX_RBBM_INT_0_MASK_CP_RB | \
|
||||
A6XX_RBBM_INT_0_MASK_CP_CACHE_FLUSH_TS | \
|
||||
A6XX_RBBM_INT_0_MASK_RBBM_ATB_BUS_OVERFLOW | \
|
||||
A6XX_RBBM_INT_0_MASK_RBBM_HANG_DETECT | \
|
||||
A6XX_RBBM_INT_0_MASK_UCHE_OOB_ACCESS | \
|
||||
A6XX_RBBM_INT_0_MASK_UCHE_TRAP_INTR)
|
||||
|
||||
static int a6xx_hw_init(struct msm_gpu *gpu)
|
||||
{
|
||||
struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu);
|
||||
struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
|
||||
int ret;
|
||||
|
||||
/* Make sure the GMU keeps the GPU on while we set it up */
|
||||
a6xx_gmu_set_oob(&a6xx_gpu->gmu, GMU_OOB_GPU_SET);
|
||||
|
||||
gpu_write(gpu, REG_A6XX_RBBM_SECVID_TSB_CNTL, 0);
|
||||
|
||||
/*
|
||||
* Disable the trusted memory range - we don't actually supported secure
|
||||
* memory rendering at this point in time and we don't want to block off
|
||||
* part of the virtual memory space.
|
||||
*/
|
||||
gpu_write64(gpu, REG_A6XX_RBBM_SECVID_TSB_TRUSTED_BASE_LO,
|
||||
REG_A6XX_RBBM_SECVID_TSB_TRUSTED_BASE_HI, 0x00000000);
|
||||
gpu_write(gpu, REG_A6XX_RBBM_SECVID_TSB_TRUSTED_SIZE, 0x00000000);
|
||||
|
||||
/* enable hardware clockgating */
|
||||
a6xx_set_hwcg(gpu, true);
|
||||
|
||||
/* VBIF start */
|
||||
gpu_write(gpu, REG_A6XX_VBIF_GATE_OFF_WRREQ_EN, 0x00000009);
|
||||
gpu_write(gpu, REG_A6XX_RBBM_VBIF_CLIENT_QOS_CNTL, 0x3);
|
||||
|
||||
/* Make all blocks contribute to the GPU BUSY perf counter */
|
||||
gpu_write(gpu, REG_A6XX_RBBM_PERFCTR_GPU_BUSY_MASKED, 0xffffffff);
|
||||
|
||||
/* Disable L2 bypass in the UCHE */
|
||||
gpu_write(gpu, REG_A6XX_UCHE_WRITE_RANGE_MAX_LO, 0xffffffc0);
|
||||
gpu_write(gpu, REG_A6XX_UCHE_WRITE_RANGE_MAX_HI, 0x0001ffff);
|
||||
gpu_write(gpu, REG_A6XX_UCHE_TRAP_BASE_LO, 0xfffff000);
|
||||
gpu_write(gpu, REG_A6XX_UCHE_TRAP_BASE_HI, 0x0001ffff);
|
||||
gpu_write(gpu, REG_A6XX_UCHE_WRITE_THRU_BASE_LO, 0xfffff000);
|
||||
gpu_write(gpu, REG_A6XX_UCHE_WRITE_THRU_BASE_HI, 0x0001ffff);
|
||||
|
||||
/* Set the GMEM VA range [0x100000:0x100000 + gpu->gmem - 1] */
|
||||
gpu_write64(gpu, REG_A6XX_UCHE_GMEM_RANGE_MIN_LO,
|
||||
REG_A6XX_UCHE_GMEM_RANGE_MIN_HI, 0x00100000);
|
||||
|
||||
gpu_write64(gpu, REG_A6XX_UCHE_GMEM_RANGE_MAX_LO,
|
||||
REG_A6XX_UCHE_GMEM_RANGE_MAX_HI,
|
||||
0x00100000 + adreno_gpu->gmem - 1);
|
||||
|
||||
gpu_write(gpu, REG_A6XX_UCHE_FILTER_CNTL, 0x804);
|
||||
gpu_write(gpu, REG_A6XX_UCHE_CACHE_WAYS, 0x4);
|
||||
|
||||
gpu_write(gpu, REG_A6XX_CP_ROQ_THRESHOLDS_2, 0x010000c0);
|
||||
gpu_write(gpu, REG_A6XX_CP_ROQ_THRESHOLDS_1, 0x8040362c);
|
||||
|
||||
/* Setting the mem pool size */
|
||||
gpu_write(gpu, REG_A6XX_CP_MEM_POOL_SIZE, 128);
|
||||
|
||||
/* Setting the primFifo thresholds default values */
|
||||
gpu_write(gpu, REG_A6XX_PC_DBG_ECO_CNTL, (0x300 << 11));
|
||||
|
||||
/* Set the AHB default slave response to "ERROR" */
|
||||
gpu_write(gpu, REG_A6XX_CP_AHB_CNTL, 0x1);
|
||||
|
||||
/* Turn on performance counters */
|
||||
gpu_write(gpu, REG_A6XX_RBBM_PERFCTR_CNTL, 0x1);
|
||||
|
||||
/* Select CP0 to always count cycles */
|
||||
gpu_write(gpu, REG_A6XX_CP_PERFCTR_CP_SEL_0, PERF_CP_ALWAYS_COUNT);
|
||||
|
||||
/* FIXME: not sure if this should live here or in a6xx_gmu.c */
|
||||
gmu_write(&a6xx_gpu->gmu, REG_A6XX_GPU_GMU_AO_GPU_CX_BUSY_MASK,
|
||||
0xff000000);
|
||||
gmu_rmw(&a6xx_gpu->gmu, REG_A6XX_GMU_CX_GMU_POWER_COUNTER_SELECT_0,
|
||||
0xff, 0x20);
|
||||
gmu_write(&a6xx_gpu->gmu, REG_A6XX_GMU_CX_GMU_POWER_COUNTER_ENABLE,
|
||||
0x01);
|
||||
|
||||
gpu_write(gpu, REG_A6XX_RB_NC_MODE_CNTL, 2 << 1);
|
||||
gpu_write(gpu, REG_A6XX_TPL1_NC_MODE_CNTL, 2 << 1);
|
||||
gpu_write(gpu, REG_A6XX_SP_NC_MODE_CNTL, 2 << 1);
|
||||
gpu_write(gpu, REG_A6XX_UCHE_MODE_CNTL, 2 << 21);
|
||||
|
||||
/* Enable fault detection */
|
||||
gpu_write(gpu, REG_A6XX_RBBM_INTERFACE_HANG_INT_CNTL,
|
||||
(1 << 30) | 0x1fffff);
|
||||
|
||||
gpu_write(gpu, REG_A6XX_UCHE_CLIENT_PF, 1);
|
||||
|
||||
/* Protect registers from the CP */
|
||||
gpu_write(gpu, REG_A6XX_CP_PROTECT_CNTL, 0x00000003);
|
||||
|
||||
gpu_write(gpu, REG_A6XX_CP_PROTECT(0),
|
||||
A6XX_PROTECT_RDONLY(0x600, 0x51));
|
||||
gpu_write(gpu, REG_A6XX_CP_PROTECT(1), A6XX_PROTECT_RW(0xae50, 0x2));
|
||||
gpu_write(gpu, REG_A6XX_CP_PROTECT(2), A6XX_PROTECT_RW(0x9624, 0x13));
|
||||
gpu_write(gpu, REG_A6XX_CP_PROTECT(3), A6XX_PROTECT_RW(0x8630, 0x8));
|
||||
gpu_write(gpu, REG_A6XX_CP_PROTECT(4), A6XX_PROTECT_RW(0x9e70, 0x1));
|
||||
gpu_write(gpu, REG_A6XX_CP_PROTECT(5), A6XX_PROTECT_RW(0x9e78, 0x187));
|
||||
gpu_write(gpu, REG_A6XX_CP_PROTECT(6), A6XX_PROTECT_RW(0xf000, 0x810));
|
||||
gpu_write(gpu, REG_A6XX_CP_PROTECT(7),
|
||||
A6XX_PROTECT_RDONLY(0xfc00, 0x3));
|
||||
gpu_write(gpu, REG_A6XX_CP_PROTECT(8), A6XX_PROTECT_RW(0x50e, 0x0));
|
||||
gpu_write(gpu, REG_A6XX_CP_PROTECT(9), A6XX_PROTECT_RDONLY(0x50f, 0x0));
|
||||
gpu_write(gpu, REG_A6XX_CP_PROTECT(10), A6XX_PROTECT_RW(0x510, 0x0));
|
||||
gpu_write(gpu, REG_A6XX_CP_PROTECT(11),
|
||||
A6XX_PROTECT_RDONLY(0x0, 0x4f9));
|
||||
gpu_write(gpu, REG_A6XX_CP_PROTECT(12),
|
||||
A6XX_PROTECT_RDONLY(0x501, 0xa));
|
||||
gpu_write(gpu, REG_A6XX_CP_PROTECT(13),
|
||||
A6XX_PROTECT_RDONLY(0x511, 0x44));
|
||||
gpu_write(gpu, REG_A6XX_CP_PROTECT(14), A6XX_PROTECT_RW(0xe00, 0xe));
|
||||
gpu_write(gpu, REG_A6XX_CP_PROTECT(15), A6XX_PROTECT_RW(0x8e00, 0x0));
|
||||
gpu_write(gpu, REG_A6XX_CP_PROTECT(16), A6XX_PROTECT_RW(0x8e50, 0xf));
|
||||
gpu_write(gpu, REG_A6XX_CP_PROTECT(17), A6XX_PROTECT_RW(0xbe02, 0x0));
|
||||
gpu_write(gpu, REG_A6XX_CP_PROTECT(18),
|
||||
A6XX_PROTECT_RW(0xbe20, 0x11f3));
|
||||
gpu_write(gpu, REG_A6XX_CP_PROTECT(19), A6XX_PROTECT_RW(0x800, 0x82));
|
||||
gpu_write(gpu, REG_A6XX_CP_PROTECT(20), A6XX_PROTECT_RW(0x8a0, 0x8));
|
||||
gpu_write(gpu, REG_A6XX_CP_PROTECT(21), A6XX_PROTECT_RW(0x8ab, 0x19));
|
||||
gpu_write(gpu, REG_A6XX_CP_PROTECT(22), A6XX_PROTECT_RW(0x900, 0x4d));
|
||||
gpu_write(gpu, REG_A6XX_CP_PROTECT(23), A6XX_PROTECT_RW(0x98d, 0x76));
|
||||
gpu_write(gpu, REG_A6XX_CP_PROTECT(24),
|
||||
A6XX_PROTECT_RDONLY(0x8d0, 0x23));
|
||||
gpu_write(gpu, REG_A6XX_CP_PROTECT(25),
|
||||
A6XX_PROTECT_RDONLY(0x980, 0x4));
|
||||
gpu_write(gpu, REG_A6XX_CP_PROTECT(26), A6XX_PROTECT_RW(0xa630, 0x0));
|
||||
|
||||
/* Enable interrupts */
|
||||
gpu_write(gpu, REG_A6XX_RBBM_INT_0_MASK, A6XX_INT_MASK);
|
||||
|
||||
ret = adreno_hw_init(gpu);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
ret = a6xx_ucode_init(gpu);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
/* Always come up on rb 0 */
|
||||
a6xx_gpu->cur_ring = gpu->rb[0];
|
||||
|
||||
/* Enable the SQE_to start the CP engine */
|
||||
gpu_write(gpu, REG_A6XX_CP_SQE_CNTL, 1);
|
||||
|
||||
ret = a6xx_cp_init(gpu);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
gpu_write(gpu, REG_A6XX_RBBM_SECVID_TRUST_CNTL, 0x0);
|
||||
|
||||
out:
|
||||
/*
|
||||
* Tell the GMU that we are done touching the GPU and it can start power
|
||||
* management
|
||||
*/
|
||||
a6xx_gmu_clear_oob(&a6xx_gpu->gmu, GMU_OOB_GPU_SET);
|
||||
|
||||
/* Take the GMU out of its special boot mode */
|
||||
a6xx_gmu_clear_oob(&a6xx_gpu->gmu, GMU_OOB_BOOT_SLUMBER);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void a6xx_dump(struct msm_gpu *gpu)
|
||||
{
|
||||
dev_info(&gpu->pdev->dev, "status: %08x\n",
|
||||
gpu_read(gpu, REG_A6XX_RBBM_STATUS));
|
||||
adreno_dump(gpu);
|
||||
}
|
||||
|
||||
#define VBIF_RESET_ACK_TIMEOUT 100
|
||||
#define VBIF_RESET_ACK_MASK 0x00f0
|
||||
|
||||
static void a6xx_recover(struct msm_gpu *gpu)
|
||||
{
|
||||
struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu);
|
||||
struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
|
||||
int i;
|
||||
|
||||
adreno_dump_info(gpu);
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
dev_info(&gpu->pdev->dev, "CP_SCRATCH_REG%d: %u\n", i,
|
||||
gpu_read(gpu, REG_A6XX_CP_SCRATCH_REG(i)));
|
||||
|
||||
if (hang_debug)
|
||||
a6xx_dump(gpu);
|
||||
|
||||
/*
|
||||
* Turn off keep alive that might have been enabled by the hang
|
||||
* interrupt
|
||||
*/
|
||||
gmu_write(&a6xx_gpu->gmu, REG_A6XX_GMU_GMU_PWR_COL_KEEPALIVE, 0);
|
||||
|
||||
gpu->funcs->pm_suspend(gpu);
|
||||
gpu->funcs->pm_resume(gpu);
|
||||
|
||||
msm_gpu_hw_init(gpu);
|
||||
}
|
||||
|
||||
static int a6xx_fault_handler(void *arg, unsigned long iova, int flags)
|
||||
{
|
||||
struct msm_gpu *gpu = arg;
|
||||
|
||||
pr_warn_ratelimited("*** gpu fault: iova=%08lx, flags=%d (%u,%u,%u,%u)\n",
|
||||
iova, flags,
|
||||
gpu_read(gpu, REG_A6XX_CP_SCRATCH_REG(4)),
|
||||
gpu_read(gpu, REG_A6XX_CP_SCRATCH_REG(5)),
|
||||
gpu_read(gpu, REG_A6XX_CP_SCRATCH_REG(6)),
|
||||
gpu_read(gpu, REG_A6XX_CP_SCRATCH_REG(7)));
|
||||
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
static void a6xx_cp_hw_err_irq(struct msm_gpu *gpu)
|
||||
{
|
||||
u32 status = gpu_read(gpu, REG_A6XX_CP_INTERRUPT_STATUS);
|
||||
|
||||
if (status & A6XX_CP_INT_CP_OPCODE_ERROR) {
|
||||
u32 val;
|
||||
|
||||
gpu_write(gpu, REG_A6XX_CP_SQE_STAT_ADDR, 1);
|
||||
val = gpu_read(gpu, REG_A6XX_CP_SQE_STAT_DATA);
|
||||
dev_err_ratelimited(&gpu->pdev->dev,
|
||||
"CP | opcode error | possible opcode=0x%8.8X\n",
|
||||
val);
|
||||
}
|
||||
|
||||
if (status & A6XX_CP_INT_CP_UCODE_ERROR)
|
||||
dev_err_ratelimited(&gpu->pdev->dev,
|
||||
"CP ucode error interrupt\n");
|
||||
|
||||
if (status & A6XX_CP_INT_CP_HW_FAULT_ERROR)
|
||||
dev_err_ratelimited(&gpu->pdev->dev, "CP | HW fault | status=0x%8.8X\n",
|
||||
gpu_read(gpu, REG_A6XX_CP_HW_FAULT));
|
||||
|
||||
if (status & A6XX_CP_INT_CP_REGISTER_PROTECTION_ERROR) {
|
||||
u32 val = gpu_read(gpu, REG_A6XX_CP_PROTECT_STATUS);
|
||||
|
||||
dev_err_ratelimited(&gpu->pdev->dev,
|
||||
"CP | protected mode error | %s | addr=0x%8.8X | status=0x%8.8X\n",
|
||||
val & (1 << 20) ? "READ" : "WRITE",
|
||||
(val & 0x3ffff), val);
|
||||
}
|
||||
|
||||
if (status & A6XX_CP_INT_CP_AHB_ERROR)
|
||||
dev_err_ratelimited(&gpu->pdev->dev, "CP AHB error interrupt\n");
|
||||
|
||||
if (status & A6XX_CP_INT_CP_VSD_PARITY_ERROR)
|
||||
dev_err_ratelimited(&gpu->pdev->dev, "CP VSD decoder parity error\n");
|
||||
|
||||
if (status & A6XX_CP_INT_CP_ILLEGAL_INSTR_ERROR)
|
||||
dev_err_ratelimited(&gpu->pdev->dev, "CP illegal instruction error\n");
|
||||
|
||||
}
|
||||
|
||||
static void a6xx_fault_detect_irq(struct msm_gpu *gpu)
|
||||
{
|
||||
struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu);
|
||||
struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
|
||||
struct drm_device *dev = gpu->dev;
|
||||
struct msm_drm_private *priv = dev->dev_private;
|
||||
struct msm_ringbuffer *ring = gpu->funcs->active_ring(gpu);
|
||||
|
||||
/*
|
||||
* Force the GPU to stay on until after we finish
|
||||
* collecting information
|
||||
*/
|
||||
gmu_write(&a6xx_gpu->gmu, REG_A6XX_GMU_GMU_PWR_COL_KEEPALIVE, 1);
|
||||
|
||||
DRM_DEV_ERROR(&gpu->pdev->dev,
|
||||
"gpu fault ring %d fence %x status %8.8X rb %4.4x/%4.4x ib1 %16.16llX/%4.4x ib2 %16.16llX/%4.4x\n",
|
||||
ring ? ring->id : -1, ring ? ring->seqno : 0,
|
||||
gpu_read(gpu, REG_A6XX_RBBM_STATUS),
|
||||
gpu_read(gpu, REG_A6XX_CP_RB_RPTR),
|
||||
gpu_read(gpu, REG_A6XX_CP_RB_WPTR),
|
||||
gpu_read64(gpu, REG_A6XX_CP_IB1_BASE, REG_A6XX_CP_IB1_BASE_HI),
|
||||
gpu_read(gpu, REG_A6XX_CP_IB1_REM_SIZE),
|
||||
gpu_read64(gpu, REG_A6XX_CP_IB2_BASE, REG_A6XX_CP_IB2_BASE_HI),
|
||||
gpu_read(gpu, REG_A6XX_CP_IB2_REM_SIZE));
|
||||
|
||||
/* Turn off the hangcheck timer to keep it from bothering us */
|
||||
del_timer(&gpu->hangcheck_timer);
|
||||
|
||||
queue_work(priv->wq, &gpu->recover_work);
|
||||
}
|
||||
|
||||
static irqreturn_t a6xx_irq(struct msm_gpu *gpu)
|
||||
{
|
||||
u32 status = gpu_read(gpu, REG_A6XX_RBBM_INT_0_STATUS);
|
||||
|
||||
gpu_write(gpu, REG_A6XX_RBBM_INT_CLEAR_CMD, status);
|
||||
|
||||
if (status & A6XX_RBBM_INT_0_MASK_RBBM_HANG_DETECT)
|
||||
a6xx_fault_detect_irq(gpu);
|
||||
|
||||
if (status & A6XX_RBBM_INT_0_MASK_CP_AHB_ERROR)
|
||||
dev_err_ratelimited(&gpu->pdev->dev, "CP | AHB bus error\n");
|
||||
|
||||
if (status & A6XX_RBBM_INT_0_MASK_CP_HW_ERROR)
|
||||
a6xx_cp_hw_err_irq(gpu);
|
||||
|
||||
if (status & A6XX_RBBM_INT_0_MASK_RBBM_ATB_ASYNCFIFO_OVERFLOW)
|
||||
dev_err_ratelimited(&gpu->pdev->dev, "RBBM | ATB ASYNC overflow\n");
|
||||
|
||||
if (status & A6XX_RBBM_INT_0_MASK_RBBM_ATB_BUS_OVERFLOW)
|
||||
dev_err_ratelimited(&gpu->pdev->dev, "RBBM | ATB bus overflow\n");
|
||||
|
||||
if (status & A6XX_RBBM_INT_0_MASK_UCHE_OOB_ACCESS)
|
||||
dev_err_ratelimited(&gpu->pdev->dev, "UCHE | Out of bounds access\n");
|
||||
|
||||
if (status & A6XX_RBBM_INT_0_MASK_CP_CACHE_FLUSH_TS)
|
||||
msm_gpu_retire(gpu);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static const u32 a6xx_register_offsets[REG_ADRENO_REGISTER_MAX] = {
|
||||
REG_ADRENO_DEFINE(REG_ADRENO_CP_RB_BASE, REG_A6XX_CP_RB_BASE),
|
||||
REG_ADRENO_DEFINE(REG_ADRENO_CP_RB_BASE_HI, REG_A6XX_CP_RB_BASE_HI),
|
||||
REG_ADRENO_DEFINE(REG_ADRENO_CP_RB_RPTR_ADDR,
|
||||
REG_A6XX_CP_RB_RPTR_ADDR_LO),
|
||||
REG_ADRENO_DEFINE(REG_ADRENO_CP_RB_RPTR_ADDR_HI,
|
||||
REG_A6XX_CP_RB_RPTR_ADDR_HI),
|
||||
REG_ADRENO_DEFINE(REG_ADRENO_CP_RB_RPTR, REG_A6XX_CP_RB_RPTR),
|
||||
REG_ADRENO_DEFINE(REG_ADRENO_CP_RB_WPTR, REG_A6XX_CP_RB_WPTR),
|
||||
REG_ADRENO_DEFINE(REG_ADRENO_CP_RB_CNTL, REG_A6XX_CP_RB_CNTL),
|
||||
};
|
||||
|
||||
static const u32 a6xx_registers[] = {
|
||||
0x0000, 0x0002, 0x0010, 0x0010, 0x0012, 0x0012, 0x0018, 0x001b,
|
||||
0x001e, 0x0032, 0x0038, 0x003c, 0x0042, 0x0042, 0x0044, 0x0044,
|
||||
0x0047, 0x0047, 0x0056, 0x0056, 0x00ad, 0x00ae, 0x00b0, 0x00fb,
|
||||
0x0100, 0x011d, 0x0200, 0x020d, 0x0210, 0x0213, 0x0218, 0x023d,
|
||||
0x0400, 0x04f9, 0x0500, 0x0500, 0x0505, 0x050b, 0x050e, 0x0511,
|
||||
0x0533, 0x0533, 0x0540, 0x0555, 0x0800, 0x0808, 0x0810, 0x0813,
|
||||
0x0820, 0x0821, 0x0823, 0x0827, 0x0830, 0x0833, 0x0840, 0x0843,
|
||||
0x084f, 0x086f, 0x0880, 0x088a, 0x08a0, 0x08ab, 0x08c0, 0x08c4,
|
||||
0x08d0, 0x08dd, 0x08f0, 0x08f3, 0x0900, 0x0903, 0x0908, 0x0911,
|
||||
0x0928, 0x093e, 0x0942, 0x094d, 0x0980, 0x0984, 0x098d, 0x0996,
|
||||
0x0998, 0x099e, 0x09a0, 0x09a6, 0x09a8, 0x09ae, 0x09b0, 0x09b1,
|
||||
0x09c2, 0x09c8, 0x0a00, 0x0a03, 0x0c00, 0x0c04, 0x0c06, 0x0c06,
|
||||
0x0c10, 0x0cd9, 0x0e00, 0x0e0e, 0x0e10, 0x0e13, 0x0e17, 0x0e19,
|
||||
0x0e1c, 0x0e2b, 0x0e30, 0x0e32, 0x0e38, 0x0e39, 0x8600, 0x8601,
|
||||
0x8610, 0x861b, 0x8620, 0x8620, 0x8628, 0x862b, 0x8630, 0x8637,
|
||||
0x8e01, 0x8e01, 0x8e04, 0x8e05, 0x8e07, 0x8e08, 0x8e0c, 0x8e0c,
|
||||
0x8e10, 0x8e1c, 0x8e20, 0x8e25, 0x8e28, 0x8e28, 0x8e2c, 0x8e2f,
|
||||
0x8e3b, 0x8e3e, 0x8e40, 0x8e43, 0x8e50, 0x8e5e, 0x8e70, 0x8e77,
|
||||
0x9600, 0x9604, 0x9624, 0x9637, 0x9e00, 0x9e01, 0x9e03, 0x9e0e,
|
||||
0x9e11, 0x9e16, 0x9e19, 0x9e19, 0x9e1c, 0x9e1c, 0x9e20, 0x9e23,
|
||||
0x9e30, 0x9e31, 0x9e34, 0x9e34, 0x9e70, 0x9e72, 0x9e78, 0x9e79,
|
||||
0x9e80, 0x9fff, 0xa600, 0xa601, 0xa603, 0xa603, 0xa60a, 0xa60a,
|
||||
0xa610, 0xa617, 0xa630, 0xa630,
|
||||
~0
|
||||
};
|
||||
|
||||
static int a6xx_pm_resume(struct msm_gpu *gpu)
|
||||
{
|
||||
struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu);
|
||||
struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
|
||||
int ret;
|
||||
|
||||
ret = a6xx_gmu_resume(a6xx_gpu);
|
||||
|
||||
gpu->needs_hw_init = true;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int a6xx_pm_suspend(struct msm_gpu *gpu)
|
||||
{
|
||||
struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu);
|
||||
struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
|
||||
|
||||
/*
|
||||
* Make sure the GMU is idle before continuing (because some transitions
|
||||
* may use VBIF
|
||||
*/
|
||||
a6xx_gmu_wait_for_idle(a6xx_gpu);
|
||||
|
||||
/* Clear the VBIF pipe before shutting down */
|
||||
/* FIXME: This accesses the GPU - do we need to make sure it is on? */
|
||||
gpu_write(gpu, REG_A6XX_VBIF_XIN_HALT_CTRL0, 0xf);
|
||||
spin_until((gpu_read(gpu, REG_A6XX_VBIF_XIN_HALT_CTRL1) & 0xf) == 0xf);
|
||||
gpu_write(gpu, REG_A6XX_VBIF_XIN_HALT_CTRL0, 0);
|
||||
|
||||
return a6xx_gmu_stop(a6xx_gpu);
|
||||
}
|
||||
|
||||
static int a6xx_get_timestamp(struct msm_gpu *gpu, uint64_t *value)
|
||||
{
|
||||
struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu);
|
||||
struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
|
||||
|
||||
/* Force the GPU power on so we can read this register */
|
||||
a6xx_gmu_set_oob(&a6xx_gpu->gmu, GMU_OOB_GPU_SET);
|
||||
|
||||
*value = gpu_read64(gpu, REG_A6XX_RBBM_PERFCTR_CP_0_LO,
|
||||
REG_A6XX_RBBM_PERFCTR_CP_0_HI);
|
||||
|
||||
a6xx_gmu_clear_oob(&a6xx_gpu->gmu, GMU_OOB_GPU_SET);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_DEBUG_FS) || defined(CONFIG_DEV_COREDUMP)
|
||||
static void a6xx_show(struct msm_gpu *gpu, struct msm_gpu_state *state,
|
||||
struct drm_printer *p)
|
||||
{
|
||||
adreno_show(gpu, state, p);
|
||||
}
|
||||
#endif
|
||||
|
||||
static struct msm_ringbuffer *a6xx_active_ring(struct msm_gpu *gpu)
|
||||
{
|
||||
struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu);
|
||||
struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
|
||||
|
||||
return a6xx_gpu->cur_ring;
|
||||
}
|
||||
|
||||
static void a6xx_destroy(struct msm_gpu *gpu)
|
||||
{
|
||||
struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu);
|
||||
struct a6xx_gpu *a6xx_gpu = to_a6xx_gpu(adreno_gpu);
|
||||
|
||||
if (a6xx_gpu->sqe_bo) {
|
||||
if (a6xx_gpu->sqe_iova)
|
||||
msm_gem_put_iova(a6xx_gpu->sqe_bo, gpu->aspace);
|
||||
drm_gem_object_unreference_unlocked(a6xx_gpu->sqe_bo);
|
||||
}
|
||||
|
||||
a6xx_gmu_remove(a6xx_gpu);
|
||||
|
||||
adreno_gpu_cleanup(adreno_gpu);
|
||||
kfree(a6xx_gpu);
|
||||
}
|
||||
|
||||
static const struct adreno_gpu_funcs funcs = {
|
||||
.base = {
|
||||
.get_param = adreno_get_param,
|
||||
.hw_init = a6xx_hw_init,
|
||||
.pm_suspend = a6xx_pm_suspend,
|
||||
.pm_resume = a6xx_pm_resume,
|
||||
.recover = a6xx_recover,
|
||||
.submit = a6xx_submit,
|
||||
.flush = a6xx_flush,
|
||||
.active_ring = a6xx_active_ring,
|
||||
.irq = a6xx_irq,
|
||||
.destroy = a6xx_destroy,
|
||||
#if defined(CONFIG_DEBUG_FS) || defined(CONFIG_DEV_COREDUMP)
|
||||
.show = a6xx_show,
|
||||
#endif
|
||||
},
|
||||
.get_timestamp = a6xx_get_timestamp,
|
||||
};
|
||||
|
||||
struct msm_gpu *a6xx_gpu_init(struct drm_device *dev)
|
||||
{
|
||||
struct msm_drm_private *priv = dev->dev_private;
|
||||
struct platform_device *pdev = priv->gpu_pdev;
|
||||
struct device_node *node;
|
||||
struct a6xx_gpu *a6xx_gpu;
|
||||
struct adreno_gpu *adreno_gpu;
|
||||
struct msm_gpu *gpu;
|
||||
int ret;
|
||||
|
||||
a6xx_gpu = kzalloc(sizeof(*a6xx_gpu), GFP_KERNEL);
|
||||
if (!a6xx_gpu)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
adreno_gpu = &a6xx_gpu->base;
|
||||
gpu = &adreno_gpu->base;
|
||||
|
||||
adreno_gpu->registers = a6xx_registers;
|
||||
adreno_gpu->reg_offsets = a6xx_register_offsets;
|
||||
|
||||
ret = adreno_gpu_init(dev, pdev, adreno_gpu, &funcs, 1);
|
||||
if (ret) {
|
||||
a6xx_destroy(&(a6xx_gpu->base.base));
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
/* Check if there is a GMU phandle and set it up */
|
||||
node = of_parse_phandle(pdev->dev.of_node, "gmu", 0);
|
||||
|
||||
/* FIXME: How do we gracefully handle this? */
|
||||
BUG_ON(!node);
|
||||
|
||||
ret = a6xx_gmu_probe(a6xx_gpu, node);
|
||||
if (ret) {
|
||||
a6xx_destroy(&(a6xx_gpu->base.base));
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
if (gpu->aspace)
|
||||
msm_mmu_set_fault_handler(gpu->aspace->mmu, gpu,
|
||||
a6xx_fault_handler);
|
||||
|
||||
return gpu;
|
||||
}
|
|
@ -0,0 +1,60 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/* Copyright (c) 2017 The Linux Foundation. All rights reserved. */
|
||||
|
||||
#ifndef __A6XX_GPU_H__
|
||||
#define __A6XX_GPU_H__
|
||||
|
||||
|
||||
#include "adreno_gpu.h"
|
||||
#include "a6xx.xml.h"
|
||||
|
||||
#include "a6xx_gmu.h"
|
||||
|
||||
extern bool hang_debug;
|
||||
|
||||
struct a6xx_gpu {
|
||||
struct adreno_gpu base;
|
||||
|
||||
struct drm_gem_object *sqe_bo;
|
||||
uint64_t sqe_iova;
|
||||
|
||||
struct msm_ringbuffer *cur_ring;
|
||||
|
||||
struct a6xx_gmu gmu;
|
||||
};
|
||||
|
||||
#define to_a6xx_gpu(x) container_of(x, struct a6xx_gpu, base)
|
||||
|
||||
/*
|
||||
* Given a register and a count, return a value to program into
|
||||
* REG_CP_PROTECT_REG(n) - this will block both reads and writes for _len
|
||||
* registers starting at _reg.
|
||||
*/
|
||||
#define A6XX_PROTECT_RW(_reg, _len) \
|
||||
((1 << 31) | \
|
||||
(((_len) & 0x3FFF) << 18) | ((_reg) & 0x3FFFF))
|
||||
|
||||
/*
|
||||
* Same as above, but allow reads over the range. For areas of mixed use (such
|
||||
* as performance counters) this allows us to protect a much larger range with a
|
||||
* single register
|
||||
*/
|
||||
#define A6XX_PROTECT_RDONLY(_reg, _len) \
|
||||
((((_len) & 0x3FFF) << 18) | ((_reg) & 0x3FFFF))
|
||||
|
||||
|
||||
int a6xx_gmu_resume(struct a6xx_gpu *gpu);
|
||||
int a6xx_gmu_stop(struct a6xx_gpu *gpu);
|
||||
|
||||
int a6xx_gmu_wait_for_idle(struct a6xx_gpu *gpu);
|
||||
|
||||
int a6xx_gmu_reset(struct a6xx_gpu *a6xx_gpu);
|
||||
bool a6xx_gmu_isidle(struct a6xx_gmu *gmu);
|
||||
|
||||
int a6xx_gmu_set_oob(struct a6xx_gmu *gmu, enum a6xx_gmu_oob_state state);
|
||||
void a6xx_gmu_clear_oob(struct a6xx_gmu *gmu, enum a6xx_gmu_oob_state state);
|
||||
|
||||
int a6xx_gmu_probe(struct a6xx_gpu *a6xx_gpu, struct device_node *node);
|
||||
void a6xx_gmu_remove(struct a6xx_gpu *a6xx_gpu);
|
||||
|
||||
#endif /* __A6XX_GPU_H__ */
|
|
@ -0,0 +1,435 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
/* Copyright (c) 2017-2018 The Linux Foundation. All rights reserved. */
|
||||
|
||||
#include <linux/completion.h>
|
||||
#include <linux/circ_buf.h>
|
||||
#include <linux/list.h>
|
||||
|
||||
#include "a6xx_gmu.h"
|
||||
#include "a6xx_gmu.xml.h"
|
||||
|
||||
#define HFI_MSG_ID(val) [val] = #val
|
||||
|
||||
static const char * const a6xx_hfi_msg_id[] = {
|
||||
HFI_MSG_ID(HFI_H2F_MSG_INIT),
|
||||
HFI_MSG_ID(HFI_H2F_MSG_FW_VERSION),
|
||||
HFI_MSG_ID(HFI_H2F_MSG_BW_TABLE),
|
||||
HFI_MSG_ID(HFI_H2F_MSG_PERF_TABLE),
|
||||
HFI_MSG_ID(HFI_H2F_MSG_TEST),
|
||||
};
|
||||
|
||||
static int a6xx_hfi_queue_read(struct a6xx_hfi_queue *queue, u32 *data,
|
||||
u32 dwords)
|
||||
{
|
||||
struct a6xx_hfi_queue_header *header = queue->header;
|
||||
u32 i, hdr, index = header->read_index;
|
||||
|
||||
if (header->read_index == header->write_index) {
|
||||
header->rx_request = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
hdr = queue->data[index];
|
||||
|
||||
/*
|
||||
* If we are to assume that the GMU firmware is in fact a rational actor
|
||||
* and is programmed to not send us a larger response than we expect
|
||||
* then we can also assume that if the header size is unexpectedly large
|
||||
* that it is due to memory corruption and/or hardware failure. In this
|
||||
* case the only reasonable course of action is to BUG() to help harden
|
||||
* the failure.
|
||||
*/
|
||||
|
||||
BUG_ON(HFI_HEADER_SIZE(hdr) > dwords);
|
||||
|
||||
for (i = 0; i < HFI_HEADER_SIZE(hdr); i++) {
|
||||
data[i] = queue->data[index];
|
||||
index = (index + 1) % header->size;
|
||||
}
|
||||
|
||||
header->read_index = index;
|
||||
return HFI_HEADER_SIZE(hdr);
|
||||
}
|
||||
|
||||
static int a6xx_hfi_queue_write(struct a6xx_gmu *gmu,
|
||||
struct a6xx_hfi_queue *queue, u32 *data, u32 dwords)
|
||||
{
|
||||
struct a6xx_hfi_queue_header *header = queue->header;
|
||||
u32 i, space, index = header->write_index;
|
||||
|
||||
spin_lock(&queue->lock);
|
||||
|
||||
space = CIRC_SPACE(header->write_index, header->read_index,
|
||||
header->size);
|
||||
if (space < dwords) {
|
||||
header->dropped++;
|
||||
spin_unlock(&queue->lock);
|
||||
return -ENOSPC;
|
||||
}
|
||||
|
||||
for (i = 0; i < dwords; i++) {
|
||||
queue->data[index] = data[i];
|
||||
index = (index + 1) % header->size;
|
||||
}
|
||||
|
||||
header->write_index = index;
|
||||
spin_unlock(&queue->lock);
|
||||
|
||||
gmu_write(gmu, REG_A6XX_GMU_HOST2GMU_INTR_SET, 0x01);
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct a6xx_hfi_response {
|
||||
u32 id;
|
||||
u32 seqnum;
|
||||
struct list_head node;
|
||||
struct completion complete;
|
||||
|
||||
u32 error;
|
||||
u32 payload[16];
|
||||
};
|
||||
|
||||
/*
|
||||
* Incoming HFI ack messages can come in out of order so we need to store all
|
||||
* the pending messages on a list until they are handled.
|
||||
*/
|
||||
static spinlock_t hfi_ack_lock = __SPIN_LOCK_UNLOCKED(message_lock);
|
||||
static LIST_HEAD(hfi_ack_list);
|
||||
|
||||
static void a6xx_hfi_handle_ack(struct a6xx_gmu *gmu,
|
||||
struct a6xx_hfi_msg_response *msg)
|
||||
{
|
||||
struct a6xx_hfi_response *resp;
|
||||
u32 id, seqnum;
|
||||
|
||||
/* msg->ret_header contains the header of the message being acked */
|
||||
id = HFI_HEADER_ID(msg->ret_header);
|
||||
seqnum = HFI_HEADER_SEQNUM(msg->ret_header);
|
||||
|
||||
spin_lock(&hfi_ack_lock);
|
||||
list_for_each_entry(resp, &hfi_ack_list, node) {
|
||||
if (resp->id == id && resp->seqnum == seqnum) {
|
||||
resp->error = msg->error;
|
||||
memcpy(resp->payload, msg->payload,
|
||||
sizeof(resp->payload));
|
||||
|
||||
complete(&resp->complete);
|
||||
spin_unlock(&hfi_ack_lock);
|
||||
return;
|
||||
}
|
||||
}
|
||||
spin_unlock(&hfi_ack_lock);
|
||||
|
||||
dev_err(gmu->dev, "Nobody was waiting for HFI message %d\n", seqnum);
|
||||
}
|
||||
|
||||
static void a6xx_hfi_handle_error(struct a6xx_gmu *gmu,
|
||||
struct a6xx_hfi_msg_response *msg)
|
||||
{
|
||||
struct a6xx_hfi_msg_error *error = (struct a6xx_hfi_msg_error *) msg;
|
||||
|
||||
dev_err(gmu->dev, "GMU firmware error %d\n", error->code);
|
||||
}
|
||||
|
||||
void a6xx_hfi_task(unsigned long data)
|
||||
{
|
||||
struct a6xx_gmu *gmu = (struct a6xx_gmu *) data;
|
||||
struct a6xx_hfi_queue *queue = &gmu->queues[HFI_RESPONSE_QUEUE];
|
||||
struct a6xx_hfi_msg_response resp;
|
||||
|
||||
for (;;) {
|
||||
u32 id;
|
||||
int ret = a6xx_hfi_queue_read(queue, (u32 *) &resp,
|
||||
sizeof(resp) >> 2);
|
||||
|
||||
/* Returns the number of bytes copied or negative on error */
|
||||
if (ret <= 0) {
|
||||
if (ret < 0)
|
||||
dev_err(gmu->dev,
|
||||
"Unable to read the HFI message queue\n");
|
||||
break;
|
||||
}
|
||||
|
||||
id = HFI_HEADER_ID(resp.header);
|
||||
|
||||
if (id == HFI_F2H_MSG_ACK)
|
||||
a6xx_hfi_handle_ack(gmu, &resp);
|
||||
else if (id == HFI_F2H_MSG_ERROR)
|
||||
a6xx_hfi_handle_error(gmu, &resp);
|
||||
}
|
||||
}
|
||||
|
||||
static int a6xx_hfi_send_msg(struct a6xx_gmu *gmu, int id,
|
||||
void *data, u32 size, u32 *payload, u32 payload_size)
|
||||
{
|
||||
struct a6xx_hfi_queue *queue = &gmu->queues[HFI_COMMAND_QUEUE];
|
||||
struct a6xx_hfi_response resp = { 0 };
|
||||
int ret, dwords = size >> 2;
|
||||
u32 seqnum;
|
||||
|
||||
seqnum = atomic_inc_return(&queue->seqnum) % 0xfff;
|
||||
|
||||
/* First dword of the message is the message header - fill it in */
|
||||
*((u32 *) data) = (seqnum << 20) | (HFI_MSG_CMD << 16) |
|
||||
(dwords << 8) | id;
|
||||
|
||||
init_completion(&resp.complete);
|
||||
resp.id = id;
|
||||
resp.seqnum = seqnum;
|
||||
|
||||
spin_lock_bh(&hfi_ack_lock);
|
||||
list_add_tail(&resp.node, &hfi_ack_list);
|
||||
spin_unlock_bh(&hfi_ack_lock);
|
||||
|
||||
ret = a6xx_hfi_queue_write(gmu, queue, data, dwords);
|
||||
if (ret) {
|
||||
dev_err(gmu->dev, "Unable to send message %s id %d\n",
|
||||
a6xx_hfi_msg_id[id], seqnum);
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Wait up to 5 seconds for the response */
|
||||
ret = wait_for_completion_timeout(&resp.complete,
|
||||
msecs_to_jiffies(5000));
|
||||
if (!ret) {
|
||||
dev_err(gmu->dev,
|
||||
"Message %s id %d timed out waiting for response\n",
|
||||
a6xx_hfi_msg_id[id], seqnum);
|
||||
ret = -ETIMEDOUT;
|
||||
} else
|
||||
ret = 0;
|
||||
|
||||
out:
|
||||
spin_lock_bh(&hfi_ack_lock);
|
||||
list_del(&resp.node);
|
||||
spin_unlock_bh(&hfi_ack_lock);
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (resp.error) {
|
||||
dev_err(gmu->dev, "Message %s id %d returned error %d\n",
|
||||
a6xx_hfi_msg_id[id], seqnum, resp.error);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (payload && payload_size) {
|
||||
int copy = min_t(u32, payload_size, sizeof(resp.payload));
|
||||
|
||||
memcpy(payload, resp.payload, copy);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int a6xx_hfi_send_gmu_init(struct a6xx_gmu *gmu, int boot_state)
|
||||
{
|
||||
struct a6xx_hfi_msg_gmu_init_cmd msg = { 0 };
|
||||
|
||||
msg.dbg_buffer_addr = (u32) gmu->debug->iova;
|
||||
msg.dbg_buffer_size = (u32) gmu->debug->size;
|
||||
msg.boot_state = boot_state;
|
||||
|
||||
return a6xx_hfi_send_msg(gmu, HFI_H2F_MSG_INIT, &msg, sizeof(msg),
|
||||
NULL, 0);
|
||||
}
|
||||
|
||||
static int a6xx_hfi_get_fw_version(struct a6xx_gmu *gmu, u32 *version)
|
||||
{
|
||||
struct a6xx_hfi_msg_fw_version msg = { 0 };
|
||||
|
||||
/* Currently supporting version 1.1 */
|
||||
msg.supported_version = (1 << 28) | (1 << 16);
|
||||
|
||||
return a6xx_hfi_send_msg(gmu, HFI_H2F_MSG_FW_VERSION, &msg, sizeof(msg),
|
||||
version, sizeof(*version));
|
||||
}
|
||||
|
||||
static int a6xx_hfi_send_perf_table(struct a6xx_gmu *gmu)
|
||||
{
|
||||
struct a6xx_hfi_msg_perf_table msg = { 0 };
|
||||
int i;
|
||||
|
||||
msg.num_gpu_levels = gmu->nr_gpu_freqs;
|
||||
msg.num_gmu_levels = gmu->nr_gmu_freqs;
|
||||
|
||||
for (i = 0; i < gmu->nr_gpu_freqs; i++) {
|
||||
msg.gx_votes[i].vote = gmu->gx_arc_votes[i];
|
||||
msg.gx_votes[i].freq = gmu->gpu_freqs[i] / 1000;
|
||||
}
|
||||
|
||||
for (i = 0; i < gmu->nr_gmu_freqs; i++) {
|
||||
msg.cx_votes[i].vote = gmu->cx_arc_votes[i];
|
||||
msg.cx_votes[i].freq = gmu->gmu_freqs[i] / 1000;
|
||||
}
|
||||
|
||||
return a6xx_hfi_send_msg(gmu, HFI_H2F_MSG_PERF_TABLE, &msg, sizeof(msg),
|
||||
NULL, 0);
|
||||
}
|
||||
|
||||
static int a6xx_hfi_send_bw_table(struct a6xx_gmu *gmu)
|
||||
{
|
||||
struct a6xx_hfi_msg_bw_table msg = { 0 };
|
||||
|
||||
/*
|
||||
* The sdm845 GMU doesn't do bus frequency scaling on its own but it
|
||||
* does need at least one entry in the list because it might be accessed
|
||||
* when the GMU is shutting down. Send a single "off" entry.
|
||||
*/
|
||||
|
||||
msg.bw_level_num = 1;
|
||||
|
||||
msg.ddr_cmds_num = 3;
|
||||
msg.ddr_wait_bitmask = 0x07;
|
||||
|
||||
msg.ddr_cmds_addrs[0] = 0x50000;
|
||||
msg.ddr_cmds_addrs[1] = 0x5005c;
|
||||
msg.ddr_cmds_addrs[2] = 0x5000c;
|
||||
|
||||
msg.ddr_cmds_data[0][0] = 0x40000000;
|
||||
msg.ddr_cmds_data[0][1] = 0x40000000;
|
||||
msg.ddr_cmds_data[0][2] = 0x40000000;
|
||||
|
||||
/*
|
||||
* These are the CX (CNOC) votes. This is used but the values for the
|
||||
* sdm845 GMU are known and fixed so we can hard code them.
|
||||
*/
|
||||
|
||||
msg.cnoc_cmds_num = 3;
|
||||
msg.cnoc_wait_bitmask = 0x05;
|
||||
|
||||
msg.cnoc_cmds_addrs[0] = 0x50034;
|
||||
msg.cnoc_cmds_addrs[1] = 0x5007c;
|
||||
msg.cnoc_cmds_addrs[2] = 0x5004c;
|
||||
|
||||
msg.cnoc_cmds_data[0][0] = 0x40000000;
|
||||
msg.cnoc_cmds_data[0][1] = 0x00000000;
|
||||
msg.cnoc_cmds_data[0][2] = 0x40000000;
|
||||
|
||||
msg.cnoc_cmds_data[1][0] = 0x60000001;
|
||||
msg.cnoc_cmds_data[1][1] = 0x20000001;
|
||||
msg.cnoc_cmds_data[1][2] = 0x60000001;
|
||||
|
||||
return a6xx_hfi_send_msg(gmu, HFI_H2F_MSG_BW_TABLE, &msg, sizeof(msg),
|
||||
NULL, 0);
|
||||
}
|
||||
|
||||
static int a6xx_hfi_send_test(struct a6xx_gmu *gmu)
|
||||
{
|
||||
struct a6xx_hfi_msg_test msg = { 0 };
|
||||
|
||||
return a6xx_hfi_send_msg(gmu, HFI_H2F_MSG_TEST, &msg, sizeof(msg),
|
||||
NULL, 0);
|
||||
}
|
||||
|
||||
int a6xx_hfi_start(struct a6xx_gmu *gmu, int boot_state)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = a6xx_hfi_send_gmu_init(gmu, boot_state);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = a6xx_hfi_get_fw_version(gmu, NULL);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/*
|
||||
* We have to get exchange version numbers per the sequence but at this
|
||||
* point th kernel driver doesn't need to know the exact version of
|
||||
* the GMU firmware
|
||||
*/
|
||||
|
||||
ret = a6xx_hfi_send_perf_table(gmu);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = a6xx_hfi_send_bw_table(gmu);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/*
|
||||
* Let the GMU know that there won't be any more HFI messages until next
|
||||
* boot
|
||||
*/
|
||||
a6xx_hfi_send_test(gmu);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void a6xx_hfi_stop(struct a6xx_gmu *gmu)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(gmu->queues); i++) {
|
||||
struct a6xx_hfi_queue *queue = &gmu->queues[i];
|
||||
|
||||
if (!queue->header)
|
||||
continue;
|
||||
|
||||
if (queue->header->read_index != queue->header->write_index)
|
||||
dev_err(gmu->dev, "HFI queue %d is not empty\n", i);
|
||||
|
||||
queue->header->read_index = 0;
|
||||
queue->header->write_index = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void a6xx_hfi_queue_init(struct a6xx_hfi_queue *queue,
|
||||
struct a6xx_hfi_queue_header *header, void *virt, u64 iova,
|
||||
u32 id)
|
||||
{
|
||||
spin_lock_init(&queue->lock);
|
||||
queue->header = header;
|
||||
queue->data = virt;
|
||||
atomic_set(&queue->seqnum, 0);
|
||||
|
||||
/* Set up the shared memory header */
|
||||
header->iova = iova;
|
||||
header->type = 10 << 8 | id;
|
||||
header->status = 1;
|
||||
header->size = SZ_4K >> 2;
|
||||
header->msg_size = 0;
|
||||
header->dropped = 0;
|
||||
header->rx_watermark = 1;
|
||||
header->tx_watermark = 1;
|
||||
header->rx_request = 1;
|
||||
header->tx_request = 0;
|
||||
header->read_index = 0;
|
||||
header->write_index = 0;
|
||||
}
|
||||
|
||||
void a6xx_hfi_init(struct a6xx_gmu *gmu)
|
||||
{
|
||||
struct a6xx_gmu_bo *hfi = gmu->hfi;
|
||||
struct a6xx_hfi_queue_table_header *table = hfi->virt;
|
||||
struct a6xx_hfi_queue_header *headers = hfi->virt + sizeof(*table);
|
||||
u64 offset;
|
||||
int table_size;
|
||||
|
||||
/*
|
||||
* The table size is the size of the table header plus all of the queue
|
||||
* headers
|
||||
*/
|
||||
table_size = sizeof(*table);
|
||||
table_size += (ARRAY_SIZE(gmu->queues) *
|
||||
sizeof(struct a6xx_hfi_queue_header));
|
||||
|
||||
table->version = 0;
|
||||
table->size = table_size;
|
||||
/* First queue header is located immediately after the table header */
|
||||
table->qhdr0_offset = sizeof(*table) >> 2;
|
||||
table->qhdr_size = sizeof(struct a6xx_hfi_queue_header) >> 2;
|
||||
table->num_queues = ARRAY_SIZE(gmu->queues);
|
||||
table->active_queues = ARRAY_SIZE(gmu->queues);
|
||||
|
||||
/* Command queue */
|
||||
offset = SZ_4K;
|
||||
a6xx_hfi_queue_init(&gmu->queues[0], &headers[0], hfi->virt + offset,
|
||||
hfi->iova + offset, 0);
|
||||
|
||||
/* GMU response queue */
|
||||
offset += SZ_4K;
|
||||
a6xx_hfi_queue_init(&gmu->queues[1], &headers[1], hfi->virt + offset,
|
||||
hfi->iova + offset, 4);
|
||||
}
|
|
@ -0,0 +1,127 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/* Copyright (c) 2017 The Linux Foundation. All rights reserved. */
|
||||
|
||||
#ifndef _A6XX_HFI_H_
|
||||
#define _A6XX_HFI_H_
|
||||
|
||||
struct a6xx_hfi_queue_table_header {
|
||||
u32 version;
|
||||
u32 size; /* Size of the queue table in dwords */
|
||||
u32 qhdr0_offset; /* Offset of the first queue header */
|
||||
u32 qhdr_size; /* Size of the queue headers */
|
||||
u32 num_queues; /* Number of total queues */
|
||||
u32 active_queues; /* Number of active queues */
|
||||
};
|
||||
|
||||
struct a6xx_hfi_queue_header {
|
||||
u32 status;
|
||||
u32 iova;
|
||||
u32 type;
|
||||
u32 size;
|
||||
u32 msg_size;
|
||||
u32 dropped;
|
||||
u32 rx_watermark;
|
||||
u32 tx_watermark;
|
||||
u32 rx_request;
|
||||
u32 tx_request;
|
||||
u32 read_index;
|
||||
u32 write_index;
|
||||
};
|
||||
|
||||
struct a6xx_hfi_queue {
|
||||
struct a6xx_hfi_queue_header *header;
|
||||
spinlock_t lock;
|
||||
u32 *data;
|
||||
atomic_t seqnum;
|
||||
};
|
||||
|
||||
/* This is the outgoing queue to the GMU */
|
||||
#define HFI_COMMAND_QUEUE 0
|
||||
|
||||
/* THis is the incoming response queue from the GMU */
|
||||
#define HFI_RESPONSE_QUEUE 1
|
||||
|
||||
#define HFI_HEADER_ID(msg) ((msg) & 0xff)
|
||||
#define HFI_HEADER_SIZE(msg) (((msg) >> 8) & 0xff)
|
||||
#define HFI_HEADER_SEQNUM(msg) (((msg) >> 20) & 0xfff)
|
||||
|
||||
/* FIXME: Do we need this or can we use ARRAY_SIZE? */
|
||||
#define HFI_RESPONSE_PAYLOAD_SIZE 16
|
||||
|
||||
/* HFI message types */
|
||||
|
||||
#define HFI_MSG_CMD 0
|
||||
#define HFI_MSG_ACK 2
|
||||
|
||||
#define HFI_F2H_MSG_ACK 126
|
||||
|
||||
struct a6xx_hfi_msg_response {
|
||||
u32 header;
|
||||
u32 ret_header;
|
||||
u32 error;
|
||||
u32 payload[HFI_RESPONSE_PAYLOAD_SIZE];
|
||||
};
|
||||
|
||||
#define HFI_F2H_MSG_ERROR 100
|
||||
|
||||
struct a6xx_hfi_msg_error {
|
||||
u32 header;
|
||||
u32 code;
|
||||
u32 payload[2];
|
||||
};
|
||||
|
||||
#define HFI_H2F_MSG_INIT 0
|
||||
|
||||
struct a6xx_hfi_msg_gmu_init_cmd {
|
||||
u32 header;
|
||||
u32 seg_id;
|
||||
u32 dbg_buffer_addr;
|
||||
u32 dbg_buffer_size;
|
||||
u32 boot_state;
|
||||
};
|
||||
|
||||
#define HFI_H2F_MSG_FW_VERSION 1
|
||||
|
||||
struct a6xx_hfi_msg_fw_version {
|
||||
u32 header;
|
||||
u32 supported_version;
|
||||
};
|
||||
|
||||
#define HFI_H2F_MSG_PERF_TABLE 4
|
||||
|
||||
struct perf_level {
|
||||
u32 vote;
|
||||
u32 freq;
|
||||
};
|
||||
|
||||
struct a6xx_hfi_msg_perf_table {
|
||||
u32 header;
|
||||
u32 num_gpu_levels;
|
||||
u32 num_gmu_levels;
|
||||
|
||||
struct perf_level gx_votes[16];
|
||||
struct perf_level cx_votes[4];
|
||||
};
|
||||
|
||||
#define HFI_H2F_MSG_BW_TABLE 3
|
||||
|
||||
struct a6xx_hfi_msg_bw_table {
|
||||
u32 header;
|
||||
u32 bw_level_num;
|
||||
u32 cnoc_cmds_num;
|
||||
u32 ddr_cmds_num;
|
||||
u32 cnoc_wait_bitmask;
|
||||
u32 ddr_wait_bitmask;
|
||||
u32 cnoc_cmds_addrs[6];
|
||||
u32 cnoc_cmds_data[2][6];
|
||||
u32 ddr_cmds_addrs[8];
|
||||
u32 ddr_cmds_data[16][8];
|
||||
};
|
||||
|
||||
#define HFI_H2F_MSG_TEST 5
|
||||
|
||||
struct a6xx_hfi_msg_test {
|
||||
u32 header;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -8,17 +8,19 @@ http://github.com/freedreno/envytools/
|
|||
git clone https://github.com/freedreno/envytools.git
|
||||
|
||||
The rules-ng-ng source files this header was generated from are:
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno.xml ( 431 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1572 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 37162 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 13324 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 31866 bytes, from 2017-06-06 18:26:14)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 83840 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 111898 bytes, from 2017-06-06 18:23:59)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a5xx.xml ( 139480 bytes, from 2017-06-16 12:44:39)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/ocmem.xml ( 1773 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/envytools/rnndb/adreno.xml ( 501 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/freedreno_copyright.xml ( 1572 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a2xx.xml ( 36805 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/adreno_common.xml ( 13634 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/adreno_pm4.xml ( 42393 bytes, from 2018-08-06 18:45:45)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a3xx.xml ( 83840 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a4xx.xml ( 112086 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a5xx.xml ( 147240 bytes, from 2018-08-06 18:45:45)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a6xx.xml ( 101627 bytes, from 2018-08-06 18:45:45)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a6xx_gmu.xml ( 10431 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/ocmem.xml ( 1773 bytes, from 2018-07-03 19:37:13)
|
||||
|
||||
Copyright (C) 2013-2017 by the following authors:
|
||||
Copyright (C) 2013-2018 by the following authors:
|
||||
- Rob Clark <robdclark@gmail.com> (robclark)
|
||||
- Ilia Mirkin <imirkin@alum.mit.edu> (imirkin)
|
||||
|
||||
|
@ -44,6 +46,14 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
*/
|
||||
|
||||
|
||||
enum chip {
|
||||
A2XX = 0,
|
||||
A3XX = 0,
|
||||
A4XX = 0,
|
||||
A5XX = 0,
|
||||
A6XX = 0,
|
||||
};
|
||||
|
||||
enum adreno_pa_su_sc_draw {
|
||||
PC_DRAW_POINTS = 0,
|
||||
PC_DRAW_LINES = 1,
|
||||
|
@ -181,6 +191,12 @@ enum a3xx_rb_blend_opcode {
|
|||
BLEND_MAX_DST_SRC = 4,
|
||||
};
|
||||
|
||||
enum a4xx_tess_spacing {
|
||||
EQUAL_SPACING = 0,
|
||||
ODD_SPACING = 2,
|
||||
EVEN_SPACING = 3,
|
||||
};
|
||||
|
||||
#define REG_AXXX_CP_RB_BASE 0x000001c0
|
||||
|
||||
#define REG_AXXX_CP_RB_CNTL 0x000001c1
|
||||
|
|
|
@ -111,6 +111,16 @@ static const struct adreno_info gpulist[] = {
|
|||
ADRENO_QUIRK_FAULT_DETECT_MASK,
|
||||
.init = a5xx_gpu_init,
|
||||
.zapfw = "a530_zap.mdt",
|
||||
}, {
|
||||
.rev = ADRENO_REV(6, 3, 0, ANY_ID),
|
||||
.revn = 630,
|
||||
.name = "A630",
|
||||
.fw = {
|
||||
[ADRENO_FW_SQE] = "a630_sqe.fw",
|
||||
[ADRENO_FW_GMU] = "a630_gmu.bin",
|
||||
},
|
||||
.gmem = SZ_1M,
|
||||
.init = a6xx_gpu_init,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -127,6 +137,8 @@ MODULE_FIRMWARE("qcom/a530_zap.mdt");
|
|||
MODULE_FIRMWARE("qcom/a530_zap.b00");
|
||||
MODULE_FIRMWARE("qcom/a530_zap.b01");
|
||||
MODULE_FIRMWARE("qcom/a530_zap.b02");
|
||||
MODULE_FIRMWARE("qcom/a630_sqe.fw");
|
||||
MODULE_FIRMWARE("qcom/a630_gmu.bin");
|
||||
|
||||
static inline bool _rev_match(uint8_t entry, uint8_t id)
|
||||
{
|
||||
|
@ -155,6 +167,7 @@ struct msm_gpu *adreno_load_gpu(struct drm_device *dev)
|
|||
struct msm_drm_private *priv = dev->dev_private;
|
||||
struct platform_device *pdev = priv->gpu_pdev;
|
||||
struct msm_gpu *gpu = NULL;
|
||||
struct adreno_gpu *adreno_gpu;
|
||||
int ret;
|
||||
|
||||
if (pdev)
|
||||
|
@ -165,7 +178,27 @@ struct msm_gpu *adreno_load_gpu(struct drm_device *dev)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
pm_runtime_get_sync(&pdev->dev);
|
||||
adreno_gpu = to_adreno_gpu(gpu);
|
||||
|
||||
/*
|
||||
* The number one reason for HW init to fail is if the firmware isn't
|
||||
* loaded yet. Try that first and don't bother continuing on
|
||||
* otherwise
|
||||
*/
|
||||
|
||||
ret = adreno_load_fw(adreno_gpu);
|
||||
if (ret)
|
||||
return NULL;
|
||||
|
||||
/* Make sure pm runtime is active and reset any previous errors */
|
||||
pm_runtime_set_active(&pdev->dev);
|
||||
|
||||
ret = pm_runtime_get_sync(&pdev->dev);
|
||||
if (ret < 0) {
|
||||
dev_err(dev->dev, "Couldn't power up the GPU: %d\n", ret);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
mutex_lock(&dev->struct_mutex);
|
||||
ret = msm_gpu_hw_init(gpu);
|
||||
mutex_unlock(&dev->struct_mutex);
|
||||
|
|
|
@ -149,7 +149,7 @@ out:
|
|||
return fw;
|
||||
}
|
||||
|
||||
static int adreno_load_fw(struct adreno_gpu *adreno_gpu)
|
||||
int adreno_load_fw(struct adreno_gpu *adreno_gpu)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
|
|
@ -50,7 +50,9 @@ enum adreno_regs {
|
|||
|
||||
enum {
|
||||
ADRENO_FW_PM4 = 0,
|
||||
ADRENO_FW_SQE = 0, /* a6xx */
|
||||
ADRENO_FW_PFP = 1,
|
||||
ADRENO_FW_GMU = 1, /* a6xx */
|
||||
ADRENO_FW_GPMU = 2,
|
||||
ADRENO_FW_MAX,
|
||||
};
|
||||
|
@ -228,7 +230,7 @@ int adreno_gpu_init(struct drm_device *drm, struct platform_device *pdev,
|
|||
struct adreno_gpu *gpu, const struct adreno_gpu_funcs *funcs,
|
||||
int nr_rings);
|
||||
void adreno_gpu_cleanup(struct adreno_gpu *gpu);
|
||||
|
||||
int adreno_load_fw(struct adreno_gpu *adreno_gpu);
|
||||
|
||||
void adreno_gpu_state_destroy(struct msm_gpu_state *state);
|
||||
|
||||
|
@ -335,6 +337,7 @@ static inline void adreno_gpu_write(struct adreno_gpu *gpu,
|
|||
struct msm_gpu *a3xx_gpu_init(struct drm_device *dev);
|
||||
struct msm_gpu *a4xx_gpu_init(struct drm_device *dev);
|
||||
struct msm_gpu *a5xx_gpu_init(struct drm_device *dev);
|
||||
struct msm_gpu *a6xx_gpu_init(struct drm_device *dev);
|
||||
|
||||
static inline void adreno_gpu_write64(struct adreno_gpu *gpu,
|
||||
enum adreno_regs lo, enum adreno_regs hi, u64 data)
|
||||
|
|
|
@ -8,17 +8,19 @@ http://github.com/freedreno/envytools/
|
|||
git clone https://github.com/freedreno/envytools.git
|
||||
|
||||
The rules-ng-ng source files this header was generated from are:
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno.xml ( 431 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1572 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 37162 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 13324 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 31866 bytes, from 2017-06-06 18:26:14)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 83840 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 111898 bytes, from 2017-06-06 18:23:59)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/a5xx.xml ( 139480 bytes, from 2017-06-16 12:44:39)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/adreno/ocmem.xml ( 1773 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/envytools/rnndb/adreno.xml ( 501 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/freedreno_copyright.xml ( 1572 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a2xx.xml ( 36805 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/adreno_common.xml ( 13634 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/adreno_pm4.xml ( 42393 bytes, from 2018-08-06 18:45:45)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a3xx.xml ( 83840 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a4xx.xml ( 112086 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a5xx.xml ( 147240 bytes, from 2018-08-06 18:45:45)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a6xx.xml ( 101627 bytes, from 2018-08-06 18:45:45)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/a6xx_gmu.xml ( 10431 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/adreno/ocmem.xml ( 1773 bytes, from 2018-07-03 19:37:13)
|
||||
|
||||
Copyright (C) 2013-2017 by the following authors:
|
||||
Copyright (C) 2013-2018 by the following authors:
|
||||
- Rob Clark <robdclark@gmail.com> (robclark)
|
||||
- Ilia Mirkin <imirkin@alum.mit.edu> (imirkin)
|
||||
|
||||
|
@ -71,7 +73,8 @@ enum vgt_event_type {
|
|||
FLUSH_SO_1 = 18,
|
||||
FLUSH_SO_2 = 19,
|
||||
FLUSH_SO_3 = 20,
|
||||
UNK_19 = 25,
|
||||
PC_CCU_INVALIDATE_DEPTH = 24,
|
||||
PC_CCU_INVALIDATE_COLOR = 25,
|
||||
UNK_1C = 28,
|
||||
UNK_1D = 29,
|
||||
BLIT = 30,
|
||||
|
@ -199,9 +202,12 @@ enum adreno_pm4_type3_packets {
|
|||
CP_WAIT_MEM_WRITES = 18,
|
||||
CP_COND_REG_EXEC = 71,
|
||||
CP_MEM_TO_REG = 66,
|
||||
CP_EXEC_CS_INDIRECT = 65,
|
||||
CP_EXEC_CS = 51,
|
||||
CP_PERFCOUNTER_ACTION = 80,
|
||||
CP_SMMU_TABLE_UPDATE = 83,
|
||||
CP_SET_MARKER = 101,
|
||||
CP_SET_PSEUDO_REG = 86,
|
||||
CP_CONTEXT_REG_BUNCH = 92,
|
||||
CP_YIELD_ENABLE = 28,
|
||||
CP_SKIP_IB2_ENABLE_GLOBAL = 29,
|
||||
|
@ -215,7 +221,10 @@ enum adreno_pm4_type3_packets {
|
|||
CP_COMPUTE_CHECKPOINT = 110,
|
||||
CP_MEM_TO_MEM = 115,
|
||||
CP_BLIT = 44,
|
||||
CP_UNK_39 = 57,
|
||||
CP_REG_TEST = 57,
|
||||
CP_SET_MODE = 99,
|
||||
CP_LOAD_STATE6_GEOM = 50,
|
||||
CP_LOAD_STATE6_FRAG = 52,
|
||||
IN_IB_PREFETCH_END = 23,
|
||||
IN_SUBBLK_PREFETCH = 31,
|
||||
IN_INSTR_PREFETCH = 32,
|
||||
|
@ -224,6 +233,11 @@ enum adreno_pm4_type3_packets {
|
|||
IN_INCR_UPDT_STATE = 85,
|
||||
IN_INCR_UPDT_CONST = 86,
|
||||
IN_INCR_UPDT_INSTR = 87,
|
||||
PKT4 = 4,
|
||||
CP_UNK_A6XX_14 = 20,
|
||||
CP_UNK_A6XX_36 = 54,
|
||||
CP_UNK_A6XX_55 = 85,
|
||||
UNK_A6XX_6D = 109,
|
||||
};
|
||||
|
||||
enum adreno_state_block {
|
||||
|
@ -278,6 +292,33 @@ enum a4xx_state_src {
|
|||
SS4_INDIRECT = 2,
|
||||
};
|
||||
|
||||
enum a6xx_state_block {
|
||||
SB6_VS_TEX = 0,
|
||||
SB6_HS_TEX = 1,
|
||||
SB6_DS_TEX = 2,
|
||||
SB6_GS_TEX = 3,
|
||||
SB6_FS_TEX = 4,
|
||||
SB6_CS_TEX = 5,
|
||||
SB6_VS_SHADER = 8,
|
||||
SB6_HS_SHADER = 9,
|
||||
SB6_DS_SHADER = 10,
|
||||
SB6_GS_SHADER = 11,
|
||||
SB6_FS_SHADER = 12,
|
||||
SB6_CS_SHADER = 13,
|
||||
SB6_SSBO = 14,
|
||||
SB6_CS_SSBO = 15,
|
||||
};
|
||||
|
||||
enum a6xx_state_type {
|
||||
ST6_SHADER = 0,
|
||||
ST6_CONSTANTS = 1,
|
||||
};
|
||||
|
||||
enum a6xx_state_src {
|
||||
SS6_DIRECT = 0,
|
||||
SS6_INDIRECT = 2,
|
||||
};
|
||||
|
||||
enum a4xx_index_size {
|
||||
INDEX4_SIZE_8_BIT = 0,
|
||||
INDEX4_SIZE_16_BIT = 1,
|
||||
|
@ -300,6 +341,7 @@ enum render_mode_cmd {
|
|||
GMEM = 3,
|
||||
BLIT2D = 5,
|
||||
BLIT2DSCALE = 7,
|
||||
END2D = 8,
|
||||
};
|
||||
|
||||
enum cp_blit_cmd {
|
||||
|
@ -308,6 +350,22 @@ enum cp_blit_cmd {
|
|||
BLIT_OP_SCALE = 3,
|
||||
};
|
||||
|
||||
enum a6xx_render_mode {
|
||||
RM6_BYPASS = 1,
|
||||
RM6_BINNING = 2,
|
||||
RM6_GMEM = 4,
|
||||
RM6_BLIT2D = 5,
|
||||
RM6_RESOLVE = 6,
|
||||
};
|
||||
|
||||
enum pseudo_reg {
|
||||
SMMU_INFO = 0,
|
||||
NON_SECURE_SAVE_ADDR = 1,
|
||||
SECURE_SAVE_ADDR = 2,
|
||||
NON_PRIV_SAVE_ADDR = 3,
|
||||
COUNTER = 4,
|
||||
};
|
||||
|
||||
#define REG_CP_LOAD_STATE_0 0x00000000
|
||||
#define CP_LOAD_STATE_0_DST_OFF__MASK 0x0000ffff
|
||||
#define CP_LOAD_STATE_0_DST_OFF__SHIFT 0
|
||||
|
@ -349,7 +407,7 @@ static inline uint32_t CP_LOAD_STATE_1_EXT_SRC_ADDR(uint32_t val)
|
|||
}
|
||||
|
||||
#define REG_CP_LOAD_STATE4_0 0x00000000
|
||||
#define CP_LOAD_STATE4_0_DST_OFF__MASK 0x0000ffff
|
||||
#define CP_LOAD_STATE4_0_DST_OFF__MASK 0x00003fff
|
||||
#define CP_LOAD_STATE4_0_DST_OFF__SHIFT 0
|
||||
static inline uint32_t CP_LOAD_STATE4_0_DST_OFF(uint32_t val)
|
||||
{
|
||||
|
@ -396,6 +454,54 @@ static inline uint32_t CP_LOAD_STATE4_2_EXT_SRC_ADDR_HI(uint32_t val)
|
|||
return ((val) << CP_LOAD_STATE4_2_EXT_SRC_ADDR_HI__SHIFT) & CP_LOAD_STATE4_2_EXT_SRC_ADDR_HI__MASK;
|
||||
}
|
||||
|
||||
#define REG_CP_LOAD_STATE6_0 0x00000000
|
||||
#define CP_LOAD_STATE6_0_DST_OFF__MASK 0x00003fff
|
||||
#define CP_LOAD_STATE6_0_DST_OFF__SHIFT 0
|
||||
static inline uint32_t CP_LOAD_STATE6_0_DST_OFF(uint32_t val)
|
||||
{
|
||||
return ((val) << CP_LOAD_STATE6_0_DST_OFF__SHIFT) & CP_LOAD_STATE6_0_DST_OFF__MASK;
|
||||
}
|
||||
#define CP_LOAD_STATE6_0_STATE_TYPE__MASK 0x00004000
|
||||
#define CP_LOAD_STATE6_0_STATE_TYPE__SHIFT 14
|
||||
static inline uint32_t CP_LOAD_STATE6_0_STATE_TYPE(enum a6xx_state_type val)
|
||||
{
|
||||
return ((val) << CP_LOAD_STATE6_0_STATE_TYPE__SHIFT) & CP_LOAD_STATE6_0_STATE_TYPE__MASK;
|
||||
}
|
||||
#define CP_LOAD_STATE6_0_STATE_SRC__MASK 0x00030000
|
||||
#define CP_LOAD_STATE6_0_STATE_SRC__SHIFT 16
|
||||
static inline uint32_t CP_LOAD_STATE6_0_STATE_SRC(enum a6xx_state_src val)
|
||||
{
|
||||
return ((val) << CP_LOAD_STATE6_0_STATE_SRC__SHIFT) & CP_LOAD_STATE6_0_STATE_SRC__MASK;
|
||||
}
|
||||
#define CP_LOAD_STATE6_0_STATE_BLOCK__MASK 0x003c0000
|
||||
#define CP_LOAD_STATE6_0_STATE_BLOCK__SHIFT 18
|
||||
static inline uint32_t CP_LOAD_STATE6_0_STATE_BLOCK(enum a6xx_state_block val)
|
||||
{
|
||||
return ((val) << CP_LOAD_STATE6_0_STATE_BLOCK__SHIFT) & CP_LOAD_STATE6_0_STATE_BLOCK__MASK;
|
||||
}
|
||||
#define CP_LOAD_STATE6_0_NUM_UNIT__MASK 0xffc00000
|
||||
#define CP_LOAD_STATE6_0_NUM_UNIT__SHIFT 22
|
||||
static inline uint32_t CP_LOAD_STATE6_0_NUM_UNIT(uint32_t val)
|
||||
{
|
||||
return ((val) << CP_LOAD_STATE6_0_NUM_UNIT__SHIFT) & CP_LOAD_STATE6_0_NUM_UNIT__MASK;
|
||||
}
|
||||
|
||||
#define REG_CP_LOAD_STATE6_1 0x00000001
|
||||
#define CP_LOAD_STATE6_1_EXT_SRC_ADDR__MASK 0xfffffffc
|
||||
#define CP_LOAD_STATE6_1_EXT_SRC_ADDR__SHIFT 2
|
||||
static inline uint32_t CP_LOAD_STATE6_1_EXT_SRC_ADDR(uint32_t val)
|
||||
{
|
||||
return ((val >> 2) << CP_LOAD_STATE6_1_EXT_SRC_ADDR__SHIFT) & CP_LOAD_STATE6_1_EXT_SRC_ADDR__MASK;
|
||||
}
|
||||
|
||||
#define REG_CP_LOAD_STATE6_2 0x00000002
|
||||
#define CP_LOAD_STATE6_2_EXT_SRC_ADDR_HI__MASK 0xffffffff
|
||||
#define CP_LOAD_STATE6_2_EXT_SRC_ADDR_HI__SHIFT 0
|
||||
static inline uint32_t CP_LOAD_STATE6_2_EXT_SRC_ADDR_HI(uint32_t val)
|
||||
{
|
||||
return ((val) << CP_LOAD_STATE6_2_EXT_SRC_ADDR_HI__SHIFT) & CP_LOAD_STATE6_2_EXT_SRC_ADDR_HI__MASK;
|
||||
}
|
||||
|
||||
#define REG_CP_DRAW_INDX_0 0x00000000
|
||||
#define CP_DRAW_INDX_0_VIZ_QUERY__MASK 0xffffffff
|
||||
#define CP_DRAW_INDX_0_VIZ_QUERY__SHIFT 0
|
||||
|
@ -580,6 +686,153 @@ static inline uint32_t CP_DRAW_INDX_OFFSET_5_INDX_SIZE(uint32_t val)
|
|||
return ((val) << CP_DRAW_INDX_OFFSET_5_INDX_SIZE__SHIFT) & CP_DRAW_INDX_OFFSET_5_INDX_SIZE__MASK;
|
||||
}
|
||||
|
||||
#define REG_A4XX_CP_DRAW_INDIRECT_0 0x00000000
|
||||
#define A4XX_CP_DRAW_INDIRECT_0_PRIM_TYPE__MASK 0x0000003f
|
||||
#define A4XX_CP_DRAW_INDIRECT_0_PRIM_TYPE__SHIFT 0
|
||||
static inline uint32_t A4XX_CP_DRAW_INDIRECT_0_PRIM_TYPE(enum pc_di_primtype val)
|
||||
{
|
||||
return ((val) << A4XX_CP_DRAW_INDIRECT_0_PRIM_TYPE__SHIFT) & A4XX_CP_DRAW_INDIRECT_0_PRIM_TYPE__MASK;
|
||||
}
|
||||
#define A4XX_CP_DRAW_INDIRECT_0_SOURCE_SELECT__MASK 0x000000c0
|
||||
#define A4XX_CP_DRAW_INDIRECT_0_SOURCE_SELECT__SHIFT 6
|
||||
static inline uint32_t A4XX_CP_DRAW_INDIRECT_0_SOURCE_SELECT(enum pc_di_src_sel val)
|
||||
{
|
||||
return ((val) << A4XX_CP_DRAW_INDIRECT_0_SOURCE_SELECT__SHIFT) & A4XX_CP_DRAW_INDIRECT_0_SOURCE_SELECT__MASK;
|
||||
}
|
||||
#define A4XX_CP_DRAW_INDIRECT_0_VIS_CULL__MASK 0x00000300
|
||||
#define A4XX_CP_DRAW_INDIRECT_0_VIS_CULL__SHIFT 8
|
||||
static inline uint32_t A4XX_CP_DRAW_INDIRECT_0_VIS_CULL(enum pc_di_vis_cull_mode val)
|
||||
{
|
||||
return ((val) << A4XX_CP_DRAW_INDIRECT_0_VIS_CULL__SHIFT) & A4XX_CP_DRAW_INDIRECT_0_VIS_CULL__MASK;
|
||||
}
|
||||
#define A4XX_CP_DRAW_INDIRECT_0_INDEX_SIZE__MASK 0x00000c00
|
||||
#define A4XX_CP_DRAW_INDIRECT_0_INDEX_SIZE__SHIFT 10
|
||||
static inline uint32_t A4XX_CP_DRAW_INDIRECT_0_INDEX_SIZE(enum a4xx_index_size val)
|
||||
{
|
||||
return ((val) << A4XX_CP_DRAW_INDIRECT_0_INDEX_SIZE__SHIFT) & A4XX_CP_DRAW_INDIRECT_0_INDEX_SIZE__MASK;
|
||||
}
|
||||
#define A4XX_CP_DRAW_INDIRECT_0_TESS_MODE__MASK 0x01f00000
|
||||
#define A4XX_CP_DRAW_INDIRECT_0_TESS_MODE__SHIFT 20
|
||||
static inline uint32_t A4XX_CP_DRAW_INDIRECT_0_TESS_MODE(uint32_t val)
|
||||
{
|
||||
return ((val) << A4XX_CP_DRAW_INDIRECT_0_TESS_MODE__SHIFT) & A4XX_CP_DRAW_INDIRECT_0_TESS_MODE__MASK;
|
||||
}
|
||||
|
||||
#define REG_A4XX_CP_DRAW_INDIRECT_1 0x00000001
|
||||
#define A4XX_CP_DRAW_INDIRECT_1_INDIRECT__MASK 0xffffffff
|
||||
#define A4XX_CP_DRAW_INDIRECT_1_INDIRECT__SHIFT 0
|
||||
static inline uint32_t A4XX_CP_DRAW_INDIRECT_1_INDIRECT(uint32_t val)
|
||||
{
|
||||
return ((val) << A4XX_CP_DRAW_INDIRECT_1_INDIRECT__SHIFT) & A4XX_CP_DRAW_INDIRECT_1_INDIRECT__MASK;
|
||||
}
|
||||
|
||||
|
||||
#define REG_A5XX_CP_DRAW_INDIRECT_2 0x00000002
|
||||
#define A5XX_CP_DRAW_INDIRECT_2_INDIRECT_HI__MASK 0xffffffff
|
||||
#define A5XX_CP_DRAW_INDIRECT_2_INDIRECT_HI__SHIFT 0
|
||||
static inline uint32_t A5XX_CP_DRAW_INDIRECT_2_INDIRECT_HI(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_CP_DRAW_INDIRECT_2_INDIRECT_HI__SHIFT) & A5XX_CP_DRAW_INDIRECT_2_INDIRECT_HI__MASK;
|
||||
}
|
||||
|
||||
#define REG_A4XX_CP_DRAW_INDX_INDIRECT_0 0x00000000
|
||||
#define A4XX_CP_DRAW_INDX_INDIRECT_0_PRIM_TYPE__MASK 0x0000003f
|
||||
#define A4XX_CP_DRAW_INDX_INDIRECT_0_PRIM_TYPE__SHIFT 0
|
||||
static inline uint32_t A4XX_CP_DRAW_INDX_INDIRECT_0_PRIM_TYPE(enum pc_di_primtype val)
|
||||
{
|
||||
return ((val) << A4XX_CP_DRAW_INDX_INDIRECT_0_PRIM_TYPE__SHIFT) & A4XX_CP_DRAW_INDX_INDIRECT_0_PRIM_TYPE__MASK;
|
||||
}
|
||||
#define A4XX_CP_DRAW_INDX_INDIRECT_0_SOURCE_SELECT__MASK 0x000000c0
|
||||
#define A4XX_CP_DRAW_INDX_INDIRECT_0_SOURCE_SELECT__SHIFT 6
|
||||
static inline uint32_t A4XX_CP_DRAW_INDX_INDIRECT_0_SOURCE_SELECT(enum pc_di_src_sel val)
|
||||
{
|
||||
return ((val) << A4XX_CP_DRAW_INDX_INDIRECT_0_SOURCE_SELECT__SHIFT) & A4XX_CP_DRAW_INDX_INDIRECT_0_SOURCE_SELECT__MASK;
|
||||
}
|
||||
#define A4XX_CP_DRAW_INDX_INDIRECT_0_VIS_CULL__MASK 0x00000300
|
||||
#define A4XX_CP_DRAW_INDX_INDIRECT_0_VIS_CULL__SHIFT 8
|
||||
static inline uint32_t A4XX_CP_DRAW_INDX_INDIRECT_0_VIS_CULL(enum pc_di_vis_cull_mode val)
|
||||
{
|
||||
return ((val) << A4XX_CP_DRAW_INDX_INDIRECT_0_VIS_CULL__SHIFT) & A4XX_CP_DRAW_INDX_INDIRECT_0_VIS_CULL__MASK;
|
||||
}
|
||||
#define A4XX_CP_DRAW_INDX_INDIRECT_0_INDEX_SIZE__MASK 0x00000c00
|
||||
#define A4XX_CP_DRAW_INDX_INDIRECT_0_INDEX_SIZE__SHIFT 10
|
||||
static inline uint32_t A4XX_CP_DRAW_INDX_INDIRECT_0_INDEX_SIZE(enum a4xx_index_size val)
|
||||
{
|
||||
return ((val) << A4XX_CP_DRAW_INDX_INDIRECT_0_INDEX_SIZE__SHIFT) & A4XX_CP_DRAW_INDX_INDIRECT_0_INDEX_SIZE__MASK;
|
||||
}
|
||||
#define A4XX_CP_DRAW_INDX_INDIRECT_0_TESS_MODE__MASK 0x01f00000
|
||||
#define A4XX_CP_DRAW_INDX_INDIRECT_0_TESS_MODE__SHIFT 20
|
||||
static inline uint32_t A4XX_CP_DRAW_INDX_INDIRECT_0_TESS_MODE(uint32_t val)
|
||||
{
|
||||
return ((val) << A4XX_CP_DRAW_INDX_INDIRECT_0_TESS_MODE__SHIFT) & A4XX_CP_DRAW_INDX_INDIRECT_0_TESS_MODE__MASK;
|
||||
}
|
||||
|
||||
|
||||
#define REG_A4XX_CP_DRAW_INDX_INDIRECT_1 0x00000001
|
||||
#define A4XX_CP_DRAW_INDX_INDIRECT_1_INDX_BASE__MASK 0xffffffff
|
||||
#define A4XX_CP_DRAW_INDX_INDIRECT_1_INDX_BASE__SHIFT 0
|
||||
static inline uint32_t A4XX_CP_DRAW_INDX_INDIRECT_1_INDX_BASE(uint32_t val)
|
||||
{
|
||||
return ((val) << A4XX_CP_DRAW_INDX_INDIRECT_1_INDX_BASE__SHIFT) & A4XX_CP_DRAW_INDX_INDIRECT_1_INDX_BASE__MASK;
|
||||
}
|
||||
|
||||
#define REG_A4XX_CP_DRAW_INDX_INDIRECT_2 0x00000002
|
||||
#define A4XX_CP_DRAW_INDX_INDIRECT_2_INDX_SIZE__MASK 0xffffffff
|
||||
#define A4XX_CP_DRAW_INDX_INDIRECT_2_INDX_SIZE__SHIFT 0
|
||||
static inline uint32_t A4XX_CP_DRAW_INDX_INDIRECT_2_INDX_SIZE(uint32_t val)
|
||||
{
|
||||
return ((val) << A4XX_CP_DRAW_INDX_INDIRECT_2_INDX_SIZE__SHIFT) & A4XX_CP_DRAW_INDX_INDIRECT_2_INDX_SIZE__MASK;
|
||||
}
|
||||
|
||||
#define REG_A4XX_CP_DRAW_INDX_INDIRECT_3 0x00000003
|
||||
#define A4XX_CP_DRAW_INDX_INDIRECT_3_INDIRECT__MASK 0xffffffff
|
||||
#define A4XX_CP_DRAW_INDX_INDIRECT_3_INDIRECT__SHIFT 0
|
||||
static inline uint32_t A4XX_CP_DRAW_INDX_INDIRECT_3_INDIRECT(uint32_t val)
|
||||
{
|
||||
return ((val) << A4XX_CP_DRAW_INDX_INDIRECT_3_INDIRECT__SHIFT) & A4XX_CP_DRAW_INDX_INDIRECT_3_INDIRECT__MASK;
|
||||
}
|
||||
|
||||
|
||||
#define REG_A5XX_CP_DRAW_INDX_INDIRECT_1 0x00000001
|
||||
#define A5XX_CP_DRAW_INDX_INDIRECT_1_INDX_BASE_LO__MASK 0xffffffff
|
||||
#define A5XX_CP_DRAW_INDX_INDIRECT_1_INDX_BASE_LO__SHIFT 0
|
||||
static inline uint32_t A5XX_CP_DRAW_INDX_INDIRECT_1_INDX_BASE_LO(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_CP_DRAW_INDX_INDIRECT_1_INDX_BASE_LO__SHIFT) & A5XX_CP_DRAW_INDX_INDIRECT_1_INDX_BASE_LO__MASK;
|
||||
}
|
||||
|
||||
#define REG_A5XX_CP_DRAW_INDX_INDIRECT_2 0x00000002
|
||||
#define A5XX_CP_DRAW_INDX_INDIRECT_2_INDX_BASE_HI__MASK 0xffffffff
|
||||
#define A5XX_CP_DRAW_INDX_INDIRECT_2_INDX_BASE_HI__SHIFT 0
|
||||
static inline uint32_t A5XX_CP_DRAW_INDX_INDIRECT_2_INDX_BASE_HI(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_CP_DRAW_INDX_INDIRECT_2_INDX_BASE_HI__SHIFT) & A5XX_CP_DRAW_INDX_INDIRECT_2_INDX_BASE_HI__MASK;
|
||||
}
|
||||
|
||||
#define REG_A5XX_CP_DRAW_INDX_INDIRECT_3 0x00000003
|
||||
#define A5XX_CP_DRAW_INDX_INDIRECT_3_MAX_INDICES__MASK 0xffffffff
|
||||
#define A5XX_CP_DRAW_INDX_INDIRECT_3_MAX_INDICES__SHIFT 0
|
||||
static inline uint32_t A5XX_CP_DRAW_INDX_INDIRECT_3_MAX_INDICES(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_CP_DRAW_INDX_INDIRECT_3_MAX_INDICES__SHIFT) & A5XX_CP_DRAW_INDX_INDIRECT_3_MAX_INDICES__MASK;
|
||||
}
|
||||
|
||||
#define REG_A5XX_CP_DRAW_INDX_INDIRECT_4 0x00000004
|
||||
#define A5XX_CP_DRAW_INDX_INDIRECT_4_INDIRECT_LO__MASK 0xffffffff
|
||||
#define A5XX_CP_DRAW_INDX_INDIRECT_4_INDIRECT_LO__SHIFT 0
|
||||
static inline uint32_t A5XX_CP_DRAW_INDX_INDIRECT_4_INDIRECT_LO(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_CP_DRAW_INDX_INDIRECT_4_INDIRECT_LO__SHIFT) & A5XX_CP_DRAW_INDX_INDIRECT_4_INDIRECT_LO__MASK;
|
||||
}
|
||||
|
||||
#define REG_A5XX_CP_DRAW_INDX_INDIRECT_5 0x00000005
|
||||
#define A5XX_CP_DRAW_INDX_INDIRECT_5_INDIRECT_HI__MASK 0xffffffff
|
||||
#define A5XX_CP_DRAW_INDX_INDIRECT_5_INDIRECT_HI__SHIFT 0
|
||||
static inline uint32_t A5XX_CP_DRAW_INDX_INDIRECT_5_INDIRECT_HI(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_CP_DRAW_INDX_INDIRECT_5_INDIRECT_HI__SHIFT) & A5XX_CP_DRAW_INDX_INDIRECT_5_INDIRECT_HI__MASK;
|
||||
}
|
||||
|
||||
static inline uint32_t REG_CP_SET_DRAW_STATE_(uint32_t i0) { return 0x00000000 + 0x3*i0; }
|
||||
|
||||
static inline uint32_t REG_CP_SET_DRAW_STATE__0(uint32_t i0) { return 0x00000000 + 0x3*i0; }
|
||||
|
@ -593,6 +846,12 @@ static inline uint32_t CP_SET_DRAW_STATE__0_COUNT(uint32_t val)
|
|||
#define CP_SET_DRAW_STATE__0_DISABLE 0x00020000
|
||||
#define CP_SET_DRAW_STATE__0_DISABLE_ALL_GROUPS 0x00040000
|
||||
#define CP_SET_DRAW_STATE__0_LOAD_IMMED 0x00080000
|
||||
#define CP_SET_DRAW_STATE__0_ENABLE_MASK__MASK 0x00f00000
|
||||
#define CP_SET_DRAW_STATE__0_ENABLE_MASK__SHIFT 20
|
||||
static inline uint32_t CP_SET_DRAW_STATE__0_ENABLE_MASK(uint32_t val)
|
||||
{
|
||||
return ((val) << CP_SET_DRAW_STATE__0_ENABLE_MASK__SHIFT) & CP_SET_DRAW_STATE__0_ENABLE_MASK__MASK;
|
||||
}
|
||||
#define CP_SET_DRAW_STATE__0_GROUP_ID__MASK 0x1f000000
|
||||
#define CP_SET_DRAW_STATE__0_GROUP_ID__SHIFT 24
|
||||
static inline uint32_t CP_SET_DRAW_STATE__0_GROUP_ID(uint32_t val)
|
||||
|
@ -708,6 +967,22 @@ static inline uint32_t CP_SET_BIN_DATA5_4_BIN_SIZE_ADDRESS_HI(uint32_t val)
|
|||
return ((val) << CP_SET_BIN_DATA5_4_BIN_SIZE_ADDRESS_HI__SHIFT) & CP_SET_BIN_DATA5_4_BIN_SIZE_ADDRESS_HI__MASK;
|
||||
}
|
||||
|
||||
#define REG_CP_SET_BIN_DATA5_5 0x00000005
|
||||
#define CP_SET_BIN_DATA5_5_XXX_ADDRESS_LO__MASK 0xffffffff
|
||||
#define CP_SET_BIN_DATA5_5_XXX_ADDRESS_LO__SHIFT 0
|
||||
static inline uint32_t CP_SET_BIN_DATA5_5_XXX_ADDRESS_LO(uint32_t val)
|
||||
{
|
||||
return ((val) << CP_SET_BIN_DATA5_5_XXX_ADDRESS_LO__SHIFT) & CP_SET_BIN_DATA5_5_XXX_ADDRESS_LO__MASK;
|
||||
}
|
||||
|
||||
#define REG_CP_SET_BIN_DATA5_6 0x00000006
|
||||
#define CP_SET_BIN_DATA5_6_XXX_ADDRESS_HI__MASK 0xffffffff
|
||||
#define CP_SET_BIN_DATA5_6_XXX_ADDRESS_HI__SHIFT 0
|
||||
static inline uint32_t CP_SET_BIN_DATA5_6_XXX_ADDRESS_HI(uint32_t val)
|
||||
{
|
||||
return ((val) << CP_SET_BIN_DATA5_6_XXX_ADDRESS_HI__SHIFT) & CP_SET_BIN_DATA5_6_XXX_ADDRESS_HI__MASK;
|
||||
}
|
||||
|
||||
#define REG_CP_REG_TO_MEM_0 0x00000000
|
||||
#define CP_REG_TO_MEM_0_REG__MASK 0x0000ffff
|
||||
#define CP_REG_TO_MEM_0_REG__SHIFT 0
|
||||
|
@ -732,6 +1007,46 @@ static inline uint32_t CP_REG_TO_MEM_1_DEST(uint32_t val)
|
|||
return ((val) << CP_REG_TO_MEM_1_DEST__SHIFT) & CP_REG_TO_MEM_1_DEST__MASK;
|
||||
}
|
||||
|
||||
#define REG_CP_REG_TO_MEM_2 0x00000002
|
||||
#define CP_REG_TO_MEM_2_DEST_HI__MASK 0xffffffff
|
||||
#define CP_REG_TO_MEM_2_DEST_HI__SHIFT 0
|
||||
static inline uint32_t CP_REG_TO_MEM_2_DEST_HI(uint32_t val)
|
||||
{
|
||||
return ((val) << CP_REG_TO_MEM_2_DEST_HI__SHIFT) & CP_REG_TO_MEM_2_DEST_HI__MASK;
|
||||
}
|
||||
|
||||
#define REG_CP_MEM_TO_REG_0 0x00000000
|
||||
#define CP_MEM_TO_REG_0_REG__MASK 0x0000ffff
|
||||
#define CP_MEM_TO_REG_0_REG__SHIFT 0
|
||||
static inline uint32_t CP_MEM_TO_REG_0_REG(uint32_t val)
|
||||
{
|
||||
return ((val) << CP_MEM_TO_REG_0_REG__SHIFT) & CP_MEM_TO_REG_0_REG__MASK;
|
||||
}
|
||||
#define CP_MEM_TO_REG_0_CNT__MASK 0x3ff80000
|
||||
#define CP_MEM_TO_REG_0_CNT__SHIFT 19
|
||||
static inline uint32_t CP_MEM_TO_REG_0_CNT(uint32_t val)
|
||||
{
|
||||
return ((val) << CP_MEM_TO_REG_0_CNT__SHIFT) & CP_MEM_TO_REG_0_CNT__MASK;
|
||||
}
|
||||
#define CP_MEM_TO_REG_0_64B 0x40000000
|
||||
#define CP_MEM_TO_REG_0_ACCUMULATE 0x80000000
|
||||
|
||||
#define REG_CP_MEM_TO_REG_1 0x00000001
|
||||
#define CP_MEM_TO_REG_1_SRC__MASK 0xffffffff
|
||||
#define CP_MEM_TO_REG_1_SRC__SHIFT 0
|
||||
static inline uint32_t CP_MEM_TO_REG_1_SRC(uint32_t val)
|
||||
{
|
||||
return ((val) << CP_MEM_TO_REG_1_SRC__SHIFT) & CP_MEM_TO_REG_1_SRC__MASK;
|
||||
}
|
||||
|
||||
#define REG_CP_MEM_TO_REG_2 0x00000002
|
||||
#define CP_MEM_TO_REG_2_SRC_HI__MASK 0xffffffff
|
||||
#define CP_MEM_TO_REG_2_SRC_HI__SHIFT 0
|
||||
static inline uint32_t CP_MEM_TO_REG_2_SRC_HI(uint32_t val)
|
||||
{
|
||||
return ((val) << CP_MEM_TO_REG_2_SRC_HI__SHIFT) & CP_MEM_TO_REG_2_SRC_HI__MASK;
|
||||
}
|
||||
|
||||
#define REG_CP_MEM_TO_MEM_0 0x00000000
|
||||
#define CP_MEM_TO_MEM_0_NEG_A 0x00000001
|
||||
#define CP_MEM_TO_MEM_0_NEG_B 0x00000002
|
||||
|
@ -953,14 +1268,14 @@ static inline uint32_t CP_COMPUTE_CHECKPOINT_1_ADDR_0_HI(uint32_t val)
|
|||
#define REG_CP_COMPUTE_CHECKPOINT_2 0x00000002
|
||||
|
||||
#define REG_CP_COMPUTE_CHECKPOINT_3 0x00000003
|
||||
#define CP_COMPUTE_CHECKPOINT_3_ADDR_1_LEN__MASK 0xffffffff
|
||||
#define CP_COMPUTE_CHECKPOINT_3_ADDR_1_LEN__SHIFT 0
|
||||
static inline uint32_t CP_COMPUTE_CHECKPOINT_3_ADDR_1_LEN(uint32_t val)
|
||||
{
|
||||
return ((val) << CP_COMPUTE_CHECKPOINT_3_ADDR_1_LEN__SHIFT) & CP_COMPUTE_CHECKPOINT_3_ADDR_1_LEN__MASK;
|
||||
}
|
||||
|
||||
#define REG_CP_COMPUTE_CHECKPOINT_4 0x00000004
|
||||
#define CP_COMPUTE_CHECKPOINT_4_ADDR_1_LEN__MASK 0xffffffff
|
||||
#define CP_COMPUTE_CHECKPOINT_4_ADDR_1_LEN__SHIFT 0
|
||||
static inline uint32_t CP_COMPUTE_CHECKPOINT_4_ADDR_1_LEN(uint32_t val)
|
||||
{
|
||||
return ((val) << CP_COMPUTE_CHECKPOINT_4_ADDR_1_LEN__SHIFT) & CP_COMPUTE_CHECKPOINT_4_ADDR_1_LEN__MASK;
|
||||
}
|
||||
|
||||
#define REG_CP_COMPUTE_CHECKPOINT_5 0x00000005
|
||||
#define CP_COMPUTE_CHECKPOINT_5_ADDR_1_LO__MASK 0xffffffff
|
||||
|
@ -978,6 +1293,8 @@ static inline uint32_t CP_COMPUTE_CHECKPOINT_6_ADDR_1_HI(uint32_t val)
|
|||
return ((val) << CP_COMPUTE_CHECKPOINT_6_ADDR_1_HI__SHIFT) & CP_COMPUTE_CHECKPOINT_6_ADDR_1_HI__MASK;
|
||||
}
|
||||
|
||||
#define REG_CP_COMPUTE_CHECKPOINT_7 0x00000007
|
||||
|
||||
#define REG_CP_PERFCOUNTER_ACTION_0 0x00000000
|
||||
|
||||
#define REG_CP_PERFCOUNTER_ACTION_1 0x00000001
|
||||
|
@ -1032,13 +1349,13 @@ static inline uint32_t CP_BLIT_0_OP(enum cp_blit_cmd val)
|
|||
}
|
||||
|
||||
#define REG_CP_BLIT_1 0x00000001
|
||||
#define CP_BLIT_1_SRC_X1__MASK 0x0000ffff
|
||||
#define CP_BLIT_1_SRC_X1__MASK 0x00003fff
|
||||
#define CP_BLIT_1_SRC_X1__SHIFT 0
|
||||
static inline uint32_t CP_BLIT_1_SRC_X1(uint32_t val)
|
||||
{
|
||||
return ((val) << CP_BLIT_1_SRC_X1__SHIFT) & CP_BLIT_1_SRC_X1__MASK;
|
||||
}
|
||||
#define CP_BLIT_1_SRC_Y1__MASK 0xffff0000
|
||||
#define CP_BLIT_1_SRC_Y1__MASK 0x3fff0000
|
||||
#define CP_BLIT_1_SRC_Y1__SHIFT 16
|
||||
static inline uint32_t CP_BLIT_1_SRC_Y1(uint32_t val)
|
||||
{
|
||||
|
@ -1046,13 +1363,13 @@ static inline uint32_t CP_BLIT_1_SRC_Y1(uint32_t val)
|
|||
}
|
||||
|
||||
#define REG_CP_BLIT_2 0x00000002
|
||||
#define CP_BLIT_2_SRC_X2__MASK 0x0000ffff
|
||||
#define CP_BLIT_2_SRC_X2__MASK 0x00003fff
|
||||
#define CP_BLIT_2_SRC_X2__SHIFT 0
|
||||
static inline uint32_t CP_BLIT_2_SRC_X2(uint32_t val)
|
||||
{
|
||||
return ((val) << CP_BLIT_2_SRC_X2__SHIFT) & CP_BLIT_2_SRC_X2__MASK;
|
||||
}
|
||||
#define CP_BLIT_2_SRC_Y2__MASK 0xffff0000
|
||||
#define CP_BLIT_2_SRC_Y2__MASK 0x3fff0000
|
||||
#define CP_BLIT_2_SRC_Y2__SHIFT 16
|
||||
static inline uint32_t CP_BLIT_2_SRC_Y2(uint32_t val)
|
||||
{
|
||||
|
@ -1060,13 +1377,13 @@ static inline uint32_t CP_BLIT_2_SRC_Y2(uint32_t val)
|
|||
}
|
||||
|
||||
#define REG_CP_BLIT_3 0x00000003
|
||||
#define CP_BLIT_3_DST_X1__MASK 0x0000ffff
|
||||
#define CP_BLIT_3_DST_X1__MASK 0x00003fff
|
||||
#define CP_BLIT_3_DST_X1__SHIFT 0
|
||||
static inline uint32_t CP_BLIT_3_DST_X1(uint32_t val)
|
||||
{
|
||||
return ((val) << CP_BLIT_3_DST_X1__SHIFT) & CP_BLIT_3_DST_X1__MASK;
|
||||
}
|
||||
#define CP_BLIT_3_DST_Y1__MASK 0xffff0000
|
||||
#define CP_BLIT_3_DST_Y1__MASK 0x3fff0000
|
||||
#define CP_BLIT_3_DST_Y1__SHIFT 16
|
||||
static inline uint32_t CP_BLIT_3_DST_Y1(uint32_t val)
|
||||
{
|
||||
|
@ -1074,13 +1391,13 @@ static inline uint32_t CP_BLIT_3_DST_Y1(uint32_t val)
|
|||
}
|
||||
|
||||
#define REG_CP_BLIT_4 0x00000004
|
||||
#define CP_BLIT_4_DST_X2__MASK 0x0000ffff
|
||||
#define CP_BLIT_4_DST_X2__MASK 0x00003fff
|
||||
#define CP_BLIT_4_DST_X2__SHIFT 0
|
||||
static inline uint32_t CP_BLIT_4_DST_X2(uint32_t val)
|
||||
{
|
||||
return ((val) << CP_BLIT_4_DST_X2__SHIFT) & CP_BLIT_4_DST_X2__MASK;
|
||||
}
|
||||
#define CP_BLIT_4_DST_Y2__MASK 0xffff0000
|
||||
#define CP_BLIT_4_DST_Y2__MASK 0x3fff0000
|
||||
#define CP_BLIT_4_DST_Y2__SHIFT 16
|
||||
static inline uint32_t CP_BLIT_4_DST_Y2(uint32_t val)
|
||||
{
|
||||
|
@ -1113,5 +1430,129 @@ static inline uint32_t CP_EXEC_CS_3_NGROUPS_Z(uint32_t val)
|
|||
return ((val) << CP_EXEC_CS_3_NGROUPS_Z__SHIFT) & CP_EXEC_CS_3_NGROUPS_Z__MASK;
|
||||
}
|
||||
|
||||
#define REG_A4XX_CP_EXEC_CS_INDIRECT_0 0x00000000
|
||||
|
||||
|
||||
#define REG_A4XX_CP_EXEC_CS_INDIRECT_1 0x00000001
|
||||
#define A4XX_CP_EXEC_CS_INDIRECT_1_ADDR__MASK 0xffffffff
|
||||
#define A4XX_CP_EXEC_CS_INDIRECT_1_ADDR__SHIFT 0
|
||||
static inline uint32_t A4XX_CP_EXEC_CS_INDIRECT_1_ADDR(uint32_t val)
|
||||
{
|
||||
return ((val) << A4XX_CP_EXEC_CS_INDIRECT_1_ADDR__SHIFT) & A4XX_CP_EXEC_CS_INDIRECT_1_ADDR__MASK;
|
||||
}
|
||||
|
||||
#define REG_A4XX_CP_EXEC_CS_INDIRECT_2 0x00000002
|
||||
#define A4XX_CP_EXEC_CS_INDIRECT_2_LOCALSIZEX__MASK 0x00000ffc
|
||||
#define A4XX_CP_EXEC_CS_INDIRECT_2_LOCALSIZEX__SHIFT 2
|
||||
static inline uint32_t A4XX_CP_EXEC_CS_INDIRECT_2_LOCALSIZEX(uint32_t val)
|
||||
{
|
||||
return ((val) << A4XX_CP_EXEC_CS_INDIRECT_2_LOCALSIZEX__SHIFT) & A4XX_CP_EXEC_CS_INDIRECT_2_LOCALSIZEX__MASK;
|
||||
}
|
||||
#define A4XX_CP_EXEC_CS_INDIRECT_2_LOCALSIZEY__MASK 0x003ff000
|
||||
#define A4XX_CP_EXEC_CS_INDIRECT_2_LOCALSIZEY__SHIFT 12
|
||||
static inline uint32_t A4XX_CP_EXEC_CS_INDIRECT_2_LOCALSIZEY(uint32_t val)
|
||||
{
|
||||
return ((val) << A4XX_CP_EXEC_CS_INDIRECT_2_LOCALSIZEY__SHIFT) & A4XX_CP_EXEC_CS_INDIRECT_2_LOCALSIZEY__MASK;
|
||||
}
|
||||
#define A4XX_CP_EXEC_CS_INDIRECT_2_LOCALSIZEZ__MASK 0xffc00000
|
||||
#define A4XX_CP_EXEC_CS_INDIRECT_2_LOCALSIZEZ__SHIFT 22
|
||||
static inline uint32_t A4XX_CP_EXEC_CS_INDIRECT_2_LOCALSIZEZ(uint32_t val)
|
||||
{
|
||||
return ((val) << A4XX_CP_EXEC_CS_INDIRECT_2_LOCALSIZEZ__SHIFT) & A4XX_CP_EXEC_CS_INDIRECT_2_LOCALSIZEZ__MASK;
|
||||
}
|
||||
|
||||
|
||||
#define REG_A5XX_CP_EXEC_CS_INDIRECT_1 0x00000001
|
||||
#define A5XX_CP_EXEC_CS_INDIRECT_1_ADDR_LO__MASK 0xffffffff
|
||||
#define A5XX_CP_EXEC_CS_INDIRECT_1_ADDR_LO__SHIFT 0
|
||||
static inline uint32_t A5XX_CP_EXEC_CS_INDIRECT_1_ADDR_LO(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_CP_EXEC_CS_INDIRECT_1_ADDR_LO__SHIFT) & A5XX_CP_EXEC_CS_INDIRECT_1_ADDR_LO__MASK;
|
||||
}
|
||||
|
||||
#define REG_A5XX_CP_EXEC_CS_INDIRECT_2 0x00000002
|
||||
#define A5XX_CP_EXEC_CS_INDIRECT_2_ADDR_HI__MASK 0xffffffff
|
||||
#define A5XX_CP_EXEC_CS_INDIRECT_2_ADDR_HI__SHIFT 0
|
||||
static inline uint32_t A5XX_CP_EXEC_CS_INDIRECT_2_ADDR_HI(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_CP_EXEC_CS_INDIRECT_2_ADDR_HI__SHIFT) & A5XX_CP_EXEC_CS_INDIRECT_2_ADDR_HI__MASK;
|
||||
}
|
||||
|
||||
#define REG_A5XX_CP_EXEC_CS_INDIRECT_3 0x00000003
|
||||
#define A5XX_CP_EXEC_CS_INDIRECT_3_LOCALSIZEX__MASK 0x00000ffc
|
||||
#define A5XX_CP_EXEC_CS_INDIRECT_3_LOCALSIZEX__SHIFT 2
|
||||
static inline uint32_t A5XX_CP_EXEC_CS_INDIRECT_3_LOCALSIZEX(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_CP_EXEC_CS_INDIRECT_3_LOCALSIZEX__SHIFT) & A5XX_CP_EXEC_CS_INDIRECT_3_LOCALSIZEX__MASK;
|
||||
}
|
||||
#define A5XX_CP_EXEC_CS_INDIRECT_3_LOCALSIZEY__MASK 0x003ff000
|
||||
#define A5XX_CP_EXEC_CS_INDIRECT_3_LOCALSIZEY__SHIFT 12
|
||||
static inline uint32_t A5XX_CP_EXEC_CS_INDIRECT_3_LOCALSIZEY(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_CP_EXEC_CS_INDIRECT_3_LOCALSIZEY__SHIFT) & A5XX_CP_EXEC_CS_INDIRECT_3_LOCALSIZEY__MASK;
|
||||
}
|
||||
#define A5XX_CP_EXEC_CS_INDIRECT_3_LOCALSIZEZ__MASK 0xffc00000
|
||||
#define A5XX_CP_EXEC_CS_INDIRECT_3_LOCALSIZEZ__SHIFT 22
|
||||
static inline uint32_t A5XX_CP_EXEC_CS_INDIRECT_3_LOCALSIZEZ(uint32_t val)
|
||||
{
|
||||
return ((val) << A5XX_CP_EXEC_CS_INDIRECT_3_LOCALSIZEZ__SHIFT) & A5XX_CP_EXEC_CS_INDIRECT_3_LOCALSIZEZ__MASK;
|
||||
}
|
||||
|
||||
#define REG_A2XX_CP_SET_MARKER_0 0x00000000
|
||||
#define A2XX_CP_SET_MARKER_0_MARKER__MASK 0x0000000f
|
||||
#define A2XX_CP_SET_MARKER_0_MARKER__SHIFT 0
|
||||
static inline uint32_t A2XX_CP_SET_MARKER_0_MARKER(uint32_t val)
|
||||
{
|
||||
return ((val) << A2XX_CP_SET_MARKER_0_MARKER__SHIFT) & A2XX_CP_SET_MARKER_0_MARKER__MASK;
|
||||
}
|
||||
#define A2XX_CP_SET_MARKER_0_MODE__MASK 0x0000000f
|
||||
#define A2XX_CP_SET_MARKER_0_MODE__SHIFT 0
|
||||
static inline uint32_t A2XX_CP_SET_MARKER_0_MODE(enum a6xx_render_mode val)
|
||||
{
|
||||
return ((val) << A2XX_CP_SET_MARKER_0_MODE__SHIFT) & A2XX_CP_SET_MARKER_0_MODE__MASK;
|
||||
}
|
||||
#define A2XX_CP_SET_MARKER_0_IFPC 0x00000100
|
||||
|
||||
static inline uint32_t REG_A2XX_CP_SET_PSEUDO_REG_(uint32_t i0) { return 0x00000000 + 0x3*i0; }
|
||||
|
||||
static inline uint32_t REG_A2XX_CP_SET_PSEUDO_REG__0(uint32_t i0) { return 0x00000000 + 0x3*i0; }
|
||||
#define A2XX_CP_SET_PSEUDO_REG__0_PSEUDO_REG__MASK 0x00000007
|
||||
#define A2XX_CP_SET_PSEUDO_REG__0_PSEUDO_REG__SHIFT 0
|
||||
static inline uint32_t A2XX_CP_SET_PSEUDO_REG__0_PSEUDO_REG(enum pseudo_reg val)
|
||||
{
|
||||
return ((val) << A2XX_CP_SET_PSEUDO_REG__0_PSEUDO_REG__SHIFT) & A2XX_CP_SET_PSEUDO_REG__0_PSEUDO_REG__MASK;
|
||||
}
|
||||
|
||||
static inline uint32_t REG_A2XX_CP_SET_PSEUDO_REG__1(uint32_t i0) { return 0x00000001 + 0x3*i0; }
|
||||
#define A2XX_CP_SET_PSEUDO_REG__1_LO__MASK 0xffffffff
|
||||
#define A2XX_CP_SET_PSEUDO_REG__1_LO__SHIFT 0
|
||||
static inline uint32_t A2XX_CP_SET_PSEUDO_REG__1_LO(uint32_t val)
|
||||
{
|
||||
return ((val) << A2XX_CP_SET_PSEUDO_REG__1_LO__SHIFT) & A2XX_CP_SET_PSEUDO_REG__1_LO__MASK;
|
||||
}
|
||||
|
||||
static inline uint32_t REG_A2XX_CP_SET_PSEUDO_REG__2(uint32_t i0) { return 0x00000002 + 0x3*i0; }
|
||||
#define A2XX_CP_SET_PSEUDO_REG__2_HI__MASK 0xffffffff
|
||||
#define A2XX_CP_SET_PSEUDO_REG__2_HI__SHIFT 0
|
||||
static inline uint32_t A2XX_CP_SET_PSEUDO_REG__2_HI(uint32_t val)
|
||||
{
|
||||
return ((val) << A2XX_CP_SET_PSEUDO_REG__2_HI__SHIFT) & A2XX_CP_SET_PSEUDO_REG__2_HI__MASK;
|
||||
}
|
||||
|
||||
#define REG_A2XX_CP_REG_TEST_0 0x00000000
|
||||
#define A2XX_CP_REG_TEST_0_REG__MASK 0x00000fff
|
||||
#define A2XX_CP_REG_TEST_0_REG__SHIFT 0
|
||||
static inline uint32_t A2XX_CP_REG_TEST_0_REG(uint32_t val)
|
||||
{
|
||||
return ((val) << A2XX_CP_REG_TEST_0_REG__SHIFT) & A2XX_CP_REG_TEST_0_REG__MASK;
|
||||
}
|
||||
#define A2XX_CP_REG_TEST_0_BIT__MASK 0x01f00000
|
||||
#define A2XX_CP_REG_TEST_0_BIT__SHIFT 20
|
||||
static inline uint32_t A2XX_CP_REG_TEST_0_BIT(uint32_t val)
|
||||
{
|
||||
return ((val) << A2XX_CP_REG_TEST_0_BIT__SHIFT) & A2XX_CP_REG_TEST_0_BIT__MASK;
|
||||
}
|
||||
#define A2XX_CP_REG_TEST_0_UNK25 0x02000000
|
||||
|
||||
|
||||
#endif /* ADRENO_PM4_XML */
|
||||
|
|
|
@ -8,19 +8,19 @@ http://github.com/freedreno/envytools/
|
|||
git clone https://github.com/freedreno/envytools.git
|
||||
|
||||
The rules-ng-ng source files this header was generated from are:
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/msm.xml ( 676 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1572 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp4.xml ( 20915 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml ( 2849 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml ( 37411 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 33004 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 602 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1686 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/hdmi/qfprom.xml ( 600 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/hdmi/hdmi.xml ( 41799 bytes, from 2017-06-16 12:32:42)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/edp/edp.xml ( 10416 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/envytools/rnndb/msm.xml ( 676 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/freedreno_copyright.xml ( 1572 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/mdp/mdp4.xml ( 20915 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/mdp/mdp_common.xml ( 2849 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/mdp/mdp5.xml ( 37411 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/dsi/dsi.xml ( 37239 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/dsi/sfpb.xml ( 602 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/dsi/mmss_cc.xml ( 1686 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/hdmi/qfprom.xml ( 600 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/hdmi/hdmi.xml ( 41799 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/edp/edp.xml ( 10416 bytes, from 2018-07-03 19:37:13)
|
||||
|
||||
Copyright (C) 2013-2017 by the following authors:
|
||||
Copyright (C) 2013-2018 by the following authors:
|
||||
- Rob Clark <robdclark@gmail.com> (robclark)
|
||||
- Ilia Mirkin <imirkin@alum.mit.edu> (imirkin)
|
||||
|
||||
|
|
|
@ -8,19 +8,19 @@ http://github.com/freedreno/envytools/
|
|||
git clone https://github.com/freedreno/envytools.git
|
||||
|
||||
The rules-ng-ng source files this header was generated from are:
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/msm.xml ( 676 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1572 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp4.xml ( 20915 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml ( 2849 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml ( 37411 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 33004 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 602 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1686 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/hdmi/qfprom.xml ( 600 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/hdmi/hdmi.xml ( 41799 bytes, from 2017-06-16 12:32:42)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/edp/edp.xml ( 10416 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/envytools/rnndb/msm.xml ( 676 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/freedreno_copyright.xml ( 1572 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/mdp/mdp4.xml ( 20915 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/mdp/mdp_common.xml ( 2849 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/mdp/mdp5.xml ( 37411 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/dsi/dsi.xml ( 37239 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/dsi/sfpb.xml ( 602 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/dsi/mmss_cc.xml ( 1686 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/hdmi/qfprom.xml ( 600 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/hdmi/hdmi.xml ( 41799 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/edp/edp.xml ( 10416 bytes, from 2018-07-03 19:37:13)
|
||||
|
||||
Copyright (C) 2013-2017 by the following authors:
|
||||
Copyright (C) 2013-2018 by the following authors:
|
||||
- Rob Clark <robdclark@gmail.com> (robclark)
|
||||
- Ilia Mirkin <imirkin@alum.mit.edu> (imirkin)
|
||||
|
||||
|
|
|
@ -8,19 +8,19 @@ http://github.com/freedreno/envytools/
|
|||
git clone https://github.com/freedreno/envytools.git
|
||||
|
||||
The rules-ng-ng source files this header was generated from are:
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/msm.xml ( 676 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1572 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp4.xml ( 20915 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml ( 2849 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml ( 37411 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 33004 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 602 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1686 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/hdmi/qfprom.xml ( 600 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/hdmi/hdmi.xml ( 41799 bytes, from 2017-06-16 12:32:42)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/edp/edp.xml ( 10416 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/envytools/rnndb/msm.xml ( 676 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/freedreno_copyright.xml ( 1572 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/mdp/mdp4.xml ( 20915 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/mdp/mdp_common.xml ( 2849 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/mdp/mdp5.xml ( 37411 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/dsi/dsi.xml ( 37239 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/dsi/sfpb.xml ( 602 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/dsi/mmss_cc.xml ( 1686 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/hdmi/qfprom.xml ( 600 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/hdmi/hdmi.xml ( 41799 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/edp/edp.xml ( 10416 bytes, from 2018-07-03 19:37:13)
|
||||
|
||||
Copyright (C) 2013-2017 by the following authors:
|
||||
Copyright (C) 2013-2018 by the following authors:
|
||||
- Rob Clark <robdclark@gmail.com> (robclark)
|
||||
- Ilia Mirkin <imirkin@alum.mit.edu> (imirkin)
|
||||
|
||||
|
|
|
@ -8,8 +8,17 @@ http://github.com/freedreno/envytools/
|
|||
git clone https://github.com/freedreno/envytools.git
|
||||
|
||||
The rules-ng-ng source files this header was generated from are:
|
||||
- /local/mnt/workspace/source_trees/envytools/rnndb/../rnndb/dsi/dsi.xml ( 37239 bytes, from 2018-01-12 09:09:22)
|
||||
- /local/mnt/workspace/source_trees/envytools/rnndb/freedreno_copyright.xml ( 1572 bytes, from 2016-05-09 06:32:54)
|
||||
- /home/robclark/src/envytools/rnndb/msm.xml ( 676 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/freedreno_copyright.xml ( 1572 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/mdp/mdp4.xml ( 20915 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/mdp/mdp_common.xml ( 2849 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/mdp/mdp5.xml ( 37411 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/dsi/dsi.xml ( 37239 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/dsi/sfpb.xml ( 602 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/dsi/mmss_cc.xml ( 1686 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/hdmi/qfprom.xml ( 600 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/hdmi/hdmi.xml ( 41799 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/edp/edp.xml ( 10416 bytes, from 2018-07-03 19:37:13)
|
||||
|
||||
Copyright (C) 2013-2018 by the following authors:
|
||||
- Rob Clark <robdclark@gmail.com> (robclark)
|
||||
|
|
|
@ -8,19 +8,19 @@ http://github.com/freedreno/envytools/
|
|||
git clone https://github.com/freedreno/envytools.git
|
||||
|
||||
The rules-ng-ng source files this header was generated from are:
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/msm.xml ( 676 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1572 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp4.xml ( 20915 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml ( 2849 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml ( 37411 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 33004 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 602 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1686 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/hdmi/qfprom.xml ( 600 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/hdmi/hdmi.xml ( 41799 bytes, from 2017-06-16 12:32:42)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/edp/edp.xml ( 10416 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/envytools/rnndb/msm.xml ( 676 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/freedreno_copyright.xml ( 1572 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/mdp/mdp4.xml ( 20915 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/mdp/mdp_common.xml ( 2849 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/mdp/mdp5.xml ( 37411 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/dsi/dsi.xml ( 37239 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/dsi/sfpb.xml ( 602 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/dsi/mmss_cc.xml ( 1686 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/hdmi/qfprom.xml ( 600 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/hdmi/hdmi.xml ( 41799 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/edp/edp.xml ( 10416 bytes, from 2018-07-03 19:37:13)
|
||||
|
||||
Copyright (C) 2013-2017 by the following authors:
|
||||
Copyright (C) 2013-2018 by the following authors:
|
||||
- Rob Clark <robdclark@gmail.com> (robclark)
|
||||
- Ilia Mirkin <imirkin@alum.mit.edu> (imirkin)
|
||||
|
||||
|
|
|
@ -8,19 +8,19 @@ http://github.com/freedreno/envytools/
|
|||
git clone https://github.com/freedreno/envytools.git
|
||||
|
||||
The rules-ng-ng source files this header was generated from are:
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/msm.xml ( 676 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1572 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp4.xml ( 20915 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml ( 2849 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml ( 37411 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 33004 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 602 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1686 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/hdmi/qfprom.xml ( 600 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/hdmi/hdmi.xml ( 41799 bytes, from 2017-06-16 12:32:42)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/edp/edp.xml ( 10416 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/envytools/rnndb/msm.xml ( 676 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/freedreno_copyright.xml ( 1572 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/mdp/mdp4.xml ( 20915 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/mdp/mdp_common.xml ( 2849 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/mdp/mdp5.xml ( 37411 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/dsi/dsi.xml ( 37239 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/dsi/sfpb.xml ( 602 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/dsi/mmss_cc.xml ( 1686 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/hdmi/qfprom.xml ( 600 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/hdmi/hdmi.xml ( 41799 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/edp/edp.xml ( 10416 bytes, from 2018-07-03 19:37:13)
|
||||
|
||||
Copyright (C) 2013-2017 by the following authors:
|
||||
Copyright (C) 2013-2018 by the following authors:
|
||||
- Rob Clark <robdclark@gmail.com> (robclark)
|
||||
- Ilia Mirkin <imirkin@alum.mit.edu> (imirkin)
|
||||
|
||||
|
|
|
@ -8,19 +8,19 @@ http://github.com/freedreno/envytools/
|
|||
git clone https://github.com/freedreno/envytools.git
|
||||
|
||||
The rules-ng-ng source files this header was generated from are:
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/msm.xml ( 676 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1572 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp4.xml ( 20915 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml ( 2849 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml ( 37411 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 33004 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 602 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1686 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/hdmi/qfprom.xml ( 600 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/hdmi/hdmi.xml ( 41799 bytes, from 2017-06-16 12:32:42)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/edp/edp.xml ( 10416 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/envytools/rnndb/msm.xml ( 676 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/freedreno_copyright.xml ( 1572 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/mdp/mdp4.xml ( 20915 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/mdp/mdp_common.xml ( 2849 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/mdp/mdp5.xml ( 37411 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/dsi/dsi.xml ( 37239 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/dsi/sfpb.xml ( 602 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/dsi/mmss_cc.xml ( 1686 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/hdmi/qfprom.xml ( 600 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/hdmi/hdmi.xml ( 41799 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/edp/edp.xml ( 10416 bytes, from 2018-07-03 19:37:13)
|
||||
|
||||
Copyright (C) 2013-2017 by the following authors:
|
||||
Copyright (C) 2013-2018 by the following authors:
|
||||
- Rob Clark <robdclark@gmail.com> (robclark)
|
||||
- Ilia Mirkin <imirkin@alum.mit.edu> (imirkin)
|
||||
|
||||
|
|
|
@ -8,19 +8,19 @@ http://github.com/freedreno/envytools/
|
|||
git clone https://github.com/freedreno/envytools.git
|
||||
|
||||
The rules-ng-ng source files this header was generated from are:
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/msm.xml ( 676 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1572 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp4.xml ( 20915 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml ( 2849 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml ( 37411 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 33004 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 602 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1686 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/hdmi/qfprom.xml ( 600 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/hdmi/hdmi.xml ( 41799 bytes, from 2017-06-16 12:32:42)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/edp/edp.xml ( 10416 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/envytools/rnndb/msm.xml ( 676 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/freedreno_copyright.xml ( 1572 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/mdp/mdp4.xml ( 20915 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/mdp/mdp_common.xml ( 2849 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/mdp/mdp5.xml ( 37411 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/dsi/dsi.xml ( 37239 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/dsi/sfpb.xml ( 602 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/dsi/mmss_cc.xml ( 1686 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/hdmi/qfprom.xml ( 600 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/hdmi/hdmi.xml ( 41799 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/edp/edp.xml ( 10416 bytes, from 2018-07-03 19:37:13)
|
||||
|
||||
Copyright (C) 2013-2017 by the following authors:
|
||||
Copyright (C) 2013-2018 by the following authors:
|
||||
- Rob Clark <robdclark@gmail.com> (robclark)
|
||||
- Ilia Mirkin <imirkin@alum.mit.edu> (imirkin)
|
||||
|
||||
|
|
|
@ -8,19 +8,19 @@ http://github.com/freedreno/envytools/
|
|||
git clone https://github.com/freedreno/envytools.git
|
||||
|
||||
The rules-ng-ng source files this header was generated from are:
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/msm.xml ( 676 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1572 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp4.xml ( 20915 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml ( 2849 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml ( 37411 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 33004 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 602 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1686 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/hdmi/qfprom.xml ( 600 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/hdmi/hdmi.xml ( 41799 bytes, from 2017-06-16 12:32:42)
|
||||
- /home/robclark/src/freedreno/envytools/rnndb/edp/edp.xml ( 10416 bytes, from 2017-05-17 13:21:27)
|
||||
- /home/robclark/src/envytools/rnndb/msm.xml ( 676 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/freedreno_copyright.xml ( 1572 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/mdp/mdp4.xml ( 20915 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/mdp/mdp_common.xml ( 2849 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/mdp/mdp5.xml ( 37411 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/dsi/dsi.xml ( 37239 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/dsi/sfpb.xml ( 602 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/dsi/mmss_cc.xml ( 1686 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/hdmi/qfprom.xml ( 600 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/hdmi/hdmi.xml ( 41799 bytes, from 2018-07-03 19:37:13)
|
||||
- /home/robclark/src/envytools/rnndb/edp/edp.xml ( 10416 bytes, from 2018-07-03 19:37:13)
|
||||
|
||||
Copyright (C) 2013-2017 by the following authors:
|
||||
Copyright (C) 2013-2018 by the following authors:
|
||||
- Rob Clark <robdclark@gmail.com> (robclark)
|
||||
- Ilia Mirkin <imirkin@alum.mit.edu> (imirkin)
|
||||
|
||||
|
|
|
@ -81,6 +81,63 @@ module_param(modeset, bool, 0600);
|
|||
* Util/helpers:
|
||||
*/
|
||||
|
||||
int msm_clk_bulk_get(struct device *dev, struct clk_bulk_data **bulk)
|
||||
{
|
||||
struct property *prop;
|
||||
const char *name;
|
||||
struct clk_bulk_data *local;
|
||||
int i = 0, ret, count;
|
||||
|
||||
count = of_property_count_strings(dev->of_node, "clock-names");
|
||||
if (count < 1)
|
||||
return 0;
|
||||
|
||||
local = devm_kcalloc(dev, sizeof(struct clk_bulk_data *),
|
||||
count, GFP_KERNEL);
|
||||
if (!local)
|
||||
return -ENOMEM;
|
||||
|
||||
of_property_for_each_string(dev->of_node, "clock-names", prop, name) {
|
||||
local[i].id = devm_kstrdup(dev, name, GFP_KERNEL);
|
||||
if (!local[i].id) {
|
||||
devm_kfree(dev, local);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
i++;
|
||||
}
|
||||
|
||||
ret = devm_clk_bulk_get(dev, count, local);
|
||||
|
||||
if (ret) {
|
||||
for (i = 0; i < count; i++)
|
||||
devm_kfree(dev, (void *) local[i].id);
|
||||
devm_kfree(dev, local);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
*bulk = local;
|
||||
return count;
|
||||
}
|
||||
|
||||
struct clk *msm_clk_bulk_get_clock(struct clk_bulk_data *bulk, int count,
|
||||
const char *name)
|
||||
{
|
||||
int i;
|
||||
char n[32];
|
||||
|
||||
snprintf(n, sizeof(n), "%s_clk", name);
|
||||
|
||||
for (i = 0; bulk && i < count; i++) {
|
||||
if (!strcmp(bulk[i].id, name) || !strcmp(bulk[i].id, n))
|
||||
return bulk[i].clk;
|
||||
}
|
||||
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct clk *msm_clk_get(struct platform_device *pdev, const char *name)
|
||||
{
|
||||
struct clk *clk;
|
||||
|
|
|
@ -387,6 +387,10 @@ static inline void msm_perf_debugfs_cleanup(struct msm_drm_private *priv) {}
|
|||
#endif
|
||||
|
||||
struct clk *msm_clk_get(struct platform_device *pdev, const char *name);
|
||||
int msm_clk_bulk_get(struct device *dev, struct clk_bulk_data **bulk);
|
||||
|
||||
struct clk *msm_clk_bulk_get_clock(struct clk_bulk_data *bulk, int count,
|
||||
const char *name);
|
||||
void __iomem *msm_ioremap(struct platform_device *pdev, const char *name,
|
||||
const char *dbgname);
|
||||
void msm_writel(u32 data, void __iomem *addr);
|
||||
|
|
|
@ -88,7 +88,7 @@ static struct devfreq_dev_profile msm_devfreq_profile = {
|
|||
static void msm_devfreq_init(struct msm_gpu *gpu)
|
||||
{
|
||||
/* We need target support to do devfreq */
|
||||
if (!gpu->funcs->gpu_busy)
|
||||
if (!gpu->funcs->gpu_busy || !gpu->core_clk)
|
||||
return;
|
||||
|
||||
msm_devfreq_profile.initial_freq = gpu->fast_rate;
|
||||
|
@ -142,8 +142,6 @@ static int disable_pwrrail(struct msm_gpu *gpu)
|
|||
|
||||
static int enable_clk(struct msm_gpu *gpu)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (gpu->core_clk && gpu->fast_rate)
|
||||
clk_set_rate(gpu->core_clk, gpu->fast_rate);
|
||||
|
||||
|
@ -151,28 +149,12 @@ static int enable_clk(struct msm_gpu *gpu)
|
|||
if (gpu->rbbmtimer_clk)
|
||||
clk_set_rate(gpu->rbbmtimer_clk, 19200000);
|
||||
|
||||
for (i = gpu->nr_clocks - 1; i >= 0; i--)
|
||||
if (gpu->grp_clks[i])
|
||||
clk_prepare(gpu->grp_clks[i]);
|
||||
|
||||
for (i = gpu->nr_clocks - 1; i >= 0; i--)
|
||||
if (gpu->grp_clks[i])
|
||||
clk_enable(gpu->grp_clks[i]);
|
||||
|
||||
return 0;
|
||||
return clk_bulk_prepare_enable(gpu->nr_clocks, gpu->grp_clks);
|
||||
}
|
||||
|
||||
static int disable_clk(struct msm_gpu *gpu)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = gpu->nr_clocks - 1; i >= 0; i--)
|
||||
if (gpu->grp_clks[i])
|
||||
clk_disable(gpu->grp_clks[i]);
|
||||
|
||||
for (i = gpu->nr_clocks - 1; i >= 0; i--)
|
||||
if (gpu->grp_clks[i])
|
||||
clk_unprepare(gpu->grp_clks[i]);
|
||||
clk_bulk_disable_unprepare(gpu->nr_clocks, gpu->grp_clks);
|
||||
|
||||
/*
|
||||
* Set the clock to a deliberately low rate. On older targets the clock
|
||||
|
@ -785,44 +767,22 @@ static irqreturn_t irq_handler(int irq, void *data)
|
|||
return gpu->funcs->irq(gpu);
|
||||
}
|
||||
|
||||
static struct clk *get_clock(struct device *dev, const char *name)
|
||||
{
|
||||
struct clk *clk = devm_clk_get(dev, name);
|
||||
|
||||
return IS_ERR(clk) ? NULL : clk;
|
||||
}
|
||||
|
||||
static int get_clocks(struct platform_device *pdev, struct msm_gpu *gpu)
|
||||
{
|
||||
struct device *dev = &pdev->dev;
|
||||
struct property *prop;
|
||||
const char *name;
|
||||
int i = 0;
|
||||
int ret = msm_clk_bulk_get(&pdev->dev, &gpu->grp_clks);
|
||||
|
||||
gpu->nr_clocks = of_property_count_strings(dev->of_node, "clock-names");
|
||||
if (gpu->nr_clocks < 1) {
|
||||
if (ret < 1) {
|
||||
gpu->nr_clocks = 0;
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
gpu->grp_clks = devm_kcalloc(dev, sizeof(struct clk *), gpu->nr_clocks,
|
||||
GFP_KERNEL);
|
||||
if (!gpu->grp_clks) {
|
||||
gpu->nr_clocks = 0;
|
||||
return -ENOMEM;
|
||||
}
|
||||
gpu->nr_clocks = ret;
|
||||
|
||||
of_property_for_each_string(dev->of_node, "clock-names", prop, name) {
|
||||
gpu->grp_clks[i] = get_clock(dev, name);
|
||||
gpu->core_clk = msm_clk_bulk_get_clock(gpu->grp_clks,
|
||||
gpu->nr_clocks, "core");
|
||||
|
||||
/* Remember the key clocks that we need to control later */
|
||||
if (!strcmp(name, "core") || !strcmp(name, "core_clk"))
|
||||
gpu->core_clk = gpu->grp_clks[i];
|
||||
else if (!strcmp(name, "rbbmtimer") || !strcmp(name, "rbbmtimer_clk"))
|
||||
gpu->rbbmtimer_clk = gpu->grp_clks[i];
|
||||
|
||||
++i;
|
||||
}
|
||||
gpu->rbbmtimer_clk = msm_clk_bulk_get_clock(gpu->grp_clks,
|
||||
gpu->nr_clocks, "rbbmtimer");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -112,7 +112,7 @@ struct msm_gpu {
|
|||
|
||||
/* Power Control: */
|
||||
struct regulator *gpu_reg, *gpu_cx;
|
||||
struct clk **grp_clks;
|
||||
struct clk_bulk_data *grp_clks;
|
||||
int nr_clocks;
|
||||
struct clk *ebi1_clk, *core_clk, *rbbmtimer_clk;
|
||||
uint32_t fast_rate;
|
||||
|
|
Loading…
Reference in New Issue