diff options
author | Dave Airlie <airlied@redhat.com> | 2013-11-10 03:27:31 -0500 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2013-11-10 03:27:31 -0500 |
commit | c4b3a81f4e053bb13382e0ffaf69f3e7e4f124fd (patch) | |
tree | 869f84216ce1cabcdd194d692f7fac8c4afe6b0e | |
parent | 98706ea99f2da8afdac69686de4ff982aca6a5c7 (diff) | |
parent | 2a2b8fa628a5069db1cc984d21a3048ffd485346 (diff) |
Merge branch 'msm-next' of git://people.freedesktop.org/~robclark/linux into drm-next
prime support, inactive rework, render nodes
* 'msm-next' of git://people.freedesktop.org/~robclark/linux:
drm/msm/mdp4: page_flip cleanups/fixes
drm/msm: EBUSY status handling in msm_gem_fault()
drm/msm: rework inactive-work
drm/msm: add plane support
drm/msm: resync generated headers
drm/msm: support render nodes
drm/msm: prime support
22 files changed, 664 insertions, 252 deletions
diff --git a/drivers/gpu/drm/msm/Makefile b/drivers/gpu/drm/msm/Makefile index e17914889e54..e5fa12b0d21e 100644 --- a/drivers/gpu/drm/msm/Makefile +++ b/drivers/gpu/drm/msm/Makefile | |||
@@ -21,6 +21,7 @@ msm-y := \ | |||
21 | msm_drv.o \ | 21 | msm_drv.o \ |
22 | msm_fb.o \ | 22 | msm_fb.o \ |
23 | msm_gem.o \ | 23 | msm_gem.o \ |
24 | msm_gem_prime.o \ | ||
24 | msm_gem_submit.o \ | 25 | msm_gem_submit.o \ |
25 | msm_gpu.o \ | 26 | msm_gpu.o \ |
26 | msm_ringbuffer.o | 27 | msm_ringbuffer.o |
diff --git a/drivers/gpu/drm/msm/adreno/a2xx.xml.h b/drivers/gpu/drm/msm/adreno/a2xx.xml.h index 35463864b959..9588098741b5 100644 --- a/drivers/gpu/drm/msm/adreno/a2xx.xml.h +++ b/drivers/gpu/drm/msm/adreno/a2xx.xml.h | |||
@@ -4,16 +4,16 @@ | |||
4 | /* Autogenerated file, DO NOT EDIT manually! | 4 | /* Autogenerated file, DO NOT EDIT manually! |
5 | 5 | ||
6 | This file was generated by the rules-ng-ng headergen tool in this git repository: | 6 | This file was generated by the rules-ng-ng headergen tool in this git repository: |
7 | http://0x04.net/cgit/index.cgi/rules-ng-ng | 7 | http://github.com/freedreno/envytools/ |
8 | git clone git://0x04.net/rules-ng-ng | 8 | git clone https://github.com/freedreno/envytools.git |
9 | 9 | ||
10 | The rules-ng-ng source files this header was generated from are: | 10 | The rules-ng-ng source files this header was generated from are: |
11 | - /home/robclark/src/freedreno/envytools/rnndb/adreno.xml ( 327 bytes, from 2013-07-05 19:21:12) | 11 | - /home/robclark/src/freedreno/envytools/rnndb/adreno.xml ( 327 bytes, from 2013-07-05 19:21:12) |
12 | - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1453 bytes, from 2013-03-31 16:51:27) | 12 | - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1453 bytes, from 2013-03-31 16:51:27) |
13 | - /home/robclark/src/freedreno/envytools/rnndb/a2xx/a2xx.xml ( 30005 bytes, from 2013-07-19 21:30:48) | 13 | - /home/robclark/src/freedreno/envytools/rnndb/a2xx/a2xx.xml ( 31003 bytes, from 2013-09-19 18:50:16) |
14 | - /home/robclark/src/freedreno/envytools/rnndb/adreno_common.xml ( 8983 bytes, from 2013-07-24 01:38:36) | 14 | - /home/robclark/src/freedreno/envytools/rnndb/adreno_common.xml ( 8983 bytes, from 2013-07-24 01:38:36) |
15 | - /home/robclark/src/freedreno/envytools/rnndb/adreno_pm4.xml ( 9712 bytes, from 2013-05-26 15:22:37) | 15 | - /home/robclark/src/freedreno/envytools/rnndb/adreno_pm4.xml ( 9759 bytes, from 2013-09-10 00:52:33) |
16 | - /home/robclark/src/freedreno/envytools/rnndb/a3xx/a3xx.xml ( 51415 bytes, from 2013-08-03 14:26:05) | 16 | - /home/robclark/src/freedreno/envytools/rnndb/a3xx/a3xx.xml ( 51983 bytes, from 2013-09-10 00:52:32) |
17 | 17 | ||
18 | Copyright (C) 2013 by the following authors: | 18 | Copyright (C) 2013 by the following authors: |
19 | - Rob Clark <robdclark@gmail.com> (robclark) | 19 | - Rob Clark <robdclark@gmail.com> (robclark) |
@@ -317,6 +317,38 @@ static inline uint32_t A2XX_RBBM_STATUS_CMDFIFO_AVAIL(uint32_t val) | |||
317 | #define A2XX_RBBM_STATUS_RB_CNTX_BUSY 0x40000000 | 317 | #define A2XX_RBBM_STATUS_RB_CNTX_BUSY 0x40000000 |
318 | #define A2XX_RBBM_STATUS_GUI_ACTIVE 0x80000000 | 318 | #define A2XX_RBBM_STATUS_GUI_ACTIVE 0x80000000 |
319 | 319 | ||
320 | #define REG_A2XX_MH_ARBITER_CONFIG 0x00000a40 | ||
321 | #define A2XX_MH_ARBITER_CONFIG_SAME_PAGE_LIMIT__MASK 0x0000003f | ||
322 | #define A2XX_MH_ARBITER_CONFIG_SAME_PAGE_LIMIT__SHIFT 0 | ||
323 | static inline uint32_t A2XX_MH_ARBITER_CONFIG_SAME_PAGE_LIMIT(uint32_t val) | ||
324 | { | ||
325 | return ((val) << A2XX_MH_ARBITER_CONFIG_SAME_PAGE_LIMIT__SHIFT) & A2XX_MH_ARBITER_CONFIG_SAME_PAGE_LIMIT__MASK; | ||
326 | } | ||
327 | #define A2XX_MH_ARBITER_CONFIG_SAME_PAGE_GRANULARITY 0x00000040 | ||
328 | #define A2XX_MH_ARBITER_CONFIG_L1_ARB_ENABLE 0x00000080 | ||
329 | #define A2XX_MH_ARBITER_CONFIG_L1_ARB_HOLD_ENABLE 0x00000100 | ||
330 | #define A2XX_MH_ARBITER_CONFIG_L2_ARB_CONTROL 0x00000200 | ||
331 | #define A2XX_MH_ARBITER_CONFIG_PAGE_SIZE__MASK 0x00001c00 | ||
332 | #define A2XX_MH_ARBITER_CONFIG_PAGE_SIZE__SHIFT 10 | ||
333 | static inline uint32_t A2XX_MH_ARBITER_CONFIG_PAGE_SIZE(uint32_t val) | ||
334 | { | ||
335 | return ((val) << A2XX_MH_ARBITER_CONFIG_PAGE_SIZE__SHIFT) & A2XX_MH_ARBITER_CONFIG_PAGE_SIZE__MASK; | ||
336 | } | ||
337 | #define A2XX_MH_ARBITER_CONFIG_TC_REORDER_ENABLE 0x00002000 | ||
338 | #define A2XX_MH_ARBITER_CONFIG_TC_ARB_HOLD_ENABLE 0x00004000 | ||
339 | #define A2XX_MH_ARBITER_CONFIG_IN_FLIGHT_LIMIT_ENABLE 0x00008000 | ||
340 | #define A2XX_MH_ARBITER_CONFIG_IN_FLIGHT_LIMIT__MASK 0x003f0000 | ||
341 | #define A2XX_MH_ARBITER_CONFIG_IN_FLIGHT_LIMIT__SHIFT 16 | ||
342 | static inline uint32_t A2XX_MH_ARBITER_CONFIG_IN_FLIGHT_LIMIT(uint32_t val) | ||
343 | { | ||
344 | return ((val) << A2XX_MH_ARBITER_CONFIG_IN_FLIGHT_LIMIT__SHIFT) & A2XX_MH_ARBITER_CONFIG_IN_FLIGHT_LIMIT__MASK; | ||
345 | } | ||
346 | #define A2XX_MH_ARBITER_CONFIG_CP_CLNT_ENABLE 0x00400000 | ||
347 | #define A2XX_MH_ARBITER_CONFIG_VGT_CLNT_ENABLE 0x00800000 | ||
348 | #define A2XX_MH_ARBITER_CONFIG_TC_CLNT_ENABLE 0x01000000 | ||
349 | #define A2XX_MH_ARBITER_CONFIG_RB_CLNT_ENABLE 0x02000000 | ||
350 | #define A2XX_MH_ARBITER_CONFIG_PA_CLNT_ENABLE 0x04000000 | ||
351 | |||
320 | #define REG_A2XX_A220_VSC_BIN_SIZE 0x00000c01 | 352 | #define REG_A2XX_A220_VSC_BIN_SIZE 0x00000c01 |
321 | #define A2XX_A220_VSC_BIN_SIZE_WIDTH__MASK 0x0000001f | 353 | #define A2XX_A220_VSC_BIN_SIZE_WIDTH__MASK 0x0000001f |
322 | #define A2XX_A220_VSC_BIN_SIZE_WIDTH__SHIFT 0 | 354 | #define A2XX_A220_VSC_BIN_SIZE_WIDTH__SHIFT 0 |
diff --git a/drivers/gpu/drm/msm/adreno/a3xx.xml.h b/drivers/gpu/drm/msm/adreno/a3xx.xml.h index d183516067b4..d4afdf657559 100644 --- a/drivers/gpu/drm/msm/adreno/a3xx.xml.h +++ b/drivers/gpu/drm/msm/adreno/a3xx.xml.h | |||
@@ -4,16 +4,16 @@ | |||
4 | /* Autogenerated file, DO NOT EDIT manually! | 4 | /* Autogenerated file, DO NOT EDIT manually! |
5 | 5 | ||
6 | This file was generated by the rules-ng-ng headergen tool in this git repository: | 6 | This file was generated by the rules-ng-ng headergen tool in this git repository: |
7 | http://0x04.net/cgit/index.cgi/rules-ng-ng | 7 | http://github.com/freedreno/envytools/ |
8 | git clone git://0x04.net/rules-ng-ng | 8 | git clone https://github.com/freedreno/envytools.git |
9 | 9 | ||
10 | The rules-ng-ng source files this header was generated from are: | 10 | The rules-ng-ng source files this header was generated from are: |
11 | - /home/robclark/src/freedreno/envytools/rnndb/adreno.xml ( 327 bytes, from 2013-07-05 19:21:12) | 11 | - /home/robclark/src/freedreno/envytools/rnndb/adreno.xml ( 327 bytes, from 2013-07-05 19:21:12) |
12 | - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1453 bytes, from 2013-03-31 16:51:27) | 12 | - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1453 bytes, from 2013-03-31 16:51:27) |
13 | - /home/robclark/src/freedreno/envytools/rnndb/a2xx/a2xx.xml ( 30005 bytes, from 2013-07-19 21:30:48) | 13 | - /home/robclark/src/freedreno/envytools/rnndb/a2xx/a2xx.xml ( 31003 bytes, from 2013-09-19 18:50:16) |
14 | - /home/robclark/src/freedreno/envytools/rnndb/adreno_common.xml ( 8983 bytes, from 2013-07-24 01:38:36) | 14 | - /home/robclark/src/freedreno/envytools/rnndb/adreno_common.xml ( 8983 bytes, from 2013-07-24 01:38:36) |
15 | - /home/robclark/src/freedreno/envytools/rnndb/adreno_pm4.xml ( 9712 bytes, from 2013-05-26 15:22:37) | 15 | - /home/robclark/src/freedreno/envytools/rnndb/adreno_pm4.xml ( 9759 bytes, from 2013-09-10 00:52:33) |
16 | - /home/robclark/src/freedreno/envytools/rnndb/a3xx/a3xx.xml ( 51415 bytes, from 2013-08-03 14:26:05) | 16 | - /home/robclark/src/freedreno/envytools/rnndb/a3xx/a3xx.xml ( 51983 bytes, from 2013-09-10 00:52:32) |
17 | 17 | ||
18 | Copyright (C) 2013 by the following authors: | 18 | Copyright (C) 2013 by the following authors: |
19 | - Rob Clark <robdclark@gmail.com> (robclark) | 19 | - Rob Clark <robdclark@gmail.com> (robclark) |
@@ -637,11 +637,12 @@ static inline uint32_t A3XX_GRAS_SU_POLY_OFFSET_OFFSET(float val) | |||
637 | #define REG_A3XX_GRAS_SU_MODE_CONTROL 0x00002070 | 637 | #define REG_A3XX_GRAS_SU_MODE_CONTROL 0x00002070 |
638 | #define A3XX_GRAS_SU_MODE_CONTROL_CULL_FRONT 0x00000001 | 638 | #define A3XX_GRAS_SU_MODE_CONTROL_CULL_FRONT 0x00000001 |
639 | #define A3XX_GRAS_SU_MODE_CONTROL_CULL_BACK 0x00000002 | 639 | #define A3XX_GRAS_SU_MODE_CONTROL_CULL_BACK 0x00000002 |
640 | #define A3XX_GRAS_SU_MODE_CONTROL_LINEHALFWIDTH__MASK 0x000007fc | 640 | #define A3XX_GRAS_SU_MODE_CONTROL_FRONT_CW 0x00000004 |
641 | #define A3XX_GRAS_SU_MODE_CONTROL_LINEHALFWIDTH__SHIFT 2 | 641 | #define A3XX_GRAS_SU_MODE_CONTROL_LINEHALFWIDTH__MASK 0x000007f8 |
642 | static inline uint32_t A3XX_GRAS_SU_MODE_CONTROL_LINEHALFWIDTH(uint32_t val) | 642 | #define A3XX_GRAS_SU_MODE_CONTROL_LINEHALFWIDTH__SHIFT 3 |
643 | static inline uint32_t A3XX_GRAS_SU_MODE_CONTROL_LINEHALFWIDTH(float val) | ||
643 | { | 644 | { |
644 | return ((val) << A3XX_GRAS_SU_MODE_CONTROL_LINEHALFWIDTH__SHIFT) & A3XX_GRAS_SU_MODE_CONTROL_LINEHALFWIDTH__MASK; | 645 | return ((((uint32_t)(val * 4.0))) << A3XX_GRAS_SU_MODE_CONTROL_LINEHALFWIDTH__SHIFT) & A3XX_GRAS_SU_MODE_CONTROL_LINEHALFWIDTH__MASK; |
645 | } | 646 | } |
646 | #define A3XX_GRAS_SU_MODE_CONTROL_POLY_OFFSET 0x00000800 | 647 | #define A3XX_GRAS_SU_MODE_CONTROL_POLY_OFFSET 0x00000800 |
647 | 648 | ||
@@ -745,6 +746,7 @@ static inline uint32_t A3XX_RB_RENDER_CONTROL_BIN_WIDTH(uint32_t val) | |||
745 | } | 746 | } |
746 | #define A3XX_RB_RENDER_CONTROL_DISABLE_COLOR_PIPE 0x00001000 | 747 | #define A3XX_RB_RENDER_CONTROL_DISABLE_COLOR_PIPE 0x00001000 |
747 | #define A3XX_RB_RENDER_CONTROL_ENABLE_GMEM 0x00002000 | 748 | #define A3XX_RB_RENDER_CONTROL_ENABLE_GMEM 0x00002000 |
749 | #define A3XX_RB_RENDER_CONTROL_ALPHA_TEST 0x00400000 | ||
748 | #define A3XX_RB_RENDER_CONTROL_ALPHA_TEST_FUNC__MASK 0x07000000 | 750 | #define A3XX_RB_RENDER_CONTROL_ALPHA_TEST_FUNC__MASK 0x07000000 |
749 | #define A3XX_RB_RENDER_CONTROL_ALPHA_TEST_FUNC__SHIFT 24 | 751 | #define A3XX_RB_RENDER_CONTROL_ALPHA_TEST_FUNC__SHIFT 24 |
750 | static inline uint32_t A3XX_RB_RENDER_CONTROL_ALPHA_TEST_FUNC(enum adreno_compare_func val) | 752 | static inline uint32_t A3XX_RB_RENDER_CONTROL_ALPHA_TEST_FUNC(enum adreno_compare_func val) |
@@ -767,7 +769,19 @@ static inline uint32_t A3XX_RB_MSAA_CONTROL_SAMPLE_MASK(uint32_t val) | |||
767 | return ((val) << A3XX_RB_MSAA_CONTROL_SAMPLE_MASK__SHIFT) & A3XX_RB_MSAA_CONTROL_SAMPLE_MASK__MASK; | 769 | return ((val) << A3XX_RB_MSAA_CONTROL_SAMPLE_MASK__SHIFT) & A3XX_RB_MSAA_CONTROL_SAMPLE_MASK__MASK; |
768 | } | 770 | } |
769 | 771 | ||
770 | #define REG_A3XX_UNKNOWN_20C3 0x000020c3 | 772 | #define REG_A3XX_RB_ALPHA_REF 0x000020c3 |
773 | #define A3XX_RB_ALPHA_REF_UINT__MASK 0x0000ff00 | ||
774 | #define A3XX_RB_ALPHA_REF_UINT__SHIFT 8 | ||
775 | static inline uint32_t A3XX_RB_ALPHA_REF_UINT(uint32_t val) | ||
776 | { | ||
777 | return ((val) << A3XX_RB_ALPHA_REF_UINT__SHIFT) & A3XX_RB_ALPHA_REF_UINT__MASK; | ||
778 | } | ||
779 | #define A3XX_RB_ALPHA_REF_FLOAT__MASK 0xffff0000 | ||
780 | #define A3XX_RB_ALPHA_REF_FLOAT__SHIFT 16 | ||
781 | static inline uint32_t A3XX_RB_ALPHA_REF_FLOAT(float val) | ||
782 | { | ||
783 | return ((util_float_to_half(val)) << A3XX_RB_ALPHA_REF_FLOAT__SHIFT) & A3XX_RB_ALPHA_REF_FLOAT__MASK; | ||
784 | } | ||
771 | 785 | ||
772 | static inline uint32_t REG_A3XX_RB_MRT(uint32_t i0) { return 0x000020c4 + 0x4*i0; } | 786 | static inline uint32_t REG_A3XX_RB_MRT(uint32_t i0) { return 0x000020c4 + 0x4*i0; } |
773 | 787 | ||
@@ -1002,7 +1016,7 @@ static inline uint32_t A3XX_RB_COPY_DEST_INFO_ENDIAN(enum adreno_rb_surface_endi | |||
1002 | #define REG_A3XX_RB_DEPTH_CONTROL 0x00002100 | 1016 | #define REG_A3XX_RB_DEPTH_CONTROL 0x00002100 |
1003 | #define A3XX_RB_DEPTH_CONTROL_Z_ENABLE 0x00000002 | 1017 | #define A3XX_RB_DEPTH_CONTROL_Z_ENABLE 0x00000002 |
1004 | #define A3XX_RB_DEPTH_CONTROL_Z_WRITE_ENABLE 0x00000004 | 1018 | #define A3XX_RB_DEPTH_CONTROL_Z_WRITE_ENABLE 0x00000004 |
1005 | #define A3XX_RB_DEPTH_CONTROL_EARLY_Z_ENABLE 0x00000008 | 1019 | #define A3XX_RB_DEPTH_CONTROL_EARLY_Z_DISABLE 0x00000008 |
1006 | #define A3XX_RB_DEPTH_CONTROL_ZFUNC__MASK 0x00000070 | 1020 | #define A3XX_RB_DEPTH_CONTROL_ZFUNC__MASK 0x00000070 |
1007 | #define A3XX_RB_DEPTH_CONTROL_ZFUNC__SHIFT 4 | 1021 | #define A3XX_RB_DEPTH_CONTROL_ZFUNC__SHIFT 4 |
1008 | static inline uint32_t A3XX_RB_DEPTH_CONTROL_ZFUNC(enum adreno_compare_func val) | 1022 | static inline uint32_t A3XX_RB_DEPTH_CONTROL_ZFUNC(enum adreno_compare_func val) |
@@ -1038,7 +1052,8 @@ static inline uint32_t A3XX_RB_DEPTH_PITCH(uint32_t val) | |||
1038 | 1052 | ||
1039 | #define REG_A3XX_RB_STENCIL_CONTROL 0x00002104 | 1053 | #define REG_A3XX_RB_STENCIL_CONTROL 0x00002104 |
1040 | #define A3XX_RB_STENCIL_CONTROL_STENCIL_ENABLE 0x00000001 | 1054 | #define A3XX_RB_STENCIL_CONTROL_STENCIL_ENABLE 0x00000001 |
1041 | #define A3XX_RB_STENCIL_CONTROL_STENCIL_ENABLE_BF 0x00000004 | 1055 | #define A3XX_RB_STENCIL_CONTROL_STENCIL_ENABLE_BF 0x00000002 |
1056 | #define A3XX_RB_STENCIL_CONTROL_STENCIL_READ 0x00000004 | ||
1042 | #define A3XX_RB_STENCIL_CONTROL_FUNC__MASK 0x00000700 | 1057 | #define A3XX_RB_STENCIL_CONTROL_FUNC__MASK 0x00000700 |
1043 | #define A3XX_RB_STENCIL_CONTROL_FUNC__SHIFT 8 | 1058 | #define A3XX_RB_STENCIL_CONTROL_FUNC__SHIFT 8 |
1044 | static inline uint32_t A3XX_RB_STENCIL_CONTROL_FUNC(enum adreno_compare_func val) | 1059 | static inline uint32_t A3XX_RB_STENCIL_CONTROL_FUNC(enum adreno_compare_func val) |
@@ -2074,6 +2089,7 @@ static inline uint32_t A3XX_UCHE_CACHE_INVALIDATE1_REG_OPCODE(enum a3xx_cache_op | |||
2074 | #define REG_A3XX_TP_PERFCOUNTER5_SELECT 0x00000f09 | 2089 | #define REG_A3XX_TP_PERFCOUNTER5_SELECT 0x00000f09 |
2075 | 2090 | ||
2076 | #define REG_A3XX_TEX_SAMP_0 0x00000000 | 2091 | #define REG_A3XX_TEX_SAMP_0 0x00000000 |
2092 | #define A3XX_TEX_SAMP_0_MIPFILTER_LINEAR 0x00000002 | ||
2077 | #define A3XX_TEX_SAMP_0_XY_MAG__MASK 0x0000000c | 2093 | #define A3XX_TEX_SAMP_0_XY_MAG__MASK 0x0000000c |
2078 | #define A3XX_TEX_SAMP_0_XY_MAG__SHIFT 2 | 2094 | #define A3XX_TEX_SAMP_0_XY_MAG__SHIFT 2 |
2079 | static inline uint32_t A3XX_TEX_SAMP_0_XY_MAG(enum a3xx_tex_filter val) | 2095 | static inline uint32_t A3XX_TEX_SAMP_0_XY_MAG(enum a3xx_tex_filter val) |
@@ -2134,6 +2150,12 @@ static inline uint32_t A3XX_TEX_CONST_0_SWIZ_W(enum a3xx_tex_swiz val) | |||
2134 | { | 2150 | { |
2135 | return ((val) << A3XX_TEX_CONST_0_SWIZ_W__SHIFT) & A3XX_TEX_CONST_0_SWIZ_W__MASK; | 2151 | return ((val) << A3XX_TEX_CONST_0_SWIZ_W__SHIFT) & A3XX_TEX_CONST_0_SWIZ_W__MASK; |
2136 | } | 2152 | } |
2153 | #define A3XX_TEX_CONST_0_MIPLVLS__MASK 0x000f0000 | ||
2154 | #define A3XX_TEX_CONST_0_MIPLVLS__SHIFT 16 | ||
2155 | static inline uint32_t A3XX_TEX_CONST_0_MIPLVLS(uint32_t val) | ||
2156 | { | ||
2157 | return ((val) << A3XX_TEX_CONST_0_MIPLVLS__SHIFT) & A3XX_TEX_CONST_0_MIPLVLS__MASK; | ||
2158 | } | ||
2137 | #define A3XX_TEX_CONST_0_FMT__MASK 0x1fc00000 | 2159 | #define A3XX_TEX_CONST_0_FMT__MASK 0x1fc00000 |
2138 | #define A3XX_TEX_CONST_0_FMT__SHIFT 22 | 2160 | #define A3XX_TEX_CONST_0_FMT__SHIFT 22 |
2139 | static inline uint32_t A3XX_TEX_CONST_0_FMT(enum a3xx_tex_fmt val) | 2161 | static inline uint32_t A3XX_TEX_CONST_0_FMT(enum a3xx_tex_fmt val) |
diff --git a/drivers/gpu/drm/msm/adreno/adreno_common.xml.h b/drivers/gpu/drm/msm/adreno/adreno_common.xml.h index 61979d458ac0..33dcc606c7c5 100644 --- a/drivers/gpu/drm/msm/adreno/adreno_common.xml.h +++ b/drivers/gpu/drm/msm/adreno/adreno_common.xml.h | |||
@@ -4,16 +4,16 @@ | |||
4 | /* Autogenerated file, DO NOT EDIT manually! | 4 | /* Autogenerated file, DO NOT EDIT manually! |
5 | 5 | ||
6 | This file was generated by the rules-ng-ng headergen tool in this git repository: | 6 | This file was generated by the rules-ng-ng headergen tool in this git repository: |
7 | http://0x04.net/cgit/index.cgi/rules-ng-ng | 7 | http://github.com/freedreno/envytools/ |
8 | git clone git://0x04.net/rules-ng-ng | 8 | git clone https://github.com/freedreno/envytools.git |
9 | 9 | ||
10 | The rules-ng-ng source files this header was generated from are: | 10 | The rules-ng-ng source files this header was generated from are: |
11 | - /home/robclark/src/freedreno/envytools/rnndb/adreno.xml ( 327 bytes, from 2013-07-05 19:21:12) | 11 | - /home/robclark/src/freedreno/envytools/rnndb/adreno.xml ( 327 bytes, from 2013-07-05 19:21:12) |
12 | - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1453 bytes, from 2013-03-31 16:51:27) | 12 | - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1453 bytes, from 2013-03-31 16:51:27) |
13 | - /home/robclark/src/freedreno/envytools/rnndb/a2xx/a2xx.xml ( 30005 bytes, from 2013-07-19 21:30:48) | 13 | - /home/robclark/src/freedreno/envytools/rnndb/a2xx/a2xx.xml ( 31003 bytes, from 2013-09-19 18:50:16) |
14 | - /home/robclark/src/freedreno/envytools/rnndb/adreno_common.xml ( 8983 bytes, from 2013-07-24 01:38:36) | 14 | - /home/robclark/src/freedreno/envytools/rnndb/adreno_common.xml ( 8983 bytes, from 2013-07-24 01:38:36) |
15 | - /home/robclark/src/freedreno/envytools/rnndb/adreno_pm4.xml ( 9712 bytes, from 2013-05-26 15:22:37) | 15 | - /home/robclark/src/freedreno/envytools/rnndb/adreno_pm4.xml ( 9759 bytes, from 2013-09-10 00:52:33) |
16 | - /home/robclark/src/freedreno/envytools/rnndb/a3xx/a3xx.xml ( 51415 bytes, from 2013-08-03 14:26:05) | 16 | - /home/robclark/src/freedreno/envytools/rnndb/a3xx/a3xx.xml ( 51983 bytes, from 2013-09-10 00:52:32) |
17 | 17 | ||
18 | Copyright (C) 2013 by the following authors: | 18 | Copyright (C) 2013 by the following authors: |
19 | - Rob Clark <robdclark@gmail.com> (robclark) | 19 | - Rob Clark <robdclark@gmail.com> (robclark) |
diff --git a/drivers/gpu/drm/msm/adreno/adreno_pm4.xml.h b/drivers/gpu/drm/msm/adreno/adreno_pm4.xml.h index 94c13f418e75..259ad709b0cc 100644 --- a/drivers/gpu/drm/msm/adreno/adreno_pm4.xml.h +++ b/drivers/gpu/drm/msm/adreno/adreno_pm4.xml.h | |||
@@ -4,16 +4,16 @@ | |||
4 | /* Autogenerated file, DO NOT EDIT manually! | 4 | /* Autogenerated file, DO NOT EDIT manually! |
5 | 5 | ||
6 | This file was generated by the rules-ng-ng headergen tool in this git repository: | 6 | This file was generated by the rules-ng-ng headergen tool in this git repository: |
7 | http://0x04.net/cgit/index.cgi/rules-ng-ng | 7 | http://github.com/freedreno/envytools/ |
8 | git clone git://0x04.net/rules-ng-ng | 8 | git clone https://github.com/freedreno/envytools.git |
9 | 9 | ||
10 | The rules-ng-ng source files this header was generated from are: | 10 | The rules-ng-ng source files this header was generated from are: |
11 | - /home/robclark/src/freedreno/envytools/rnndb/adreno.xml ( 327 bytes, from 2013-07-05 19:21:12) | 11 | - /home/robclark/src/freedreno/envytools/rnndb/adreno.xml ( 327 bytes, from 2013-07-05 19:21:12) |
12 | - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1453 bytes, from 2013-03-31 16:51:27) | 12 | - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1453 bytes, from 2013-03-31 16:51:27) |
13 | - /home/robclark/src/freedreno/envytools/rnndb/a2xx/a2xx.xml ( 30005 bytes, from 2013-07-19 21:30:48) | 13 | - /home/robclark/src/freedreno/envytools/rnndb/a2xx/a2xx.xml ( 31003 bytes, from 2013-09-19 18:50:16) |
14 | - /home/robclark/src/freedreno/envytools/rnndb/adreno_common.xml ( 8983 bytes, from 2013-07-24 01:38:36) | 14 | - /home/robclark/src/freedreno/envytools/rnndb/adreno_common.xml ( 8983 bytes, from 2013-07-24 01:38:36) |
15 | - /home/robclark/src/freedreno/envytools/rnndb/adreno_pm4.xml ( 9712 bytes, from 2013-05-26 15:22:37) | 15 | - /home/robclark/src/freedreno/envytools/rnndb/adreno_pm4.xml ( 9759 bytes, from 2013-09-10 00:52:33) |
16 | - /home/robclark/src/freedreno/envytools/rnndb/a3xx/a3xx.xml ( 51415 bytes, from 2013-08-03 14:26:05) | 16 | - /home/robclark/src/freedreno/envytools/rnndb/a3xx/a3xx.xml ( 51983 bytes, from 2013-09-10 00:52:32) |
17 | 17 | ||
18 | Copyright (C) 2013 by the following authors: | 18 | Copyright (C) 2013 by the following authors: |
19 | - Rob Clark <robdclark@gmail.com> (robclark) | 19 | - Rob Clark <robdclark@gmail.com> (robclark) |
diff --git a/drivers/gpu/drm/msm/dsi/dsi.xml.h b/drivers/gpu/drm/msm/dsi/dsi.xml.h index 6f8396be431d..6d4c62bf70dc 100644 --- a/drivers/gpu/drm/msm/dsi/dsi.xml.h +++ b/drivers/gpu/drm/msm/dsi/dsi.xml.h | |||
@@ -4,13 +4,13 @@ | |||
4 | /* Autogenerated file, DO NOT EDIT manually! | 4 | /* Autogenerated file, DO NOT EDIT manually! |
5 | 5 | ||
6 | This file was generated by the rules-ng-ng headergen tool in this git repository: | 6 | This file was generated by the rules-ng-ng headergen tool in this git repository: |
7 | http://0x04.net/cgit/index.cgi/rules-ng-ng | 7 | http://github.com/freedreno/envytools/ |
8 | git clone git://0x04.net/rules-ng-ng | 8 | git clone https://github.com/freedreno/envytools.git |
9 | 9 | ||
10 | The rules-ng-ng source files this header was generated from are: | 10 | The rules-ng-ng source files this header was generated from are: |
11 | - /home/robclark/src/freedreno/envytools/rnndb/msm.xml ( 595 bytes, from 2013-07-05 19:21:12) | 11 | - /home/robclark/src/freedreno/envytools/rnndb/msm.xml ( 595 bytes, from 2013-07-05 19:21:12) |
12 | - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1453 bytes, from 2013-03-31 16:51:27) | 12 | - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1453 bytes, from 2013-03-31 16:51:27) |
13 | - /home/robclark/src/freedreno/envytools/rnndb/mdp4/mdp4.xml ( 19332 bytes, from 2013-08-16 22:16:36) | 13 | - /home/robclark/src/freedreno/envytools/rnndb/mdp4/mdp4.xml ( 19332 bytes, from 2013-10-07 16:36:48) |
14 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 11712 bytes, from 2013-08-17 17:13:43) | 14 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 11712 bytes, from 2013-08-17 17:13:43) |
15 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 344 bytes, from 2013-08-11 19:26:32) | 15 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 344 bytes, from 2013-08-11 19:26:32) |
16 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1544 bytes, from 2013-08-16 19:17:05) | 16 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1544 bytes, from 2013-08-16 19:17:05) |
diff --git a/drivers/gpu/drm/msm/dsi/mmss_cc.xml.h b/drivers/gpu/drm/msm/dsi/mmss_cc.xml.h index aefc1b8feae9..d1df38bf5747 100644 --- a/drivers/gpu/drm/msm/dsi/mmss_cc.xml.h +++ b/drivers/gpu/drm/msm/dsi/mmss_cc.xml.h | |||
@@ -4,13 +4,13 @@ | |||
4 | /* Autogenerated file, DO NOT EDIT manually! | 4 | /* Autogenerated file, DO NOT EDIT manually! |
5 | 5 | ||
6 | This file was generated by the rules-ng-ng headergen tool in this git repository: | 6 | This file was generated by the rules-ng-ng headergen tool in this git repository: |
7 | http://0x04.net/cgit/index.cgi/rules-ng-ng | 7 | http://github.com/freedreno/envytools/ |
8 | git clone git://0x04.net/rules-ng-ng | 8 | git clone https://github.com/freedreno/envytools.git |
9 | 9 | ||
10 | The rules-ng-ng source files this header was generated from are: | 10 | The rules-ng-ng source files this header was generated from are: |
11 | - /home/robclark/src/freedreno/envytools/rnndb/msm.xml ( 595 bytes, from 2013-07-05 19:21:12) | 11 | - /home/robclark/src/freedreno/envytools/rnndb/msm.xml ( 595 bytes, from 2013-07-05 19:21:12) |
12 | - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1453 bytes, from 2013-03-31 16:51:27) | 12 | - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1453 bytes, from 2013-03-31 16:51:27) |
13 | - /home/robclark/src/freedreno/envytools/rnndb/mdp4/mdp4.xml ( 19332 bytes, from 2013-08-16 22:16:36) | 13 | - /home/robclark/src/freedreno/envytools/rnndb/mdp4/mdp4.xml ( 19332 bytes, from 2013-10-07 16:36:48) |
14 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 11712 bytes, from 2013-08-17 17:13:43) | 14 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 11712 bytes, from 2013-08-17 17:13:43) |
15 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 344 bytes, from 2013-08-11 19:26:32) | 15 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 344 bytes, from 2013-08-11 19:26:32) |
16 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1544 bytes, from 2013-08-16 19:17:05) | 16 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1544 bytes, from 2013-08-16 19:17:05) |
diff --git a/drivers/gpu/drm/msm/dsi/sfpb.xml.h b/drivers/gpu/drm/msm/dsi/sfpb.xml.h index a225e8170b2a..0030a111302d 100644 --- a/drivers/gpu/drm/msm/dsi/sfpb.xml.h +++ b/drivers/gpu/drm/msm/dsi/sfpb.xml.h | |||
@@ -4,13 +4,13 @@ | |||
4 | /* Autogenerated file, DO NOT EDIT manually! | 4 | /* Autogenerated file, DO NOT EDIT manually! |
5 | 5 | ||
6 | This file was generated by the rules-ng-ng headergen tool in this git repository: | 6 | This file was generated by the rules-ng-ng headergen tool in this git repository: |
7 | http://0x04.net/cgit/index.cgi/rules-ng-ng | 7 | http://github.com/freedreno/envytools/ |
8 | git clone git://0x04.net/rules-ng-ng | 8 | git clone https://github.com/freedreno/envytools.git |
9 | 9 | ||
10 | The rules-ng-ng source files this header was generated from are: | 10 | The rules-ng-ng source files this header was generated from are: |
11 | - /home/robclark/src/freedreno/envytools/rnndb/msm.xml ( 595 bytes, from 2013-07-05 19:21:12) | 11 | - /home/robclark/src/freedreno/envytools/rnndb/msm.xml ( 595 bytes, from 2013-07-05 19:21:12) |
12 | - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1453 bytes, from 2013-03-31 16:51:27) | 12 | - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1453 bytes, from 2013-03-31 16:51:27) |
13 | - /home/robclark/src/freedreno/envytools/rnndb/mdp4/mdp4.xml ( 19332 bytes, from 2013-08-16 22:16:36) | 13 | - /home/robclark/src/freedreno/envytools/rnndb/mdp4/mdp4.xml ( 19332 bytes, from 2013-10-07 16:36:48) |
14 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 11712 bytes, from 2013-08-17 17:13:43) | 14 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 11712 bytes, from 2013-08-17 17:13:43) |
15 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 344 bytes, from 2013-08-11 19:26:32) | 15 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 344 bytes, from 2013-08-11 19:26:32) |
16 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1544 bytes, from 2013-08-16 19:17:05) | 16 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1544 bytes, from 2013-08-16 19:17:05) |
diff --git a/drivers/gpu/drm/msm/hdmi/hdmi.xml.h b/drivers/gpu/drm/msm/hdmi/hdmi.xml.h index f5fa4865e059..4e939f82918c 100644 --- a/drivers/gpu/drm/msm/hdmi/hdmi.xml.h +++ b/drivers/gpu/drm/msm/hdmi/hdmi.xml.h | |||
@@ -4,13 +4,13 @@ | |||
4 | /* Autogenerated file, DO NOT EDIT manually! | 4 | /* Autogenerated file, DO NOT EDIT manually! |
5 | 5 | ||
6 | This file was generated by the rules-ng-ng headergen tool in this git repository: | 6 | This file was generated by the rules-ng-ng headergen tool in this git repository: |
7 | http://0x04.net/cgit/index.cgi/rules-ng-ng | 7 | http://github.com/freedreno/envytools/ |
8 | git clone git://0x04.net/rules-ng-ng | 8 | git clone https://github.com/freedreno/envytools.git |
9 | 9 | ||
10 | The rules-ng-ng source files this header was generated from are: | 10 | The rules-ng-ng source files this header was generated from are: |
11 | - /home/robclark/src/freedreno/envytools/rnndb/msm.xml ( 595 bytes, from 2013-07-05 19:21:12) | 11 | - /home/robclark/src/freedreno/envytools/rnndb/msm.xml ( 595 bytes, from 2013-07-05 19:21:12) |
12 | - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1453 bytes, from 2013-03-31 16:51:27) | 12 | - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1453 bytes, from 2013-03-31 16:51:27) |
13 | - /home/robclark/src/freedreno/envytools/rnndb/mdp4/mdp4.xml ( 19332 bytes, from 2013-08-16 22:16:36) | 13 | - /home/robclark/src/freedreno/envytools/rnndb/mdp4/mdp4.xml ( 19332 bytes, from 2013-10-07 16:36:48) |
14 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 11712 bytes, from 2013-08-17 17:13:43) | 14 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 11712 bytes, from 2013-08-17 17:13:43) |
15 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 344 bytes, from 2013-08-11 19:26:32) | 15 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 344 bytes, from 2013-08-11 19:26:32) |
16 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1544 bytes, from 2013-08-16 19:17:05) | 16 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1544 bytes, from 2013-08-16 19:17:05) |
diff --git a/drivers/gpu/drm/msm/hdmi/qfprom.xml.h b/drivers/gpu/drm/msm/hdmi/qfprom.xml.h index bee36363bcd0..dbde4f6339b9 100644 --- a/drivers/gpu/drm/msm/hdmi/qfprom.xml.h +++ b/drivers/gpu/drm/msm/hdmi/qfprom.xml.h | |||
@@ -4,13 +4,13 @@ | |||
4 | /* Autogenerated file, DO NOT EDIT manually! | 4 | /* Autogenerated file, DO NOT EDIT manually! |
5 | 5 | ||
6 | This file was generated by the rules-ng-ng headergen tool in this git repository: | 6 | This file was generated by the rules-ng-ng headergen tool in this git repository: |
7 | http://0x04.net/cgit/index.cgi/rules-ng-ng | 7 | http://github.com/freedreno/envytools/ |
8 | git clone git://0x04.net/rules-ng-ng | 8 | git clone https://github.com/freedreno/envytools.git |
9 | 9 | ||
10 | The rules-ng-ng source files this header was generated from are: | 10 | The rules-ng-ng source files this header was generated from are: |
11 | - /home/robclark/src/freedreno/envytools/rnndb/msm.xml ( 595 bytes, from 2013-07-05 19:21:12) | 11 | - /home/robclark/src/freedreno/envytools/rnndb/msm.xml ( 595 bytes, from 2013-07-05 19:21:12) |
12 | - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1453 bytes, from 2013-03-31 16:51:27) | 12 | - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1453 bytes, from 2013-03-31 16:51:27) |
13 | - /home/robclark/src/freedreno/envytools/rnndb/mdp4/mdp4.xml ( 19332 bytes, from 2013-08-16 22:16:36) | 13 | - /home/robclark/src/freedreno/envytools/rnndb/mdp4/mdp4.xml ( 19332 bytes, from 2013-10-07 16:36:48) |
14 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 11712 bytes, from 2013-08-17 17:13:43) | 14 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 11712 bytes, from 2013-08-17 17:13:43) |
15 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 344 bytes, from 2013-08-11 19:26:32) | 15 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 344 bytes, from 2013-08-11 19:26:32) |
16 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1544 bytes, from 2013-08-16 19:17:05) | 16 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1544 bytes, from 2013-08-16 19:17:05) |
diff --git a/drivers/gpu/drm/msm/mdp4/mdp4.xml.h b/drivers/gpu/drm/msm/mdp4/mdp4.xml.h index bbeeebe2db55..9908ffe1c3ad 100644 --- a/drivers/gpu/drm/msm/mdp4/mdp4.xml.h +++ b/drivers/gpu/drm/msm/mdp4/mdp4.xml.h | |||
@@ -4,13 +4,13 @@ | |||
4 | /* Autogenerated file, DO NOT EDIT manually! | 4 | /* Autogenerated file, DO NOT EDIT manually! |
5 | 5 | ||
6 | This file was generated by the rules-ng-ng headergen tool in this git repository: | 6 | This file was generated by the rules-ng-ng headergen tool in this git repository: |
7 | http://0x04.net/cgit/index.cgi/rules-ng-ng | 7 | http://github.com/freedreno/envytools/ |
8 | git clone git://0x04.net/rules-ng-ng | 8 | git clone https://github.com/freedreno/envytools.git |
9 | 9 | ||
10 | The rules-ng-ng source files this header was generated from are: | 10 | The rules-ng-ng source files this header was generated from are: |
11 | - /home/robclark/src/freedreno/envytools/rnndb/msm.xml ( 595 bytes, from 2013-07-05 19:21:12) | 11 | - /home/robclark/src/freedreno/envytools/rnndb/msm.xml ( 595 bytes, from 2013-07-05 19:21:12) |
12 | - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1453 bytes, from 2013-03-31 16:51:27) | 12 | - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml ( 1453 bytes, from 2013-03-31 16:51:27) |
13 | - /home/robclark/src/freedreno/envytools/rnndb/mdp4/mdp4.xml ( 19332 bytes, from 2013-08-16 22:16:36) | 13 | - /home/robclark/src/freedreno/envytools/rnndb/mdp4/mdp4.xml ( 19332 bytes, from 2013-10-07 16:36:48) |
14 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 11712 bytes, from 2013-08-17 17:13:43) | 14 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 11712 bytes, from 2013-08-17 17:13:43) |
15 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 344 bytes, from 2013-08-11 19:26:32) | 15 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 344 bytes, from 2013-08-11 19:26:32) |
16 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1544 bytes, from 2013-08-16 19:17:05) | 16 | - /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1544 bytes, from 2013-08-16 19:17:05) |
@@ -42,28 +42,28 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |||
42 | */ | 42 | */ |
43 | 43 | ||
44 | 44 | ||
45 | enum mpd4_bpc { | 45 | enum mdp4_bpc { |
46 | BPC1 = 0, | 46 | BPC1 = 0, |
47 | BPC5 = 1, | 47 | BPC5 = 1, |
48 | BPC6 = 2, | 48 | BPC6 = 2, |
49 | BPC8 = 3, | 49 | BPC8 = 3, |
50 | }; | 50 | }; |
51 | 51 | ||
52 | enum mpd4_bpc_alpha { | 52 | enum mdp4_bpc_alpha { |
53 | BPC1A = 0, | 53 | BPC1A = 0, |
54 | BPC4A = 1, | 54 | BPC4A = 1, |
55 | BPC6A = 2, | 55 | BPC6A = 2, |
56 | BPC8A = 3, | 56 | BPC8A = 3, |
57 | }; | 57 | }; |
58 | 58 | ||
59 | enum mpd4_alpha_type { | 59 | enum mdp4_alpha_type { |
60 | FG_CONST = 0, | 60 | FG_CONST = 0, |
61 | BG_CONST = 1, | 61 | BG_CONST = 1, |
62 | FG_PIXEL = 2, | 62 | FG_PIXEL = 2, |
63 | BG_PIXEL = 3, | 63 | BG_PIXEL = 3, |
64 | }; | 64 | }; |
65 | 65 | ||
66 | enum mpd4_pipe { | 66 | enum mdp4_pipe { |
67 | VG1 = 0, | 67 | VG1 = 0, |
68 | VG2 = 1, | 68 | VG2 = 1, |
69 | RGB1 = 2, | 69 | RGB1 = 2, |
@@ -73,13 +73,13 @@ enum mpd4_pipe { | |||
73 | VG4 = 6, | 73 | VG4 = 6, |
74 | }; | 74 | }; |
75 | 75 | ||
76 | enum mpd4_mixer { | 76 | enum mdp4_mixer { |
77 | MIXER0 = 0, | 77 | MIXER0 = 0, |
78 | MIXER1 = 1, | 78 | MIXER1 = 1, |
79 | MIXER2 = 2, | 79 | MIXER2 = 2, |
80 | }; | 80 | }; |
81 | 81 | ||
82 | enum mpd4_mixer_stage_id { | 82 | enum mdp4_mixer_stage_id { |
83 | STAGE_UNUSED = 0, | 83 | STAGE_UNUSED = 0, |
84 | STAGE_BASE = 1, | 84 | STAGE_BASE = 1, |
85 | STAGE0 = 2, | 85 | STAGE0 = 2, |
@@ -194,56 +194,56 @@ static inline uint32_t MDP4_DISP_INTF_SEL_EXT(enum mdp4_intf val) | |||
194 | #define REG_MDP4_LAYERMIXER2_IN_CFG 0x000100f0 | 194 | #define REG_MDP4_LAYERMIXER2_IN_CFG 0x000100f0 |
195 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE0__MASK 0x00000007 | 195 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE0__MASK 0x00000007 |
196 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE0__SHIFT 0 | 196 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE0__SHIFT 0 |
197 | static inline uint32_t MDP4_LAYERMIXER2_IN_CFG_PIPE0(enum mpd4_mixer_stage_id val) | 197 | static inline uint32_t MDP4_LAYERMIXER2_IN_CFG_PIPE0(enum mdp4_mixer_stage_id val) |
198 | { | 198 | { |
199 | return ((val) << MDP4_LAYERMIXER2_IN_CFG_PIPE0__SHIFT) & MDP4_LAYERMIXER2_IN_CFG_PIPE0__MASK; | 199 | return ((val) << MDP4_LAYERMIXER2_IN_CFG_PIPE0__SHIFT) & MDP4_LAYERMIXER2_IN_CFG_PIPE0__MASK; |
200 | } | 200 | } |
201 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE0_MIXER1 0x00000008 | 201 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE0_MIXER1 0x00000008 |
202 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE1__MASK 0x00000070 | 202 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE1__MASK 0x00000070 |
203 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE1__SHIFT 4 | 203 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE1__SHIFT 4 |
204 | static inline uint32_t MDP4_LAYERMIXER2_IN_CFG_PIPE1(enum mpd4_mixer_stage_id val) | 204 | static inline uint32_t MDP4_LAYERMIXER2_IN_CFG_PIPE1(enum mdp4_mixer_stage_id val) |
205 | { | 205 | { |
206 | return ((val) << MDP4_LAYERMIXER2_IN_CFG_PIPE1__SHIFT) & MDP4_LAYERMIXER2_IN_CFG_PIPE1__MASK; | 206 | return ((val) << MDP4_LAYERMIXER2_IN_CFG_PIPE1__SHIFT) & MDP4_LAYERMIXER2_IN_CFG_PIPE1__MASK; |
207 | } | 207 | } |
208 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE1_MIXER1 0x00000080 | 208 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE1_MIXER1 0x00000080 |
209 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE2__MASK 0x00000700 | 209 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE2__MASK 0x00000700 |
210 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE2__SHIFT 8 | 210 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE2__SHIFT 8 |
211 | static inline uint32_t MDP4_LAYERMIXER2_IN_CFG_PIPE2(enum mpd4_mixer_stage_id val) | 211 | static inline uint32_t MDP4_LAYERMIXER2_IN_CFG_PIPE2(enum mdp4_mixer_stage_id val) |
212 | { | 212 | { |
213 | return ((val) << MDP4_LAYERMIXER2_IN_CFG_PIPE2__SHIFT) & MDP4_LAYERMIXER2_IN_CFG_PIPE2__MASK; | 213 | return ((val) << MDP4_LAYERMIXER2_IN_CFG_PIPE2__SHIFT) & MDP4_LAYERMIXER2_IN_CFG_PIPE2__MASK; |
214 | } | 214 | } |
215 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE2_MIXER1 0x00000800 | 215 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE2_MIXER1 0x00000800 |
216 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE3__MASK 0x00007000 | 216 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE3__MASK 0x00007000 |
217 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE3__SHIFT 12 | 217 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE3__SHIFT 12 |
218 | static inline uint32_t MDP4_LAYERMIXER2_IN_CFG_PIPE3(enum mpd4_mixer_stage_id val) | 218 | static inline uint32_t MDP4_LAYERMIXER2_IN_CFG_PIPE3(enum mdp4_mixer_stage_id val) |
219 | { | 219 | { |
220 | return ((val) << MDP4_LAYERMIXER2_IN_CFG_PIPE3__SHIFT) & MDP4_LAYERMIXER2_IN_CFG_PIPE3__MASK; | 220 | return ((val) << MDP4_LAYERMIXER2_IN_CFG_PIPE3__SHIFT) & MDP4_LAYERMIXER2_IN_CFG_PIPE3__MASK; |
221 | } | 221 | } |
222 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE3_MIXER1 0x00008000 | 222 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE3_MIXER1 0x00008000 |
223 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE4__MASK 0x00070000 | 223 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE4__MASK 0x00070000 |
224 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE4__SHIFT 16 | 224 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE4__SHIFT 16 |
225 | static inline uint32_t MDP4_LAYERMIXER2_IN_CFG_PIPE4(enum mpd4_mixer_stage_id val) | 225 | static inline uint32_t MDP4_LAYERMIXER2_IN_CFG_PIPE4(enum mdp4_mixer_stage_id val) |
226 | { | 226 | { |
227 | return ((val) << MDP4_LAYERMIXER2_IN_CFG_PIPE4__SHIFT) & MDP4_LAYERMIXER2_IN_CFG_PIPE4__MASK; | 227 | return ((val) << MDP4_LAYERMIXER2_IN_CFG_PIPE4__SHIFT) & MDP4_LAYERMIXER2_IN_CFG_PIPE4__MASK; |
228 | } | 228 | } |
229 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE4_MIXER1 0x00080000 | 229 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE4_MIXER1 0x00080000 |
230 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE5__MASK 0x00700000 | 230 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE5__MASK 0x00700000 |
231 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE5__SHIFT 20 | 231 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE5__SHIFT 20 |
232 | static inline uint32_t MDP4_LAYERMIXER2_IN_CFG_PIPE5(enum mpd4_mixer_stage_id val) | 232 | static inline uint32_t MDP4_LAYERMIXER2_IN_CFG_PIPE5(enum mdp4_mixer_stage_id val) |
233 | { | 233 | { |
234 | return ((val) << MDP4_LAYERMIXER2_IN_CFG_PIPE5__SHIFT) & MDP4_LAYERMIXER2_IN_CFG_PIPE5__MASK; | 234 | return ((val) << MDP4_LAYERMIXER2_IN_CFG_PIPE5__SHIFT) & MDP4_LAYERMIXER2_IN_CFG_PIPE5__MASK; |
235 | } | 235 | } |
236 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE5_MIXER1 0x00800000 | 236 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE5_MIXER1 0x00800000 |
237 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE6__MASK 0x07000000 | 237 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE6__MASK 0x07000000 |
238 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE6__SHIFT 24 | 238 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE6__SHIFT 24 |
239 | static inline uint32_t MDP4_LAYERMIXER2_IN_CFG_PIPE6(enum mpd4_mixer_stage_id val) | 239 | static inline uint32_t MDP4_LAYERMIXER2_IN_CFG_PIPE6(enum mdp4_mixer_stage_id val) |
240 | { | 240 | { |
241 | return ((val) << MDP4_LAYERMIXER2_IN_CFG_PIPE6__SHIFT) & MDP4_LAYERMIXER2_IN_CFG_PIPE6__MASK; | 241 | return ((val) << MDP4_LAYERMIXER2_IN_CFG_PIPE6__SHIFT) & MDP4_LAYERMIXER2_IN_CFG_PIPE6__MASK; |
242 | } | 242 | } |
243 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE6_MIXER1 0x08000000 | 243 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE6_MIXER1 0x08000000 |
244 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE7__MASK 0x70000000 | 244 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE7__MASK 0x70000000 |
245 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE7__SHIFT 28 | 245 | #define MDP4_LAYERMIXER2_IN_CFG_PIPE7__SHIFT 28 |
246 | static inline uint32_t MDP4_LAYERMIXER2_IN_CFG_PIPE7(enum mpd4_mixer_stage_id val) | 246 | static inline uint32_t MDP4_LAYERMIXER2_IN_CFG_PIPE7(enum mdp4_mixer_stage_id val) |
247 | { | 247 | { |
248 | return ((val) << MDP4_LAYERMIXER2_IN_CFG_PIPE7__SHIFT) & MDP4_LAYERMIXER2_IN_CFG_PIPE7__MASK; | 248 | return ((val) << MDP4_LAYERMIXER2_IN_CFG_PIPE7__SHIFT) & MDP4_LAYERMIXER2_IN_CFG_PIPE7__MASK; |
249 | } | 249 | } |
@@ -254,56 +254,56 @@ static inline uint32_t MDP4_LAYERMIXER2_IN_CFG_PIPE7(enum mpd4_mixer_stage_id va | |||
254 | #define REG_MDP4_LAYERMIXER_IN_CFG 0x00010100 | 254 | #define REG_MDP4_LAYERMIXER_IN_CFG 0x00010100 |
255 | #define MDP4_LAYERMIXER_IN_CFG_PIPE0__MASK 0x00000007 | 255 | #define MDP4_LAYERMIXER_IN_CFG_PIPE0__MASK 0x00000007 |
256 | #define MDP4_LAYERMIXER_IN_CFG_PIPE0__SHIFT 0 | 256 | #define MDP4_LAYERMIXER_IN_CFG_PIPE0__SHIFT 0 |
257 | static inline uint32_t MDP4_LAYERMIXER_IN_CFG_PIPE0(enum mpd4_mixer_stage_id val) | 257 | static inline uint32_t MDP4_LAYERMIXER_IN_CFG_PIPE0(enum mdp4_mixer_stage_id val) |
258 | { | 258 | { |
259 | return ((val) << MDP4_LAYERMIXER_IN_CFG_PIPE0__SHIFT) & MDP4_LAYERMIXER_IN_CFG_PIPE0__MASK; | 259 | return ((val) << MDP4_LAYERMIXER_IN_CFG_PIPE0__SHIFT) & MDP4_LAYERMIXER_IN_CFG_PIPE0__MASK; |
260 | } | 260 | } |
261 | #define MDP4_LAYERMIXER_IN_CFG_PIPE0_MIXER1 0x00000008 | 261 | #define MDP4_LAYERMIXER_IN_CFG_PIPE0_MIXER1 0x00000008 |
262 | #define MDP4_LAYERMIXER_IN_CFG_PIPE1__MASK 0x00000070 | 262 | #define MDP4_LAYERMIXER_IN_CFG_PIPE1__MASK 0x00000070 |
263 | #define MDP4_LAYERMIXER_IN_CFG_PIPE1__SHIFT 4 | 263 | #define MDP4_LAYERMIXER_IN_CFG_PIPE1__SHIFT 4 |
264 | static inline uint32_t MDP4_LAYERMIXER_IN_CFG_PIPE1(enum mpd4_mixer_stage_id val) | 264 | static inline uint32_t MDP4_LAYERMIXER_IN_CFG_PIPE1(enum mdp4_mixer_stage_id val) |
265 | { | 265 | { |
266 | return ((val) << MDP4_LAYERMIXER_IN_CFG_PIPE1__SHIFT) & MDP4_LAYERMIXER_IN_CFG_PIPE1__MASK; | 266 | return ((val) << MDP4_LAYERMIXER_IN_CFG_PIPE1__SHIFT) & MDP4_LAYERMIXER_IN_CFG_PIPE1__MASK; |
267 | } | 267 | } |
268 | #define MDP4_LAYERMIXER_IN_CFG_PIPE1_MIXER1 0x00000080 | 268 | #define MDP4_LAYERMIXER_IN_CFG_PIPE1_MIXER1 0x00000080 |
269 | #define MDP4_LAYERMIXER_IN_CFG_PIPE2__MASK 0x00000700 | 269 | #define MDP4_LAYERMIXER_IN_CFG_PIPE2__MASK 0x00000700 |
270 | #define MDP4_LAYERMIXER_IN_CFG_PIPE2__SHIFT 8 | 270 | #define MDP4_LAYERMIXER_IN_CFG_PIPE2__SHIFT 8 |
271 | static inline uint32_t MDP4_LAYERMIXER_IN_CFG_PIPE2(enum mpd4_mixer_stage_id val) | 271 | static inline uint32_t MDP4_LAYERMIXER_IN_CFG_PIPE2(enum mdp4_mixer_stage_id val) |
272 | { | 272 | { |
273 | return ((val) << MDP4_LAYERMIXER_IN_CFG_PIPE2__SHIFT) & MDP4_LAYERMIXER_IN_CFG_PIPE2__MASK; | 273 | return ((val) << MDP4_LAYERMIXER_IN_CFG_PIPE2__SHIFT) & MDP4_LAYERMIXER_IN_CFG_PIPE2__MASK; |
274 | } | 274 | } |
275 | #define MDP4_LAYERMIXER_IN_CFG_PIPE2_MIXER1 0x00000800 | 275 | #define MDP4_LAYERMIXER_IN_CFG_PIPE2_MIXER1 0x00000800 |
276 | #define MDP4_LAYERMIXER_IN_CFG_PIPE3__MASK 0x00007000 | 276 | #define MDP4_LAYERMIXER_IN_CFG_PIPE3__MASK 0x00007000 |
277 | #define MDP4_LAYERMIXER_IN_CFG_PIPE3__SHIFT 12 | 277 | #define MDP4_LAYERMIXER_IN_CFG_PIPE3__SHIFT 12 |
278 | static inline uint32_t MDP4_LAYERMIXER_IN_CFG_PIPE3(enum mpd4_mixer_stage_id val) | 278 | static inline uint32_t MDP4_LAYERMIXER_IN_CFG_PIPE3(enum mdp4_mixer_stage_id val) |
279 | { | 279 | { |
280 | return ((val) << MDP4_LAYERMIXER_IN_CFG_PIPE3__SHIFT) & MDP4_LAYERMIXER_IN_CFG_PIPE3__MASK; | 280 | return ((val) << MDP4_LAYERMIXER_IN_CFG_PIPE3__SHIFT) & MDP4_LAYERMIXER_IN_CFG_PIPE3__MASK; |
281 | } | 281 | } |
282 | #define MDP4_LAYERMIXER_IN_CFG_PIPE3_MIXER1 0x00008000 | 282 | #define MDP4_LAYERMIXER_IN_CFG_PIPE3_MIXER1 0x00008000 |
283 | #define MDP4_LAYERMIXER_IN_CFG_PIPE4__MASK 0x00070000 | 283 | #define MDP4_LAYERMIXER_IN_CFG_PIPE4__MASK 0x00070000 |
284 | #define MDP4_LAYERMIXER_IN_CFG_PIPE4__SHIFT 16 | 284 | #define MDP4_LAYERMIXER_IN_CFG_PIPE4__SHIFT 16 |
285 | static inline uint32_t MDP4_LAYERMIXER_IN_CFG_PIPE4(enum mpd4_mixer_stage_id val) | 285 | static inline uint32_t MDP4_LAYERMIXER_IN_CFG_PIPE4(enum mdp4_mixer_stage_id val) |
286 | { | 286 | { |
287 | return ((val) << MDP4_LAYERMIXER_IN_CFG_PIPE4__SHIFT) & MDP4_LAYERMIXER_IN_CFG_PIPE4__MASK; | 287 | return ((val) << MDP4_LAYERMIXER_IN_CFG_PIPE4__SHIFT) & MDP4_LAYERMIXER_IN_CFG_PIPE4__MASK; |
288 | } | 288 | } |
289 | #define MDP4_LAYERMIXER_IN_CFG_PIPE4_MIXER1 0x00080000 | 289 | #define MDP4_LAYERMIXER_IN_CFG_PIPE4_MIXER1 0x00080000 |
290 | #define MDP4_LAYERMIXER_IN_CFG_PIPE5__MASK 0x00700000 | 290 | #define MDP4_LAYERMIXER_IN_CFG_PIPE5__MASK 0x00700000 |
291 | #define MDP4_LAYERMIXER_IN_CFG_PIPE5__SHIFT 20 | 291 | #define MDP4_LAYERMIXER_IN_CFG_PIPE5__SHIFT 20 |
292 | static inline uint32_t MDP4_LAYERMIXER_IN_CFG_PIPE5(enum mpd4_mixer_stage_id val) | 292 | static inline uint32_t MDP4_LAYERMIXER_IN_CFG_PIPE5(enum mdp4_mixer_stage_id val) |
293 | { | 293 | { |
294 | return ((val) << MDP4_LAYERMIXER_IN_CFG_PIPE5__SHIFT) & MDP4_LAYERMIXER_IN_CFG_PIPE5__MASK; | 294 | return ((val) << MDP4_LAYERMIXER_IN_CFG_PIPE5__SHIFT) & MDP4_LAYERMIXER_IN_CFG_PIPE5__MASK; |
295 | } | 295 | } |
296 | #define MDP4_LAYERMIXER_IN_CFG_PIPE5_MIXER1 0x00800000 | 296 | #define MDP4_LAYERMIXER_IN_CFG_PIPE5_MIXER1 0x00800000 |
297 | #define MDP4_LAYERMIXER_IN_CFG_PIPE6__MASK 0x07000000 | 297 | #define MDP4_LAYERMIXER_IN_CFG_PIPE6__MASK 0x07000000 |
298 | #define MDP4_LAYERMIXER_IN_CFG_PIPE6__SHIFT 24 | 298 | #define MDP4_LAYERMIXER_IN_CFG_PIPE6__SHIFT 24 |
299 | static inline uint32_t MDP4_LAYERMIXER_IN_CFG_PIPE6(enum mpd4_mixer_stage_id val) | 299 | static inline uint32_t MDP4_LAYERMIXER_IN_CFG_PIPE6(enum mdp4_mixer_stage_id val) |
300 | { | 300 | { |
301 | return ((val) << MDP4_LAYERMIXER_IN_CFG_PIPE6__SHIFT) & MDP4_LAYERMIXER_IN_CFG_PIPE6__MASK; | 301 | return ((val) << MDP4_LAYERMIXER_IN_CFG_PIPE6__SHIFT) & MDP4_LAYERMIXER_IN_CFG_PIPE6__MASK; |
302 | } | 302 | } |
303 | #define MDP4_LAYERMIXER_IN_CFG_PIPE6_MIXER1 0x08000000 | 303 | #define MDP4_LAYERMIXER_IN_CFG_PIPE6_MIXER1 0x08000000 |
304 | #define MDP4_LAYERMIXER_IN_CFG_PIPE7__MASK 0x70000000 | 304 | #define MDP4_LAYERMIXER_IN_CFG_PIPE7__MASK 0x70000000 |
305 | #define MDP4_LAYERMIXER_IN_CFG_PIPE7__SHIFT 28 | 305 | #define MDP4_LAYERMIXER_IN_CFG_PIPE7__SHIFT 28 |
306 | static inline uint32_t MDP4_LAYERMIXER_IN_CFG_PIPE7(enum mpd4_mixer_stage_id val) | 306 | static inline uint32_t MDP4_LAYERMIXER_IN_CFG_PIPE7(enum mdp4_mixer_stage_id val) |
307 | { | 307 | { |
308 | return ((val) << MDP4_LAYERMIXER_IN_CFG_PIPE7__SHIFT) & MDP4_LAYERMIXER_IN_CFG_PIPE7__MASK; | 308 | return ((val) << MDP4_LAYERMIXER_IN_CFG_PIPE7__SHIFT) & MDP4_LAYERMIXER_IN_CFG_PIPE7__MASK; |
309 | } | 309 | } |
@@ -369,7 +369,7 @@ static inline uint32_t REG_MDP4_OVLP_STAGE(uint32_t i0, uint32_t i1) { return 0x | |||
369 | static inline uint32_t REG_MDP4_OVLP_STAGE_OP(uint32_t i0, uint32_t i1) { return 0x00000000 + __offset_OVLP(i0) + __offset_STAGE(i1); } | 369 | static inline uint32_t REG_MDP4_OVLP_STAGE_OP(uint32_t i0, uint32_t i1) { return 0x00000000 + __offset_OVLP(i0) + __offset_STAGE(i1); } |
370 | #define MDP4_OVLP_STAGE_OP_FG_ALPHA__MASK 0x00000003 | 370 | #define MDP4_OVLP_STAGE_OP_FG_ALPHA__MASK 0x00000003 |
371 | #define MDP4_OVLP_STAGE_OP_FG_ALPHA__SHIFT 0 | 371 | #define MDP4_OVLP_STAGE_OP_FG_ALPHA__SHIFT 0 |
372 | static inline uint32_t MDP4_OVLP_STAGE_OP_FG_ALPHA(enum mpd4_alpha_type val) | 372 | static inline uint32_t MDP4_OVLP_STAGE_OP_FG_ALPHA(enum mdp4_alpha_type val) |
373 | { | 373 | { |
374 | return ((val) << MDP4_OVLP_STAGE_OP_FG_ALPHA__SHIFT) & MDP4_OVLP_STAGE_OP_FG_ALPHA__MASK; | 374 | return ((val) << MDP4_OVLP_STAGE_OP_FG_ALPHA__SHIFT) & MDP4_OVLP_STAGE_OP_FG_ALPHA__MASK; |
375 | } | 375 | } |
@@ -377,7 +377,7 @@ static inline uint32_t MDP4_OVLP_STAGE_OP_FG_ALPHA(enum mpd4_alpha_type val) | |||
377 | #define MDP4_OVLP_STAGE_OP_FG_MOD_ALPHA 0x00000008 | 377 | #define MDP4_OVLP_STAGE_OP_FG_MOD_ALPHA 0x00000008 |
378 | #define MDP4_OVLP_STAGE_OP_BG_ALPHA__MASK 0x00000030 | 378 | #define MDP4_OVLP_STAGE_OP_BG_ALPHA__MASK 0x00000030 |
379 | #define MDP4_OVLP_STAGE_OP_BG_ALPHA__SHIFT 4 | 379 | #define MDP4_OVLP_STAGE_OP_BG_ALPHA__SHIFT 4 |
380 | static inline uint32_t MDP4_OVLP_STAGE_OP_BG_ALPHA(enum mpd4_alpha_type val) | 380 | static inline uint32_t MDP4_OVLP_STAGE_OP_BG_ALPHA(enum mdp4_alpha_type val) |
381 | { | 381 | { |
382 | return ((val) << MDP4_OVLP_STAGE_OP_BG_ALPHA__SHIFT) & MDP4_OVLP_STAGE_OP_BG_ALPHA__MASK; | 382 | return ((val) << MDP4_OVLP_STAGE_OP_BG_ALPHA__SHIFT) & MDP4_OVLP_STAGE_OP_BG_ALPHA__MASK; |
383 | } | 383 | } |
@@ -472,19 +472,19 @@ static inline uint32_t REG_MDP4_DMA(enum mdp4_dma i0) { return 0x00000000 + __of | |||
472 | static inline uint32_t REG_MDP4_DMA_CONFIG(enum mdp4_dma i0) { return 0x00000000 + __offset_DMA(i0); } | 472 | static inline uint32_t REG_MDP4_DMA_CONFIG(enum mdp4_dma i0) { return 0x00000000 + __offset_DMA(i0); } |
473 | #define MDP4_DMA_CONFIG_G_BPC__MASK 0x00000003 | 473 | #define MDP4_DMA_CONFIG_G_BPC__MASK 0x00000003 |
474 | #define MDP4_DMA_CONFIG_G_BPC__SHIFT 0 | 474 | #define MDP4_DMA_CONFIG_G_BPC__SHIFT 0 |
475 | static inline uint32_t MDP4_DMA_CONFIG_G_BPC(enum mpd4_bpc val) | 475 | static inline uint32_t MDP4_DMA_CONFIG_G_BPC(enum mdp4_bpc val) |
476 | { | 476 | { |
477 | return ((val) << MDP4_DMA_CONFIG_G_BPC__SHIFT) & MDP4_DMA_CONFIG_G_BPC__MASK; | 477 | return ((val) << MDP4_DMA_CONFIG_G_BPC__SHIFT) & MDP4_DMA_CONFIG_G_BPC__MASK; |
478 | } | 478 | } |
479 | #define MDP4_DMA_CONFIG_B_BPC__MASK 0x0000000c | 479 | #define MDP4_DMA_CONFIG_B_BPC__MASK 0x0000000c |
480 | #define MDP4_DMA_CONFIG_B_BPC__SHIFT 2 | 480 | #define MDP4_DMA_CONFIG_B_BPC__SHIFT 2 |
481 | static inline uint32_t MDP4_DMA_CONFIG_B_BPC(enum mpd4_bpc val) | 481 | static inline uint32_t MDP4_DMA_CONFIG_B_BPC(enum mdp4_bpc val) |
482 | { | 482 | { |
483 | return ((val) << MDP4_DMA_CONFIG_B_BPC__SHIFT) & MDP4_DMA_CONFIG_B_BPC__MASK; | 483 | return ((val) << MDP4_DMA_CONFIG_B_BPC__SHIFT) & MDP4_DMA_CONFIG_B_BPC__MASK; |
484 | } | 484 | } |
485 | #define MDP4_DMA_CONFIG_R_BPC__MASK 0x00000030 | 485 | #define MDP4_DMA_CONFIG_R_BPC__MASK 0x00000030 |
486 | #define MDP4_DMA_CONFIG_R_BPC__SHIFT 4 | 486 | #define MDP4_DMA_CONFIG_R_BPC__SHIFT 4 |
487 | static inline uint32_t MDP4_DMA_CONFIG_R_BPC(enum mpd4_bpc val) | 487 | static inline uint32_t MDP4_DMA_CONFIG_R_BPC(enum mdp4_bpc val) |
488 | { | 488 | { |
489 | return ((val) << MDP4_DMA_CONFIG_R_BPC__SHIFT) & MDP4_DMA_CONFIG_R_BPC__MASK; | 489 | return ((val) << MDP4_DMA_CONFIG_R_BPC__SHIFT) & MDP4_DMA_CONFIG_R_BPC__MASK; |
490 | } | 490 | } |
@@ -601,9 +601,9 @@ static inline uint32_t REG_MDP4_DMA_CSC_POST_LV(enum mdp4_dma i0, uint32_t i1) { | |||
601 | 601 | ||
602 | static inline uint32_t REG_MDP4_DMA_CSC_POST_LV_VAL(enum mdp4_dma i0, uint32_t i1) { return 0x00003680 + __offset_DMA(i0) + 0x4*i1; } | 602 | static inline uint32_t REG_MDP4_DMA_CSC_POST_LV_VAL(enum mdp4_dma i0, uint32_t i1) { return 0x00003680 + __offset_DMA(i0) + 0x4*i1; } |
603 | 603 | ||
604 | static inline uint32_t REG_MDP4_PIPE(enum mpd4_pipe i0) { return 0x00020000 + 0x10000*i0; } | 604 | static inline uint32_t REG_MDP4_PIPE(enum mdp4_pipe i0) { return 0x00020000 + 0x10000*i0; } |
605 | 605 | ||
606 | static inline uint32_t REG_MDP4_PIPE_SRC_SIZE(enum mpd4_pipe i0) { return 0x00020000 + 0x10000*i0; } | 606 | static inline uint32_t REG_MDP4_PIPE_SRC_SIZE(enum mdp4_pipe i0) { return 0x00020000 + 0x10000*i0; } |
607 | #define MDP4_PIPE_SRC_SIZE_HEIGHT__MASK 0xffff0000 | 607 | #define MDP4_PIPE_SRC_SIZE_HEIGHT__MASK 0xffff0000 |
608 | #define MDP4_PIPE_SRC_SIZE_HEIGHT__SHIFT 16 | 608 | #define MDP4_PIPE_SRC_SIZE_HEIGHT__SHIFT 16 |
609 | static inline uint32_t MDP4_PIPE_SRC_SIZE_HEIGHT(uint32_t val) | 609 | static inline uint32_t MDP4_PIPE_SRC_SIZE_HEIGHT(uint32_t val) |
@@ -617,7 +617,7 @@ static inline uint32_t MDP4_PIPE_SRC_SIZE_WIDTH(uint32_t val) | |||
617 | return ((val) << MDP4_PIPE_SRC_SIZE_WIDTH__SHIFT) & MDP4_PIPE_SRC_SIZE_WIDTH__MASK; | 617 | return ((val) << MDP4_PIPE_SRC_SIZE_WIDTH__SHIFT) & MDP4_PIPE_SRC_SIZE_WIDTH__MASK; |
618 | } | 618 | } |
619 | 619 | ||
620 | static inline uint32_t REG_MDP4_PIPE_SRC_XY(enum mpd4_pipe i0) { return 0x00020004 + 0x10000*i0; } | 620 | static inline uint32_t REG_MDP4_PIPE_SRC_XY(enum mdp4_pipe i0) { return 0x00020004 + 0x10000*i0; } |
621 | #define MDP4_PIPE_SRC_XY_Y__MASK 0xffff0000 | 621 | #define MDP4_PIPE_SRC_XY_Y__MASK 0xffff0000 |
622 | #define MDP4_PIPE_SRC_XY_Y__SHIFT 16 | 622 | #define MDP4_PIPE_SRC_XY_Y__SHIFT 16 |
623 | static inline uint32_t MDP4_PIPE_SRC_XY_Y(uint32_t val) | 623 | static inline uint32_t MDP4_PIPE_SRC_XY_Y(uint32_t val) |
@@ -631,7 +631,7 @@ static inline uint32_t MDP4_PIPE_SRC_XY_X(uint32_t val) | |||
631 | return ((val) << MDP4_PIPE_SRC_XY_X__SHIFT) & MDP4_PIPE_SRC_XY_X__MASK; | 631 | return ((val) << MDP4_PIPE_SRC_XY_X__SHIFT) & MDP4_PIPE_SRC_XY_X__MASK; |
632 | } | 632 | } |
633 | 633 | ||
634 | static inline uint32_t REG_MDP4_PIPE_DST_SIZE(enum mpd4_pipe i0) { return 0x00020008 + 0x10000*i0; } | 634 | static inline uint32_t REG_MDP4_PIPE_DST_SIZE(enum mdp4_pipe i0) { return 0x00020008 + 0x10000*i0; } |
635 | #define MDP4_PIPE_DST_SIZE_HEIGHT__MASK 0xffff0000 | 635 | #define MDP4_PIPE_DST_SIZE_HEIGHT__MASK 0xffff0000 |
636 | #define MDP4_PIPE_DST_SIZE_HEIGHT__SHIFT 16 | 636 | #define MDP4_PIPE_DST_SIZE_HEIGHT__SHIFT 16 |
637 | static inline uint32_t MDP4_PIPE_DST_SIZE_HEIGHT(uint32_t val) | 637 | static inline uint32_t MDP4_PIPE_DST_SIZE_HEIGHT(uint32_t val) |
@@ -645,7 +645,7 @@ static inline uint32_t MDP4_PIPE_DST_SIZE_WIDTH(uint32_t val) | |||
645 | return ((val) << MDP4_PIPE_DST_SIZE_WIDTH__SHIFT) & MDP4_PIPE_DST_SIZE_WIDTH__MASK; | 645 | return ((val) << MDP4_PIPE_DST_SIZE_WIDTH__SHIFT) & MDP4_PIPE_DST_SIZE_WIDTH__MASK; |
646 | } | 646 | } |
647 | 647 | ||
648 | static inline uint32_t REG_MDP4_PIPE_DST_XY(enum mpd4_pipe i0) { return 0x0002000c + 0x10000*i0; } | 648 | static inline uint32_t REG_MDP4_PIPE_DST_XY(enum mdp4_pipe i0) { return 0x0002000c + 0x10000*i0; } |
649 | #define MDP4_PIPE_DST_XY_Y__MASK 0xffff0000 | 649 | #define MDP4_PIPE_DST_XY_Y__MASK 0xffff0000 |
650 | #define MDP4_PIPE_DST_XY_Y__SHIFT 16 | 650 | #define MDP4_PIPE_DST_XY_Y__SHIFT 16 |
651 | static inline uint32_t MDP4_PIPE_DST_XY_Y(uint32_t val) | 651 | static inline uint32_t MDP4_PIPE_DST_XY_Y(uint32_t val) |
@@ -659,13 +659,13 @@ static inline uint32_t MDP4_PIPE_DST_XY_X(uint32_t val) | |||
659 | return ((val) << MDP4_PIPE_DST_XY_X__SHIFT) & MDP4_PIPE_DST_XY_X__MASK; | 659 | return ((val) << MDP4_PIPE_DST_XY_X__SHIFT) & MDP4_PIPE_DST_XY_X__MASK; |
660 | } | 660 | } |
661 | 661 | ||
662 | static inline uint32_t REG_MDP4_PIPE_SRCP0_BASE(enum mpd4_pipe i0) { return 0x00020010 + 0x10000*i0; } | 662 | static inline uint32_t REG_MDP4_PIPE_SRCP0_BASE(enum mdp4_pipe i0) { return 0x00020010 + 0x10000*i0; } |
663 | 663 | ||
664 | static inline uint32_t REG_MDP4_PIPE_SRCP1_BASE(enum mpd4_pipe i0) { return 0x00020014 + 0x10000*i0; } | 664 | static inline uint32_t REG_MDP4_PIPE_SRCP1_BASE(enum mdp4_pipe i0) { return 0x00020014 + 0x10000*i0; } |
665 | 665 | ||
666 | static inline uint32_t REG_MDP4_PIPE_SRCP2_BASE(enum mpd4_pipe i0) { return 0x00020018 + 0x10000*i0; } | 666 | static inline uint32_t REG_MDP4_PIPE_SRCP2_BASE(enum mdp4_pipe i0) { return 0x00020018 + 0x10000*i0; } |
667 | 667 | ||
668 | static inline uint32_t REG_MDP4_PIPE_SRC_STRIDE_A(enum mpd4_pipe i0) { return 0x00020040 + 0x10000*i0; } | 668 | static inline uint32_t REG_MDP4_PIPE_SRC_STRIDE_A(enum mdp4_pipe i0) { return 0x00020040 + 0x10000*i0; } |
669 | #define MDP4_PIPE_SRC_STRIDE_A_P0__MASK 0x0000ffff | 669 | #define MDP4_PIPE_SRC_STRIDE_A_P0__MASK 0x0000ffff |
670 | #define MDP4_PIPE_SRC_STRIDE_A_P0__SHIFT 0 | 670 | #define MDP4_PIPE_SRC_STRIDE_A_P0__SHIFT 0 |
671 | static inline uint32_t MDP4_PIPE_SRC_STRIDE_A_P0(uint32_t val) | 671 | static inline uint32_t MDP4_PIPE_SRC_STRIDE_A_P0(uint32_t val) |
@@ -679,7 +679,7 @@ static inline uint32_t MDP4_PIPE_SRC_STRIDE_A_P1(uint32_t val) | |||
679 | return ((val) << MDP4_PIPE_SRC_STRIDE_A_P1__SHIFT) & MDP4_PIPE_SRC_STRIDE_A_P1__MASK; | 679 | return ((val) << MDP4_PIPE_SRC_STRIDE_A_P1__SHIFT) & MDP4_PIPE_SRC_STRIDE_A_P1__MASK; |
680 | } | 680 | } |
681 | 681 | ||
682 | static inline uint32_t REG_MDP4_PIPE_SRC_STRIDE_B(enum mpd4_pipe i0) { return 0x00020044 + 0x10000*i0; } | 682 | static inline uint32_t REG_MDP4_PIPE_SRC_STRIDE_B(enum mdp4_pipe i0) { return 0x00020044 + 0x10000*i0; } |
683 | #define MDP4_PIPE_SRC_STRIDE_B_P2__MASK 0x0000ffff | 683 | #define MDP4_PIPE_SRC_STRIDE_B_P2__MASK 0x0000ffff |
684 | #define MDP4_PIPE_SRC_STRIDE_B_P2__SHIFT 0 | 684 | #define MDP4_PIPE_SRC_STRIDE_B_P2__SHIFT 0 |
685 | static inline uint32_t MDP4_PIPE_SRC_STRIDE_B_P2(uint32_t val) | 685 | static inline uint32_t MDP4_PIPE_SRC_STRIDE_B_P2(uint32_t val) |
@@ -693,7 +693,7 @@ static inline uint32_t MDP4_PIPE_SRC_STRIDE_B_P3(uint32_t val) | |||
693 | return ((val) << MDP4_PIPE_SRC_STRIDE_B_P3__SHIFT) & MDP4_PIPE_SRC_STRIDE_B_P3__MASK; | 693 | return ((val) << MDP4_PIPE_SRC_STRIDE_B_P3__SHIFT) & MDP4_PIPE_SRC_STRIDE_B_P3__MASK; |
694 | } | 694 | } |
695 | 695 | ||
696 | static inline uint32_t REG_MDP4_PIPE_FRAME_SIZE(enum mpd4_pipe i0) { return 0x00020048 + 0x10000*i0; } | 696 | static inline uint32_t REG_MDP4_PIPE_FRAME_SIZE(enum mdp4_pipe i0) { return 0x00020048 + 0x10000*i0; } |
697 | #define MDP4_PIPE_FRAME_SIZE_HEIGHT__MASK 0xffff0000 | 697 | #define MDP4_PIPE_FRAME_SIZE_HEIGHT__MASK 0xffff0000 |
698 | #define MDP4_PIPE_FRAME_SIZE_HEIGHT__SHIFT 16 | 698 | #define MDP4_PIPE_FRAME_SIZE_HEIGHT__SHIFT 16 |
699 | static inline uint32_t MDP4_PIPE_FRAME_SIZE_HEIGHT(uint32_t val) | 699 | static inline uint32_t MDP4_PIPE_FRAME_SIZE_HEIGHT(uint32_t val) |
@@ -707,28 +707,28 @@ static inline uint32_t MDP4_PIPE_FRAME_SIZE_WIDTH(uint32_t val) | |||
707 | return ((val) << MDP4_PIPE_FRAME_SIZE_WIDTH__SHIFT) & MDP4_PIPE_FRAME_SIZE_WIDTH__MASK; | 707 | return ((val) << MDP4_PIPE_FRAME_SIZE_WIDTH__SHIFT) & MDP4_PIPE_FRAME_SIZE_WIDTH__MASK; |
708 | } | 708 | } |
709 | 709 | ||
710 | static inline uint32_t REG_MDP4_PIPE_SRC_FORMAT(enum mpd4_pipe i0) { return 0x00020050 + 0x10000*i0; } | 710 | static inline uint32_t REG_MDP4_PIPE_SRC_FORMAT(enum mdp4_pipe i0) { return 0x00020050 + 0x10000*i0; } |
711 | #define MDP4_PIPE_SRC_FORMAT_G_BPC__MASK 0x00000003 | 711 | #define MDP4_PIPE_SRC_FORMAT_G_BPC__MASK 0x00000003 |
712 | #define MDP4_PIPE_SRC_FORMAT_G_BPC__SHIFT 0 | 712 | #define MDP4_PIPE_SRC_FORMAT_G_BPC__SHIFT 0 |
713 | static inline uint32_t MDP4_PIPE_SRC_FORMAT_G_BPC(enum mpd4_bpc val) | 713 | static inline uint32_t MDP4_PIPE_SRC_FORMAT_G_BPC(enum mdp4_bpc val) |
714 | { | 714 | { |
715 | return ((val) << MDP4_PIPE_SRC_FORMAT_G_BPC__SHIFT) & MDP4_PIPE_SRC_FORMAT_G_BPC__MASK; | 715 | return ((val) << MDP4_PIPE_SRC_FORMAT_G_BPC__SHIFT) & MDP4_PIPE_SRC_FORMAT_G_BPC__MASK; |
716 | } | 716 | } |
717 | #define MDP4_PIPE_SRC_FORMAT_B_BPC__MASK 0x0000000c | 717 | #define MDP4_PIPE_SRC_FORMAT_B_BPC__MASK 0x0000000c |
718 | #define MDP4_PIPE_SRC_FORMAT_B_BPC__SHIFT 2 | 718 | #define MDP4_PIPE_SRC_FORMAT_B_BPC__SHIFT 2 |
719 | static inline uint32_t MDP4_PIPE_SRC_FORMAT_B_BPC(enum mpd4_bpc val) | 719 | static inline uint32_t MDP4_PIPE_SRC_FORMAT_B_BPC(enum mdp4_bpc val) |
720 | { | 720 | { |
721 | return ((val) << MDP4_PIPE_SRC_FORMAT_B_BPC__SHIFT) & MDP4_PIPE_SRC_FORMAT_B_BPC__MASK; | 721 | return ((val) << MDP4_PIPE_SRC_FORMAT_B_BPC__SHIFT) & MDP4_PIPE_SRC_FORMAT_B_BPC__MASK; |
722 | } | 722 | } |
723 | #define MDP4_PIPE_SRC_FORMAT_R_BPC__MASK 0x00000030 | 723 | #define MDP4_PIPE_SRC_FORMAT_R_BPC__MASK 0x00000030 |
724 | #define MDP4_PIPE_SRC_FORMAT_R_BPC__SHIFT 4 | 724 | #define MDP4_PIPE_SRC_FORMAT_R_BPC__SHIFT 4 |
725 | static inline uint32_t MDP4_PIPE_SRC_FORMAT_R_BPC(enum mpd4_bpc val) | 725 | static inline uint32_t MDP4_PIPE_SRC_FORMAT_R_BPC(enum mdp4_bpc val) |
726 | { | 726 | { |
727 | return ((val) << MDP4_PIPE_SRC_FORMAT_R_BPC__SHIFT) & MDP4_PIPE_SRC_FORMAT_R_BPC__MASK; | 727 | return ((val) << MDP4_PIPE_SRC_FORMAT_R_BPC__SHIFT) & MDP4_PIPE_SRC_FORMAT_R_BPC__MASK; |
728 | } | 728 | } |
729 | #define MDP4_PIPE_SRC_FORMAT_A_BPC__MASK 0x000000c0 | 729 | #define MDP4_PIPE_SRC_FORMAT_A_BPC__MASK 0x000000c0 |
730 | #define MDP4_PIPE_SRC_FORMAT_A_BPC__SHIFT 6 | 730 | #define MDP4_PIPE_SRC_FORMAT_A_BPC__SHIFT 6 |
731 | static inline uint32_t MDP4_PIPE_SRC_FORMAT_A_BPC(enum mpd4_bpc_alpha val) | 731 | static inline uint32_t MDP4_PIPE_SRC_FORMAT_A_BPC(enum mdp4_bpc_alpha val) |
732 | { | 732 | { |
733 | return ((val) << MDP4_PIPE_SRC_FORMAT_A_BPC__SHIFT) & MDP4_PIPE_SRC_FORMAT_A_BPC__MASK; | 733 | return ((val) << MDP4_PIPE_SRC_FORMAT_A_BPC__SHIFT) & MDP4_PIPE_SRC_FORMAT_A_BPC__MASK; |
734 | } | 734 | } |
@@ -750,7 +750,7 @@ static inline uint32_t MDP4_PIPE_SRC_FORMAT_UNPACK_COUNT(uint32_t val) | |||
750 | #define MDP4_PIPE_SRC_FORMAT_UNPACK_ALIGN_MSB 0x00040000 | 750 | #define MDP4_PIPE_SRC_FORMAT_UNPACK_ALIGN_MSB 0x00040000 |
751 | #define MDP4_PIPE_SRC_FORMAT_SOLID_FILL 0x00400000 | 751 | #define MDP4_PIPE_SRC_FORMAT_SOLID_FILL 0x00400000 |
752 | 752 | ||
753 | static inline uint32_t REG_MDP4_PIPE_SRC_UNPACK(enum mpd4_pipe i0) { return 0x00020054 + 0x10000*i0; } | 753 | static inline uint32_t REG_MDP4_PIPE_SRC_UNPACK(enum mdp4_pipe i0) { return 0x00020054 + 0x10000*i0; } |
754 | #define MDP4_PIPE_SRC_UNPACK_ELEM0__MASK 0x000000ff | 754 | #define MDP4_PIPE_SRC_UNPACK_ELEM0__MASK 0x000000ff |
755 | #define MDP4_PIPE_SRC_UNPACK_ELEM0__SHIFT 0 | 755 | #define MDP4_PIPE_SRC_UNPACK_ELEM0__SHIFT 0 |
756 | static inline uint32_t MDP4_PIPE_SRC_UNPACK_ELEM0(uint32_t val) | 756 | static inline uint32_t MDP4_PIPE_SRC_UNPACK_ELEM0(uint32_t val) |
@@ -776,7 +776,7 @@ static inline uint32_t MDP4_PIPE_SRC_UNPACK_ELEM3(uint32_t val) | |||
776 | return ((val) << MDP4_PIPE_SRC_UNPACK_ELEM3__SHIFT) & MDP4_PIPE_SRC_UNPACK_ELEM3__MASK; | 776 | return ((val) << MDP4_PIPE_SRC_UNPACK_ELEM3__SHIFT) & MDP4_PIPE_SRC_UNPACK_ELEM3__MASK; |
777 | } | 777 | } |
778 | 778 | ||
779 | static inline uint32_t REG_MDP4_PIPE_OP_MODE(enum mpd4_pipe i0) { return 0x00020058 + 0x10000*i0; } | 779 | static inline uint32_t REG_MDP4_PIPE_OP_MODE(enum mdp4_pipe i0) { return 0x00020058 + 0x10000*i0; } |
780 | #define MDP4_PIPE_OP_MODE_SCALEX_EN 0x00000001 | 780 | #define MDP4_PIPE_OP_MODE_SCALEX_EN 0x00000001 |
781 | #define MDP4_PIPE_OP_MODE_SCALEY_EN 0x00000002 | 781 | #define MDP4_PIPE_OP_MODE_SCALEY_EN 0x00000002 |
782 | #define MDP4_PIPE_OP_MODE_SRC_YCBCR 0x00000200 | 782 | #define MDP4_PIPE_OP_MODE_SRC_YCBCR 0x00000200 |
@@ -789,36 +789,36 @@ static inline uint32_t REG_MDP4_PIPE_OP_MODE(enum mpd4_pipe i0) { return 0x00020 | |||
789 | #define MDP4_PIPE_OP_MODE_DEINT_EN 0x00040000 | 789 | #define MDP4_PIPE_OP_MODE_DEINT_EN 0x00040000 |
790 | #define MDP4_PIPE_OP_MODE_DEINT_ODD_REF 0x00080000 | 790 | #define MDP4_PIPE_OP_MODE_DEINT_ODD_REF 0x00080000 |
791 | 791 | ||
792 | static inline uint32_t REG_MDP4_PIPE_PHASEX_STEP(enum mpd4_pipe i0) { return 0x0002005c + 0x10000*i0; } | 792 | static inline uint32_t REG_MDP4_PIPE_PHASEX_STEP(enum mdp4_pipe i0) { return 0x0002005c + 0x10000*i0; } |
793 | 793 | ||
794 | static inline uint32_t REG_MDP4_PIPE_PHASEY_STEP(enum mpd4_pipe i0) { return 0x00020060 + 0x10000*i0; } | 794 | static inline uint32_t REG_MDP4_PIPE_PHASEY_STEP(enum mdp4_pipe i0) { return 0x00020060 + 0x10000*i0; } |
795 | 795 | ||
796 | static inline uint32_t REG_MDP4_PIPE_FETCH_CONFIG(enum mpd4_pipe i0) { return 0x00021004 + 0x10000*i0; } | 796 | static inline uint32_t REG_MDP4_PIPE_FETCH_CONFIG(enum mdp4_pipe i0) { return 0x00021004 + 0x10000*i0; } |
797 | 797 | ||
798 | static inline uint32_t REG_MDP4_PIPE_SOLID_COLOR(enum mpd4_pipe i0) { return 0x00021008 + 0x10000*i0; } | 798 | static inline uint32_t REG_MDP4_PIPE_SOLID_COLOR(enum mdp4_pipe i0) { return 0x00021008 + 0x10000*i0; } |
799 | 799 | ||
800 | static inline uint32_t REG_MDP4_PIPE_CSC(enum mpd4_pipe i0) { return 0x00024000 + 0x10000*i0; } | 800 | static inline uint32_t REG_MDP4_PIPE_CSC(enum mdp4_pipe i0) { return 0x00024000 + 0x10000*i0; } |
801 | 801 | ||
802 | 802 | ||
803 | static inline uint32_t REG_MDP4_PIPE_CSC_MV(enum mpd4_pipe i0, uint32_t i1) { return 0x00024400 + 0x10000*i0 + 0x4*i1; } | 803 | static inline uint32_t REG_MDP4_PIPE_CSC_MV(enum mdp4_pipe i0, uint32_t i1) { return 0x00024400 + 0x10000*i0 + 0x4*i1; } |
804 | 804 | ||
805 | static inline uint32_t REG_MDP4_PIPE_CSC_MV_VAL(enum mpd4_pipe i0, uint32_t i1) { return 0x00024400 + 0x10000*i0 + 0x4*i1; } | 805 | static inline uint32_t REG_MDP4_PIPE_CSC_MV_VAL(enum mdp4_pipe i0, uint32_t i1) { return 0x00024400 + 0x10000*i0 + 0x4*i1; } |
806 | 806 | ||
807 | static inline uint32_t REG_MDP4_PIPE_CSC_PRE_BV(enum mpd4_pipe i0, uint32_t i1) { return 0x00024500 + 0x10000*i0 + 0x4*i1; } | 807 | static inline uint32_t REG_MDP4_PIPE_CSC_PRE_BV(enum mdp4_pipe i0, uint32_t i1) { return 0x00024500 + 0x10000*i0 + 0x4*i1; } |
808 | 808 | ||
809 | static inline uint32_t REG_MDP4_PIPE_CSC_PRE_BV_VAL(enum mpd4_pipe i0, uint32_t i1) { return 0x00024500 + 0x10000*i0 + 0x4*i1; } | 809 | static inline uint32_t REG_MDP4_PIPE_CSC_PRE_BV_VAL(enum mdp4_pipe i0, uint32_t i1) { return 0x00024500 + 0x10000*i0 + 0x4*i1; } |
810 | 810 | ||
811 | static inline uint32_t REG_MDP4_PIPE_CSC_POST_BV(enum mpd4_pipe i0, uint32_t i1) { return 0x00024580 + 0x10000*i0 + 0x4*i1; } | 811 | static inline uint32_t REG_MDP4_PIPE_CSC_POST_BV(enum mdp4_pipe i0, uint32_t i1) { return 0x00024580 + 0x10000*i0 + 0x4*i1; } |
812 | 812 | ||
813 | static inline uint32_t REG_MDP4_PIPE_CSC_POST_BV_VAL(enum mpd4_pipe i0, uint32_t i1) { return 0x00024580 + 0x10000*i0 + 0x4*i1; } | 813 | static inline uint32_t REG_MDP4_PIPE_CSC_POST_BV_VAL(enum mdp4_pipe i0, uint32_t i1) { return 0x00024580 + 0x10000*i0 + 0x4*i1; } |
814 | 814 | ||
815 | static inline uint32_t REG_MDP4_PIPE_CSC_PRE_LV(enum mpd4_pipe i0, uint32_t i1) { return 0x00024600 + 0x10000*i0 + 0x4*i1; } | 815 | static inline uint32_t REG_MDP4_PIPE_CSC_PRE_LV(enum mdp4_pipe i0, uint32_t i1) { return 0x00024600 + 0x10000*i0 + 0x4*i1; } |
816 | 816 | ||
817 | static inline uint32_t REG_MDP4_PIPE_CSC_PRE_LV_VAL(enum mpd4_pipe i0, uint32_t i1) { return 0x00024600 + 0x10000*i0 + 0x4*i1; } | 817 | static inline uint32_t REG_MDP4_PIPE_CSC_PRE_LV_VAL(enum mdp4_pipe i0, uint32_t i1) { return 0x00024600 + 0x10000*i0 + 0x4*i1; } |
818 | 818 | ||
819 | static inline uint32_t REG_MDP4_PIPE_CSC_POST_LV(enum mpd4_pipe i0, uint32_t i1) { return 0x00024680 + 0x10000*i0 + 0x4*i1; } | 819 | static inline uint32_t REG_MDP4_PIPE_CSC_POST_LV(enum mdp4_pipe i0, uint32_t i1) { return 0x00024680 + 0x10000*i0 + 0x4*i1; } |
820 | 820 | ||
821 | static inline uint32_t REG_MDP4_PIPE_CSC_POST_LV_VAL(enum mpd4_pipe i0, uint32_t i1) { return 0x00024680 + 0x10000*i0 + 0x4*i1; } | 821 | static inline uint32_t REG_MDP4_PIPE_CSC_POST_LV_VAL(enum mdp4_pipe i0, uint32_t i1) { return 0x00024680 + 0x10000*i0 + 0x4*i1; } |
822 | 822 | ||
823 | #define REG_MDP4_LCDC 0x000c0000 | 823 | #define REG_MDP4_LCDC 0x000c0000 |
824 | 824 | ||
diff --git a/drivers/gpu/drm/msm/mdp4/mdp4_crtc.c b/drivers/gpu/drm/msm/mdp4/mdp4_crtc.c index de6bea297cda..019d530187ff 100644 --- a/drivers/gpu/drm/msm/mdp4/mdp4_crtc.c +++ b/drivers/gpu/drm/msm/mdp4/mdp4_crtc.c | |||
@@ -26,6 +26,7 @@ struct mdp4_crtc { | |||
26 | struct drm_crtc base; | 26 | struct drm_crtc base; |
27 | char name[8]; | 27 | char name[8]; |
28 | struct drm_plane *plane; | 28 | struct drm_plane *plane; |
29 | struct drm_plane *planes[8]; | ||
29 | int id; | 30 | int id; |
30 | int ovlp; | 31 | int ovlp; |
31 | enum mdp4_dma dma; | 32 | enum mdp4_dma dma; |
@@ -50,7 +51,11 @@ struct mdp4_crtc { | |||
50 | 51 | ||
51 | /* if there is a pending flip, these will be non-null: */ | 52 | /* if there is a pending flip, these will be non-null: */ |
52 | struct drm_pending_vblank_event *event; | 53 | struct drm_pending_vblank_event *event; |
53 | struct work_struct pageflip_work; | 54 | struct msm_fence_cb pageflip_cb; |
55 | |||
56 | #define PENDING_CURSOR 0x1 | ||
57 | #define PENDING_FLIP 0x2 | ||
58 | atomic_t pending; | ||
54 | 59 | ||
55 | /* the fb that we currently hold a scanout ref to: */ | 60 | /* the fb that we currently hold a scanout ref to: */ |
56 | struct drm_framebuffer *fb; | 61 | struct drm_framebuffer *fb; |
@@ -92,7 +97,8 @@ static void update_fb(struct drm_crtc *crtc, bool async, | |||
92 | } | 97 | } |
93 | } | 98 | } |
94 | 99 | ||
95 | static void complete_flip(struct drm_crtc *crtc, bool canceled) | 100 | /* if file!=NULL, this is preclose potential cancel-flip path */ |
101 | static void complete_flip(struct drm_crtc *crtc, struct drm_file *file) | ||
96 | { | 102 | { |
97 | struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); | 103 | struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); |
98 | struct drm_device *dev = crtc->dev; | 104 | struct drm_device *dev = crtc->dev; |
@@ -102,11 +108,14 @@ static void complete_flip(struct drm_crtc *crtc, bool canceled) | |||
102 | spin_lock_irqsave(&dev->event_lock, flags); | 108 | spin_lock_irqsave(&dev->event_lock, flags); |
103 | event = mdp4_crtc->event; | 109 | event = mdp4_crtc->event; |
104 | if (event) { | 110 | if (event) { |
105 | mdp4_crtc->event = NULL; | 111 | /* if regular vblank case (!file) or if cancel-flip from |
106 | if (canceled) | 112 | * preclose on file that requested flip, then send the |
107 | event->base.destroy(&event->base); | 113 | * event: |
108 | else | 114 | */ |
115 | if (!file || (event->base.file_priv == file)) { | ||
116 | mdp4_crtc->event = NULL; | ||
109 | drm_send_vblank_event(dev, mdp4_crtc->id, event); | 117 | drm_send_vblank_event(dev, mdp4_crtc->id, event); |
118 | } | ||
110 | } | 119 | } |
111 | spin_unlock_irqrestore(&dev->event_lock, flags); | 120 | spin_unlock_irqrestore(&dev->event_lock, flags); |
112 | } | 121 | } |
@@ -115,9 +124,15 @@ static void crtc_flush(struct drm_crtc *crtc) | |||
115 | { | 124 | { |
116 | struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); | 125 | struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); |
117 | struct mdp4_kms *mdp4_kms = get_kms(crtc); | 126 | struct mdp4_kms *mdp4_kms = get_kms(crtc); |
118 | uint32_t flush = 0; | 127 | uint32_t i, flush = 0; |
119 | 128 | ||
120 | flush |= pipe2flush(mdp4_plane_pipe(mdp4_crtc->plane)); | 129 | for (i = 0; i < ARRAY_SIZE(mdp4_crtc->planes); i++) { |
130 | struct drm_plane *plane = mdp4_crtc->planes[i]; | ||
131 | if (plane) { | ||
132 | enum mdp4_pipe pipe_id = mdp4_plane_pipe(plane); | ||
133 | flush |= pipe2flush(pipe_id); | ||
134 | } | ||
135 | } | ||
121 | flush |= ovlp2flush(mdp4_crtc->ovlp); | 136 | flush |= ovlp2flush(mdp4_crtc->ovlp); |
122 | 137 | ||
123 | DBG("%s: flush=%08x", mdp4_crtc->name, flush); | 138 | DBG("%s: flush=%08x", mdp4_crtc->name, flush); |
@@ -125,17 +140,29 @@ static void crtc_flush(struct drm_crtc *crtc) | |||
125 | mdp4_write(mdp4_kms, REG_MDP4_OVERLAY_FLUSH, flush); | 140 | mdp4_write(mdp4_kms, REG_MDP4_OVERLAY_FLUSH, flush); |
126 | } | 141 | } |
127 | 142 | ||
128 | static void pageflip_worker(struct work_struct *work) | 143 | static void request_pending(struct drm_crtc *crtc, uint32_t pending) |
144 | { | ||
145 | struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); | ||
146 | |||
147 | atomic_or(pending, &mdp4_crtc->pending); | ||
148 | mdp4_irq_register(get_kms(crtc), &mdp4_crtc->vblank); | ||
149 | } | ||
150 | |||
151 | static void pageflip_cb(struct msm_fence_cb *cb) | ||
129 | { | 152 | { |
130 | struct mdp4_crtc *mdp4_crtc = | 153 | struct mdp4_crtc *mdp4_crtc = |
131 | container_of(work, struct mdp4_crtc, pageflip_work); | 154 | container_of(cb, struct mdp4_crtc, pageflip_cb); |
132 | struct drm_crtc *crtc = &mdp4_crtc->base; | 155 | struct drm_crtc *crtc = &mdp4_crtc->base; |
156 | struct drm_framebuffer *fb = crtc->fb; | ||
133 | 157 | ||
134 | mdp4_plane_set_scanout(mdp4_crtc->plane, crtc->fb); | 158 | if (!fb) |
159 | return; | ||
160 | |||
161 | mdp4_plane_set_scanout(mdp4_crtc->plane, fb); | ||
135 | crtc_flush(crtc); | 162 | crtc_flush(crtc); |
136 | 163 | ||
137 | /* enable vblank to complete flip: */ | 164 | /* enable vblank to complete flip: */ |
138 | mdp4_irq_register(get_kms(crtc), &mdp4_crtc->vblank); | 165 | request_pending(crtc, PENDING_FLIP); |
139 | } | 166 | } |
140 | 167 | ||
141 | static void unref_fb_worker(struct drm_flip_work *work, void *val) | 168 | static void unref_fb_worker(struct drm_flip_work *work, void *val) |
@@ -205,67 +232,69 @@ static void blend_setup(struct drm_crtc *crtc) | |||
205 | struct mdp4_kms *mdp4_kms = get_kms(crtc); | 232 | struct mdp4_kms *mdp4_kms = get_kms(crtc); |
206 | int i, ovlp = mdp4_crtc->ovlp; | 233 | int i, ovlp = mdp4_crtc->ovlp; |
207 | uint32_t mixer_cfg = 0; | 234 | uint32_t mixer_cfg = 0; |
208 | 235 | static const enum mdp4_mixer_stage_id stages[] = { | |
209 | /* | 236 | STAGE_BASE, STAGE0, STAGE1, STAGE2, STAGE3, |
210 | * This probably would also need to be triggered by any attached | 237 | }; |
211 | * plane when it changes.. for now since we are only using a single | 238 | /* statically (for now) map planes to mixer stage (z-order): */ |
212 | * private plane, the configuration is hard-coded: | 239 | static const int idxs[] = { |
213 | */ | 240 | [VG1] = 1, |
241 | [VG2] = 2, | ||
242 | [RGB1] = 0, | ||
243 | [RGB2] = 0, | ||
244 | [RGB3] = 0, | ||
245 | [VG3] = 3, | ||
246 | [VG4] = 4, | ||
247 | |||
248 | }; | ||
249 | bool alpha[4]= { false, false, false, false }; | ||
214 | 250 | ||
215 | mdp4_write(mdp4_kms, REG_MDP4_OVLP_TRANSP_LOW0(ovlp), 0); | 251 | mdp4_write(mdp4_kms, REG_MDP4_OVLP_TRANSP_LOW0(ovlp), 0); |
216 | mdp4_write(mdp4_kms, REG_MDP4_OVLP_TRANSP_LOW1(ovlp), 0); | 252 | mdp4_write(mdp4_kms, REG_MDP4_OVLP_TRANSP_LOW1(ovlp), 0); |
217 | mdp4_write(mdp4_kms, REG_MDP4_OVLP_TRANSP_HIGH0(ovlp), 0); | 253 | mdp4_write(mdp4_kms, REG_MDP4_OVLP_TRANSP_HIGH0(ovlp), 0); |
218 | mdp4_write(mdp4_kms, REG_MDP4_OVLP_TRANSP_HIGH1(ovlp), 0); | 254 | mdp4_write(mdp4_kms, REG_MDP4_OVLP_TRANSP_HIGH1(ovlp), 0); |
219 | 255 | ||
256 | /* TODO single register for all CRTCs, so this won't work properly | ||
257 | * when multiple CRTCs are active.. | ||
258 | */ | ||
259 | for (i = 0; i < ARRAY_SIZE(mdp4_crtc->planes); i++) { | ||
260 | struct drm_plane *plane = mdp4_crtc->planes[i]; | ||
261 | if (plane) { | ||
262 | enum mdp4_pipe pipe_id = mdp4_plane_pipe(plane); | ||
263 | int idx = idxs[pipe_id]; | ||
264 | if (idx > 0) { | ||
265 | const struct mdp4_format *format = | ||
266 | to_mdp4_format(msm_framebuffer_format(plane->fb)); | ||
267 | alpha[idx-1] = format->alpha_enable; | ||
268 | } | ||
269 | mixer_cfg |= mixercfg(mdp4_crtc->mixer, pipe_id, stages[idx]); | ||
270 | } | ||
271 | } | ||
272 | |||
273 | /* this shouldn't happen.. and seems to cause underflow: */ | ||
274 | WARN_ON(!mixer_cfg); | ||
275 | |||
220 | for (i = 0; i < 4; i++) { | 276 | for (i = 0; i < 4; i++) { |
221 | mdp4_write(mdp4_kms, REG_MDP4_OVLP_STAGE_FG_ALPHA(ovlp, i), 0); | 277 | uint32_t op; |
222 | mdp4_write(mdp4_kms, REG_MDP4_OVLP_STAGE_BG_ALPHA(ovlp, i), 0); | 278 | |
223 | mdp4_write(mdp4_kms, REG_MDP4_OVLP_STAGE_OP(ovlp, i), | 279 | if (alpha[i]) { |
224 | MDP4_OVLP_STAGE_OP_FG_ALPHA(FG_CONST) | | 280 | op = MDP4_OVLP_STAGE_OP_FG_ALPHA(FG_PIXEL) | |
225 | MDP4_OVLP_STAGE_OP_BG_ALPHA(BG_CONST)); | 281 | MDP4_OVLP_STAGE_OP_BG_ALPHA(FG_PIXEL) | |
226 | mdp4_write(mdp4_kms, REG_MDP4_OVLP_STAGE_CO3(ovlp, i), 0); | 282 | MDP4_OVLP_STAGE_OP_BG_INV_ALPHA; |
283 | } else { | ||
284 | op = MDP4_OVLP_STAGE_OP_FG_ALPHA(FG_CONST) | | ||
285 | MDP4_OVLP_STAGE_OP_BG_ALPHA(BG_CONST); | ||
286 | } | ||
287 | |||
288 | mdp4_write(mdp4_kms, REG_MDP4_OVLP_STAGE_FG_ALPHA(ovlp, i), 0xff); | ||
289 | mdp4_write(mdp4_kms, REG_MDP4_OVLP_STAGE_BG_ALPHA(ovlp, i), 0x00); | ||
290 | mdp4_write(mdp4_kms, REG_MDP4_OVLP_STAGE_OP(ovlp, i), op); | ||
291 | mdp4_write(mdp4_kms, REG_MDP4_OVLP_STAGE_CO3(ovlp, i), 1); | ||
227 | mdp4_write(mdp4_kms, REG_MDP4_OVLP_STAGE_TRANSP_LOW0(ovlp, i), 0); | 292 | mdp4_write(mdp4_kms, REG_MDP4_OVLP_STAGE_TRANSP_LOW0(ovlp, i), 0); |
228 | mdp4_write(mdp4_kms, REG_MDP4_OVLP_STAGE_TRANSP_LOW1(ovlp, i), 0); | 293 | mdp4_write(mdp4_kms, REG_MDP4_OVLP_STAGE_TRANSP_LOW1(ovlp, i), 0); |
229 | mdp4_write(mdp4_kms, REG_MDP4_OVLP_STAGE_TRANSP_HIGH0(ovlp, i), 0); | 294 | mdp4_write(mdp4_kms, REG_MDP4_OVLP_STAGE_TRANSP_HIGH0(ovlp, i), 0); |
230 | mdp4_write(mdp4_kms, REG_MDP4_OVLP_STAGE_TRANSP_HIGH1(ovlp, i), 0); | 295 | mdp4_write(mdp4_kms, REG_MDP4_OVLP_STAGE_TRANSP_HIGH1(ovlp, i), 0); |
231 | } | 296 | } |
232 | 297 | ||
233 | /* TODO single register for all CRTCs, so this won't work properly | ||
234 | * when multiple CRTCs are active.. | ||
235 | */ | ||
236 | switch (mdp4_plane_pipe(mdp4_crtc->plane)) { | ||
237 | case VG1: | ||
238 | mixer_cfg = MDP4_LAYERMIXER_IN_CFG_PIPE0(STAGE_BASE) | | ||
239 | COND(mdp4_crtc->mixer == 1, MDP4_LAYERMIXER_IN_CFG_PIPE0_MIXER1); | ||
240 | break; | ||
241 | case VG2: | ||
242 | mixer_cfg = MDP4_LAYERMIXER_IN_CFG_PIPE1(STAGE_BASE) | | ||
243 | COND(mdp4_crtc->mixer == 1, MDP4_LAYERMIXER_IN_CFG_PIPE1_MIXER1); | ||
244 | break; | ||
245 | case RGB1: | ||
246 | mixer_cfg = MDP4_LAYERMIXER_IN_CFG_PIPE2(STAGE_BASE) | | ||
247 | COND(mdp4_crtc->mixer == 1, MDP4_LAYERMIXER_IN_CFG_PIPE2_MIXER1); | ||
248 | break; | ||
249 | case RGB2: | ||
250 | mixer_cfg = MDP4_LAYERMIXER_IN_CFG_PIPE3(STAGE_BASE) | | ||
251 | COND(mdp4_crtc->mixer == 1, MDP4_LAYERMIXER_IN_CFG_PIPE3_MIXER1); | ||
252 | break; | ||
253 | case RGB3: | ||
254 | mixer_cfg = MDP4_LAYERMIXER_IN_CFG_PIPE4(STAGE_BASE) | | ||
255 | COND(mdp4_crtc->mixer == 1, MDP4_LAYERMIXER_IN_CFG_PIPE4_MIXER1); | ||
256 | break; | ||
257 | case VG3: | ||
258 | mixer_cfg = MDP4_LAYERMIXER_IN_CFG_PIPE5(STAGE_BASE) | | ||
259 | COND(mdp4_crtc->mixer == 1, MDP4_LAYERMIXER_IN_CFG_PIPE5_MIXER1); | ||
260 | break; | ||
261 | case VG4: | ||
262 | mixer_cfg = MDP4_LAYERMIXER_IN_CFG_PIPE6(STAGE_BASE) | | ||
263 | COND(mdp4_crtc->mixer == 1, MDP4_LAYERMIXER_IN_CFG_PIPE6_MIXER1); | ||
264 | break; | ||
265 | default: | ||
266 | WARN_ON("invalid pipe"); | ||
267 | break; | ||
268 | } | ||
269 | mdp4_write(mdp4_kms, REG_MDP4_LAYERMIXER_IN_CFG, mixer_cfg); | 298 | mdp4_write(mdp4_kms, REG_MDP4_LAYERMIXER_IN_CFG, mixer_cfg); |
270 | } | 299 | } |
271 | 300 | ||
@@ -377,6 +406,7 @@ static int mdp4_crtc_page_flip(struct drm_crtc *crtc, | |||
377 | struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); | 406 | struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); |
378 | struct drm_device *dev = crtc->dev; | 407 | struct drm_device *dev = crtc->dev; |
379 | struct drm_gem_object *obj; | 408 | struct drm_gem_object *obj; |
409 | unsigned long flags; | ||
380 | 410 | ||
381 | if (mdp4_crtc->event) { | 411 | if (mdp4_crtc->event) { |
382 | dev_err(dev->dev, "already pending flip!\n"); | 412 | dev_err(dev->dev, "already pending flip!\n"); |
@@ -385,11 +415,13 @@ static int mdp4_crtc_page_flip(struct drm_crtc *crtc, | |||
385 | 415 | ||
386 | obj = msm_framebuffer_bo(new_fb, 0); | 416 | obj = msm_framebuffer_bo(new_fb, 0); |
387 | 417 | ||
418 | spin_lock_irqsave(&dev->event_lock, flags); | ||
388 | mdp4_crtc->event = event; | 419 | mdp4_crtc->event = event; |
420 | spin_unlock_irqrestore(&dev->event_lock, flags); | ||
421 | |||
389 | update_fb(crtc, true, new_fb); | 422 | update_fb(crtc, true, new_fb); |
390 | 423 | ||
391 | return msm_gem_queue_inactive_work(obj, | 424 | return msm_gem_queue_inactive_cb(obj, &mdp4_crtc->pageflip_cb); |
392 | &mdp4_crtc->pageflip_work); | ||
393 | } | 425 | } |
394 | 426 | ||
395 | static int mdp4_crtc_set_property(struct drm_crtc *crtc, | 427 | static int mdp4_crtc_set_property(struct drm_crtc *crtc, |
@@ -498,6 +530,8 @@ static int mdp4_crtc_cursor_set(struct drm_crtc *crtc, | |||
498 | drm_gem_object_unreference_unlocked(old_bo); | 530 | drm_gem_object_unreference_unlocked(old_bo); |
499 | } | 531 | } |
500 | 532 | ||
533 | request_pending(crtc, PENDING_CURSOR); | ||
534 | |||
501 | return 0; | 535 | return 0; |
502 | 536 | ||
503 | fail: | 537 | fail: |
@@ -542,13 +576,21 @@ static void mdp4_crtc_vblank_irq(struct mdp4_irq *irq, uint32_t irqstatus) | |||
542 | struct mdp4_crtc *mdp4_crtc = container_of(irq, struct mdp4_crtc, vblank); | 576 | struct mdp4_crtc *mdp4_crtc = container_of(irq, struct mdp4_crtc, vblank); |
543 | struct drm_crtc *crtc = &mdp4_crtc->base; | 577 | struct drm_crtc *crtc = &mdp4_crtc->base; |
544 | struct msm_drm_private *priv = crtc->dev->dev_private; | 578 | struct msm_drm_private *priv = crtc->dev->dev_private; |
579 | unsigned pending; | ||
545 | 580 | ||
546 | update_cursor(crtc); | ||
547 | complete_flip(crtc, false); | ||
548 | mdp4_irq_unregister(get_kms(crtc), &mdp4_crtc->vblank); | 581 | mdp4_irq_unregister(get_kms(crtc), &mdp4_crtc->vblank); |
549 | 582 | ||
550 | drm_flip_work_commit(&mdp4_crtc->unref_fb_work, priv->wq); | 583 | pending = atomic_xchg(&mdp4_crtc->pending, 0); |
551 | drm_flip_work_commit(&mdp4_crtc->unref_cursor_work, priv->wq); | 584 | |
585 | if (pending & PENDING_FLIP) { | ||
586 | complete_flip(crtc, NULL); | ||
587 | drm_flip_work_commit(&mdp4_crtc->unref_fb_work, priv->wq); | ||
588 | } | ||
589 | |||
590 | if (pending & PENDING_CURSOR) { | ||
591 | update_cursor(crtc); | ||
592 | drm_flip_work_commit(&mdp4_crtc->unref_cursor_work, priv->wq); | ||
593 | } | ||
552 | } | 594 | } |
553 | 595 | ||
554 | static void mdp4_crtc_err_irq(struct mdp4_irq *irq, uint32_t irqstatus) | 596 | static void mdp4_crtc_err_irq(struct mdp4_irq *irq, uint32_t irqstatus) |
@@ -565,9 +607,10 @@ uint32_t mdp4_crtc_vblank(struct drm_crtc *crtc) | |||
565 | return mdp4_crtc->vblank.irqmask; | 607 | return mdp4_crtc->vblank.irqmask; |
566 | } | 608 | } |
567 | 609 | ||
568 | void mdp4_crtc_cancel_pending_flip(struct drm_crtc *crtc) | 610 | void mdp4_crtc_cancel_pending_flip(struct drm_crtc *crtc, struct drm_file *file) |
569 | { | 611 | { |
570 | complete_flip(crtc, true); | 612 | DBG("cancel: %p", file); |
613 | complete_flip(crtc, file); | ||
571 | } | 614 | } |
572 | 615 | ||
573 | /* set dma config, ie. the format the encoder wants. */ | 616 | /* set dma config, ie. the format the encoder wants. */ |
@@ -622,6 +665,32 @@ void mdp4_crtc_set_intf(struct drm_crtc *crtc, enum mdp4_intf intf) | |||
622 | mdp4_write(mdp4_kms, REG_MDP4_DISP_INTF_SEL, intf_sel); | 665 | mdp4_write(mdp4_kms, REG_MDP4_DISP_INTF_SEL, intf_sel); |
623 | } | 666 | } |
624 | 667 | ||
668 | static void set_attach(struct drm_crtc *crtc, enum mdp4_pipe pipe_id, | ||
669 | struct drm_plane *plane) | ||
670 | { | ||
671 | struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc); | ||
672 | |||
673 | BUG_ON(pipe_id >= ARRAY_SIZE(mdp4_crtc->planes)); | ||
674 | |||
675 | if (mdp4_crtc->planes[pipe_id] == plane) | ||
676 | return; | ||
677 | |||
678 | mdp4_crtc->planes[pipe_id] = plane; | ||
679 | blend_setup(crtc); | ||
680 | if (mdp4_crtc->enabled && (plane != mdp4_crtc->plane)) | ||
681 | crtc_flush(crtc); | ||
682 | } | ||
683 | |||
684 | void mdp4_crtc_attach(struct drm_crtc *crtc, struct drm_plane *plane) | ||
685 | { | ||
686 | set_attach(crtc, mdp4_plane_pipe(plane), plane); | ||
687 | } | ||
688 | |||
689 | void mdp4_crtc_detach(struct drm_crtc *crtc, struct drm_plane *plane) | ||
690 | { | ||
691 | set_attach(crtc, mdp4_plane_pipe(plane), NULL); | ||
692 | } | ||
693 | |||
625 | static const char *dma_names[] = { | 694 | static const char *dma_names[] = { |
626 | "DMA_P", "DMA_S", "DMA_E", | 695 | "DMA_P", "DMA_S", "DMA_E", |
627 | }; | 696 | }; |
@@ -644,7 +713,6 @@ struct drm_crtc *mdp4_crtc_init(struct drm_device *dev, | |||
644 | crtc = &mdp4_crtc->base; | 713 | crtc = &mdp4_crtc->base; |
645 | 714 | ||
646 | mdp4_crtc->plane = plane; | 715 | mdp4_crtc->plane = plane; |
647 | mdp4_crtc->plane->crtc = crtc; | ||
648 | 716 | ||
649 | mdp4_crtc->ovlp = ovlp_id; | 717 | mdp4_crtc->ovlp = ovlp_id; |
650 | mdp4_crtc->dma = dma_id; | 718 | mdp4_crtc->dma = dma_id; |
@@ -668,7 +736,7 @@ struct drm_crtc *mdp4_crtc_init(struct drm_device *dev, | |||
668 | ret = drm_flip_work_init(&mdp4_crtc->unref_cursor_work, 64, | 736 | ret = drm_flip_work_init(&mdp4_crtc->unref_cursor_work, 64, |
669 | "unref cursor", unref_cursor_worker); | 737 | "unref cursor", unref_cursor_worker); |
670 | 738 | ||
671 | INIT_WORK(&mdp4_crtc->pageflip_work, pageflip_worker); | 739 | INIT_FENCE_CB(&mdp4_crtc->pageflip_cb, pageflip_cb); |
672 | 740 | ||
673 | drm_crtc_init(dev, crtc, &mdp4_crtc_funcs); | 741 | drm_crtc_init(dev, crtc, &mdp4_crtc_funcs); |
674 | drm_crtc_helper_add(crtc, &mdp4_crtc_helper_funcs); | 742 | drm_crtc_helper_add(crtc, &mdp4_crtc_helper_funcs); |
diff --git a/drivers/gpu/drm/msm/mdp4/mdp4_format.c b/drivers/gpu/drm/msm/mdp4/mdp4_format.c index 7b645f2e837a..17330b0927b2 100644 --- a/drivers/gpu/drm/msm/mdp4/mdp4_format.c +++ b/drivers/gpu/drm/msm/mdp4/mdp4_format.c | |||
@@ -44,6 +44,22 @@ static const struct mdp4_format formats[] = { | |||
44 | FMT(BGR565, 0, 5, 6, 5, 2, 0, 1, 0, false, true, 2, 3), | 44 | FMT(BGR565, 0, 5, 6, 5, 2, 0, 1, 0, false, true, 2, 3), |
45 | }; | 45 | }; |
46 | 46 | ||
47 | uint32_t mdp4_get_formats(enum mdp4_pipe pipe_id, uint32_t *pixel_formats, | ||
48 | uint32_t max_formats) | ||
49 | { | ||
50 | uint32_t i; | ||
51 | for (i = 0; i < ARRAY_SIZE(formats); i++) { | ||
52 | const struct mdp4_format *f = &formats[i]; | ||
53 | |||
54 | if (i == max_formats) | ||
55 | break; | ||
56 | |||
57 | pixel_formats[i] = f->base.pixel_format; | ||
58 | } | ||
59 | |||
60 | return i; | ||
61 | } | ||
62 | |||
47 | const struct msm_format *mdp4_get_format(struct msm_kms *kms, uint32_t format) | 63 | const struct msm_format *mdp4_get_format(struct msm_kms *kms, uint32_t format) |
48 | { | 64 | { |
49 | int i; | 65 | int i; |
diff --git a/drivers/gpu/drm/msm/mdp4/mdp4_kms.c b/drivers/gpu/drm/msm/mdp4/mdp4_kms.c index bc7fd11ad8be..8972ac35a43d 100644 --- a/drivers/gpu/drm/msm/mdp4/mdp4_kms.c +++ b/drivers/gpu/drm/msm/mdp4/mdp4_kms.c | |||
@@ -135,7 +135,7 @@ static void mdp4_preclose(struct msm_kms *kms, struct drm_file *file) | |||
135 | unsigned i; | 135 | unsigned i; |
136 | 136 | ||
137 | for (i = 0; i < priv->num_crtcs; i++) | 137 | for (i = 0; i < priv->num_crtcs; i++) |
138 | mdp4_crtc_cancel_pending_flip(priv->crtcs[i]); | 138 | mdp4_crtc_cancel_pending_flip(priv->crtcs[i], file); |
139 | } | 139 | } |
140 | 140 | ||
141 | static void mdp4_destroy(struct msm_kms *kms) | 141 | static void mdp4_destroy(struct msm_kms *kms) |
@@ -196,6 +196,23 @@ static int modeset_init(struct mdp4_kms *mdp4_kms) | |||
196 | * for more than just RGB1->DMA_E->DTV->HDMI | 196 | * for more than just RGB1->DMA_E->DTV->HDMI |
197 | */ | 197 | */ |
198 | 198 | ||
199 | /* construct non-private planes: */ | ||
200 | plane = mdp4_plane_init(dev, VG1, false); | ||
201 | if (IS_ERR(plane)) { | ||
202 | dev_err(dev->dev, "failed to construct plane for VG1\n"); | ||
203 | ret = PTR_ERR(plane); | ||
204 | goto fail; | ||
205 | } | ||
206 | priv->planes[priv->num_planes++] = plane; | ||
207 | |||
208 | plane = mdp4_plane_init(dev, VG2, false); | ||
209 | if (IS_ERR(plane)) { | ||
210 | dev_err(dev->dev, "failed to construct plane for VG2\n"); | ||
211 | ret = PTR_ERR(plane); | ||
212 | goto fail; | ||
213 | } | ||
214 | priv->planes[priv->num_planes++] = plane; | ||
215 | |||
199 | /* the CRTCs get constructed with a private plane: */ | 216 | /* the CRTCs get constructed with a private plane: */ |
200 | plane = mdp4_plane_init(dev, RGB1, true); | 217 | plane = mdp4_plane_init(dev, RGB1, true); |
201 | if (IS_ERR(plane)) { | 218 | if (IS_ERR(plane)) { |
diff --git a/drivers/gpu/drm/msm/mdp4/mdp4_kms.h b/drivers/gpu/drm/msm/mdp4/mdp4_kms.h index 1e83554955f3..eb015c834087 100644 --- a/drivers/gpu/drm/msm/mdp4/mdp4_kms.h +++ b/drivers/gpu/drm/msm/mdp4/mdp4_kms.h | |||
@@ -75,8 +75,8 @@ struct mdp4_platform_config { | |||
75 | 75 | ||
76 | struct mdp4_format { | 76 | struct mdp4_format { |
77 | struct msm_format base; | 77 | struct msm_format base; |
78 | enum mpd4_bpc bpc_r, bpc_g, bpc_b; | 78 | enum mdp4_bpc bpc_r, bpc_g, bpc_b; |
79 | enum mpd4_bpc_alpha bpc_a; | 79 | enum mdp4_bpc_alpha bpc_a; |
80 | uint8_t unpack[4]; | 80 | uint8_t unpack[4]; |
81 | bool alpha_enable, unpack_tight; | 81 | bool alpha_enable, unpack_tight; |
82 | uint8_t cpp, unpack_count; | 82 | uint8_t cpp, unpack_count; |
@@ -93,7 +93,7 @@ static inline u32 mdp4_read(struct mdp4_kms *mdp4_kms, u32 reg) | |||
93 | return msm_readl(mdp4_kms->mmio + reg); | 93 | return msm_readl(mdp4_kms->mmio + reg); |
94 | } | 94 | } |
95 | 95 | ||
96 | static inline uint32_t pipe2flush(enum mpd4_pipe pipe) | 96 | static inline uint32_t pipe2flush(enum mdp4_pipe pipe) |
97 | { | 97 | { |
98 | switch (pipe) { | 98 | switch (pipe) { |
99 | case VG1: return MDP4_OVERLAY_FLUSH_VG1; | 99 | case VG1: return MDP4_OVERLAY_FLUSH_VG1; |
@@ -133,6 +133,48 @@ static inline uint32_t dma2err(enum mdp4_dma dma) | |||
133 | } | 133 | } |
134 | } | 134 | } |
135 | 135 | ||
136 | static inline uint32_t mixercfg(int mixer, enum mdp4_pipe pipe, | ||
137 | enum mdp4_mixer_stage_id stage) | ||
138 | { | ||
139 | uint32_t mixer_cfg = 0; | ||
140 | |||
141 | switch (pipe) { | ||
142 | case VG1: | ||
143 | mixer_cfg = MDP4_LAYERMIXER_IN_CFG_PIPE0(stage) | | ||
144 | COND(mixer == 1, MDP4_LAYERMIXER_IN_CFG_PIPE0_MIXER1); | ||
145 | break; | ||
146 | case VG2: | ||
147 | mixer_cfg = MDP4_LAYERMIXER_IN_CFG_PIPE1(stage) | | ||
148 | COND(mixer == 1, MDP4_LAYERMIXER_IN_CFG_PIPE1_MIXER1); | ||
149 | break; | ||
150 | case RGB1: | ||
151 | mixer_cfg = MDP4_LAYERMIXER_IN_CFG_PIPE2(stage) | | ||
152 | COND(mixer == 1, MDP4_LAYERMIXER_IN_CFG_PIPE2_MIXER1); | ||
153 | break; | ||
154 | case RGB2: | ||
155 | mixer_cfg = MDP4_LAYERMIXER_IN_CFG_PIPE3(stage) | | ||
156 | COND(mixer == 1, MDP4_LAYERMIXER_IN_CFG_PIPE3_MIXER1); | ||
157 | break; | ||
158 | case RGB3: | ||
159 | mixer_cfg = MDP4_LAYERMIXER_IN_CFG_PIPE4(stage) | | ||
160 | COND(mixer == 1, MDP4_LAYERMIXER_IN_CFG_PIPE4_MIXER1); | ||
161 | break; | ||
162 | case VG3: | ||
163 | mixer_cfg = MDP4_LAYERMIXER_IN_CFG_PIPE5(stage) | | ||
164 | COND(mixer == 1, MDP4_LAYERMIXER_IN_CFG_PIPE5_MIXER1); | ||
165 | break; | ||
166 | case VG4: | ||
167 | mixer_cfg = MDP4_LAYERMIXER_IN_CFG_PIPE6(stage) | | ||
168 | COND(mixer == 1, MDP4_LAYERMIXER_IN_CFG_PIPE6_MIXER1); | ||
169 | break; | ||
170 | default: | ||
171 | WARN_ON("invalid pipe"); | ||
172 | break; | ||
173 | } | ||
174 | |||
175 | return mixer_cfg; | ||
176 | } | ||
177 | |||
136 | int mdp4_disable(struct mdp4_kms *mdp4_kms); | 178 | int mdp4_disable(struct mdp4_kms *mdp4_kms); |
137 | int mdp4_enable(struct mdp4_kms *mdp4_kms); | 179 | int mdp4_enable(struct mdp4_kms *mdp4_kms); |
138 | 180 | ||
@@ -146,6 +188,8 @@ void mdp4_irq_unregister(struct mdp4_kms *mdp4_kms, struct mdp4_irq *irq); | |||
146 | int mdp4_enable_vblank(struct msm_kms *kms, struct drm_crtc *crtc); | 188 | int mdp4_enable_vblank(struct msm_kms *kms, struct drm_crtc *crtc); |
147 | void mdp4_disable_vblank(struct msm_kms *kms, struct drm_crtc *crtc); | 189 | void mdp4_disable_vblank(struct msm_kms *kms, struct drm_crtc *crtc); |
148 | 190 | ||
191 | uint32_t mdp4_get_formats(enum mdp4_pipe pipe_id, uint32_t *formats, | ||
192 | uint32_t max_formats); | ||
149 | const struct msm_format *mdp4_get_format(struct msm_kms *kms, uint32_t format); | 193 | const struct msm_format *mdp4_get_format(struct msm_kms *kms, uint32_t format); |
150 | 194 | ||
151 | void mdp4_plane_install_properties(struct drm_plane *plane, | 195 | void mdp4_plane_install_properties(struct drm_plane *plane, |
@@ -158,14 +202,16 @@ int mdp4_plane_mode_set(struct drm_plane *plane, | |||
158 | unsigned int crtc_w, unsigned int crtc_h, | 202 | unsigned int crtc_w, unsigned int crtc_h, |
159 | uint32_t src_x, uint32_t src_y, | 203 | uint32_t src_x, uint32_t src_y, |
160 | uint32_t src_w, uint32_t src_h); | 204 | uint32_t src_w, uint32_t src_h); |
161 | enum mpd4_pipe mdp4_plane_pipe(struct drm_plane *plane); | 205 | enum mdp4_pipe mdp4_plane_pipe(struct drm_plane *plane); |
162 | struct drm_plane *mdp4_plane_init(struct drm_device *dev, | 206 | struct drm_plane *mdp4_plane_init(struct drm_device *dev, |
163 | enum mpd4_pipe pipe_id, bool private_plane); | 207 | enum mdp4_pipe pipe_id, bool private_plane); |
164 | 208 | ||
165 | uint32_t mdp4_crtc_vblank(struct drm_crtc *crtc); | 209 | uint32_t mdp4_crtc_vblank(struct drm_crtc *crtc); |
166 | void mdp4_crtc_cancel_pending_flip(struct drm_crtc *crtc); | 210 | void mdp4_crtc_cancel_pending_flip(struct drm_crtc *crtc, struct drm_file *file); |
167 | void mdp4_crtc_set_config(struct drm_crtc *crtc, uint32_t config); | 211 | void mdp4_crtc_set_config(struct drm_crtc *crtc, uint32_t config); |
168 | void mdp4_crtc_set_intf(struct drm_crtc *crtc, enum mdp4_intf intf); | 212 | void mdp4_crtc_set_intf(struct drm_crtc *crtc, enum mdp4_intf intf); |
213 | void mdp4_crtc_attach(struct drm_crtc *crtc, struct drm_plane *plane); | ||
214 | void mdp4_crtc_detach(struct drm_crtc *crtc, struct drm_plane *plane); | ||
169 | struct drm_crtc *mdp4_crtc_init(struct drm_device *dev, | 215 | struct drm_crtc *mdp4_crtc_init(struct drm_device *dev, |
170 | struct drm_plane *plane, int id, int ovlp_id, | 216 | struct drm_plane *plane, int id, int ovlp_id, |
171 | enum mdp4_dma dma_id); | 217 | enum mdp4_dma dma_id); |
diff --git a/drivers/gpu/drm/msm/mdp4/mdp4_plane.c b/drivers/gpu/drm/msm/mdp4/mdp4_plane.c index 3468229d58b3..0f0af243f6fc 100644 --- a/drivers/gpu/drm/msm/mdp4/mdp4_plane.c +++ b/drivers/gpu/drm/msm/mdp4/mdp4_plane.c | |||
@@ -22,7 +22,7 @@ struct mdp4_plane { | |||
22 | struct drm_plane base; | 22 | struct drm_plane base; |
23 | const char *name; | 23 | const char *name; |
24 | 24 | ||
25 | enum mpd4_pipe pipe; | 25 | enum mdp4_pipe pipe; |
26 | 26 | ||
27 | uint32_t nformats; | 27 | uint32_t nformats; |
28 | uint32_t formats[32]; | 28 | uint32_t formats[32]; |
@@ -61,7 +61,9 @@ static int mdp4_plane_update(struct drm_plane *plane, | |||
61 | static int mdp4_plane_disable(struct drm_plane *plane) | 61 | static int mdp4_plane_disable(struct drm_plane *plane) |
62 | { | 62 | { |
63 | struct mdp4_plane *mdp4_plane = to_mdp4_plane(plane); | 63 | struct mdp4_plane *mdp4_plane = to_mdp4_plane(plane); |
64 | DBG("%s: TODO", mdp4_plane->name); // XXX | 64 | DBG("%s: disable", mdp4_plane->name); |
65 | if (plane->crtc) | ||
66 | mdp4_crtc_detach(plane->crtc, plane); | ||
65 | return 0; | 67 | return 0; |
66 | } | 68 | } |
67 | 69 | ||
@@ -101,7 +103,7 @@ void mdp4_plane_set_scanout(struct drm_plane *plane, | |||
101 | { | 103 | { |
102 | struct mdp4_plane *mdp4_plane = to_mdp4_plane(plane); | 104 | struct mdp4_plane *mdp4_plane = to_mdp4_plane(plane); |
103 | struct mdp4_kms *mdp4_kms = get_kms(plane); | 105 | struct mdp4_kms *mdp4_kms = get_kms(plane); |
104 | enum mpd4_pipe pipe = mdp4_plane->pipe; | 106 | enum mdp4_pipe pipe = mdp4_plane->pipe; |
105 | uint32_t iova; | 107 | uint32_t iova; |
106 | 108 | ||
107 | mdp4_write(mdp4_kms, REG_MDP4_PIPE_SRC_STRIDE_A(pipe), | 109 | mdp4_write(mdp4_kms, REG_MDP4_PIPE_SRC_STRIDE_A(pipe), |
@@ -129,7 +131,7 @@ int mdp4_plane_mode_set(struct drm_plane *plane, | |||
129 | { | 131 | { |
130 | struct mdp4_plane *mdp4_plane = to_mdp4_plane(plane); | 132 | struct mdp4_plane *mdp4_plane = to_mdp4_plane(plane); |
131 | struct mdp4_kms *mdp4_kms = get_kms(plane); | 133 | struct mdp4_kms *mdp4_kms = get_kms(plane); |
132 | enum mpd4_pipe pipe = mdp4_plane->pipe; | 134 | enum mdp4_pipe pipe = mdp4_plane->pipe; |
133 | const struct mdp4_format *format; | 135 | const struct mdp4_format *format; |
134 | uint32_t op_mode = 0; | 136 | uint32_t op_mode = 0; |
135 | uint32_t phasex_step = MDP4_VG_PHASE_STEP_DEFAULT; | 137 | uint32_t phasex_step = MDP4_VG_PHASE_STEP_DEFAULT; |
@@ -141,6 +143,10 @@ int mdp4_plane_mode_set(struct drm_plane *plane, | |||
141 | src_w = src_w >> 16; | 143 | src_w = src_w >> 16; |
142 | src_h = src_h >> 16; | 144 | src_h = src_h >> 16; |
143 | 145 | ||
146 | DBG("%s: FB[%u] %u,%u,%u,%u -> CRTC[%u] %d,%d,%u,%u", mdp4_plane->name, | ||
147 | fb->base.id, src_x, src_y, src_w, src_h, | ||
148 | crtc->base.id, crtc_x, crtc_y, crtc_w, crtc_h); | ||
149 | |||
144 | if (src_w != crtc_w) { | 150 | if (src_w != crtc_w) { |
145 | op_mode |= MDP4_PIPE_OP_MODE_SCALEX_EN; | 151 | op_mode |= MDP4_PIPE_OP_MODE_SCALEX_EN; |
146 | /* TODO calc phasex_step */ | 152 | /* TODO calc phasex_step */ |
@@ -191,7 +197,8 @@ int mdp4_plane_mode_set(struct drm_plane *plane, | |||
191 | mdp4_write(mdp4_kms, REG_MDP4_PIPE_PHASEX_STEP(pipe), phasex_step); | 197 | mdp4_write(mdp4_kms, REG_MDP4_PIPE_PHASEX_STEP(pipe), phasex_step); |
192 | mdp4_write(mdp4_kms, REG_MDP4_PIPE_PHASEY_STEP(pipe), phasey_step); | 198 | mdp4_write(mdp4_kms, REG_MDP4_PIPE_PHASEY_STEP(pipe), phasey_step); |
193 | 199 | ||
194 | plane->crtc = crtc; | 200 | /* TODO detach from old crtc (if we had more than one) */ |
201 | mdp4_crtc_attach(crtc, plane); | ||
195 | 202 | ||
196 | return 0; | 203 | return 0; |
197 | } | 204 | } |
@@ -202,7 +209,7 @@ static const char *pipe_names[] = { | |||
202 | "VG3", "VG4", | 209 | "VG3", "VG4", |
203 | }; | 210 | }; |
204 | 211 | ||
205 | enum mpd4_pipe mdp4_plane_pipe(struct drm_plane *plane) | 212 | enum mdp4_pipe mdp4_plane_pipe(struct drm_plane *plane) |
206 | { | 213 | { |
207 | struct mdp4_plane *mdp4_plane = to_mdp4_plane(plane); | 214 | struct mdp4_plane *mdp4_plane = to_mdp4_plane(plane); |
208 | return mdp4_plane->pipe; | 215 | return mdp4_plane->pipe; |
@@ -210,9 +217,8 @@ enum mpd4_pipe mdp4_plane_pipe(struct drm_plane *plane) | |||
210 | 217 | ||
211 | /* initialize plane */ | 218 | /* initialize plane */ |
212 | struct drm_plane *mdp4_plane_init(struct drm_device *dev, | 219 | struct drm_plane *mdp4_plane_init(struct drm_device *dev, |
213 | enum mpd4_pipe pipe_id, bool private_plane) | 220 | enum mdp4_pipe pipe_id, bool private_plane) |
214 | { | 221 | { |
215 | struct msm_drm_private *priv = dev->dev_private; | ||
216 | struct drm_plane *plane = NULL; | 222 | struct drm_plane *plane = NULL; |
217 | struct mdp4_plane *mdp4_plane; | 223 | struct mdp4_plane *mdp4_plane; |
218 | int ret; | 224 | int ret; |
@@ -228,8 +234,12 @@ struct drm_plane *mdp4_plane_init(struct drm_device *dev, | |||
228 | mdp4_plane->pipe = pipe_id; | 234 | mdp4_plane->pipe = pipe_id; |
229 | mdp4_plane->name = pipe_names[pipe_id]; | 235 | mdp4_plane->name = pipe_names[pipe_id]; |
230 | 236 | ||
231 | drm_plane_init(dev, plane, (1 << priv->num_crtcs) - 1, &mdp4_plane_funcs, | 237 | mdp4_plane->nformats = mdp4_get_formats(pipe_id, mdp4_plane->formats, |
232 | mdp4_plane->formats, mdp4_plane->nformats, private_plane); | 238 | ARRAY_SIZE(mdp4_plane->formats)); |
239 | |||
240 | drm_plane_init(dev, plane, 0xff, &mdp4_plane_funcs, | ||
241 | mdp4_plane->formats, mdp4_plane->nformats, | ||
242 | private_plane); | ||
233 | 243 | ||
234 | mdp4_plane_install_properties(plane, &plane->base); | 244 | mdp4_plane_install_properties(plane, &plane->base); |
235 | 245 | ||
diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c index b3a2f1629041..86537692e45c 100644 --- a/drivers/gpu/drm/msm/msm_drv.c +++ b/drivers/gpu/drm/msm/msm_drv.c | |||
@@ -187,6 +187,7 @@ static int msm_load(struct drm_device *dev, unsigned long flags) | |||
187 | init_waitqueue_head(&priv->fence_event); | 187 | init_waitqueue_head(&priv->fence_event); |
188 | 188 | ||
189 | INIT_LIST_HEAD(&priv->inactive_list); | 189 | INIT_LIST_HEAD(&priv->inactive_list); |
190 | INIT_LIST_HEAD(&priv->fence_cbs); | ||
190 | 191 | ||
191 | drm_mode_config_init(dev); | 192 | drm_mode_config_init(dev); |
192 | 193 | ||
@@ -539,15 +540,36 @@ int msm_wait_fence_interruptable(struct drm_device *dev, uint32_t fence, | |||
539 | return ret; | 540 | return ret; |
540 | } | 541 | } |
541 | 542 | ||
542 | /* call under struct_mutex */ | 543 | /* called from workqueue */ |
543 | void msm_update_fence(struct drm_device *dev, uint32_t fence) | 544 | void msm_update_fence(struct drm_device *dev, uint32_t fence) |
544 | { | 545 | { |
545 | struct msm_drm_private *priv = dev->dev_private; | 546 | struct msm_drm_private *priv = dev->dev_private; |
546 | 547 | ||
547 | if (fence > priv->completed_fence) { | 548 | mutex_lock(&dev->struct_mutex); |
548 | priv->completed_fence = fence; | 549 | priv->completed_fence = max(fence, priv->completed_fence); |
549 | wake_up_all(&priv->fence_event); | 550 | |
551 | while (!list_empty(&priv->fence_cbs)) { | ||
552 | struct msm_fence_cb *cb; | ||
553 | |||
554 | cb = list_first_entry(&priv->fence_cbs, | ||
555 | struct msm_fence_cb, work.entry); | ||
556 | |||
557 | if (cb->fence > priv->completed_fence) | ||
558 | break; | ||
559 | |||
560 | list_del_init(&cb->work.entry); | ||
561 | queue_work(priv->wq, &cb->work); | ||
550 | } | 562 | } |
563 | |||
564 | mutex_unlock(&dev->struct_mutex); | ||
565 | |||
566 | wake_up_all(&priv->fence_event); | ||
567 | } | ||
568 | |||
569 | void __msm_fence_worker(struct work_struct *work) | ||
570 | { | ||
571 | struct msm_fence_cb *cb = container_of(work, struct msm_fence_cb, work); | ||
572 | cb->func(cb); | ||
551 | } | 573 | } |
552 | 574 | ||
553 | /* | 575 | /* |
@@ -650,13 +672,13 @@ static int msm_ioctl_wait_fence(struct drm_device *dev, void *data, | |||
650 | } | 672 | } |
651 | 673 | ||
652 | static const struct drm_ioctl_desc msm_ioctls[] = { | 674 | static const struct drm_ioctl_desc msm_ioctls[] = { |
653 | DRM_IOCTL_DEF_DRV(MSM_GET_PARAM, msm_ioctl_get_param, DRM_UNLOCKED|DRM_AUTH), | 675 | DRM_IOCTL_DEF_DRV(MSM_GET_PARAM, msm_ioctl_get_param, DRM_UNLOCKED|DRM_AUTH|DRM_RENDER_ALLOW), |
654 | DRM_IOCTL_DEF_DRV(MSM_GEM_NEW, msm_ioctl_gem_new, DRM_UNLOCKED|DRM_AUTH), | 676 | DRM_IOCTL_DEF_DRV(MSM_GEM_NEW, msm_ioctl_gem_new, DRM_UNLOCKED|DRM_AUTH|DRM_RENDER_ALLOW), |
655 | DRM_IOCTL_DEF_DRV(MSM_GEM_INFO, msm_ioctl_gem_info, DRM_UNLOCKED|DRM_AUTH), | 677 | DRM_IOCTL_DEF_DRV(MSM_GEM_INFO, msm_ioctl_gem_info, DRM_UNLOCKED|DRM_AUTH|DRM_RENDER_ALLOW), |
656 | DRM_IOCTL_DEF_DRV(MSM_GEM_CPU_PREP, msm_ioctl_gem_cpu_prep, DRM_UNLOCKED|DRM_AUTH), | 678 | DRM_IOCTL_DEF_DRV(MSM_GEM_CPU_PREP, msm_ioctl_gem_cpu_prep, DRM_UNLOCKED|DRM_AUTH|DRM_RENDER_ALLOW), |
657 | DRM_IOCTL_DEF_DRV(MSM_GEM_CPU_FINI, msm_ioctl_gem_cpu_fini, DRM_UNLOCKED|DRM_AUTH), | 679 | DRM_IOCTL_DEF_DRV(MSM_GEM_CPU_FINI, msm_ioctl_gem_cpu_fini, DRM_UNLOCKED|DRM_AUTH|DRM_RENDER_ALLOW), |
658 | DRM_IOCTL_DEF_DRV(MSM_GEM_SUBMIT, msm_ioctl_gem_submit, DRM_UNLOCKED|DRM_AUTH), | 680 | DRM_IOCTL_DEF_DRV(MSM_GEM_SUBMIT, msm_ioctl_gem_submit, DRM_UNLOCKED|DRM_AUTH|DRM_RENDER_ALLOW), |
659 | DRM_IOCTL_DEF_DRV(MSM_WAIT_FENCE, msm_ioctl_wait_fence, DRM_UNLOCKED|DRM_AUTH), | 681 | DRM_IOCTL_DEF_DRV(MSM_WAIT_FENCE, msm_ioctl_wait_fence, DRM_UNLOCKED|DRM_AUTH|DRM_RENDER_ALLOW), |
660 | }; | 682 | }; |
661 | 683 | ||
662 | static const struct vm_operations_struct vm_ops = { | 684 | static const struct vm_operations_struct vm_ops = { |
@@ -680,7 +702,11 @@ static const struct file_operations fops = { | |||
680 | }; | 702 | }; |
681 | 703 | ||
682 | static struct drm_driver msm_driver = { | 704 | static struct drm_driver msm_driver = { |
683 | .driver_features = DRIVER_HAVE_IRQ | DRIVER_GEM | DRIVER_MODESET, | 705 | .driver_features = DRIVER_HAVE_IRQ | |
706 | DRIVER_GEM | | ||
707 | DRIVER_PRIME | | ||
708 | DRIVER_RENDER | | ||
709 | DRIVER_MODESET, | ||
684 | .load = msm_load, | 710 | .load = msm_load, |
685 | .unload = msm_unload, | 711 | .unload = msm_unload, |
686 | .open = msm_open, | 712 | .open = msm_open, |
@@ -698,6 +724,16 @@ static struct drm_driver msm_driver = { | |||
698 | .dumb_create = msm_gem_dumb_create, | 724 | .dumb_create = msm_gem_dumb_create, |
699 | .dumb_map_offset = msm_gem_dumb_map_offset, | 725 | .dumb_map_offset = msm_gem_dumb_map_offset, |
700 | .dumb_destroy = drm_gem_dumb_destroy, | 726 | .dumb_destroy = drm_gem_dumb_destroy, |
727 | .prime_handle_to_fd = drm_gem_prime_handle_to_fd, | ||
728 | .prime_fd_to_handle = drm_gem_prime_fd_to_handle, | ||
729 | .gem_prime_export = drm_gem_prime_export, | ||
730 | .gem_prime_import = drm_gem_prime_import, | ||
731 | .gem_prime_pin = msm_gem_prime_pin, | ||
732 | .gem_prime_unpin = msm_gem_prime_unpin, | ||
733 | .gem_prime_get_sg_table = msm_gem_prime_get_sg_table, | ||
734 | .gem_prime_import_sg_table = msm_gem_prime_import_sg_table, | ||
735 | .gem_prime_vmap = msm_gem_prime_vmap, | ||
736 | .gem_prime_vunmap = msm_gem_prime_vunmap, | ||
701 | #ifdef CONFIG_DEBUG_FS | 737 | #ifdef CONFIG_DEBUG_FS |
702 | .debugfs_init = msm_debugfs_init, | 738 | .debugfs_init = msm_debugfs_init, |
703 | .debugfs_cleanup = msm_debugfs_cleanup, | 739 | .debugfs_cleanup = msm_debugfs_cleanup, |
diff --git a/drivers/gpu/drm/msm/msm_drv.h b/drivers/gpu/drm/msm/msm_drv.h index df8f1d084bc1..d39f0862b19e 100644 --- a/drivers/gpu/drm/msm/msm_drv.h +++ b/drivers/gpu/drm/msm/msm_drv.h | |||
@@ -73,10 +73,16 @@ struct msm_drm_private { | |||
73 | 73 | ||
74 | struct workqueue_struct *wq; | 74 | struct workqueue_struct *wq; |
75 | 75 | ||
76 | /* callbacks deferred until bo is inactive: */ | ||
77 | struct list_head fence_cbs; | ||
78 | |||
76 | /* registered IOMMU domains: */ | 79 | /* registered IOMMU domains: */ |
77 | unsigned int num_iommus; | 80 | unsigned int num_iommus; |
78 | struct iommu_domain *iommus[NUM_DOMAINS]; | 81 | struct iommu_domain *iommus[NUM_DOMAINS]; |
79 | 82 | ||
83 | unsigned int num_planes; | ||
84 | struct drm_plane *planes[8]; | ||
85 | |||
80 | unsigned int num_crtcs; | 86 | unsigned int num_crtcs; |
81 | struct drm_crtc *crtcs[8]; | 87 | struct drm_crtc *crtcs[8]; |
82 | 88 | ||
@@ -94,6 +100,20 @@ struct msm_format { | |||
94 | uint32_t pixel_format; | 100 | uint32_t pixel_format; |
95 | }; | 101 | }; |
96 | 102 | ||
103 | /* callback from wq once fence has passed: */ | ||
104 | struct msm_fence_cb { | ||
105 | struct work_struct work; | ||
106 | uint32_t fence; | ||
107 | void (*func)(struct msm_fence_cb *cb); | ||
108 | }; | ||
109 | |||
110 | void __msm_fence_worker(struct work_struct *work); | ||
111 | |||
112 | #define INIT_FENCE_CB(_cb, _func) do { \ | ||
113 | INIT_WORK(&(_cb)->work, __msm_fence_worker); \ | ||
114 | (_cb)->func = _func; \ | ||
115 | } while (0) | ||
116 | |||
97 | /* As there are different display controller blocks depending on the | 117 | /* As there are different display controller blocks depending on the |
98 | * snapdragon version, the kms support is split out and the appropriate | 118 | * snapdragon version, the kms support is split out and the appropriate |
99 | * implementation is loaded at runtime. The kms module is responsible | 119 | * implementation is loaded at runtime. The kms module is responsible |
@@ -141,17 +161,24 @@ uint64_t msm_gem_mmap_offset(struct drm_gem_object *obj); | |||
141 | int msm_gem_get_iova_locked(struct drm_gem_object *obj, int id, | 161 | int msm_gem_get_iova_locked(struct drm_gem_object *obj, int id, |
142 | uint32_t *iova); | 162 | uint32_t *iova); |
143 | int msm_gem_get_iova(struct drm_gem_object *obj, int id, uint32_t *iova); | 163 | int msm_gem_get_iova(struct drm_gem_object *obj, int id, uint32_t *iova); |
164 | struct page **msm_gem_get_pages(struct drm_gem_object *obj); | ||
165 | void msm_gem_put_pages(struct drm_gem_object *obj); | ||
144 | void msm_gem_put_iova(struct drm_gem_object *obj, int id); | 166 | void msm_gem_put_iova(struct drm_gem_object *obj, int id); |
145 | int msm_gem_dumb_create(struct drm_file *file, struct drm_device *dev, | 167 | int msm_gem_dumb_create(struct drm_file *file, struct drm_device *dev, |
146 | struct drm_mode_create_dumb *args); | 168 | struct drm_mode_create_dumb *args); |
147 | int msm_gem_dumb_destroy(struct drm_file *file, struct drm_device *dev, | ||
148 | uint32_t handle); | ||
149 | int msm_gem_dumb_map_offset(struct drm_file *file, struct drm_device *dev, | 169 | int msm_gem_dumb_map_offset(struct drm_file *file, struct drm_device *dev, |
150 | uint32_t handle, uint64_t *offset); | 170 | uint32_t handle, uint64_t *offset); |
171 | struct sg_table *msm_gem_prime_get_sg_table(struct drm_gem_object *obj); | ||
172 | void *msm_gem_prime_vmap(struct drm_gem_object *obj); | ||
173 | void msm_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr); | ||
174 | struct drm_gem_object *msm_gem_prime_import_sg_table(struct drm_device *dev, | ||
175 | size_t size, struct sg_table *sg); | ||
176 | int msm_gem_prime_pin(struct drm_gem_object *obj); | ||
177 | void msm_gem_prime_unpin(struct drm_gem_object *obj); | ||
151 | void *msm_gem_vaddr_locked(struct drm_gem_object *obj); | 178 | void *msm_gem_vaddr_locked(struct drm_gem_object *obj); |
152 | void *msm_gem_vaddr(struct drm_gem_object *obj); | 179 | void *msm_gem_vaddr(struct drm_gem_object *obj); |
153 | int msm_gem_queue_inactive_work(struct drm_gem_object *obj, | 180 | int msm_gem_queue_inactive_cb(struct drm_gem_object *obj, |
154 | struct work_struct *work); | 181 | struct msm_fence_cb *cb); |
155 | void msm_gem_move_to_active(struct drm_gem_object *obj, | 182 | void msm_gem_move_to_active(struct drm_gem_object *obj, |
156 | struct msm_gpu *gpu, bool write, uint32_t fence); | 183 | struct msm_gpu *gpu, bool write, uint32_t fence); |
157 | void msm_gem_move_to_inactive(struct drm_gem_object *obj); | 184 | void msm_gem_move_to_inactive(struct drm_gem_object *obj); |
@@ -163,6 +190,8 @@ int msm_gem_new_handle(struct drm_device *dev, struct drm_file *file, | |||
163 | uint32_t size, uint32_t flags, uint32_t *handle); | 190 | uint32_t size, uint32_t flags, uint32_t *handle); |
164 | struct drm_gem_object *msm_gem_new(struct drm_device *dev, | 191 | struct drm_gem_object *msm_gem_new(struct drm_device *dev, |
165 | uint32_t size, uint32_t flags); | 192 | uint32_t size, uint32_t flags); |
193 | struct drm_gem_object *msm_gem_import(struct drm_device *dev, | ||
194 | uint32_t size, struct sg_table *sgt); | ||
166 | 195 | ||
167 | struct drm_gem_object *msm_framebuffer_bo(struct drm_framebuffer *fb, int plane); | 196 | struct drm_gem_object *msm_framebuffer_bo(struct drm_framebuffer *fb, int plane); |
168 | const struct msm_format *msm_framebuffer_format(struct drm_framebuffer *fb); | 197 | const struct msm_format *msm_framebuffer_format(struct drm_framebuffer *fb); |
diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c index 2bae46c66a30..e587d251c590 100644 --- a/drivers/gpu/drm/msm/msm_gem.c +++ b/drivers/gpu/drm/msm/msm_gem.c | |||
@@ -17,6 +17,7 @@ | |||
17 | 17 | ||
18 | #include <linux/spinlock.h> | 18 | #include <linux/spinlock.h> |
19 | #include <linux/shmem_fs.h> | 19 | #include <linux/shmem_fs.h> |
20 | #include <linux/dma-buf.h> | ||
20 | 21 | ||
21 | #include "msm_drv.h" | 22 | #include "msm_drv.h" |
22 | #include "msm_gem.h" | 23 | #include "msm_gem.h" |
@@ -77,6 +78,21 @@ static void put_pages(struct drm_gem_object *obj) | |||
77 | } | 78 | } |
78 | } | 79 | } |
79 | 80 | ||
81 | struct page **msm_gem_get_pages(struct drm_gem_object *obj) | ||
82 | { | ||
83 | struct drm_device *dev = obj->dev; | ||
84 | struct page **p; | ||
85 | mutex_lock(&dev->struct_mutex); | ||
86 | p = get_pages(obj); | ||
87 | mutex_unlock(&dev->struct_mutex); | ||
88 | return p; | ||
89 | } | ||
90 | |||
91 | void msm_gem_put_pages(struct drm_gem_object *obj) | ||
92 | { | ||
93 | /* when we start tracking the pin count, then do something here */ | ||
94 | } | ||
95 | |||
80 | int msm_gem_mmap_obj(struct drm_gem_object *obj, | 96 | int msm_gem_mmap_obj(struct drm_gem_object *obj, |
81 | struct vm_area_struct *vma) | 97 | struct vm_area_struct *vma) |
82 | { | 98 | { |
@@ -162,6 +178,11 @@ out: | |||
162 | case 0: | 178 | case 0: |
163 | case -ERESTARTSYS: | 179 | case -ERESTARTSYS: |
164 | case -EINTR: | 180 | case -EINTR: |
181 | case -EBUSY: | ||
182 | /* | ||
183 | * EBUSY is ok: this just means that another thread | ||
184 | * already did the job. | ||
185 | */ | ||
165 | return VM_FAULT_NOPAGE; | 186 | return VM_FAULT_NOPAGE; |
166 | case -ENOMEM: | 187 | case -ENOMEM: |
167 | return VM_FAULT_OOM; | 188 | return VM_FAULT_OOM; |
@@ -293,7 +314,17 @@ int msm_gem_get_iova_locked(struct drm_gem_object *obj, int id, | |||
293 | 314 | ||
294 | int msm_gem_get_iova(struct drm_gem_object *obj, int id, uint32_t *iova) | 315 | int msm_gem_get_iova(struct drm_gem_object *obj, int id, uint32_t *iova) |
295 | { | 316 | { |
317 | struct msm_gem_object *msm_obj = to_msm_bo(obj); | ||
296 | int ret; | 318 | int ret; |
319 | |||
320 | /* this is safe right now because we don't unmap until the | ||
321 | * bo is deleted: | ||
322 | */ | ||
323 | if (msm_obj->domain[id].iova) { | ||
324 | *iova = msm_obj->domain[id].iova; | ||
325 | return 0; | ||
326 | } | ||
327 | |||
297 | mutex_lock(&obj->dev->struct_mutex); | 328 | mutex_lock(&obj->dev->struct_mutex); |
298 | ret = msm_gem_get_iova_locked(obj, id, iova); | 329 | ret = msm_gem_get_iova_locked(obj, id, iova); |
299 | mutex_unlock(&obj->dev->struct_mutex); | 330 | mutex_unlock(&obj->dev->struct_mutex); |
@@ -363,8 +394,11 @@ void *msm_gem_vaddr(struct drm_gem_object *obj) | |||
363 | return ret; | 394 | return ret; |
364 | } | 395 | } |
365 | 396 | ||
366 | int msm_gem_queue_inactive_work(struct drm_gem_object *obj, | 397 | /* setup callback for when bo is no longer busy.. |
367 | struct work_struct *work) | 398 | * TODO probably want to differentiate read vs write.. |
399 | */ | ||
400 | int msm_gem_queue_inactive_cb(struct drm_gem_object *obj, | ||
401 | struct msm_fence_cb *cb) | ||
368 | { | 402 | { |
369 | struct drm_device *dev = obj->dev; | 403 | struct drm_device *dev = obj->dev; |
370 | struct msm_drm_private *priv = dev->dev_private; | 404 | struct msm_drm_private *priv = dev->dev_private; |
@@ -372,12 +406,13 @@ int msm_gem_queue_inactive_work(struct drm_gem_object *obj, | |||
372 | int ret = 0; | 406 | int ret = 0; |
373 | 407 | ||
374 | mutex_lock(&dev->struct_mutex); | 408 | mutex_lock(&dev->struct_mutex); |
375 | if (!list_empty(&work->entry)) { | 409 | if (!list_empty(&cb->work.entry)) { |
376 | ret = -EINVAL; | 410 | ret = -EINVAL; |
377 | } else if (is_active(msm_obj)) { | 411 | } else if (is_active(msm_obj)) { |
378 | list_add_tail(&work->entry, &msm_obj->inactive_work); | 412 | cb->fence = max(msm_obj->read_fence, msm_obj->write_fence); |
413 | list_add_tail(&cb->work.entry, &priv->fence_cbs); | ||
379 | } else { | 414 | } else { |
380 | queue_work(priv->wq, work); | 415 | queue_work(priv->wq, &cb->work); |
381 | } | 416 | } |
382 | mutex_unlock(&dev->struct_mutex); | 417 | mutex_unlock(&dev->struct_mutex); |
383 | 418 | ||
@@ -410,16 +445,6 @@ void msm_gem_move_to_inactive(struct drm_gem_object *obj) | |||
410 | msm_obj->write_fence = 0; | 445 | msm_obj->write_fence = 0; |
411 | list_del_init(&msm_obj->mm_list); | 446 | list_del_init(&msm_obj->mm_list); |
412 | list_add_tail(&msm_obj->mm_list, &priv->inactive_list); | 447 | list_add_tail(&msm_obj->mm_list, &priv->inactive_list); |
413 | |||
414 | while (!list_empty(&msm_obj->inactive_work)) { | ||
415 | struct work_struct *work; | ||
416 | |||
417 | work = list_first_entry(&msm_obj->inactive_work, | ||
418 | struct work_struct, entry); | ||
419 | |||
420 | list_del_init(&work->entry); | ||
421 | queue_work(priv->wq, work); | ||
422 | } | ||
423 | } | 448 | } |
424 | 449 | ||
425 | int msm_gem_cpu_prep(struct drm_gem_object *obj, uint32_t op, | 450 | int msm_gem_cpu_prep(struct drm_gem_object *obj, uint32_t op, |
@@ -510,10 +535,21 @@ void msm_gem_free_object(struct drm_gem_object *obj) | |||
510 | 535 | ||
511 | drm_gem_free_mmap_offset(obj); | 536 | drm_gem_free_mmap_offset(obj); |
512 | 537 | ||
513 | if (msm_obj->vaddr) | 538 | if (obj->import_attach) { |
514 | vunmap(msm_obj->vaddr); | 539 | if (msm_obj->vaddr) |
540 | dma_buf_vunmap(obj->import_attach->dmabuf, msm_obj->vaddr); | ||
515 | 541 | ||
516 | put_pages(obj); | 542 | /* Don't drop the pages for imported dmabuf, as they are not |
543 | * ours, just free the array we allocated: | ||
544 | */ | ||
545 | if (msm_obj->pages) | ||
546 | drm_free_large(msm_obj->pages); | ||
547 | |||
548 | } else { | ||
549 | if (msm_obj->vaddr) | ||
550 | vunmap(msm_obj->vaddr); | ||
551 | put_pages(obj); | ||
552 | } | ||
517 | 553 | ||
518 | if (msm_obj->resv == &msm_obj->_resv) | 554 | if (msm_obj->resv == &msm_obj->_resv) |
519 | reservation_object_fini(msm_obj->resv); | 555 | reservation_object_fini(msm_obj->resv); |
@@ -549,17 +585,12 @@ int msm_gem_new_handle(struct drm_device *dev, struct drm_file *file, | |||
549 | return ret; | 585 | return ret; |
550 | } | 586 | } |
551 | 587 | ||
552 | struct drm_gem_object *msm_gem_new(struct drm_device *dev, | 588 | static int msm_gem_new_impl(struct drm_device *dev, |
553 | uint32_t size, uint32_t flags) | 589 | uint32_t size, uint32_t flags, |
590 | struct drm_gem_object **obj) | ||
554 | { | 591 | { |
555 | struct msm_drm_private *priv = dev->dev_private; | 592 | struct msm_drm_private *priv = dev->dev_private; |
556 | struct msm_gem_object *msm_obj; | 593 | struct msm_gem_object *msm_obj; |
557 | struct drm_gem_object *obj = NULL; | ||
558 | int ret; | ||
559 | |||
560 | WARN_ON(!mutex_is_locked(&dev->struct_mutex)); | ||
561 | |||
562 | size = PAGE_ALIGN(size); | ||
563 | 594 | ||
564 | switch (flags & MSM_BO_CACHE_MASK) { | 595 | switch (flags & MSM_BO_CACHE_MASK) { |
565 | case MSM_BO_UNCACHED: | 596 | case MSM_BO_UNCACHED: |
@@ -569,21 +600,12 @@ struct drm_gem_object *msm_gem_new(struct drm_device *dev, | |||
569 | default: | 600 | default: |
570 | dev_err(dev->dev, "invalid cache flag: %x\n", | 601 | dev_err(dev->dev, "invalid cache flag: %x\n", |
571 | (flags & MSM_BO_CACHE_MASK)); | 602 | (flags & MSM_BO_CACHE_MASK)); |
572 | ret = -EINVAL; | 603 | return -EINVAL; |
573 | goto fail; | ||
574 | } | 604 | } |
575 | 605 | ||
576 | msm_obj = kzalloc(sizeof(*msm_obj), GFP_KERNEL); | 606 | msm_obj = kzalloc(sizeof(*msm_obj), GFP_KERNEL); |
577 | if (!msm_obj) { | 607 | if (!msm_obj) |
578 | ret = -ENOMEM; | 608 | return -ENOMEM; |
579 | goto fail; | ||
580 | } | ||
581 | |||
582 | obj = &msm_obj->base; | ||
583 | |||
584 | ret = drm_gem_object_init(dev, obj, size); | ||
585 | if (ret) | ||
586 | goto fail; | ||
587 | 609 | ||
588 | msm_obj->flags = flags; | 610 | msm_obj->flags = flags; |
589 | 611 | ||
@@ -591,9 +613,69 @@ struct drm_gem_object *msm_gem_new(struct drm_device *dev, | |||
591 | reservation_object_init(msm_obj->resv); | 613 | reservation_object_init(msm_obj->resv); |
592 | 614 | ||
593 | INIT_LIST_HEAD(&msm_obj->submit_entry); | 615 | INIT_LIST_HEAD(&msm_obj->submit_entry); |
594 | INIT_LIST_HEAD(&msm_obj->inactive_work); | ||
595 | list_add_tail(&msm_obj->mm_list, &priv->inactive_list); | 616 | list_add_tail(&msm_obj->mm_list, &priv->inactive_list); |
596 | 617 | ||
618 | *obj = &msm_obj->base; | ||
619 | |||
620 | return 0; | ||
621 | } | ||
622 | |||
623 | struct drm_gem_object *msm_gem_new(struct drm_device *dev, | ||
624 | uint32_t size, uint32_t flags) | ||
625 | { | ||
626 | struct drm_gem_object *obj; | ||
627 | int ret; | ||
628 | |||
629 | WARN_ON(!mutex_is_locked(&dev->struct_mutex)); | ||
630 | |||
631 | size = PAGE_ALIGN(size); | ||
632 | |||
633 | ret = msm_gem_new_impl(dev, size, flags, &obj); | ||
634 | if (ret) | ||
635 | goto fail; | ||
636 | |||
637 | ret = drm_gem_object_init(dev, obj, size); | ||
638 | if (ret) | ||
639 | goto fail; | ||
640 | |||
641 | return obj; | ||
642 | |||
643 | fail: | ||
644 | if (obj) | ||
645 | drm_gem_object_unreference_unlocked(obj); | ||
646 | |||
647 | return ERR_PTR(ret); | ||
648 | } | ||
649 | |||
650 | struct drm_gem_object *msm_gem_import(struct drm_device *dev, | ||
651 | uint32_t size, struct sg_table *sgt) | ||
652 | { | ||
653 | struct msm_gem_object *msm_obj; | ||
654 | struct drm_gem_object *obj; | ||
655 | int ret, npages; | ||
656 | |||
657 | size = PAGE_ALIGN(size); | ||
658 | |||
659 | ret = msm_gem_new_impl(dev, size, MSM_BO_WC, &obj); | ||
660 | if (ret) | ||
661 | goto fail; | ||
662 | |||
663 | drm_gem_private_object_init(dev, obj, size); | ||
664 | |||
665 | npages = size / PAGE_SIZE; | ||
666 | |||
667 | msm_obj = to_msm_bo(obj); | ||
668 | msm_obj->sgt = sgt; | ||
669 | msm_obj->pages = drm_malloc_ab(npages, sizeof(struct page *)); | ||
670 | if (!msm_obj->pages) { | ||
671 | ret = -ENOMEM; | ||
672 | goto fail; | ||
673 | } | ||
674 | |||
675 | ret = drm_prime_sg_to_page_addr_arrays(sgt, msm_obj->pages, NULL, npages); | ||
676 | if (ret) | ||
677 | goto fail; | ||
678 | |||
597 | return obj; | 679 | return obj; |
598 | 680 | ||
599 | fail: | 681 | fail: |
diff --git a/drivers/gpu/drm/msm/msm_gem.h b/drivers/gpu/drm/msm/msm_gem.h index 0676f32e2c6a..f4f23a578d9d 100644 --- a/drivers/gpu/drm/msm/msm_gem.h +++ b/drivers/gpu/drm/msm/msm_gem.h | |||
@@ -45,9 +45,6 @@ struct msm_gem_object { | |||
45 | */ | 45 | */ |
46 | struct list_head submit_entry; | 46 | struct list_head submit_entry; |
47 | 47 | ||
48 | /* work defered until bo is inactive: */ | ||
49 | struct list_head inactive_work; | ||
50 | |||
51 | struct page **pages; | 48 | struct page **pages; |
52 | struct sg_table *sgt; | 49 | struct sg_table *sgt; |
53 | void *vaddr; | 50 | void *vaddr; |
diff --git a/drivers/gpu/drm/msm/msm_gem_prime.c b/drivers/gpu/drm/msm/msm_gem_prime.c new file mode 100644 index 000000000000..d48f9fc5129b --- /dev/null +++ b/drivers/gpu/drm/msm/msm_gem_prime.c | |||
@@ -0,0 +1,56 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2013 Red Hat | ||
3 | * Author: Rob Clark <robdclark@gmail.com> | ||
4 | * | ||
5 | * This program is free software; you can redistribute it and/or modify it | ||
6 | * under the terms of the GNU General Public License version 2 as published by | ||
7 | * the Free Software Foundation. | ||
8 | * | ||
9 | * This program is distributed in the hope that it will be useful, but WITHOUT | ||
10 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
11 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
12 | * more details. | ||
13 | * | ||
14 | * You should have received a copy of the GNU General Public License along with | ||
15 | * this program. If not, see <http://www.gnu.org/licenses/>. | ||
16 | */ | ||
17 | |||
18 | #include "msm_drv.h" | ||
19 | #include "msm_gem.h" | ||
20 | |||
21 | |||
22 | struct sg_table *msm_gem_prime_get_sg_table(struct drm_gem_object *obj) | ||
23 | { | ||
24 | struct msm_gem_object *msm_obj = to_msm_bo(obj); | ||
25 | BUG_ON(!msm_obj->sgt); /* should have already pinned! */ | ||
26 | return msm_obj->sgt; | ||
27 | } | ||
28 | |||
29 | void *msm_gem_prime_vmap(struct drm_gem_object *obj) | ||
30 | { | ||
31 | return msm_gem_vaddr(obj); | ||
32 | } | ||
33 | |||
34 | void msm_gem_prime_vunmap(struct drm_gem_object *obj, void *vaddr) | ||
35 | { | ||
36 | /* TODO msm_gem_vunmap() */ | ||
37 | } | ||
38 | |||
39 | struct drm_gem_object *msm_gem_prime_import_sg_table(struct drm_device *dev, | ||
40 | size_t size, struct sg_table *sg) | ||
41 | { | ||
42 | return msm_gem_import(dev, size, sg); | ||
43 | } | ||
44 | |||
45 | int msm_gem_prime_pin(struct drm_gem_object *obj) | ||
46 | { | ||
47 | if (!obj->import_attach) | ||
48 | msm_gem_get_pages(obj); | ||
49 | return 0; | ||
50 | } | ||
51 | |||
52 | void msm_gem_prime_unpin(struct drm_gem_object *obj) | ||
53 | { | ||
54 | if (!obj->import_attach) | ||
55 | msm_gem_put_pages(obj); | ||
56 | } | ||
diff --git a/drivers/gpu/drm/msm/msm_gpu.c b/drivers/gpu/drm/msm/msm_gpu.c index 3bab937965d1..4583d61556f5 100644 --- a/drivers/gpu/drm/msm/msm_gpu.c +++ b/drivers/gpu/drm/msm/msm_gpu.c | |||
@@ -268,6 +268,8 @@ static void retire_worker(struct work_struct *work) | |||
268 | struct drm_device *dev = gpu->dev; | 268 | struct drm_device *dev = gpu->dev; |
269 | uint32_t fence = gpu->funcs->last_fence(gpu); | 269 | uint32_t fence = gpu->funcs->last_fence(gpu); |
270 | 270 | ||
271 | msm_update_fence(gpu->dev, fence); | ||
272 | |||
271 | mutex_lock(&dev->struct_mutex); | 273 | mutex_lock(&dev->struct_mutex); |
272 | 274 | ||
273 | while (!list_empty(&gpu->active_list)) { | 275 | while (!list_empty(&gpu->active_list)) { |
@@ -287,8 +289,6 @@ static void retire_worker(struct work_struct *work) | |||
287 | } | 289 | } |
288 | } | 290 | } |
289 | 291 | ||
290 | msm_update_fence(gpu->dev, fence); | ||
291 | |||
292 | mutex_unlock(&dev->struct_mutex); | 292 | mutex_unlock(&dev->struct_mutex); |
293 | } | 293 | } |
294 | 294 | ||