aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2014-08-04 19:22:27 -0400
committerDave Airlie <airlied@redhat.com>2014-08-04 19:22:27 -0400
commiteceb55a0ecd584ac5bebf667ffd8e859f261d0c0 (patch)
tree6b990d26748e5fc85308c563bc8ec736d9042f72
parent5d42f82a9b8c5168d75cf59307cd271feca94464 (diff)
parenta2fe6cdc03d7a9b0d048a7f32f9d8827e06c67fa (diff)
Merge branch 'msm-next' of git://people.freedesktop.org/~robclark/linux into drm-next
This time around we have a mix of new hw enablement (mdp5 v1.3 / apq8084), plus devicetree and various upstream changes (mostly adapting to CCF vs downstream clk driver differences) for mdp4 / apq8064. With these drm/msm patches plus a few other small patchsets (from linaro qcom integration branch.. mostly stuff queued up for 3.17) we have the inforce ifc6410 board working, with gpu. Much nicer to work with than ancient vendor android branch :-) * 'msm-next' of git://people.freedesktop.org/~robclark/linux: drm/msm/hdmi: fix HDMI_MUX_EN gpio request typo drm/msm/hdmi: enable lpm-mux if it is present drm/msm/mdp5: add support for MDP5 v1.3 drm/msm: fix potential deadlock in gpu init drm/msm: use upstream iommu drm/msm: no mmu is only error if not using vram carveout drm/msm: fix BUG_ON() in error cleanup path drm/msm/mdp4: add mdp axi clk drm/msm: hdmi phy 8960 phy pll drm/msm: update generated headers drm/msm: DT support for 8960/8064 (v3) drm/msm: Implement msm drm fb_mmap callback function drm/msm: activate iommu support drm/msm: fix double struct_mutex acquire
-rw-r--r--Documentation/devicetree/bindings/drm/msm/gpu.txt52
-rw-r--r--Documentation/devicetree/bindings/drm/msm/hdmi.txt46
-rw-r--r--Documentation/devicetree/bindings/drm/msm/mdp.txt48
-rw-r--r--drivers/gpu/drm/msm/Kconfig1
-rw-r--r--drivers/gpu/drm/msm/adreno/a2xx.xml.h58
-rw-r--r--drivers/gpu/drm/msm/adreno/a3xx.xml.h296
-rw-r--r--drivers/gpu/drm/msm/adreno/a3xx_gpu.c7
-rw-r--r--drivers/gpu/drm/msm/adreno/a3xx_gpu.h5
-rw-r--r--drivers/gpu/drm/msm/adreno/adreno_common.xml.h56
-rw-r--r--drivers/gpu/drm/msm/adreno/adreno_gpu.c14
-rw-r--r--drivers/gpu/drm/msm/adreno/adreno_pm4.xml.h239
-rw-r--r--drivers/gpu/drm/msm/dsi/dsi.xml.h4
-rw-r--r--drivers/gpu/drm/msm/dsi/mmss_cc.xml.h4
-rw-r--r--drivers/gpu/drm/msm/dsi/sfpb.xml.h4
-rw-r--r--drivers/gpu/drm/msm/hdmi/hdmi.c69
-rw-r--r--drivers/gpu/drm/msm/hdmi/hdmi.h1
-rw-r--r--drivers/gpu/drm/msm/hdmi/hdmi.xml.h109
-rw-r--r--drivers/gpu/drm/msm/hdmi/hdmi_connector.c23
-rw-r--r--drivers/gpu/drm/msm/hdmi/hdmi_phy_8960.c377
-rw-r--r--drivers/gpu/drm/msm/hdmi/qfprom.xml.h4
-rw-r--r--drivers/gpu/drm/msm/mdp/mdp4/mdp4.xml.h4
-rw-r--r--drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c25
-rw-r--r--drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.h1
-rw-r--r--drivers/gpu/drm/msm/mdp/mdp5/mdp5.xml.h431
-rw-r--r--drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c159
-rw-r--r--drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h25
-rw-r--r--drivers/gpu/drm/msm/mdp/mdp_common.xml.h4
-rw-r--r--drivers/gpu/drm/msm/msm_drv.c52
-rw-r--r--drivers/gpu/drm/msm/msm_fbdev.c45
-rw-r--r--drivers/gpu/drm/msm/msm_gem.c15
-rw-r--r--drivers/gpu/drm/msm/msm_gpu.c12
-rw-r--r--drivers/gpu/drm/msm/msm_iommu.c31
-rw-r--r--drivers/gpu/drm/msm/msm_mmu.h8
33 files changed, 1837 insertions, 392 deletions
diff --git a/Documentation/devicetree/bindings/drm/msm/gpu.txt b/Documentation/devicetree/bindings/drm/msm/gpu.txt
new file mode 100644
index 000000000000..67d0a58dbb77
--- /dev/null
+++ b/Documentation/devicetree/bindings/drm/msm/gpu.txt
@@ -0,0 +1,52 @@
1Qualcomm adreno/snapdragon GPU
2
3Required properties:
4- compatible: "qcom,adreno-3xx"
5- reg: Physical base address and length of the controller's registers.
6- interrupts: The interrupt signal from the gpu.
7- clocks: device clocks
8 See ../clocks/clock-bindings.txt for details.
9- clock-names: the following clocks are required:
10 * "core_clk"
11 * "iface_clk"
12 * "mem_iface_clk"
13- qcom,chipid: gpu chip-id. Note this may become optional for future
14 devices if we can reliably read the chipid from hw
15- qcom,gpu-pwrlevels: list of operating points
16 - compatible: "qcom,gpu-pwrlevels"
17 - for each qcom,gpu-pwrlevel:
18 - qcom,gpu-freq: requested gpu clock speed
19 - NOTE: downstream android driver defines additional parameters to
20 configure memory bandwidth scaling per OPP.
21
22Example:
23
24/ {
25 ...
26
27 gpu: qcom,kgsl-3d0@4300000 {
28 compatible = "qcom,adreno-3xx";
29 reg = <0x04300000 0x20000>;
30 reg-names = "kgsl_3d0_reg_memory";
31 interrupts = <GIC_SPI 80 0>;
32 interrupt-names = "kgsl_3d0_irq";
33 clock-names =
34 "core_clk",
35 "iface_clk",
36 "mem_iface_clk";
37 clocks =
38 <&mmcc GFX3D_CLK>,
39 <&mmcc GFX3D_AHB_CLK>,
40 <&mmcc MMSS_IMEM_AHB_CLK>;
41 qcom,chipid = <0x03020100>;
42 qcom,gpu-pwrlevels {
43 compatible = "qcom,gpu-pwrlevels";
44 qcom,gpu-pwrlevel@0 {
45 qcom,gpu-freq = <450000000>;
46 };
47 qcom,gpu-pwrlevel@1 {
48 qcom,gpu-freq = <27000000>;
49 };
50 };
51 };
52};
diff --git a/Documentation/devicetree/bindings/drm/msm/hdmi.txt b/Documentation/devicetree/bindings/drm/msm/hdmi.txt
new file mode 100644
index 000000000000..aca917fe2ba7
--- /dev/null
+++ b/Documentation/devicetree/bindings/drm/msm/hdmi.txt
@@ -0,0 +1,46 @@
1Qualcomm adreno/snapdragon hdmi output
2
3Required properties:
4- compatible: one of the following
5 * "qcom,hdmi-tx-8660"
6 * "qcom,hdmi-tx-8960"
7- reg: Physical base address and length of the controller's registers
8- reg-names: "core_physical"
9- interrupts: The interrupt signal from the hdmi block.
10- clocks: device clocks
11 See ../clocks/clock-bindings.txt for details.
12- qcom,hdmi-tx-ddc-clk-gpio: ddc clk pin
13- qcom,hdmi-tx-ddc-data-gpio: ddc data pin
14- qcom,hdmi-tx-hpd-gpio: hpd pin
15- core-vdda-supply: phandle to supply regulator
16- hdmi-mux-supply: phandle to mux regulator
17
18Optional properties:
19- qcom,hdmi-tx-mux-en-gpio: hdmi mux enable pin
20- qcom,hdmi-tx-mux-sel-gpio: hdmi mux select pin
21
22Example:
23
24/ {
25 ...
26
27 hdmi: qcom,hdmi-tx-8960@4a00000 {
28 compatible = "qcom,hdmi-tx-8960";
29 reg-names = "core_physical";
30 reg = <0x04a00000 0x1000>;
31 interrupts = <GIC_SPI 79 0>;
32 clock-names =
33 "core_clk",
34 "master_iface_clk",
35 "slave_iface_clk";
36 clocks =
37 <&mmcc HDMI_APP_CLK>,
38 <&mmcc HDMI_M_AHB_CLK>,
39 <&mmcc HDMI_S_AHB_CLK>;
40 qcom,hdmi-tx-ddc-clk = <&msmgpio 70 GPIO_ACTIVE_HIGH>;
41 qcom,hdmi-tx-ddc-data = <&msmgpio 71 GPIO_ACTIVE_HIGH>;
42 qcom,hdmi-tx-hpd = <&msmgpio 72 GPIO_ACTIVE_HIGH>;
43 core-vdda-supply = <&pm8921_hdmi_mvs>;
44 hdmi-mux-supply = <&ext_3p3v>;
45 };
46};
diff --git a/Documentation/devicetree/bindings/drm/msm/mdp.txt b/Documentation/devicetree/bindings/drm/msm/mdp.txt
new file mode 100644
index 000000000000..1a0598e5279d
--- /dev/null
+++ b/Documentation/devicetree/bindings/drm/msm/mdp.txt
@@ -0,0 +1,48 @@
1Qualcomm adreno/snapdragon display controller
2
3Required properties:
4- compatible:
5 * "qcom,mdp" - mdp4
6- reg: Physical base address and length of the controller's registers.
7- interrupts: The interrupt signal from the display controller.
8- connectors: array of phandles for output device(s)
9- clocks: device clocks
10 See ../clocks/clock-bindings.txt for details.
11- clock-names: the following clocks are required:
12 * "core_clk"
13 * "iface_clk"
14 * "lut_clk"
15 * "src_clk"
16 * "hdmi_clk"
17 * "mpd_clk"
18
19Optional properties:
20- gpus: phandle for gpu device
21
22Example:
23
24/ {
25 ...
26
27 mdp: qcom,mdp@5100000 {
28 compatible = "qcom,mdp";
29 reg = <0x05100000 0xf0000>;
30 interrupts = <GIC_SPI 75 0>;
31 connectors = <&hdmi>;
32 gpus = <&gpu>;
33 clock-names =
34 "core_clk",
35 "iface_clk",
36 "lut_clk",
37 "src_clk",
38 "hdmi_clk",
39 "mdp_clk";
40 clocks =
41 <&mmcc MDP_SRC>,
42 <&mmcc MDP_AHB_CLK>,
43 <&mmcc MDP_LUT_CLK>,
44 <&mmcc TV_SRC>,
45 <&mmcc HDMI_TV_CLK>,
46 <&mmcc MDP_TV_CLK>;
47 };
48};
diff --git a/drivers/gpu/drm/msm/Kconfig b/drivers/gpu/drm/msm/Kconfig
index f12388967856..c99c50de3226 100644
--- a/drivers/gpu/drm/msm/Kconfig
+++ b/drivers/gpu/drm/msm/Kconfig
@@ -2,7 +2,6 @@
2config DRM_MSM 2config DRM_MSM
3 tristate "MSM DRM" 3 tristate "MSM DRM"
4 depends on DRM 4 depends on DRM
5 depends on MSM_IOMMU
6 depends on ARCH_QCOM || (ARM && COMPILE_TEST) 5 depends on ARCH_QCOM || (ARM && COMPILE_TEST)
7 select DRM_KMS_HELPER 6 select DRM_KMS_HELPER
8 select SHMEM 7 select SHMEM
diff --git a/drivers/gpu/drm/msm/adreno/a2xx.xml.h b/drivers/gpu/drm/msm/adreno/a2xx.xml.h
index 85d615e7d62f..a8a144b38eaa 100644
--- a/drivers/gpu/drm/msm/adreno/a2xx.xml.h
+++ b/drivers/gpu/drm/msm/adreno/a2xx.xml.h
@@ -10,13 +10,13 @@ git clone https://github.com/freedreno/envytools.git
10The rules-ng-ng source files this header was generated from are: 10The rules-ng-ng source files this header was generated from are:
11- /home/robclark/src/freedreno/envytools/rnndb/adreno.xml ( 364 bytes, from 2013-11-30 14:47:15) 11- /home/robclark/src/freedreno/envytools/rnndb/adreno.xml ( 364 bytes, from 2013-11-30 14:47:15)
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/adreno/a2xx.xml ( 32814 bytes, from 2013-11-30 15:07:33) 13- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 32901 bytes, from 2014-06-02 15:21:30)
14- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 8900 bytes, from 2013-10-22 23:57:49) 14- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 9859 bytes, from 2014-06-02 15:21:30)
15- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 10574 bytes, from 2013-11-13 05:44:45) 15- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 14477 bytes, from 2014-05-16 11:51:57)
16- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 53644 bytes, from 2013-11-30 15:07:33) 16- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 58020 bytes, from 2014-06-25 12:57:16)
17- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 8344 bytes, from 2013-11-30 14:49:47) 17- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 26602 bytes, from 2014-06-25 12:57:16)
18 18
19Copyright (C) 2013 by the following authors: 19Copyright (C) 2013-2014 by the following authors:
20- Rob Clark <robdclark@gmail.com> (robclark) 20- Rob Clark <robdclark@gmail.com> (robclark)
21 21
22Permission is hereby granted, free of charge, to any person obtaining 22Permission is hereby granted, free of charge, to any person obtaining
@@ -203,6 +203,15 @@ enum a2xx_rb_copy_sample_select {
203 SAMPLE_0123 = 6, 203 SAMPLE_0123 = 6,
204}; 204};
205 205
206enum a2xx_rb_blend_opcode {
207 BLEND_DST_PLUS_SRC = 0,
208 BLEND_SRC_MINUS_DST = 1,
209 BLEND_MIN_DST_SRC = 2,
210 BLEND_MAX_DST_SRC = 3,
211 BLEND_DST_MINUS_SRC = 4,
212 BLEND_DST_PLUS_SRC_BIAS = 5,
213};
214
206enum adreno_mmu_clnt_beh { 215enum adreno_mmu_clnt_beh {
207 BEH_NEVR = 0, 216 BEH_NEVR = 0,
208 BEH_TRAN_RNG = 1, 217 BEH_TRAN_RNG = 1,
@@ -890,6 +899,39 @@ static inline uint32_t A2XX_SQ_CONTEXT_MISC_PARAM_GEN_POS(uint32_t val)
890#define REG_A2XX_VGT_EVENT_INITIATOR 0x000021f9 899#define REG_A2XX_VGT_EVENT_INITIATOR 0x000021f9
891 900
892#define REG_A2XX_VGT_DRAW_INITIATOR 0x000021fc 901#define REG_A2XX_VGT_DRAW_INITIATOR 0x000021fc
902#define A2XX_VGT_DRAW_INITIATOR_PRIM_TYPE__MASK 0x0000003f
903#define A2XX_VGT_DRAW_INITIATOR_PRIM_TYPE__SHIFT 0
904static inline uint32_t A2XX_VGT_DRAW_INITIATOR_PRIM_TYPE(enum pc_di_primtype val)
905{
906 return ((val) << A2XX_VGT_DRAW_INITIATOR_PRIM_TYPE__SHIFT) & A2XX_VGT_DRAW_INITIATOR_PRIM_TYPE__MASK;
907}
908#define A2XX_VGT_DRAW_INITIATOR_SOURCE_SELECT__MASK 0x000000c0
909#define A2XX_VGT_DRAW_INITIATOR_SOURCE_SELECT__SHIFT 6
910static inline uint32_t A2XX_VGT_DRAW_INITIATOR_SOURCE_SELECT(enum pc_di_src_sel val)
911{
912 return ((val) << A2XX_VGT_DRAW_INITIATOR_SOURCE_SELECT__SHIFT) & A2XX_VGT_DRAW_INITIATOR_SOURCE_SELECT__MASK;
913}
914#define A2XX_VGT_DRAW_INITIATOR_VIS_CULL__MASK 0x00000600
915#define A2XX_VGT_DRAW_INITIATOR_VIS_CULL__SHIFT 9
916static inline uint32_t A2XX_VGT_DRAW_INITIATOR_VIS_CULL(enum pc_di_vis_cull_mode val)
917{
918 return ((val) << A2XX_VGT_DRAW_INITIATOR_VIS_CULL__SHIFT) & A2XX_VGT_DRAW_INITIATOR_VIS_CULL__MASK;
919}
920#define A2XX_VGT_DRAW_INITIATOR_INDEX_SIZE__MASK 0x00000800
921#define A2XX_VGT_DRAW_INITIATOR_INDEX_SIZE__SHIFT 11
922static inline uint32_t A2XX_VGT_DRAW_INITIATOR_INDEX_SIZE(enum pc_di_index_size val)
923{
924 return ((val) << A2XX_VGT_DRAW_INITIATOR_INDEX_SIZE__SHIFT) & A2XX_VGT_DRAW_INITIATOR_INDEX_SIZE__MASK;
925}
926#define A2XX_VGT_DRAW_INITIATOR_NOT_EOP 0x00001000
927#define A2XX_VGT_DRAW_INITIATOR_SMALL_INDEX 0x00002000
928#define A2XX_VGT_DRAW_INITIATOR_PRE_DRAW_INITIATOR_ENABLE 0x00004000
929#define A2XX_VGT_DRAW_INITIATOR_NUM_INDICES__MASK 0xffff0000
930#define A2XX_VGT_DRAW_INITIATOR_NUM_INDICES__SHIFT 16
931static inline uint32_t A2XX_VGT_DRAW_INITIATOR_NUM_INDICES(uint32_t val)
932{
933 return ((val) << A2XX_VGT_DRAW_INITIATOR_NUM_INDICES__SHIFT) & A2XX_VGT_DRAW_INITIATOR_NUM_INDICES__MASK;
934}
893 935
894#define REG_A2XX_VGT_IMMED_DATA 0x000021fd 936#define REG_A2XX_VGT_IMMED_DATA 0x000021fd
895 937
@@ -963,7 +1005,7 @@ static inline uint32_t A2XX_RB_BLEND_CONTROL_COLOR_SRCBLEND(enum adreno_rb_blend
963} 1005}
964#define A2XX_RB_BLEND_CONTROL_COLOR_COMB_FCN__MASK 0x000000e0 1006#define A2XX_RB_BLEND_CONTROL_COLOR_COMB_FCN__MASK 0x000000e0
965#define A2XX_RB_BLEND_CONTROL_COLOR_COMB_FCN__SHIFT 5 1007#define A2XX_RB_BLEND_CONTROL_COLOR_COMB_FCN__SHIFT 5
966static inline uint32_t A2XX_RB_BLEND_CONTROL_COLOR_COMB_FCN(enum adreno_rb_blend_opcode val) 1008static inline uint32_t A2XX_RB_BLEND_CONTROL_COLOR_COMB_FCN(enum a2xx_rb_blend_opcode val)
967{ 1009{
968 return ((val) << A2XX_RB_BLEND_CONTROL_COLOR_COMB_FCN__SHIFT) & A2XX_RB_BLEND_CONTROL_COLOR_COMB_FCN__MASK; 1010 return ((val) << A2XX_RB_BLEND_CONTROL_COLOR_COMB_FCN__SHIFT) & A2XX_RB_BLEND_CONTROL_COLOR_COMB_FCN__MASK;
969} 1011}
@@ -981,7 +1023,7 @@ static inline uint32_t A2XX_RB_BLEND_CONTROL_ALPHA_SRCBLEND(enum adreno_rb_blend
981} 1023}
982#define A2XX_RB_BLEND_CONTROL_ALPHA_COMB_FCN__MASK 0x00e00000 1024#define A2XX_RB_BLEND_CONTROL_ALPHA_COMB_FCN__MASK 0x00e00000
983#define A2XX_RB_BLEND_CONTROL_ALPHA_COMB_FCN__SHIFT 21 1025#define A2XX_RB_BLEND_CONTROL_ALPHA_COMB_FCN__SHIFT 21
984static inline uint32_t A2XX_RB_BLEND_CONTROL_ALPHA_COMB_FCN(enum adreno_rb_blend_opcode val) 1026static inline uint32_t A2XX_RB_BLEND_CONTROL_ALPHA_COMB_FCN(enum a2xx_rb_blend_opcode val)
985{ 1027{
986 return ((val) << A2XX_RB_BLEND_CONTROL_ALPHA_COMB_FCN__SHIFT) & A2XX_RB_BLEND_CONTROL_ALPHA_COMB_FCN__MASK; 1028 return ((val) << A2XX_RB_BLEND_CONTROL_ALPHA_COMB_FCN__SHIFT) & A2XX_RB_BLEND_CONTROL_ALPHA_COMB_FCN__MASK;
987} 1029}
diff --git a/drivers/gpu/drm/msm/adreno/a3xx.xml.h b/drivers/gpu/drm/msm/adreno/a3xx.xml.h
index a7be56163d23..303e8a9e91a5 100644
--- a/drivers/gpu/drm/msm/adreno/a3xx.xml.h
+++ b/drivers/gpu/drm/msm/adreno/a3xx.xml.h
@@ -10,13 +10,13 @@ git clone https://github.com/freedreno/envytools.git
10The rules-ng-ng source files this header was generated from are: 10The rules-ng-ng source files this header was generated from are:
11- /home/robclark/src/freedreno/envytools/rnndb/adreno.xml ( 364 bytes, from 2013-11-30 14:47:15) 11- /home/robclark/src/freedreno/envytools/rnndb/adreno.xml ( 364 bytes, from 2013-11-30 14:47:15)
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/adreno/a2xx.xml ( 32814 bytes, from 2013-11-30 15:07:33) 13- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 32901 bytes, from 2014-06-02 15:21:30)
14- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 8900 bytes, from 2013-10-22 23:57:49) 14- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 9859 bytes, from 2014-06-02 15:21:30)
15- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 10574 bytes, from 2013-11-13 05:44:45) 15- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 14477 bytes, from 2014-05-16 11:51:57)
16- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 53644 bytes, from 2013-11-30 15:07:33) 16- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 58020 bytes, from 2014-06-25 12:57:16)
17- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 8344 bytes, from 2013-11-30 14:49:47) 17- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 26602 bytes, from 2014-06-25 12:57:16)
18 18
19Copyright (C) 2013 by the following authors: 19Copyright (C) 2013-2014 by the following authors:
20- Rob Clark <robdclark@gmail.com> (robclark) 20- Rob Clark <robdclark@gmail.com> (robclark)
21 21
22Permission is hereby granted, free of charge, to any person obtaining 22Permission is hereby granted, free of charge, to any person obtaining
@@ -41,31 +41,11 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
41*/ 41*/
42 42
43 43
44enum a3xx_render_mode {
45 RB_RENDERING_PASS = 0,
46 RB_TILING_PASS = 1,
47 RB_RESOLVE_PASS = 2,
48};
49
50enum a3xx_tile_mode { 44enum a3xx_tile_mode {
51 LINEAR = 0, 45 LINEAR = 0,
52 TILE_32X32 = 2, 46 TILE_32X32 = 2,
53}; 47};
54 48
55enum a3xx_threadmode {
56 MULTI = 0,
57 SINGLE = 1,
58};
59
60enum a3xx_instrbuffermode {
61 BUFFER = 1,
62};
63
64enum a3xx_threadsize {
65 TWO_QUADS = 0,
66 FOUR_QUADS = 1,
67};
68
69enum a3xx_state_block_id { 49enum a3xx_state_block_id {
70 HLSQ_BLOCK_ID_TP_TEX = 2, 50 HLSQ_BLOCK_ID_TP_TEX = 2,
71 HLSQ_BLOCK_ID_TP_MIPMAP = 3, 51 HLSQ_BLOCK_ID_TP_MIPMAP = 3,
@@ -169,6 +149,8 @@ enum a3xx_color_fmt {
169 RB_R8G8B8A8_UNORM = 8, 149 RB_R8G8B8A8_UNORM = 8,
170 RB_Z16_UNORM = 12, 150 RB_Z16_UNORM = 12,
171 RB_A8_UNORM = 20, 151 RB_A8_UNORM = 20,
152 RB_R16G16B16A16_FLOAT = 27,
153 RB_R32G32B32A32_FLOAT = 51,
172}; 154};
173 155
174enum a3xx_color_swap { 156enum a3xx_color_swap {
@@ -178,12 +160,6 @@ enum a3xx_color_swap {
178 XYZW = 3, 160 XYZW = 3,
179}; 161};
180 162
181enum a3xx_msaa_samples {
182 MSAA_ONE = 0,
183 MSAA_TWO = 1,
184 MSAA_FOUR = 2,
185};
186
187enum a3xx_sp_perfcounter_select { 163enum a3xx_sp_perfcounter_select {
188 SP_FS_CFLOW_INSTRUCTIONS = 12, 164 SP_FS_CFLOW_INSTRUCTIONS = 12,
189 SP_FS_FULL_ALU_INSTRUCTIONS = 14, 165 SP_FS_FULL_ALU_INSTRUCTIONS = 14,
@@ -191,21 +167,45 @@ enum a3xx_sp_perfcounter_select {
191 SP_ALU_ACTIVE_CYCLES = 29, 167 SP_ALU_ACTIVE_CYCLES = 29,
192}; 168};
193 169
194enum adreno_rb_copy_control_mode { 170enum a3xx_rop_code {
195 RB_COPY_RESOLVE = 1, 171 ROP_CLEAR = 0,
196 RB_COPY_DEPTH_STENCIL = 5, 172 ROP_NOR = 1,
173 ROP_AND_INVERTED = 2,
174 ROP_COPY_INVERTED = 3,
175 ROP_AND_REVERSE = 4,
176 ROP_INVERT = 5,
177 ROP_XOR = 6,
178 ROP_NAND = 7,
179 ROP_AND = 8,
180 ROP_EQUIV = 9,
181 ROP_NOOP = 10,
182 ROP_OR_INVERTED = 11,
183 ROP_COPY = 12,
184 ROP_OR_REVERSE = 13,
185 ROP_OR = 14,
186 ROP_SET = 15,
187};
188
189enum a3xx_rb_blend_opcode {
190 BLEND_DST_PLUS_SRC = 0,
191 BLEND_SRC_MINUS_DST = 1,
192 BLEND_DST_MINUS_SRC = 2,
193 BLEND_MIN_DST_SRC = 3,
194 BLEND_MAX_DST_SRC = 4,
197}; 195};
198 196
199enum a3xx_tex_filter { 197enum a3xx_tex_filter {
200 A3XX_TEX_NEAREST = 0, 198 A3XX_TEX_NEAREST = 0,
201 A3XX_TEX_LINEAR = 1, 199 A3XX_TEX_LINEAR = 1,
200 A3XX_TEX_ANISO = 2,
202}; 201};
203 202
204enum a3xx_tex_clamp { 203enum a3xx_tex_clamp {
205 A3XX_TEX_REPEAT = 0, 204 A3XX_TEX_REPEAT = 0,
206 A3XX_TEX_CLAMP_TO_EDGE = 1, 205 A3XX_TEX_CLAMP_TO_EDGE = 1,
207 A3XX_TEX_MIRROR_REPEAT = 2, 206 A3XX_TEX_MIRROR_REPEAT = 2,
208 A3XX_TEX_CLAMP_NONE = 3, 207 A3XX_TEX_CLAMP_TO_BORDER = 3,
208 A3XX_TEX_MIRROR_CLAMP = 4,
209}; 209};
210 210
211enum a3xx_tex_swiz { 211enum a3xx_tex_swiz {
@@ -316,6 +316,7 @@ enum a3xx_tex_type {
316#define REG_A3XX_RBBM_INT_0_STATUS 0x00000064 316#define REG_A3XX_RBBM_INT_0_STATUS 0x00000064
317 317
318#define REG_A3XX_RBBM_PERFCTR_CTL 0x00000080 318#define REG_A3XX_RBBM_PERFCTR_CTL 0x00000080
319#define A3XX_RBBM_PERFCTR_CTL_ENABLE 0x00000001
319 320
320#define REG_A3XX_RBBM_PERFCTR_LOAD_CMD0 0x00000081 321#define REG_A3XX_RBBM_PERFCTR_LOAD_CMD0 0x00000081
321 322
@@ -549,6 +550,10 @@ static inline uint32_t REG_A3XX_CP_PROTECT_REG(uint32_t i0) { return 0x00000460
549 550
550#define REG_A3XX_CP_AHB_FAULT 0x0000054d 551#define REG_A3XX_CP_AHB_FAULT 0x0000054d
551 552
553#define REG_A3XX_SP_GLOBAL_MEM_SIZE 0x00000e22
554
555#define REG_A3XX_SP_GLOBAL_MEM_ADDR 0x00000e23
556
552#define REG_A3XX_GRAS_CL_CLIP_CNTL 0x00002040 557#define REG_A3XX_GRAS_CL_CLIP_CNTL 0x00002040
553#define A3XX_GRAS_CL_CLIP_CNTL_IJ_PERSP_CENTER 0x00001000 558#define A3XX_GRAS_CL_CLIP_CNTL_IJ_PERSP_CENTER 0x00001000
554#define A3XX_GRAS_CL_CLIP_CNTL_CLIP_DISABLE 0x00010000 559#define A3XX_GRAS_CL_CLIP_CNTL_CLIP_DISABLE 0x00010000
@@ -556,6 +561,9 @@ static inline uint32_t REG_A3XX_CP_PROTECT_REG(uint32_t i0) { return 0x00000460
556#define A3XX_GRAS_CL_CLIP_CNTL_VP_CLIP_CODE_IGNORE 0x00080000 561#define A3XX_GRAS_CL_CLIP_CNTL_VP_CLIP_CODE_IGNORE 0x00080000
557#define A3XX_GRAS_CL_CLIP_CNTL_VP_XFORM_DISABLE 0x00100000 562#define A3XX_GRAS_CL_CLIP_CNTL_VP_XFORM_DISABLE 0x00100000
558#define A3XX_GRAS_CL_CLIP_CNTL_PERSP_DIVISION_DISABLE 0x00200000 563#define A3XX_GRAS_CL_CLIP_CNTL_PERSP_DIVISION_DISABLE 0x00200000
564#define A3XX_GRAS_CL_CLIP_CNTL_ZCOORD 0x00800000
565#define A3XX_GRAS_CL_CLIP_CNTL_WCOORD 0x01000000
566#define A3XX_GRAS_CL_CLIP_CNTL_ZCLIP_DISABLE 0x02000000
559 567
560#define REG_A3XX_GRAS_CL_GB_CLIP_ADJ 0x00002044 568#define REG_A3XX_GRAS_CL_GB_CLIP_ADJ 0x00002044
561#define A3XX_GRAS_CL_GB_CLIP_ADJ_HORZ__MASK 0x000003ff 569#define A3XX_GRAS_CL_GB_CLIP_ADJ_HORZ__MASK 0x000003ff
@@ -620,8 +628,26 @@ static inline uint32_t A3XX_GRAS_CL_VPORT_ZSCALE(float val)
620} 628}
621 629
622#define REG_A3XX_GRAS_SU_POINT_MINMAX 0x00002068 630#define REG_A3XX_GRAS_SU_POINT_MINMAX 0x00002068
631#define A3XX_GRAS_SU_POINT_MINMAX_MIN__MASK 0x0000ffff
632#define A3XX_GRAS_SU_POINT_MINMAX_MIN__SHIFT 0
633static inline uint32_t A3XX_GRAS_SU_POINT_MINMAX_MIN(float val)
634{
635 return ((((uint32_t)(val * 8.0))) << A3XX_GRAS_SU_POINT_MINMAX_MIN__SHIFT) & A3XX_GRAS_SU_POINT_MINMAX_MIN__MASK;
636}
637#define A3XX_GRAS_SU_POINT_MINMAX_MAX__MASK 0xffff0000
638#define A3XX_GRAS_SU_POINT_MINMAX_MAX__SHIFT 16
639static inline uint32_t A3XX_GRAS_SU_POINT_MINMAX_MAX(float val)
640{
641 return ((((uint32_t)(val * 8.0))) << A3XX_GRAS_SU_POINT_MINMAX_MAX__SHIFT) & A3XX_GRAS_SU_POINT_MINMAX_MAX__MASK;
642}
623 643
624#define REG_A3XX_GRAS_SU_POINT_SIZE 0x00002069 644#define REG_A3XX_GRAS_SU_POINT_SIZE 0x00002069
645#define A3XX_GRAS_SU_POINT_SIZE__MASK 0xffffffff
646#define A3XX_GRAS_SU_POINT_SIZE__SHIFT 0
647static inline uint32_t A3XX_GRAS_SU_POINT_SIZE(float val)
648{
649 return ((((uint32_t)(val * 8.0))) << A3XX_GRAS_SU_POINT_SIZE__SHIFT) & A3XX_GRAS_SU_POINT_SIZE__MASK;
650}
625 651
626#define REG_A3XX_GRAS_SU_POLY_OFFSET_SCALE 0x0000206c 652#define REG_A3XX_GRAS_SU_POLY_OFFSET_SCALE 0x0000206c
627#define A3XX_GRAS_SU_POLY_OFFSET_SCALE_VAL__MASK 0x00ffffff 653#define A3XX_GRAS_SU_POLY_OFFSET_SCALE_VAL__MASK 0x00ffffff
@@ -743,6 +769,7 @@ static inline uint32_t A3XX_RB_MODE_CONTROL_RENDER_MODE(enum a3xx_render_mode va
743#define A3XX_RB_MODE_CONTROL_PACKER_TIMER_ENABLE 0x00010000 769#define A3XX_RB_MODE_CONTROL_PACKER_TIMER_ENABLE 0x00010000
744 770
745#define REG_A3XX_RB_RENDER_CONTROL 0x000020c1 771#define REG_A3XX_RB_RENDER_CONTROL 0x000020c1
772#define A3XX_RB_RENDER_CONTROL_FACENESS 0x00000008
746#define A3XX_RB_RENDER_CONTROL_BIN_WIDTH__MASK 0x00000ff0 773#define A3XX_RB_RENDER_CONTROL_BIN_WIDTH__MASK 0x00000ff0
747#define A3XX_RB_RENDER_CONTROL_BIN_WIDTH__SHIFT 4 774#define A3XX_RB_RENDER_CONTROL_BIN_WIDTH__SHIFT 4
748static inline uint32_t A3XX_RB_RENDER_CONTROL_BIN_WIDTH(uint32_t val) 775static inline uint32_t A3XX_RB_RENDER_CONTROL_BIN_WIDTH(uint32_t val)
@@ -751,6 +778,10 @@ static inline uint32_t A3XX_RB_RENDER_CONTROL_BIN_WIDTH(uint32_t val)
751} 778}
752#define A3XX_RB_RENDER_CONTROL_DISABLE_COLOR_PIPE 0x00001000 779#define A3XX_RB_RENDER_CONTROL_DISABLE_COLOR_PIPE 0x00001000
753#define A3XX_RB_RENDER_CONTROL_ENABLE_GMEM 0x00002000 780#define A3XX_RB_RENDER_CONTROL_ENABLE_GMEM 0x00002000
781#define A3XX_RB_RENDER_CONTROL_XCOORD 0x00004000
782#define A3XX_RB_RENDER_CONTROL_YCOORD 0x00008000
783#define A3XX_RB_RENDER_CONTROL_ZCOORD 0x00010000
784#define A3XX_RB_RENDER_CONTROL_WCOORD 0x00020000
754#define A3XX_RB_RENDER_CONTROL_ALPHA_TEST 0x00400000 785#define A3XX_RB_RENDER_CONTROL_ALPHA_TEST 0x00400000
755#define A3XX_RB_RENDER_CONTROL_ALPHA_TEST_FUNC__MASK 0x07000000 786#define A3XX_RB_RENDER_CONTROL_ALPHA_TEST_FUNC__MASK 0x07000000
756#define A3XX_RB_RENDER_CONTROL_ALPHA_TEST_FUNC__SHIFT 24 787#define A3XX_RB_RENDER_CONTROL_ALPHA_TEST_FUNC__SHIFT 24
@@ -796,7 +827,7 @@ static inline uint32_t REG_A3XX_RB_MRT_CONTROL(uint32_t i0) { return 0x000020c4
796#define A3XX_RB_MRT_CONTROL_BLEND2 0x00000020 827#define A3XX_RB_MRT_CONTROL_BLEND2 0x00000020
797#define A3XX_RB_MRT_CONTROL_ROP_CODE__MASK 0x00000f00 828#define A3XX_RB_MRT_CONTROL_ROP_CODE__MASK 0x00000f00
798#define A3XX_RB_MRT_CONTROL_ROP_CODE__SHIFT 8 829#define A3XX_RB_MRT_CONTROL_ROP_CODE__SHIFT 8
799static inline uint32_t A3XX_RB_MRT_CONTROL_ROP_CODE(uint32_t val) 830static inline uint32_t A3XX_RB_MRT_CONTROL_ROP_CODE(enum a3xx_rop_code val)
800{ 831{
801 return ((val) << A3XX_RB_MRT_CONTROL_ROP_CODE__SHIFT) & A3XX_RB_MRT_CONTROL_ROP_CODE__MASK; 832 return ((val) << A3XX_RB_MRT_CONTROL_ROP_CODE__SHIFT) & A3XX_RB_MRT_CONTROL_ROP_CODE__MASK;
802} 833}
@@ -856,7 +887,7 @@ static inline uint32_t A3XX_RB_MRT_BLEND_CONTROL_RGB_SRC_FACTOR(enum adreno_rb_b
856} 887}
857#define A3XX_RB_MRT_BLEND_CONTROL_RGB_BLEND_OPCODE__MASK 0x000000e0 888#define A3XX_RB_MRT_BLEND_CONTROL_RGB_BLEND_OPCODE__MASK 0x000000e0
858#define A3XX_RB_MRT_BLEND_CONTROL_RGB_BLEND_OPCODE__SHIFT 5 889#define A3XX_RB_MRT_BLEND_CONTROL_RGB_BLEND_OPCODE__SHIFT 5
859static inline uint32_t A3XX_RB_MRT_BLEND_CONTROL_RGB_BLEND_OPCODE(enum adreno_rb_blend_opcode val) 890static inline uint32_t A3XX_RB_MRT_BLEND_CONTROL_RGB_BLEND_OPCODE(enum a3xx_rb_blend_opcode val)
860{ 891{
861 return ((val) << A3XX_RB_MRT_BLEND_CONTROL_RGB_BLEND_OPCODE__SHIFT) & A3XX_RB_MRT_BLEND_CONTROL_RGB_BLEND_OPCODE__MASK; 892 return ((val) << A3XX_RB_MRT_BLEND_CONTROL_RGB_BLEND_OPCODE__SHIFT) & A3XX_RB_MRT_BLEND_CONTROL_RGB_BLEND_OPCODE__MASK;
862} 893}
@@ -874,7 +905,7 @@ static inline uint32_t A3XX_RB_MRT_BLEND_CONTROL_ALPHA_SRC_FACTOR(enum adreno_rb
874} 905}
875#define A3XX_RB_MRT_BLEND_CONTROL_ALPHA_BLEND_OPCODE__MASK 0x00e00000 906#define A3XX_RB_MRT_BLEND_CONTROL_ALPHA_BLEND_OPCODE__MASK 0x00e00000
876#define A3XX_RB_MRT_BLEND_CONTROL_ALPHA_BLEND_OPCODE__SHIFT 21 907#define A3XX_RB_MRT_BLEND_CONTROL_ALPHA_BLEND_OPCODE__SHIFT 21
877static inline uint32_t A3XX_RB_MRT_BLEND_CONTROL_ALPHA_BLEND_OPCODE(enum adreno_rb_blend_opcode val) 908static inline uint32_t A3XX_RB_MRT_BLEND_CONTROL_ALPHA_BLEND_OPCODE(enum a3xx_rb_blend_opcode val)
878{ 909{
879 return ((val) << A3XX_RB_MRT_BLEND_CONTROL_ALPHA_BLEND_OPCODE__SHIFT) & A3XX_RB_MRT_BLEND_CONTROL_ALPHA_BLEND_OPCODE__MASK; 910 return ((val) << A3XX_RB_MRT_BLEND_CONTROL_ALPHA_BLEND_OPCODE__SHIFT) & A3XX_RB_MRT_BLEND_CONTROL_ALPHA_BLEND_OPCODE__MASK;
880} 911}
@@ -957,17 +988,24 @@ static inline uint32_t A3XX_RB_COPY_CONTROL_MSAA_RESOLVE(enum a3xx_msaa_samples
957{ 988{
958 return ((val) << A3XX_RB_COPY_CONTROL_MSAA_RESOLVE__SHIFT) & A3XX_RB_COPY_CONTROL_MSAA_RESOLVE__MASK; 989 return ((val) << A3XX_RB_COPY_CONTROL_MSAA_RESOLVE__SHIFT) & A3XX_RB_COPY_CONTROL_MSAA_RESOLVE__MASK;
959} 990}
991#define A3XX_RB_COPY_CONTROL_DEPTHCLEAR 0x00000008
960#define A3XX_RB_COPY_CONTROL_MODE__MASK 0x00000070 992#define A3XX_RB_COPY_CONTROL_MODE__MASK 0x00000070
961#define A3XX_RB_COPY_CONTROL_MODE__SHIFT 4 993#define A3XX_RB_COPY_CONTROL_MODE__SHIFT 4
962static inline uint32_t A3XX_RB_COPY_CONTROL_MODE(enum adreno_rb_copy_control_mode val) 994static inline uint32_t A3XX_RB_COPY_CONTROL_MODE(enum adreno_rb_copy_control_mode val)
963{ 995{
964 return ((val) << A3XX_RB_COPY_CONTROL_MODE__SHIFT) & A3XX_RB_COPY_CONTROL_MODE__MASK; 996 return ((val) << A3XX_RB_COPY_CONTROL_MODE__SHIFT) & A3XX_RB_COPY_CONTROL_MODE__MASK;
965} 997}
966#define A3XX_RB_COPY_CONTROL_GMEM_BASE__MASK 0xfffffc00 998#define A3XX_RB_COPY_CONTROL_FASTCLEAR__MASK 0x00000f00
967#define A3XX_RB_COPY_CONTROL_GMEM_BASE__SHIFT 10 999#define A3XX_RB_COPY_CONTROL_FASTCLEAR__SHIFT 8
1000static inline uint32_t A3XX_RB_COPY_CONTROL_FASTCLEAR(uint32_t val)
1001{
1002 return ((val) << A3XX_RB_COPY_CONTROL_FASTCLEAR__SHIFT) & A3XX_RB_COPY_CONTROL_FASTCLEAR__MASK;
1003}
1004#define A3XX_RB_COPY_CONTROL_GMEM_BASE__MASK 0xffffc000
1005#define A3XX_RB_COPY_CONTROL_GMEM_BASE__SHIFT 14
968static inline uint32_t A3XX_RB_COPY_CONTROL_GMEM_BASE(uint32_t val) 1006static inline uint32_t A3XX_RB_COPY_CONTROL_GMEM_BASE(uint32_t val)
969{ 1007{
970 return ((val >> 10) << A3XX_RB_COPY_CONTROL_GMEM_BASE__SHIFT) & A3XX_RB_COPY_CONTROL_GMEM_BASE__MASK; 1008 return ((val >> 14) << A3XX_RB_COPY_CONTROL_GMEM_BASE__SHIFT) & A3XX_RB_COPY_CONTROL_GMEM_BASE__MASK;
971} 1009}
972 1010
973#define REG_A3XX_RB_COPY_DEST_BASE 0x000020ed 1011#define REG_A3XX_RB_COPY_DEST_BASE 0x000020ed
@@ -1005,6 +1043,12 @@ static inline uint32_t A3XX_RB_COPY_DEST_INFO_SWAP(enum a3xx_color_swap val)
1005{ 1043{
1006 return ((val) << A3XX_RB_COPY_DEST_INFO_SWAP__SHIFT) & A3XX_RB_COPY_DEST_INFO_SWAP__MASK; 1044 return ((val) << A3XX_RB_COPY_DEST_INFO_SWAP__SHIFT) & A3XX_RB_COPY_DEST_INFO_SWAP__MASK;
1007} 1045}
1046#define A3XX_RB_COPY_DEST_INFO_DITHER_MODE__MASK 0x00000c00
1047#define A3XX_RB_COPY_DEST_INFO_DITHER_MODE__SHIFT 10
1048static inline uint32_t A3XX_RB_COPY_DEST_INFO_DITHER_MODE(enum adreno_rb_dither_mode val)
1049{
1050 return ((val) << A3XX_RB_COPY_DEST_INFO_DITHER_MODE__SHIFT) & A3XX_RB_COPY_DEST_INFO_DITHER_MODE__MASK;
1051}
1008#define A3XX_RB_COPY_DEST_INFO_COMPONENT_ENABLE__MASK 0x0003c000 1052#define A3XX_RB_COPY_DEST_INFO_COMPONENT_ENABLE__MASK 0x0003c000
1009#define A3XX_RB_COPY_DEST_INFO_COMPONENT_ENABLE__SHIFT 14 1053#define A3XX_RB_COPY_DEST_INFO_COMPONENT_ENABLE__SHIFT 14
1010static inline uint32_t A3XX_RB_COPY_DEST_INFO_COMPONENT_ENABLE(uint32_t val) 1054static inline uint32_t A3XX_RB_COPY_DEST_INFO_COMPONENT_ENABLE(uint32_t val)
@@ -1019,6 +1063,7 @@ static inline uint32_t A3XX_RB_COPY_DEST_INFO_ENDIAN(enum adreno_rb_surface_endi
1019} 1063}
1020 1064
1021#define REG_A3XX_RB_DEPTH_CONTROL 0x00002100 1065#define REG_A3XX_RB_DEPTH_CONTROL 0x00002100
1066#define A3XX_RB_DEPTH_CONTROL_FRAG_WRITES_Z 0x00000001
1022#define A3XX_RB_DEPTH_CONTROL_Z_ENABLE 0x00000002 1067#define A3XX_RB_DEPTH_CONTROL_Z_ENABLE 0x00000002
1023#define A3XX_RB_DEPTH_CONTROL_Z_WRITE_ENABLE 0x00000004 1068#define A3XX_RB_DEPTH_CONTROL_Z_WRITE_ENABLE 0x00000004
1024#define A3XX_RB_DEPTH_CONTROL_EARLY_Z_DISABLE 0x00000008 1069#define A3XX_RB_DEPTH_CONTROL_EARLY_Z_DISABLE 0x00000008
@@ -1044,7 +1089,7 @@ static inline uint32_t A3XX_RB_DEPTH_INFO_DEPTH_FORMAT(enum adreno_rb_depth_form
1044#define A3XX_RB_DEPTH_INFO_DEPTH_BASE__SHIFT 11 1089#define A3XX_RB_DEPTH_INFO_DEPTH_BASE__SHIFT 11
1045static inline uint32_t A3XX_RB_DEPTH_INFO_DEPTH_BASE(uint32_t val) 1090static inline uint32_t A3XX_RB_DEPTH_INFO_DEPTH_BASE(uint32_t val)
1046{ 1091{
1047 return ((val >> 10) << A3XX_RB_DEPTH_INFO_DEPTH_BASE__SHIFT) & A3XX_RB_DEPTH_INFO_DEPTH_BASE__MASK; 1092 return ((val >> 12) << A3XX_RB_DEPTH_INFO_DEPTH_BASE__SHIFT) & A3XX_RB_DEPTH_INFO_DEPTH_BASE__MASK;
1048} 1093}
1049 1094
1050#define REG_A3XX_RB_DEPTH_PITCH 0x00002103 1095#define REG_A3XX_RB_DEPTH_PITCH 0x00002103
@@ -1172,6 +1217,8 @@ static inline uint32_t A3XX_RB_WINDOW_OFFSET_Y(uint32_t val)
1172} 1217}
1173 1218
1174#define REG_A3XX_RB_SAMPLE_COUNT_CONTROL 0x00002110 1219#define REG_A3XX_RB_SAMPLE_COUNT_CONTROL 0x00002110
1220#define A3XX_RB_SAMPLE_COUNT_CONTROL_RESET 0x00000001
1221#define A3XX_RB_SAMPLE_COUNT_CONTROL_COPY 0x00000002
1175 1222
1176#define REG_A3XX_RB_SAMPLE_COUNT_ADDR 0x00002111 1223#define REG_A3XX_RB_SAMPLE_COUNT_ADDR 0x00002111
1177 1224
@@ -1179,7 +1226,23 @@ static inline uint32_t A3XX_RB_WINDOW_OFFSET_Y(uint32_t val)
1179 1226
1180#define REG_A3XX_RB_Z_CLAMP_MAX 0x00002115 1227#define REG_A3XX_RB_Z_CLAMP_MAX 0x00002115
1181 1228
1229#define REG_A3XX_VGT_BIN_BASE 0x000021e1
1230
1231#define REG_A3XX_VGT_BIN_SIZE 0x000021e2
1232
1182#define REG_A3XX_PC_VSTREAM_CONTROL 0x000021e4 1233#define REG_A3XX_PC_VSTREAM_CONTROL 0x000021e4
1234#define A3XX_PC_VSTREAM_CONTROL_SIZE__MASK 0x003f0000
1235#define A3XX_PC_VSTREAM_CONTROL_SIZE__SHIFT 16
1236static inline uint32_t A3XX_PC_VSTREAM_CONTROL_SIZE(uint32_t val)
1237{
1238 return ((val) << A3XX_PC_VSTREAM_CONTROL_SIZE__SHIFT) & A3XX_PC_VSTREAM_CONTROL_SIZE__MASK;
1239}
1240#define A3XX_PC_VSTREAM_CONTROL_N__MASK 0x07c00000
1241#define A3XX_PC_VSTREAM_CONTROL_N__SHIFT 22
1242static inline uint32_t A3XX_PC_VSTREAM_CONTROL_N(uint32_t val)
1243{
1244 return ((val) << A3XX_PC_VSTREAM_CONTROL_N__SHIFT) & A3XX_PC_VSTREAM_CONTROL_N__MASK;
1245}
1183 1246
1184#define REG_A3XX_PC_VERTEX_REUSE_BLOCK_CNTL 0x000021ea 1247#define REG_A3XX_PC_VERTEX_REUSE_BLOCK_CNTL 0x000021ea
1185 1248
@@ -1203,6 +1266,7 @@ static inline uint32_t A3XX_PC_PRIM_VTX_CNTL_POLYMODE_BACK_PTYPE(enum adreno_pa_
1203 return ((val) << A3XX_PC_PRIM_VTX_CNTL_POLYMODE_BACK_PTYPE__SHIFT) & A3XX_PC_PRIM_VTX_CNTL_POLYMODE_BACK_PTYPE__MASK; 1266 return ((val) << A3XX_PC_PRIM_VTX_CNTL_POLYMODE_BACK_PTYPE__SHIFT) & A3XX_PC_PRIM_VTX_CNTL_POLYMODE_BACK_PTYPE__MASK;
1204} 1267}
1205#define A3XX_PC_PRIM_VTX_CNTL_PROVOKING_VTX_LAST 0x02000000 1268#define A3XX_PC_PRIM_VTX_CNTL_PROVOKING_VTX_LAST 0x02000000
1269#define A3XX_PC_PRIM_VTX_CNTL_PSIZE 0x04000000
1206 1270
1207#define REG_A3XX_PC_RESTART_INDEX 0x000021ed 1271#define REG_A3XX_PC_RESTART_INDEX 0x000021ed
1208 1272
@@ -1232,6 +1296,7 @@ static inline uint32_t A3XX_HLSQ_CONTROL_1_REG_VSTHREADSIZE(enum a3xx_threadsize
1232} 1296}
1233#define A3XX_HLSQ_CONTROL_1_REG_VSSUPERTHREADENABLE 0x00000100 1297#define A3XX_HLSQ_CONTROL_1_REG_VSSUPERTHREADENABLE 0x00000100
1234#define A3XX_HLSQ_CONTROL_1_REG_RESERVED1 0x00000200 1298#define A3XX_HLSQ_CONTROL_1_REG_RESERVED1 0x00000200
1299#define A3XX_HLSQ_CONTROL_1_REG_ZWCOORD 0x02000000
1235 1300
1236#define REG_A3XX_HLSQ_CONTROL_2_REG 0x00002202 1301#define REG_A3XX_HLSQ_CONTROL_2_REG 0x00002202
1237#define A3XX_HLSQ_CONTROL_2_REG_PRIMALLOCTHRESHOLD__MASK 0xfc000000 1302#define A3XX_HLSQ_CONTROL_2_REG_PRIMALLOCTHRESHOLD__MASK 0xfc000000
@@ -1242,6 +1307,12 @@ static inline uint32_t A3XX_HLSQ_CONTROL_2_REG_PRIMALLOCTHRESHOLD(uint32_t val)
1242} 1307}
1243 1308
1244#define REG_A3XX_HLSQ_CONTROL_3_REG 0x00002203 1309#define REG_A3XX_HLSQ_CONTROL_3_REG 0x00002203
1310#define A3XX_HLSQ_CONTROL_3_REG_REGID__MASK 0x000000ff
1311#define A3XX_HLSQ_CONTROL_3_REG_REGID__SHIFT 0
1312static inline uint32_t A3XX_HLSQ_CONTROL_3_REG_REGID(uint32_t val)
1313{
1314 return ((val) << A3XX_HLSQ_CONTROL_3_REG_REGID__SHIFT) & A3XX_HLSQ_CONTROL_3_REG_REGID__MASK;
1315}
1245 1316
1246#define REG_A3XX_HLSQ_VS_CONTROL_REG 0x00002204 1317#define REG_A3XX_HLSQ_VS_CONTROL_REG 0x00002204
1247#define A3XX_HLSQ_VS_CONTROL_REG_CONSTLENGTH__MASK 0x00000fff 1318#define A3XX_HLSQ_VS_CONTROL_REG_CONSTLENGTH__MASK 0x00000fff
@@ -1312,10 +1383,36 @@ static inline uint32_t A3XX_HLSQ_CONST_FSPRESV_RANGE_REG_ENDENTRY(uint32_t val)
1312} 1383}
1313 1384
1314#define REG_A3XX_HLSQ_CL_NDRANGE_0_REG 0x0000220a 1385#define REG_A3XX_HLSQ_CL_NDRANGE_0_REG 0x0000220a
1386#define A3XX_HLSQ_CL_NDRANGE_0_REG_WORKDIM__MASK 0x00000003
1387#define A3XX_HLSQ_CL_NDRANGE_0_REG_WORKDIM__SHIFT 0
1388static inline uint32_t A3XX_HLSQ_CL_NDRANGE_0_REG_WORKDIM(uint32_t val)
1389{
1390 return ((val) << A3XX_HLSQ_CL_NDRANGE_0_REG_WORKDIM__SHIFT) & A3XX_HLSQ_CL_NDRANGE_0_REG_WORKDIM__MASK;
1391}
1392#define A3XX_HLSQ_CL_NDRANGE_0_REG_LOCALSIZE0__MASK 0x00000ffc
1393#define A3XX_HLSQ_CL_NDRANGE_0_REG_LOCALSIZE0__SHIFT 2
1394static inline uint32_t A3XX_HLSQ_CL_NDRANGE_0_REG_LOCALSIZE0(uint32_t val)
1395{
1396 return ((val) << A3XX_HLSQ_CL_NDRANGE_0_REG_LOCALSIZE0__SHIFT) & A3XX_HLSQ_CL_NDRANGE_0_REG_LOCALSIZE0__MASK;
1397}
1398#define A3XX_HLSQ_CL_NDRANGE_0_REG_LOCALSIZE1__MASK 0x003ff000
1399#define A3XX_HLSQ_CL_NDRANGE_0_REG_LOCALSIZE1__SHIFT 12
1400static inline uint32_t A3XX_HLSQ_CL_NDRANGE_0_REG_LOCALSIZE1(uint32_t val)
1401{
1402 return ((val) << A3XX_HLSQ_CL_NDRANGE_0_REG_LOCALSIZE1__SHIFT) & A3XX_HLSQ_CL_NDRANGE_0_REG_LOCALSIZE1__MASK;
1403}
1404#define A3XX_HLSQ_CL_NDRANGE_0_REG_LOCALSIZE2__MASK 0xffc00000
1405#define A3XX_HLSQ_CL_NDRANGE_0_REG_LOCALSIZE2__SHIFT 22
1406static inline uint32_t A3XX_HLSQ_CL_NDRANGE_0_REG_LOCALSIZE2(uint32_t val)
1407{
1408 return ((val) << A3XX_HLSQ_CL_NDRANGE_0_REG_LOCALSIZE2__SHIFT) & A3XX_HLSQ_CL_NDRANGE_0_REG_LOCALSIZE2__MASK;
1409}
1410
1411static inline uint32_t REG_A3XX_HLSQ_CL_GLOBAL_WORK(uint32_t i0) { return 0x0000220b + 0x2*i0; }
1315 1412
1316#define REG_A3XX_HLSQ_CL_NDRANGE_1_REG 0x0000220b 1413static inline uint32_t REG_A3XX_HLSQ_CL_GLOBAL_WORK_SIZE(uint32_t i0) { return 0x0000220b + 0x2*i0; }
1317 1414
1318#define REG_A3XX_HLSQ_CL_NDRANGE_2_REG 0x0000220c 1415static inline uint32_t REG_A3XX_HLSQ_CL_GLOBAL_WORK_OFFSET(uint32_t i0) { return 0x0000220c + 0x2*i0; }
1319 1416
1320#define REG_A3XX_HLSQ_CL_CONTROL_0_REG 0x00002211 1417#define REG_A3XX_HLSQ_CL_CONTROL_0_REG 0x00002211
1321 1418
@@ -1323,7 +1420,9 @@ static inline uint32_t A3XX_HLSQ_CONST_FSPRESV_RANGE_REG_ENDENTRY(uint32_t val)
1323 1420
1324#define REG_A3XX_HLSQ_CL_KERNEL_CONST_REG 0x00002214 1421#define REG_A3XX_HLSQ_CL_KERNEL_CONST_REG 0x00002214
1325 1422
1326#define REG_A3XX_HLSQ_CL_KERNEL_GROUP_X_REG 0x00002215 1423static inline uint32_t REG_A3XX_HLSQ_CL_KERNEL_GROUP(uint32_t i0) { return 0x00002215 + 0x1*i0; }
1424
1425static inline uint32_t REG_A3XX_HLSQ_CL_KERNEL_GROUP_RATIO(uint32_t i0) { return 0x00002215 + 0x1*i0; }
1327 1426
1328#define REG_A3XX_HLSQ_CL_KERNEL_GROUP_Y_REG 0x00002216 1427#define REG_A3XX_HLSQ_CL_KERNEL_GROUP_Y_REG 0x00002216
1329 1428
@@ -1438,6 +1537,12 @@ static inline uint32_t A3XX_VFD_DECODE_INSTR_REGID(uint32_t val)
1438{ 1537{
1439 return ((val) << A3XX_VFD_DECODE_INSTR_REGID__SHIFT) & A3XX_VFD_DECODE_INSTR_REGID__MASK; 1538 return ((val) << A3XX_VFD_DECODE_INSTR_REGID__SHIFT) & A3XX_VFD_DECODE_INSTR_REGID__MASK;
1440} 1539}
1540#define A3XX_VFD_DECODE_INSTR_SWAP__MASK 0x00c00000
1541#define A3XX_VFD_DECODE_INSTR_SWAP__SHIFT 22
1542static inline uint32_t A3XX_VFD_DECODE_INSTR_SWAP(enum a3xx_color_swap val)
1543{
1544 return ((val) << A3XX_VFD_DECODE_INSTR_SWAP__SHIFT) & A3XX_VFD_DECODE_INSTR_SWAP__MASK;
1545}
1441#define A3XX_VFD_DECODE_INSTR_SHIFTCNT__MASK 0x1f000000 1546#define A3XX_VFD_DECODE_INSTR_SHIFTCNT__MASK 0x1f000000
1442#define A3XX_VFD_DECODE_INSTR_SHIFTCNT__SHIFT 24 1547#define A3XX_VFD_DECODE_INSTR_SHIFTCNT__SHIFT 24
1443static inline uint32_t A3XX_VFD_DECODE_INSTR_SHIFTCNT(uint32_t val) 1548static inline uint32_t A3XX_VFD_DECODE_INSTR_SHIFTCNT(uint32_t val)
@@ -1462,12 +1567,13 @@ static inline uint32_t A3XX_VFD_VS_THREADING_THRESHOLD_REGID_VTXCNT(uint32_t val
1462} 1567}
1463 1568
1464#define REG_A3XX_VPC_ATTR 0x00002280 1569#define REG_A3XX_VPC_ATTR 0x00002280
1465#define A3XX_VPC_ATTR_TOTALATTR__MASK 0x00000fff 1570#define A3XX_VPC_ATTR_TOTALATTR__MASK 0x000001ff
1466#define A3XX_VPC_ATTR_TOTALATTR__SHIFT 0 1571#define A3XX_VPC_ATTR_TOTALATTR__SHIFT 0
1467static inline uint32_t A3XX_VPC_ATTR_TOTALATTR(uint32_t val) 1572static inline uint32_t A3XX_VPC_ATTR_TOTALATTR(uint32_t val)
1468{ 1573{
1469 return ((val) << A3XX_VPC_ATTR_TOTALATTR__SHIFT) & A3XX_VPC_ATTR_TOTALATTR__MASK; 1574 return ((val) << A3XX_VPC_ATTR_TOTALATTR__SHIFT) & A3XX_VPC_ATTR_TOTALATTR__MASK;
1470} 1575}
1576#define A3XX_VPC_ATTR_PSIZE 0x00000200
1471#define A3XX_VPC_ATTR_THRDASSIGN__MASK 0x0ffff000 1577#define A3XX_VPC_ATTR_THRDASSIGN__MASK 0x0ffff000
1472#define A3XX_VPC_ATTR_THRDASSIGN__SHIFT 12 1578#define A3XX_VPC_ATTR_THRDASSIGN__SHIFT 12
1473static inline uint32_t A3XX_VPC_ATTR_THRDASSIGN(uint32_t val) 1579static inline uint32_t A3XX_VPC_ATTR_THRDASSIGN(uint32_t val)
@@ -1522,11 +1628,11 @@ static inline uint32_t A3XX_SP_SP_CTRL_REG_SLEEPMODE(uint32_t val)
1522{ 1628{
1523 return ((val) << A3XX_SP_SP_CTRL_REG_SLEEPMODE__SHIFT) & A3XX_SP_SP_CTRL_REG_SLEEPMODE__MASK; 1629 return ((val) << A3XX_SP_SP_CTRL_REG_SLEEPMODE__SHIFT) & A3XX_SP_SP_CTRL_REG_SLEEPMODE__MASK;
1524} 1630}
1525#define A3XX_SP_SP_CTRL_REG_LOMODE__MASK 0x00c00000 1631#define A3XX_SP_SP_CTRL_REG_L0MODE__MASK 0x00c00000
1526#define A3XX_SP_SP_CTRL_REG_LOMODE__SHIFT 22 1632#define A3XX_SP_SP_CTRL_REG_L0MODE__SHIFT 22
1527static inline uint32_t A3XX_SP_SP_CTRL_REG_LOMODE(uint32_t val) 1633static inline uint32_t A3XX_SP_SP_CTRL_REG_L0MODE(uint32_t val)
1528{ 1634{
1529 return ((val) << A3XX_SP_SP_CTRL_REG_LOMODE__SHIFT) & A3XX_SP_SP_CTRL_REG_LOMODE__MASK; 1635 return ((val) << A3XX_SP_SP_CTRL_REG_L0MODE__SHIFT) & A3XX_SP_SP_CTRL_REG_L0MODE__MASK;
1530} 1636}
1531 1637
1532#define REG_A3XX_SP_VS_CTRL_REG0 0x000022c4 1638#define REG_A3XX_SP_VS_CTRL_REG0 0x000022c4
@@ -1569,6 +1675,7 @@ static inline uint32_t A3XX_SP_VS_CTRL_REG0_THREADSIZE(enum a3xx_threadsize val)
1569} 1675}
1570#define A3XX_SP_VS_CTRL_REG0_SUPERTHREADMODE 0x00200000 1676#define A3XX_SP_VS_CTRL_REG0_SUPERTHREADMODE 0x00200000
1571#define A3XX_SP_VS_CTRL_REG0_PIXLODENABLE 0x00400000 1677#define A3XX_SP_VS_CTRL_REG0_PIXLODENABLE 0x00400000
1678#define A3XX_SP_VS_CTRL_REG0_COMPUTEMODE 0x00800000
1572#define A3XX_SP_VS_CTRL_REG0_LENGTH__MASK 0xff000000 1679#define A3XX_SP_VS_CTRL_REG0_LENGTH__MASK 0xff000000
1573#define A3XX_SP_VS_CTRL_REG0_LENGTH__SHIFT 24 1680#define A3XX_SP_VS_CTRL_REG0_LENGTH__SHIFT 24
1574static inline uint32_t A3XX_SP_VS_CTRL_REG0_LENGTH(uint32_t val) 1681static inline uint32_t A3XX_SP_VS_CTRL_REG0_LENGTH(uint32_t val)
@@ -1742,6 +1849,7 @@ static inline uint32_t A3XX_SP_FS_CTRL_REG0_THREADSIZE(enum a3xx_threadsize val)
1742} 1849}
1743#define A3XX_SP_FS_CTRL_REG0_SUPERTHREADMODE 0x00200000 1850#define A3XX_SP_FS_CTRL_REG0_SUPERTHREADMODE 0x00200000
1744#define A3XX_SP_FS_CTRL_REG0_PIXLODENABLE 0x00400000 1851#define A3XX_SP_FS_CTRL_REG0_PIXLODENABLE 0x00400000
1852#define A3XX_SP_FS_CTRL_REG0_COMPUTEMODE 0x00800000
1745#define A3XX_SP_FS_CTRL_REG0_LENGTH__MASK 0xff000000 1853#define A3XX_SP_FS_CTRL_REG0_LENGTH__MASK 0xff000000
1746#define A3XX_SP_FS_CTRL_REG0_LENGTH__SHIFT 24 1854#define A3XX_SP_FS_CTRL_REG0_LENGTH__SHIFT 24
1747static inline uint32_t A3XX_SP_FS_CTRL_REG0_LENGTH(uint32_t val) 1855static inline uint32_t A3XX_SP_FS_CTRL_REG0_LENGTH(uint32_t val)
@@ -1802,6 +1910,13 @@ static inline uint32_t A3XX_SP_FS_OBJ_OFFSET_REG_SHADEROBJOFFSET(uint32_t val)
1802#define REG_A3XX_SP_FS_FLAT_SHAD_MODE_REG_1 0x000022e9 1910#define REG_A3XX_SP_FS_FLAT_SHAD_MODE_REG_1 0x000022e9
1803 1911
1804#define REG_A3XX_SP_FS_OUTPUT_REG 0x000022ec 1912#define REG_A3XX_SP_FS_OUTPUT_REG 0x000022ec
1913#define A3XX_SP_FS_OUTPUT_REG_DEPTH_ENABLE 0x00000080
1914#define A3XX_SP_FS_OUTPUT_REG_DEPTH_REGID__MASK 0x0000ff00
1915#define A3XX_SP_FS_OUTPUT_REG_DEPTH_REGID__SHIFT 8
1916static inline uint32_t A3XX_SP_FS_OUTPUT_REG_DEPTH_REGID(uint32_t val)
1917{
1918 return ((val) << A3XX_SP_FS_OUTPUT_REG_DEPTH_REGID__SHIFT) & A3XX_SP_FS_OUTPUT_REG_DEPTH_REGID__MASK;
1919}
1805 1920
1806static inline uint32_t REG_A3XX_SP_FS_MRT(uint32_t i0) { return 0x000022f0 + 0x1*i0; } 1921static inline uint32_t REG_A3XX_SP_FS_MRT(uint32_t i0) { return 0x000022f0 + 0x1*i0; }
1807 1922
@@ -1914,6 +2029,42 @@ static inline uint32_t A3XX_TPL1_TP_FS_TEX_OFFSET_BASETABLEPTR(uint32_t val)
1914 2029
1915#define REG_A3XX_VBIF_OUT_AXI_AOOO 0x0000305f 2030#define REG_A3XX_VBIF_OUT_AXI_AOOO 0x0000305f
1916 2031
2032#define REG_A3XX_VBIF_PERF_CNT_EN 0x00003070
2033#define A3XX_VBIF_PERF_CNT_EN_CNT0 0x00000001
2034#define A3XX_VBIF_PERF_CNT_EN_CNT1 0x00000002
2035#define A3XX_VBIF_PERF_CNT_EN_PWRCNT0 0x00000004
2036#define A3XX_VBIF_PERF_CNT_EN_PWRCNT1 0x00000008
2037#define A3XX_VBIF_PERF_CNT_EN_PWRCNT2 0x00000010
2038
2039#define REG_A3XX_VBIF_PERF_CNT_CLR 0x00003071
2040#define A3XX_VBIF_PERF_CNT_CLR_CNT0 0x00000001
2041#define A3XX_VBIF_PERF_CNT_CLR_CNT1 0x00000002
2042#define A3XX_VBIF_PERF_CNT_CLR_PWRCNT0 0x00000004
2043#define A3XX_VBIF_PERF_CNT_CLR_PWRCNT1 0x00000008
2044#define A3XX_VBIF_PERF_CNT_CLR_PWRCNT2 0x00000010
2045
2046#define REG_A3XX_VBIF_PERF_CNT_SEL 0x00003072
2047
2048#define REG_A3XX_VBIF_PERF_CNT0_LO 0x00003073
2049
2050#define REG_A3XX_VBIF_PERF_CNT0_HI 0x00003074
2051
2052#define REG_A3XX_VBIF_PERF_CNT1_LO 0x00003075
2053
2054#define REG_A3XX_VBIF_PERF_CNT1_HI 0x00003076
2055
2056#define REG_A3XX_VBIF_PERF_PWR_CNT0_LO 0x00003077
2057
2058#define REG_A3XX_VBIF_PERF_PWR_CNT0_HI 0x00003078
2059
2060#define REG_A3XX_VBIF_PERF_PWR_CNT1_LO 0x00003079
2061
2062#define REG_A3XX_VBIF_PERF_PWR_CNT1_HI 0x0000307a
2063
2064#define REG_A3XX_VBIF_PERF_PWR_CNT2_LO 0x0000307b
2065
2066#define REG_A3XX_VBIF_PERF_PWR_CNT2_HI 0x0000307c
2067
1917#define REG_A3XX_VSC_BIN_SIZE 0x00000c01 2068#define REG_A3XX_VSC_BIN_SIZE 0x00000c01
1918#define A3XX_VSC_BIN_SIZE_WIDTH__MASK 0x0000001f 2069#define A3XX_VSC_BIN_SIZE_WIDTH__MASK 0x0000001f
1919#define A3XX_VSC_BIN_SIZE_WIDTH__SHIFT 0 2070#define A3XX_VSC_BIN_SIZE_WIDTH__SHIFT 0
@@ -2080,6 +2231,8 @@ static inline uint32_t A3XX_UCHE_CACHE_INVALIDATE1_REG_OPCODE(enum a3xx_cache_op
2080} 2231}
2081#define A3XX_UCHE_CACHE_INVALIDATE1_REG_ENTIRE_CACHE 0x80000000 2232#define A3XX_UCHE_CACHE_INVALIDATE1_REG_ENTIRE_CACHE 0x80000000
2082 2233
2234#define REG_A3XX_UNKNOWN_0EA6 0x00000ea6
2235
2083#define REG_A3XX_SP_PERFCOUNTER0_SELECT 0x00000ec4 2236#define REG_A3XX_SP_PERFCOUNTER0_SELECT 0x00000ec4
2084 2237
2085#define REG_A3XX_SP_PERFCOUNTER1_SELECT 0x00000ec5 2238#define REG_A3XX_SP_PERFCOUNTER1_SELECT 0x00000ec5
@@ -2117,6 +2270,39 @@ static inline uint32_t A3XX_UCHE_CACHE_INVALIDATE1_REG_OPCODE(enum a3xx_cache_op
2117#define REG_A3XX_VGT_EVENT_INITIATOR 0x000021f9 2270#define REG_A3XX_VGT_EVENT_INITIATOR 0x000021f9
2118 2271
2119#define REG_A3XX_VGT_DRAW_INITIATOR 0x000021fc 2272#define REG_A3XX_VGT_DRAW_INITIATOR 0x000021fc
2273#define A3XX_VGT_DRAW_INITIATOR_PRIM_TYPE__MASK 0x0000003f
2274#define A3XX_VGT_DRAW_INITIATOR_PRIM_TYPE__SHIFT 0
2275static inline uint32_t A3XX_VGT_DRAW_INITIATOR_PRIM_TYPE(enum pc_di_primtype val)
2276{
2277 return ((val) << A3XX_VGT_DRAW_INITIATOR_PRIM_TYPE__SHIFT) & A3XX_VGT_DRAW_INITIATOR_PRIM_TYPE__MASK;
2278}
2279#define A3XX_VGT_DRAW_INITIATOR_SOURCE_SELECT__MASK 0x000000c0
2280#define A3XX_VGT_DRAW_INITIATOR_SOURCE_SELECT__SHIFT 6
2281static inline uint32_t A3XX_VGT_DRAW_INITIATOR_SOURCE_SELECT(enum pc_di_src_sel val)
2282{
2283 return ((val) << A3XX_VGT_DRAW_INITIATOR_SOURCE_SELECT__SHIFT) & A3XX_VGT_DRAW_INITIATOR_SOURCE_SELECT__MASK;
2284}
2285#define A3XX_VGT_DRAW_INITIATOR_VIS_CULL__MASK 0x00000600
2286#define A3XX_VGT_DRAW_INITIATOR_VIS_CULL__SHIFT 9
2287static inline uint32_t A3XX_VGT_DRAW_INITIATOR_VIS_CULL(enum pc_di_vis_cull_mode val)
2288{
2289 return ((val) << A3XX_VGT_DRAW_INITIATOR_VIS_CULL__SHIFT) & A3XX_VGT_DRAW_INITIATOR_VIS_CULL__MASK;
2290}
2291#define A3XX_VGT_DRAW_INITIATOR_INDEX_SIZE__MASK 0x00000800
2292#define A3XX_VGT_DRAW_INITIATOR_INDEX_SIZE__SHIFT 11
2293static inline uint32_t A3XX_VGT_DRAW_INITIATOR_INDEX_SIZE(enum pc_di_index_size val)
2294{
2295 return ((val) << A3XX_VGT_DRAW_INITIATOR_INDEX_SIZE__SHIFT) & A3XX_VGT_DRAW_INITIATOR_INDEX_SIZE__MASK;
2296}
2297#define A3XX_VGT_DRAW_INITIATOR_NOT_EOP 0x00001000
2298#define A3XX_VGT_DRAW_INITIATOR_SMALL_INDEX 0x00002000
2299#define A3XX_VGT_DRAW_INITIATOR_PRE_DRAW_INITIATOR_ENABLE 0x00004000
2300#define A3XX_VGT_DRAW_INITIATOR_NUM_INDICES__MASK 0xffff0000
2301#define A3XX_VGT_DRAW_INITIATOR_NUM_INDICES__SHIFT 16
2302static inline uint32_t A3XX_VGT_DRAW_INITIATOR_NUM_INDICES(uint32_t val)
2303{
2304 return ((val) << A3XX_VGT_DRAW_INITIATOR_NUM_INDICES__SHIFT) & A3XX_VGT_DRAW_INITIATOR_NUM_INDICES__MASK;
2305}
2120 2306
2121#define REG_A3XX_VGT_IMMED_DATA 0x000021fd 2307#define REG_A3XX_VGT_IMMED_DATA 0x000021fd
2122 2308
@@ -2152,6 +2338,12 @@ static inline uint32_t A3XX_TEX_SAMP_0_WRAP_R(enum a3xx_tex_clamp val)
2152{ 2338{
2153 return ((val) << A3XX_TEX_SAMP_0_WRAP_R__SHIFT) & A3XX_TEX_SAMP_0_WRAP_R__MASK; 2339 return ((val) << A3XX_TEX_SAMP_0_WRAP_R__SHIFT) & A3XX_TEX_SAMP_0_WRAP_R__MASK;
2154} 2340}
2341#define A3XX_TEX_SAMP_0_COMPARE_FUNC__MASK 0x00700000
2342#define A3XX_TEX_SAMP_0_COMPARE_FUNC__SHIFT 20
2343static inline uint32_t A3XX_TEX_SAMP_0_COMPARE_FUNC(enum adreno_compare_func val)
2344{
2345 return ((val) << A3XX_TEX_SAMP_0_COMPARE_FUNC__SHIFT) & A3XX_TEX_SAMP_0_COMPARE_FUNC__MASK;
2346}
2155#define A3XX_TEX_SAMP_0_UNNORM_COORDS 0x80000000 2347#define A3XX_TEX_SAMP_0_UNNORM_COORDS 0x80000000
2156 2348
2157#define REG_A3XX_TEX_SAMP_1 0x00000001 2349#define REG_A3XX_TEX_SAMP_1 0x00000001
@@ -2170,6 +2362,7 @@ static inline uint32_t A3XX_TEX_SAMP_1_MIN_LOD(float val)
2170 2362
2171#define REG_A3XX_TEX_CONST_0 0x00000000 2363#define REG_A3XX_TEX_CONST_0 0x00000000
2172#define A3XX_TEX_CONST_0_TILED 0x00000001 2364#define A3XX_TEX_CONST_0_TILED 0x00000001
2365#define A3XX_TEX_CONST_0_SRGB 0x00000004
2173#define A3XX_TEX_CONST_0_SWIZ_X__MASK 0x00000070 2366#define A3XX_TEX_CONST_0_SWIZ_X__MASK 0x00000070
2174#define A3XX_TEX_CONST_0_SWIZ_X__SHIFT 4 2367#define A3XX_TEX_CONST_0_SWIZ_X__SHIFT 4
2175static inline uint32_t A3XX_TEX_CONST_0_SWIZ_X(enum a3xx_tex_swiz val) 2368static inline uint32_t A3XX_TEX_CONST_0_SWIZ_X(enum a3xx_tex_swiz val)
@@ -2206,6 +2399,7 @@ static inline uint32_t A3XX_TEX_CONST_0_FMT(enum a3xx_tex_fmt val)
2206{ 2399{
2207 return ((val) << A3XX_TEX_CONST_0_FMT__SHIFT) & A3XX_TEX_CONST_0_FMT__MASK; 2400 return ((val) << A3XX_TEX_CONST_0_FMT__SHIFT) & A3XX_TEX_CONST_0_FMT__MASK;
2208} 2401}
2402#define A3XX_TEX_CONST_0_NOCONVERT 0x20000000
2209#define A3XX_TEX_CONST_0_TYPE__MASK 0xc0000000 2403#define A3XX_TEX_CONST_0_TYPE__MASK 0xc0000000
2210#define A3XX_TEX_CONST_0_TYPE__SHIFT 30 2404#define A3XX_TEX_CONST_0_TYPE__SHIFT 30
2211static inline uint32_t A3XX_TEX_CONST_0_TYPE(enum a3xx_tex_type val) 2405static inline uint32_t A3XX_TEX_CONST_0_TYPE(enum a3xx_tex_type val)
diff --git a/drivers/gpu/drm/msm/adreno/a3xx_gpu.c b/drivers/gpu/drm/msm/adreno/a3xx_gpu.c
index 942e09d898a8..2773600c9488 100644
--- a/drivers/gpu/drm/msm/adreno/a3xx_gpu.c
+++ b/drivers/gpu/drm/msm/adreno/a3xx_gpu.c
@@ -392,13 +392,10 @@ static const unsigned int a3xx_registers[] = {
392#ifdef CONFIG_DEBUG_FS 392#ifdef CONFIG_DEBUG_FS
393static void a3xx_show(struct msm_gpu *gpu, struct seq_file *m) 393static void a3xx_show(struct msm_gpu *gpu, struct seq_file *m)
394{ 394{
395 struct drm_device *dev = gpu->dev;
396 int i; 395 int i;
397 396
398 adreno_show(gpu, m); 397 adreno_show(gpu, m);
399 398
400 mutex_lock(&dev->struct_mutex);
401
402 gpu->funcs->pm_resume(gpu); 399 gpu->funcs->pm_resume(gpu);
403 400
404 seq_printf(m, "status: %08x\n", 401 seq_printf(m, "status: %08x\n",
@@ -418,8 +415,6 @@ static void a3xx_show(struct msm_gpu *gpu, struct seq_file *m)
418 } 415 }
419 416
420 gpu->funcs->pm_suspend(gpu); 417 gpu->funcs->pm_suspend(gpu);
421
422 mutex_unlock(&dev->struct_mutex);
423} 418}
424#endif 419#endif
425 420
@@ -685,6 +680,8 @@ static int a3xx_remove(struct platform_device *pdev)
685} 680}
686 681
687static const struct of_device_id dt_match[] = { 682static const struct of_device_id dt_match[] = {
683 { .compatible = "qcom,adreno-3xx" },
684 /* for backwards compat w/ downstream kgsl DT files: */
688 { .compatible = "qcom,kgsl-3d0" }, 685 { .compatible = "qcom,kgsl-3d0" },
689 {} 686 {}
690}; 687};
diff --git a/drivers/gpu/drm/msm/adreno/a3xx_gpu.h b/drivers/gpu/drm/msm/adreno/a3xx_gpu.h
index bb9a8ca0507b..85ff66cbddd6 100644
--- a/drivers/gpu/drm/msm/adreno/a3xx_gpu.h
+++ b/drivers/gpu/drm/msm/adreno/a3xx_gpu.h
@@ -19,6 +19,11 @@
19#define __A3XX_GPU_H__ 19#define __A3XX_GPU_H__
20 20
21#include "adreno_gpu.h" 21#include "adreno_gpu.h"
22
23/* arrg, somehow fb.h is getting pulled in: */
24#undef ROP_COPY
25#undef ROP_XOR
26
22#include "a3xx.xml.h" 27#include "a3xx.xml.h"
23 28
24struct a3xx_gpu { 29struct a3xx_gpu {
diff --git a/drivers/gpu/drm/msm/adreno/adreno_common.xml.h b/drivers/gpu/drm/msm/adreno/adreno_common.xml.h
index d6e6ce2d1abd..9de19ac2e86c 100644
--- a/drivers/gpu/drm/msm/adreno/adreno_common.xml.h
+++ b/drivers/gpu/drm/msm/adreno/adreno_common.xml.h
@@ -10,13 +10,13 @@ git clone https://github.com/freedreno/envytools.git
10The rules-ng-ng source files this header was generated from are: 10The rules-ng-ng source files this header was generated from are:
11- /home/robclark/src/freedreno/envytools/rnndb/adreno.xml ( 364 bytes, from 2013-11-30 14:47:15) 11- /home/robclark/src/freedreno/envytools/rnndb/adreno.xml ( 364 bytes, from 2013-11-30 14:47:15)
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/adreno/a2xx.xml ( 32814 bytes, from 2013-11-30 15:07:33) 13- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 32901 bytes, from 2014-06-02 15:21:30)
14- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 8900 bytes, from 2013-10-22 23:57:49) 14- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 9859 bytes, from 2014-06-02 15:21:30)
15- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 10574 bytes, from 2013-11-13 05:44:45) 15- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 14477 bytes, from 2014-05-16 11:51:57)
16- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 53644 bytes, from 2013-11-30 15:07:33) 16- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 58020 bytes, from 2014-06-25 12:57:16)
17- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 8344 bytes, from 2013-11-30 14:49:47) 17- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 26602 bytes, from 2014-06-25 12:57:16)
18 18
19Copyright (C) 2013 by the following authors: 19Copyright (C) 2013-2014 by the following authors:
20- Rob Clark <robdclark@gmail.com> (robclark) 20- Rob Clark <robdclark@gmail.com> (robclark)
21 21
22Permission is hereby granted, free of charge, to any person obtaining 22Permission is hereby granted, free of charge, to any person obtaining
@@ -87,15 +87,6 @@ enum adreno_rb_blend_factor {
87 FACTOR_SRC_ALPHA_SATURATE = 16, 87 FACTOR_SRC_ALPHA_SATURATE = 16,
88}; 88};
89 89
90enum adreno_rb_blend_opcode {
91 BLEND_DST_PLUS_SRC = 0,
92 BLEND_SRC_MINUS_DST = 1,
93 BLEND_MIN_DST_SRC = 2,
94 BLEND_MAX_DST_SRC = 3,
95 BLEND_DST_MINUS_SRC = 4,
96 BLEND_DST_PLUS_SRC_BIAS = 5,
97};
98
99enum adreno_rb_surface_endian { 90enum adreno_rb_surface_endian {
100 ENDIAN_NONE = 0, 91 ENDIAN_NONE = 0,
101 ENDIAN_8IN16 = 1, 92 ENDIAN_8IN16 = 1,
@@ -116,6 +107,39 @@ enum adreno_rb_depth_format {
116 DEPTHX_24_8 = 1, 107 DEPTHX_24_8 = 1,
117}; 108};
118 109
110enum adreno_rb_copy_control_mode {
111 RB_COPY_RESOLVE = 1,
112 RB_COPY_CLEAR = 2,
113 RB_COPY_DEPTH_STENCIL = 5,
114};
115
116enum a3xx_render_mode {
117 RB_RENDERING_PASS = 0,
118 RB_TILING_PASS = 1,
119 RB_RESOLVE_PASS = 2,
120 RB_COMPUTE_PASS = 3,
121};
122
123enum a3xx_msaa_samples {
124 MSAA_ONE = 0,
125 MSAA_TWO = 1,
126 MSAA_FOUR = 2,
127};
128
129enum a3xx_threadmode {
130 MULTI = 0,
131 SINGLE = 1,
132};
133
134enum a3xx_instrbuffermode {
135 BUFFER = 1,
136};
137
138enum a3xx_threadsize {
139 TWO_QUADS = 0,
140 FOUR_QUADS = 1,
141};
142
119#define REG_AXXX_CP_RB_BASE 0x000001c0 143#define REG_AXXX_CP_RB_BASE 0x000001c0
120 144
121#define REG_AXXX_CP_RB_CNTL 0x000001c1 145#define REG_AXXX_CP_RB_CNTL 0x000001c1
@@ -264,6 +288,8 @@ static inline uint32_t AXXX_SCRATCH_UMSK_SWAP(uint32_t val)
264#define REG_AXXX_CP_INT_ACK 0x000001f4 288#define REG_AXXX_CP_INT_ACK 0x000001f4
265 289
266#define REG_AXXX_CP_ME_CNTL 0x000001f6 290#define REG_AXXX_CP_ME_CNTL 0x000001f6
291#define AXXX_CP_ME_CNTL_BUSY 0x20000000
292#define AXXX_CP_ME_CNTL_HALT 0x10000000
267 293
268#define REG_AXXX_CP_ME_STATUS 0x000001f7 294#define REG_AXXX_CP_ME_STATUS 0x000001f7
269 295
diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.c b/drivers/gpu/drm/msm/adreno/adreno_gpu.c
index 28ca8cd8b09e..655ce5b14ad0 100644
--- a/drivers/gpu/drm/msm/adreno/adreno_gpu.c
+++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.c
@@ -91,9 +91,17 @@ int adreno_get_param(struct msm_gpu *gpu, uint32_t param, uint64_t *value)
91int adreno_hw_init(struct msm_gpu *gpu) 91int adreno_hw_init(struct msm_gpu *gpu)
92{ 92{
93 struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu); 93 struct adreno_gpu *adreno_gpu = to_adreno_gpu(gpu);
94 int ret;
94 95
95 DBG("%s", gpu->name); 96 DBG("%s", gpu->name);
96 97
98 ret = msm_gem_get_iova(gpu->rb->bo, gpu->id, &gpu->rb_iova);
99 if (ret) {
100 gpu->rb_iova = 0;
101 dev_err(gpu->dev->dev, "could not map ringbuffer: %d\n", ret);
102 return ret;
103 }
104
97 /* Setup REG_CP_RB_CNTL: */ 105 /* Setup REG_CP_RB_CNTL: */
98 gpu_write(gpu, REG_AXXX_CP_RB_CNTL, 106 gpu_write(gpu, REG_AXXX_CP_RB_CNTL,
99 /* size is log2(quad-words): */ 107 /* size is log2(quad-words): */
@@ -362,8 +370,10 @@ int adreno_gpu_init(struct drm_device *drm, struct platform_device *pdev,
362 return ret; 370 return ret;
363 } 371 }
364 372
373 mutex_lock(&drm->struct_mutex);
365 gpu->memptrs_bo = msm_gem_new(drm, sizeof(*gpu->memptrs), 374 gpu->memptrs_bo = msm_gem_new(drm, sizeof(*gpu->memptrs),
366 MSM_BO_UNCACHED); 375 MSM_BO_UNCACHED);
376 mutex_unlock(&drm->struct_mutex);
367 if (IS_ERR(gpu->memptrs_bo)) { 377 if (IS_ERR(gpu->memptrs_bo)) {
368 ret = PTR_ERR(gpu->memptrs_bo); 378 ret = PTR_ERR(gpu->memptrs_bo);
369 gpu->memptrs_bo = NULL; 379 gpu->memptrs_bo = NULL;
@@ -371,13 +381,13 @@ int adreno_gpu_init(struct drm_device *drm, struct platform_device *pdev,
371 return ret; 381 return ret;
372 } 382 }
373 383
374 gpu->memptrs = msm_gem_vaddr_locked(gpu->memptrs_bo); 384 gpu->memptrs = msm_gem_vaddr(gpu->memptrs_bo);
375 if (!gpu->memptrs) { 385 if (!gpu->memptrs) {
376 dev_err(drm->dev, "could not vmap memptrs\n"); 386 dev_err(drm->dev, "could not vmap memptrs\n");
377 return -ENOMEM; 387 return -ENOMEM;
378 } 388 }
379 389
380 ret = msm_gem_get_iova_locked(gpu->memptrs_bo, gpu->base.id, 390 ret = msm_gem_get_iova(gpu->memptrs_bo, gpu->base.id,
381 &gpu->memptrs_iova); 391 &gpu->memptrs_iova);
382 if (ret) { 392 if (ret) {
383 dev_err(drm->dev, "could not map memptrs: %d\n", ret); 393 dev_err(drm->dev, "could not map memptrs: %d\n", ret);
diff --git a/drivers/gpu/drm/msm/adreno/adreno_pm4.xml.h b/drivers/gpu/drm/msm/adreno/adreno_pm4.xml.h
index ae992c71703f..4eee0ec8f069 100644
--- a/drivers/gpu/drm/msm/adreno/adreno_pm4.xml.h
+++ b/drivers/gpu/drm/msm/adreno/adreno_pm4.xml.h
@@ -10,13 +10,13 @@ git clone https://github.com/freedreno/envytools.git
10The rules-ng-ng source files this header was generated from are: 10The rules-ng-ng source files this header was generated from are:
11- /home/robclark/src/freedreno/envytools/rnndb/adreno.xml ( 364 bytes, from 2013-11-30 14:47:15) 11- /home/robclark/src/freedreno/envytools/rnndb/adreno.xml ( 364 bytes, from 2013-11-30 14:47:15)
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/adreno/a2xx.xml ( 32814 bytes, from 2013-11-30 15:07:33) 13- /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml ( 32901 bytes, from 2014-06-02 15:21:30)
14- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 8900 bytes, from 2013-10-22 23:57:49) 14- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml ( 9859 bytes, from 2014-06-02 15:21:30)
15- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 10574 bytes, from 2013-11-13 05:44:45) 15- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml ( 14477 bytes, from 2014-05-16 11:51:57)
16- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 53644 bytes, from 2013-11-30 15:07:33) 16- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml ( 58020 bytes, from 2014-06-25 12:57:16)
17- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 8344 bytes, from 2013-11-30 14:49:47) 17- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml ( 26602 bytes, from 2014-06-25 12:57:16)
18 18
19Copyright (C) 2013 by the following authors: 19Copyright (C) 2013-2014 by the following authors:
20- Rob Clark <robdclark@gmail.com> (robclark) 20- Rob Clark <robdclark@gmail.com> (robclark)
21 21
22Permission is hereby granted, free of charge, to any person obtaining 22Permission is hereby granted, free of charge, to any person obtaining
@@ -105,6 +105,7 @@ enum pc_di_index_size {
105 105
106enum pc_di_vis_cull_mode { 106enum pc_di_vis_cull_mode {
107 IGNORE_VISIBILITY = 0, 107 IGNORE_VISIBILITY = 0,
108 USE_VISIBILITY = 1,
108}; 109};
109 110
110enum adreno_pm4_packet_type { 111enum adreno_pm4_packet_type {
@@ -163,6 +164,11 @@ enum adreno_pm4_type3_packets {
163 CP_SET_BIN = 76, 164 CP_SET_BIN = 76,
164 CP_TEST_TWO_MEMS = 113, 165 CP_TEST_TWO_MEMS = 113,
165 CP_WAIT_FOR_ME = 19, 166 CP_WAIT_FOR_ME = 19,
167 CP_SET_DRAW_STATE = 67,
168 CP_DRAW_INDX_OFFSET = 56,
169 CP_DRAW_INDIRECT = 40,
170 CP_DRAW_INDX_INDIRECT = 41,
171 CP_DRAW_AUTO = 36,
166 IN_IB_PREFETCH_END = 23, 172 IN_IB_PREFETCH_END = 23,
167 IN_SUBBLK_PREFETCH = 31, 173 IN_SUBBLK_PREFETCH = 31,
168 IN_INSTR_PREFETCH = 32, 174 IN_INSTR_PREFETCH = 32,
@@ -232,6 +238,211 @@ static inline uint32_t CP_LOAD_STATE_1_EXT_SRC_ADDR(uint32_t val)
232 return ((val >> 2) << CP_LOAD_STATE_1_EXT_SRC_ADDR__SHIFT) & CP_LOAD_STATE_1_EXT_SRC_ADDR__MASK; 238 return ((val >> 2) << CP_LOAD_STATE_1_EXT_SRC_ADDR__SHIFT) & CP_LOAD_STATE_1_EXT_SRC_ADDR__MASK;
233} 239}
234 240
241#define REG_CP_DRAW_INDX_0 0x00000000
242#define CP_DRAW_INDX_0_VIZ_QUERY__MASK 0xffffffff
243#define CP_DRAW_INDX_0_VIZ_QUERY__SHIFT 0
244static inline uint32_t CP_DRAW_INDX_0_VIZ_QUERY(uint32_t val)
245{
246 return ((val) << CP_DRAW_INDX_0_VIZ_QUERY__SHIFT) & CP_DRAW_INDX_0_VIZ_QUERY__MASK;
247}
248
249#define REG_CP_DRAW_INDX_1 0x00000001
250#define CP_DRAW_INDX_1_PRIM_TYPE__MASK 0x0000003f
251#define CP_DRAW_INDX_1_PRIM_TYPE__SHIFT 0
252static inline uint32_t CP_DRAW_INDX_1_PRIM_TYPE(enum pc_di_primtype val)
253{
254 return ((val) << CP_DRAW_INDX_1_PRIM_TYPE__SHIFT) & CP_DRAW_INDX_1_PRIM_TYPE__MASK;
255}
256#define CP_DRAW_INDX_1_SOURCE_SELECT__MASK 0x000000c0
257#define CP_DRAW_INDX_1_SOURCE_SELECT__SHIFT 6
258static inline uint32_t CP_DRAW_INDX_1_SOURCE_SELECT(enum pc_di_src_sel val)
259{
260 return ((val) << CP_DRAW_INDX_1_SOURCE_SELECT__SHIFT) & CP_DRAW_INDX_1_SOURCE_SELECT__MASK;
261}
262#define CP_DRAW_INDX_1_VIS_CULL__MASK 0x00000600
263#define CP_DRAW_INDX_1_VIS_CULL__SHIFT 9
264static inline uint32_t CP_DRAW_INDX_1_VIS_CULL(enum pc_di_vis_cull_mode val)
265{
266 return ((val) << CP_DRAW_INDX_1_VIS_CULL__SHIFT) & CP_DRAW_INDX_1_VIS_CULL__MASK;
267}
268#define CP_DRAW_INDX_1_INDEX_SIZE__MASK 0x00000800
269#define CP_DRAW_INDX_1_INDEX_SIZE__SHIFT 11
270static inline uint32_t CP_DRAW_INDX_1_INDEX_SIZE(enum pc_di_index_size val)
271{
272 return ((val) << CP_DRAW_INDX_1_INDEX_SIZE__SHIFT) & CP_DRAW_INDX_1_INDEX_SIZE__MASK;
273}
274#define CP_DRAW_INDX_1_NOT_EOP 0x00001000
275#define CP_DRAW_INDX_1_SMALL_INDEX 0x00002000
276#define CP_DRAW_INDX_1_PRE_DRAW_INITIATOR_ENABLE 0x00004000
277#define CP_DRAW_INDX_1_NUM_INDICES__MASK 0xffff0000
278#define CP_DRAW_INDX_1_NUM_INDICES__SHIFT 16
279static inline uint32_t CP_DRAW_INDX_1_NUM_INDICES(uint32_t val)
280{
281 return ((val) << CP_DRAW_INDX_1_NUM_INDICES__SHIFT) & CP_DRAW_INDX_1_NUM_INDICES__MASK;
282}
283
284#define REG_CP_DRAW_INDX_2 0x00000002
285#define CP_DRAW_INDX_2_NUM_INDICES__MASK 0xffffffff
286#define CP_DRAW_INDX_2_NUM_INDICES__SHIFT 0
287static inline uint32_t CP_DRAW_INDX_2_NUM_INDICES(uint32_t val)
288{
289 return ((val) << CP_DRAW_INDX_2_NUM_INDICES__SHIFT) & CP_DRAW_INDX_2_NUM_INDICES__MASK;
290}
291
292#define REG_CP_DRAW_INDX_2 0x00000002
293#define CP_DRAW_INDX_2_INDX_BASE__MASK 0xffffffff
294#define CP_DRAW_INDX_2_INDX_BASE__SHIFT 0
295static inline uint32_t CP_DRAW_INDX_2_INDX_BASE(uint32_t val)
296{
297 return ((val) << CP_DRAW_INDX_2_INDX_BASE__SHIFT) & CP_DRAW_INDX_2_INDX_BASE__MASK;
298}
299
300#define REG_CP_DRAW_INDX_2 0x00000002
301#define CP_DRAW_INDX_2_INDX_SIZE__MASK 0xffffffff
302#define CP_DRAW_INDX_2_INDX_SIZE__SHIFT 0
303static inline uint32_t CP_DRAW_INDX_2_INDX_SIZE(uint32_t val)
304{
305 return ((val) << CP_DRAW_INDX_2_INDX_SIZE__SHIFT) & CP_DRAW_INDX_2_INDX_SIZE__MASK;
306}
307
308#define REG_CP_DRAW_INDX_2_0 0x00000000
309#define CP_DRAW_INDX_2_0_VIZ_QUERY__MASK 0xffffffff
310#define CP_DRAW_INDX_2_0_VIZ_QUERY__SHIFT 0
311static inline uint32_t CP_DRAW_INDX_2_0_VIZ_QUERY(uint32_t val)
312{
313 return ((val) << CP_DRAW_INDX_2_0_VIZ_QUERY__SHIFT) & CP_DRAW_INDX_2_0_VIZ_QUERY__MASK;
314}
315
316#define REG_CP_DRAW_INDX_2_1 0x00000001
317#define CP_DRAW_INDX_2_1_PRIM_TYPE__MASK 0x0000003f
318#define CP_DRAW_INDX_2_1_PRIM_TYPE__SHIFT 0
319static inline uint32_t CP_DRAW_INDX_2_1_PRIM_TYPE(enum pc_di_primtype val)
320{
321 return ((val) << CP_DRAW_INDX_2_1_PRIM_TYPE__SHIFT) & CP_DRAW_INDX_2_1_PRIM_TYPE__MASK;
322}
323#define CP_DRAW_INDX_2_1_SOURCE_SELECT__MASK 0x000000c0
324#define CP_DRAW_INDX_2_1_SOURCE_SELECT__SHIFT 6
325static inline uint32_t CP_DRAW_INDX_2_1_SOURCE_SELECT(enum pc_di_src_sel val)
326{
327 return ((val) << CP_DRAW_INDX_2_1_SOURCE_SELECT__SHIFT) & CP_DRAW_INDX_2_1_SOURCE_SELECT__MASK;
328}
329#define CP_DRAW_INDX_2_1_VIS_CULL__MASK 0x00000600
330#define CP_DRAW_INDX_2_1_VIS_CULL__SHIFT 9
331static inline uint32_t CP_DRAW_INDX_2_1_VIS_CULL(enum pc_di_vis_cull_mode val)
332{
333 return ((val) << CP_DRAW_INDX_2_1_VIS_CULL__SHIFT) & CP_DRAW_INDX_2_1_VIS_CULL__MASK;
334}
335#define CP_DRAW_INDX_2_1_INDEX_SIZE__MASK 0x00000800
336#define CP_DRAW_INDX_2_1_INDEX_SIZE__SHIFT 11
337static inline uint32_t CP_DRAW_INDX_2_1_INDEX_SIZE(enum pc_di_index_size val)
338{
339 return ((val) << CP_DRAW_INDX_2_1_INDEX_SIZE__SHIFT) & CP_DRAW_INDX_2_1_INDEX_SIZE__MASK;
340}
341#define CP_DRAW_INDX_2_1_NOT_EOP 0x00001000
342#define CP_DRAW_INDX_2_1_SMALL_INDEX 0x00002000
343#define CP_DRAW_INDX_2_1_PRE_DRAW_INITIATOR_ENABLE 0x00004000
344#define CP_DRAW_INDX_2_1_NUM_INDICES__MASK 0xffff0000
345#define CP_DRAW_INDX_2_1_NUM_INDICES__SHIFT 16
346static inline uint32_t CP_DRAW_INDX_2_1_NUM_INDICES(uint32_t val)
347{
348 return ((val) << CP_DRAW_INDX_2_1_NUM_INDICES__SHIFT) & CP_DRAW_INDX_2_1_NUM_INDICES__MASK;
349}
350
351#define REG_CP_DRAW_INDX_2_2 0x00000002
352#define CP_DRAW_INDX_2_2_NUM_INDICES__MASK 0xffffffff
353#define CP_DRAW_INDX_2_2_NUM_INDICES__SHIFT 0
354static inline uint32_t CP_DRAW_INDX_2_2_NUM_INDICES(uint32_t val)
355{
356 return ((val) << CP_DRAW_INDX_2_2_NUM_INDICES__SHIFT) & CP_DRAW_INDX_2_2_NUM_INDICES__MASK;
357}
358
359#define REG_CP_DRAW_INDX_OFFSET_0 0x00000000
360#define CP_DRAW_INDX_OFFSET_0_PRIM_TYPE__MASK 0x0000003f
361#define CP_DRAW_INDX_OFFSET_0_PRIM_TYPE__SHIFT 0
362static inline uint32_t CP_DRAW_INDX_OFFSET_0_PRIM_TYPE(enum pc_di_primtype val)
363{
364 return ((val) << CP_DRAW_INDX_OFFSET_0_PRIM_TYPE__SHIFT) & CP_DRAW_INDX_OFFSET_0_PRIM_TYPE__MASK;
365}
366#define CP_DRAW_INDX_OFFSET_0_SOURCE_SELECT__MASK 0x000000c0
367#define CP_DRAW_INDX_OFFSET_0_SOURCE_SELECT__SHIFT 6
368static inline uint32_t CP_DRAW_INDX_OFFSET_0_SOURCE_SELECT(enum pc_di_src_sel val)
369{
370 return ((val) << CP_DRAW_INDX_OFFSET_0_SOURCE_SELECT__SHIFT) & CP_DRAW_INDX_OFFSET_0_SOURCE_SELECT__MASK;
371}
372#define CP_DRAW_INDX_OFFSET_0_VIS_CULL__MASK 0x00000700
373#define CP_DRAW_INDX_OFFSET_0_VIS_CULL__SHIFT 8
374static inline uint32_t CP_DRAW_INDX_OFFSET_0_VIS_CULL(enum pc_di_vis_cull_mode val)
375{
376 return ((val) << CP_DRAW_INDX_OFFSET_0_VIS_CULL__SHIFT) & CP_DRAW_INDX_OFFSET_0_VIS_CULL__MASK;
377}
378#define CP_DRAW_INDX_OFFSET_0_INDEX_SIZE__MASK 0x00000800
379#define CP_DRAW_INDX_OFFSET_0_INDEX_SIZE__SHIFT 11
380static inline uint32_t CP_DRAW_INDX_OFFSET_0_INDEX_SIZE(enum pc_di_index_size val)
381{
382 return ((val) << CP_DRAW_INDX_OFFSET_0_INDEX_SIZE__SHIFT) & CP_DRAW_INDX_OFFSET_0_INDEX_SIZE__MASK;
383}
384#define CP_DRAW_INDX_OFFSET_0_NOT_EOP 0x00001000
385#define CP_DRAW_INDX_OFFSET_0_SMALL_INDEX 0x00002000
386#define CP_DRAW_INDX_OFFSET_0_PRE_DRAW_INITIATOR_ENABLE 0x00004000
387#define CP_DRAW_INDX_OFFSET_0_NUM_INDICES__MASK 0xffff0000
388#define CP_DRAW_INDX_OFFSET_0_NUM_INDICES__SHIFT 16
389static inline uint32_t CP_DRAW_INDX_OFFSET_0_NUM_INDICES(uint32_t val)
390{
391 return ((val) << CP_DRAW_INDX_OFFSET_0_NUM_INDICES__SHIFT) & CP_DRAW_INDX_OFFSET_0_NUM_INDICES__MASK;
392}
393
394#define REG_CP_DRAW_INDX_OFFSET_1 0x00000001
395
396#define REG_CP_DRAW_INDX_OFFSET_2 0x00000002
397#define CP_DRAW_INDX_OFFSET_2_NUM_INDICES__MASK 0xffffffff
398#define CP_DRAW_INDX_OFFSET_2_NUM_INDICES__SHIFT 0
399static inline uint32_t CP_DRAW_INDX_OFFSET_2_NUM_INDICES(uint32_t val)
400{
401 return ((val) << CP_DRAW_INDX_OFFSET_2_NUM_INDICES__SHIFT) & CP_DRAW_INDX_OFFSET_2_NUM_INDICES__MASK;
402}
403
404#define REG_CP_DRAW_INDX_OFFSET_2 0x00000002
405#define CP_DRAW_INDX_OFFSET_2_INDX_BASE__MASK 0xffffffff
406#define CP_DRAW_INDX_OFFSET_2_INDX_BASE__SHIFT 0
407static inline uint32_t CP_DRAW_INDX_OFFSET_2_INDX_BASE(uint32_t val)
408{
409 return ((val) << CP_DRAW_INDX_OFFSET_2_INDX_BASE__SHIFT) & CP_DRAW_INDX_OFFSET_2_INDX_BASE__MASK;
410}
411
412#define REG_CP_DRAW_INDX_OFFSET_2 0x00000002
413#define CP_DRAW_INDX_OFFSET_2_INDX_SIZE__MASK 0xffffffff
414#define CP_DRAW_INDX_OFFSET_2_INDX_SIZE__SHIFT 0
415static inline uint32_t CP_DRAW_INDX_OFFSET_2_INDX_SIZE(uint32_t val)
416{
417 return ((val) << CP_DRAW_INDX_OFFSET_2_INDX_SIZE__SHIFT) & CP_DRAW_INDX_OFFSET_2_INDX_SIZE__MASK;
418}
419
420#define REG_CP_SET_DRAW_STATE_0 0x00000000
421#define CP_SET_DRAW_STATE_0_COUNT__MASK 0x0000ffff
422#define CP_SET_DRAW_STATE_0_COUNT__SHIFT 0
423static inline uint32_t CP_SET_DRAW_STATE_0_COUNT(uint32_t val)
424{
425 return ((val) << CP_SET_DRAW_STATE_0_COUNT__SHIFT) & CP_SET_DRAW_STATE_0_COUNT__MASK;
426}
427#define CP_SET_DRAW_STATE_0_DIRTY 0x00010000
428#define CP_SET_DRAW_STATE_0_DISABLE 0x00020000
429#define CP_SET_DRAW_STATE_0_DISABLE_ALL_GROUPS 0x00040000
430#define CP_SET_DRAW_STATE_0_LOAD_IMMED 0x00080000
431#define CP_SET_DRAW_STATE_0_GROUP_ID__MASK 0x1f000000
432#define CP_SET_DRAW_STATE_0_GROUP_ID__SHIFT 24
433static inline uint32_t CP_SET_DRAW_STATE_0_GROUP_ID(uint32_t val)
434{
435 return ((val) << CP_SET_DRAW_STATE_0_GROUP_ID__SHIFT) & CP_SET_DRAW_STATE_0_GROUP_ID__MASK;
436}
437
438#define REG_CP_SET_DRAW_STATE_1 0x00000001
439#define CP_SET_DRAW_STATE_1_ADDR__MASK 0xffffffff
440#define CP_SET_DRAW_STATE_1_ADDR__SHIFT 0
441static inline uint32_t CP_SET_DRAW_STATE_1_ADDR(uint32_t val)
442{
443 return ((val) << CP_SET_DRAW_STATE_1_ADDR__SHIFT) & CP_SET_DRAW_STATE_1_ADDR__MASK;
444}
445
235#define REG_CP_SET_BIN_0 0x00000000 446#define REG_CP_SET_BIN_0 0x00000000
236 447
237#define REG_CP_SET_BIN_1 0x00000001 448#define REG_CP_SET_BIN_1 0x00000001
@@ -262,5 +473,21 @@ static inline uint32_t CP_SET_BIN_2_Y2(uint32_t val)
262 return ((val) << CP_SET_BIN_2_Y2__SHIFT) & CP_SET_BIN_2_Y2__MASK; 473 return ((val) << CP_SET_BIN_2_Y2__SHIFT) & CP_SET_BIN_2_Y2__MASK;
263} 474}
264 475
476#define REG_CP_SET_BIN_DATA_0 0x00000000
477#define CP_SET_BIN_DATA_0_BIN_DATA_ADDR__MASK 0xffffffff
478#define CP_SET_BIN_DATA_0_BIN_DATA_ADDR__SHIFT 0
479static inline uint32_t CP_SET_BIN_DATA_0_BIN_DATA_ADDR(uint32_t val)
480{
481 return ((val) << CP_SET_BIN_DATA_0_BIN_DATA_ADDR__SHIFT) & CP_SET_BIN_DATA_0_BIN_DATA_ADDR__MASK;
482}
483
484#define REG_CP_SET_BIN_DATA_1 0x00000001
485#define CP_SET_BIN_DATA_1_BIN_SIZE_ADDRESS__MASK 0xffffffff
486#define CP_SET_BIN_DATA_1_BIN_SIZE_ADDRESS__SHIFT 0
487static inline uint32_t CP_SET_BIN_DATA_1_BIN_SIZE_ADDRESS(uint32_t val)
488{
489 return ((val) << CP_SET_BIN_DATA_1_BIN_SIZE_ADDRESS__SHIFT) & CP_SET_BIN_DATA_1_BIN_SIZE_ADDRESS__MASK;
490}
491
265 492
266#endif /* ADRENO_PM4_XML */ 493#endif /* ADRENO_PM4_XML */
diff --git a/drivers/gpu/drm/msm/dsi/dsi.xml.h b/drivers/gpu/drm/msm/dsi/dsi.xml.h
index 87be647e3825..0f1f5b9459a5 100644
--- a/drivers/gpu/drm/msm/dsi/dsi.xml.h
+++ b/drivers/gpu/drm/msm/dsi/dsi.xml.h
@@ -12,12 +12,12 @@ The rules-ng-ng source files this header was generated from are:
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/mdp/mdp4.xml ( 17996 bytes, from 2013-12-01 19:10:31) 13- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp4.xml ( 17996 bytes, from 2013-12-01 19:10:31)
14- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml ( 1615 bytes, from 2013-11-30 15:00:52) 14- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml ( 1615 bytes, from 2013-11-30 15:00:52)
15- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml ( 22517 bytes, from 2013-12-03 20:59:13) 15- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml ( 22517 bytes, from 2014-06-25 12:55:02)
16- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 11712 bytes, from 2013-08-17 17:13:43) 16- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 11712 bytes, from 2013-08-17 17:13:43)
17- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 344 bytes, from 2013-08-11 19:26:32) 17- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 344 bytes, from 2013-08-11 19:26:32)
18- /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1544 bytes, from 2013-08-16 19:17:05) 18- /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1544 bytes, from 2013-08-16 19:17:05)
19- /home/robclark/src/freedreno/envytools/rnndb/hdmi/qfprom.xml ( 600 bytes, from 2013-07-05 19:21:12) 19- /home/robclark/src/freedreno/envytools/rnndb/hdmi/qfprom.xml ( 600 bytes, from 2013-07-05 19:21:12)
20- /home/robclark/src/freedreno/envytools/rnndb/hdmi/hdmi.xml ( 20932 bytes, from 2013-12-01 15:13:04) 20- /home/robclark/src/freedreno/envytools/rnndb/hdmi/hdmi.xml ( 23613 bytes, from 2014-06-25 12:53:44)
21 21
22Copyright (C) 2013 by the following authors: 22Copyright (C) 2013 by the following authors:
23- Rob Clark <robdclark@gmail.com> (robclark) 23- Rob Clark <robdclark@gmail.com> (robclark)
diff --git a/drivers/gpu/drm/msm/dsi/mmss_cc.xml.h b/drivers/gpu/drm/msm/dsi/mmss_cc.xml.h
index 747a6ef4211f..d468f86f637c 100644
--- a/drivers/gpu/drm/msm/dsi/mmss_cc.xml.h
+++ b/drivers/gpu/drm/msm/dsi/mmss_cc.xml.h
@@ -12,12 +12,12 @@ The rules-ng-ng source files this header was generated from are:
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/mdp/mdp4.xml ( 17996 bytes, from 2013-12-01 19:10:31) 13- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp4.xml ( 17996 bytes, from 2013-12-01 19:10:31)
14- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml ( 1615 bytes, from 2013-11-30 15:00:52) 14- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml ( 1615 bytes, from 2013-11-30 15:00:52)
15- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml ( 22517 bytes, from 2013-12-03 20:59:13) 15- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml ( 22517 bytes, from 2014-06-25 12:55:02)
16- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 11712 bytes, from 2013-08-17 17:13:43) 16- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 11712 bytes, from 2013-08-17 17:13:43)
17- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 344 bytes, from 2013-08-11 19:26:32) 17- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 344 bytes, from 2013-08-11 19:26:32)
18- /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1544 bytes, from 2013-08-16 19:17:05) 18- /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1544 bytes, from 2013-08-16 19:17:05)
19- /home/robclark/src/freedreno/envytools/rnndb/hdmi/qfprom.xml ( 600 bytes, from 2013-07-05 19:21:12) 19- /home/robclark/src/freedreno/envytools/rnndb/hdmi/qfprom.xml ( 600 bytes, from 2013-07-05 19:21:12)
20- /home/robclark/src/freedreno/envytools/rnndb/hdmi/hdmi.xml ( 20932 bytes, from 2013-12-01 15:13:04) 20- /home/robclark/src/freedreno/envytools/rnndb/hdmi/hdmi.xml ( 23613 bytes, from 2014-06-25 12:53:44)
21 21
22Copyright (C) 2013 by the following authors: 22Copyright (C) 2013 by the following authors:
23- Rob Clark <robdclark@gmail.com> (robclark) 23- Rob Clark <robdclark@gmail.com> (robclark)
diff --git a/drivers/gpu/drm/msm/dsi/sfpb.xml.h b/drivers/gpu/drm/msm/dsi/sfpb.xml.h
index 48e03acf19bf..da8740054cdf 100644
--- a/drivers/gpu/drm/msm/dsi/sfpb.xml.h
+++ b/drivers/gpu/drm/msm/dsi/sfpb.xml.h
@@ -12,12 +12,12 @@ The rules-ng-ng source files this header was generated from are:
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/mdp/mdp4.xml ( 17996 bytes, from 2013-12-01 19:10:31) 13- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp4.xml ( 17996 bytes, from 2013-12-01 19:10:31)
14- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml ( 1615 bytes, from 2013-11-30 15:00:52) 14- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml ( 1615 bytes, from 2013-11-30 15:00:52)
15- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml ( 22517 bytes, from 2013-12-03 20:59:13) 15- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml ( 22517 bytes, from 2014-06-25 12:55:02)
16- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 11712 bytes, from 2013-08-17 17:13:43) 16- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 11712 bytes, from 2013-08-17 17:13:43)
17- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 344 bytes, from 2013-08-11 19:26:32) 17- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 344 bytes, from 2013-08-11 19:26:32)
18- /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1544 bytes, from 2013-08-16 19:17:05) 18- /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1544 bytes, from 2013-08-16 19:17:05)
19- /home/robclark/src/freedreno/envytools/rnndb/hdmi/qfprom.xml ( 600 bytes, from 2013-07-05 19:21:12) 19- /home/robclark/src/freedreno/envytools/rnndb/hdmi/qfprom.xml ( 600 bytes, from 2013-07-05 19:21:12)
20- /home/robclark/src/freedreno/envytools/rnndb/hdmi/hdmi.xml ( 20932 bytes, from 2013-12-01 15:13:04) 20- /home/robclark/src/freedreno/envytools/rnndb/hdmi/hdmi.xml ( 23613 bytes, from 2014-06-25 12:53:44)
21 21
22Copyright (C) 2013 by the following authors: 22Copyright (C) 2013 by the following authors:
23- Rob Clark <robdclark@gmail.com> (robclark) 23- Rob Clark <robdclark@gmail.com> (robclark)
diff --git a/drivers/gpu/drm/msm/hdmi/hdmi.c b/drivers/gpu/drm/msm/hdmi/hdmi.c
index 7f7aadef8a82..a125a7e32742 100644
--- a/drivers/gpu/drm/msm/hdmi/hdmi.c
+++ b/drivers/gpu/drm/msm/hdmi/hdmi.c
@@ -123,7 +123,8 @@ struct hdmi *hdmi_init(struct drm_device *dev, struct drm_encoder *encoder)
123 for (i = 0; i < config->hpd_reg_cnt; i++) { 123 for (i = 0; i < config->hpd_reg_cnt; i++) {
124 struct regulator *reg; 124 struct regulator *reg;
125 125
126 reg = devm_regulator_get(&pdev->dev, config->hpd_reg_names[i]); 126 reg = devm_regulator_get_exclusive(&pdev->dev,
127 config->hpd_reg_names[i]);
127 if (IS_ERR(reg)) { 128 if (IS_ERR(reg)) {
128 ret = PTR_ERR(reg); 129 ret = PTR_ERR(reg);
129 dev_err(dev->dev, "failed to get hpd regulator: %s (%d)\n", 130 dev_err(dev->dev, "failed to get hpd regulator: %s (%d)\n",
@@ -138,7 +139,8 @@ struct hdmi *hdmi_init(struct drm_device *dev, struct drm_encoder *encoder)
138 for (i = 0; i < config->pwr_reg_cnt; i++) { 139 for (i = 0; i < config->pwr_reg_cnt; i++) {
139 struct regulator *reg; 140 struct regulator *reg;
140 141
141 reg = devm_regulator_get(&pdev->dev, config->pwr_reg_names[i]); 142 reg = devm_regulator_get_exclusive(&pdev->dev,
143 config->pwr_reg_names[i]);
142 if (IS_ERR(reg)) { 144 if (IS_ERR(reg)) {
143 ret = PTR_ERR(reg); 145 ret = PTR_ERR(reg);
144 dev_err(dev->dev, "failed to get pwr regulator: %s (%d)\n", 146 dev_err(dev->dev, "failed to get pwr regulator: %s (%d)\n",
@@ -266,37 +268,56 @@ static int hdmi_bind(struct device *dev, struct device *master, void *data)
266 { 268 {
267 int gpio = of_get_named_gpio(of_node, name, 0); 269 int gpio = of_get_named_gpio(of_node, name, 0);
268 if (gpio < 0) { 270 if (gpio < 0) {
269 dev_err(dev, "failed to get gpio: %s (%d)\n", 271 char name2[32];
270 name, gpio); 272 snprintf(name2, sizeof(name2), "%s-gpio", name);
271 gpio = -1; 273 gpio = of_get_named_gpio(of_node, name2, 0);
274 if (gpio < 0) {
275 dev_err(dev, "failed to get gpio: %s (%d)\n",
276 name, gpio);
277 gpio = -1;
278 }
272 } 279 }
273 return gpio; 280 return gpio;
274 } 281 }
275 282
276 /* TODO actually use DT.. */ 283 if (of_device_is_compatible(of_node, "qcom,hdmi-tx-8074")) {
277 static const char *hpd_reg_names[] = {"hpd-gdsc", "hpd-5v"}; 284 static const char *hpd_reg_names[] = {"hpd-gdsc", "hpd-5v"};
278 static const char *pwr_reg_names[] = {"core-vdda", "core-vcc"}; 285 static const char *pwr_reg_names[] = {"core-vdda", "core-vcc"};
279 static const char *hpd_clk_names[] = {"iface_clk", "core_clk", "mdp_core_clk"}; 286 static const char *hpd_clk_names[] = {"iface_clk", "core_clk", "mdp_core_clk"};
280 static unsigned long hpd_clk_freq[] = {0, 19200000, 0}; 287 static unsigned long hpd_clk_freq[] = {0, 19200000, 0};
281 static const char *pwr_clk_names[] = {"extp_clk", "alt_iface_clk"}; 288 static const char *pwr_clk_names[] = {"extp_clk", "alt_iface_clk"};
289 config.phy_init = hdmi_phy_8x74_init;
290 config.hpd_reg_names = hpd_reg_names;
291 config.hpd_reg_cnt = ARRAY_SIZE(hpd_reg_names);
292 config.pwr_reg_names = pwr_reg_names;
293 config.pwr_reg_cnt = ARRAY_SIZE(pwr_reg_names);
294 config.hpd_clk_names = hpd_clk_names;
295 config.hpd_freq = hpd_clk_freq;
296 config.hpd_clk_cnt = ARRAY_SIZE(hpd_clk_names);
297 config.pwr_clk_names = pwr_clk_names;
298 config.pwr_clk_cnt = ARRAY_SIZE(pwr_clk_names);
299 config.shared_irq = true;
300 } else if (of_device_is_compatible(of_node, "qcom,hdmi-tx-8960")) {
301 static const char *hpd_clk_names[] = {"core_clk", "master_iface_clk", "slave_iface_clk"};
302 static const char *hpd_reg_names[] = {"core-vdda", "hdmi-mux"};
303 config.phy_init = hdmi_phy_8960_init;
304 config.hpd_reg_names = hpd_reg_names;
305 config.hpd_reg_cnt = ARRAY_SIZE(hpd_reg_names);
306 config.hpd_clk_names = hpd_clk_names;
307 config.hpd_clk_cnt = ARRAY_SIZE(hpd_clk_names);
308 } else if (of_device_is_compatible(of_node, "qcom,hdmi-tx-8660")) {
309 config.phy_init = hdmi_phy_8x60_init;
310 } else {
311 dev_err(dev, "unknown phy: %s\n", of_node->name);
312 }
282 313
283 config.phy_init = hdmi_phy_8x74_init;
284 config.mmio_name = "core_physical"; 314 config.mmio_name = "core_physical";
285 config.hpd_reg_names = hpd_reg_names;
286 config.hpd_reg_cnt = ARRAY_SIZE(hpd_reg_names);
287 config.pwr_reg_names = pwr_reg_names;
288 config.pwr_reg_cnt = ARRAY_SIZE(pwr_reg_names);
289 config.hpd_clk_names = hpd_clk_names;
290 config.hpd_freq = hpd_clk_freq;
291 config.hpd_clk_cnt = ARRAY_SIZE(hpd_clk_names);
292 config.pwr_clk_names = pwr_clk_names;
293 config.pwr_clk_cnt = ARRAY_SIZE(pwr_clk_names);
294 config.ddc_clk_gpio = get_gpio("qcom,hdmi-tx-ddc-clk"); 315 config.ddc_clk_gpio = get_gpio("qcom,hdmi-tx-ddc-clk");
295 config.ddc_data_gpio = get_gpio("qcom,hdmi-tx-ddc-data"); 316 config.ddc_data_gpio = get_gpio("qcom,hdmi-tx-ddc-data");
296 config.hpd_gpio = get_gpio("qcom,hdmi-tx-hpd"); 317 config.hpd_gpio = get_gpio("qcom,hdmi-tx-hpd");
297 config.mux_en_gpio = get_gpio("qcom,hdmi-tx-mux-en"); 318 config.mux_en_gpio = get_gpio("qcom,hdmi-tx-mux-en");
298 config.mux_sel_gpio = get_gpio("qcom,hdmi-tx-mux-sel"); 319 config.mux_sel_gpio = get_gpio("qcom,hdmi-tx-mux-sel");
299 config.shared_irq = true; 320 config.mux_lpm_gpio = get_gpio("qcom,hdmi-tx-mux-lpm");
300 321
301#else 322#else
302 static const char *hpd_clk_names[] = { 323 static const char *hpd_clk_names[] = {
@@ -373,7 +394,9 @@ static int hdmi_dev_remove(struct platform_device *pdev)
373} 394}
374 395
375static const struct of_device_id dt_match[] = { 396static const struct of_device_id dt_match[] = {
376 { .compatible = "qcom,hdmi-tx" }, 397 { .compatible = "qcom,hdmi-tx-8074" },
398 { .compatible = "qcom,hdmi-tx-8960" },
399 { .compatible = "qcom,hdmi-tx-8660" },
377 {} 400 {}
378}; 401};
379 402
diff --git a/drivers/gpu/drm/msm/hdmi/hdmi.h b/drivers/gpu/drm/msm/hdmi/hdmi.h
index 9d7723c6528a..b981995410b5 100644
--- a/drivers/gpu/drm/msm/hdmi/hdmi.h
+++ b/drivers/gpu/drm/msm/hdmi/hdmi.h
@@ -96,6 +96,7 @@ struct hdmi_platform_config {
96 96
97 /* gpio's: */ 97 /* gpio's: */
98 int ddc_clk_gpio, ddc_data_gpio, hpd_gpio, mux_en_gpio, mux_sel_gpio; 98 int ddc_clk_gpio, ddc_data_gpio, hpd_gpio, mux_en_gpio, mux_sel_gpio;
99 int mux_lpm_gpio;
99 100
100 /* older devices had their own irq, mdp5+ it is shared w/ mdp: */ 101 /* older devices had their own irq, mdp5+ it is shared w/ mdp: */
101 bool shared_irq; 102 bool shared_irq;
diff --git a/drivers/gpu/drm/msm/hdmi/hdmi.xml.h b/drivers/gpu/drm/msm/hdmi/hdmi.xml.h
index e2636582cfd7..e89fe053d375 100644
--- a/drivers/gpu/drm/msm/hdmi/hdmi.xml.h
+++ b/drivers/gpu/drm/msm/hdmi/hdmi.xml.h
@@ -12,14 +12,14 @@ The rules-ng-ng source files this header was generated from are:
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/mdp/mdp4.xml ( 17996 bytes, from 2013-12-01 19:10:31) 13- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp4.xml ( 17996 bytes, from 2013-12-01 19:10:31)
14- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml ( 1615 bytes, from 2013-11-30 15:00:52) 14- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml ( 1615 bytes, from 2013-11-30 15:00:52)
15- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml ( 22517 bytes, from 2013-12-03 20:59:13) 15- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml ( 22517 bytes, from 2014-06-25 12:55:02)
16- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 11712 bytes, from 2013-08-17 17:13:43) 16- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 11712 bytes, from 2013-08-17 17:13:43)
17- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 344 bytes, from 2013-08-11 19:26:32) 17- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 344 bytes, from 2013-08-11 19:26:32)
18- /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1544 bytes, from 2013-08-16 19:17:05) 18- /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1544 bytes, from 2013-08-16 19:17:05)
19- /home/robclark/src/freedreno/envytools/rnndb/hdmi/qfprom.xml ( 600 bytes, from 2013-07-05 19:21:12) 19- /home/robclark/src/freedreno/envytools/rnndb/hdmi/qfprom.xml ( 600 bytes, from 2013-07-05 19:21:12)
20- /home/robclark/src/freedreno/envytools/rnndb/hdmi/hdmi.xml ( 20932 bytes, from 2013-12-01 15:13:04) 20- /home/robclark/src/freedreno/envytools/rnndb/hdmi/hdmi.xml ( 23613 bytes, from 2014-06-25 12:53:44)
21 21
22Copyright (C) 2013 by the following authors: 22Copyright (C) 2013-2014 by the following authors:
23- Rob Clark <robdclark@gmail.com> (robclark) 23- Rob Clark <robdclark@gmail.com> (robclark)
24 24
25Permission is hereby granted, free of charge, to any person obtaining 25Permission is hereby granted, free of charge, to any person obtaining
@@ -148,9 +148,9 @@ static inline uint32_t REG_HDMI_GENERIC0(uint32_t i0) { return 0x00000088 + 0x4*
148 148
149static inline uint32_t REG_HDMI_GENERIC1(uint32_t i0) { return 0x000000a8 + 0x4*i0; } 149static inline uint32_t REG_HDMI_GENERIC1(uint32_t i0) { return 0x000000a8 + 0x4*i0; }
150 150
151static inline uint32_t REG_HDMI_ACR(uint32_t i0) { return 0x000000c4 + 0x8*i0; } 151static inline uint32_t REG_HDMI_ACR(enum hdmi_acr_cts i0) { return 0x000000c4 + 0x8*i0; }
152 152
153static inline uint32_t REG_HDMI_ACR_0(uint32_t i0) { return 0x000000c4 + 0x8*i0; } 153static inline uint32_t REG_HDMI_ACR_0(enum hdmi_acr_cts i0) { return 0x000000c4 + 0x8*i0; }
154#define HDMI_ACR_0_CTS__MASK 0xfffff000 154#define HDMI_ACR_0_CTS__MASK 0xfffff000
155#define HDMI_ACR_0_CTS__SHIFT 12 155#define HDMI_ACR_0_CTS__SHIFT 12
156static inline uint32_t HDMI_ACR_0_CTS(uint32_t val) 156static inline uint32_t HDMI_ACR_0_CTS(uint32_t val)
@@ -158,7 +158,7 @@ static inline uint32_t HDMI_ACR_0_CTS(uint32_t val)
158 return ((val) << HDMI_ACR_0_CTS__SHIFT) & HDMI_ACR_0_CTS__MASK; 158 return ((val) << HDMI_ACR_0_CTS__SHIFT) & HDMI_ACR_0_CTS__MASK;
159} 159}
160 160
161static inline uint32_t REG_HDMI_ACR_1(uint32_t i0) { return 0x000000c8 + 0x8*i0; } 161static inline uint32_t REG_HDMI_ACR_1(enum hdmi_acr_cts i0) { return 0x000000c8 + 0x8*i0; }
162#define HDMI_ACR_1_N__MASK 0xffffffff 162#define HDMI_ACR_1_N__MASK 0xffffffff
163#define HDMI_ACR_1_N__SHIFT 0 163#define HDMI_ACR_1_N__SHIFT 0
164static inline uint32_t HDMI_ACR_1_N(uint32_t val) 164static inline uint32_t HDMI_ACR_1_N(uint32_t val)
@@ -552,6 +552,103 @@ static inline uint32_t HDMI_8x60_PHY_REG1_OUTVOL_SWING_CTRL(uint32_t val)
552#define REG_HDMI_8960_PHY_REG11 0x0000042c 552#define REG_HDMI_8960_PHY_REG11 0x0000042c
553 553
554#define REG_HDMI_8960_PHY_REG12 0x00000430 554#define REG_HDMI_8960_PHY_REG12 0x00000430
555#define HDMI_8960_PHY_REG12_SW_RESET 0x00000020
556#define HDMI_8960_PHY_REG12_PWRDN_B 0x00000080
557
558#define REG_HDMI_8960_PHY_REG_BIST_CFG 0x00000434
559
560#define REG_HDMI_8960_PHY_DEBUG_BUS_SEL 0x00000438
561
562#define REG_HDMI_8960_PHY_REG_MISC0 0x0000043c
563
564#define REG_HDMI_8960_PHY_REG13 0x00000440
565
566#define REG_HDMI_8960_PHY_REG14 0x00000444
567
568#define REG_HDMI_8960_PHY_REG15 0x00000448
569
570#define REG_HDMI_8960_PHY_PLL_REFCLK_CFG 0x00000500
571
572#define REG_HDMI_8960_PHY_PLL_CHRG_PUMP_CFG 0x00000504
573
574#define REG_HDMI_8960_PHY_PLL_LOOP_FLT_CFG0 0x00000508
575
576#define REG_HDMI_8960_PHY_PLL_LOOP_FLT_CFG1 0x0000050c
577
578#define REG_HDMI_8960_PHY_PLL_IDAC_ADJ_CFG 0x00000510
579
580#define REG_HDMI_8960_PHY_PLL_I_VI_KVCO_CFG 0x00000514
581
582#define REG_HDMI_8960_PHY_PLL_PWRDN_B 0x00000518
583#define HDMI_8960_PHY_PLL_PWRDN_B_PD_PLL 0x00000002
584#define HDMI_8960_PHY_PLL_PWRDN_B_PLL_PWRDN_B 0x00000008
585
586#define REG_HDMI_8960_PHY_PLL_SDM_CFG0 0x0000051c
587
588#define REG_HDMI_8960_PHY_PLL_SDM_CFG1 0x00000520
589
590#define REG_HDMI_8960_PHY_PLL_SDM_CFG2 0x00000524
591
592#define REG_HDMI_8960_PHY_PLL_SDM_CFG3 0x00000528
593
594#define REG_HDMI_8960_PHY_PLL_SDM_CFG4 0x0000052c
595
596#define REG_HDMI_8960_PHY_PLL_SSC_CFG0 0x00000530
597
598#define REG_HDMI_8960_PHY_PLL_SSC_CFG1 0x00000534
599
600#define REG_HDMI_8960_PHY_PLL_SSC_CFG2 0x00000538
601
602#define REG_HDMI_8960_PHY_PLL_SSC_CFG3 0x0000053c
603
604#define REG_HDMI_8960_PHY_PLL_LOCKDET_CFG0 0x00000540
605
606#define REG_HDMI_8960_PHY_PLL_LOCKDET_CFG1 0x00000544
607
608#define REG_HDMI_8960_PHY_PLL_LOCKDET_CFG2 0x00000548
609
610#define REG_HDMI_8960_PHY_PLL_VCOCAL_CFG0 0x0000054c
611
612#define REG_HDMI_8960_PHY_PLL_VCOCAL_CFG1 0x00000550
613
614#define REG_HDMI_8960_PHY_PLL_VCOCAL_CFG2 0x00000554
615
616#define REG_HDMI_8960_PHY_PLL_VCOCAL_CFG3 0x00000558
617
618#define REG_HDMI_8960_PHY_PLL_VCOCAL_CFG4 0x0000055c
619
620#define REG_HDMI_8960_PHY_PLL_VCOCAL_CFG5 0x00000560
621
622#define REG_HDMI_8960_PHY_PLL_VCOCAL_CFG6 0x00000564
623
624#define REG_HDMI_8960_PHY_PLL_VCOCAL_CFG7 0x00000568
625
626#define REG_HDMI_8960_PHY_PLL_DEBUG_SEL 0x0000056c
627
628#define REG_HDMI_8960_PHY_PLL_MISC0 0x00000570
629
630#define REG_HDMI_8960_PHY_PLL_MISC1 0x00000574
631
632#define REG_HDMI_8960_PHY_PLL_MISC2 0x00000578
633
634#define REG_HDMI_8960_PHY_PLL_MISC3 0x0000057c
635
636#define REG_HDMI_8960_PHY_PLL_MISC4 0x00000580
637
638#define REG_HDMI_8960_PHY_PLL_MISC5 0x00000584
639
640#define REG_HDMI_8960_PHY_PLL_MISC6 0x00000588
641
642#define REG_HDMI_8960_PHY_PLL_DEBUG_BUS0 0x0000058c
643
644#define REG_HDMI_8960_PHY_PLL_DEBUG_BUS1 0x00000590
645
646#define REG_HDMI_8960_PHY_PLL_DEBUG_BUS2 0x00000594
647
648#define REG_HDMI_8960_PHY_PLL_STATUS0 0x00000598
649#define HDMI_8960_PHY_PLL_STATUS0_PLL_LOCK 0x00000001
650
651#define REG_HDMI_8960_PHY_PLL_STATUS1 0x0000059c
555 652
556#define REG_HDMI_8x74_ANA_CFG0 0x00000000 653#define REG_HDMI_8x74_ANA_CFG0 0x00000000
557 654
diff --git a/drivers/gpu/drm/msm/hdmi/hdmi_connector.c b/drivers/gpu/drm/msm/hdmi/hdmi_connector.c
index 76960faae38f..4aca2a3c667c 100644
--- a/drivers/gpu/drm/msm/hdmi/hdmi_connector.c
+++ b/drivers/gpu/drm/msm/hdmi/hdmi_connector.c
@@ -63,7 +63,7 @@ static int gpio_config(struct hdmi *hdmi, bool on)
63 ret = gpio_request(config->mux_en_gpio, "HDMI_MUX_EN"); 63 ret = gpio_request(config->mux_en_gpio, "HDMI_MUX_EN");
64 if (ret) { 64 if (ret) {
65 dev_err(dev->dev, "'%s'(%d) gpio_request failed: %d\n", 65 dev_err(dev->dev, "'%s'(%d) gpio_request failed: %d\n",
66 "HDMI_MUX_SEL", config->mux_en_gpio, ret); 66 "HDMI_MUX_EN", config->mux_en_gpio, ret);
67 goto error4; 67 goto error4;
68 } 68 }
69 gpio_set_value_cansleep(config->mux_en_gpio, 1); 69 gpio_set_value_cansleep(config->mux_en_gpio, 1);
@@ -78,6 +78,19 @@ static int gpio_config(struct hdmi *hdmi, bool on)
78 } 78 }
79 gpio_set_value_cansleep(config->mux_sel_gpio, 0); 79 gpio_set_value_cansleep(config->mux_sel_gpio, 0);
80 } 80 }
81
82 if (config->mux_lpm_gpio != -1) {
83 ret = gpio_request(config->mux_lpm_gpio,
84 "HDMI_MUX_LPM");
85 if (ret) {
86 dev_err(dev->dev,
87 "'%s'(%d) gpio_request failed: %d\n",
88 "HDMI_MUX_LPM",
89 config->mux_lpm_gpio, ret);
90 goto error6;
91 }
92 gpio_set_value_cansleep(config->mux_lpm_gpio, 1);
93 }
81 DBG("gpio on"); 94 DBG("gpio on");
82 } else { 95 } else {
83 gpio_free(config->ddc_clk_gpio); 96 gpio_free(config->ddc_clk_gpio);
@@ -93,11 +106,19 @@ static int gpio_config(struct hdmi *hdmi, bool on)
93 gpio_set_value_cansleep(config->mux_sel_gpio, 1); 106 gpio_set_value_cansleep(config->mux_sel_gpio, 1);
94 gpio_free(config->mux_sel_gpio); 107 gpio_free(config->mux_sel_gpio);
95 } 108 }
109
110 if (config->mux_lpm_gpio != -1) {
111 gpio_set_value_cansleep(config->mux_lpm_gpio, 0);
112 gpio_free(config->mux_lpm_gpio);
113 }
96 DBG("gpio off"); 114 DBG("gpio off");
97 } 115 }
98 116
99 return 0; 117 return 0;
100 118
119error6:
120 if (config->mux_sel_gpio != -1)
121 gpio_free(config->mux_sel_gpio);
101error5: 122error5:
102 if (config->mux_en_gpio != -1) 123 if (config->mux_en_gpio != -1)
103 gpio_free(config->mux_en_gpio); 124 gpio_free(config->mux_en_gpio);
diff --git a/drivers/gpu/drm/msm/hdmi/hdmi_phy_8960.c b/drivers/gpu/drm/msm/hdmi/hdmi_phy_8960.c
index e5b7ed5b8f01..902d7685d441 100644
--- a/drivers/gpu/drm/msm/hdmi/hdmi_phy_8960.c
+++ b/drivers/gpu/drm/msm/hdmi/hdmi_phy_8960.c
@@ -15,13 +15,370 @@
15 * this program. If not, see <http://www.gnu.org/licenses/>. 15 * this program. If not, see <http://www.gnu.org/licenses/>.
16 */ 16 */
17 17
18#include <linux/clk.h>
19#include <linux/clk-provider.h>
20
18#include "hdmi.h" 21#include "hdmi.h"
19 22
20struct hdmi_phy_8960 { 23struct hdmi_phy_8960 {
21 struct hdmi_phy base; 24 struct hdmi_phy base;
22 struct hdmi *hdmi; 25 struct hdmi *hdmi;
26 struct clk_hw pll_hw;
27 struct clk *pll;
28 unsigned long pixclk;
23}; 29};
24#define to_hdmi_phy_8960(x) container_of(x, struct hdmi_phy_8960, base) 30#define to_hdmi_phy_8960(x) container_of(x, struct hdmi_phy_8960, base)
31#define clk_to_phy(x) container_of(x, struct hdmi_phy_8960, pll_hw)
32
33/*
34 * HDMI PLL:
35 *
36 * To get the parent clock setup properly, we need to plug in hdmi pll
37 * configuration into common-clock-framework.
38 */
39
40struct pll_rate {
41 unsigned long rate;
42 struct {
43 uint32_t val;
44 uint32_t reg;
45 } conf[32];
46};
47
48/* NOTE: keep sorted highest freq to lowest: */
49static const struct pll_rate freqtbl[] = {
50 /* 1080p60/1080p50 case */
51 { 148500000, {
52 { 0x02, REG_HDMI_8960_PHY_PLL_REFCLK_CFG },
53 { 0x02, REG_HDMI_8960_PHY_PLL_CHRG_PUMP_CFG },
54 { 0x01, REG_HDMI_8960_PHY_PLL_LOOP_FLT_CFG0 },
55 { 0x33, REG_HDMI_8960_PHY_PLL_LOOP_FLT_CFG1 },
56 { 0x2c, REG_HDMI_8960_PHY_PLL_IDAC_ADJ_CFG },
57 { 0x06, REG_HDMI_8960_PHY_PLL_I_VI_KVCO_CFG },
58 { 0x0a, REG_HDMI_8960_PHY_PLL_PWRDN_B },
59 { 0x76, REG_HDMI_8960_PHY_PLL_SDM_CFG0 },
60 { 0x01, REG_HDMI_8960_PHY_PLL_SDM_CFG1 },
61 { 0x4c, REG_HDMI_8960_PHY_PLL_SDM_CFG2 },
62 { 0xc0, REG_HDMI_8960_PHY_PLL_SDM_CFG3 },
63 { 0x00, REG_HDMI_8960_PHY_PLL_SDM_CFG4 },
64 { 0x9a, REG_HDMI_8960_PHY_PLL_SSC_CFG0 },
65 { 0x00, REG_HDMI_8960_PHY_PLL_SSC_CFG1 },
66 { 0x00, REG_HDMI_8960_PHY_PLL_SSC_CFG2 },
67 { 0x00, REG_HDMI_8960_PHY_PLL_SSC_CFG3 },
68 { 0x10, REG_HDMI_8960_PHY_PLL_LOCKDET_CFG0 },
69 { 0x1a, REG_HDMI_8960_PHY_PLL_LOCKDET_CFG1 },
70 { 0x0d, REG_HDMI_8960_PHY_PLL_LOCKDET_CFG2 },
71 { 0xe6, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG0 },
72 { 0x02, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG1 },
73 { 0x3b, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG2 },
74 { 0x00, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG3 },
75 { 0x86, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG4 },
76 { 0x00, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG5 },
77 { 0x33, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG6 },
78 { 0x00, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG7 },
79 { 0, 0 } }
80 },
81 { 108000000, {
82 { 0x08, REG_HDMI_8960_PHY_PLL_REFCLK_CFG },
83 { 0x21, REG_HDMI_8960_PHY_PLL_LOOP_FLT_CFG0 },
84 { 0xf9, REG_HDMI_8960_PHY_PLL_LOOP_FLT_CFG1 },
85 { 0x1c, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG0 },
86 { 0x02, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG1 },
87 { 0x3b, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG2 },
88 { 0x86, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG4 },
89 { 0x00, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG5 },
90 { 0x49, REG_HDMI_8960_PHY_PLL_SDM_CFG0 },
91 { 0x49, REG_HDMI_8960_PHY_PLL_SDM_CFG1 },
92 { 0x00, REG_HDMI_8960_PHY_PLL_SDM_CFG2 },
93 { 0x00, REG_HDMI_8960_PHY_PLL_SDM_CFG3 },
94 { 0x00, REG_HDMI_8960_PHY_PLL_SDM_CFG4 },
95 { 0, 0 } }
96 },
97 /* 720p60/720p50/1080i60/1080i50/1080p24/1080p30/1080p25 */
98 { 74250000, {
99 { 0x0a, REG_HDMI_8960_PHY_PLL_PWRDN_B },
100 { 0x12, REG_HDMI_8960_PHY_PLL_REFCLK_CFG },
101 { 0x01, REG_HDMI_8960_PHY_PLL_LOOP_FLT_CFG0 },
102 { 0x33, REG_HDMI_8960_PHY_PLL_LOOP_FLT_CFG1 },
103 { 0x76, REG_HDMI_8960_PHY_PLL_SDM_CFG0 },
104 { 0xe6, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG0 },
105 { 0x02, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG1 },
106 { 0x3b, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG2 },
107 { 0, 0 } }
108 },
109 { 65000000, {
110 { 0x18, REG_HDMI_8960_PHY_PLL_REFCLK_CFG },
111 { 0x20, REG_HDMI_8960_PHY_PLL_LOOP_FLT_CFG0 },
112 { 0xf9, REG_HDMI_8960_PHY_PLL_LOOP_FLT_CFG1 },
113 { 0x8a, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG0 },
114 { 0x02, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG1 },
115 { 0x3b, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG2 },
116 { 0x00, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG3 },
117 { 0x86, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG4 },
118 { 0x00, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG5 },
119 { 0x0b, REG_HDMI_8960_PHY_PLL_SDM_CFG0 },
120 { 0x4b, REG_HDMI_8960_PHY_PLL_SDM_CFG1 },
121 { 0x7b, REG_HDMI_8960_PHY_PLL_SDM_CFG2 },
122 { 0x09, REG_HDMI_8960_PHY_PLL_SDM_CFG3 },
123 { 0x00, REG_HDMI_8960_PHY_PLL_SDM_CFG4 },
124 { 0, 0 } }
125 },
126 /* 480p60/480i60 */
127 { 27030000, {
128 { 0x0a, REG_HDMI_8960_PHY_PLL_PWRDN_B },
129 { 0x38, REG_HDMI_8960_PHY_PLL_REFCLK_CFG },
130 { 0x02, REG_HDMI_8960_PHY_PLL_CHRG_PUMP_CFG },
131 { 0x20, REG_HDMI_8960_PHY_PLL_LOOP_FLT_CFG0 },
132 { 0xff, REG_HDMI_8960_PHY_PLL_LOOP_FLT_CFG1 },
133 { 0x00, REG_HDMI_8960_PHY_PLL_SDM_CFG0 },
134 { 0x4e, REG_HDMI_8960_PHY_PLL_SDM_CFG1 },
135 { 0xd7, REG_HDMI_8960_PHY_PLL_SDM_CFG2 },
136 { 0x03, REG_HDMI_8960_PHY_PLL_SDM_CFG3 },
137 { 0x00, REG_HDMI_8960_PHY_PLL_SDM_CFG4 },
138 { 0x2a, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG0 },
139 { 0x03, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG1 },
140 { 0x3b, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG2 },
141 { 0x00, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG3 },
142 { 0x86, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG4 },
143 { 0x00, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG5 },
144 { 0x33, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG6 },
145 { 0x00, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG7 },
146 { 0, 0 } }
147 },
148 /* 576p50/576i50 */
149 { 27000000, {
150 { 0x32, REG_HDMI_8960_PHY_PLL_REFCLK_CFG },
151 { 0x02, REG_HDMI_8960_PHY_PLL_CHRG_PUMP_CFG },
152 { 0x01, REG_HDMI_8960_PHY_PLL_LOOP_FLT_CFG0 },
153 { 0x33, REG_HDMI_8960_PHY_PLL_LOOP_FLT_CFG1 },
154 { 0x2c, REG_HDMI_8960_PHY_PLL_IDAC_ADJ_CFG },
155 { 0x06, REG_HDMI_8960_PHY_PLL_I_VI_KVCO_CFG },
156 { 0x0a, REG_HDMI_8960_PHY_PLL_PWRDN_B },
157 { 0x7b, REG_HDMI_8960_PHY_PLL_SDM_CFG0 },
158 { 0x01, REG_HDMI_8960_PHY_PLL_SDM_CFG1 },
159 { 0x4c, REG_HDMI_8960_PHY_PLL_SDM_CFG2 },
160 { 0xc0, REG_HDMI_8960_PHY_PLL_SDM_CFG3 },
161 { 0x00, REG_HDMI_8960_PHY_PLL_SDM_CFG4 },
162 { 0x9a, REG_HDMI_8960_PHY_PLL_SSC_CFG0 },
163 { 0x00, REG_HDMI_8960_PHY_PLL_SSC_CFG1 },
164 { 0x00, REG_HDMI_8960_PHY_PLL_SSC_CFG2 },
165 { 0x00, REG_HDMI_8960_PHY_PLL_SSC_CFG3 },
166 { 0x10, REG_HDMI_8960_PHY_PLL_LOCKDET_CFG0 },
167 { 0x1a, REG_HDMI_8960_PHY_PLL_LOCKDET_CFG1 },
168 { 0x0d, REG_HDMI_8960_PHY_PLL_LOCKDET_CFG2 },
169 { 0x2a, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG0 },
170 { 0x03, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG1 },
171 { 0x3b, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG2 },
172 { 0x00, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG3 },
173 { 0x86, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG4 },
174 { 0x00, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG5 },
175 { 0x33, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG6 },
176 { 0x00, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG7 },
177 { 0, 0 } }
178 },
179 /* 640x480p60 */
180 { 25200000, {
181 { 0x32, REG_HDMI_8960_PHY_PLL_REFCLK_CFG },
182 { 0x02, REG_HDMI_8960_PHY_PLL_CHRG_PUMP_CFG },
183 { 0x01, REG_HDMI_8960_PHY_PLL_LOOP_FLT_CFG0 },
184 { 0x33, REG_HDMI_8960_PHY_PLL_LOOP_FLT_CFG1 },
185 { 0x2c, REG_HDMI_8960_PHY_PLL_IDAC_ADJ_CFG },
186 { 0x06, REG_HDMI_8960_PHY_PLL_I_VI_KVCO_CFG },
187 { 0x0a, REG_HDMI_8960_PHY_PLL_PWRDN_B },
188 { 0x77, REG_HDMI_8960_PHY_PLL_SDM_CFG0 },
189 { 0x4c, REG_HDMI_8960_PHY_PLL_SDM_CFG1 },
190 { 0x00, REG_HDMI_8960_PHY_PLL_SDM_CFG2 },
191 { 0xc0, REG_HDMI_8960_PHY_PLL_SDM_CFG3 },
192 { 0x00, REG_HDMI_8960_PHY_PLL_SDM_CFG4 },
193 { 0x9a, REG_HDMI_8960_PHY_PLL_SSC_CFG0 },
194 { 0x00, REG_HDMI_8960_PHY_PLL_SSC_CFG1 },
195 { 0x00, REG_HDMI_8960_PHY_PLL_SSC_CFG2 },
196 { 0x20, REG_HDMI_8960_PHY_PLL_SSC_CFG3 },
197 { 0x10, REG_HDMI_8960_PHY_PLL_LOCKDET_CFG0 },
198 { 0x1a, REG_HDMI_8960_PHY_PLL_LOCKDET_CFG1 },
199 { 0x0d, REG_HDMI_8960_PHY_PLL_LOCKDET_CFG2 },
200 { 0xf4, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG0 },
201 { 0x02, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG1 },
202 { 0x3b, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG2 },
203 { 0x00, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG3 },
204 { 0x86, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG4 },
205 { 0x00, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG5 },
206 { 0x33, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG6 },
207 { 0x00, REG_HDMI_8960_PHY_PLL_VCOCAL_CFG7 },
208 { 0, 0 } }
209 },
210};
211
212static int hdmi_pll_enable(struct clk_hw *hw)
213{
214 struct hdmi_phy_8960 *phy_8960 = clk_to_phy(hw);
215 struct hdmi *hdmi = phy_8960->hdmi;
216 int timeout_count, pll_lock_retry = 10;
217 unsigned int val;
218
219 DBG("");
220
221 /* Assert PLL S/W reset */
222 hdmi_write(hdmi, REG_HDMI_8960_PHY_PLL_LOCKDET_CFG2, 0x8d);
223 hdmi_write(hdmi, REG_HDMI_8960_PHY_PLL_LOCKDET_CFG0, 0x10);
224 hdmi_write(hdmi, REG_HDMI_8960_PHY_PLL_LOCKDET_CFG1, 0x1a);
225
226 /* Wait for a short time before de-asserting
227 * to allow the hardware to complete its job.
228 * This much of delay should be fine for hardware
229 * to assert and de-assert.
230 */
231 udelay(10);
232
233 /* De-assert PLL S/W reset */
234 hdmi_write(hdmi, REG_HDMI_8960_PHY_PLL_LOCKDET_CFG2, 0x0d);
235
236 val = hdmi_read(hdmi, REG_HDMI_8960_PHY_REG12);
237 val |= HDMI_8960_PHY_REG12_SW_RESET;
238 /* Assert PHY S/W reset */
239 hdmi_write(hdmi, REG_HDMI_8960_PHY_REG12, val);
240 val &= ~HDMI_8960_PHY_REG12_SW_RESET;
241 /* Wait for a short time before de-asserting
242 to allow the hardware to complete its job.
243 This much of delay should be fine for hardware
244 to assert and de-assert. */
245 udelay(10);
246 /* De-assert PHY S/W reset */
247 hdmi_write(hdmi, REG_HDMI_8960_PHY_REG12, val);
248 hdmi_write(hdmi, REG_HDMI_8960_PHY_REG2, 0x3f);
249
250 val = hdmi_read(hdmi, REG_HDMI_8960_PHY_REG12);
251 val |= HDMI_8960_PHY_REG12_PWRDN_B;
252 hdmi_write(hdmi, REG_HDMI_8960_PHY_REG12, val);
253 /* Wait 10 us for enabling global power for PHY */
254 mb();
255 udelay(10);
256
257 val = hdmi_read(hdmi, REG_HDMI_8960_PHY_PLL_PWRDN_B);
258 val |= HDMI_8960_PHY_PLL_PWRDN_B_PLL_PWRDN_B;
259 val &= ~HDMI_8960_PHY_PLL_PWRDN_B_PD_PLL;
260 hdmi_write(hdmi, REG_HDMI_8960_PHY_PLL_PWRDN_B, val);
261 hdmi_write(hdmi, REG_HDMI_8960_PHY_REG2, 0x80);
262
263 timeout_count = 1000;
264 while (--pll_lock_retry > 0) {
265
266 /* are we there yet? */
267 val = hdmi_read(hdmi, REG_HDMI_8960_PHY_PLL_STATUS0);
268 if (val & HDMI_8960_PHY_PLL_STATUS0_PLL_LOCK)
269 break;
270
271 udelay(1);
272
273 if (--timeout_count > 0)
274 continue;
275
276 /*
277 * PLL has still not locked.
278 * Do a software reset and try again
279 * Assert PLL S/W reset first
280 */
281 hdmi_write(hdmi, REG_HDMI_8960_PHY_PLL_LOCKDET_CFG2, 0x8d);
282 udelay(10);
283 hdmi_write(hdmi, REG_HDMI_8960_PHY_PLL_LOCKDET_CFG2, 0x0d);
284
285 /*
286 * Wait for a short duration for the PLL calibration
287 * before checking if the PLL gets locked
288 */
289 udelay(350);
290
291 timeout_count = 1000;
292 }
293
294 return 0;
295}
296
297static void hdmi_pll_disable(struct clk_hw *hw)
298{
299 struct hdmi_phy_8960 *phy_8960 = clk_to_phy(hw);
300 struct hdmi *hdmi = phy_8960->hdmi;
301 unsigned int val;
302
303 DBG("");
304
305 val = hdmi_read(hdmi, REG_HDMI_8960_PHY_REG12);
306 val &= ~HDMI_8960_PHY_REG12_PWRDN_B;
307 hdmi_write(hdmi, REG_HDMI_8960_PHY_REG12, val);
308
309 val = hdmi_read(hdmi, REG_HDMI_8960_PHY_PLL_PWRDN_B);
310 val |= HDMI_8960_PHY_REG12_SW_RESET;
311 val &= ~HDMI_8960_PHY_REG12_PWRDN_B;
312 hdmi_write(hdmi, REG_HDMI_8960_PHY_PLL_PWRDN_B, val);
313 /* Make sure HDMI PHY/PLL are powered down */
314 mb();
315}
316
317static const struct pll_rate *find_rate(unsigned long rate)
318{
319 int i;
320 for (i = 1; i < ARRAY_SIZE(freqtbl); i++)
321 if (rate > freqtbl[i].rate)
322 return &freqtbl[i-1];
323 return &freqtbl[i-1];
324}
325
326static unsigned long hdmi_pll_recalc_rate(struct clk_hw *hw,
327 unsigned long parent_rate)
328{
329 struct hdmi_phy_8960 *phy_8960 = clk_to_phy(hw);
330 return phy_8960->pixclk;
331}
332
333static long hdmi_pll_round_rate(struct clk_hw *hw, unsigned long rate,
334 unsigned long *parent_rate)
335{
336 const struct pll_rate *pll_rate = find_rate(rate);
337 return pll_rate->rate;
338}
339
340static int hdmi_pll_set_rate(struct clk_hw *hw, unsigned long rate,
341 unsigned long parent_rate)
342{
343 struct hdmi_phy_8960 *phy_8960 = clk_to_phy(hw);
344 struct hdmi *hdmi = phy_8960->hdmi;
345 const struct pll_rate *pll_rate = find_rate(rate);
346 int i;
347
348 DBG("rate=%lu", rate);
349
350 for (i = 0; pll_rate->conf[i].reg; i++)
351 hdmi_write(hdmi, pll_rate->conf[i].reg, pll_rate->conf[i].val);
352
353 phy_8960->pixclk = rate;
354
355 return 0;
356}
357
358
359static const struct clk_ops hdmi_pll_ops = {
360 .enable = hdmi_pll_enable,
361 .disable = hdmi_pll_disable,
362 .recalc_rate = hdmi_pll_recalc_rate,
363 .round_rate = hdmi_pll_round_rate,
364 .set_rate = hdmi_pll_set_rate,
365};
366
367static const char *hdmi_pll_parents[] = {
368 "pxo",
369};
370
371static struct clk_init_data pll_init = {
372 .name = "hdmi_pll",
373 .ops = &hdmi_pll_ops,
374 .parent_names = hdmi_pll_parents,
375 .num_parents = ARRAY_SIZE(hdmi_pll_parents),
376};
377
378
379/*
380 * HDMI Phy:
381 */
25 382
26static void hdmi_phy_8960_destroy(struct hdmi_phy *phy) 383static void hdmi_phy_8960_destroy(struct hdmi_phy *phy)
27{ 384{
@@ -86,6 +443,9 @@ static void hdmi_phy_8960_powerup(struct hdmi_phy *phy,
86 struct hdmi_phy_8960 *phy_8960 = to_hdmi_phy_8960(phy); 443 struct hdmi_phy_8960 *phy_8960 = to_hdmi_phy_8960(phy);
87 struct hdmi *hdmi = phy_8960->hdmi; 444 struct hdmi *hdmi = phy_8960->hdmi;
88 445
446 DBG("pixclock: %lu", pixclock);
447
448 hdmi_write(hdmi, REG_HDMI_8960_PHY_REG2, 0x00);
89 hdmi_write(hdmi, REG_HDMI_8960_PHY_REG0, 0x1b); 449 hdmi_write(hdmi, REG_HDMI_8960_PHY_REG0, 0x1b);
90 hdmi_write(hdmi, REG_HDMI_8960_PHY_REG1, 0xf2); 450 hdmi_write(hdmi, REG_HDMI_8960_PHY_REG1, 0xf2);
91 hdmi_write(hdmi, REG_HDMI_8960_PHY_REG4, 0x00); 451 hdmi_write(hdmi, REG_HDMI_8960_PHY_REG4, 0x00);
@@ -104,6 +464,8 @@ static void hdmi_phy_8960_powerdown(struct hdmi_phy *phy)
104 struct hdmi_phy_8960 *phy_8960 = to_hdmi_phy_8960(phy); 464 struct hdmi_phy_8960 *phy_8960 = to_hdmi_phy_8960(phy);
105 struct hdmi *hdmi = phy_8960->hdmi; 465 struct hdmi *hdmi = phy_8960->hdmi;
106 466
467 DBG("");
468
107 hdmi_write(hdmi, REG_HDMI_8960_PHY_REG2, 0x7f); 469 hdmi_write(hdmi, REG_HDMI_8960_PHY_REG2, 0x7f);
108} 470}
109 471
@@ -118,7 +480,12 @@ struct hdmi_phy *hdmi_phy_8960_init(struct hdmi *hdmi)
118{ 480{
119 struct hdmi_phy_8960 *phy_8960; 481 struct hdmi_phy_8960 *phy_8960;
120 struct hdmi_phy *phy = NULL; 482 struct hdmi_phy *phy = NULL;
121 int ret; 483 int ret, i;
484
485 /* sanity check: */
486 for (i = 0; i < (ARRAY_SIZE(freqtbl) - 1); i++)
487 if (WARN_ON(freqtbl[i].rate < freqtbl[i+1].rate))
488 return ERR_PTR(-EINVAL);
122 489
123 phy_8960 = kzalloc(sizeof(*phy_8960), GFP_KERNEL); 490 phy_8960 = kzalloc(sizeof(*phy_8960), GFP_KERNEL);
124 if (!phy_8960) { 491 if (!phy_8960) {
@@ -132,6 +499,14 @@ struct hdmi_phy *hdmi_phy_8960_init(struct hdmi *hdmi)
132 499
133 phy_8960->hdmi = hdmi; 500 phy_8960->hdmi = hdmi;
134 501
502 phy_8960->pll_hw.init = &pll_init;
503 phy_8960->pll = devm_clk_register(hdmi->dev->dev, &phy_8960->pll_hw);
504 if (IS_ERR(phy_8960->pll)) {
505 ret = PTR_ERR(phy_8960->pll);
506 phy_8960->pll = NULL;
507 goto fail;
508 }
509
135 return phy; 510 return phy;
136 511
137fail: 512fail:
diff --git a/drivers/gpu/drm/msm/hdmi/qfprom.xml.h b/drivers/gpu/drm/msm/hdmi/qfprom.xml.h
index d591567173c4..bd81db6a7829 100644
--- a/drivers/gpu/drm/msm/hdmi/qfprom.xml.h
+++ b/drivers/gpu/drm/msm/hdmi/qfprom.xml.h
@@ -12,12 +12,12 @@ The rules-ng-ng source files this header was generated from are:
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/mdp/mdp4.xml ( 17996 bytes, from 2013-12-01 19:10:31) 13- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp4.xml ( 17996 bytes, from 2013-12-01 19:10:31)
14- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml ( 1615 bytes, from 2013-11-30 15:00:52) 14- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml ( 1615 bytes, from 2013-11-30 15:00:52)
15- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml ( 22517 bytes, from 2013-12-03 20:59:13) 15- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml ( 22517 bytes, from 2014-06-25 12:55:02)
16- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 11712 bytes, from 2013-08-17 17:13:43) 16- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 11712 bytes, from 2013-08-17 17:13:43)
17- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 344 bytes, from 2013-08-11 19:26:32) 17- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 344 bytes, from 2013-08-11 19:26:32)
18- /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1544 bytes, from 2013-08-16 19:17:05) 18- /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1544 bytes, from 2013-08-16 19:17:05)
19- /home/robclark/src/freedreno/envytools/rnndb/hdmi/qfprom.xml ( 600 bytes, from 2013-07-05 19:21:12) 19- /home/robclark/src/freedreno/envytools/rnndb/hdmi/qfprom.xml ( 600 bytes, from 2013-07-05 19:21:12)
20- /home/robclark/src/freedreno/envytools/rnndb/hdmi/hdmi.xml ( 20932 bytes, from 2013-12-01 15:13:04) 20- /home/robclark/src/freedreno/envytools/rnndb/hdmi/hdmi.xml ( 23613 bytes, from 2014-06-25 12:53:44)
21 21
22Copyright (C) 2013 by the following authors: 22Copyright (C) 2013 by the following authors:
23- Rob Clark <robdclark@gmail.com> (robclark) 23- Rob Clark <robdclark@gmail.com> (robclark)
diff --git a/drivers/gpu/drm/msm/mdp/mdp4/mdp4.xml.h b/drivers/gpu/drm/msm/mdp/mdp4/mdp4.xml.h
index 416a26e1e58d..122208e8a2ee 100644
--- a/drivers/gpu/drm/msm/mdp/mdp4/mdp4.xml.h
+++ b/drivers/gpu/drm/msm/mdp/mdp4/mdp4.xml.h
@@ -12,12 +12,12 @@ The rules-ng-ng source files this header was generated from are:
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/mdp/mdp4.xml ( 17996 bytes, from 2013-12-01 19:10:31) 13- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp4.xml ( 17996 bytes, from 2013-12-01 19:10:31)
14- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml ( 1615 bytes, from 2013-11-30 15:00:52) 14- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml ( 1615 bytes, from 2013-11-30 15:00:52)
15- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml ( 22517 bytes, from 2013-12-03 20:59:13) 15- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml ( 22517 bytes, from 2014-06-25 12:55:02)
16- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 11712 bytes, from 2013-08-17 17:13:43) 16- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 11712 bytes, from 2013-08-17 17:13:43)
17- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 344 bytes, from 2013-08-11 19:26:32) 17- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 344 bytes, from 2013-08-11 19:26:32)
18- /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1544 bytes, from 2013-08-16 19:17:05) 18- /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1544 bytes, from 2013-08-16 19:17:05)
19- /home/robclark/src/freedreno/envytools/rnndb/hdmi/qfprom.xml ( 600 bytes, from 2013-07-05 19:21:12) 19- /home/robclark/src/freedreno/envytools/rnndb/hdmi/qfprom.xml ( 600 bytes, from 2013-07-05 19:21:12)
20- /home/robclark/src/freedreno/envytools/rnndb/hdmi/hdmi.xml ( 20932 bytes, from 2013-12-01 15:13:04) 20- /home/robclark/src/freedreno/envytools/rnndb/hdmi/hdmi.xml ( 23613 bytes, from 2014-06-25 12:53:44)
21 21
22Copyright (C) 2013 by the following authors: 22Copyright (C) 2013 by the following authors:
23- Rob Clark <robdclark@gmail.com> (robclark) 23- Rob Clark <robdclark@gmail.com> (robclark)
diff --git a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c
index 0bb4faa17523..733646c0d3f8 100644
--- a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c
+++ b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c
@@ -147,7 +147,7 @@ static void mdp4_destroy(struct msm_kms *kms)
147 if (mdp4_kms->blank_cursor_iova) 147 if (mdp4_kms->blank_cursor_iova)
148 msm_gem_put_iova(mdp4_kms->blank_cursor_bo, mdp4_kms->id); 148 msm_gem_put_iova(mdp4_kms->blank_cursor_bo, mdp4_kms->id);
149 if (mdp4_kms->blank_cursor_bo) 149 if (mdp4_kms->blank_cursor_bo)
150 drm_gem_object_unreference(mdp4_kms->blank_cursor_bo); 150 drm_gem_object_unreference_unlocked(mdp4_kms->blank_cursor_bo);
151 kfree(mdp4_kms); 151 kfree(mdp4_kms);
152} 152}
153 153
@@ -176,6 +176,8 @@ int mdp4_disable(struct mdp4_kms *mdp4_kms)
176 if (mdp4_kms->pclk) 176 if (mdp4_kms->pclk)
177 clk_disable_unprepare(mdp4_kms->pclk); 177 clk_disable_unprepare(mdp4_kms->pclk);
178 clk_disable_unprepare(mdp4_kms->lut_clk); 178 clk_disable_unprepare(mdp4_kms->lut_clk);
179 if (mdp4_kms->axi_clk)
180 clk_disable_unprepare(mdp4_kms->axi_clk);
179 181
180 return 0; 182 return 0;
181} 183}
@@ -188,6 +190,8 @@ int mdp4_enable(struct mdp4_kms *mdp4_kms)
188 if (mdp4_kms->pclk) 190 if (mdp4_kms->pclk)
189 clk_prepare_enable(mdp4_kms->pclk); 191 clk_prepare_enable(mdp4_kms->pclk);
190 clk_prepare_enable(mdp4_kms->lut_clk); 192 clk_prepare_enable(mdp4_kms->lut_clk);
193 if (mdp4_kms->axi_clk)
194 clk_prepare_enable(mdp4_kms->axi_clk);
191 195
192 return 0; 196 return 0;
193} 197}
@@ -294,15 +298,17 @@ struct msm_kms *mdp4_kms_init(struct drm_device *dev)
294 goto fail; 298 goto fail;
295 } 299 }
296 300
297 mdp4_kms->dsi_pll_vdda = devm_regulator_get(&pdev->dev, "dsi_pll_vdda"); 301 mdp4_kms->dsi_pll_vdda =
302 devm_regulator_get_optional(&pdev->dev, "dsi_pll_vdda");
298 if (IS_ERR(mdp4_kms->dsi_pll_vdda)) 303 if (IS_ERR(mdp4_kms->dsi_pll_vdda))
299 mdp4_kms->dsi_pll_vdda = NULL; 304 mdp4_kms->dsi_pll_vdda = NULL;
300 305
301 mdp4_kms->dsi_pll_vddio = devm_regulator_get(&pdev->dev, "dsi_pll_vddio"); 306 mdp4_kms->dsi_pll_vddio =
307 devm_regulator_get_optional(&pdev->dev, "dsi_pll_vddio");
302 if (IS_ERR(mdp4_kms->dsi_pll_vddio)) 308 if (IS_ERR(mdp4_kms->dsi_pll_vddio))
303 mdp4_kms->dsi_pll_vddio = NULL; 309 mdp4_kms->dsi_pll_vddio = NULL;
304 310
305 mdp4_kms->vdd = devm_regulator_get(&pdev->dev, "vdd"); 311 mdp4_kms->vdd = devm_regulator_get_exclusive(&pdev->dev, "vdd");
306 if (IS_ERR(mdp4_kms->vdd)) 312 if (IS_ERR(mdp4_kms->vdd))
307 mdp4_kms->vdd = NULL; 313 mdp4_kms->vdd = NULL;
308 314
@@ -333,6 +339,13 @@ struct msm_kms *mdp4_kms_init(struct drm_device *dev)
333 goto fail; 339 goto fail;
334 } 340 }
335 341
342 mdp4_kms->axi_clk = devm_clk_get(&pdev->dev, "mdp_axi_clk");
343 if (IS_ERR(mdp4_kms->axi_clk)) {
344 dev_err(dev->dev, "failed to get axi_clk\n");
345 ret = PTR_ERR(mdp4_kms->axi_clk);
346 goto fail;
347 }
348
336 clk_set_rate(mdp4_kms->clk, config->max_clk); 349 clk_set_rate(mdp4_kms->clk, config->max_clk);
337 clk_set_rate(mdp4_kms->lut_clk, config->max_clk); 350 clk_set_rate(mdp4_kms->lut_clk, config->max_clk);
338 351
@@ -348,7 +361,7 @@ struct msm_kms *mdp4_kms_init(struct drm_device *dev)
348 mdelay(16); 361 mdelay(16);
349 362
350 if (config->iommu) { 363 if (config->iommu) {
351 mmu = msm_iommu_new(dev, config->iommu); 364 mmu = msm_iommu_new(&pdev->dev, config->iommu);
352 if (IS_ERR(mmu)) { 365 if (IS_ERR(mmu)) {
353 ret = PTR_ERR(mmu); 366 ret = PTR_ERR(mmu);
354 goto fail; 367 goto fail;
@@ -406,6 +419,8 @@ static struct mdp4_platform_config *mdp4_get_config(struct platform_device *dev)
406 static struct mdp4_platform_config config = {}; 419 static struct mdp4_platform_config config = {};
407#ifdef CONFIG_OF 420#ifdef CONFIG_OF
408 /* TODO */ 421 /* TODO */
422 config.max_clk = 266667000;
423 config.iommu = iommu_domain_alloc(&platform_bus_type);
409#else 424#else
410 if (cpu_is_apq8064()) 425 if (cpu_is_apq8064())
411 config.max_clk = 266667000; 426 config.max_clk = 266667000;
diff --git a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.h b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.h
index 715520c54cde..3225da804c61 100644
--- a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.h
+++ b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.h
@@ -42,6 +42,7 @@ struct mdp4_kms {
42 struct clk *clk; 42 struct clk *clk;
43 struct clk *pclk; 43 struct clk *pclk;
44 struct clk *lut_clk; 44 struct clk *lut_clk;
45 struct clk *axi_clk;
45 46
46 struct mdp_irq error_handler; 47 struct mdp_irq error_handler;
47 48
diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5.xml.h b/drivers/gpu/drm/msm/mdp/mdp5/mdp5.xml.h
index 0aa51517f826..67f4f896ba8c 100644
--- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5.xml.h
+++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5.xml.h
@@ -12,14 +12,14 @@ The rules-ng-ng source files this header was generated from are:
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/mdp/mdp4.xml ( 17996 bytes, from 2013-12-01 19:10:31) 13- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp4.xml ( 17996 bytes, from 2013-12-01 19:10:31)
14- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml ( 1615 bytes, from 2013-11-30 15:00:52) 14- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml ( 1615 bytes, from 2013-11-30 15:00:52)
15- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml ( 22517 bytes, from 2013-12-03 20:59:13) 15- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml ( 22517 bytes, from 2014-06-25 12:55:02)
16- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 11712 bytes, from 2013-08-17 17:13:43) 16- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 11712 bytes, from 2013-08-17 17:13:43)
17- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 344 bytes, from 2013-08-11 19:26:32) 17- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 344 bytes, from 2013-08-11 19:26:32)
18- /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1544 bytes, from 2013-08-16 19:17:05) 18- /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1544 bytes, from 2013-08-16 19:17:05)
19- /home/robclark/src/freedreno/envytools/rnndb/hdmi/qfprom.xml ( 600 bytes, from 2013-07-05 19:21:12) 19- /home/robclark/src/freedreno/envytools/rnndb/hdmi/qfprom.xml ( 600 bytes, from 2013-07-05 19:21:12)
20- /home/robclark/src/freedreno/envytools/rnndb/hdmi/hdmi.xml ( 20932 bytes, from 2013-12-01 15:13:04) 20- /home/robclark/src/freedreno/envytools/rnndb/hdmi/hdmi.xml ( 23613 bytes, from 2014-06-25 12:53:44)
21 21
22Copyright (C) 2013 by the following authors: 22Copyright (C) 2013-2014 by the following authors:
23- Rob Clark <robdclark@gmail.com> (robclark) 23- Rob Clark <robdclark@gmail.com> (robclark)
24 24
25Permission is hereby granted, free of charge, to any person obtaining 25Permission is hereby granted, free of charge, to any person obtaining
@@ -68,6 +68,8 @@ enum mdp5_pipe {
68 SSPP_RGB2 = 5, 68 SSPP_RGB2 = 5,
69 SSPP_DMA0 = 6, 69 SSPP_DMA0 = 6,
70 SSPP_DMA1 = 7, 70 SSPP_DMA1 = 7,
71 SSPP_VIG3 = 8,
72 SSPP_RGB3 = 9,
71}; 73};
72 74
73enum mdp5_ctl_mode { 75enum mdp5_ctl_mode {
@@ -126,7 +128,11 @@ enum mdp5_client_id {
126 CID_RGB0 = 16, 128 CID_RGB0 = 16,
127 CID_RGB1 = 17, 129 CID_RGB1 = 17,
128 CID_RGB2 = 18, 130 CID_RGB2 = 18,
129 CID_MAX = 19, 131 CID_VIG3_Y = 19,
132 CID_VIG3_CR = 20,
133 CID_VIG3_CB = 21,
134 CID_RGB3 = 22,
135 CID_MAX = 23,
130}; 136};
131 137
132enum mdp5_igc_type { 138enum mdp5_igc_type {
@@ -299,11 +305,34 @@ static inline uint32_t MDP5_IGC_LUT_REG_VAL(uint32_t val)
299#define MDP5_IGC_LUT_REG_DISABLE_PIPE_1 0x20000000 305#define MDP5_IGC_LUT_REG_DISABLE_PIPE_1 0x20000000
300#define MDP5_IGC_LUT_REG_DISABLE_PIPE_2 0x40000000 306#define MDP5_IGC_LUT_REG_DISABLE_PIPE_2 0x40000000
301 307
302static inline uint32_t REG_MDP5_CTL(uint32_t i0) { return 0x00000600 + 0x100*i0; } 308static inline uint32_t __offset_CTL(uint32_t idx)
309{
310 switch (idx) {
311 case 0: return (mdp5_cfg->ctl.base[0]);
312 case 1: return (mdp5_cfg->ctl.base[1]);
313 case 2: return (mdp5_cfg->ctl.base[2]);
314 case 3: return (mdp5_cfg->ctl.base[3]);
315 case 4: return (mdp5_cfg->ctl.base[4]);
316 default: return INVALID_IDX(idx);
317 }
318}
319static inline uint32_t REG_MDP5_CTL(uint32_t i0) { return 0x00000000 + __offset_CTL(i0); }
303 320
304static inline uint32_t REG_MDP5_CTL_LAYER(uint32_t i0, uint32_t i1) { return 0x00000600 + 0x100*i0 + 0x4*i1; } 321static inline uint32_t __offset_LAYER(uint32_t idx)
322{
323 switch (idx) {
324 case 0: return 0x00000000;
325 case 1: return 0x00000004;
326 case 2: return 0x00000008;
327 case 3: return 0x0000000c;
328 case 4: return 0x00000010;
329 case 5: return 0x00000024;
330 default: return INVALID_IDX(idx);
331 }
332}
333static inline uint32_t REG_MDP5_CTL_LAYER(uint32_t i0, uint32_t i1) { return 0x00000000 + __offset_CTL(i0) + __offset_LAYER(i1); }
305 334
306static inline uint32_t REG_MDP5_CTL_LAYER_REG(uint32_t i0, uint32_t i1) { return 0x00000600 + 0x100*i0 + 0x4*i1; } 335static inline uint32_t REG_MDP5_CTL_LAYER_REG(uint32_t i0, uint32_t i1) { return 0x00000000 + __offset_CTL(i0) + __offset_LAYER(i1); }
307#define MDP5_CTL_LAYER_REG_VIG0__MASK 0x00000007 336#define MDP5_CTL_LAYER_REG_VIG0__MASK 0x00000007
308#define MDP5_CTL_LAYER_REG_VIG0__SHIFT 0 337#define MDP5_CTL_LAYER_REG_VIG0__SHIFT 0
309static inline uint32_t MDP5_CTL_LAYER_REG_VIG0(enum mdp_mixer_stage_id val) 338static inline uint32_t MDP5_CTL_LAYER_REG_VIG0(enum mdp_mixer_stage_id val)
@@ -354,8 +383,20 @@ static inline uint32_t MDP5_CTL_LAYER_REG_DMA1(enum mdp_mixer_stage_id val)
354} 383}
355#define MDP5_CTL_LAYER_REG_BORDER_COLOR 0x01000000 384#define MDP5_CTL_LAYER_REG_BORDER_COLOR 0x01000000
356#define MDP5_CTL_LAYER_REG_CURSOR_OUT 0x02000000 385#define MDP5_CTL_LAYER_REG_CURSOR_OUT 0x02000000
386#define MDP5_CTL_LAYER_REG_VIG3__MASK 0x1c000000
387#define MDP5_CTL_LAYER_REG_VIG3__SHIFT 26
388static inline uint32_t MDP5_CTL_LAYER_REG_VIG3(enum mdp_mixer_stage_id val)
389{
390 return ((val) << MDP5_CTL_LAYER_REG_VIG3__SHIFT) & MDP5_CTL_LAYER_REG_VIG3__MASK;
391}
392#define MDP5_CTL_LAYER_REG_RGB3__MASK 0xe0000000
393#define MDP5_CTL_LAYER_REG_RGB3__SHIFT 29
394static inline uint32_t MDP5_CTL_LAYER_REG_RGB3(enum mdp_mixer_stage_id val)
395{
396 return ((val) << MDP5_CTL_LAYER_REG_RGB3__SHIFT) & MDP5_CTL_LAYER_REG_RGB3__MASK;
397}
357 398
358static inline uint32_t REG_MDP5_CTL_OP(uint32_t i0) { return 0x00000614 + 0x100*i0; } 399static inline uint32_t REG_MDP5_CTL_OP(uint32_t i0) { return 0x00000014 + __offset_CTL(i0); }
359#define MDP5_CTL_OP_MODE__MASK 0x0000000f 400#define MDP5_CTL_OP_MODE__MASK 0x0000000f
360#define MDP5_CTL_OP_MODE__SHIFT 0 401#define MDP5_CTL_OP_MODE__SHIFT 0
361static inline uint32_t MDP5_CTL_OP_MODE(enum mdp5_ctl_mode val) 402static inline uint32_t MDP5_CTL_OP_MODE(enum mdp5_ctl_mode val)
@@ -377,7 +418,7 @@ static inline uint32_t MDP5_CTL_OP_PACK_3D(enum mdp5_pack_3d val)
377 return ((val) << MDP5_CTL_OP_PACK_3D__SHIFT) & MDP5_CTL_OP_PACK_3D__MASK; 418 return ((val) << MDP5_CTL_OP_PACK_3D__SHIFT) & MDP5_CTL_OP_PACK_3D__MASK;
378} 419}
379 420
380static inline uint32_t REG_MDP5_CTL_FLUSH(uint32_t i0) { return 0x00000618 + 0x100*i0; } 421static inline uint32_t REG_MDP5_CTL_FLUSH(uint32_t i0) { return 0x00000018 + __offset_CTL(i0); }
381#define MDP5_CTL_FLUSH_VIG0 0x00000001 422#define MDP5_CTL_FLUSH_VIG0 0x00000001
382#define MDP5_CTL_FLUSH_VIG1 0x00000002 423#define MDP5_CTL_FLUSH_VIG1 0x00000002
383#define MDP5_CTL_FLUSH_VIG2 0x00000004 424#define MDP5_CTL_FLUSH_VIG2 0x00000004
@@ -387,26 +428,48 @@ static inline uint32_t REG_MDP5_CTL_FLUSH(uint32_t i0) { return 0x00000618 + 0x1
387#define MDP5_CTL_FLUSH_LM0 0x00000040 428#define MDP5_CTL_FLUSH_LM0 0x00000040
388#define MDP5_CTL_FLUSH_LM1 0x00000080 429#define MDP5_CTL_FLUSH_LM1 0x00000080
389#define MDP5_CTL_FLUSH_LM2 0x00000100 430#define MDP5_CTL_FLUSH_LM2 0x00000100
431#define MDP5_CTL_FLUSH_LM3 0x00000200
432#define MDP5_CTL_FLUSH_LM4 0x00000400
390#define MDP5_CTL_FLUSH_DMA0 0x00000800 433#define MDP5_CTL_FLUSH_DMA0 0x00000800
391#define MDP5_CTL_FLUSH_DMA1 0x00001000 434#define MDP5_CTL_FLUSH_DMA1 0x00001000
392#define MDP5_CTL_FLUSH_DSPP0 0x00002000 435#define MDP5_CTL_FLUSH_DSPP0 0x00002000
393#define MDP5_CTL_FLUSH_DSPP1 0x00004000 436#define MDP5_CTL_FLUSH_DSPP1 0x00004000
394#define MDP5_CTL_FLUSH_DSPP2 0x00008000 437#define MDP5_CTL_FLUSH_DSPP2 0x00008000
395#define MDP5_CTL_FLUSH_CTL 0x00020000 438#define MDP5_CTL_FLUSH_CTL 0x00020000
439#define MDP5_CTL_FLUSH_VIG3 0x00040000
440#define MDP5_CTL_FLUSH_RGB3 0x00080000
441#define MDP5_CTL_FLUSH_LM5 0x00100000
442#define MDP5_CTL_FLUSH_DSPP3 0x00200000
396 443
397static inline uint32_t REG_MDP5_CTL_START(uint32_t i0) { return 0x0000061c + 0x100*i0; } 444static inline uint32_t REG_MDP5_CTL_START(uint32_t i0) { return 0x0000001c + __offset_CTL(i0); }
398 445
399static inline uint32_t REG_MDP5_CTL_PACK_3D(uint32_t i0) { return 0x00000620 + 0x100*i0; } 446static inline uint32_t REG_MDP5_CTL_PACK_3D(uint32_t i0) { return 0x00000020 + __offset_CTL(i0); }
400 447
401static inline uint32_t REG_MDP5_PIPE(enum mdp5_pipe i0) { return 0x00001200 + 0x400*i0; } 448static inline uint32_t __offset_PIPE(enum mdp5_pipe idx)
449{
450 switch (idx) {
451 case SSPP_VIG0: return (mdp5_cfg->pipe_vig.base[0]);
452 case SSPP_VIG1: return (mdp5_cfg->pipe_vig.base[1]);
453 case SSPP_VIG2: return (mdp5_cfg->pipe_vig.base[2]);
454 case SSPP_RGB0: return (mdp5_cfg->pipe_rgb.base[0]);
455 case SSPP_RGB1: return (mdp5_cfg->pipe_rgb.base[1]);
456 case SSPP_RGB2: return (mdp5_cfg->pipe_rgb.base[2]);
457 case SSPP_DMA0: return (mdp5_cfg->pipe_dma.base[0]);
458 case SSPP_DMA1: return (mdp5_cfg->pipe_dma.base[1]);
459 case SSPP_VIG3: return (mdp5_cfg->pipe_vig.base[3]);
460 case SSPP_RGB3: return (mdp5_cfg->pipe_rgb.base[3]);
461 default: return INVALID_IDX(idx);
462 }
463}
464static inline uint32_t REG_MDP5_PIPE(enum mdp5_pipe i0) { return 0x00000000 + __offset_PIPE(i0); }
402 465
403static inline uint32_t REG_MDP5_PIPE_HIST_CTL_BASE(enum mdp5_pipe i0) { return 0x000014c4 + 0x400*i0; } 466static inline uint32_t REG_MDP5_PIPE_HIST_CTL_BASE(enum mdp5_pipe i0) { return 0x000002c4 + __offset_PIPE(i0); }
404 467
405static inline uint32_t REG_MDP5_PIPE_HIST_LUT_BASE(enum mdp5_pipe i0) { return 0x000014f0 + 0x400*i0; } 468static inline uint32_t REG_MDP5_PIPE_HIST_LUT_BASE(enum mdp5_pipe i0) { return 0x000002f0 + __offset_PIPE(i0); }
406 469
407static inline uint32_t REG_MDP5_PIPE_HIST_LUT_SWAP(enum mdp5_pipe i0) { return 0x00001500 + 0x400*i0; } 470static inline uint32_t REG_MDP5_PIPE_HIST_LUT_SWAP(enum mdp5_pipe i0) { return 0x00000300 + __offset_PIPE(i0); }
408 471
409static inline uint32_t REG_MDP5_PIPE_SRC_SIZE(enum mdp5_pipe i0) { return 0x00001200 + 0x400*i0; } 472static inline uint32_t REG_MDP5_PIPE_SRC_SIZE(enum mdp5_pipe i0) { return 0x00000000 + __offset_PIPE(i0); }
410#define MDP5_PIPE_SRC_SIZE_HEIGHT__MASK 0xffff0000 473#define MDP5_PIPE_SRC_SIZE_HEIGHT__MASK 0xffff0000
411#define MDP5_PIPE_SRC_SIZE_HEIGHT__SHIFT 16 474#define MDP5_PIPE_SRC_SIZE_HEIGHT__SHIFT 16
412static inline uint32_t MDP5_PIPE_SRC_SIZE_HEIGHT(uint32_t val) 475static inline uint32_t MDP5_PIPE_SRC_SIZE_HEIGHT(uint32_t val)
@@ -420,7 +483,7 @@ static inline uint32_t MDP5_PIPE_SRC_SIZE_WIDTH(uint32_t val)
420 return ((val) << MDP5_PIPE_SRC_SIZE_WIDTH__SHIFT) & MDP5_PIPE_SRC_SIZE_WIDTH__MASK; 483 return ((val) << MDP5_PIPE_SRC_SIZE_WIDTH__SHIFT) & MDP5_PIPE_SRC_SIZE_WIDTH__MASK;
421} 484}
422 485
423static inline uint32_t REG_MDP5_PIPE_SRC_IMG_SIZE(enum mdp5_pipe i0) { return 0x00001204 + 0x400*i0; } 486static inline uint32_t REG_MDP5_PIPE_SRC_IMG_SIZE(enum mdp5_pipe i0) { return 0x00000004 + __offset_PIPE(i0); }
424#define MDP5_PIPE_SRC_IMG_SIZE_HEIGHT__MASK 0xffff0000 487#define MDP5_PIPE_SRC_IMG_SIZE_HEIGHT__MASK 0xffff0000
425#define MDP5_PIPE_SRC_IMG_SIZE_HEIGHT__SHIFT 16 488#define MDP5_PIPE_SRC_IMG_SIZE_HEIGHT__SHIFT 16
426static inline uint32_t MDP5_PIPE_SRC_IMG_SIZE_HEIGHT(uint32_t val) 489static inline uint32_t MDP5_PIPE_SRC_IMG_SIZE_HEIGHT(uint32_t val)
@@ -434,7 +497,7 @@ static inline uint32_t MDP5_PIPE_SRC_IMG_SIZE_WIDTH(uint32_t val)
434 return ((val) << MDP5_PIPE_SRC_IMG_SIZE_WIDTH__SHIFT) & MDP5_PIPE_SRC_IMG_SIZE_WIDTH__MASK; 497 return ((val) << MDP5_PIPE_SRC_IMG_SIZE_WIDTH__SHIFT) & MDP5_PIPE_SRC_IMG_SIZE_WIDTH__MASK;
435} 498}
436 499
437static inline uint32_t REG_MDP5_PIPE_SRC_XY(enum mdp5_pipe i0) { return 0x00001208 + 0x400*i0; } 500static inline uint32_t REG_MDP5_PIPE_SRC_XY(enum mdp5_pipe i0) { return 0x00000008 + __offset_PIPE(i0); }
438#define MDP5_PIPE_SRC_XY_Y__MASK 0xffff0000 501#define MDP5_PIPE_SRC_XY_Y__MASK 0xffff0000
439#define MDP5_PIPE_SRC_XY_Y__SHIFT 16 502#define MDP5_PIPE_SRC_XY_Y__SHIFT 16
440static inline uint32_t MDP5_PIPE_SRC_XY_Y(uint32_t val) 503static inline uint32_t MDP5_PIPE_SRC_XY_Y(uint32_t val)
@@ -448,7 +511,7 @@ static inline uint32_t MDP5_PIPE_SRC_XY_X(uint32_t val)
448 return ((val) << MDP5_PIPE_SRC_XY_X__SHIFT) & MDP5_PIPE_SRC_XY_X__MASK; 511 return ((val) << MDP5_PIPE_SRC_XY_X__SHIFT) & MDP5_PIPE_SRC_XY_X__MASK;
449} 512}
450 513
451static inline uint32_t REG_MDP5_PIPE_OUT_SIZE(enum mdp5_pipe i0) { return 0x0000120c + 0x400*i0; } 514static inline uint32_t REG_MDP5_PIPE_OUT_SIZE(enum mdp5_pipe i0) { return 0x0000000c + __offset_PIPE(i0); }
452#define MDP5_PIPE_OUT_SIZE_HEIGHT__MASK 0xffff0000 515#define MDP5_PIPE_OUT_SIZE_HEIGHT__MASK 0xffff0000
453#define MDP5_PIPE_OUT_SIZE_HEIGHT__SHIFT 16 516#define MDP5_PIPE_OUT_SIZE_HEIGHT__SHIFT 16
454static inline uint32_t MDP5_PIPE_OUT_SIZE_HEIGHT(uint32_t val) 517static inline uint32_t MDP5_PIPE_OUT_SIZE_HEIGHT(uint32_t val)
@@ -462,7 +525,7 @@ static inline uint32_t MDP5_PIPE_OUT_SIZE_WIDTH(uint32_t val)
462 return ((val) << MDP5_PIPE_OUT_SIZE_WIDTH__SHIFT) & MDP5_PIPE_OUT_SIZE_WIDTH__MASK; 525 return ((val) << MDP5_PIPE_OUT_SIZE_WIDTH__SHIFT) & MDP5_PIPE_OUT_SIZE_WIDTH__MASK;
463} 526}
464 527
465static inline uint32_t REG_MDP5_PIPE_OUT_XY(enum mdp5_pipe i0) { return 0x00001210 + 0x400*i0; } 528static inline uint32_t REG_MDP5_PIPE_OUT_XY(enum mdp5_pipe i0) { return 0x00000010 + __offset_PIPE(i0); }
466#define MDP5_PIPE_OUT_XY_Y__MASK 0xffff0000 529#define MDP5_PIPE_OUT_XY_Y__MASK 0xffff0000
467#define MDP5_PIPE_OUT_XY_Y__SHIFT 16 530#define MDP5_PIPE_OUT_XY_Y__SHIFT 16
468static inline uint32_t MDP5_PIPE_OUT_XY_Y(uint32_t val) 531static inline uint32_t MDP5_PIPE_OUT_XY_Y(uint32_t val)
@@ -476,15 +539,15 @@ static inline uint32_t MDP5_PIPE_OUT_XY_X(uint32_t val)
476 return ((val) << MDP5_PIPE_OUT_XY_X__SHIFT) & MDP5_PIPE_OUT_XY_X__MASK; 539 return ((val) << MDP5_PIPE_OUT_XY_X__SHIFT) & MDP5_PIPE_OUT_XY_X__MASK;
477} 540}
478 541
479static inline uint32_t REG_MDP5_PIPE_SRC0_ADDR(enum mdp5_pipe i0) { return 0x00001214 + 0x400*i0; } 542static inline uint32_t REG_MDP5_PIPE_SRC0_ADDR(enum mdp5_pipe i0) { return 0x00000014 + __offset_PIPE(i0); }
480 543
481static inline uint32_t REG_MDP5_PIPE_SRC1_ADDR(enum mdp5_pipe i0) { return 0x00001218 + 0x400*i0; } 544static inline uint32_t REG_MDP5_PIPE_SRC1_ADDR(enum mdp5_pipe i0) { return 0x00000018 + __offset_PIPE(i0); }
482 545
483static inline uint32_t REG_MDP5_PIPE_SRC2_ADDR(enum mdp5_pipe i0) { return 0x0000121c + 0x400*i0; } 546static inline uint32_t REG_MDP5_PIPE_SRC2_ADDR(enum mdp5_pipe i0) { return 0x0000001c + __offset_PIPE(i0); }
484 547
485static inline uint32_t REG_MDP5_PIPE_SRC3_ADDR(enum mdp5_pipe i0) { return 0x00001220 + 0x400*i0; } 548static inline uint32_t REG_MDP5_PIPE_SRC3_ADDR(enum mdp5_pipe i0) { return 0x00000020 + __offset_PIPE(i0); }
486 549
487static inline uint32_t REG_MDP5_PIPE_SRC_STRIDE_A(enum mdp5_pipe i0) { return 0x00001224 + 0x400*i0; } 550static inline uint32_t REG_MDP5_PIPE_SRC_STRIDE_A(enum mdp5_pipe i0) { return 0x00000024 + __offset_PIPE(i0); }
488#define MDP5_PIPE_SRC_STRIDE_A_P0__MASK 0x0000ffff 551#define MDP5_PIPE_SRC_STRIDE_A_P0__MASK 0x0000ffff
489#define MDP5_PIPE_SRC_STRIDE_A_P0__SHIFT 0 552#define MDP5_PIPE_SRC_STRIDE_A_P0__SHIFT 0
490static inline uint32_t MDP5_PIPE_SRC_STRIDE_A_P0(uint32_t val) 553static inline uint32_t MDP5_PIPE_SRC_STRIDE_A_P0(uint32_t val)
@@ -498,7 +561,7 @@ static inline uint32_t MDP5_PIPE_SRC_STRIDE_A_P1(uint32_t val)
498 return ((val) << MDP5_PIPE_SRC_STRIDE_A_P1__SHIFT) & MDP5_PIPE_SRC_STRIDE_A_P1__MASK; 561 return ((val) << MDP5_PIPE_SRC_STRIDE_A_P1__SHIFT) & MDP5_PIPE_SRC_STRIDE_A_P1__MASK;
499} 562}
500 563
501static inline uint32_t REG_MDP5_PIPE_SRC_STRIDE_B(enum mdp5_pipe i0) { return 0x00001228 + 0x400*i0; } 564static inline uint32_t REG_MDP5_PIPE_SRC_STRIDE_B(enum mdp5_pipe i0) { return 0x00000028 + __offset_PIPE(i0); }
502#define MDP5_PIPE_SRC_STRIDE_B_P2__MASK 0x0000ffff 565#define MDP5_PIPE_SRC_STRIDE_B_P2__MASK 0x0000ffff
503#define MDP5_PIPE_SRC_STRIDE_B_P2__SHIFT 0 566#define MDP5_PIPE_SRC_STRIDE_B_P2__SHIFT 0
504static inline uint32_t MDP5_PIPE_SRC_STRIDE_B_P2(uint32_t val) 567static inline uint32_t MDP5_PIPE_SRC_STRIDE_B_P2(uint32_t val)
@@ -512,9 +575,9 @@ static inline uint32_t MDP5_PIPE_SRC_STRIDE_B_P3(uint32_t val)
512 return ((val) << MDP5_PIPE_SRC_STRIDE_B_P3__SHIFT) & MDP5_PIPE_SRC_STRIDE_B_P3__MASK; 575 return ((val) << MDP5_PIPE_SRC_STRIDE_B_P3__SHIFT) & MDP5_PIPE_SRC_STRIDE_B_P3__MASK;
513} 576}
514 577
515static inline uint32_t REG_MDP5_PIPE_STILE_FRAME_SIZE(enum mdp5_pipe i0) { return 0x0000122c + 0x400*i0; } 578static inline uint32_t REG_MDP5_PIPE_STILE_FRAME_SIZE(enum mdp5_pipe i0) { return 0x0000002c + __offset_PIPE(i0); }
516 579
517static inline uint32_t REG_MDP5_PIPE_SRC_FORMAT(enum mdp5_pipe i0) { return 0x00001230 + 0x400*i0; } 580static inline uint32_t REG_MDP5_PIPE_SRC_FORMAT(enum mdp5_pipe i0) { return 0x00000030 + __offset_PIPE(i0); }
518#define MDP5_PIPE_SRC_FORMAT_G_BPC__MASK 0x00000003 581#define MDP5_PIPE_SRC_FORMAT_G_BPC__MASK 0x00000003
519#define MDP5_PIPE_SRC_FORMAT_G_BPC__SHIFT 0 582#define MDP5_PIPE_SRC_FORMAT_G_BPC__SHIFT 0
520static inline uint32_t MDP5_PIPE_SRC_FORMAT_G_BPC(enum mdp_bpc val) 583static inline uint32_t MDP5_PIPE_SRC_FORMAT_G_BPC(enum mdp_bpc val)
@@ -568,7 +631,7 @@ static inline uint32_t MDP5_PIPE_SRC_FORMAT_CHROMA_SAMP(enum mdp5_chroma_samp_ty
568 return ((val) << MDP5_PIPE_SRC_FORMAT_CHROMA_SAMP__SHIFT) & MDP5_PIPE_SRC_FORMAT_CHROMA_SAMP__MASK; 631 return ((val) << MDP5_PIPE_SRC_FORMAT_CHROMA_SAMP__SHIFT) & MDP5_PIPE_SRC_FORMAT_CHROMA_SAMP__MASK;
569} 632}
570 633
571static inline uint32_t REG_MDP5_PIPE_SRC_UNPACK(enum mdp5_pipe i0) { return 0x00001234 + 0x400*i0; } 634static inline uint32_t REG_MDP5_PIPE_SRC_UNPACK(enum mdp5_pipe i0) { return 0x00000034 + __offset_PIPE(i0); }
572#define MDP5_PIPE_SRC_UNPACK_ELEM0__MASK 0x000000ff 635#define MDP5_PIPE_SRC_UNPACK_ELEM0__MASK 0x000000ff
573#define MDP5_PIPE_SRC_UNPACK_ELEM0__SHIFT 0 636#define MDP5_PIPE_SRC_UNPACK_ELEM0__SHIFT 0
574static inline uint32_t MDP5_PIPE_SRC_UNPACK_ELEM0(uint32_t val) 637static inline uint32_t MDP5_PIPE_SRC_UNPACK_ELEM0(uint32_t val)
@@ -594,7 +657,7 @@ static inline uint32_t MDP5_PIPE_SRC_UNPACK_ELEM3(uint32_t val)
594 return ((val) << MDP5_PIPE_SRC_UNPACK_ELEM3__SHIFT) & MDP5_PIPE_SRC_UNPACK_ELEM3__MASK; 657 return ((val) << MDP5_PIPE_SRC_UNPACK_ELEM3__SHIFT) & MDP5_PIPE_SRC_UNPACK_ELEM3__MASK;
595} 658}
596 659
597static inline uint32_t REG_MDP5_PIPE_SRC_OP_MODE(enum mdp5_pipe i0) { return 0x00001238 + 0x400*i0; } 660static inline uint32_t REG_MDP5_PIPE_SRC_OP_MODE(enum mdp5_pipe i0) { return 0x00000038 + __offset_PIPE(i0); }
598#define MDP5_PIPE_SRC_OP_MODE_BWC_EN 0x00000001 661#define MDP5_PIPE_SRC_OP_MODE_BWC_EN 0x00000001
599#define MDP5_PIPE_SRC_OP_MODE_BWC__MASK 0x00000006 662#define MDP5_PIPE_SRC_OP_MODE_BWC__MASK 0x00000006
600#define MDP5_PIPE_SRC_OP_MODE_BWC__SHIFT 1 663#define MDP5_PIPE_SRC_OP_MODE_BWC__SHIFT 1
@@ -610,29 +673,29 @@ static inline uint32_t MDP5_PIPE_SRC_OP_MODE_BWC(enum mdp5_pipe_bwc val)
610#define MDP5_PIPE_SRC_OP_MODE_DEINTERLACE 0x00400000 673#define MDP5_PIPE_SRC_OP_MODE_DEINTERLACE 0x00400000
611#define MDP5_PIPE_SRC_OP_MODE_DEINTERLACE_ODD 0x00800000 674#define MDP5_PIPE_SRC_OP_MODE_DEINTERLACE_ODD 0x00800000
612 675
613static inline uint32_t REG_MDP5_PIPE_SRC_CONSTANT_COLOR(enum mdp5_pipe i0) { return 0x0000123c + 0x400*i0; } 676static inline uint32_t REG_MDP5_PIPE_SRC_CONSTANT_COLOR(enum mdp5_pipe i0) { return 0x0000003c + __offset_PIPE(i0); }
614 677
615static inline uint32_t REG_MDP5_PIPE_FETCH_CONFIG(enum mdp5_pipe i0) { return 0x00001248 + 0x400*i0; } 678static inline uint32_t REG_MDP5_PIPE_FETCH_CONFIG(enum mdp5_pipe i0) { return 0x00000048 + __offset_PIPE(i0); }
616 679
617static inline uint32_t REG_MDP5_PIPE_VC1_RANGE(enum mdp5_pipe i0) { return 0x0000124c + 0x400*i0; } 680static inline uint32_t REG_MDP5_PIPE_VC1_RANGE(enum mdp5_pipe i0) { return 0x0000004c + __offset_PIPE(i0); }
618 681
619static inline uint32_t REG_MDP5_PIPE_REQPRIO_FIFO_WM_0(enum mdp5_pipe i0) { return 0x00001250 + 0x400*i0; } 682static inline uint32_t REG_MDP5_PIPE_REQPRIO_FIFO_WM_0(enum mdp5_pipe i0) { return 0x00000050 + __offset_PIPE(i0); }
620 683
621static inline uint32_t REG_MDP5_PIPE_REQPRIO_FIFO_WM_1(enum mdp5_pipe i0) { return 0x00001254 + 0x400*i0; } 684static inline uint32_t REG_MDP5_PIPE_REQPRIO_FIFO_WM_1(enum mdp5_pipe i0) { return 0x00000054 + __offset_PIPE(i0); }
622 685
623static inline uint32_t REG_MDP5_PIPE_REQPRIO_FIFO_WM_2(enum mdp5_pipe i0) { return 0x00001258 + 0x400*i0; } 686static inline uint32_t REG_MDP5_PIPE_REQPRIO_FIFO_WM_2(enum mdp5_pipe i0) { return 0x00000058 + __offset_PIPE(i0); }
624 687
625static inline uint32_t REG_MDP5_PIPE_SRC_ADDR_SW_STATUS(enum mdp5_pipe i0) { return 0x00001270 + 0x400*i0; } 688static inline uint32_t REG_MDP5_PIPE_SRC_ADDR_SW_STATUS(enum mdp5_pipe i0) { return 0x00000070 + __offset_PIPE(i0); }
626 689
627static inline uint32_t REG_MDP5_PIPE_CURRENT_SRC0_ADDR(enum mdp5_pipe i0) { return 0x000012a4 + 0x400*i0; } 690static inline uint32_t REG_MDP5_PIPE_CURRENT_SRC0_ADDR(enum mdp5_pipe i0) { return 0x000000a4 + __offset_PIPE(i0); }
628 691
629static inline uint32_t REG_MDP5_PIPE_CURRENT_SRC1_ADDR(enum mdp5_pipe i0) { return 0x000012a8 + 0x400*i0; } 692static inline uint32_t REG_MDP5_PIPE_CURRENT_SRC1_ADDR(enum mdp5_pipe i0) { return 0x000000a8 + __offset_PIPE(i0); }
630 693
631static inline uint32_t REG_MDP5_PIPE_CURRENT_SRC2_ADDR(enum mdp5_pipe i0) { return 0x000012ac + 0x400*i0; } 694static inline uint32_t REG_MDP5_PIPE_CURRENT_SRC2_ADDR(enum mdp5_pipe i0) { return 0x000000ac + __offset_PIPE(i0); }
632 695
633static inline uint32_t REG_MDP5_PIPE_CURRENT_SRC3_ADDR(enum mdp5_pipe i0) { return 0x000012b0 + 0x400*i0; } 696static inline uint32_t REG_MDP5_PIPE_CURRENT_SRC3_ADDR(enum mdp5_pipe i0) { return 0x000000b0 + __offset_PIPE(i0); }
634 697
635static inline uint32_t REG_MDP5_PIPE_DECIMATION(enum mdp5_pipe i0) { return 0x000012b4 + 0x400*i0; } 698static inline uint32_t REG_MDP5_PIPE_DECIMATION(enum mdp5_pipe i0) { return 0x000000b4 + __offset_PIPE(i0); }
636#define MDP5_PIPE_DECIMATION_VERT__MASK 0x000000ff 699#define MDP5_PIPE_DECIMATION_VERT__MASK 0x000000ff
637#define MDP5_PIPE_DECIMATION_VERT__SHIFT 0 700#define MDP5_PIPE_DECIMATION_VERT__SHIFT 0
638static inline uint32_t MDP5_PIPE_DECIMATION_VERT(uint32_t val) 701static inline uint32_t MDP5_PIPE_DECIMATION_VERT(uint32_t val)
@@ -646,7 +709,7 @@ static inline uint32_t MDP5_PIPE_DECIMATION_HORZ(uint32_t val)
646 return ((val) << MDP5_PIPE_DECIMATION_HORZ__SHIFT) & MDP5_PIPE_DECIMATION_HORZ__MASK; 709 return ((val) << MDP5_PIPE_DECIMATION_HORZ__SHIFT) & MDP5_PIPE_DECIMATION_HORZ__MASK;
647} 710}
648 711
649static inline uint32_t REG_MDP5_PIPE_SCALE_CONFIG(enum mdp5_pipe i0) { return 0x00001404 + 0x400*i0; } 712static inline uint32_t REG_MDP5_PIPE_SCALE_CONFIG(enum mdp5_pipe i0) { return 0x00000204 + __offset_PIPE(i0); }
650#define MDP5_PIPE_SCALE_CONFIG_SCALEX_EN 0x00000001 713#define MDP5_PIPE_SCALE_CONFIG_SCALEX_EN 0x00000001
651#define MDP5_PIPE_SCALE_CONFIG_SCALEY_EN 0x00000002 714#define MDP5_PIPE_SCALE_CONFIG_SCALEY_EN 0x00000002
652#define MDP5_PIPE_SCALE_CONFIG_SCALEX_MIN_FILTER__MASK 0x00000300 715#define MDP5_PIPE_SCALE_CONFIG_SCALEX_MIN_FILTER__MASK 0x00000300
@@ -686,23 +749,34 @@ static inline uint32_t MDP5_PIPE_SCALE_CONFIG_SCALEY_MAX_FILTER(enum mdp5_scale_
686 return ((val) << MDP5_PIPE_SCALE_CONFIG_SCALEY_MAX_FILTER__SHIFT) & MDP5_PIPE_SCALE_CONFIG_SCALEY_MAX_FILTER__MASK; 749 return ((val) << MDP5_PIPE_SCALE_CONFIG_SCALEY_MAX_FILTER__SHIFT) & MDP5_PIPE_SCALE_CONFIG_SCALEY_MAX_FILTER__MASK;
687} 750}
688 751
689static inline uint32_t REG_MDP5_PIPE_SCALE_PHASE_STEP_X(enum mdp5_pipe i0) { return 0x00001410 + 0x400*i0; } 752static inline uint32_t REG_MDP5_PIPE_SCALE_PHASE_STEP_X(enum mdp5_pipe i0) { return 0x00000210 + __offset_PIPE(i0); }
690 753
691static inline uint32_t REG_MDP5_PIPE_SCALE_PHASE_STEP_Y(enum mdp5_pipe i0) { return 0x00001414 + 0x400*i0; } 754static inline uint32_t REG_MDP5_PIPE_SCALE_PHASE_STEP_Y(enum mdp5_pipe i0) { return 0x00000214 + __offset_PIPE(i0); }
692 755
693static inline uint32_t REG_MDP5_PIPE_SCALE_INIT_PHASE_X(enum mdp5_pipe i0) { return 0x00001420 + 0x400*i0; } 756static inline uint32_t REG_MDP5_PIPE_SCALE_INIT_PHASE_X(enum mdp5_pipe i0) { return 0x00000220 + __offset_PIPE(i0); }
694 757
695static inline uint32_t REG_MDP5_PIPE_SCALE_INIT_PHASE_Y(enum mdp5_pipe i0) { return 0x00001424 + 0x400*i0; } 758static inline uint32_t REG_MDP5_PIPE_SCALE_INIT_PHASE_Y(enum mdp5_pipe i0) { return 0x00000224 + __offset_PIPE(i0); }
696 759
697static inline uint32_t REG_MDP5_LM(uint32_t i0) { return 0x00003200 + 0x400*i0; } 760static inline uint32_t __offset_LM(uint32_t idx)
761{
762 switch (idx) {
763 case 0: return (mdp5_cfg->lm.base[0]);
764 case 1: return (mdp5_cfg->lm.base[1]);
765 case 2: return (mdp5_cfg->lm.base[2]);
766 case 3: return (mdp5_cfg->lm.base[3]);
767 case 4: return (mdp5_cfg->lm.base[4]);
768 default: return INVALID_IDX(idx);
769 }
770}
771static inline uint32_t REG_MDP5_LM(uint32_t i0) { return 0x00000000 + __offset_LM(i0); }
698 772
699static inline uint32_t REG_MDP5_LM_BLEND_COLOR_OUT(uint32_t i0) { return 0x00003200 + 0x400*i0; } 773static inline uint32_t REG_MDP5_LM_BLEND_COLOR_OUT(uint32_t i0) { return 0x00000000 + __offset_LM(i0); }
700#define MDP5_LM_BLEND_COLOR_OUT_STAGE0_FG_ALPHA 0x00000002 774#define MDP5_LM_BLEND_COLOR_OUT_STAGE0_FG_ALPHA 0x00000002
701#define MDP5_LM_BLEND_COLOR_OUT_STAGE1_FG_ALPHA 0x00000004 775#define MDP5_LM_BLEND_COLOR_OUT_STAGE1_FG_ALPHA 0x00000004
702#define MDP5_LM_BLEND_COLOR_OUT_STAGE2_FG_ALPHA 0x00000008 776#define MDP5_LM_BLEND_COLOR_OUT_STAGE2_FG_ALPHA 0x00000008
703#define MDP5_LM_BLEND_COLOR_OUT_STAGE3_FG_ALPHA 0x00000010 777#define MDP5_LM_BLEND_COLOR_OUT_STAGE3_FG_ALPHA 0x00000010
704 778
705static inline uint32_t REG_MDP5_LM_OUT_SIZE(uint32_t i0) { return 0x00003204 + 0x400*i0; } 779static inline uint32_t REG_MDP5_LM_OUT_SIZE(uint32_t i0) { return 0x00000004 + __offset_LM(i0); }
706#define MDP5_LM_OUT_SIZE_HEIGHT__MASK 0xffff0000 780#define MDP5_LM_OUT_SIZE_HEIGHT__MASK 0xffff0000
707#define MDP5_LM_OUT_SIZE_HEIGHT__SHIFT 16 781#define MDP5_LM_OUT_SIZE_HEIGHT__SHIFT 16
708static inline uint32_t MDP5_LM_OUT_SIZE_HEIGHT(uint32_t val) 782static inline uint32_t MDP5_LM_OUT_SIZE_HEIGHT(uint32_t val)
@@ -716,13 +790,13 @@ static inline uint32_t MDP5_LM_OUT_SIZE_WIDTH(uint32_t val)
716 return ((val) << MDP5_LM_OUT_SIZE_WIDTH__SHIFT) & MDP5_LM_OUT_SIZE_WIDTH__MASK; 790 return ((val) << MDP5_LM_OUT_SIZE_WIDTH__SHIFT) & MDP5_LM_OUT_SIZE_WIDTH__MASK;
717} 791}
718 792
719static inline uint32_t REG_MDP5_LM_BORDER_COLOR_0(uint32_t i0) { return 0x00003208 + 0x400*i0; } 793static inline uint32_t REG_MDP5_LM_BORDER_COLOR_0(uint32_t i0) { return 0x00000008 + __offset_LM(i0); }
720 794
721static inline uint32_t REG_MDP5_LM_BORDER_COLOR_1(uint32_t i0) { return 0x00003210 + 0x400*i0; } 795static inline uint32_t REG_MDP5_LM_BORDER_COLOR_1(uint32_t i0) { return 0x00000010 + __offset_LM(i0); }
722 796
723static inline uint32_t REG_MDP5_LM_BLEND(uint32_t i0, uint32_t i1) { return 0x00003220 + 0x400*i0 + 0x30*i1; } 797static inline uint32_t REG_MDP5_LM_BLEND(uint32_t i0, uint32_t i1) { return 0x00000020 + __offset_LM(i0) + 0x30*i1; }
724 798
725static inline uint32_t REG_MDP5_LM_BLEND_OP_MODE(uint32_t i0, uint32_t i1) { return 0x00003220 + 0x400*i0 + 0x30*i1; } 799static inline uint32_t REG_MDP5_LM_BLEND_OP_MODE(uint32_t i0, uint32_t i1) { return 0x00000020 + __offset_LM(i0) + 0x30*i1; }
726#define MDP5_LM_BLEND_OP_MODE_FG_ALPHA__MASK 0x00000003 800#define MDP5_LM_BLEND_OP_MODE_FG_ALPHA__MASK 0x00000003
727#define MDP5_LM_BLEND_OP_MODE_FG_ALPHA__SHIFT 0 801#define MDP5_LM_BLEND_OP_MODE_FG_ALPHA__SHIFT 0
728static inline uint32_t MDP5_LM_BLEND_OP_MODE_FG_ALPHA(enum mdp_alpha_type val) 802static inline uint32_t MDP5_LM_BLEND_OP_MODE_FG_ALPHA(enum mdp_alpha_type val)
@@ -744,57 +818,67 @@ static inline uint32_t MDP5_LM_BLEND_OP_MODE_BG_ALPHA(enum mdp_alpha_type val)
744#define MDP5_LM_BLEND_OP_MODE_BG_INV_MOD_ALPHA 0x00001000 818#define MDP5_LM_BLEND_OP_MODE_BG_INV_MOD_ALPHA 0x00001000
745#define MDP5_LM_BLEND_OP_MODE_BG_TRANSP_EN 0x00002000 819#define MDP5_LM_BLEND_OP_MODE_BG_TRANSP_EN 0x00002000
746 820
747static inline uint32_t REG_MDP5_LM_BLEND_FG_ALPHA(uint32_t i0, uint32_t i1) { return 0x00003224 + 0x400*i0 + 0x30*i1; } 821static inline uint32_t REG_MDP5_LM_BLEND_FG_ALPHA(uint32_t i0, uint32_t i1) { return 0x00000024 + __offset_LM(i0) + 0x30*i1; }
748 822
749static inline uint32_t REG_MDP5_LM_BLEND_BG_ALPHA(uint32_t i0, uint32_t i1) { return 0x00003228 + 0x400*i0 + 0x30*i1; } 823static inline uint32_t REG_MDP5_LM_BLEND_BG_ALPHA(uint32_t i0, uint32_t i1) { return 0x00000028 + __offset_LM(i0) + 0x30*i1; }
750 824
751static inline uint32_t REG_MDP5_LM_BLEND_FG_TRANSP_LOW0(uint32_t i0, uint32_t i1) { return 0x0000322c + 0x400*i0 + 0x30*i1; } 825static inline uint32_t REG_MDP5_LM_BLEND_FG_TRANSP_LOW0(uint32_t i0, uint32_t i1) { return 0x0000002c + __offset_LM(i0) + 0x30*i1; }
752 826
753static inline uint32_t REG_MDP5_LM_BLEND_FG_TRANSP_LOW1(uint32_t i0, uint32_t i1) { return 0x00003230 + 0x400*i0 + 0x30*i1; } 827static inline uint32_t REG_MDP5_LM_BLEND_FG_TRANSP_LOW1(uint32_t i0, uint32_t i1) { return 0x00000030 + __offset_LM(i0) + 0x30*i1; }
754 828
755static inline uint32_t REG_MDP5_LM_BLEND_FG_TRANSP_HIGH0(uint32_t i0, uint32_t i1) { return 0x00003234 + 0x400*i0 + 0x30*i1; } 829static inline uint32_t REG_MDP5_LM_BLEND_FG_TRANSP_HIGH0(uint32_t i0, uint32_t i1) { return 0x00000034 + __offset_LM(i0) + 0x30*i1; }
756 830
757static inline uint32_t REG_MDP5_LM_BLEND_FG_TRANSP_HIGH1(uint32_t i0, uint32_t i1) { return 0x00003238 + 0x400*i0 + 0x30*i1; } 831static inline uint32_t REG_MDP5_LM_BLEND_FG_TRANSP_HIGH1(uint32_t i0, uint32_t i1) { return 0x00000038 + __offset_LM(i0) + 0x30*i1; }
758 832
759static inline uint32_t REG_MDP5_LM_BLEND_BG_TRANSP_LOW0(uint32_t i0, uint32_t i1) { return 0x0000323c + 0x400*i0 + 0x30*i1; } 833static inline uint32_t REG_MDP5_LM_BLEND_BG_TRANSP_LOW0(uint32_t i0, uint32_t i1) { return 0x0000003c + __offset_LM(i0) + 0x30*i1; }
760 834
761static inline uint32_t REG_MDP5_LM_BLEND_BG_TRANSP_LOW1(uint32_t i0, uint32_t i1) { return 0x00003240 + 0x400*i0 + 0x30*i1; } 835static inline uint32_t REG_MDP5_LM_BLEND_BG_TRANSP_LOW1(uint32_t i0, uint32_t i1) { return 0x00000040 + __offset_LM(i0) + 0x30*i1; }
762 836
763static inline uint32_t REG_MDP5_LM_BLEND_BG_TRANSP_HIGH0(uint32_t i0, uint32_t i1) { return 0x00003244 + 0x400*i0 + 0x30*i1; } 837static inline uint32_t REG_MDP5_LM_BLEND_BG_TRANSP_HIGH0(uint32_t i0, uint32_t i1) { return 0x00000044 + __offset_LM(i0) + 0x30*i1; }
764 838
765static inline uint32_t REG_MDP5_LM_BLEND_BG_TRANSP_HIGH1(uint32_t i0, uint32_t i1) { return 0x00003248 + 0x400*i0 + 0x30*i1; } 839static inline uint32_t REG_MDP5_LM_BLEND_BG_TRANSP_HIGH1(uint32_t i0, uint32_t i1) { return 0x00000048 + __offset_LM(i0) + 0x30*i1; }
766 840
767static inline uint32_t REG_MDP5_LM_CURSOR_IMG_SIZE(uint32_t i0) { return 0x000032e0 + 0x400*i0; } 841static inline uint32_t REG_MDP5_LM_CURSOR_IMG_SIZE(uint32_t i0) { return 0x000000e0 + __offset_LM(i0); }
768 842
769static inline uint32_t REG_MDP5_LM_CURSOR_SIZE(uint32_t i0) { return 0x000032e4 + 0x400*i0; } 843static inline uint32_t REG_MDP5_LM_CURSOR_SIZE(uint32_t i0) { return 0x000000e4 + __offset_LM(i0); }
770 844
771static inline uint32_t REG_MDP5_LM_CURSOR_XY(uint32_t i0) { return 0x000032e8 + 0x400*i0; } 845static inline uint32_t REG_MDP5_LM_CURSOR_XY(uint32_t i0) { return 0x000000e8 + __offset_LM(i0); }
772 846
773static inline uint32_t REG_MDP5_LM_CURSOR_STRIDE(uint32_t i0) { return 0x000032dc + 0x400*i0; } 847static inline uint32_t REG_MDP5_LM_CURSOR_STRIDE(uint32_t i0) { return 0x000000dc + __offset_LM(i0); }
774 848
775static inline uint32_t REG_MDP5_LM_CURSOR_FORMAT(uint32_t i0) { return 0x000032ec + 0x400*i0; } 849static inline uint32_t REG_MDP5_LM_CURSOR_FORMAT(uint32_t i0) { return 0x000000ec + __offset_LM(i0); }
776 850
777static inline uint32_t REG_MDP5_LM_CURSOR_BASE_ADDR(uint32_t i0) { return 0x000032f0 + 0x400*i0; } 851static inline uint32_t REG_MDP5_LM_CURSOR_BASE_ADDR(uint32_t i0) { return 0x000000f0 + __offset_LM(i0); }
778 852
779static inline uint32_t REG_MDP5_LM_CURSOR_START_XY(uint32_t i0) { return 0x000032f4 + 0x400*i0; } 853static inline uint32_t REG_MDP5_LM_CURSOR_START_XY(uint32_t i0) { return 0x000000f4 + __offset_LM(i0); }
780 854
781static inline uint32_t REG_MDP5_LM_CURSOR_BLEND_CONFIG(uint32_t i0) { return 0x000032f8 + 0x400*i0; } 855static inline uint32_t REG_MDP5_LM_CURSOR_BLEND_CONFIG(uint32_t i0) { return 0x000000f8 + __offset_LM(i0); }
782 856
783static inline uint32_t REG_MDP5_LM_CURSOR_BLEND_PARAM(uint32_t i0) { return 0x000032fc + 0x400*i0; } 857static inline uint32_t REG_MDP5_LM_CURSOR_BLEND_PARAM(uint32_t i0) { return 0x000000fc + __offset_LM(i0); }
784 858
785static inline uint32_t REG_MDP5_LM_CURSOR_BLEND_TRANSP_LOW0(uint32_t i0) { return 0x00003300 + 0x400*i0; } 859static inline uint32_t REG_MDP5_LM_CURSOR_BLEND_TRANSP_LOW0(uint32_t i0) { return 0x00000100 + __offset_LM(i0); }
786 860
787static inline uint32_t REG_MDP5_LM_CURSOR_BLEND_TRANSP_LOW1(uint32_t i0) { return 0x00003304 + 0x400*i0; } 861static inline uint32_t REG_MDP5_LM_CURSOR_BLEND_TRANSP_LOW1(uint32_t i0) { return 0x00000104 + __offset_LM(i0); }
788 862
789static inline uint32_t REG_MDP5_LM_CURSOR_BLEND_TRANSP_HIGH0(uint32_t i0) { return 0x00003308 + 0x400*i0; } 863static inline uint32_t REG_MDP5_LM_CURSOR_BLEND_TRANSP_HIGH0(uint32_t i0) { return 0x00000108 + __offset_LM(i0); }
790 864
791static inline uint32_t REG_MDP5_LM_CURSOR_BLEND_TRANSP_HIGH1(uint32_t i0) { return 0x0000330c + 0x400*i0; } 865static inline uint32_t REG_MDP5_LM_CURSOR_BLEND_TRANSP_HIGH1(uint32_t i0) { return 0x0000010c + __offset_LM(i0); }
792 866
793static inline uint32_t REG_MDP5_LM_GC_LUT_BASE(uint32_t i0) { return 0x00003310 + 0x400*i0; } 867static inline uint32_t REG_MDP5_LM_GC_LUT_BASE(uint32_t i0) { return 0x00000110 + __offset_LM(i0); }
794 868
795static inline uint32_t REG_MDP5_DSPP(uint32_t i0) { return 0x00004600 + 0x400*i0; } 869static inline uint32_t __offset_DSPP(uint32_t idx)
870{
871 switch (idx) {
872 case 0: return (mdp5_cfg->dspp.base[0]);
873 case 1: return (mdp5_cfg->dspp.base[1]);
874 case 2: return (mdp5_cfg->dspp.base[2]);
875 case 3: return (mdp5_cfg->dspp.base[3]);
876 default: return INVALID_IDX(idx);
877 }
878}
879static inline uint32_t REG_MDP5_DSPP(uint32_t i0) { return 0x00000000 + __offset_DSPP(i0); }
796 880
797static inline uint32_t REG_MDP5_DSPP_OP_MODE(uint32_t i0) { return 0x00004600 + 0x400*i0; } 881static inline uint32_t REG_MDP5_DSPP_OP_MODE(uint32_t i0) { return 0x00000000 + __offset_DSPP(i0); }
798#define MDP5_DSPP_OP_MODE_IGC_LUT_EN 0x00000001 882#define MDP5_DSPP_OP_MODE_IGC_LUT_EN 0x00000001
799#define MDP5_DSPP_OP_MODE_IGC_TBL_IDX__MASK 0x0000000e 883#define MDP5_DSPP_OP_MODE_IGC_TBL_IDX__MASK 0x0000000e
800#define MDP5_DSPP_OP_MODE_IGC_TBL_IDX__SHIFT 1 884#define MDP5_DSPP_OP_MODE_IGC_TBL_IDX__SHIFT 1
@@ -811,29 +895,40 @@ static inline uint32_t MDP5_DSPP_OP_MODE_IGC_TBL_IDX(uint32_t val)
811#define MDP5_DSPP_OP_MODE_GAMUT_EN 0x00800000 895#define MDP5_DSPP_OP_MODE_GAMUT_EN 0x00800000
812#define MDP5_DSPP_OP_MODE_GAMUT_ORDER 0x01000000 896#define MDP5_DSPP_OP_MODE_GAMUT_ORDER 0x01000000
813 897
814static inline uint32_t REG_MDP5_DSPP_PCC_BASE(uint32_t i0) { return 0x00004630 + 0x400*i0; } 898static inline uint32_t REG_MDP5_DSPP_PCC_BASE(uint32_t i0) { return 0x00000030 + __offset_DSPP(i0); }
815 899
816static inline uint32_t REG_MDP5_DSPP_DITHER_DEPTH(uint32_t i0) { return 0x00004750 + 0x400*i0; } 900static inline uint32_t REG_MDP5_DSPP_DITHER_DEPTH(uint32_t i0) { return 0x00000150 + __offset_DSPP(i0); }
817 901
818static inline uint32_t REG_MDP5_DSPP_HIST_CTL_BASE(uint32_t i0) { return 0x00004810 + 0x400*i0; } 902static inline uint32_t REG_MDP5_DSPP_HIST_CTL_BASE(uint32_t i0) { return 0x00000210 + __offset_DSPP(i0); }
819 903
820static inline uint32_t REG_MDP5_DSPP_HIST_LUT_BASE(uint32_t i0) { return 0x00004830 + 0x400*i0; } 904static inline uint32_t REG_MDP5_DSPP_HIST_LUT_BASE(uint32_t i0) { return 0x00000230 + __offset_DSPP(i0); }
821 905
822static inline uint32_t REG_MDP5_DSPP_HIST_LUT_SWAP(uint32_t i0) { return 0x00004834 + 0x400*i0; } 906static inline uint32_t REG_MDP5_DSPP_HIST_LUT_SWAP(uint32_t i0) { return 0x00000234 + __offset_DSPP(i0); }
823 907
824static inline uint32_t REG_MDP5_DSPP_PA_BASE(uint32_t i0) { return 0x00004838 + 0x400*i0; } 908static inline uint32_t REG_MDP5_DSPP_PA_BASE(uint32_t i0) { return 0x00000238 + __offset_DSPP(i0); }
825 909
826static inline uint32_t REG_MDP5_DSPP_GAMUT_BASE(uint32_t i0) { return 0x000048dc + 0x400*i0; } 910static inline uint32_t REG_MDP5_DSPP_GAMUT_BASE(uint32_t i0) { return 0x000002dc + __offset_DSPP(i0); }
827 911
828static inline uint32_t REG_MDP5_DSPP_GC_BASE(uint32_t i0) { return 0x000048b0 + 0x400*i0; } 912static inline uint32_t REG_MDP5_DSPP_GC_BASE(uint32_t i0) { return 0x000002b0 + __offset_DSPP(i0); }
829 913
830static inline uint32_t REG_MDP5_INTF(uint32_t i0) { return 0x00012500 + 0x200*i0; } 914static inline uint32_t __offset_INTF(uint32_t idx)
915{
916 switch (idx) {
917 case 0: return (mdp5_cfg->intf.base[0]);
918 case 1: return (mdp5_cfg->intf.base[1]);
919 case 2: return (mdp5_cfg->intf.base[2]);
920 case 3: return (mdp5_cfg->intf.base[3]);
921 case 4: return (mdp5_cfg->intf.base[4]);
922 default: return INVALID_IDX(idx);
923 }
924}
925static inline uint32_t REG_MDP5_INTF(uint32_t i0) { return 0x00000000 + __offset_INTF(i0); }
831 926
832static inline uint32_t REG_MDP5_INTF_TIMING_ENGINE_EN(uint32_t i0) { return 0x00012500 + 0x200*i0; } 927static inline uint32_t REG_MDP5_INTF_TIMING_ENGINE_EN(uint32_t i0) { return 0x00000000 + __offset_INTF(i0); }
833 928
834static inline uint32_t REG_MDP5_INTF_CONFIG(uint32_t i0) { return 0x00012504 + 0x200*i0; } 929static inline uint32_t REG_MDP5_INTF_CONFIG(uint32_t i0) { return 0x00000004 + __offset_INTF(i0); }
835 930
836static inline uint32_t REG_MDP5_INTF_HSYNC_CTL(uint32_t i0) { return 0x00012508 + 0x200*i0; } 931static inline uint32_t REG_MDP5_INTF_HSYNC_CTL(uint32_t i0) { return 0x00000008 + __offset_INTF(i0); }
837#define MDP5_INTF_HSYNC_CTL_PULSEW__MASK 0x0000ffff 932#define MDP5_INTF_HSYNC_CTL_PULSEW__MASK 0x0000ffff
838#define MDP5_INTF_HSYNC_CTL_PULSEW__SHIFT 0 933#define MDP5_INTF_HSYNC_CTL_PULSEW__SHIFT 0
839static inline uint32_t MDP5_INTF_HSYNC_CTL_PULSEW(uint32_t val) 934static inline uint32_t MDP5_INTF_HSYNC_CTL_PULSEW(uint32_t val)
@@ -847,23 +942,23 @@ static inline uint32_t MDP5_INTF_HSYNC_CTL_PERIOD(uint32_t val)
847 return ((val) << MDP5_INTF_HSYNC_CTL_PERIOD__SHIFT) & MDP5_INTF_HSYNC_CTL_PERIOD__MASK; 942 return ((val) << MDP5_INTF_HSYNC_CTL_PERIOD__SHIFT) & MDP5_INTF_HSYNC_CTL_PERIOD__MASK;
848} 943}
849 944
850static inline uint32_t REG_MDP5_INTF_VSYNC_PERIOD_F0(uint32_t i0) { return 0x0001250c + 0x200*i0; } 945static inline uint32_t REG_MDP5_INTF_VSYNC_PERIOD_F0(uint32_t i0) { return 0x0000000c + __offset_INTF(i0); }
851 946
852static inline uint32_t REG_MDP5_INTF_VSYNC_PERIOD_F1(uint32_t i0) { return 0x00012510 + 0x200*i0; } 947static inline uint32_t REG_MDP5_INTF_VSYNC_PERIOD_F1(uint32_t i0) { return 0x00000010 + __offset_INTF(i0); }
853 948
854static inline uint32_t REG_MDP5_INTF_VSYNC_LEN_F0(uint32_t i0) { return 0x00012514 + 0x200*i0; } 949static inline uint32_t REG_MDP5_INTF_VSYNC_LEN_F0(uint32_t i0) { return 0x00000014 + __offset_INTF(i0); }
855 950
856static inline uint32_t REG_MDP5_INTF_VSYNC_LEN_F1(uint32_t i0) { return 0x00012518 + 0x200*i0; } 951static inline uint32_t REG_MDP5_INTF_VSYNC_LEN_F1(uint32_t i0) { return 0x00000018 + __offset_INTF(i0); }
857 952
858static inline uint32_t REG_MDP5_INTF_DISPLAY_VSTART_F0(uint32_t i0) { return 0x0001251c + 0x200*i0; } 953static inline uint32_t REG_MDP5_INTF_DISPLAY_VSTART_F0(uint32_t i0) { return 0x0000001c + __offset_INTF(i0); }
859 954
860static inline uint32_t REG_MDP5_INTF_DISPLAY_VSTART_F1(uint32_t i0) { return 0x00012520 + 0x200*i0; } 955static inline uint32_t REG_MDP5_INTF_DISPLAY_VSTART_F1(uint32_t i0) { return 0x00000020 + __offset_INTF(i0); }
861 956
862static inline uint32_t REG_MDP5_INTF_DISPLAY_VEND_F0(uint32_t i0) { return 0x00012524 + 0x200*i0; } 957static inline uint32_t REG_MDP5_INTF_DISPLAY_VEND_F0(uint32_t i0) { return 0x00000024 + __offset_INTF(i0); }
863 958
864static inline uint32_t REG_MDP5_INTF_DISPLAY_VEND_F1(uint32_t i0) { return 0x00012528 + 0x200*i0; } 959static inline uint32_t REG_MDP5_INTF_DISPLAY_VEND_F1(uint32_t i0) { return 0x00000028 + __offset_INTF(i0); }
865 960
866static inline uint32_t REG_MDP5_INTF_ACTIVE_VSTART_F0(uint32_t i0) { return 0x0001252c + 0x200*i0; } 961static inline uint32_t REG_MDP5_INTF_ACTIVE_VSTART_F0(uint32_t i0) { return 0x0000002c + __offset_INTF(i0); }
867#define MDP5_INTF_ACTIVE_VSTART_F0_VAL__MASK 0x7fffffff 962#define MDP5_INTF_ACTIVE_VSTART_F0_VAL__MASK 0x7fffffff
868#define MDP5_INTF_ACTIVE_VSTART_F0_VAL__SHIFT 0 963#define MDP5_INTF_ACTIVE_VSTART_F0_VAL__SHIFT 0
869static inline uint32_t MDP5_INTF_ACTIVE_VSTART_F0_VAL(uint32_t val) 964static inline uint32_t MDP5_INTF_ACTIVE_VSTART_F0_VAL(uint32_t val)
@@ -872,7 +967,7 @@ static inline uint32_t MDP5_INTF_ACTIVE_VSTART_F0_VAL(uint32_t val)
872} 967}
873#define MDP5_INTF_ACTIVE_VSTART_F0_ACTIVE_V_ENABLE 0x80000000 968#define MDP5_INTF_ACTIVE_VSTART_F0_ACTIVE_V_ENABLE 0x80000000
874 969
875static inline uint32_t REG_MDP5_INTF_ACTIVE_VSTART_F1(uint32_t i0) { return 0x00012530 + 0x200*i0; } 970static inline uint32_t REG_MDP5_INTF_ACTIVE_VSTART_F1(uint32_t i0) { return 0x00000030 + __offset_INTF(i0); }
876#define MDP5_INTF_ACTIVE_VSTART_F1_VAL__MASK 0x7fffffff 971#define MDP5_INTF_ACTIVE_VSTART_F1_VAL__MASK 0x7fffffff
877#define MDP5_INTF_ACTIVE_VSTART_F1_VAL__SHIFT 0 972#define MDP5_INTF_ACTIVE_VSTART_F1_VAL__SHIFT 0
878static inline uint32_t MDP5_INTF_ACTIVE_VSTART_F1_VAL(uint32_t val) 973static inline uint32_t MDP5_INTF_ACTIVE_VSTART_F1_VAL(uint32_t val)
@@ -880,11 +975,11 @@ static inline uint32_t MDP5_INTF_ACTIVE_VSTART_F1_VAL(uint32_t val)
880 return ((val) << MDP5_INTF_ACTIVE_VSTART_F1_VAL__SHIFT) & MDP5_INTF_ACTIVE_VSTART_F1_VAL__MASK; 975 return ((val) << MDP5_INTF_ACTIVE_VSTART_F1_VAL__SHIFT) & MDP5_INTF_ACTIVE_VSTART_F1_VAL__MASK;
881} 976}
882 977
883static inline uint32_t REG_MDP5_INTF_ACTIVE_VEND_F0(uint32_t i0) { return 0x00012534 + 0x200*i0; } 978static inline uint32_t REG_MDP5_INTF_ACTIVE_VEND_F0(uint32_t i0) { return 0x00000034 + __offset_INTF(i0); }
884 979
885static inline uint32_t REG_MDP5_INTF_ACTIVE_VEND_F1(uint32_t i0) { return 0x00012538 + 0x200*i0; } 980static inline uint32_t REG_MDP5_INTF_ACTIVE_VEND_F1(uint32_t i0) { return 0x00000038 + __offset_INTF(i0); }
886 981
887static inline uint32_t REG_MDP5_INTF_DISPLAY_HCTL(uint32_t i0) { return 0x0001253c + 0x200*i0; } 982static inline uint32_t REG_MDP5_INTF_DISPLAY_HCTL(uint32_t i0) { return 0x0000003c + __offset_INTF(i0); }
888#define MDP5_INTF_DISPLAY_HCTL_START__MASK 0x0000ffff 983#define MDP5_INTF_DISPLAY_HCTL_START__MASK 0x0000ffff
889#define MDP5_INTF_DISPLAY_HCTL_START__SHIFT 0 984#define MDP5_INTF_DISPLAY_HCTL_START__SHIFT 0
890static inline uint32_t MDP5_INTF_DISPLAY_HCTL_START(uint32_t val) 985static inline uint32_t MDP5_INTF_DISPLAY_HCTL_START(uint32_t val)
@@ -898,7 +993,7 @@ static inline uint32_t MDP5_INTF_DISPLAY_HCTL_END(uint32_t val)
898 return ((val) << MDP5_INTF_DISPLAY_HCTL_END__SHIFT) & MDP5_INTF_DISPLAY_HCTL_END__MASK; 993 return ((val) << MDP5_INTF_DISPLAY_HCTL_END__SHIFT) & MDP5_INTF_DISPLAY_HCTL_END__MASK;
899} 994}
900 995
901static inline uint32_t REG_MDP5_INTF_ACTIVE_HCTL(uint32_t i0) { return 0x00012540 + 0x200*i0; } 996static inline uint32_t REG_MDP5_INTF_ACTIVE_HCTL(uint32_t i0) { return 0x00000040 + __offset_INTF(i0); }
902#define MDP5_INTF_ACTIVE_HCTL_START__MASK 0x00007fff 997#define MDP5_INTF_ACTIVE_HCTL_START__MASK 0x00007fff
903#define MDP5_INTF_ACTIVE_HCTL_START__SHIFT 0 998#define MDP5_INTF_ACTIVE_HCTL_START__SHIFT 0
904static inline uint32_t MDP5_INTF_ACTIVE_HCTL_START(uint32_t val) 999static inline uint32_t MDP5_INTF_ACTIVE_HCTL_START(uint32_t val)
@@ -913,124 +1008,132 @@ static inline uint32_t MDP5_INTF_ACTIVE_HCTL_END(uint32_t val)
913} 1008}
914#define MDP5_INTF_ACTIVE_HCTL_ACTIVE_H_ENABLE 0x80000000 1009#define MDP5_INTF_ACTIVE_HCTL_ACTIVE_H_ENABLE 0x80000000
915 1010
916static inline uint32_t REG_MDP5_INTF_BORDER_COLOR(uint32_t i0) { return 0x00012544 + 0x200*i0; } 1011static inline uint32_t REG_MDP5_INTF_BORDER_COLOR(uint32_t i0) { return 0x00000044 + __offset_INTF(i0); }
917 1012
918static inline uint32_t REG_MDP5_INTF_UNDERFLOW_COLOR(uint32_t i0) { return 0x00012548 + 0x200*i0; } 1013static inline uint32_t REG_MDP5_INTF_UNDERFLOW_COLOR(uint32_t i0) { return 0x00000048 + __offset_INTF(i0); }
919 1014
920static inline uint32_t REG_MDP5_INTF_HSYNC_SKEW(uint32_t i0) { return 0x0001254c + 0x200*i0; } 1015static inline uint32_t REG_MDP5_INTF_HSYNC_SKEW(uint32_t i0) { return 0x0000004c + __offset_INTF(i0); }
921 1016
922static inline uint32_t REG_MDP5_INTF_POLARITY_CTL(uint32_t i0) { return 0x00012550 + 0x200*i0; } 1017static inline uint32_t REG_MDP5_INTF_POLARITY_CTL(uint32_t i0) { return 0x00000050 + __offset_INTF(i0); }
923#define MDP5_INTF_POLARITY_CTL_HSYNC_LOW 0x00000001 1018#define MDP5_INTF_POLARITY_CTL_HSYNC_LOW 0x00000001
924#define MDP5_INTF_POLARITY_CTL_VSYNC_LOW 0x00000002 1019#define MDP5_INTF_POLARITY_CTL_VSYNC_LOW 0x00000002
925#define MDP5_INTF_POLARITY_CTL_DATA_EN_LOW 0x00000004 1020#define MDP5_INTF_POLARITY_CTL_DATA_EN_LOW 0x00000004
926 1021
927static inline uint32_t REG_MDP5_INTF_TEST_CTL(uint32_t i0) { return 0x00012554 + 0x200*i0; } 1022static inline uint32_t REG_MDP5_INTF_TEST_CTL(uint32_t i0) { return 0x00000054 + __offset_INTF(i0); }
928 1023
929static inline uint32_t REG_MDP5_INTF_TP_COLOR0(uint32_t i0) { return 0x00012558 + 0x200*i0; } 1024static inline uint32_t REG_MDP5_INTF_TP_COLOR0(uint32_t i0) { return 0x00000058 + __offset_INTF(i0); }
930 1025
931static inline uint32_t REG_MDP5_INTF_TP_COLOR1(uint32_t i0) { return 0x0001255c + 0x200*i0; } 1026static inline uint32_t REG_MDP5_INTF_TP_COLOR1(uint32_t i0) { return 0x0000005c + __offset_INTF(i0); }
932 1027
933static inline uint32_t REG_MDP5_INTF_DSI_CMD_MODE_TRIGGER_EN(uint32_t i0) { return 0x00012584 + 0x200*i0; } 1028static inline uint32_t REG_MDP5_INTF_DSI_CMD_MODE_TRIGGER_EN(uint32_t i0) { return 0x00000084 + __offset_INTF(i0); }
934 1029
935static inline uint32_t REG_MDP5_INTF_PANEL_FORMAT(uint32_t i0) { return 0x00012590 + 0x200*i0; } 1030static inline uint32_t REG_MDP5_INTF_PANEL_FORMAT(uint32_t i0) { return 0x00000090 + __offset_INTF(i0); }
936 1031
937static inline uint32_t REG_MDP5_INTF_FRAME_LINE_COUNT_EN(uint32_t i0) { return 0x000125a8 + 0x200*i0; } 1032static inline uint32_t REG_MDP5_INTF_FRAME_LINE_COUNT_EN(uint32_t i0) { return 0x000000a8 + __offset_INTF(i0); }
938 1033
939static inline uint32_t REG_MDP5_INTF_FRAME_COUNT(uint32_t i0) { return 0x000125ac + 0x200*i0; } 1034static inline uint32_t REG_MDP5_INTF_FRAME_COUNT(uint32_t i0) { return 0x000000ac + __offset_INTF(i0); }
940 1035
941static inline uint32_t REG_MDP5_INTF_LINE_COUNT(uint32_t i0) { return 0x000125b0 + 0x200*i0; } 1036static inline uint32_t REG_MDP5_INTF_LINE_COUNT(uint32_t i0) { return 0x000000b0 + __offset_INTF(i0); }
942 1037
943static inline uint32_t REG_MDP5_INTF_DEFLICKER_CONFIG(uint32_t i0) { return 0x000125f0 + 0x200*i0; } 1038static inline uint32_t REG_MDP5_INTF_DEFLICKER_CONFIG(uint32_t i0) { return 0x000000f0 + __offset_INTF(i0); }
944 1039
945static inline uint32_t REG_MDP5_INTF_DEFLICKER_STRNG_COEFF(uint32_t i0) { return 0x000125f4 + 0x200*i0; } 1040static inline uint32_t REG_MDP5_INTF_DEFLICKER_STRNG_COEFF(uint32_t i0) { return 0x000000f4 + __offset_INTF(i0); }
946 1041
947static inline uint32_t REG_MDP5_INTF_DEFLICKER_WEAK_COEFF(uint32_t i0) { return 0x000125f8 + 0x200*i0; } 1042static inline uint32_t REG_MDP5_INTF_DEFLICKER_WEAK_COEFF(uint32_t i0) { return 0x000000f8 + __offset_INTF(i0); }
948 1043
949static inline uint32_t REG_MDP5_INTF_TPG_ENABLE(uint32_t i0) { return 0x00012600 + 0x200*i0; } 1044static inline uint32_t REG_MDP5_INTF_TPG_ENABLE(uint32_t i0) { return 0x00000100 + __offset_INTF(i0); }
950 1045
951static inline uint32_t REG_MDP5_INTF_TPG_MAIN_CONTROL(uint32_t i0) { return 0x00012604 + 0x200*i0; } 1046static inline uint32_t REG_MDP5_INTF_TPG_MAIN_CONTROL(uint32_t i0) { return 0x00000104 + __offset_INTF(i0); }
952 1047
953static inline uint32_t REG_MDP5_INTF_TPG_VIDEO_CONFIG(uint32_t i0) { return 0x00012608 + 0x200*i0; } 1048static inline uint32_t REG_MDP5_INTF_TPG_VIDEO_CONFIG(uint32_t i0) { return 0x00000108 + __offset_INTF(i0); }
954 1049
955static inline uint32_t REG_MDP5_INTF_TPG_COMPONENT_LIMITS(uint32_t i0) { return 0x0001260c + 0x200*i0; } 1050static inline uint32_t REG_MDP5_INTF_TPG_COMPONENT_LIMITS(uint32_t i0) { return 0x0000010c + __offset_INTF(i0); }
956 1051
957static inline uint32_t REG_MDP5_INTF_TPG_RECTANGLE(uint32_t i0) { return 0x00012610 + 0x200*i0; } 1052static inline uint32_t REG_MDP5_INTF_TPG_RECTANGLE(uint32_t i0) { return 0x00000110 + __offset_INTF(i0); }
958 1053
959static inline uint32_t REG_MDP5_INTF_TPG_INITIAL_VALUE(uint32_t i0) { return 0x00012614 + 0x200*i0; } 1054static inline uint32_t REG_MDP5_INTF_TPG_INITIAL_VALUE(uint32_t i0) { return 0x00000114 + __offset_INTF(i0); }
960 1055
961static inline uint32_t REG_MDP5_INTF_TPG_BLK_WHITE_PATTERN_FRAME(uint32_t i0) { return 0x00012618 + 0x200*i0; } 1056static inline uint32_t REG_MDP5_INTF_TPG_BLK_WHITE_PATTERN_FRAME(uint32_t i0) { return 0x00000118 + __offset_INTF(i0); }
962 1057
963static inline uint32_t REG_MDP5_INTF_TPG_RGB_MAPPING(uint32_t i0) { return 0x0001261c + 0x200*i0; } 1058static inline uint32_t REG_MDP5_INTF_TPG_RGB_MAPPING(uint32_t i0) { return 0x0000011c + __offset_INTF(i0); }
964 1059
965static inline uint32_t REG_MDP5_AD(uint32_t i0) { return 0x00013100 + 0x200*i0; } 1060static inline uint32_t __offset_AD(uint32_t idx)
1061{
1062 switch (idx) {
1063 case 0: return (mdp5_cfg->ad.base[0]);
1064 case 1: return (mdp5_cfg->ad.base[1]);
1065 default: return INVALID_IDX(idx);
1066 }
1067}
1068static inline uint32_t REG_MDP5_AD(uint32_t i0) { return 0x00000000 + __offset_AD(i0); }
966 1069
967static inline uint32_t REG_MDP5_AD_BYPASS(uint32_t i0) { return 0x00013100 + 0x200*i0; } 1070static inline uint32_t REG_MDP5_AD_BYPASS(uint32_t i0) { return 0x00000000 + __offset_AD(i0); }
968 1071
969static inline uint32_t REG_MDP5_AD_CTRL_0(uint32_t i0) { return 0x00013104 + 0x200*i0; } 1072static inline uint32_t REG_MDP5_AD_CTRL_0(uint32_t i0) { return 0x00000004 + __offset_AD(i0); }
970 1073
971static inline uint32_t REG_MDP5_AD_CTRL_1(uint32_t i0) { return 0x00013108 + 0x200*i0; } 1074static inline uint32_t REG_MDP5_AD_CTRL_1(uint32_t i0) { return 0x00000008 + __offset_AD(i0); }
972 1075
973static inline uint32_t REG_MDP5_AD_FRAME_SIZE(uint32_t i0) { return 0x0001310c + 0x200*i0; } 1076static inline uint32_t REG_MDP5_AD_FRAME_SIZE(uint32_t i0) { return 0x0000000c + __offset_AD(i0); }
974 1077
975static inline uint32_t REG_MDP5_AD_CON_CTRL_0(uint32_t i0) { return 0x00013110 + 0x200*i0; } 1078static inline uint32_t REG_MDP5_AD_CON_CTRL_0(uint32_t i0) { return 0x00000010 + __offset_AD(i0); }
976 1079
977static inline uint32_t REG_MDP5_AD_CON_CTRL_1(uint32_t i0) { return 0x00013114 + 0x200*i0; } 1080static inline uint32_t REG_MDP5_AD_CON_CTRL_1(uint32_t i0) { return 0x00000014 + __offset_AD(i0); }
978 1081
979static inline uint32_t REG_MDP5_AD_STR_MAN(uint32_t i0) { return 0x00013118 + 0x200*i0; } 1082static inline uint32_t REG_MDP5_AD_STR_MAN(uint32_t i0) { return 0x00000018 + __offset_AD(i0); }
980 1083
981static inline uint32_t REG_MDP5_AD_VAR(uint32_t i0) { return 0x0001311c + 0x200*i0; } 1084static inline uint32_t REG_MDP5_AD_VAR(uint32_t i0) { return 0x0000001c + __offset_AD(i0); }
982 1085
983static inline uint32_t REG_MDP5_AD_DITH(uint32_t i0) { return 0x00013120 + 0x200*i0; } 1086static inline uint32_t REG_MDP5_AD_DITH(uint32_t i0) { return 0x00000020 + __offset_AD(i0); }
984 1087
985static inline uint32_t REG_MDP5_AD_DITH_CTRL(uint32_t i0) { return 0x00013124 + 0x200*i0; } 1088static inline uint32_t REG_MDP5_AD_DITH_CTRL(uint32_t i0) { return 0x00000024 + __offset_AD(i0); }
986 1089
987static inline uint32_t REG_MDP5_AD_AMP_LIM(uint32_t i0) { return 0x00013128 + 0x200*i0; } 1090static inline uint32_t REG_MDP5_AD_AMP_LIM(uint32_t i0) { return 0x00000028 + __offset_AD(i0); }
988 1091
989static inline uint32_t REG_MDP5_AD_SLOPE(uint32_t i0) { return 0x0001312c + 0x200*i0; } 1092static inline uint32_t REG_MDP5_AD_SLOPE(uint32_t i0) { return 0x0000002c + __offset_AD(i0); }
990 1093
991static inline uint32_t REG_MDP5_AD_BW_LVL(uint32_t i0) { return 0x00013130 + 0x200*i0; } 1094static inline uint32_t REG_MDP5_AD_BW_LVL(uint32_t i0) { return 0x00000030 + __offset_AD(i0); }
992 1095
993static inline uint32_t REG_MDP5_AD_LOGO_POS(uint32_t i0) { return 0x00013134 + 0x200*i0; } 1096static inline uint32_t REG_MDP5_AD_LOGO_POS(uint32_t i0) { return 0x00000034 + __offset_AD(i0); }
994 1097
995static inline uint32_t REG_MDP5_AD_LUT_FI(uint32_t i0) { return 0x00013138 + 0x200*i0; } 1098static inline uint32_t REG_MDP5_AD_LUT_FI(uint32_t i0) { return 0x00000038 + __offset_AD(i0); }
996 1099
997static inline uint32_t REG_MDP5_AD_LUT_CC(uint32_t i0) { return 0x0001317c + 0x200*i0; } 1100static inline uint32_t REG_MDP5_AD_LUT_CC(uint32_t i0) { return 0x0000007c + __offset_AD(i0); }
998 1101
999static inline uint32_t REG_MDP5_AD_STR_LIM(uint32_t i0) { return 0x000131c8 + 0x200*i0; } 1102static inline uint32_t REG_MDP5_AD_STR_LIM(uint32_t i0) { return 0x000000c8 + __offset_AD(i0); }
1000 1103
1001static inline uint32_t REG_MDP5_AD_CALIB_AB(uint32_t i0) { return 0x000131cc + 0x200*i0; } 1104static inline uint32_t REG_MDP5_AD_CALIB_AB(uint32_t i0) { return 0x000000cc + __offset_AD(i0); }
1002 1105
1003static inline uint32_t REG_MDP5_AD_CALIB_CD(uint32_t i0) { return 0x000131d0 + 0x200*i0; } 1106static inline uint32_t REG_MDP5_AD_CALIB_CD(uint32_t i0) { return 0x000000d0 + __offset_AD(i0); }
1004 1107
1005static inline uint32_t REG_MDP5_AD_MODE_SEL(uint32_t i0) { return 0x000131d4 + 0x200*i0; } 1108static inline uint32_t REG_MDP5_AD_MODE_SEL(uint32_t i0) { return 0x000000d4 + __offset_AD(i0); }
1006 1109
1007static inline uint32_t REG_MDP5_AD_TFILT_CTRL(uint32_t i0) { return 0x000131d8 + 0x200*i0; } 1110static inline uint32_t REG_MDP5_AD_TFILT_CTRL(uint32_t i0) { return 0x000000d8 + __offset_AD(i0); }
1008 1111
1009static inline uint32_t REG_MDP5_AD_BL_MINMAX(uint32_t i0) { return 0x000131dc + 0x200*i0; } 1112static inline uint32_t REG_MDP5_AD_BL_MINMAX(uint32_t i0) { return 0x000000dc + __offset_AD(i0); }
1010 1113
1011static inline uint32_t REG_MDP5_AD_BL(uint32_t i0) { return 0x000131e0 + 0x200*i0; } 1114static inline uint32_t REG_MDP5_AD_BL(uint32_t i0) { return 0x000000e0 + __offset_AD(i0); }
1012 1115
1013static inline uint32_t REG_MDP5_AD_BL_MAX(uint32_t i0) { return 0x000131e8 + 0x200*i0; } 1116static inline uint32_t REG_MDP5_AD_BL_MAX(uint32_t i0) { return 0x000000e8 + __offset_AD(i0); }
1014 1117
1015static inline uint32_t REG_MDP5_AD_AL(uint32_t i0) { return 0x000131ec + 0x200*i0; } 1118static inline uint32_t REG_MDP5_AD_AL(uint32_t i0) { return 0x000000ec + __offset_AD(i0); }
1016 1119
1017static inline uint32_t REG_MDP5_AD_AL_MIN(uint32_t i0) { return 0x000131f0 + 0x200*i0; } 1120static inline uint32_t REG_MDP5_AD_AL_MIN(uint32_t i0) { return 0x000000f0 + __offset_AD(i0); }
1018 1121
1019static inline uint32_t REG_MDP5_AD_AL_FILT(uint32_t i0) { return 0x000131f4 + 0x200*i0; } 1122static inline uint32_t REG_MDP5_AD_AL_FILT(uint32_t i0) { return 0x000000f4 + __offset_AD(i0); }
1020 1123
1021static inline uint32_t REG_MDP5_AD_CFG_BUF(uint32_t i0) { return 0x000131f8 + 0x200*i0; } 1124static inline uint32_t REG_MDP5_AD_CFG_BUF(uint32_t i0) { return 0x000000f8 + __offset_AD(i0); }
1022 1125
1023static inline uint32_t REG_MDP5_AD_LUT_AL(uint32_t i0) { return 0x00013200 + 0x200*i0; } 1126static inline uint32_t REG_MDP5_AD_LUT_AL(uint32_t i0) { return 0x00000100 + __offset_AD(i0); }
1024 1127
1025static inline uint32_t REG_MDP5_AD_TARG_STR(uint32_t i0) { return 0x00013244 + 0x200*i0; } 1128static inline uint32_t REG_MDP5_AD_TARG_STR(uint32_t i0) { return 0x00000144 + __offset_AD(i0); }
1026 1129
1027static inline uint32_t REG_MDP5_AD_START_CALC(uint32_t i0) { return 0x00013248 + 0x200*i0; } 1130static inline uint32_t REG_MDP5_AD_START_CALC(uint32_t i0) { return 0x00000148 + __offset_AD(i0); }
1028 1131
1029static inline uint32_t REG_MDP5_AD_STR_OUT(uint32_t i0) { return 0x0001324c + 0x200*i0; } 1132static inline uint32_t REG_MDP5_AD_STR_OUT(uint32_t i0) { return 0x0000014c + __offset_AD(i0); }
1030 1133
1031static inline uint32_t REG_MDP5_AD_BL_OUT(uint32_t i0) { return 0x00013254 + 0x200*i0; } 1134static inline uint32_t REG_MDP5_AD_BL_OUT(uint32_t i0) { return 0x00000154 + __offset_AD(i0); }
1032 1135
1033static inline uint32_t REG_MDP5_AD_CALC_DONE(uint32_t i0) { return 0x00013258 + 0x200*i0; } 1136static inline uint32_t REG_MDP5_AD_CALC_DONE(uint32_t i0) { return 0x00000158 + __offset_AD(i0); }
1034 1137
1035 1138
1036#endif /* MDP5_XML */ 1139#endif /* MDP5_XML */
diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c
index 71510ee26e96..31a2c6331a1d 100644
--- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c
+++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c
@@ -26,14 +26,98 @@ static const char *iommu_ports[] = {
26 26
27static struct mdp5_platform_config *mdp5_get_config(struct platform_device *dev); 27static struct mdp5_platform_config *mdp5_get_config(struct platform_device *dev);
28 28
29static int mdp5_hw_init(struct msm_kms *kms) 29const struct mdp5_config *mdp5_cfg;
30
31static const struct mdp5_config msm8x74_config = {
32 .name = "msm8x74",
33 .ctl = {
34 .count = 5,
35 .base = { 0x00600, 0x00700, 0x00800, 0x00900, 0x00a00 },
36 },
37 .pipe_vig = {
38 .count = 3,
39 .base = { 0x01200, 0x01600, 0x01a00 },
40 },
41 .pipe_rgb = {
42 .count = 3,
43 .base = { 0x01e00, 0x02200, 0x02600 },
44 },
45 .pipe_dma = {
46 .count = 2,
47 .base = { 0x02a00, 0x02e00 },
48 },
49 .lm = {
50 .count = 5,
51 .base = { 0x03200, 0x03600, 0x03a00, 0x03e00, 0x04200 },
52 },
53 .dspp = {
54 .count = 3,
55 .base = { 0x04600, 0x04a00, 0x04e00 },
56 },
57 .ad = {
58 .count = 2,
59 .base = { 0x13100, 0x13300 }, /* NOTE: no ad in v1.0 */
60 },
61 .intf = {
62 .count = 4,
63 .base = { 0x12500, 0x12700, 0x12900, 0x12b00 },
64 },
65};
66
67static const struct mdp5_config apq8084_config = {
68 .name = "apq8084",
69 .ctl = {
70 .count = 5,
71 .base = { 0x00600, 0x00700, 0x00800, 0x00900, 0x00a00 },
72 },
73 .pipe_vig = {
74 .count = 4,
75 .base = { 0x01200, 0x01600, 0x01a00, 0x01e00 },
76 },
77 .pipe_rgb = {
78 .count = 4,
79 .base = { 0x02200, 0x02600, 0x02a00, 0x02e00 },
80 },
81 .pipe_dma = {
82 .count = 2,
83 .base = { 0x03200, 0x03600 },
84 },
85 .lm = {
86 .count = 6,
87 .base = { 0x03a00, 0x03e00, 0x04200, 0x04600, 0x04a00, 0x04e00 },
88 },
89 .dspp = {
90 .count = 4,
91 .base = { 0x05200, 0x05600, 0x05a00, 0x05e00 },
92
93 },
94 .ad = {
95 .count = 3,
96 .base = { 0x13500, 0x13700, 0x13900 },
97 },
98 .intf = {
99 .count = 5,
100 .base = { 0x12500, 0x12700, 0x12900, 0x12b00, 0x12d00 },
101 },
102};
103
104struct mdp5_config_entry {
105 int revision;
106 const struct mdp5_config *config;
107};
108
109static const struct mdp5_config_entry mdp5_configs[] = {
110 { .revision = 0, .config = &msm8x74_config },
111 { .revision = 2, .config = &msm8x74_config },
112 { .revision = 3, .config = &apq8084_config },
113};
114
115static int mdp5_select_hw_cfg(struct msm_kms *kms)
30{ 116{
31 struct mdp5_kms *mdp5_kms = to_mdp5_kms(to_mdp_kms(kms)); 117 struct mdp5_kms *mdp5_kms = to_mdp5_kms(to_mdp_kms(kms));
32 struct drm_device *dev = mdp5_kms->dev; 118 struct drm_device *dev = mdp5_kms->dev;
33 uint32_t version, major, minor; 119 uint32_t version, major, minor;
34 int ret = 0; 120 int i, ret = 0;
35
36 pm_runtime_get_sync(dev->dev);
37 121
38 mdp5_enable(mdp5_kms); 122 mdp5_enable(mdp5_kms);
39 version = mdp5_read(mdp5_kms, REG_MDP5_MDP_VERSION); 123 version = mdp5_read(mdp5_kms, REG_MDP5_MDP_VERSION);
@@ -44,8 +128,8 @@ static int mdp5_hw_init(struct msm_kms *kms)
44 128
45 DBG("found MDP5 version v%d.%d", major, minor); 129 DBG("found MDP5 version v%d.%d", major, minor);
46 130
47 if ((major != 1) || ((minor != 0) && (minor != 2))) { 131 if (major != 1) {
48 dev_err(dev->dev, "unexpected MDP version: v%d.%d\n", 132 dev_err(dev->dev, "unexpected MDP major version: v%d.%d\n",
49 major, minor); 133 major, minor);
50 ret = -ENXIO; 134 ret = -ENXIO;
51 goto out; 135 goto out;
@@ -53,6 +137,35 @@ static int mdp5_hw_init(struct msm_kms *kms)
53 137
54 mdp5_kms->rev = minor; 138 mdp5_kms->rev = minor;
55 139
140 /* only after mdp5_cfg global pointer's init can we access the hw */
141 for (i = 0; i < ARRAY_SIZE(mdp5_configs); i++) {
142 if (mdp5_configs[i].revision != minor)
143 continue;
144 mdp5_kms->hw_cfg = mdp5_cfg = mdp5_configs[i].config;
145 break;
146 }
147 if (unlikely(!mdp5_kms->hw_cfg)) {
148 dev_err(dev->dev, "unexpected MDP minor revision: v%d.%d\n",
149 major, minor);
150 ret = -ENXIO;
151 goto out;
152 }
153
154 DBG("MDP5: %s config selected", mdp5_kms->hw_cfg->name);
155
156 return 0;
157out:
158 return ret;
159}
160
161static int mdp5_hw_init(struct msm_kms *kms)
162{
163 struct mdp5_kms *mdp5_kms = to_mdp5_kms(to_mdp_kms(kms));
164 struct drm_device *dev = mdp5_kms->dev;
165 int i;
166
167 pm_runtime_get_sync(dev->dev);
168
56 /* Magic unknown register writes: 169 /* Magic unknown register writes:
57 * 170 *
58 * W VBIF:0x004 00000001 (mdss_mdp.c:839) 171 * W VBIF:0x004 00000001 (mdss_mdp.c:839)
@@ -78,15 +191,13 @@ static int mdp5_hw_init(struct msm_kms *kms)
78 */ 191 */
79 192
80 mdp5_write(mdp5_kms, REG_MDP5_DISP_INTF_SEL, 0); 193 mdp5_write(mdp5_kms, REG_MDP5_DISP_INTF_SEL, 0);
81 mdp5_write(mdp5_kms, REG_MDP5_CTL_OP(0), 0);
82 mdp5_write(mdp5_kms, REG_MDP5_CTL_OP(1), 0);
83 mdp5_write(mdp5_kms, REG_MDP5_CTL_OP(2), 0);
84 mdp5_write(mdp5_kms, REG_MDP5_CTL_OP(3), 0);
85 194
86out: 195 for (i = 0; i < mdp5_kms->hw_cfg->ctl.count; i++)
196 mdp5_write(mdp5_kms, REG_MDP5_CTL_OP(i), 0);
197
87 pm_runtime_put_sync(dev->dev); 198 pm_runtime_put_sync(dev->dev);
88 199
89 return ret; 200 return 0;
90} 201}
91 202
92static long mdp5_round_pixclk(struct msm_kms *kms, unsigned long rate, 203static long mdp5_round_pixclk(struct msm_kms *kms, unsigned long rate,
@@ -161,7 +272,7 @@ int mdp5_enable(struct mdp5_kms *mdp5_kms)
161static int modeset_init(struct mdp5_kms *mdp5_kms) 272static int modeset_init(struct mdp5_kms *mdp5_kms)
162{ 273{
163 static const enum mdp5_pipe crtcs[] = { 274 static const enum mdp5_pipe crtcs[] = {
164 SSPP_RGB0, SSPP_RGB1, SSPP_RGB2, 275 SSPP_RGB0, SSPP_RGB1, SSPP_RGB2, SSPP_RGB3,
165 }; 276 };
166 struct drm_device *dev = mdp5_kms->dev; 277 struct drm_device *dev = mdp5_kms->dev;
167 struct msm_drm_private *priv = dev->dev_private; 278 struct msm_drm_private *priv = dev->dev_private;
@@ -169,7 +280,7 @@ static int modeset_init(struct mdp5_kms *mdp5_kms)
169 int i, ret; 280 int i, ret;
170 281
171 /* construct CRTCs: */ 282 /* construct CRTCs: */
172 for (i = 0; i < ARRAY_SIZE(crtcs); i++) { 283 for (i = 0; i < mdp5_kms->hw_cfg->pipe_rgb.count; i++) {
173 struct drm_plane *plane; 284 struct drm_plane *plane;
174 struct drm_crtc *crtc; 285 struct drm_crtc *crtc;
175 286
@@ -246,7 +357,7 @@ struct msm_kms *mdp5_kms_init(struct drm_device *dev)
246 struct mdp5_kms *mdp5_kms; 357 struct mdp5_kms *mdp5_kms;
247 struct msm_kms *kms = NULL; 358 struct msm_kms *kms = NULL;
248 struct msm_mmu *mmu; 359 struct msm_mmu *mmu;
249 int ret; 360 int i, ret;
250 361
251 mdp5_kms = kzalloc(sizeof(*mdp5_kms), GFP_KERNEL); 362 mdp5_kms = kzalloc(sizeof(*mdp5_kms), GFP_KERNEL);
252 if (!mdp5_kms) { 363 if (!mdp5_kms) {
@@ -307,20 +418,22 @@ struct msm_kms *mdp5_kms_init(struct drm_device *dev)
307 418
308 ret = clk_set_rate(mdp5_kms->src_clk, config->max_clk); 419 ret = clk_set_rate(mdp5_kms->src_clk, config->max_clk);
309 420
421 ret = mdp5_select_hw_cfg(kms);
422 if (ret)
423 goto fail;
424
310 /* make sure things are off before attaching iommu (bootloader could 425 /* make sure things are off before attaching iommu (bootloader could
311 * have left things on, in which case we'll start getting faults if 426 * have left things on, in which case we'll start getting faults if
312 * we don't disable): 427 * we don't disable):
313 */ 428 */
314 mdp5_enable(mdp5_kms); 429 mdp5_enable(mdp5_kms);
315 mdp5_write(mdp5_kms, REG_MDP5_INTF_TIMING_ENGINE_EN(0), 0); 430 for (i = 0; i < mdp5_kms->hw_cfg->intf.count; i++)
316 mdp5_write(mdp5_kms, REG_MDP5_INTF_TIMING_ENGINE_EN(1), 0); 431 mdp5_write(mdp5_kms, REG_MDP5_INTF_TIMING_ENGINE_EN(i), 0);
317 mdp5_write(mdp5_kms, REG_MDP5_INTF_TIMING_ENGINE_EN(2), 0);
318 mdp5_write(mdp5_kms, REG_MDP5_INTF_TIMING_ENGINE_EN(3), 0);
319 mdp5_disable(mdp5_kms); 432 mdp5_disable(mdp5_kms);
320 mdelay(16); 433 mdelay(16);
321 434
322 if (config->iommu) { 435 if (config->iommu) {
323 mmu = msm_iommu_new(dev, config->iommu); 436 mmu = msm_iommu_new(&pdev->dev, config->iommu);
324 if (IS_ERR(mmu)) { 437 if (IS_ERR(mmu)) {
325 ret = PTR_ERR(mmu); 438 ret = PTR_ERR(mmu);
326 dev_err(dev->dev, "failed to init iommu: %d\n", ret); 439 dev_err(dev->dev, "failed to init iommu: %d\n", ret);
@@ -368,5 +481,11 @@ static struct mdp5_platform_config *mdp5_get_config(struct platform_device *dev)
368#ifdef CONFIG_OF 481#ifdef CONFIG_OF
369 /* TODO */ 482 /* TODO */
370#endif 483#endif
484 config.iommu = iommu_domain_alloc(&platform_bus_type);
485 /* TODO hard-coded in downstream mdss, but should it be? */
486 config.max_clk = 200000000;
487 /* TODO get from DT: */
488 config.smp_blk_cnt = 22;
489
371 return &config; 490 return &config;
372} 491}
diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h
index 6e981b692d1d..5bf340dd0f00 100644
--- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h
+++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h
@@ -21,6 +21,24 @@
21#include "msm_drv.h" 21#include "msm_drv.h"
22#include "msm_kms.h" 22#include "msm_kms.h"
23#include "mdp/mdp_kms.h" 23#include "mdp/mdp_kms.h"
24/* dynamic offsets used by mdp5.xml.h (initialized in mdp5_kms.c) */
25#define MDP5_MAX_BASES 8
26struct mdp5_sub_block {
27 int count;
28 uint32_t base[MDP5_MAX_BASES];
29};
30struct mdp5_config {
31 char *name;
32 struct mdp5_sub_block ctl;
33 struct mdp5_sub_block pipe_vig;
34 struct mdp5_sub_block pipe_rgb;
35 struct mdp5_sub_block pipe_dma;
36 struct mdp5_sub_block lm;
37 struct mdp5_sub_block dspp;
38 struct mdp5_sub_block ad;
39 struct mdp5_sub_block intf;
40};
41extern const struct mdp5_config *mdp5_cfg;
24#include "mdp5.xml.h" 42#include "mdp5.xml.h"
25#include "mdp5_smp.h" 43#include "mdp5_smp.h"
26 44
@@ -30,6 +48,7 @@ struct mdp5_kms {
30 struct drm_device *dev; 48 struct drm_device *dev;
31 49
32 int rev; 50 int rev;
51 const struct mdp5_config *hw_cfg;
33 52
34 /* mapper-id used to request GEM buffer mapped for scanout: */ 53 /* mapper-id used to request GEM buffer mapped for scanout: */
35 int id; 54 int id;
@@ -82,6 +101,7 @@ static inline const char *pipe2name(enum mdp5_pipe pipe)
82 NAME(VIG0), NAME(VIG1), NAME(VIG2), 101 NAME(VIG0), NAME(VIG1), NAME(VIG2),
83 NAME(RGB0), NAME(RGB1), NAME(RGB2), 102 NAME(RGB0), NAME(RGB1), NAME(RGB2),
84 NAME(DMA0), NAME(DMA1), 103 NAME(DMA0), NAME(DMA1),
104 NAME(VIG3), NAME(RGB3),
85#undef NAME 105#undef NAME
86 }; 106 };
87 return names[pipe]; 107 return names[pipe];
@@ -98,6 +118,8 @@ static inline uint32_t pipe2flush(enum mdp5_pipe pipe)
98 case SSPP_RGB2: return MDP5_CTL_FLUSH_RGB2; 118 case SSPP_RGB2: return MDP5_CTL_FLUSH_RGB2;
99 case SSPP_DMA0: return MDP5_CTL_FLUSH_DMA0; 119 case SSPP_DMA0: return MDP5_CTL_FLUSH_DMA0;
100 case SSPP_DMA1: return MDP5_CTL_FLUSH_DMA1; 120 case SSPP_DMA1: return MDP5_CTL_FLUSH_DMA1;
121 case SSPP_VIG3: return MDP5_CTL_FLUSH_VIG3;
122 case SSPP_RGB3: return MDP5_CTL_FLUSH_RGB3;
101 default: return 0; 123 default: return 0;
102 } 124 }
103} 125}
@@ -108,6 +130,7 @@ static inline int pipe2nclients(enum mdp5_pipe pipe)
108 case SSPP_RGB0: 130 case SSPP_RGB0:
109 case SSPP_RGB1: 131 case SSPP_RGB1:
110 case SSPP_RGB2: 132 case SSPP_RGB2:
133 case SSPP_RGB3:
111 return 1; 134 return 1;
112 default: 135 default:
113 return 3; 136 return 3;
@@ -126,6 +149,8 @@ static inline enum mdp5_client_id pipe2client(enum mdp5_pipe pipe, int plane)
126 case SSPP_RGB2: return CID_RGB2; 149 case SSPP_RGB2: return CID_RGB2;
127 case SSPP_DMA0: return CID_DMA0_Y + plane; 150 case SSPP_DMA0: return CID_DMA0_Y + plane;
128 case SSPP_DMA1: return CID_DMA1_Y + plane; 151 case SSPP_DMA1: return CID_DMA1_Y + plane;
152 case SSPP_VIG3: return CID_VIG3_Y + plane;
153 case SSPP_RGB3: return CID_RGB3;
129 default: return CID_UNUSED; 154 default: return CID_UNUSED;
130 } 155 }
131} 156}
diff --git a/drivers/gpu/drm/msm/mdp/mdp_common.xml.h b/drivers/gpu/drm/msm/mdp/mdp_common.xml.h
index a9629b85b983..64c1afd6030a 100644
--- a/drivers/gpu/drm/msm/mdp/mdp_common.xml.h
+++ b/drivers/gpu/drm/msm/mdp/mdp_common.xml.h
@@ -12,12 +12,12 @@ The rules-ng-ng source files this header was generated from are:
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/mdp/mdp4.xml ( 17996 bytes, from 2013-12-01 19:10:31) 13- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp4.xml ( 17996 bytes, from 2013-12-01 19:10:31)
14- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml ( 1615 bytes, from 2013-11-30 15:00:52) 14- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml ( 1615 bytes, from 2013-11-30 15:00:52)
15- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml ( 22517 bytes, from 2013-12-03 20:59:13) 15- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml ( 22517 bytes, from 2014-06-25 12:55:02)
16- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 11712 bytes, from 2013-08-17 17:13:43) 16- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml ( 11712 bytes, from 2013-08-17 17:13:43)
17- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 344 bytes, from 2013-08-11 19:26:32) 17- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml ( 344 bytes, from 2013-08-11 19:26:32)
18- /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1544 bytes, from 2013-08-16 19:17:05) 18- /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml ( 1544 bytes, from 2013-08-16 19:17:05)
19- /home/robclark/src/freedreno/envytools/rnndb/hdmi/qfprom.xml ( 600 bytes, from 2013-07-05 19:21:12) 19- /home/robclark/src/freedreno/envytools/rnndb/hdmi/qfprom.xml ( 600 bytes, from 2013-07-05 19:21:12)
20- /home/robclark/src/freedreno/envytools/rnndb/hdmi/hdmi.xml ( 20932 bytes, from 2013-12-01 15:13:04) 20- /home/robclark/src/freedreno/envytools/rnndb/hdmi/hdmi.xml ( 23613 bytes, from 2014-06-25 12:53:44)
21 21
22Copyright (C) 2013 by the following authors: 22Copyright (C) 2013 by the following authors:
23- Rob Clark <robdclark@gmail.com> (robclark) 23- Rob Clark <robdclark@gmail.com> (robclark)
diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
index a322029983ce..b447c01ad89c 100644
--- a/drivers/gpu/drm/msm/msm_drv.c
+++ b/drivers/gpu/drm/msm/msm_drv.c
@@ -181,7 +181,6 @@ static int msm_load(struct drm_device *dev, unsigned long flags)
181 struct msm_kms *kms; 181 struct msm_kms *kms;
182 int ret; 182 int ret;
183 183
184
185 priv = kzalloc(sizeof(*priv), GFP_KERNEL); 184 priv = kzalloc(sizeof(*priv), GFP_KERNEL);
186 if (!priv) { 185 if (!priv) {
187 dev_err(dev->dev, "failed to allocate private data\n"); 186 dev_err(dev->dev, "failed to allocate private data\n");
@@ -314,13 +313,15 @@ fail:
314 313
315static void load_gpu(struct drm_device *dev) 314static void load_gpu(struct drm_device *dev)
316{ 315{
316 static DEFINE_MUTEX(init_lock);
317 struct msm_drm_private *priv = dev->dev_private; 317 struct msm_drm_private *priv = dev->dev_private;
318 struct msm_gpu *gpu; 318 struct msm_gpu *gpu;
319 319
320 mutex_lock(&init_lock);
321
320 if (priv->gpu) 322 if (priv->gpu)
321 return; 323 goto out;
322 324
323 mutex_lock(&dev->struct_mutex);
324 gpu = a3xx_gpu_init(dev); 325 gpu = a3xx_gpu_init(dev);
325 if (IS_ERR(gpu)) { 326 if (IS_ERR(gpu)) {
326 dev_warn(dev->dev, "failed to load a3xx gpu\n"); 327 dev_warn(dev->dev, "failed to load a3xx gpu\n");
@@ -330,7 +331,9 @@ static void load_gpu(struct drm_device *dev)
330 331
331 if (gpu) { 332 if (gpu) {
332 int ret; 333 int ret;
334 mutex_lock(&dev->struct_mutex);
333 gpu->funcs->pm_resume(gpu); 335 gpu->funcs->pm_resume(gpu);
336 mutex_unlock(&dev->struct_mutex);
334 ret = gpu->funcs->hw_init(gpu); 337 ret = gpu->funcs->hw_init(gpu);
335 if (ret) { 338 if (ret) {
336 dev_err(dev->dev, "gpu hw init failed: %d\n", ret); 339 dev_err(dev->dev, "gpu hw init failed: %d\n", ret);
@@ -340,12 +343,12 @@ static void load_gpu(struct drm_device *dev)
340 /* give inactive pm a chance to kick in: */ 343 /* give inactive pm a chance to kick in: */
341 msm_gpu_retire(gpu); 344 msm_gpu_retire(gpu);
342 } 345 }
343
344 } 346 }
345 347
346 priv->gpu = gpu; 348 priv->gpu = gpu;
347 349
348 mutex_unlock(&dev->struct_mutex); 350out:
351 mutex_unlock(&init_lock);
349} 352}
350 353
351static int msm_open(struct drm_device *dev, struct drm_file *file) 354static int msm_open(struct drm_device *dev, struct drm_file *file)
@@ -905,6 +908,25 @@ static int compare_of(struct device *dev, void *data)
905{ 908{
906 return dev->of_node == data; 909 return dev->of_node == data;
907} 910}
911
912static int add_components(struct device *dev, struct component_match **matchptr,
913 const char *name)
914{
915 struct device_node *np = dev->of_node;
916 unsigned i;
917
918 for (i = 0; ; i++) {
919 struct device_node *node;
920
921 node = of_parse_phandle(np, name, i);
922 if (!node)
923 break;
924
925 component_match_add(dev, matchptr, compare_of, node);
926 }
927
928 return 0;
929}
908#else 930#else
909static int compare_dev(struct device *dev, void *data) 931static int compare_dev(struct device *dev, void *data)
910{ 932{
@@ -935,21 +957,8 @@ static int msm_pdev_probe(struct platform_device *pdev)
935{ 957{
936 struct component_match *match = NULL; 958 struct component_match *match = NULL;
937#ifdef CONFIG_OF 959#ifdef CONFIG_OF
938 /* NOTE: the CONFIG_OF case duplicates the same code as exynos or imx 960 add_components(&pdev->dev, &match, "connectors");
939 * (or probably any other).. so probably some room for some helpers 961 add_components(&pdev->dev, &match, "gpus");
940 */
941 struct device_node *np = pdev->dev.of_node;
942 unsigned i;
943
944 for (i = 0; ; i++) {
945 struct device_node *node;
946
947 node = of_parse_phandle(np, "connectors", i);
948 if (!node)
949 break;
950
951 component_match_add(&pdev->dev, &match, compare_of, node);
952 }
953#else 962#else
954 /* For non-DT case, it kinda sucks. We don't actually have a way 963 /* For non-DT case, it kinda sucks. We don't actually have a way
955 * to know whether or not we are waiting for certain devices (or if 964 * to know whether or not we are waiting for certain devices (or if
@@ -995,7 +1004,8 @@ static const struct platform_device_id msm_id[] = {
995}; 1004};
996 1005
997static const struct of_device_id dt_match[] = { 1006static const struct of_device_id dt_match[] = {
998 { .compatible = "qcom,mdss_mdp" }, 1007 { .compatible = "qcom,mdp" }, /* mdp4 */
1008 { .compatible = "qcom,mdss_mdp" }, /* mdp5 */
999 {} 1009 {}
1000}; 1010};
1001MODULE_DEVICE_TABLE(of, dt_match); 1011MODULE_DEVICE_TABLE(of, dt_match);
diff --git a/drivers/gpu/drm/msm/msm_fbdev.c b/drivers/gpu/drm/msm/msm_fbdev.c
index c437065933e3..9c5221ce391a 100644
--- a/drivers/gpu/drm/msm/msm_fbdev.c
+++ b/drivers/gpu/drm/msm/msm_fbdev.c
@@ -19,6 +19,11 @@
19 19
20#include "drm_crtc.h" 20#include "drm_crtc.h"
21#include "drm_fb_helper.h" 21#include "drm_fb_helper.h"
22#include "msm_gem.h"
23
24extern int msm_gem_mmap_obj(struct drm_gem_object *obj,
25 struct vm_area_struct *vma);
26static int msm_fbdev_mmap(struct fb_info *info, struct vm_area_struct *vma);
22 27
23/* 28/*
24 * fbdev funcs, to implement legacy fbdev interface on top of drm driver 29 * fbdev funcs, to implement legacy fbdev interface on top of drm driver
@@ -43,6 +48,7 @@ static struct fb_ops msm_fb_ops = {
43 .fb_fillrect = sys_fillrect, 48 .fb_fillrect = sys_fillrect,
44 .fb_copyarea = sys_copyarea, 49 .fb_copyarea = sys_copyarea,
45 .fb_imageblit = sys_imageblit, 50 .fb_imageblit = sys_imageblit,
51 .fb_mmap = msm_fbdev_mmap,
46 52
47 .fb_check_var = drm_fb_helper_check_var, 53 .fb_check_var = drm_fb_helper_check_var,
48 .fb_set_par = drm_fb_helper_set_par, 54 .fb_set_par = drm_fb_helper_set_par,
@@ -51,6 +57,31 @@ static struct fb_ops msm_fb_ops = {
51 .fb_setcmap = drm_fb_helper_setcmap, 57 .fb_setcmap = drm_fb_helper_setcmap,
52}; 58};
53 59
60static int msm_fbdev_mmap(struct fb_info *info, struct vm_area_struct *vma)
61{
62 struct drm_fb_helper *helper = (struct drm_fb_helper *)info->par;
63 struct msm_fbdev *fbdev = to_msm_fbdev(helper);
64 struct drm_gem_object *drm_obj = fbdev->bo;
65 struct drm_device *dev = helper->dev;
66 int ret = 0;
67
68 if (drm_device_is_unplugged(dev))
69 return -ENODEV;
70
71 mutex_lock(&dev->struct_mutex);
72
73 ret = drm_gem_mmap_obj(drm_obj, drm_obj->size, vma);
74
75 mutex_unlock(&dev->struct_mutex);
76
77 if (ret) {
78 pr_err("%s:drm_gem_mmap_obj fail\n", __func__);
79 return ret;
80 }
81
82 return msm_gem_mmap_obj(drm_obj, vma);
83}
84
54static int msm_fbdev_create(struct drm_fb_helper *helper, 85static int msm_fbdev_create(struct drm_fb_helper *helper,
55 struct drm_fb_helper_surface_size *sizes) 86 struct drm_fb_helper_surface_size *sizes)
56{ 87{
@@ -104,8 +135,16 @@ static int msm_fbdev_create(struct drm_fb_helper *helper,
104 135
105 mutex_lock(&dev->struct_mutex); 136 mutex_lock(&dev->struct_mutex);
106 137
107 /* TODO implement our own fb_mmap so we don't need this: */ 138 /*
108 msm_gem_get_iova_locked(fbdev->bo, 0, &paddr); 139 * NOTE: if we can be guaranteed to be able to map buffer
140 * in panic (ie. lock-safe, etc) we could avoid pinning the
141 * buffer now:
142 */
143 ret = msm_gem_get_iova_locked(fbdev->bo, 0, &paddr);
144 if (ret) {
145 dev_err(dev->dev, "failed to get buffer obj iova: %d\n", ret);
146 goto fail;
147 }
109 148
110 fbi = framebuffer_alloc(0, dev->dev); 149 fbi = framebuffer_alloc(0, dev->dev);
111 if (!fbi) { 150 if (!fbi) {
@@ -189,7 +228,7 @@ struct drm_fb_helper *msm_fbdev_init(struct drm_device *dev)
189 struct msm_drm_private *priv = dev->dev_private; 228 struct msm_drm_private *priv = dev->dev_private;
190 struct msm_fbdev *fbdev = NULL; 229 struct msm_fbdev *fbdev = NULL;
191 struct drm_fb_helper *helper; 230 struct drm_fb_helper *helper;
192 int ret = 0; 231 int ret;
193 232
194 fbdev = kzalloc(sizeof(*fbdev), GFP_KERNEL); 233 fbdev = kzalloc(sizeof(*fbdev), GFP_KERNEL);
195 if (!fbdev) 234 if (!fbdev)
diff --git a/drivers/gpu/drm/msm/msm_gem.c b/drivers/gpu/drm/msm/msm_gem.c
index 713722b0ba78..4b1b82adabde 100644
--- a/drivers/gpu/drm/msm/msm_gem.c
+++ b/drivers/gpu/drm/msm/msm_gem.c
@@ -278,24 +278,23 @@ int msm_gem_get_iova_locked(struct drm_gem_object *obj, int id,
278 uint32_t *iova) 278 uint32_t *iova)
279{ 279{
280 struct msm_gem_object *msm_obj = to_msm_bo(obj); 280 struct msm_gem_object *msm_obj = to_msm_bo(obj);
281 struct drm_device *dev = obj->dev;
282 int ret = 0; 281 int ret = 0;
283 282
284 if (!msm_obj->domain[id].iova) { 283 if (!msm_obj->domain[id].iova) {
285 struct msm_drm_private *priv = obj->dev->dev_private; 284 struct msm_drm_private *priv = obj->dev->dev_private;
286 struct msm_mmu *mmu = priv->mmus[id];
287 struct page **pages = get_pages(obj); 285 struct page **pages = get_pages(obj);
288 286
289 if (!mmu) {
290 dev_err(dev->dev, "null MMU pointer\n");
291 return -EINVAL;
292 }
293
294 if (IS_ERR(pages)) 287 if (IS_ERR(pages))
295 return PTR_ERR(pages); 288 return PTR_ERR(pages);
296 289
297 if (iommu_present(&platform_bus_type)) { 290 if (iommu_present(&platform_bus_type)) {
298 uint32_t offset = (uint32_t)mmap_offset(obj); 291 struct msm_mmu *mmu = priv->mmus[id];
292 uint32_t offset;
293
294 if (WARN_ON(!mmu))
295 return -EINVAL;
296
297 offset = (uint32_t)mmap_offset(obj);
299 ret = mmu->funcs->map(mmu, offset, msm_obj->sgt, 298 ret = mmu->funcs->map(mmu, offset, msm_obj->sgt,
300 obj->size, IOMMU_READ | IOMMU_WRITE); 299 obj->size, IOMMU_READ | IOMMU_WRITE);
301 msm_obj->domain[id].iova = offset; 300 msm_obj->domain[id].iova = offset;
diff --git a/drivers/gpu/drm/msm/msm_gpu.c b/drivers/gpu/drm/msm/msm_gpu.c
index c6322197db8c..4a0dce587745 100644
--- a/drivers/gpu/drm/msm/msm_gpu.c
+++ b/drivers/gpu/drm/msm/msm_gpu.c
@@ -606,14 +606,17 @@ int msm_gpu_init(struct drm_device *drm, struct platform_device *pdev,
606 iommu = iommu_domain_alloc(&platform_bus_type); 606 iommu = iommu_domain_alloc(&platform_bus_type);
607 if (iommu) { 607 if (iommu) {
608 dev_info(drm->dev, "%s: using IOMMU\n", name); 608 dev_info(drm->dev, "%s: using IOMMU\n", name);
609 gpu->mmu = msm_iommu_new(drm, iommu); 609 gpu->mmu = msm_iommu_new(&pdev->dev, iommu);
610 } else { 610 } else {
611 dev_info(drm->dev, "%s: no IOMMU, fallback to VRAM carveout!\n", name); 611 dev_info(drm->dev, "%s: no IOMMU, fallback to VRAM carveout!\n", name);
612 } 612 }
613 gpu->id = msm_register_mmu(drm, gpu->mmu); 613 gpu->id = msm_register_mmu(drm, gpu->mmu);
614 614
615
615 /* Create ringbuffer: */ 616 /* Create ringbuffer: */
617 mutex_lock(&drm->struct_mutex);
616 gpu->rb = msm_ringbuffer_new(gpu, ringsz); 618 gpu->rb = msm_ringbuffer_new(gpu, ringsz);
619 mutex_unlock(&drm->struct_mutex);
617 if (IS_ERR(gpu->rb)) { 620 if (IS_ERR(gpu->rb)) {
618 ret = PTR_ERR(gpu->rb); 621 ret = PTR_ERR(gpu->rb);
619 gpu->rb = NULL; 622 gpu->rb = NULL;
@@ -621,13 +624,6 @@ int msm_gpu_init(struct drm_device *drm, struct platform_device *pdev,
621 goto fail; 624 goto fail;
622 } 625 }
623 626
624 ret = msm_gem_get_iova_locked(gpu->rb->bo, gpu->id, &gpu->rb_iova);
625 if (ret) {
626 gpu->rb_iova = 0;
627 dev_err(drm->dev, "could not map ringbuffer: %d\n", ret);
628 goto fail;
629 }
630
631 bs_init(gpu); 627 bs_init(gpu);
632 628
633 return 0; 629 return 0;
diff --git a/drivers/gpu/drm/msm/msm_iommu.c b/drivers/gpu/drm/msm/msm_iommu.c
index 4b2ad9181edf..099af483fdf0 100644
--- a/drivers/gpu/drm/msm/msm_iommu.c
+++ b/drivers/gpu/drm/msm/msm_iommu.c
@@ -33,39 +33,14 @@ static int msm_fault_handler(struct iommu_domain *iommu, struct device *dev,
33 33
34static int msm_iommu_attach(struct msm_mmu *mmu, const char **names, int cnt) 34static int msm_iommu_attach(struct msm_mmu *mmu, const char **names, int cnt)
35{ 35{
36 struct drm_device *dev = mmu->dev;
37 struct msm_iommu *iommu = to_msm_iommu(mmu); 36 struct msm_iommu *iommu = to_msm_iommu(mmu);
38 int i, ret; 37 return iommu_attach_device(iommu->domain, mmu->dev);
39
40 for (i = 0; i < cnt; i++) {
41 struct device *msm_iommu_get_ctx(const char *ctx_name);
42 struct device *ctx = msm_iommu_get_ctx(names[i]);
43 if (IS_ERR_OR_NULL(ctx)) {
44 dev_warn(dev->dev, "couldn't get %s context", names[i]);
45 continue;
46 }
47 ret = iommu_attach_device(iommu->domain, ctx);
48 if (ret) {
49 dev_warn(dev->dev, "could not attach iommu to %s", names[i]);
50 return ret;
51 }
52 }
53
54 return 0;
55} 38}
56 39
57static void msm_iommu_detach(struct msm_mmu *mmu, const char **names, int cnt) 40static void msm_iommu_detach(struct msm_mmu *mmu, const char **names, int cnt)
58{ 41{
59 struct msm_iommu *iommu = to_msm_iommu(mmu); 42 struct msm_iommu *iommu = to_msm_iommu(mmu);
60 int i; 43 iommu_detach_device(iommu->domain, mmu->dev);
61
62 for (i = 0; i < cnt; i++) {
63 struct device *msm_iommu_get_ctx(const char *ctx_name);
64 struct device *ctx = msm_iommu_get_ctx(names[i]);
65 if (IS_ERR_OR_NULL(ctx))
66 continue;
67 iommu_detach_device(iommu->domain, ctx);
68 }
69} 44}
70 45
71static int msm_iommu_map(struct msm_mmu *mmu, uint32_t iova, 46static int msm_iommu_map(struct msm_mmu *mmu, uint32_t iova,
@@ -149,7 +124,7 @@ static const struct msm_mmu_funcs funcs = {
149 .destroy = msm_iommu_destroy, 124 .destroy = msm_iommu_destroy,
150}; 125};
151 126
152struct msm_mmu *msm_iommu_new(struct drm_device *dev, struct iommu_domain *domain) 127struct msm_mmu *msm_iommu_new(struct device *dev, struct iommu_domain *domain)
153{ 128{
154 struct msm_iommu *iommu; 129 struct msm_iommu *iommu;
155 130
diff --git a/drivers/gpu/drm/msm/msm_mmu.h b/drivers/gpu/drm/msm/msm_mmu.h
index 21da6d154f71..7cd88d9dc155 100644
--- a/drivers/gpu/drm/msm/msm_mmu.h
+++ b/drivers/gpu/drm/msm/msm_mmu.h
@@ -32,17 +32,17 @@ struct msm_mmu_funcs {
32 32
33struct msm_mmu { 33struct msm_mmu {
34 const struct msm_mmu_funcs *funcs; 34 const struct msm_mmu_funcs *funcs;
35 struct drm_device *dev; 35 struct device *dev;
36}; 36};
37 37
38static inline void msm_mmu_init(struct msm_mmu *mmu, struct drm_device *dev, 38static inline void msm_mmu_init(struct msm_mmu *mmu, struct device *dev,
39 const struct msm_mmu_funcs *funcs) 39 const struct msm_mmu_funcs *funcs)
40{ 40{
41 mmu->dev = dev; 41 mmu->dev = dev;
42 mmu->funcs = funcs; 42 mmu->funcs = funcs;
43} 43}
44 44
45struct msm_mmu *msm_iommu_new(struct drm_device *dev, struct iommu_domain *domain); 45struct msm_mmu *msm_iommu_new(struct device *dev, struct iommu_domain *domain);
46struct msm_mmu *msm_gpummu_new(struct drm_device *dev, struct msm_gpu *gpu); 46struct msm_mmu *msm_gpummu_new(struct device *dev, struct msm_gpu *gpu);
47 47
48#endif /* __MSM_MMU_H__ */ 48#endif /* __MSM_MMU_H__ */