Merge branch 'msm-next' of git://people.freedesktop.org/~robclark/linux into drm...
authorDave Airlie <airlied@redhat.com>
Fri, 23 Oct 2015 01:54:03 +0000 (11:54 +1000)
committerDave Airlie <airlied@redhat.com>
Fri, 23 Oct 2015 01:54:03 +0000 (11:54 +1000)
A bit smaller pull this time.  Few minor things, plus initial support
for msm8996 (snapdragon 820)..  Sorry, a bit latish, was hoping to get
some 8960/8064 DSI stuff included.  But still waiting on the v2 of the
patchset (just pending some minor review comments).  It would be nice
to get the DSI patches merged since it would help some folks trying to
get upstream kernel running on n4/n7 and xperia z and wanting to write
some more panel drivers.  Also, waiting for OCMEM driver to get merged
via other trees and then I have a small bit to go along with that to
make the gpu actually work on devices w/ OCMEM (snapdragon 800, 805,
etc).  So maybe a second later pull req, time permitting.

* 'msm-next' of git://people.freedesktop.org/~robclark/linux:
  drm/msm: Remove local fbdev emulation Kconfig option
  drm/msm/mdp5: Basic support for MDP5 v1.7 (MSM8996)
  drm/msm/mdp: Add Software Pixel Extension support
  drm/msm/mdp5: Use the newly introduced enum mdp_component_type
  drm/msm/hdmi: Add basic HDMI support for msm8996
  drm/msm/mdp5: Avoid printing error messages for optional clocks
  drm/msm: Fix IOMMU clean up path in case msm_iommu_new() fails
  drm/msm/mdp5: remove the cfg pointer from SMP struct
  drm/msm/dsi: Updata LNn_CFG4 register settings for 28nm PHY
  drm: msm: dsi: Don't attempt changing voltage of switches
  drm/msm: update generated headers

31 files changed:
Documentation/devicetree/bindings/drm/msm/hdmi.txt
Documentation/devicetree/bindings/drm/msm/mdp.txt
drivers/gpu/drm/msm/Kconfig
drivers/gpu/drm/msm/Makefile
drivers/gpu/drm/msm/adreno/a2xx.xml.h
drivers/gpu/drm/msm/adreno/a3xx.xml.h
drivers/gpu/drm/msm/adreno/a4xx.xml.h
drivers/gpu/drm/msm/adreno/adreno_common.xml.h
drivers/gpu/drm/msm/adreno/adreno_pm4.xml.h
drivers/gpu/drm/msm/dsi/dsi.xml.h
drivers/gpu/drm/msm/dsi/dsi_host.c
drivers/gpu/drm/msm/dsi/mmss_cc.xml.h
drivers/gpu/drm/msm/dsi/phy/dsi_phy.c
drivers/gpu/drm/msm/dsi/phy/dsi_phy_28nm.c
drivers/gpu/drm/msm/dsi/sfpb.xml.h
drivers/gpu/drm/msm/edp/edp.xml.h
drivers/gpu/drm/msm/hdmi/hdmi.c
drivers/gpu/drm/msm/hdmi/hdmi.xml.h
drivers/gpu/drm/msm/hdmi/qfprom.xml.h
drivers/gpu/drm/msm/mdp/mdp4/mdp4.xml.h
drivers/gpu/drm/msm/mdp/mdp5/mdp5.xml.h
drivers/gpu/drm/msm/mdp/mdp5/mdp5_cfg.c
drivers/gpu/drm/msm/mdp/mdp5/mdp5_cfg.h
drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.c
drivers/gpu/drm/msm/mdp/mdp5/mdp5_kms.h
drivers/gpu/drm/msm/mdp/mdp5/mdp5_plane.c
drivers/gpu/drm/msm/mdp/mdp5/mdp5_smp.c
drivers/gpu/drm/msm/mdp/mdp_common.xml.h
drivers/gpu/drm/msm/mdp/mdp_kms.h
drivers/gpu/drm/msm/msm_drv.c
drivers/gpu/drm/msm/msm_gpu.c

index e926239e11011c7b96e4b19d6f0f272853cb621d..379ee2ea9a3d848e881af9cc45809004cd1022ea 100644 (file)
@@ -2,6 +2,7 @@ Qualcomm adreno/snapdragon hdmi output
 
 Required properties:
 - compatible: one of the following
+   * "qcom,hdmi-tx-8996"
    * "qcom,hdmi-tx-8994"
    * "qcom,hdmi-tx-8084"
    * "qcom,hdmi-tx-8974"
@@ -21,6 +22,7 @@ Required properties:
 Optional properties:
 - qcom,hdmi-tx-mux-en-gpio: hdmi mux enable pin
 - qcom,hdmi-tx-mux-sel-gpio: hdmi mux select pin
+- power-domains: reference to the power domain(s), if available.
 - pinctrl-names: the pin control state names; should contain "default"
 - pinctrl-0: the default pinctrl state (active)
 - pinctrl-1: the "sleep" pinctrl state
@@ -35,6 +37,7 @@ Example:
                reg-names = "core_physical";
                reg = <0x04a00000 0x1000>;
                interrupts = <GIC_SPI 79 0>;
+               power-domains = <&mmcc MDSS_GDSC>;
                clock-names =
                    "core_clk",
                    "master_iface_clk",
index 1a0598e5279df04cf63e581066309744f06df3ab..0833edaba4c3704717726af66a105d0aade1d4ea 100644 (file)
@@ -11,13 +11,14 @@ Required properties:
 - clock-names: the following clocks are required:
   * "core_clk"
   * "iface_clk"
-  * "lut_clk"
   * "src_clk"
   * "hdmi_clk"
   * "mpd_clk"
 
 Optional properties:
 - gpus: phandle for gpu device
+- clock-names: the following clocks are optional:
+  * "lut_clk"
 
 Example:
 
index 8e6c7c638e24b8f6c81c0061686bb7393dbbc642..84d3ec98e6b9e045699c748fb05d80e608d8e06a 100644 (file)
@@ -14,20 +14,6 @@ config DRM_MSM
        help
          DRM/KMS driver for MSM/snapdragon.
 
-config DRM_MSM_FBDEV
-       bool "Enable legacy fbdev support for MSM modesetting driver"
-       depends on DRM_MSM
-       select DRM_KMS_FB_HELPER
-       select FB_SYS_FILLRECT
-       select FB_SYS_COPYAREA
-       select FB_SYS_IMAGEBLIT
-       select FB_SYS_FOPS
-       default y
-       help
-         Choose this option if you have a need for the legacy fbdev
-         support. Note that this support also provide the linux console
-         support on top of the MSM modesetting driver.
-
 config DRM_MSM_REGISTER_LOGGING
        bool "MSM DRM register logging"
        depends on DRM_MSM
index 0a543eb5e5d7c0e3c821fcf26ce78dffe474901f..1c90290be716de80108c07839f96c422fab67b3f 100644 (file)
@@ -50,7 +50,7 @@ msm-y := \
        msm_rd.o \
        msm_ringbuffer.o
 
-msm-$(CONFIG_DRM_MSM_FBDEV) += msm_fbdev.o
+msm-$(CONFIG_DRM_FBDEV_EMULATION) += msm_fbdev.o
 msm-$(CONFIG_COMMON_CLK) += mdp/mdp4/mdp4_lvds_pll.o
 
 msm-$(CONFIG_DRM_MSM_DSI) += dsi/dsi.o \
index 0261f0d3161278a66ed3a8b004724b74192ed1aa..9e2aceb4ffe6cbe93a707f71270cca4a739e6baf 100644 (file)
@@ -8,13 +8,14 @@ http://github.com/freedreno/envytools/
 git clone https://github.com/freedreno/envytools.git
 
 The rules-ng-ng source files this header was generated from are:
-- /home/robclark/src/freedreno/envytools/rnndb/adreno.xml               (    364 bytes, from 2015-05-20 20:03:07)
+- /home/robclark/src/freedreno/envytools/rnndb/adreno.xml               (    398 bytes, from 2015-09-24 17:25:31)
 - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml  (   1453 bytes, from 2015-05-20 20:03:07)
 - /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml          (  32901 bytes, from 2015-05-20 20:03:14)
-- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml (  10551 bytes, from 2015-05-20 20:03:14)
+- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml (  10755 bytes, from 2015-09-14 20:46:55)
 - /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml    (  14968 bytes, from 2015-05-20 20:12:27)
-- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml          (  67120 bytes, from 2015-08-14 23:22:03)
-- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml          (  63785 bytes, from 2015-08-14 18:27:06)
+- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml          (  67771 bytes, from 2015-09-14 20:46:55)
+- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml          (  63970 bytes, from 2015-09-14 20:50:12)
+- /home/robclark/src/freedreno/envytools/rnndb/adreno/ocmem.xml         (   1773 bytes, from 2015-09-24 17:30:00)
 
 Copyright (C) 2013-2015 by the following authors:
 - Rob Clark <robdclark@gmail.com> (robclark)
index 48d133711487acc10292926cd22371a85ab55fd1..97dc1c6ec1076748ae9b94504f7ee6e13804a6c0 100644 (file)
@@ -8,13 +8,14 @@ http://github.com/freedreno/envytools/
 git clone https://github.com/freedreno/envytools.git
 
 The rules-ng-ng source files this header was generated from are:
-- /home/robclark/src/freedreno/envytools/rnndb/adreno.xml               (    364 bytes, from 2015-05-20 20:03:07)
+- /home/robclark/src/freedreno/envytools/rnndb/adreno.xml               (    398 bytes, from 2015-09-24 17:25:31)
 - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml  (   1453 bytes, from 2015-05-20 20:03:07)
 - /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml          (  32901 bytes, from 2015-05-20 20:03:14)
-- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml (  10551 bytes, from 2015-05-20 20:03:14)
+- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml (  10755 bytes, from 2015-09-14 20:46:55)
 - /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml    (  14968 bytes, from 2015-05-20 20:12:27)
-- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml          (  67120 bytes, from 2015-08-14 23:22:03)
-- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml          (  63785 bytes, from 2015-08-14 18:27:06)
+- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml          (  67771 bytes, from 2015-09-14 20:46:55)
+- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml          (  63970 bytes, from 2015-09-14 20:50:12)
+- /home/robclark/src/freedreno/envytools/rnndb/adreno/ocmem.xml         (   1773 bytes, from 2015-09-24 17:30:00)
 
 Copyright (C) 2013-2015 by the following authors:
 - Rob Clark <robdclark@gmail.com> (robclark)
@@ -280,6 +281,8 @@ enum a3xx_rb_blend_opcode {
 enum a3xx_intp_mode {
        SMOOTH = 0,
        FLAT = 1,
+       ZERO = 2,
+       ONE = 3,
 };
 
 enum a3xx_repl_mode {
@@ -680,9 +683,16 @@ static inline uint32_t REG_A3XX_CP_PROTECT_REG(uint32_t i0) { return 0x00000460
 #define A3XX_GRAS_CL_CLIP_CNTL_VP_CLIP_CODE_IGNORE             0x00080000
 #define A3XX_GRAS_CL_CLIP_CNTL_VP_XFORM_DISABLE                        0x00100000
 #define A3XX_GRAS_CL_CLIP_CNTL_PERSP_DIVISION_DISABLE          0x00200000
+#define A3XX_GRAS_CL_CLIP_CNTL_ZERO_GB_SCALE_Z                 0x00400000
 #define A3XX_GRAS_CL_CLIP_CNTL_ZCOORD                          0x00800000
 #define A3XX_GRAS_CL_CLIP_CNTL_WCOORD                          0x01000000
 #define A3XX_GRAS_CL_CLIP_CNTL_ZCLIP_DISABLE                   0x02000000
+#define A3XX_GRAS_CL_CLIP_CNTL_NUM_USER_CLIP_PLANES__MASK      0x1c000000
+#define A3XX_GRAS_CL_CLIP_CNTL_NUM_USER_CLIP_PLANES__SHIFT     26
+static inline uint32_t A3XX_GRAS_CL_CLIP_CNTL_NUM_USER_CLIP_PLANES(uint32_t val)
+{
+       return ((val) << A3XX_GRAS_CL_CLIP_CNTL_NUM_USER_CLIP_PLANES__SHIFT) & A3XX_GRAS_CL_CLIP_CNTL_NUM_USER_CLIP_PLANES__MASK;
+}
 
 #define REG_A3XX_GRAS_CL_GB_CLIP_ADJ                           0x00002044
 #define A3XX_GRAS_CL_GB_CLIP_ADJ_HORZ__MASK                    0x000003ff
@@ -773,7 +783,7 @@ static inline uint32_t A3XX_GRAS_SU_POINT_SIZE(float val)
 #define A3XX_GRAS_SU_POLY_OFFSET_SCALE_VAL__SHIFT              0
 static inline uint32_t A3XX_GRAS_SU_POLY_OFFSET_SCALE_VAL(float val)
 {
-       return ((((int32_t)(val * 16384.0))) << A3XX_GRAS_SU_POLY_OFFSET_SCALE_VAL__SHIFT) & A3XX_GRAS_SU_POLY_OFFSET_SCALE_VAL__MASK;
+       return ((((int32_t)(val * 1048576.0))) << A3XX_GRAS_SU_POLY_OFFSET_SCALE_VAL__SHIFT) & A3XX_GRAS_SU_POLY_OFFSET_SCALE_VAL__MASK;
 }
 
 #define REG_A3XX_GRAS_SU_POLY_OFFSET_OFFSET                    0x0000206d
@@ -894,6 +904,9 @@ static inline uint32_t A3XX_RB_MODE_CONTROL_MRT(uint32_t val)
 #define A3XX_RB_MODE_CONTROL_PACKER_TIMER_ENABLE               0x00010000
 
 #define REG_A3XX_RB_RENDER_CONTROL                             0x000020c1
+#define A3XX_RB_RENDER_CONTROL_DUAL_COLOR_IN_ENABLE            0x00000001
+#define A3XX_RB_RENDER_CONTROL_YUV_IN_ENABLE                   0x00000002
+#define A3XX_RB_RENDER_CONTROL_COV_VALUE_INPUT_ENABLE          0x00000004
 #define A3XX_RB_RENDER_CONTROL_FACENESS                                0x00000008
 #define A3XX_RB_RENDER_CONTROL_BIN_WIDTH__MASK                 0x00000ff0
 #define A3XX_RB_RENDER_CONTROL_BIN_WIDTH__SHIFT                        4
@@ -907,6 +920,8 @@ static inline uint32_t A3XX_RB_RENDER_CONTROL_BIN_WIDTH(uint32_t val)
 #define A3XX_RB_RENDER_CONTROL_YCOORD                          0x00008000
 #define A3XX_RB_RENDER_CONTROL_ZCOORD                          0x00010000
 #define A3XX_RB_RENDER_CONTROL_WCOORD                          0x00020000
+#define A3XX_RB_RENDER_CONTROL_I_CLAMP_ENABLE                  0x00080000
+#define A3XX_RB_RENDER_CONTROL_COV_VALUE_OUTPUT_ENABLE         0x00100000
 #define A3XX_RB_RENDER_CONTROL_ALPHA_TEST                      0x00400000
 #define A3XX_RB_RENDER_CONTROL_ALPHA_TEST_FUNC__MASK           0x07000000
 #define A3XX_RB_RENDER_CONTROL_ALPHA_TEST_FUNC__SHIFT          24
@@ -914,6 +929,8 @@ static inline uint32_t A3XX_RB_RENDER_CONTROL_ALPHA_TEST_FUNC(enum adreno_compar
 {
        return ((val) << A3XX_RB_RENDER_CONTROL_ALPHA_TEST_FUNC__SHIFT) & A3XX_RB_RENDER_CONTROL_ALPHA_TEST_FUNC__MASK;
 }
+#define A3XX_RB_RENDER_CONTROL_ALPHA_TO_COVERAGE               0x40000000
+#define A3XX_RB_RENDER_CONTROL_ALPHA_TO_ONE                    0x80000000
 
 #define REG_A3XX_RB_MSAA_CONTROL                               0x000020c2
 #define A3XX_RB_MSAA_CONTROL_DISABLE                           0x00000400
index ac55066db3b012d9bb2a35df52c28d7ccf1768de..99de8271dba8a680be1bb992d84087e405499f58 100644 (file)
@@ -8,13 +8,14 @@ http://github.com/freedreno/envytools/
 git clone https://github.com/freedreno/envytools.git
 
 The rules-ng-ng source files this header was generated from are:
-- /home/robclark/src/freedreno/envytools/rnndb/adreno.xml               (    364 bytes, from 2015-05-20 20:03:07)
+- /home/robclark/src/freedreno/envytools/rnndb/adreno.xml               (    398 bytes, from 2015-09-24 17:25:31)
 - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml  (   1453 bytes, from 2015-05-20 20:03:07)
 - /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml          (  32901 bytes, from 2015-05-20 20:03:14)
-- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml (  10551 bytes, from 2015-05-20 20:03:14)
+- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml (  10755 bytes, from 2015-09-14 20:46:55)
 - /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml    (  14968 bytes, from 2015-05-20 20:12:27)
-- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml          (  67120 bytes, from 2015-08-14 23:22:03)
-- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml          (  63785 bytes, from 2015-08-14 18:27:06)
+- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml          (  67771 bytes, from 2015-09-14 20:46:55)
+- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml          (  63970 bytes, from 2015-09-14 20:50:12)
+- /home/robclark/src/freedreno/envytools/rnndb/adreno/ocmem.xml         (   1773 bytes, from 2015-09-24 17:30:00)
 
 Copyright (C) 2013-2015 by the following authors:
 - Rob Clark <robdclark@gmail.com> (robclark)
@@ -162,10 +163,13 @@ enum a4xx_tex_fmt {
        TFMT4_8_UNORM = 4,
        TFMT4_8_8_UNORM = 14,
        TFMT4_8_8_8_8_UNORM = 28,
+       TFMT4_8_SNORM = 5,
        TFMT4_8_8_SNORM = 15,
        TFMT4_8_8_8_8_SNORM = 29,
+       TFMT4_8_UINT = 6,
        TFMT4_8_8_UINT = 16,
        TFMT4_8_8_8_8_UINT = 30,
+       TFMT4_8_SINT = 7,
        TFMT4_8_8_SINT = 17,
        TFMT4_8_8_8_8_SINT = 31,
        TFMT4_16_UINT = 21,
@@ -246,7 +250,8 @@ enum a4xx_tex_clamp {
        A4XX_TEX_REPEAT = 0,
        A4XX_TEX_CLAMP_TO_EDGE = 1,
        A4XX_TEX_MIRROR_REPEAT = 2,
-       A4XX_TEX_CLAMP_NONE = 3,
+       A4XX_TEX_CLAMP_TO_BORDER = 3,
+       A4XX_TEX_MIRROR_CLAMP = 4,
 };
 
 enum a4xx_tex_aniso {
index 399a9e5281394a2d8f6c7562718e6d80cc050fbc..c304468cf2bdcdade30ff97d5c3ad8a544cd5c81 100644 (file)
@@ -8,13 +8,14 @@ http://github.com/freedreno/envytools/
 git clone https://github.com/freedreno/envytools.git
 
 The rules-ng-ng source files this header was generated from are:
-- /home/robclark/src/freedreno/envytools/rnndb/adreno.xml               (    364 bytes, from 2015-05-20 20:03:07)
+- /home/robclark/src/freedreno/envytools/rnndb/adreno.xml               (    398 bytes, from 2015-09-24 17:25:31)
 - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml  (   1453 bytes, from 2015-05-20 20:03:07)
 - /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml          (  32901 bytes, from 2015-05-20 20:03:14)
-- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml (  10551 bytes, from 2015-05-20 20:03:14)
+- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml (  10755 bytes, from 2015-09-14 20:46:55)
 - /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml    (  14968 bytes, from 2015-05-20 20:12:27)
-- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml          (  67120 bytes, from 2015-08-14 23:22:03)
-- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml          (  63785 bytes, from 2015-08-14 18:27:06)
+- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml          (  67771 bytes, from 2015-09-14 20:46:55)
+- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml          (  63970 bytes, from 2015-09-14 20:50:12)
+- /home/robclark/src/freedreno/envytools/rnndb/adreno/ocmem.xml         (   1773 bytes, from 2015-09-24 17:30:00)
 
 Copyright (C) 2013-2015 by the following authors:
 - Rob Clark <robdclark@gmail.com> (robclark)
@@ -85,6 +86,10 @@ enum adreno_rb_blend_factor {
        FACTOR_CONSTANT_ALPHA = 14,
        FACTOR_ONE_MINUS_CONSTANT_ALPHA = 15,
        FACTOR_SRC_ALPHA_SATURATE = 16,
+       FACTOR_SRC1_COLOR = 20,
+       FACTOR_ONE_MINUS_SRC1_COLOR = 21,
+       FACTOR_SRC1_ALPHA = 22,
+       FACTOR_ONE_MINUS_SRC1_ALPHA = 23,
 };
 
 enum adreno_rb_surface_endian {
index 41904fed135046d67afcf869a4bc3b30dfc17920..a22fef5694993b96362875e38bac9901d6b77817 100644 (file)
@@ -8,13 +8,14 @@ http://github.com/freedreno/envytools/
 git clone https://github.com/freedreno/envytools.git
 
 The rules-ng-ng source files this header was generated from are:
-- /home/robclark/src/freedreno/envytools/rnndb/adreno.xml               (    364 bytes, from 2015-05-20 20:03:07)
+- /home/robclark/src/freedreno/envytools/rnndb/adreno.xml               (    398 bytes, from 2015-09-24 17:25:31)
 - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml  (   1453 bytes, from 2015-05-20 20:03:07)
 - /home/robclark/src/freedreno/envytools/rnndb/adreno/a2xx.xml          (  32901 bytes, from 2015-05-20 20:03:14)
-- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml (  10551 bytes, from 2015-05-20 20:03:14)
+- /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_common.xml (  10755 bytes, from 2015-09-14 20:46:55)
 - /home/robclark/src/freedreno/envytools/rnndb/adreno/adreno_pm4.xml    (  14968 bytes, from 2015-05-20 20:12:27)
-- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml          (  67120 bytes, from 2015-08-14 23:22:03)
-- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml          (  63785 bytes, from 2015-08-14 18:27:06)
+- /home/robclark/src/freedreno/envytools/rnndb/adreno/a3xx.xml          (  67771 bytes, from 2015-09-14 20:46:55)
+- /home/robclark/src/freedreno/envytools/rnndb/adreno/a4xx.xml          (  63970 bytes, from 2015-09-14 20:50:12)
+- /home/robclark/src/freedreno/envytools/rnndb/adreno/ocmem.xml         (   1773 bytes, from 2015-09-24 17:30:00)
 
 Copyright (C) 2013-2015 by the following authors:
 - Rob Clark <robdclark@gmail.com> (robclark)
index 1d2e32f0817b590f902d33692c2b12d8530e1003..b2b5f3dd1b4cc69ecaa3bd38412cf47366dadf41 100644 (file)
@@ -11,10 +11,10 @@ The rules-ng-ng source files this header was generated from are:
 - /home/robclark/src/freedreno/envytools/rnndb/msm.xml                 (    676 bytes, from 2015-05-20 20:03:14)
 - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml (   1453 bytes, from 2015-05-20 20:03:07)
 - /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp4.xml            (  20915 bytes, from 2015-05-20 20:03:14)
-- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml      (   2576 bytes, from 2015-07-09 22:10:24)
-- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml            (  36021 bytes, from 2015-07-09 22:10:24)
-- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml             (  26057 bytes, from 2015-08-14 21:47:57)
-- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml            (    344 bytes, from 2015-05-20 20:03:07)
+- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml      (   2849 bytes, from 2015-09-18 12:07:28)
+- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml            (  37194 bytes, from 2015-09-18 12:07:28)
+- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml             (  27887 bytes, from 2015-10-22 16:34:52)
+- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml            (    602 bytes, from 2015-10-22 16:35:02)
 - /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml         (   1686 bytes, from 2015-05-20 20:03:14)
 - /home/robclark/src/freedreno/envytools/rnndb/hdmi/qfprom.xml         (    600 bytes, from 2015-05-20 20:03:07)
 - /home/robclark/src/freedreno/envytools/rnndb/hdmi/hdmi.xml           (  29154 bytes, from 2015-08-10 21:25:43)
@@ -567,114 +567,234 @@ static inline uint32_t DSI_VERSION_MAJOR(uint32_t val)
 #define REG_DSI_8x60_PHY_CAL_STATUS                            0x000000fc
 #define DSI_8x60_PHY_CAL_STATUS_CAL_BUSY                       0x10000000
 
-static inline uint32_t REG_DSI_8960_LN(uint32_t i0) { return 0x00000300 + 0x40*i0; }
+static inline uint32_t REG_DSI_28nm_8960_PHY_LN(uint32_t i0) { return 0x00000000 + 0x40*i0; }
 
-static inline uint32_t REG_DSI_8960_LN_CFG_0(uint32_t i0) { return 0x00000300 + 0x40*i0; }
+static inline uint32_t REG_DSI_28nm_8960_PHY_LN_CFG_0(uint32_t i0) { return 0x00000000 + 0x40*i0; }
 
-static inline uint32_t REG_DSI_8960_LN_CFG_1(uint32_t i0) { return 0x00000304 + 0x40*i0; }
+static inline uint32_t REG_DSI_28nm_8960_PHY_LN_CFG_1(uint32_t i0) { return 0x00000004 + 0x40*i0; }
 
-static inline uint32_t REG_DSI_8960_LN_CFG_2(uint32_t i0) { return 0x00000308 + 0x40*i0; }
+static inline uint32_t REG_DSI_28nm_8960_PHY_LN_CFG_2(uint32_t i0) { return 0x00000008 + 0x40*i0; }
 
-static inline uint32_t REG_DSI_8960_LN_TEST_DATAPATH(uint32_t i0) { return 0x0000030c + 0x40*i0; }
+static inline uint32_t REG_DSI_28nm_8960_PHY_LN_TEST_DATAPATH(uint32_t i0) { return 0x0000000c + 0x40*i0; }
 
-static inline uint32_t REG_DSI_8960_LN_TEST_STR_0(uint32_t i0) { return 0x00000314 + 0x40*i0; }
+static inline uint32_t REG_DSI_28nm_8960_PHY_LN_TEST_STR_0(uint32_t i0) { return 0x00000014 + 0x40*i0; }
 
-static inline uint32_t REG_DSI_8960_LN_TEST_STR_1(uint32_t i0) { return 0x00000318 + 0x40*i0; }
+static inline uint32_t REG_DSI_28nm_8960_PHY_LN_TEST_STR_1(uint32_t i0) { return 0x00000018 + 0x40*i0; }
 
-#define REG_DSI_8960_PHY_LNCK_CFG_0                            0x00000400
+#define REG_DSI_28nm_8960_PHY_LNCK_CFG_0                       0x00000100
 
-#define REG_DSI_8960_PHY_LNCK_CFG_1                            0x00000404
+#define REG_DSI_28nm_8960_PHY_LNCK_CFG_1                       0x00000104
 
-#define REG_DSI_8960_PHY_LNCK_CFG_2                            0x00000408
+#define REG_DSI_28nm_8960_PHY_LNCK_CFG_2                       0x00000108
 
-#define REG_DSI_8960_PHY_LNCK_TEST_DATAPATH                    0x0000040c
+#define REG_DSI_28nm_8960_PHY_LNCK_TEST_DATAPATH               0x0000010c
 
-#define REG_DSI_8960_PHY_LNCK_TEST_STR0                                0x00000414
+#define REG_DSI_28nm_8960_PHY_LNCK_TEST_STR0                   0x00000114
 
-#define REG_DSI_8960_PHY_LNCK_TEST_STR1                                0x00000418
+#define REG_DSI_28nm_8960_PHY_LNCK_TEST_STR1                   0x00000118
 
-#define REG_DSI_8960_PHY_TIMING_CTRL_0                         0x00000440
+#define REG_DSI_28nm_8960_PHY_TIMING_CTRL_0                    0x00000140
+#define DSI_28nm_8960_PHY_TIMING_CTRL_0_CLK_ZERO__MASK         0x000000ff
+#define DSI_28nm_8960_PHY_TIMING_CTRL_0_CLK_ZERO__SHIFT                0
+static inline uint32_t DSI_28nm_8960_PHY_TIMING_CTRL_0_CLK_ZERO(uint32_t val)
+{
+       return ((val) << DSI_28nm_8960_PHY_TIMING_CTRL_0_CLK_ZERO__SHIFT) & DSI_28nm_8960_PHY_TIMING_CTRL_0_CLK_ZERO__MASK;
+}
+
+#define REG_DSI_28nm_8960_PHY_TIMING_CTRL_1                    0x00000144
+#define DSI_28nm_8960_PHY_TIMING_CTRL_1_CLK_TRAIL__MASK                0x000000ff
+#define DSI_28nm_8960_PHY_TIMING_CTRL_1_CLK_TRAIL__SHIFT       0
+static inline uint32_t DSI_28nm_8960_PHY_TIMING_CTRL_1_CLK_TRAIL(uint32_t val)
+{
+       return ((val) << DSI_28nm_8960_PHY_TIMING_CTRL_1_CLK_TRAIL__SHIFT) & DSI_28nm_8960_PHY_TIMING_CTRL_1_CLK_TRAIL__MASK;
+}
+
+#define REG_DSI_28nm_8960_PHY_TIMING_CTRL_2                    0x00000148
+#define DSI_28nm_8960_PHY_TIMING_CTRL_2_CLK_PREPARE__MASK      0x000000ff
+#define DSI_28nm_8960_PHY_TIMING_CTRL_2_CLK_PREPARE__SHIFT     0
+static inline uint32_t DSI_28nm_8960_PHY_TIMING_CTRL_2_CLK_PREPARE(uint32_t val)
+{
+       return ((val) << DSI_28nm_8960_PHY_TIMING_CTRL_2_CLK_PREPARE__SHIFT) & DSI_28nm_8960_PHY_TIMING_CTRL_2_CLK_PREPARE__MASK;
+}
+
+#define REG_DSI_28nm_8960_PHY_TIMING_CTRL_3                    0x0000014c
+
+#define REG_DSI_28nm_8960_PHY_TIMING_CTRL_4                    0x00000150
+#define DSI_28nm_8960_PHY_TIMING_CTRL_4_HS_EXIT__MASK          0x000000ff
+#define DSI_28nm_8960_PHY_TIMING_CTRL_4_HS_EXIT__SHIFT         0
+static inline uint32_t DSI_28nm_8960_PHY_TIMING_CTRL_4_HS_EXIT(uint32_t val)
+{
+       return ((val) << DSI_28nm_8960_PHY_TIMING_CTRL_4_HS_EXIT__SHIFT) & DSI_28nm_8960_PHY_TIMING_CTRL_4_HS_EXIT__MASK;
+}
+
+#define REG_DSI_28nm_8960_PHY_TIMING_CTRL_5                    0x00000154
+#define DSI_28nm_8960_PHY_TIMING_CTRL_5_HS_ZERO__MASK          0x000000ff
+#define DSI_28nm_8960_PHY_TIMING_CTRL_5_HS_ZERO__SHIFT         0
+static inline uint32_t DSI_28nm_8960_PHY_TIMING_CTRL_5_HS_ZERO(uint32_t val)
+{
+       return ((val) << DSI_28nm_8960_PHY_TIMING_CTRL_5_HS_ZERO__SHIFT) & DSI_28nm_8960_PHY_TIMING_CTRL_5_HS_ZERO__MASK;
+}
+
+#define REG_DSI_28nm_8960_PHY_TIMING_CTRL_6                    0x00000158
+#define DSI_28nm_8960_PHY_TIMING_CTRL_6_HS_PREPARE__MASK       0x000000ff
+#define DSI_28nm_8960_PHY_TIMING_CTRL_6_HS_PREPARE__SHIFT      0
+static inline uint32_t DSI_28nm_8960_PHY_TIMING_CTRL_6_HS_PREPARE(uint32_t val)
+{
+       return ((val) << DSI_28nm_8960_PHY_TIMING_CTRL_6_HS_PREPARE__SHIFT) & DSI_28nm_8960_PHY_TIMING_CTRL_6_HS_PREPARE__MASK;
+}
+
+#define REG_DSI_28nm_8960_PHY_TIMING_CTRL_7                    0x0000015c
+#define DSI_28nm_8960_PHY_TIMING_CTRL_7_HS_TRAIL__MASK         0x000000ff
+#define DSI_28nm_8960_PHY_TIMING_CTRL_7_HS_TRAIL__SHIFT                0
+static inline uint32_t DSI_28nm_8960_PHY_TIMING_CTRL_7_HS_TRAIL(uint32_t val)
+{
+       return ((val) << DSI_28nm_8960_PHY_TIMING_CTRL_7_HS_TRAIL__SHIFT) & DSI_28nm_8960_PHY_TIMING_CTRL_7_HS_TRAIL__MASK;
+}
+
+#define REG_DSI_28nm_8960_PHY_TIMING_CTRL_8                    0x00000160
+#define DSI_28nm_8960_PHY_TIMING_CTRL_8_HS_RQST__MASK          0x000000ff
+#define DSI_28nm_8960_PHY_TIMING_CTRL_8_HS_RQST__SHIFT         0
+static inline uint32_t DSI_28nm_8960_PHY_TIMING_CTRL_8_HS_RQST(uint32_t val)
+{
+       return ((val) << DSI_28nm_8960_PHY_TIMING_CTRL_8_HS_RQST__SHIFT) & DSI_28nm_8960_PHY_TIMING_CTRL_8_HS_RQST__MASK;
+}
+
+#define REG_DSI_28nm_8960_PHY_TIMING_CTRL_9                    0x00000164
+#define DSI_28nm_8960_PHY_TIMING_CTRL_9_TA_GO__MASK            0x00000007
+#define DSI_28nm_8960_PHY_TIMING_CTRL_9_TA_GO__SHIFT           0
+static inline uint32_t DSI_28nm_8960_PHY_TIMING_CTRL_9_TA_GO(uint32_t val)
+{
+       return ((val) << DSI_28nm_8960_PHY_TIMING_CTRL_9_TA_GO__SHIFT) & DSI_28nm_8960_PHY_TIMING_CTRL_9_TA_GO__MASK;
+}
+#define DSI_28nm_8960_PHY_TIMING_CTRL_9_TA_SURE__MASK          0x00000070
+#define DSI_28nm_8960_PHY_TIMING_CTRL_9_TA_SURE__SHIFT         4
+static inline uint32_t DSI_28nm_8960_PHY_TIMING_CTRL_9_TA_SURE(uint32_t val)
+{
+       return ((val) << DSI_28nm_8960_PHY_TIMING_CTRL_9_TA_SURE__SHIFT) & DSI_28nm_8960_PHY_TIMING_CTRL_9_TA_SURE__MASK;
+}
+
+#define REG_DSI_28nm_8960_PHY_TIMING_CTRL_10                   0x00000168
+#define DSI_28nm_8960_PHY_TIMING_CTRL_10_TA_GET__MASK          0x00000007
+#define DSI_28nm_8960_PHY_TIMING_CTRL_10_TA_GET__SHIFT         0
+static inline uint32_t DSI_28nm_8960_PHY_TIMING_CTRL_10_TA_GET(uint32_t val)
+{
+       return ((val) << DSI_28nm_8960_PHY_TIMING_CTRL_10_TA_GET__SHIFT) & DSI_28nm_8960_PHY_TIMING_CTRL_10_TA_GET__MASK;
+}
+
+#define REG_DSI_28nm_8960_PHY_TIMING_CTRL_11                   0x0000016c
+#define DSI_28nm_8960_PHY_TIMING_CTRL_11_TRIG3_CMD__MASK       0x000000ff
+#define DSI_28nm_8960_PHY_TIMING_CTRL_11_TRIG3_CMD__SHIFT      0
+static inline uint32_t DSI_28nm_8960_PHY_TIMING_CTRL_11_TRIG3_CMD(uint32_t val)
+{
+       return ((val) << DSI_28nm_8960_PHY_TIMING_CTRL_11_TRIG3_CMD__SHIFT) & DSI_28nm_8960_PHY_TIMING_CTRL_11_TRIG3_CMD__MASK;
+}
+
+#define REG_DSI_28nm_8960_PHY_CTRL_0                           0x00000170
+
+#define REG_DSI_28nm_8960_PHY_CTRL_1                           0x00000174
+
+#define REG_DSI_28nm_8960_PHY_CTRL_2                           0x00000178
+
+#define REG_DSI_28nm_8960_PHY_CTRL_3                           0x0000017c
+
+#define REG_DSI_28nm_8960_PHY_STRENGTH_0                       0x00000180
+
+#define REG_DSI_28nm_8960_PHY_STRENGTH_1                       0x00000184
+
+#define REG_DSI_28nm_8960_PHY_STRENGTH_2                       0x00000188
+
+#define REG_DSI_28nm_8960_PHY_BIST_CTRL_0                      0x0000018c
+
+#define REG_DSI_28nm_8960_PHY_BIST_CTRL_1                      0x00000190
+
+#define REG_DSI_28nm_8960_PHY_BIST_CTRL_2                      0x00000194
+
+#define REG_DSI_28nm_8960_PHY_BIST_CTRL_3                      0x00000198
+
+#define REG_DSI_28nm_8960_PHY_BIST_CTRL_4                      0x0000019c
 
-#define REG_DSI_8960_PHY_TIMING_CTRL_1                         0x00000444
+#define REG_DSI_28nm_8960_PHY_LDO_CTRL                         0x000001b0
 
-#define REG_DSI_8960_PHY_TIMING_CTRL_2                         0x00000448
+#define REG_DSI_28nm_8960_PHY_MISC_REGULATOR_CTRL_0            0x00000000
 
-#define REG_DSI_8960_PHY_TIMING_CTRL_3                         0x0000044c
+#define REG_DSI_28nm_8960_PHY_MISC_REGULATOR_CTRL_1            0x00000004
 
-#define REG_DSI_8960_PHY_TIMING_CTRL_4                         0x00000450
+#define REG_DSI_28nm_8960_PHY_MISC_REGULATOR_CTRL_2            0x00000008
 
-#define REG_DSI_8960_PHY_TIMING_CTRL_5                         0x00000454
+#define REG_DSI_28nm_8960_PHY_MISC_REGULATOR_CTRL_3            0x0000000c
 
-#define REG_DSI_8960_PHY_TIMING_CTRL_6                         0x00000458
+#define REG_DSI_28nm_8960_PHY_MISC_REGULATOR_CTRL_4            0x00000010
 
-#define REG_DSI_8960_PHY_TIMING_CTRL_7                         0x0000045c
+#define REG_DSI_28nm_8960_PHY_MISC_REGULATOR_CTRL_5            0x00000014
 
-#define REG_DSI_8960_PHY_TIMING_CTRL_8                         0x00000460
+#define REG_DSI_28nm_8960_PHY_MISC_REGULATOR_CAL_PWR_CFG       0x00000018
 
-#define REG_DSI_8960_PHY_TIMING_CTRL_9                         0x00000464
+#define REG_DSI_28nm_8960_PHY_MISC_CAL_HW_TRIGGER              0x00000028
 
-#define REG_DSI_8960_PHY_TIMING_CTRL_10                                0x00000468
+#define REG_DSI_28nm_8960_PHY_MISC_CAL_SW_CFG_0                        0x0000002c
 
-#define REG_DSI_8960_PHY_TIMING_CTRL_11                                0x0000046c
+#define REG_DSI_28nm_8960_PHY_MISC_CAL_SW_CFG_1                        0x00000030
 
-#define REG_DSI_8960_PHY_CTRL_0                                        0x00000470
+#define REG_DSI_28nm_8960_PHY_MISC_CAL_SW_CFG_2                        0x00000034
 
-#define REG_DSI_8960_PHY_CTRL_1                                        0x00000474
+#define REG_DSI_28nm_8960_PHY_MISC_CAL_HW_CFG_0                        0x00000038
 
-#define REG_DSI_8960_PHY_CTRL_2                                        0x00000478
+#define REG_DSI_28nm_8960_PHY_MISC_CAL_HW_CFG_1                        0x0000003c
 
-#define REG_DSI_8960_PHY_CTRL_3                                        0x0000047c
+#define REG_DSI_28nm_8960_PHY_MISC_CAL_HW_CFG_2                        0x00000040
 
-#define REG_DSI_8960_PHY_STRENGTH_0                            0x00000480
+#define REG_DSI_28nm_8960_PHY_MISC_CAL_HW_CFG_3                        0x00000044
 
-#define REG_DSI_8960_PHY_STRENGTH_1                            0x00000484
+#define REG_DSI_28nm_8960_PHY_MISC_CAL_HW_CFG_4                        0x00000048
 
-#define REG_DSI_8960_PHY_STRENGTH_2                            0x00000488
+#define REG_DSI_28nm_8960_PHY_MISC_CAL_STATUS                  0x00000050
+#define DSI_28nm_8960_PHY_MISC_CAL_STATUS_CAL_BUSY             0x00000010
 
-#define REG_DSI_8960_PHY_BIST_CTRL_0                           0x0000048c
+#define REG_DSI_28nm_8960_PHY_PLL_CTRL_0                       0x00000000
+#define DSI_28nm_8960_PHY_PLL_CTRL_0_ENABLE                    0x00000001
 
-#define REG_DSI_8960_PHY_BIST_CTRL_1                           0x00000490
+#define REG_DSI_28nm_8960_PHY_PLL_CTRL_1                       0x00000004
 
-#define REG_DSI_8960_PHY_BIST_CTRL_2                           0x00000494
+#define REG_DSI_28nm_8960_PHY_PLL_CTRL_2                       0x00000008
 
-#define REG_DSI_8960_PHY_BIST_CTRL_3                           0x00000498
+#define REG_DSI_28nm_8960_PHY_PLL_CTRL_3                       0x0000000c
 
-#define REG_DSI_8960_PHY_BIST_CTRL_4                           0x0000049c
+#define REG_DSI_28nm_8960_PHY_PLL_CTRL_4                       0x00000010
 
-#define REG_DSI_8960_PHY_LDO_CTRL                              0x000004b0
+#define REG_DSI_28nm_8960_PHY_PLL_CTRL_5                       0x00000014
 
-#define REG_DSI_8960_PHY_REGULATOR_CTRL_0                      0x00000500
+#define REG_DSI_28nm_8960_PHY_PLL_CTRL_6                       0x00000018
 
-#define REG_DSI_8960_PHY_REGULATOR_CTRL_1                      0x00000504
+#define REG_DSI_28nm_8960_PHY_PLL_CTRL_7                       0x0000001c
 
-#define REG_DSI_8960_PHY_REGULATOR_CTRL_2                      0x00000508
+#define REG_DSI_28nm_8960_PHY_PLL_CTRL_8                       0x00000020
 
-#define REG_DSI_8960_PHY_REGULATOR_CTRL_3                      0x0000050c
+#define REG_DSI_28nm_8960_PHY_PLL_CTRL_9                       0x00000024
 
-#define REG_DSI_8960_PHY_REGULATOR_CTRL_4                      0x00000510
+#define REG_DSI_28nm_8960_PHY_PLL_CTRL_10                      0x00000028
 
-#define REG_DSI_8960_PHY_REGULATOR_CAL_PWR_CFG                 0x00000518
+#define REG_DSI_28nm_8960_PHY_PLL_CTRL_11                      0x0000002c
 
-#define REG_DSI_8960_PHY_CAL_HW_TRIGGER                                0x00000528
+#define REG_DSI_28nm_8960_PHY_PLL_CTRL_12                      0x00000030
 
-#define REG_DSI_8960_PHY_CAL_SW_CFG_0                          0x0000052c
+#define REG_DSI_28nm_8960_PHY_PLL_CTRL_13                      0x00000034
 
-#define REG_DSI_8960_PHY_CAL_SW_CFG_1                          0x00000530
+#define REG_DSI_28nm_8960_PHY_PLL_CTRL_14                      0x00000038
 
-#define REG_DSI_8960_PHY_CAL_SW_CFG_2                          0x00000534
+#define REG_DSI_28nm_8960_PHY_PLL_CTRL_15                      0x0000003c
 
-#define REG_DSI_8960_PHY_CAL_HW_CFG_0                          0x00000538
+#define REG_DSI_28nm_8960_PHY_PLL_CTRL_16                      0x00000040
 
-#define REG_DSI_8960_PHY_CAL_HW_CFG_1                          0x0000053c
+#define REG_DSI_28nm_8960_PHY_PLL_CTRL_17                      0x00000044
 
-#define REG_DSI_8960_PHY_CAL_HW_CFG_2                          0x00000540
+#define REG_DSI_28nm_8960_PHY_PLL_CTRL_18                      0x00000048
 
-#define REG_DSI_8960_PHY_CAL_HW_CFG_3                          0x00000544
+#define REG_DSI_28nm_8960_PHY_PLL_CTRL_19                      0x0000004c
 
-#define REG_DSI_8960_PHY_CAL_HW_CFG_4                          0x00000548
+#define REG_DSI_28nm_8960_PHY_PLL_CTRL_20                      0x00000050
 
-#define REG_DSI_8960_PHY_CAL_STATUS                            0x00000550
-#define DSI_8960_PHY_CAL_STATUS_CAL_BUSY                       0x00000010
+#define REG_DSI_28nm_8960_PHY_PLL_RDY                          0x00000080
+#define DSI_28nm_8960_PHY_PLL_RDY_PLL_RDY                      0x00000001
 
 static inline uint32_t REG_DSI_28nm_PHY_LN(uint32_t i0) { return 0x00000000 + 0x40*i0; }
 
index 8d82973fe9db72479fe1219abd0b1c8dd0a40f6d..4c49868efcda211ad2ed8397ef4ce1d2043ea63b 100644 (file)
@@ -278,7 +278,7 @@ static int dsi_regulator_init(struct msm_dsi_host *msm_host)
        }
 
        for (i = 0; i < num; i++) {
-               if ((regs[i].min_voltage >= 0) && (regs[i].max_voltage >= 0)) {
+               if (regulator_can_change_voltage(s[i].consumer)) {
                        ret = regulator_set_voltage(s[i].consumer,
                                regs[i].min_voltage, regs[i].max_voltage);
                        if (ret < 0) {
index 5de505e627beb0eeb7f74d529eadc3ad3cdb6af3..80ec65e47468dc9ca5be394b5cef993dd2306382 100644 (file)
@@ -11,10 +11,10 @@ The rules-ng-ng source files this header was generated from are:
 - /home/robclark/src/freedreno/envytools/rnndb/msm.xml                 (    676 bytes, from 2015-05-20 20:03:14)
 - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml (   1453 bytes, from 2015-05-20 20:03:07)
 - /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp4.xml            (  20915 bytes, from 2015-05-20 20:03:14)
-- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml      (   2576 bytes, from 2015-07-09 22:10:24)
-- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml            (  36021 bytes, from 2015-07-09 22:10:24)
-- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml             (  26057 bytes, from 2015-08-14 21:47:57)
-- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml            (    344 bytes, from 2015-05-20 20:03:07)
+- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml      (   2849 bytes, from 2015-09-18 12:07:28)
+- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml            (  37194 bytes, from 2015-09-18 12:07:28)
+- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml             (  27887 bytes, from 2015-10-22 16:34:52)
+- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml            (    602 bytes, from 2015-10-22 16:35:02)
 - /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml         (   1686 bytes, from 2015-05-20 20:03:14)
 - /home/robclark/src/freedreno/envytools/rnndb/hdmi/qfprom.xml         (    600 bytes, from 2015-05-20 20:03:07)
 - /home/robclark/src/freedreno/envytools/rnndb/hdmi/hdmi.xml           (  29154 bytes, from 2015-08-10 21:25:43)
index 401ff58d6893e704b943a7c53f033b93e53abd4c..f1f955f571fa1fa277da91ffc830726edebe32e8 100644 (file)
@@ -178,7 +178,7 @@ static int dsi_phy_regulator_init(struct msm_dsi_phy *phy)
        }
 
        for (i = 0; i < num; i++) {
-               if ((regs[i].min_voltage >= 0) && (regs[i].max_voltage >= 0)) {
+               if (regulator_can_change_voltage(s[i].consumer)) {
                        ret = regulator_set_voltage(s[i].consumer,
                                regs[i].min_voltage, regs[i].max_voltage);
                        if (ret < 0) {
index f1a7c7b46420985e7f2c63937e08963717056b81..edf74110ced7bd1ec15a96f96114681006b6cb43 100644 (file)
@@ -99,16 +99,14 @@ static int dsi_28nm_phy_enable(struct msm_dsi_phy *phy, int src_pll_id,
                dsi_phy_write(base + REG_DSI_28nm_PHY_LN_CFG_1(i), 0);
                dsi_phy_write(base + REG_DSI_28nm_PHY_LN_CFG_2(i), 0);
                dsi_phy_write(base + REG_DSI_28nm_PHY_LN_CFG_3(i), 0);
+               dsi_phy_write(base + REG_DSI_28nm_PHY_LN_CFG_4(i), 0);
                dsi_phy_write(base + REG_DSI_28nm_PHY_LN_TEST_DATAPATH(i), 0);
                dsi_phy_write(base + REG_DSI_28nm_PHY_LN_DEBUG_SEL(i), 0);
                dsi_phy_write(base + REG_DSI_28nm_PHY_LN_TEST_STR_0(i), 0x1);
                dsi_phy_write(base + REG_DSI_28nm_PHY_LN_TEST_STR_1(i), 0x97);
        }
-       dsi_phy_write(base + REG_DSI_28nm_PHY_LN_CFG_4(0), 0);
-       dsi_phy_write(base + REG_DSI_28nm_PHY_LN_CFG_4(1), 0x5);
-       dsi_phy_write(base + REG_DSI_28nm_PHY_LN_CFG_4(2), 0xa);
-       dsi_phy_write(base + REG_DSI_28nm_PHY_LN_CFG_4(3), 0xf);
 
+       dsi_phy_write(base + REG_DSI_28nm_PHY_LNCK_CFG_4, 0);
        dsi_phy_write(base + REG_DSI_28nm_PHY_LNCK_CFG_1, 0xc0);
        dsi_phy_write(base + REG_DSI_28nm_PHY_LNCK_TEST_STR0, 0x1);
        dsi_phy_write(base + REG_DSI_28nm_PHY_LNCK_TEST_STR1, 0xbb);
index 06cbddfc914fbd44ece12db2ac16fb81f4ec583a..7d7662e69e11abe5d1bc80e458e517b60f7daaa3 100644 (file)
@@ -11,10 +11,10 @@ The rules-ng-ng source files this header was generated from are:
 - /home/robclark/src/freedreno/envytools/rnndb/msm.xml                 (    676 bytes, from 2015-05-20 20:03:14)
 - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml (   1453 bytes, from 2015-05-20 20:03:07)
 - /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp4.xml            (  20915 bytes, from 2015-05-20 20:03:14)
-- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml      (   2576 bytes, from 2015-07-09 22:10:24)
-- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml            (  36021 bytes, from 2015-07-09 22:10:24)
-- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml             (  26057 bytes, from 2015-08-14 21:47:57)
-- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml            (    344 bytes, from 2015-05-20 20:03:07)
+- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml      (   2849 bytes, from 2015-09-18 12:07:28)
+- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml            (  37194 bytes, from 2015-09-18 12:07:28)
+- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml             (  27887 bytes, from 2015-10-22 16:34:52)
+- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml            (    602 bytes, from 2015-10-22 16:35:02)
 - /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml         (   1686 bytes, from 2015-05-20 20:03:14)
 - /home/robclark/src/freedreno/envytools/rnndb/hdmi/qfprom.xml         (    600 bytes, from 2015-05-20 20:03:07)
 - /home/robclark/src/freedreno/envytools/rnndb/hdmi/hdmi.xml           (  29154 bytes, from 2015-08-10 21:25:43)
@@ -45,7 +45,18 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
 
 
-#define REG_SFPB_CFG                                           0x00000058
+enum sfpb_ahb_arb_master_port_en {
+       SFPB_MASTER_PORT_ENABLE = 3,
+       SFPB_MASTER_PORT_DISABLE = 0,
+};
+
+#define REG_SFPB_GPREG                                         0x00000058
+#define SFPB_GPREG_MASTER_PORT_EN__MASK                                0x00001800
+#define SFPB_GPREG_MASTER_PORT_EN__SHIFT                       11
+static inline uint32_t SFPB_GPREG_MASTER_PORT_EN(enum sfpb_ahb_arb_master_port_en val)
+{
+       return ((val) << SFPB_GPREG_MASTER_PORT_EN__SHIFT) & SFPB_GPREG_MASTER_PORT_EN__MASK;
+}
 
 
 #endif /* SFPB_XML */
index bef1d65fe28c80b16f391997751dbf72f964fe47..90bf5ed467469a0c596e83be6fd2d93a37a0d042 100644 (file)
@@ -11,10 +11,10 @@ The rules-ng-ng source files this header was generated from are:
 - /home/robclark/src/freedreno/envytools/rnndb/msm.xml                 (    676 bytes, from 2015-05-20 20:03:14)
 - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml (   1453 bytes, from 2015-05-20 20:03:07)
 - /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp4.xml            (  20915 bytes, from 2015-05-20 20:03:14)
-- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml      (   2576 bytes, from 2015-07-09 22:10:24)
-- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml            (  36021 bytes, from 2015-07-09 22:10:24)
-- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml             (  26057 bytes, from 2015-08-14 21:47:57)
-- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml            (    344 bytes, from 2015-05-20 20:03:07)
+- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml      (   2849 bytes, from 2015-09-18 12:07:28)
+- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml            (  37194 bytes, from 2015-09-18 12:07:28)
+- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml             (  27887 bytes, from 2015-10-22 16:34:52)
+- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml            (    602 bytes, from 2015-10-22 16:35:02)
 - /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml         (   1686 bytes, from 2015-05-20 20:03:14)
 - /home/robclark/src/freedreno/envytools/rnndb/hdmi/qfprom.xml         (    600 bytes, from 2015-05-20 20:03:07)
 - /home/robclark/src/freedreno/envytools/rnndb/hdmi/hdmi.xml           (  29154 bytes, from 2015-08-10 21:25:43)
index 101b324cdeeff8e269d62454f20ccff5b66a32bf..1f4a95eeb348190a01aaa05207abc9c20679982a 100644 (file)
@@ -328,6 +328,9 @@ fail:
        .item ## _names = item ##_names_ ## entry, \
        .item ## _cnt   = ARRAY_SIZE(item ## _names_ ## entry)
 
+static const char *pwr_reg_names_none[] = {};
+static const char *hpd_reg_names_none[] = {};
+
 static struct hdmi_platform_config hdmi_tx_8660_config = {
                .phy_init = hdmi_phy_8x60_init,
 };
@@ -367,18 +370,26 @@ static struct hdmi_platform_config hdmi_tx_8084_config = {
                .hpd_freq      = hpd_clk_freq_8x74,
 };
 
-static const char *hpd_reg_names_8x94[] = {};
-
 static struct hdmi_platform_config hdmi_tx_8994_config = {
                .phy_init = NULL, /* nothing to do for this HDMI PHY 20nm */
                HDMI_CFG(pwr_reg, 8x74),
-               HDMI_CFG(hpd_reg, 8x94),
+               HDMI_CFG(hpd_reg, none),
+               HDMI_CFG(pwr_clk, 8x74),
+               HDMI_CFG(hpd_clk, 8x74),
+               .hpd_freq      = hpd_clk_freq_8x74,
+};
+
+static struct hdmi_platform_config hdmi_tx_8996_config = {
+               .phy_init = NULL,
+               HDMI_CFG(pwr_reg, none),
+               HDMI_CFG(hpd_reg, none),
                HDMI_CFG(pwr_clk, 8x74),
                HDMI_CFG(hpd_clk, 8x74),
                .hpd_freq      = hpd_clk_freq_8x74,
 };
 
 static const struct of_device_id dt_match[] = {
+       { .compatible = "qcom,hdmi-tx-8996", .data = &hdmi_tx_8996_config },
        { .compatible = "qcom,hdmi-tx-8994", .data = &hdmi_tx_8994_config },
        { .compatible = "qcom,hdmi-tx-8084", .data = &hdmi_tx_8084_config },
        { .compatible = "qcom,hdmi-tx-8974", .data = &hdmi_tx_8974_config },
index 0b1b5586ff35c348bf0b79d079036439f3a48bce..10c45700aefedd8800ab0be9d65e6a1da4d0f9b6 100644 (file)
@@ -11,10 +11,10 @@ The rules-ng-ng source files this header was generated from are:
 - /home/robclark/src/freedreno/envytools/rnndb/msm.xml                 (    676 bytes, from 2015-05-20 20:03:14)
 - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml (   1453 bytes, from 2015-05-20 20:03:07)
 - /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp4.xml            (  20915 bytes, from 2015-05-20 20:03:14)
-- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml      (   2576 bytes, from 2015-07-09 22:10:24)
-- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml            (  36021 bytes, from 2015-07-09 22:10:24)
-- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml             (  26057 bytes, from 2015-08-14 21:47:57)
-- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml            (    344 bytes, from 2015-05-20 20:03:07)
+- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml      (   2849 bytes, from 2015-09-18 12:07:28)
+- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml            (  37194 bytes, from 2015-09-18 12:07:28)
+- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml             (  27887 bytes, from 2015-10-22 16:34:52)
+- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml            (    602 bytes, from 2015-10-22 16:35:02)
 - /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml         (   1686 bytes, from 2015-05-20 20:03:14)
 - /home/robclark/src/freedreno/envytools/rnndb/hdmi/qfprom.xml         (    600 bytes, from 2015-05-20 20:03:07)
 - /home/robclark/src/freedreno/envytools/rnndb/hdmi/hdmi.xml           (  29154 bytes, from 2015-08-10 21:25:43)
index 2aa23b98f8aa5815b9c5d10031ca6531507f1b89..dbd9cc4daf2e7a413fe07230f10624f3e4b0e338 100644 (file)
@@ -11,10 +11,10 @@ The rules-ng-ng source files this header was generated from are:
 - /home/robclark/src/freedreno/envytools/rnndb/msm.xml                 (    676 bytes, from 2015-05-20 20:03:14)
 - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml (   1453 bytes, from 2015-05-20 20:03:07)
 - /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp4.xml            (  20915 bytes, from 2015-05-20 20:03:14)
-- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml      (   2576 bytes, from 2015-07-09 22:10:24)
-- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml            (  36021 bytes, from 2015-07-09 22:10:24)
-- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml             (  26057 bytes, from 2015-08-14 21:47:57)
-- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml            (    344 bytes, from 2015-05-20 20:03:07)
+- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml      (   2849 bytes, from 2015-09-18 12:07:28)
+- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml            (  37194 bytes, from 2015-09-18 12:07:28)
+- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml             (  27887 bytes, from 2015-10-22 16:34:52)
+- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml            (    602 bytes, from 2015-10-22 16:35:02)
 - /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml         (   1686 bytes, from 2015-05-20 20:03:14)
 - /home/robclark/src/freedreno/envytools/rnndb/hdmi/qfprom.xml         (    600 bytes, from 2015-05-20 20:03:07)
 - /home/robclark/src/freedreno/envytools/rnndb/hdmi/hdmi.xml           (  29154 bytes, from 2015-08-10 21:25:43)
index 74b86734fef547b0b066fa9cdc4bcec06d2fc875..d5d94575fa1bb380509f520a51697797f93ed583 100644 (file)
@@ -11,10 +11,10 @@ The rules-ng-ng source files this header was generated from are:
 - /home/robclark/src/freedreno/envytools/rnndb/msm.xml                 (    676 bytes, from 2015-05-20 20:03:14)
 - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml (   1453 bytes, from 2015-05-20 20:03:07)
 - /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp4.xml            (  20915 bytes, from 2015-05-20 20:03:14)
-- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml      (   2576 bytes, from 2015-07-09 22:10:24)
-- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml            (  36021 bytes, from 2015-07-09 22:10:24)
-- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml             (  26057 bytes, from 2015-08-14 21:47:57)
-- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml            (    344 bytes, from 2015-05-20 20:03:07)
+- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml      (   2849 bytes, from 2015-09-18 12:07:28)
+- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml            (  37194 bytes, from 2015-09-18 12:07:28)
+- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml             (  27887 bytes, from 2015-10-22 16:34:52)
+- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml            (    602 bytes, from 2015-10-22 16:35:02)
 - /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml         (   1686 bytes, from 2015-05-20 20:03:14)
 - /home/robclark/src/freedreno/envytools/rnndb/hdmi/qfprom.xml         (    600 bytes, from 2015-05-20 20:03:07)
 - /home/robclark/src/freedreno/envytools/rnndb/hdmi/hdmi.xml           (  29154 bytes, from 2015-08-10 21:25:43)
index 3469f50d55905c01c8f7c687747e0a510dd203b1..c37da9c61e29cc36fde3f665298cdb9a3727ce67 100644 (file)
@@ -11,10 +11,10 @@ The rules-ng-ng source files this header was generated from are:
 - /home/robclark/src/freedreno/envytools/rnndb/msm.xml                 (    676 bytes, from 2015-05-20 20:03:14)
 - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml (   1453 bytes, from 2015-05-20 20:03:07)
 - /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp4.xml            (  20915 bytes, from 2015-05-20 20:03:14)
-- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml      (   2576 bytes, from 2015-07-09 22:10:24)
-- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml            (  36021 bytes, from 2015-07-09 22:10:24)
-- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml             (  26057 bytes, from 2015-08-14 21:47:57)
-- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml            (    344 bytes, from 2015-05-20 20:03:07)
+- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml      (   2849 bytes, from 2015-09-18 12:07:28)
+- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml            (  37194 bytes, from 2015-09-18 12:07:28)
+- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml             (  27887 bytes, from 2015-10-22 16:34:52)
+- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml            (    602 bytes, from 2015-10-22 16:35:02)
 - /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml         (   1686 bytes, from 2015-05-20 20:03:14)
 - /home/robclark/src/freedreno/envytools/rnndb/hdmi/qfprom.xml         (    600 bytes, from 2015-05-20 20:03:07)
 - /home/robclark/src/freedreno/envytools/rnndb/hdmi/hdmi.xml           (  29154 bytes, from 2015-08-10 21:25:43)
@@ -895,6 +895,7 @@ static inline uint32_t MDP5_PIPE_SRC_OP_MODE_BWC(enum mdp5_pipe_bwc val)
 #define MDP5_PIPE_SRC_OP_MODE_IGC_ROM_1                                0x00040000
 #define MDP5_PIPE_SRC_OP_MODE_DEINTERLACE                      0x00400000
 #define MDP5_PIPE_SRC_OP_MODE_DEINTERLACE_ODD                  0x00800000
+#define MDP5_PIPE_SRC_OP_MODE_SW_PIX_EXT_OVERRIDE              0x80000000
 
 static inline uint32_t REG_MDP5_PIPE_SRC_CONSTANT_COLOR(enum mdp5_pipe i0) { return 0x0000003c + __offset_PIPE(i0); }
 
@@ -932,6 +933,83 @@ static inline uint32_t MDP5_PIPE_DECIMATION_HORZ(uint32_t val)
        return ((val) << MDP5_PIPE_DECIMATION_HORZ__SHIFT) & MDP5_PIPE_DECIMATION_HORZ__MASK;
 }
 
+static inline uint32_t __offset_SW_PIX_EXT(enum mdp_component_type idx)
+{
+       switch (idx) {
+               case COMP_0: return 0x00000100;
+               case COMP_1_2: return 0x00000110;
+               case COMP_3: return 0x00000120;
+               default: return INVALID_IDX(idx);
+       }
+}
+static inline uint32_t REG_MDP5_PIPE_SW_PIX_EXT(enum mdp5_pipe i0, enum mdp_component_type i1) { return 0x00000000 + __offset_PIPE(i0) + __offset_SW_PIX_EXT(i1); }
+
+static inline uint32_t REG_MDP5_PIPE_SW_PIX_EXT_LR(enum mdp5_pipe i0, enum mdp_component_type i1) { return 0x00000000 + __offset_PIPE(i0) + __offset_SW_PIX_EXT(i1); }
+#define MDP5_PIPE_SW_PIX_EXT_LR_LEFT_RPT__MASK                 0x000000ff
+#define MDP5_PIPE_SW_PIX_EXT_LR_LEFT_RPT__SHIFT                        0
+static inline uint32_t MDP5_PIPE_SW_PIX_EXT_LR_LEFT_RPT(uint32_t val)
+{
+       return ((val) << MDP5_PIPE_SW_PIX_EXT_LR_LEFT_RPT__SHIFT) & MDP5_PIPE_SW_PIX_EXT_LR_LEFT_RPT__MASK;
+}
+#define MDP5_PIPE_SW_PIX_EXT_LR_LEFT_OVF__MASK                 0x0000ff00
+#define MDP5_PIPE_SW_PIX_EXT_LR_LEFT_OVF__SHIFT                        8
+static inline uint32_t MDP5_PIPE_SW_PIX_EXT_LR_LEFT_OVF(int32_t val)
+{
+       return ((val) << MDP5_PIPE_SW_PIX_EXT_LR_LEFT_OVF__SHIFT) & MDP5_PIPE_SW_PIX_EXT_LR_LEFT_OVF__MASK;
+}
+#define MDP5_PIPE_SW_PIX_EXT_LR_RIGHT_RPT__MASK                        0x00ff0000
+#define MDP5_PIPE_SW_PIX_EXT_LR_RIGHT_RPT__SHIFT               16
+static inline uint32_t MDP5_PIPE_SW_PIX_EXT_LR_RIGHT_RPT(uint32_t val)
+{
+       return ((val) << MDP5_PIPE_SW_PIX_EXT_LR_RIGHT_RPT__SHIFT) & MDP5_PIPE_SW_PIX_EXT_LR_RIGHT_RPT__MASK;
+}
+#define MDP5_PIPE_SW_PIX_EXT_LR_RIGHT_OVF__MASK                        0xff000000
+#define MDP5_PIPE_SW_PIX_EXT_LR_RIGHT_OVF__SHIFT               24
+static inline uint32_t MDP5_PIPE_SW_PIX_EXT_LR_RIGHT_OVF(int32_t val)
+{
+       return ((val) << MDP5_PIPE_SW_PIX_EXT_LR_RIGHT_OVF__SHIFT) & MDP5_PIPE_SW_PIX_EXT_LR_RIGHT_OVF__MASK;
+}
+
+static inline uint32_t REG_MDP5_PIPE_SW_PIX_EXT_TB(enum mdp5_pipe i0, enum mdp_component_type i1) { return 0x00000004 + __offset_PIPE(i0) + __offset_SW_PIX_EXT(i1); }
+#define MDP5_PIPE_SW_PIX_EXT_TB_TOP_RPT__MASK                  0x000000ff
+#define MDP5_PIPE_SW_PIX_EXT_TB_TOP_RPT__SHIFT                 0
+static inline uint32_t MDP5_PIPE_SW_PIX_EXT_TB_TOP_RPT(uint32_t val)
+{
+       return ((val) << MDP5_PIPE_SW_PIX_EXT_TB_TOP_RPT__SHIFT) & MDP5_PIPE_SW_PIX_EXT_TB_TOP_RPT__MASK;
+}
+#define MDP5_PIPE_SW_PIX_EXT_TB_TOP_OVF__MASK                  0x0000ff00
+#define MDP5_PIPE_SW_PIX_EXT_TB_TOP_OVF__SHIFT                 8
+static inline uint32_t MDP5_PIPE_SW_PIX_EXT_TB_TOP_OVF(int32_t val)
+{
+       return ((val) << MDP5_PIPE_SW_PIX_EXT_TB_TOP_OVF__SHIFT) & MDP5_PIPE_SW_PIX_EXT_TB_TOP_OVF__MASK;
+}
+#define MDP5_PIPE_SW_PIX_EXT_TB_BOTTOM_RPT__MASK               0x00ff0000
+#define MDP5_PIPE_SW_PIX_EXT_TB_BOTTOM_RPT__SHIFT              16
+static inline uint32_t MDP5_PIPE_SW_PIX_EXT_TB_BOTTOM_RPT(uint32_t val)
+{
+       return ((val) << MDP5_PIPE_SW_PIX_EXT_TB_BOTTOM_RPT__SHIFT) & MDP5_PIPE_SW_PIX_EXT_TB_BOTTOM_RPT__MASK;
+}
+#define MDP5_PIPE_SW_PIX_EXT_TB_BOTTOM_OVF__MASK               0xff000000
+#define MDP5_PIPE_SW_PIX_EXT_TB_BOTTOM_OVF__SHIFT              24
+static inline uint32_t MDP5_PIPE_SW_PIX_EXT_TB_BOTTOM_OVF(int32_t val)
+{
+       return ((val) << MDP5_PIPE_SW_PIX_EXT_TB_BOTTOM_OVF__SHIFT) & MDP5_PIPE_SW_PIX_EXT_TB_BOTTOM_OVF__MASK;
+}
+
+static inline uint32_t REG_MDP5_PIPE_SW_PIX_EXT_REQ_PIXELS(enum mdp5_pipe i0, enum mdp_component_type i1) { return 0x00000008 + __offset_PIPE(i0) + __offset_SW_PIX_EXT(i1); }
+#define MDP5_PIPE_SW_PIX_EXT_REQ_PIXELS_LEFT_RIGHT__MASK       0x0000ffff
+#define MDP5_PIPE_SW_PIX_EXT_REQ_PIXELS_LEFT_RIGHT__SHIFT      0
+static inline uint32_t MDP5_PIPE_SW_PIX_EXT_REQ_PIXELS_LEFT_RIGHT(uint32_t val)
+{
+       return ((val) << MDP5_PIPE_SW_PIX_EXT_REQ_PIXELS_LEFT_RIGHT__SHIFT) & MDP5_PIPE_SW_PIX_EXT_REQ_PIXELS_LEFT_RIGHT__MASK;
+}
+#define MDP5_PIPE_SW_PIX_EXT_REQ_PIXELS_TOP_BOTTOM__MASK       0xffff0000
+#define MDP5_PIPE_SW_PIX_EXT_REQ_PIXELS_TOP_BOTTOM__SHIFT      16
+static inline uint32_t MDP5_PIPE_SW_PIX_EXT_REQ_PIXELS_TOP_BOTTOM(uint32_t val)
+{
+       return ((val) << MDP5_PIPE_SW_PIX_EXT_REQ_PIXELS_TOP_BOTTOM__SHIFT) & MDP5_PIPE_SW_PIX_EXT_REQ_PIXELS_TOP_BOTTOM__MASK;
+}
+
 static inline uint32_t REG_MDP5_PIPE_SCALE_CONFIG(enum mdp5_pipe i0) { return 0x00000204 + __offset_PIPE(i0); }
 #define MDP5_PIPE_SCALE_CONFIG_SCALEX_EN                       0x00000001
 #define MDP5_PIPE_SCALE_CONFIG_SCALEY_EN                       0x00000002
index a1e26f23c7cca53a19f2ad557a1cdb01b4c4a646..bb1225aa2f75b8ef9f7ee7deb96a47903406fd63 100644 (file)
@@ -27,6 +27,8 @@ const struct mdp5_cfg_hw msm8x74v1_config = {
        .mdp = {
                .count = 1,
                .base = { 0x00100 },
+               .caps = MDP_CAP_SMP |
+                       0,
        },
        .smp = {
                .mmb_count = 22,
@@ -96,6 +98,8 @@ const struct mdp5_cfg_hw msm8x74v2_config = {
        .mdp = {
                .count = 1,
                .base = { 0x00100 },
+               .caps = MDP_CAP_SMP |
+                       0,
        },
        .smp = {
                .mmb_count = 22,
@@ -165,6 +169,8 @@ const struct mdp5_cfg_hw apq8084_config = {
        .mdp = {
                .count = 1,
                .base = { 0x00100 },
+               .caps = MDP_CAP_SMP |
+                       0,
        },
        .smp = {
                .mmb_count = 44,
@@ -242,6 +248,8 @@ const struct mdp5_cfg_hw msm8x16_config = {
        .mdp = {
                .count = 1,
                .base = { 0x01000 },
+               .caps = MDP_CAP_SMP |
+                       0,
        },
        .smp = {
                .mmb_count = 8,
@@ -301,6 +309,8 @@ const struct mdp5_cfg_hw msm8x94_config = {
        .mdp = {
                .count = 1,
                .base = { 0x01000 },
+               .caps = MDP_CAP_SMP |
+                       0,
        },
        .smp = {
                .mmb_count = 44,
@@ -370,7 +380,89 @@ const struct mdp5_cfg_hw msm8x94_config = {
                        [3] = INTF_HDMI,
                },
        },
-       .max_clk = 320000000,
+       .max_clk = 400000000,
+};
+
+const struct mdp5_cfg_hw msm8x96_config = {
+       .name = "msm8x96",
+       .mdp = {
+               .count = 1,
+               .base = { 0x01000 },
+               .caps = MDP_CAP_DSC |
+                       MDP_CAP_CDM |
+                       0,
+       },
+       .ctl = {
+               .count = 5,
+               .base = { 0x02000, 0x02200, 0x02400, 0x02600, 0x02800 },
+               .flush_hw_mask = 0xf4ffffff,
+       },
+       .pipe_vig = {
+               .count = 4,
+               .base = { 0x05000, 0x07000, 0x09000, 0x0b000 },
+               .caps = MDP_PIPE_CAP_HFLIP      |
+                       MDP_PIPE_CAP_VFLIP      |
+                       MDP_PIPE_CAP_SCALE      |
+                       MDP_PIPE_CAP_CSC        |
+                       MDP_PIPE_CAP_DECIMATION |
+                       MDP_PIPE_CAP_SW_PIX_EXT |
+                       0,
+       },
+       .pipe_rgb = {
+               .count = 4,
+               .base = { 0x15000, 0x17000, 0x19000, 0x1b000 },
+               .caps = MDP_PIPE_CAP_HFLIP      |
+                       MDP_PIPE_CAP_VFLIP      |
+                       MDP_PIPE_CAP_SCALE      |
+                       MDP_PIPE_CAP_DECIMATION |
+                       MDP_PIPE_CAP_SW_PIX_EXT |
+                       0,
+       },
+       .pipe_dma = {
+               .count = 2,
+               .base = { 0x25000, 0x27000 },
+               .caps = MDP_PIPE_CAP_HFLIP      |
+                       MDP_PIPE_CAP_VFLIP      |
+                       MDP_PIPE_CAP_SW_PIX_EXT |
+                       0,
+       },
+       .lm = {
+               .count = 6,
+               .base = { 0x45000, 0x46000, 0x47000, 0x48000, 0x49000, 0x4a000 },
+               .nb_stages = 8,
+               .max_width = 2560,
+               .max_height = 0xFFFF,
+       },
+       .dspp = {
+               .count = 2,
+               .base = { 0x55000, 0x57000 },
+       },
+       .ad = {
+               .count = 3,
+               .base = { 0x79000, 0x79800, 0x7a000 },
+       },
+       .pp = {
+               .count = 4,
+               .base = { 0x71000, 0x71800, 0x72000, 0x72800 },
+       },
+       .cdm = {
+               .count = 1,
+               .base = { 0x7a200 },
+       },
+       .dsc = {
+               .count = 2,
+               .base = { 0x81000, 0x81400 },
+       },
+       .intf = {
+               .base = { 0x6b000, 0x6b800, 0x6c000, 0x6c800, 0x6d000 },
+               .connect = {
+                       [0] = INTF_DISABLED,
+                       [1] = INTF_DSI,
+                       [2] = INTF_DSI,
+                       [3] = INTF_HDMI,
+               },
+       },
+       .max_clk = 412500000,
 };
 
 static const struct mdp5_cfg_handler cfg_handlers[] = {
@@ -379,6 +471,7 @@ static const struct mdp5_cfg_handler cfg_handlers[] = {
        { .revision = 3, .config = { .hw = &apq8084_config } },
        { .revision = 6, .config = { .hw = &msm8x16_config } },
        { .revision = 9, .config = { .hw = &msm8x94_config } },
+       { .revision = 7, .config = { .hw = &msm8x96_config } },
 };
 
 static struct mdp5_cfg_platform *mdp5_get_config(struct platform_device *dev);
index efb918d9f68bf4b265fc480bb069594a0bfda540..050e1618c836e6eed5515bae1e479ab92c7e42d0 100644 (file)
@@ -61,7 +61,12 @@ struct mdp5_smp_block {
        int mmb_size;                   /* MMB: size in bytes */
        uint32_t clients[MAX_CLIENTS];  /* SMP port allocation /pipe */
        mdp5_smp_state_t reserved_state;/* SMP MMBs statically allocated */
-       int reserved[MAX_CLIENTS];      /* # of MMBs allocated per client */
+       uint8_t reserved[MAX_CLIENTS];  /* # of MMBs allocated per client */
+};
+
+struct mdp5_mdp_block {
+       MDP5_SUB_BLOCK_DEFINITION;
+       uint32_t caps;                  /* MDP capabilities: MDP_CAP_xxx bits */
 };
 
 #define MDP5_INTF_NUM_MAX      5
@@ -74,7 +79,7 @@ struct mdp5_intf_block {
 struct mdp5_cfg_hw {
        char  *name;
 
-       struct mdp5_sub_block mdp;
+       struct mdp5_mdp_block mdp;
        struct mdp5_smp_block smp;
        struct mdp5_ctl_block ctl;
        struct mdp5_pipe_block pipe_vig;
@@ -84,6 +89,8 @@ struct mdp5_cfg_hw {
        struct mdp5_sub_block dspp;
        struct mdp5_sub_block ad;
        struct mdp5_sub_block pp;
+       struct mdp5_sub_block dsc;
+       struct mdp5_sub_block cdm;
        struct mdp5_intf_block intf;
 
        uint32_t max_clk;
index 047cb0433ccbe5156c5ebd2734b66586e75c7e27..b532faa8026d95079dc2cf19ad0aef0f97782849 100644 (file)
@@ -452,15 +452,19 @@ static void read_hw_revision(struct mdp5_kms *mdp5_kms,
 }
 
 static int get_clk(struct platform_device *pdev, struct clk **clkp,
-               const char *name)
+               const char *name, bool mandatory)
 {
        struct device *dev = &pdev->dev;
        struct clk *clk = devm_clk_get(dev, name);
-       if (IS_ERR(clk)) {
+       if (IS_ERR(clk) && mandatory) {
                dev_err(dev, "failed to get %s (%ld)\n", name, PTR_ERR(clk));
                return PTR_ERR(clk);
        }
-       *clkp = clk;
+       if (IS_ERR(clk))
+               DBG("skipping %s", name);
+       else
+               *clkp = clk;
+
        return 0;
 }
 
@@ -514,25 +518,26 @@ struct msm_kms *mdp5_kms_init(struct drm_device *dev)
                goto fail;
        }
 
-       ret = get_clk(pdev, &mdp5_kms->axi_clk, "bus_clk");
+       /* mandatory clocks: */
+       ret = get_clk(pdev, &mdp5_kms->axi_clk, "bus_clk", true);
        if (ret)
                goto fail;
-       ret = get_clk(pdev, &mdp5_kms->ahb_clk, "iface_clk");
+       ret = get_clk(pdev, &mdp5_kms->ahb_clk, "iface_clk", true);
        if (ret)
                goto fail;
-       ret = get_clk(pdev, &mdp5_kms->src_clk, "core_clk_src");
+       ret = get_clk(pdev, &mdp5_kms->src_clk, "core_clk_src", true);
        if (ret)
                goto fail;
-       ret = get_clk(pdev, &mdp5_kms->core_clk, "core_clk");
+       ret = get_clk(pdev, &mdp5_kms->core_clk, "core_clk", true);
        if (ret)
                goto fail;
-       ret = get_clk(pdev, &mdp5_kms->lut_clk, "lut_clk");
-       if (ret)
-               DBG("failed to get (optional) lut_clk clock");
-       ret = get_clk(pdev, &mdp5_kms->vsync_clk, "vsync_clk");
+       ret = get_clk(pdev, &mdp5_kms->vsync_clk, "vsync_clk", true);
        if (ret)
                goto fail;
 
+       /* optional clocks: */
+       get_clk(pdev, &mdp5_kms->lut_clk, "lut_clk", false);
+
        /* we need to set a default rate before enabling.  Set a safe
         * rate first, then figure out hw revision, and then set a
         * more optimal rate:
@@ -549,15 +554,23 @@ struct msm_kms *mdp5_kms_init(struct drm_device *dev)
        }
 
        config = mdp5_cfg_get_config(mdp5_kms->cfg);
+       mdp5_kms->caps = config->hw->mdp.caps;
 
        /* TODO: compute core clock rate at runtime */
        clk_set_rate(mdp5_kms->src_clk, config->hw->max_clk);
 
-       mdp5_kms->smp = mdp5_smp_init(mdp5_kms->dev, &config->hw->smp);
-       if (IS_ERR(mdp5_kms->smp)) {
-               ret = PTR_ERR(mdp5_kms->smp);
-               mdp5_kms->smp = NULL;
-               goto fail;
+       /*
+        * Some chipsets have a Shared Memory Pool (SMP), while others
+        * have dedicated latency buffering per source pipe instead;
+        * this section initializes the SMP:
+        */
+       if (mdp5_kms->caps & MDP_CAP_SMP) {
+               mdp5_kms->smp = mdp5_smp_init(mdp5_kms->dev, &config->hw->smp);
+               if (IS_ERR(mdp5_kms->smp)) {
+                       ret = PTR_ERR(mdp5_kms->smp);
+                       mdp5_kms->smp = NULL;
+                       goto fail;
+               }
        }
 
        mdp5_kms->ctlm = mdp5_ctlm_init(dev, mdp5_kms->mmio, mdp5_kms->cfg);
@@ -586,6 +599,7 @@ struct msm_kms *mdp5_kms_init(struct drm_device *dev)
                if (IS_ERR(mmu)) {
                        ret = PTR_ERR(mmu);
                        dev_err(dev->dev, "failed to init iommu: %d\n", ret);
+                       iommu_domain_free(config->platform.iommu);
                        goto fail;
                }
 
index 0bb62423586e2e2126efa6acfe618ed41b90d982..84f65d415598ea4b6c7d85bc8e17d83be3fa1e6e 100644 (file)
@@ -32,6 +32,8 @@ struct mdp5_kms {
        struct drm_device *dev;
 
        struct mdp5_cfg_handler *cfg;
+       uint32_t caps;  /* MDP capabilities (MDP_CAP_XXX bits) */
+
 
        /* mapper-id used to request GEM buffer mapped for scanout: */
        int id;
index a0f5ff0ce8dcc4721c25f99587b2f36ca333c25e..81cd49045ffcba70e5a47bdb4a9493a94cd71ba0 100644 (file)
@@ -500,7 +500,7 @@ static int calc_phase_step(uint32_t src, uint32_t dst, uint32_t *out_phase)
 
 static int calc_scalex_steps(struct drm_plane *plane,
                uint32_t pixel_format, uint32_t src, uint32_t dest,
-               uint32_t phasex_steps[2])
+               uint32_t phasex_steps[COMP_MAX])
 {
        struct mdp5_kms *mdp5_kms = get_kms(plane);
        struct device *dev = mdp5_kms->dev->dev;
@@ -516,15 +516,16 @@ static int calc_scalex_steps(struct drm_plane *plane,
 
        hsub = drm_format_horz_chroma_subsampling(pixel_format);
 
-       phasex_steps[0] = phasex_step;
-       phasex_steps[1] = phasex_step / hsub;
+       phasex_steps[COMP_0]   = phasex_step;
+       phasex_steps[COMP_3]   = phasex_step;
+       phasex_steps[COMP_1_2] = phasex_step / hsub;
 
        return 0;
 }
 
 static int calc_scaley_steps(struct drm_plane *plane,
                uint32_t pixel_format, uint32_t src, uint32_t dest,
-               uint32_t phasey_steps[2])
+               uint32_t phasey_steps[COMP_MAX])
 {
        struct mdp5_kms *mdp5_kms = get_kms(plane);
        struct device *dev = mdp5_kms->dev->dev;
@@ -540,46 +541,127 @@ static int calc_scaley_steps(struct drm_plane *plane,
 
        vsub = drm_format_vert_chroma_subsampling(pixel_format);
 
-       phasey_steps[0] = phasey_step;
-       phasey_steps[1] = phasey_step / vsub;
+       phasey_steps[COMP_0]   = phasey_step;
+       phasey_steps[COMP_3]   = phasey_step;
+       phasey_steps[COMP_1_2] = phasey_step / vsub;
 
        return 0;
 }
 
-static uint32_t get_scale_config(enum mdp_chroma_samp_type chroma_sample,
-               uint32_t src, uint32_t dest, bool hor)
+static uint32_t get_scale_config(const struct mdp_format *format,
+               uint32_t src, uint32_t dst, bool horz)
 {
-       uint32_t y_filter =   (src <= dest) ? SCALE_FILTER_CA  : SCALE_FILTER_PCMN;
-       uint32_t y_a_filter = (src <= dest) ? SCALE_FILTER_BIL : SCALE_FILTER_PCMN;
-       uint32_t uv_filter = ((src / 2) <= dest) ? /* 2x upsample */
-                       SCALE_FILTER_BIL : SCALE_FILTER_PCMN;
-       uint32_t value = 0;
-
-       if (chroma_sample == CHROMA_420 || chroma_sample == CHROMA_H2V1) {
-               if (hor)
-                       value = MDP5_PIPE_SCALE_CONFIG_SCALEX_EN |
-                               MDP5_PIPE_SCALE_CONFIG_SCALEX_FILTER_COMP_0(y_filter) |
-                               MDP5_PIPE_SCALE_CONFIG_SCALEX_FILTER_COMP_3(y_a_filter) |
-                               MDP5_PIPE_SCALE_CONFIG_SCALEX_FILTER_COMP_1_2(uv_filter);
-               else
-                       value = MDP5_PIPE_SCALE_CONFIG_SCALEY_EN |
-                               MDP5_PIPE_SCALE_CONFIG_SCALEY_FILTER_COMP_0(y_filter) |
-                               MDP5_PIPE_SCALE_CONFIG_SCALEY_FILTER_COMP_3(y_a_filter) |
-                               MDP5_PIPE_SCALE_CONFIG_SCALEY_FILTER_COMP_1_2(uv_filter);
-       } else if (src != dest) {
-               if (hor)
-                       value = MDP5_PIPE_SCALE_CONFIG_SCALEX_EN |
-                               MDP5_PIPE_SCALE_CONFIG_SCALEX_FILTER_COMP_0(y_a_filter) |
-                               MDP5_PIPE_SCALE_CONFIG_SCALEX_FILTER_COMP_3(y_a_filter);
-               else
-                       value = MDP5_PIPE_SCALE_CONFIG_SCALEY_EN |
-                               MDP5_PIPE_SCALE_CONFIG_SCALEY_FILTER_COMP_0(y_a_filter) |
-                               MDP5_PIPE_SCALE_CONFIG_SCALEY_FILTER_COMP_3(y_a_filter);
+       bool scaling = format->is_yuv ? true : (src != dst);
+       uint32_t sub, pix_fmt = format->base.pixel_format;
+       uint32_t ya_filter, uv_filter;
+       bool yuv = format->is_yuv;
+
+       if (!scaling)
+               return 0;
+
+       if (yuv) {
+               sub = horz ? drm_format_horz_chroma_subsampling(pix_fmt) :
+                            drm_format_vert_chroma_subsampling(pix_fmt);
+               uv_filter = ((src / sub) <= dst) ?
+                                  SCALE_FILTER_BIL : SCALE_FILTER_PCMN;
        }
+       ya_filter = (src <= dst) ? SCALE_FILTER_BIL : SCALE_FILTER_PCMN;
 
-       return value;
+       if (horz)
+               return  MDP5_PIPE_SCALE_CONFIG_SCALEX_EN |
+                       MDP5_PIPE_SCALE_CONFIG_SCALEX_FILTER_COMP_0(ya_filter) |
+                       MDP5_PIPE_SCALE_CONFIG_SCALEX_FILTER_COMP_3(ya_filter) |
+                       COND(yuv, MDP5_PIPE_SCALE_CONFIG_SCALEX_FILTER_COMP_1_2(uv_filter));
+       else
+               return  MDP5_PIPE_SCALE_CONFIG_SCALEY_EN |
+                       MDP5_PIPE_SCALE_CONFIG_SCALEY_FILTER_COMP_0(ya_filter) |
+                       MDP5_PIPE_SCALE_CONFIG_SCALEY_FILTER_COMP_3(ya_filter) |
+                       COND(yuv, MDP5_PIPE_SCALE_CONFIG_SCALEY_FILTER_COMP_1_2(uv_filter));
 }
 
+static void calc_pixel_ext(const struct mdp_format *format,
+               uint32_t src, uint32_t dst, uint32_t phase_step[2],
+               int pix_ext_edge1[COMP_MAX], int pix_ext_edge2[COMP_MAX],
+               bool horz)
+{
+       bool scaling = format->is_yuv ? true : (src != dst);
+       int i;
+
+       /*
+        * Note:
+        * We assume here that:
+        *     1. PCMN filter is used for downscale
+        *     2. bilinear filter is used for upscale
+        *     3. we are in a single pipe configuration
+        */
+
+       for (i = 0; i < COMP_MAX; i++) {
+               pix_ext_edge1[i] = 0;
+               pix_ext_edge2[i] = scaling ? 1 : 0;
+       }
+}
+
+static void mdp5_write_pixel_ext(struct mdp5_kms *mdp5_kms, enum mdp5_pipe pipe,
+       const struct mdp_format *format,
+       uint32_t src_w, int pe_left[COMP_MAX], int pe_right[COMP_MAX],
+       uint32_t src_h, int pe_top[COMP_MAX], int pe_bottom[COMP_MAX])
+{
+       uint32_t pix_fmt = format->base.pixel_format;
+       uint32_t lr, tb, req;
+       int i;
+
+       for (i = 0; i < COMP_MAX; i++) {
+               uint32_t roi_w = src_w;
+               uint32_t roi_h = src_h;
+
+               if (format->is_yuv && i == COMP_1_2) {
+                       roi_w /= drm_format_horz_chroma_subsampling(pix_fmt);
+                       roi_h /= drm_format_vert_chroma_subsampling(pix_fmt);
+               }
+
+               lr  = (pe_left[i] >= 0) ?
+                       MDP5_PIPE_SW_PIX_EXT_LR_LEFT_RPT(pe_left[i]) :
+                       MDP5_PIPE_SW_PIX_EXT_LR_LEFT_OVF(pe_left[i]);
+
+               lr |= (pe_right[i] >= 0) ?
+                       MDP5_PIPE_SW_PIX_EXT_LR_RIGHT_RPT(pe_right[i]) :
+                       MDP5_PIPE_SW_PIX_EXT_LR_RIGHT_OVF(pe_right[i]);
+
+               tb  = (pe_top[i] >= 0) ?
+                       MDP5_PIPE_SW_PIX_EXT_TB_TOP_RPT(pe_top[i]) :
+                       MDP5_PIPE_SW_PIX_EXT_TB_TOP_OVF(pe_top[i]);
+
+               tb |= (pe_bottom[i] >= 0) ?
+                       MDP5_PIPE_SW_PIX_EXT_TB_BOTTOM_RPT(pe_bottom[i]) :
+                       MDP5_PIPE_SW_PIX_EXT_TB_BOTTOM_OVF(pe_bottom[i]);
+
+               req  = MDP5_PIPE_SW_PIX_EXT_REQ_PIXELS_LEFT_RIGHT(roi_w +
+                               pe_left[i] + pe_right[i]);
+
+               req |= MDP5_PIPE_SW_PIX_EXT_REQ_PIXELS_TOP_BOTTOM(roi_h +
+                               pe_top[i] + pe_bottom[i]);
+
+               mdp5_write(mdp5_kms, REG_MDP5_PIPE_SW_PIX_EXT_LR(pipe, i), lr);
+               mdp5_write(mdp5_kms, REG_MDP5_PIPE_SW_PIX_EXT_TB(pipe, i), tb);
+               mdp5_write(mdp5_kms, REG_MDP5_PIPE_SW_PIX_EXT_REQ_PIXELS(pipe, i), req);
+
+               DBG("comp-%d (L/R): rpt=%d/%d, ovf=%d/%d, req=%d", i,
+                       FIELD(lr,  MDP5_PIPE_SW_PIX_EXT_LR_LEFT_RPT),
+                       FIELD(lr,  MDP5_PIPE_SW_PIX_EXT_LR_RIGHT_RPT),
+                       FIELD(lr,  MDP5_PIPE_SW_PIX_EXT_LR_LEFT_OVF),
+                       FIELD(lr,  MDP5_PIPE_SW_PIX_EXT_LR_RIGHT_OVF),
+                       FIELD(req, MDP5_PIPE_SW_PIX_EXT_REQ_PIXELS_LEFT_RIGHT));
+
+               DBG("comp-%d (T/B): rpt=%d/%d, ovf=%d/%d, req=%d", i,
+                       FIELD(tb,  MDP5_PIPE_SW_PIX_EXT_TB_TOP_RPT),
+                       FIELD(tb,  MDP5_PIPE_SW_PIX_EXT_TB_BOTTOM_RPT),
+                       FIELD(tb,  MDP5_PIPE_SW_PIX_EXT_TB_TOP_OVF),
+                       FIELD(tb,  MDP5_PIPE_SW_PIX_EXT_TB_BOTTOM_OVF),
+                       FIELD(req, MDP5_PIPE_SW_PIX_EXT_REQ_PIXELS_TOP_BOTTOM));
+       }
+}
+
+
 static int mdp5_plane_mode_set(struct drm_plane *plane,
                struct drm_crtc *crtc, struct drm_framebuffer *fb,
                int crtc_x, int crtc_y,
@@ -593,8 +675,10 @@ static int mdp5_plane_mode_set(struct drm_plane *plane,
        enum mdp5_pipe pipe = mdp5_plane->pipe;
        const struct mdp_format *format;
        uint32_t nplanes, config = 0;
-       /* below array -> index 0: comp 0/3 ; index 1: comp 1/2 */
-       uint32_t phasex_step[2] = {0,}, phasey_step[2] = {0,};
+       uint32_t phasex_step[COMP_MAX] = {0,}, phasey_step[COMP_MAX] = {0,};
+       bool pe = mdp5_plane->caps & MDP_PIPE_CAP_SW_PIX_EXT;
+       int pe_left[COMP_MAX], pe_right[COMP_MAX];
+       int pe_top[COMP_MAX], pe_bottom[COMP_MAX];
        uint32_t hdecm = 0, vdecm = 0;
        uint32_t pix_format;
        bool vflip, hflip;
@@ -621,10 +705,12 @@ static int mdp5_plane_mode_set(struct drm_plane *plane,
                        crtc->base.id, crtc_x, crtc_y, crtc_w, crtc_h);
 
        /* Request some memory from the SMP: */
-       ret = mdp5_smp_request(mdp5_kms->smp,
-                       mdp5_plane->pipe, format, src_w, false);
-       if (ret)
-               return ret;
+       if (mdp5_kms->smp) {
+               ret = mdp5_smp_request(mdp5_kms->smp,
+                               mdp5_plane->pipe, format, src_w, false);
+               if (ret)
+                       return ret;
+       }
 
        /*
         * Currently we update the hw for allocations/requests immediately,
@@ -632,7 +718,8 @@ static int mdp5_plane_mode_set(struct drm_plane *plane,
         * would move into atomic->check_plane_state(), while updating the
         * hw would remain here:
         */
-       mdp5_smp_configure(mdp5_kms->smp, pipe);
+       if (mdp5_kms->smp)
+               mdp5_smp_configure(mdp5_kms->smp, pipe);
 
        ret = calc_scalex_steps(plane, pix_format, src_w, crtc_w, phasex_step);
        if (ret)
@@ -642,11 +729,18 @@ static int mdp5_plane_mode_set(struct drm_plane *plane,
        if (ret)
                return ret;
 
+       if (mdp5_plane->caps & MDP_PIPE_CAP_SW_PIX_EXT) {
+               calc_pixel_ext(format, src_w, crtc_w, phasex_step,
+                                        pe_left, pe_right, true);
+               calc_pixel_ext(format, src_h, crtc_h, phasey_step,
+                                       pe_top, pe_bottom, false);
+       }
+
        /* TODO calc hdecm, vdecm */
 
        /* SCALE is used to both scale and up-sample chroma components */
-       config |= get_scale_config(format->chroma_sample, src_w, crtc_w, true);
-       config |= get_scale_config(format->chroma_sample, src_h, crtc_h, false);
+       config |= get_scale_config(format, src_w, crtc_w, true);
+       config |= get_scale_config(format, src_h, crtc_h, false);
        DBG("scale config = %x", config);
 
        hflip = !!(pstate->rotation & BIT(DRM_REFLECT_X));
@@ -695,20 +789,26 @@ static int mdp5_plane_mode_set(struct drm_plane *plane,
        mdp5_write(mdp5_kms, REG_MDP5_PIPE_SRC_OP_MODE(pipe),
                        (hflip ? MDP5_PIPE_SRC_OP_MODE_FLIP_LR : 0) |
                        (vflip ? MDP5_PIPE_SRC_OP_MODE_FLIP_UD : 0) |
+                       COND(pe, MDP5_PIPE_SRC_OP_MODE_SW_PIX_EXT_OVERRIDE) |
                        MDP5_PIPE_SRC_OP_MODE_BWC(BWC_LOSSLESS));
 
        /* not using secure mode: */
        mdp5_write(mdp5_kms, REG_MDP5_PIPE_SRC_ADDR_SW_STATUS(pipe), 0);
 
+       if (mdp5_plane->caps & MDP_PIPE_CAP_SW_PIX_EXT)
+               mdp5_write_pixel_ext(mdp5_kms, pipe, format,
+                               src_w, pe_left, pe_right,
+                               src_h, pe_top, pe_bottom);
+
        if (mdp5_plane->caps & MDP_PIPE_CAP_SCALE) {
                mdp5_write(mdp5_kms, REG_MDP5_PIPE_SCALE_PHASE_STEP_X(pipe),
-                               phasex_step[0]);
+                               phasex_step[COMP_0]);
                mdp5_write(mdp5_kms, REG_MDP5_PIPE_SCALE_PHASE_STEP_Y(pipe),
-                               phasey_step[0]);
+                               phasey_step[COMP_0]);
                mdp5_write(mdp5_kms, REG_MDP5_PIPE_SCALE_CR_PHASE_STEP_X(pipe),
-                               phasex_step[1]);
+                               phasex_step[COMP_1_2]);
                mdp5_write(mdp5_kms, REG_MDP5_PIPE_SCALE_CR_PHASE_STEP_Y(pipe),
-                               phasey_step[1]);
+                               phasey_step[COMP_1_2]);
                mdp5_write(mdp5_kms, REG_MDP5_PIPE_DECIMATION(pipe),
                                MDP5_PIPE_DECIMATION_VERT(vdecm) |
                                MDP5_PIPE_DECIMATION_HORZ(hdecm));
@@ -738,7 +838,8 @@ void mdp5_plane_complete_flip(struct drm_plane *plane)
 
        DBG("%s: complete flip", mdp5_plane->name);
 
-       mdp5_smp_commit(mdp5_kms->smp, pipe);
+       if (mdp5_kms->smp)
+               mdp5_smp_commit(mdp5_kms->smp, pipe);
 
        to_mdp5_plane_state(plane->state)->pending = false;
 }
@@ -764,7 +865,7 @@ void mdp5_plane_complete_commit(struct drm_plane *plane,
        struct mdp5_plane *mdp5_plane = to_mdp5_plane(plane);
        enum mdp5_pipe pipe = mdp5_plane->pipe;
 
-       if (!plane_enabled(plane->state)) {
+       if (!plane_enabled(plane->state) && mdp5_kms->smp) {
                DBG("%s: free SMP", mdp5_plane->name);
                mdp5_smp_release(mdp5_kms->smp, pipe);
        }
index 563cca972dcb92fad64dd22fdb78d301e9236b4b..6f425c25d9fe4f18407edc6480b328fa779f439c 100644 (file)
@@ -90,7 +90,7 @@
 struct mdp5_smp {
        struct drm_device *dev;
 
-       const struct mdp5_smp_block *cfg;
+       uint8_t reserved[MAX_CLIENTS]; /* fixed MMBs allocation per client */
 
        int blk_cnt;
        int blk_size;
@@ -141,10 +141,10 @@ static int smp_request_block(struct mdp5_smp *smp,
        struct mdp5_kms *mdp5_kms = get_kms(smp);
        struct mdp5_client_smp_state *ps = &smp->client_state[cid];
        int i, ret, avail, cur_nblks, cnt = smp->blk_cnt;
-       int reserved;
+       uint8_t reserved;
        unsigned long flags;
 
-       reserved = smp->cfg->reserved[cid];
+       reserved = smp->reserved[cid];
 
        spin_lock_irqsave(&smp->state_lock, flags);
 
@@ -405,12 +405,12 @@ struct mdp5_smp *mdp5_smp_init(struct drm_device *dev, const struct mdp5_smp_blo
        }
 
        smp->dev = dev;
-       smp->cfg = cfg;
        smp->blk_cnt = cfg->mmb_count;
        smp->blk_size = cfg->mmb_size;
 
        /* statically tied MMBs cannot be re-allocated: */
        bitmap_copy(smp->state, cfg->reserved_state, smp->blk_cnt);
+       memcpy(smp->reserved, cfg->reserved, sizeof(smp->reserved));
        spin_lock_init(&smp->state_lock);
 
        return smp;
index 4f792c4e40f426e09d4f02aeb22e8f938ef858b8..0aec1ac1f6d049cba67c022070197351ef11aa4c 100644 (file)
@@ -11,10 +11,10 @@ The rules-ng-ng source files this header was generated from are:
 - /home/robclark/src/freedreno/envytools/rnndb/msm.xml                 (    676 bytes, from 2015-05-20 20:03:14)
 - /home/robclark/src/freedreno/envytools/rnndb/freedreno_copyright.xml (   1453 bytes, from 2015-05-20 20:03:07)
 - /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp4.xml            (  20915 bytes, from 2015-05-20 20:03:14)
-- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml      (   2576 bytes, from 2015-07-09 22:10:24)
-- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml            (  36021 bytes, from 2015-07-09 22:10:24)
-- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml             (  26057 bytes, from 2015-08-14 21:47:57)
-- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml            (    344 bytes, from 2015-05-20 20:03:07)
+- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp_common.xml      (   2849 bytes, from 2015-09-18 12:07:28)
+- /home/robclark/src/freedreno/envytools/rnndb/mdp/mdp5.xml            (  37194 bytes, from 2015-09-18 12:07:28)
+- /home/robclark/src/freedreno/envytools/rnndb/dsi/dsi.xml             (  27887 bytes, from 2015-10-22 16:34:52)
+- /home/robclark/src/freedreno/envytools/rnndb/dsi/sfpb.xml            (    602 bytes, from 2015-10-22 16:35:02)
 - /home/robclark/src/freedreno/envytools/rnndb/dsi/mmss_cc.xml         (   1686 bytes, from 2015-05-20 20:03:14)
 - /home/robclark/src/freedreno/envytools/rnndb/hdmi/qfprom.xml         (    600 bytes, from 2015-05-20 20:03:07)
 - /home/robclark/src/freedreno/envytools/rnndb/hdmi/hdmi.xml           (  29154 bytes, from 2015-08-10 21:25:43)
@@ -78,6 +78,13 @@ enum mdp_alpha_type {
        BG_PIXEL = 3,
 };
 
+enum mdp_component_type {
+       COMP_0 = 0,
+       COMP_1_2 = 1,
+       COMP_3 = 2,
+       COMP_MAX = 3,
+};
+
 enum mdp_bpc {
        BPC1 = 0,
        BPC5 = 1,
index 46a94e7d50e21cad875d08edfdf46593c6b5707a..30313032074845c4602a9feae9c8a3d5f76c2b07 100644 (file)
@@ -100,12 +100,18 @@ struct mdp_format {
 uint32_t mdp_get_formats(uint32_t *formats, uint32_t max_formats, bool rgb_only);
 const struct msm_format *mdp_get_format(struct msm_kms *kms, uint32_t format);
 
+/* MDP capabilities */
+#define MDP_CAP_SMP            BIT(0)  /* Shared Memory Pool                 */
+#define MDP_CAP_DSC            BIT(1)  /* VESA Display Stream Compression    */
+#define MDP_CAP_CDM            BIT(2)  /* Chroma Down Module (HDMI 2.0 YUV)  */
+
 /* MDP pipe capabilities */
 #define MDP_PIPE_CAP_HFLIP                     BIT(0)
 #define MDP_PIPE_CAP_VFLIP                     BIT(1)
 #define MDP_PIPE_CAP_SCALE                     BIT(2)
 #define MDP_PIPE_CAP_CSC                       BIT(3)
 #define MDP_PIPE_CAP_DECIMATION                        BIT(4)
+#define MDP_PIPE_CAP_SW_PIX_EXT                        BIT(5)
 
 static inline bool pipe_supports_yuv(uint32_t pipe_caps)
 {
index d170131b097889fb5f1e9845172d235c7ed32eb3..b88ce514eb8e75d58bf069a52ac1f704605ce0d5 100644 (file)
 
 static void msm_fb_output_poll_changed(struct drm_device *dev)
 {
-#ifdef CONFIG_DRM_MSM_FBDEV
        struct msm_drm_private *priv = dev->dev_private;
        if (priv->fbdev)
                drm_fb_helper_hotplug_event(priv->fbdev);
-#endif
 }
 
 static const struct drm_mode_config_funcs mode_config_funcs = {
@@ -56,7 +54,7 @@ module_param(reglog, bool, 0600);
 #define reglog 0
 #endif
 
-#ifdef CONFIG_DRM_MSM_FBDEV
+#ifdef CONFIG_DRM_FBDEV_EMULATION
 static bool fbdev = true;
 MODULE_PARM_DESC(fbdev, "Enable fbdev compat layer");
 module_param(fbdev, bool, 0600);
@@ -423,7 +421,7 @@ static int msm_load(struct drm_device *dev, unsigned long flags)
 
        drm_mode_config_reset(dev);
 
-#ifdef CONFIG_DRM_MSM_FBDEV
+#ifdef CONFIG_DRM_FBDEV_EMULATION
        if (fbdev)
                priv->fbdev = msm_fbdev_init(dev);
 #endif
@@ -491,11 +489,9 @@ static void msm_preclose(struct drm_device *dev, struct drm_file *file)
 
 static void msm_lastclose(struct drm_device *dev)
 {
-#ifdef CONFIG_DRM_MSM_FBDEV
        struct msm_drm_private *priv = dev->dev_private;
        if (priv->fbdev)
                drm_fb_helper_restore_fbdev_mode_unlocked(priv->fbdev);
-#endif
 }
 
 static irqreturn_t msm_irq(int irq, void *arg)
index 8f70d9248ac55f7921acdaaea221577434bb3029..6b02ada6579a737d36f6ad7403ad53519ee7e0f7 100644 (file)
@@ -651,6 +651,14 @@ int msm_gpu_init(struct drm_device *drm, struct platform_device *pdev,
        if (iommu) {
                dev_info(drm->dev, "%s: using IOMMU\n", name);
                gpu->mmu = msm_iommu_new(&pdev->dev, iommu);
+               if (IS_ERR(gpu->mmu)) {
+                       ret = PTR_ERR(gpu->mmu);
+                       dev_err(drm->dev, "failed to init iommu: %d\n", ret);
+                       gpu->mmu = NULL;
+                       iommu_domain_free(iommu);
+                       goto fail;
+               }
+
        } else {
                dev_info(drm->dev, "%s: no IOMMU, fallback to VRAM carveout!\n", name);
        }