aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2430-drm-amd-display-add-AUX-and-I2C-for-DCN2.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2430-drm-amd-display-add-AUX-and-I2C-for-DCN2.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2430-drm-amd-display-add-AUX-and-I2C-for-DCN2.patch143
1 files changed, 143 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2430-drm-amd-display-add-AUX-and-I2C-for-DCN2.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2430-drm-amd-display-add-AUX-and-I2C-for-DCN2.patch
new file mode 100644
index 00000000..434e1fea
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/2430-drm-amd-display-add-AUX-and-I2C-for-DCN2.patch
@@ -0,0 +1,143 @@
+From ad13f69256727e751977dc09d89cfb0fee17e1ed Mon Sep 17 00:00:00 2001
+From: Harry Wentland <harry.wentland@amd.com>
+Date: Tue, 7 May 2019 14:47:35 -0500
+Subject: [PATCH 2430/2940] drm/amd/display: add AUX and I2C for DCN2
+
+Adding support to program DCN2 AUX and I2C HW.
+
+Signed-off-by: Harry Wentland <harry.wentland@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/display/dc/dce/dce_aux.h | 10 ++++++
+ .../gpu/drm/amd/display/dc/dce/dce_i2c_hw.c | 32 +++++++++++++++++++
+ .../gpu/drm/amd/display/dc/dce/dce_i2c_hw.h | 22 +++++++++++++
+ 3 files changed, 64 insertions(+)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_aux.h b/drivers/gpu/drm/amd/display/dc/dce/dce_aux.h
+index ce6a26d189b0..ed7fec8fe253 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce/dce_aux.h
++++ b/drivers/gpu/drm/amd/display/dc/dce/dce_aux.h
+@@ -29,6 +29,16 @@
+ #include "i2caux_interface.h"
+ #include "inc/hw/aux_engine.h"
+
++#ifdef CONFIG_DRM_AMD_DC_DCN2_0
++#define AUX_COMMON_REG_LIST0(id)\
++ SRI(AUX_CONTROL, DP_AUX, id), \
++ SRI(AUX_ARB_CONTROL, DP_AUX, id), \
++ SRI(AUX_SW_DATA, DP_AUX, id), \
++ SRI(AUX_SW_CONTROL, DP_AUX, id), \
++ SRI(AUX_INTERRUPT_CONTROL, DP_AUX, id), \
++ SRI(AUX_SW_STATUS, DP_AUX, id)
++#endif
++
+ #define AUX_COMMON_REG_LIST(id)\
+ SRI(AUX_CONTROL, DP_AUX, id), \
+ SRI(AUX_ARB_CONTROL, DP_AUX, id), \
+diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_i2c_hw.c b/drivers/gpu/drm/amd/display/dc/dce/dce_i2c_hw.c
+index 7f2460caa2a6..d658b862430a 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce/dce_i2c_hw.c
++++ b/drivers/gpu/drm/amd/display/dc/dce/dce_i2c_hw.c
+@@ -303,6 +303,10 @@ static bool setup_engine(
+ struct dce_i2c_hw *dce_i2c_hw)
+ {
+ uint32_t i2c_setup_limit = I2C_SETUP_TIME_LIMIT_DCE;
++#if defined(CONFIG_DRM_AMD_DC_DCN2_0)
++ uint32_t reset_length = 0;
++#endif
++
+ /* we have checked I2c not used by DMCU, set SW use I2C REQ to 1 to indicate SW using it*/
+ REG_UPDATE(DC_I2C_ARBITRATION, DC_I2C_SW_USE_I2C_REG_REQ, 1);
+
+@@ -323,6 +327,14 @@ static bool setup_engine(
+ REG_UPDATE_N(SETUP, 2,
+ FN(DC_I2C_DDC1_SETUP, DC_I2C_DDC1_TIME_LIMIT), i2c_setup_limit,
+ FN(DC_I2C_DDC1_SETUP, DC_I2C_DDC1_ENABLE), 1);
++#if defined(CONFIG_DRM_AMD_DC_DCN2_0)
++ } else {
++ reset_length = dce_i2c_hw->send_reset_length;
++ REG_UPDATE_N(SETUP, 3,
++ FN(DC_I2C_DDC1_SETUP, DC_I2C_DDC1_TIME_LIMIT), i2c_setup_limit,
++ FN(DC_I2C_DDC1_SETUP, DC_I2C_DDC1_SEND_RESET_LENGTH), reset_length,
++ FN(DC_I2C_DDC1_SETUP, DC_I2C_DDC1_ENABLE), 1);
++#endif
+ }
+ /* Program HW priority
+ * set to High - interrupt software I2C at any time
+@@ -698,3 +710,23 @@ void dcn1_i2c_hw_construct(
+ dce_i2c_hw->setup_limit = I2C_SETUP_TIME_LIMIT_DCN;
+ }
+
++#if defined(CONFIG_DRM_AMD_DC_DCN2_0)
++void dcn2_i2c_hw_construct(
++ struct dce_i2c_hw *dce_i2c_hw,
++ struct dc_context *ctx,
++ uint32_t engine_id,
++ const struct dce_i2c_registers *regs,
++ const struct dce_i2c_shift *shifts,
++ const struct dce_i2c_mask *masks)
++{
++ dcn1_i2c_hw_construct(dce_i2c_hw,
++ ctx,
++ engine_id,
++ regs,
++ shifts,
++ masks);
++ dce_i2c_hw->send_reset_length = I2C_SEND_RESET_LENGTH_9;
++ if (ctx->dc->debug.scl_reset_length10)
++ dce_i2c_hw->send_reset_length = I2C_SEND_RESET_LENGTH_10;
++}
++#endif
+diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_i2c_hw.h b/drivers/gpu/drm/amd/display/dc/dce/dce_i2c_hw.h
+index a633632f625b..cb0234e5d597 100644
+--- a/drivers/gpu/drm/amd/display/dc/dce/dce_i2c_hw.h
++++ b/drivers/gpu/drm/amd/display/dc/dce/dce_i2c_hw.h
+@@ -177,6 +177,9 @@ struct dce_i2c_shift {
+ uint8_t DC_I2C_INDEX;
+ uint8_t DC_I2C_INDEX_WRITE;
+ uint8_t XTAL_REF_DIV;
++#if defined(CONFIG_DRM_AMD_DC_DCN2_0)
++ uint8_t DC_I2C_DDC1_SEND_RESET_LENGTH;
++#endif
+ uint8_t DC_I2C_REG_RW_CNTL_STATUS;
+ };
+
+@@ -217,9 +220,18 @@ struct dce_i2c_mask {
+ uint32_t DC_I2C_INDEX;
+ uint32_t DC_I2C_INDEX_WRITE;
+ uint32_t XTAL_REF_DIV;
++#if defined(CONFIG_DRM_AMD_DC_DCN2_0)
++ uint32_t DC_I2C_DDC1_SEND_RESET_LENGTH;
++#endif
+ uint32_t DC_I2C_REG_RW_CNTL_STATUS;
+ };
+
++#if defined(CONFIG_DRM_AMD_DC_DCN2_0)
++#define I2C_COMMON_MASK_SH_LIST_DCN2(mask_sh)\
++ I2C_COMMON_MASK_SH_LIST_DCE110(mask_sh),\
++ I2C_SF(DC_I2C_DDC1_SETUP, DC_I2C_DDC1_SEND_RESET_LENGTH, mask_sh)
++#endif
++
+ struct dce_i2c_registers {
+ uint32_t SETUP;
+ uint32_t SPEED;
+@@ -300,6 +312,16 @@ void dcn1_i2c_hw_construct(
+ const struct dce_i2c_shift *shifts,
+ const struct dce_i2c_mask *masks);
+
++#if defined(CONFIG_DRM_AMD_DC_DCN2_0)
++void dcn2_i2c_hw_construct(
++ struct dce_i2c_hw *dce_i2c_hw,
++ struct dc_context *ctx,
++ uint32_t engine_id,
++ const struct dce_i2c_registers *regs,
++ const struct dce_i2c_shift *shifts,
++ const struct dce_i2c_mask *masks);
++#endif
++
+ bool dce_i2c_submit_command_hw(
+ struct resource_pool *pool,
+ struct ddc *ddc,
+--
+2.17.1
+