Merge branch 'msm-next' of git://people.freedesktop.org/~robclark/linux into drm-next
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
This commit is contained in:
commit
d7e1bc3f5e
@ -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",
|
||||
|
@ -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:
|
||||
|
||||
|
@ -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
|
||||
|
@ -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 \
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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 {
|
||||
|
@ -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 {
|
||||
|
@ -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)
|
||||
|
@ -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_8960_PHY_TIMING_CTRL_1 0x00000444
|
||||
#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_8960_PHY_TIMING_CTRL_2 0x00000448
|
||||
#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_8960_PHY_TIMING_CTRL_3 0x0000044c
|
||||
#define REG_DSI_28nm_8960_PHY_TIMING_CTRL_3 0x0000014c
|
||||
|
||||
#define REG_DSI_8960_PHY_TIMING_CTRL_4 0x00000450
|
||||
#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_8960_PHY_TIMING_CTRL_5 0x00000454
|
||||
#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_8960_PHY_TIMING_CTRL_6 0x00000458
|
||||
#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_8960_PHY_TIMING_CTRL_7 0x0000045c
|
||||
#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_8960_PHY_TIMING_CTRL_8 0x00000460
|
||||
#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_8960_PHY_TIMING_CTRL_9 0x00000464
|
||||
#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_8960_PHY_TIMING_CTRL_10 0x00000468
|
||||
#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_8960_PHY_TIMING_CTRL_11 0x0000046c
|
||||
#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_8960_PHY_CTRL_0 0x00000470
|
||||
#define REG_DSI_28nm_8960_PHY_CTRL_0 0x00000170
|
||||
|
||||
#define REG_DSI_8960_PHY_CTRL_1 0x00000474
|
||||
#define REG_DSI_28nm_8960_PHY_CTRL_1 0x00000174
|
||||
|
||||
#define REG_DSI_8960_PHY_CTRL_2 0x00000478
|
||||
#define REG_DSI_28nm_8960_PHY_CTRL_2 0x00000178
|
||||
|
||||
#define REG_DSI_8960_PHY_CTRL_3 0x0000047c
|
||||
#define REG_DSI_28nm_8960_PHY_CTRL_3 0x0000017c
|
||||
|
||||
#define REG_DSI_8960_PHY_STRENGTH_0 0x00000480
|
||||
#define REG_DSI_28nm_8960_PHY_STRENGTH_0 0x00000180
|
||||
|
||||
#define REG_DSI_8960_PHY_STRENGTH_1 0x00000484
|
||||
#define REG_DSI_28nm_8960_PHY_STRENGTH_1 0x00000184
|
||||
|
||||
#define REG_DSI_8960_PHY_STRENGTH_2 0x00000488
|
||||
#define REG_DSI_28nm_8960_PHY_STRENGTH_2 0x00000188
|
||||
|
||||
#define REG_DSI_8960_PHY_BIST_CTRL_0 0x0000048c
|
||||
#define REG_DSI_28nm_8960_PHY_BIST_CTRL_0 0x0000018c
|
||||
|
||||
#define REG_DSI_8960_PHY_BIST_CTRL_1 0x00000490
|
||||
#define REG_DSI_28nm_8960_PHY_BIST_CTRL_1 0x00000190
|
||||
|
||||
#define REG_DSI_8960_PHY_BIST_CTRL_2 0x00000494
|
||||
#define REG_DSI_28nm_8960_PHY_BIST_CTRL_2 0x00000194
|
||||
|
||||
#define REG_DSI_8960_PHY_BIST_CTRL_3 0x00000498
|
||||
#define REG_DSI_28nm_8960_PHY_BIST_CTRL_3 0x00000198
|
||||
|
||||
#define REG_DSI_8960_PHY_BIST_CTRL_4 0x0000049c
|
||||
#define REG_DSI_28nm_8960_PHY_BIST_CTRL_4 0x0000019c
|
||||
|
||||
#define REG_DSI_8960_PHY_LDO_CTRL 0x000004b0
|
||||
#define REG_DSI_28nm_8960_PHY_LDO_CTRL 0x000001b0
|
||||
|
||||
#define REG_DSI_8960_PHY_REGULATOR_CTRL_0 0x00000500
|
||||
#define REG_DSI_28nm_8960_PHY_MISC_REGULATOR_CTRL_0 0x00000000
|
||||
|
||||
#define REG_DSI_8960_PHY_REGULATOR_CTRL_1 0x00000504
|
||||
#define REG_DSI_28nm_8960_PHY_MISC_REGULATOR_CTRL_1 0x00000004
|
||||
|
||||
#define REG_DSI_8960_PHY_REGULATOR_CTRL_2 0x00000508
|
||||
#define REG_DSI_28nm_8960_PHY_MISC_REGULATOR_CTRL_2 0x00000008
|
||||
|
||||
#define REG_DSI_8960_PHY_REGULATOR_CTRL_3 0x0000050c
|
||||
#define REG_DSI_28nm_8960_PHY_MISC_REGULATOR_CTRL_3 0x0000000c
|
||||
|
||||
#define REG_DSI_8960_PHY_REGULATOR_CTRL_4 0x00000510
|
||||
#define REG_DSI_28nm_8960_PHY_MISC_REGULATOR_CTRL_4 0x00000010
|
||||
|
||||
#define REG_DSI_8960_PHY_REGULATOR_CAL_PWR_CFG 0x00000518
|
||||
#define REG_DSI_28nm_8960_PHY_MISC_REGULATOR_CTRL_5 0x00000014
|
||||
|
||||
#define REG_DSI_8960_PHY_CAL_HW_TRIGGER 0x00000528
|
||||
#define REG_DSI_28nm_8960_PHY_MISC_REGULATOR_CAL_PWR_CFG 0x00000018
|
||||
|
||||
#define REG_DSI_8960_PHY_CAL_SW_CFG_0 0x0000052c
|
||||
#define REG_DSI_28nm_8960_PHY_MISC_CAL_HW_TRIGGER 0x00000028
|
||||
|
||||
#define REG_DSI_8960_PHY_CAL_SW_CFG_1 0x00000530
|
||||
#define REG_DSI_28nm_8960_PHY_MISC_CAL_SW_CFG_0 0x0000002c
|
||||
|
||||
#define REG_DSI_8960_PHY_CAL_SW_CFG_2 0x00000534
|
||||
#define REG_DSI_28nm_8960_PHY_MISC_CAL_SW_CFG_1 0x00000030
|
||||
|
||||
#define REG_DSI_8960_PHY_CAL_HW_CFG_0 0x00000538
|
||||
#define REG_DSI_28nm_8960_PHY_MISC_CAL_SW_CFG_2 0x00000034
|
||||
|
||||
#define REG_DSI_8960_PHY_CAL_HW_CFG_1 0x0000053c
|
||||
#define REG_DSI_28nm_8960_PHY_MISC_CAL_HW_CFG_0 0x00000038
|
||||
|
||||
#define REG_DSI_8960_PHY_CAL_HW_CFG_2 0x00000540
|
||||
#define REG_DSI_28nm_8960_PHY_MISC_CAL_HW_CFG_1 0x0000003c
|
||||
|
||||
#define REG_DSI_8960_PHY_CAL_HW_CFG_3 0x00000544
|
||||
#define REG_DSI_28nm_8960_PHY_MISC_CAL_HW_CFG_2 0x00000040
|
||||
|
||||
#define REG_DSI_8960_PHY_CAL_HW_CFG_4 0x00000548
|
||||
#define REG_DSI_28nm_8960_PHY_MISC_CAL_HW_CFG_3 0x00000044
|
||||
|
||||
#define REG_DSI_8960_PHY_CAL_STATUS 0x00000550
|
||||
#define DSI_8960_PHY_CAL_STATUS_CAL_BUSY 0x00000010
|
||||
#define REG_DSI_28nm_8960_PHY_MISC_CAL_HW_CFG_4 0x00000048
|
||||
|
||||
#define REG_DSI_28nm_8960_PHY_MISC_CAL_STATUS 0x00000050
|
||||
#define DSI_28nm_8960_PHY_MISC_CAL_STATUS_CAL_BUSY 0x00000010
|
||||
|
||||
#define REG_DSI_28nm_8960_PHY_PLL_CTRL_0 0x00000000
|
||||
#define DSI_28nm_8960_PHY_PLL_CTRL_0_ENABLE 0x00000001
|
||||
|
||||
#define REG_DSI_28nm_8960_PHY_PLL_CTRL_1 0x00000004
|
||||
|
||||
#define REG_DSI_28nm_8960_PHY_PLL_CTRL_2 0x00000008
|
||||
|
||||
#define REG_DSI_28nm_8960_PHY_PLL_CTRL_3 0x0000000c
|
||||
|
||||
#define REG_DSI_28nm_8960_PHY_PLL_CTRL_4 0x00000010
|
||||
|
||||
#define REG_DSI_28nm_8960_PHY_PLL_CTRL_5 0x00000014
|
||||
|
||||
#define REG_DSI_28nm_8960_PHY_PLL_CTRL_6 0x00000018
|
||||
|
||||
#define REG_DSI_28nm_8960_PHY_PLL_CTRL_7 0x0000001c
|
||||
|
||||
#define REG_DSI_28nm_8960_PHY_PLL_CTRL_8 0x00000020
|
||||
|
||||
#define REG_DSI_28nm_8960_PHY_PLL_CTRL_9 0x00000024
|
||||
|
||||
#define REG_DSI_28nm_8960_PHY_PLL_CTRL_10 0x00000028
|
||||
|
||||
#define REG_DSI_28nm_8960_PHY_PLL_CTRL_11 0x0000002c
|
||||
|
||||
#define REG_DSI_28nm_8960_PHY_PLL_CTRL_12 0x00000030
|
||||
|
||||
#define REG_DSI_28nm_8960_PHY_PLL_CTRL_13 0x00000034
|
||||
|
||||
#define REG_DSI_28nm_8960_PHY_PLL_CTRL_14 0x00000038
|
||||
|
||||
#define REG_DSI_28nm_8960_PHY_PLL_CTRL_15 0x0000003c
|
||||
|
||||
#define REG_DSI_28nm_8960_PHY_PLL_CTRL_16 0x00000040
|
||||
|
||||
#define REG_DSI_28nm_8960_PHY_PLL_CTRL_17 0x00000044
|
||||
|
||||
#define REG_DSI_28nm_8960_PHY_PLL_CTRL_18 0x00000048
|
||||
|
||||
#define REG_DSI_28nm_8960_PHY_PLL_CTRL_19 0x0000004c
|
||||
|
||||
#define REG_DSI_28nm_8960_PHY_PLL_CTRL_20 0x00000050
|
||||
|
||||
#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; }
|
||||
|
||||
|
@ -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) {
|
||||
|
@ -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)
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
|
@ -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 */
|
||||
|
@ -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)
|
||||
|
@ -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 },
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
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 (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);
|
||||
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);
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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,
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -21,11 +21,9 @@
|
||||
|
||||
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)
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user