From 6ec2c7e072769efea82f641f435f9abc0032f464 Mon Sep 17 00:00:00 2001 From: Samantha Tran Date: Mon, 26 Apr 2021 20:11:06 -0700 Subject: [PATCH 1/2] techpack: display: fix div64 error for 32 bit build use div_u64 instead of /, for 64 bit division. Change-Id: I791e027beb6817810d63a6a2d0a1a29f88bdb5d5 Signed-off-by: Venkata Prahlad Valluru Signed-off-by: Samantha Tran --- msm/sde_vdc_helper.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/msm/sde_vdc_helper.c b/msm/sde_vdc_helper.c index 7e7701da8f..7a48e18556 100644 --- a/msm/sde_vdc_helper.c +++ b/msm/sde_vdc_helper.c @@ -550,7 +550,7 @@ static int sde_vdc_populate_core_params(struct msm_display_vdc_info *vdc_info, temp = temp << 16; vdc_info->ramp_bits = temp; - temp = vdc_info->ramp_bits / vdc_info->ramp_blocks; + temp = div_u64(vdc_info->ramp_bits, (vdc_info->ramp_blocks) ? vdc_info->ramp_blocks : 1); vdc_info->rc_fullness_offset_slope = temp; temp = (2 * SSM_MAX_SE_SIZE) - 2; From 2ec94521628283c02af2331736aa834b5bd583d8 Mon Sep 17 00:00:00 2001 From: Venkata Prahlad Valluru Date: Wed, 6 Jan 2021 00:52:36 +0530 Subject: [PATCH 2/2] disp: msm: typecast variables as long long for 64 bit operations Define 64 bit variables as unsigned long long to ensure 8 bytes in 32 bit builds. Change-Id: I723ae0c4ba6a0de07c92d14eeef95bde095c8e3d Signed-off-by: Venkata Prahlad Valluru --- msm/dsi/dsi_pll_5nm.c | 12 ++++++------ msm/sde/sde_hw_color_proc_v4.c | 7 +++---- msm/sde/sde_hw_reg_dma_v1.c | 3 ++- msm/sde/sde_hw_reg_dma_v1_color_proc.c | 7 +++---- msm/sde/sde_hw_util.h | 4 +++- 5 files changed, 17 insertions(+), 16 deletions(-) diff --git a/msm/dsi/dsi_pll_5nm.c b/msm/dsi/dsi_pll_5nm.c index f28c4f39c6..f9fda07c46 100644 --- a/msm/dsi/dsi_pll_5nm.c +++ b/msm/dsi/dsi_pll_5nm.c @@ -270,11 +270,11 @@ static void dsi_pll_calc_dec_frac(struct dsi_pll_5nm *pll, switch (rsc->pll_revision) { case DSI_PLL_5NM: default: - if (pll_freq <= 1000000000) + if (pll_freq <= 1000000000ULL) regs->pll_clock_inverters = 0xA0; - else if (pll_freq <= 2500000000) + else if (pll_freq <= 2500000000ULL) regs->pll_clock_inverters = 0x20; - else if (pll_freq <= 3500000000) + else if (pll_freq <= 3500000000ULL) regs->pll_clock_inverters = 0x00; else regs->pll_clock_inverters = 0x40; @@ -369,16 +369,16 @@ static void dsi_pll_config_hzindep_reg(struct dsi_pll_5nm *pll, switch (rsc->pll_revision) { case DSI_PLL_5NM: default: - if (vco_rate < 3100000000) + if (vco_rate < 3100000000ULL) DSI_PLL_REG_W(pll_base, PLL_ANALOG_CONTROLS_FIVE_1, 0x01); else DSI_PLL_REG_W(pll_base, PLL_ANALOG_CONTROLS_FIVE_1, 0x03); - if (vco_rate < 1520000000) + if (vco_rate < 1520000000ULL) DSI_PLL_REG_W(pll_base, PLL_VCO_CONFIG_1, 0x08); - else if (vco_rate < 2990000000) + else if (vco_rate < 2990000000ULL) DSI_PLL_REG_W(pll_base, PLL_VCO_CONFIG_1, 0x00); else DSI_PLL_REG_W(pll_base, PLL_VCO_CONFIG_1, 0x01); diff --git a/msm/sde/sde_hw_color_proc_v4.c b/msm/sde/sde_hw_color_proc_v4.c index 1ddcd4ed3c..dd6927dea2 100644 --- a/msm/sde/sde_hw_color_proc_v4.c +++ b/msm/sde/sde_hw_color_proc_v4.c @@ -410,10 +410,9 @@ void sde_demura_backlight_cfg(struct sde_hw_dspp *ctx, u64 val) } demura_base = ctx->cap->sblk->demura.base; - backlight = (val & REG_MASK(11)); - backlight |= ((val & REG_MASK_SHIFT(11, 32)) >> 16); - SDE_REG_WRITE(&ctx->hw, ctx->cap->sblk->demura.base + 0x8, - backlight); + backlight = (val & REG_MASK_ULL(11)); + backlight |= ((val & REG_MASK_SHIFT_ULL(11, 32)) >> 16); + SDE_REG_WRITE(&ctx->hw, ctx->cap->sblk->demura.base + 0x8, backlight); } void sde_setup_fp16_cscv1(struct sde_hw_pipe *ctx, diff --git a/msm/sde/sde_hw_reg_dma_v1.c b/msm/sde/sde_hw_reg_dma_v1.c index b7c8fcb4da..25715b7e07 100644 --- a/msm/sde/sde_hw_reg_dma_v1.c +++ b/msm/sde/sde_hw_reg_dma_v1.c @@ -880,7 +880,8 @@ static int check_support_v1(enum sde_reg_dma_features feature, if (!is_supported) return -EINVAL; - if (feature >= REG_DMA_FEATURES_MAX || blk >= BIT(REG_DMA_BLK_MAX)) { + if (feature >= REG_DMA_FEATURES_MAX + || blk >= BIT_ULL(REG_DMA_BLK_MAX)) { *is_supported = false; return ret; } diff --git a/msm/sde/sde_hw_reg_dma_v1_color_proc.c b/msm/sde/sde_hw_reg_dma_v1_color_proc.c index 17048481a4..b525b6f599 100644 --- a/msm/sde/sde_hw_reg_dma_v1_color_proc.c +++ b/msm/sde/sde_hw_reg_dma_v1_color_proc.c @@ -12,6 +12,7 @@ #include "sde_hwio.h" #include "sde_hw_lm.h" #include "sde_dbg.h" +#include "sde_hw_util.h" /* Reserve space of 128 words for LUT dma payload set-up */ #define REG_DMA_HEADERS_BUFFER_SZ (sizeof(u32) * 128) @@ -82,8 +83,6 @@ #define DEMURA_MEM_SIZE ((sizeof(struct drm_msm_dem_cfg)) + \ REG_DMA_HEADERS_BUFFER_SZ) -#define REG_MASK(n) ((BIT(n)) - 1) -#define REG_MASK_SHIFT(n, shift) ((REG_MASK(n)) << (shift)) #define APPLY_MASK_AND_SHIFT(x, n, shift) ((x & (REG_MASK(n))) << (shift)) #define REG_DMA_VIG_GAMUT_OP_MASK 0x300 #define REG_DMA_VIG_IGC_OP_MASK 0x1001F @@ -4919,8 +4918,8 @@ static int __reg_dmav1_setup_demurav1_cfg0_c_params( } for (i = 0; i < len; i++) { - temp[i * 2] = p[i] & REG_MASK(32); - temp[i * 2 + 1] = (p[i] & REG_MASK_SHIFT(10, 32)) >> 32; + temp[i * 2] = p[i] & REG_MASK_ULL(32); + temp[i * 2 + 1] = (p[i] & REG_MASK_SHIFT_ULL(10, 32)) >> 32; DRM_DEBUG_DRIVER("0x6c: index %d value %x\n", i * 2, temp[i * 2]); DRM_DEBUG_DRIVER("0x6c: index %d value %x\n", diff --git a/msm/sde/sde_hw_util.h b/msm/sde/sde_hw_util.h index b260c445b2..7599c25eec 100644 --- a/msm/sde/sde_hw_util.h +++ b/msm/sde/sde_hw_util.h @@ -12,7 +12,9 @@ #include "sde_hw_catalog.h" #define REG_MASK(n) ((BIT(n)) - 1) -#define REG_MASK_SHIFT(n, shift) ((REG_MASK(n)) << (shift)) +#define REG_MASK_SHIFT(n, shift) ((REG_MASK(n)) << (shift)) +#define REG_MASK_ULL(n) ((BIT_ULL(n)) - 1) +#define REG_MASK_SHIFT_ULL(n, shift) ((REG_MASK_ULL(n)) << (shift)) #define LP_DDR4_TYPE 0x7 struct sde_format_extended;