diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4075-drm-amd-display-make-aux-defer-delay-and-aux-sw-star.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4075-drm-amd-display-make-aux-defer-delay-and-aux-sw-star.patch | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4075-drm-amd-display-make-aux-defer-delay-and-aux-sw-star.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4075-drm-amd-display-make-aux-defer-delay-and-aux-sw-star.patch new file mode 100644 index 00000000..de6a616c --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.19.8/4075-drm-amd-display-make-aux-defer-delay-and-aux-sw-star.patch @@ -0,0 +1,55 @@ +From df707b2fb3fdcd2808df16760862d223881fa562 Mon Sep 17 00:00:00 2001 +From: Xiaodong Yan <Xiaodong.Yan@amd.com> +Date: Fri, 30 Aug 2019 17:07:01 +0800 +Subject: [PATCH 4075/4256] drm/amd/display: make aux defer delay and aux sw + start delay seperate + +[why] +1. defer delay and sw start delay has been mixed up, defer delay was +programmed to AUX_SW_CONTROL:AUX_SW_START_DELAY. +2. There's no delay for defer + +[how] +1. Set aux sw start to 0 +2. Add delay for defer scenario + +Signed-off-by: Xiaodong Yan <Xiaodong.Yan@amd.com> +Reviewed-by: Tony Cheng <Tony.Cheng@amd.com> +Acked-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com> +--- + drivers/gpu/drm/amd/display/dc/dce/dce_aux.c | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) + +diff --git a/drivers/gpu/drm/amd/display/dc/dce/dce_aux.c b/drivers/gpu/drm/amd/display/dc/dce/dce_aux.c +index 79a16942ce98..16960ef29132 100644 +--- a/drivers/gpu/drm/amd/display/dc/dce/dce_aux.c ++++ b/drivers/gpu/drm/amd/display/dc/dce/dce_aux.c +@@ -472,7 +472,7 @@ int dce_aux_transfer_raw(struct ddc_service *ddc, + aux_req.action = i2caux_action_from_payload(payload); + + aux_req.address = payload->address; +- aux_req.delay = payload->defer_delay * 10; ++ aux_req.delay = 0; + aux_req.length = payload->length; + aux_req.data = payload->data; + +@@ -541,8 +541,15 @@ bool dce_aux_transfer_with_retries(struct ddc_service *ddc, + case AUX_TRANSACTION_REPLY_AUX_DEFER: + case AUX_TRANSACTION_REPLY_I2C_OVER_AUX_NACK: + case AUX_TRANSACTION_REPLY_I2C_OVER_AUX_DEFER: +- if (++aux_defer_retries >= AUX_MAX_DEFER_RETRIES) ++ if (++aux_defer_retries >= AUX_MAX_DEFER_RETRIES) { + goto fail; ++ } else { ++ if ((*payload->reply == AUX_TRANSACTION_REPLY_AUX_DEFER) || ++ (*payload->reply == AUX_TRANSACTION_REPLY_I2C_OVER_AUX_DEFER)) { ++ if (payload->defer_delay > 0) ++ msleep(payload->defer_delay); ++ } ++ } + break; + + case AUX_TRANSACTION_REPLY_I2C_DEFER: +-- +2.17.1 + |