CC: [email protected] CC: [email protected] CC: [email protected] TO: Dmitry Baryshkov <[email protected]> CC: Rob Clark <[email protected]> CC: Abhinav Kumar <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: 4634129ad9fdc89d10b597fc6f8f4336fb61e105 commit: d6d1439ec43808447d25ea5c17012ca713ef7c4e drm/msm/dsi: fuse dsi_pll_* code into dsi_phy_* code date: 9 months ago :::::: branch date: 8 hours ago :::::: commit date: 9 months ago config: arm-randconfig-c002-20220106 (https://download.01.org/0day-ci/archive/20220109/[email protected]/config) compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project ca7ffe09dc6e525109e3cd570cc5182ce568be13) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install arm cross compiling tool for clang build # apt-get install binutils-arm-linux-gnueabi # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d6d1439ec43808447d25ea5c17012ca713ef7c4e git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git git fetch --no-tags linus master git checkout d6d1439ec43808447d25ea5c17012ca713ef7c4e # save the config file to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm clang-analyzer If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> clang-analyzer warnings: (new ones prefixed by >>) 1 warning generated. Suppressed 1 warnings (1 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 1 warning generated. Suppressed 1 warnings (1 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 12 warnings generated. kernel/trace/trace.c:352:2: warning: Access to field 'next' results in a dereference of a null pointer [clang-analyzer-core.NullDereference] rcu_assign_pointer(*p, (*p)->next); ^ include/linux/rcupdate.h:431:35: note: expanded from macro 'rcu_assign_pointer' uintptr_t _r_a_p__v = (uintptr_t)(v); \ ^ kernel/trace/trace.c:395:2: note: Value assigned to 'ftrace_exports_list' mutex_lock(&ftrace_export_lock); ^ include/linux/mutex.h:167:26: note: expanded from macro 'mutex_lock' #define mutex_lock(lock) mutex_lock_nested(lock, 0) ^~~~~~~~~~~~~~~~~~~~~~~~~~ kernel/trace/trace.c:397:8: note: Calling 'rm_ftrace_export' ret = rm_ftrace_export(&ftrace_exports_list, export); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kernel/trace/trace.c:370:8: note: Calling 'rm_trace_export' ret = rm_trace_export(list, export); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ kernel/trace/trace.c:345:17: note: Assuming the condition is false for (p = list; *p != NULL; p = &(*p)->next) ^~~~~~~~~~ kernel/trace/trace.c:345:17: note: Assuming pointer value is null for (p = list; *p != NULL; p = &(*p)->next) ^~~~~~~~~~ kernel/trace/trace.c:345:2: note: Loop condition is false. Execution continues on line 349 for (p = list; *p != NULL; p = &(*p)->next) ^ kernel/trace/trace.c:349:6: note: Assuming the condition is false if (*p != export) ^~~~~~~~~~~~ kernel/trace/trace.c:349:2: note: Taking false branch if (*p != export) ^ kernel/trace/trace.c:352:2: note: Access to field 'next' results in a dereference of a null pointer rcu_assign_pointer(*p, (*p)->next); ^ include/linux/rcupdate.h:431:35: note: expanded from macro 'rcu_assign_pointer' uintptr_t _r_a_p__v = (uintptr_t)(v); \ ^~~ kernel/trace/trace.c:2443:3: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy] strcpy(comm, "<idle>"); ^~~~~~ kernel/trace/trace.c:2443:3: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 strcpy(comm, "<idle>"); ^~~~~~ kernel/trace/trace.c:2448:3: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy] strcpy(comm, "<XXX>"); ^~~~~~ kernel/trace/trace.c:2448:3: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 strcpy(comm, "<XXX>"); ^~~~~~ kernel/trace/trace.c:2453:3: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy] strcpy(comm, "<...>"); ^~~~~~ kernel/trace/trace.c:2453:3: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 strcpy(comm, "<...>"); ^~~~~~ kernel/trace/trace.c:2461:3: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy] strcpy(comm, "<...>"); ^~~~~~ kernel/trace/trace.c:2461:3: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 strcpy(comm, "<...>"); ^~~~~~ Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 8 warnings generated. drivers/gpu/drm/msm/dsi/dsi_host.c:870:3: warning: Value stored to 'data' is never read [clang-analyzer-deadcode.DeadStores] data = DSI_VID_CFG1_RGB_SWAP(SWAP_RGB); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/msm/dsi/dsi_host.c:870:3: note: Value stored to 'data' is never read data = DSI_VID_CFG1_RGB_SWAP(SWAP_RGB); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 8 warnings generated. drivers/gpu/drm/msm/dsi/phy/dsi_phy.c:36:3: warning: Value stored to 'tmax' is never read [clang-analyzer-deadcode.DeadStores] tmax = 511; ^ ~~~ drivers/gpu/drm/msm/dsi/phy/dsi_phy.c:36:3: note: Value stored to 'tmax' is never read tmax = 511; ^ ~~~ Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 8 warnings generated. >> drivers/gpu/drm/msm/dsi/phy/dsi_phy_28nm.c:184:2: warning: Value stored to >> 'rem' is never read [clang-analyzer-deadcode.DeadStores] rem = 0; ^ ~ drivers/gpu/drm/msm/dsi/phy/dsi_phy_28nm.c:184:2: note: Value stored to 'rem' is never read rem = 0; ^ ~ Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 1 warning generated. Suppressed 1 warnings (1 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 1 warning generated. Suppressed 1 warnings (1 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. Suppressed 7 warnings (7 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 1 warning generated. Suppressed 1 warnings (1 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 2 warnings generated. Suppressed 2 warnings (1 in non-user code, 1 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 1 warning generated. Suppressed 1 warnings (1 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 8 warnings generated. drivers/gpu/drm/msm/msm_gem.c:1274:2: warning: 1st function call argument is an uninitialized value [clang-analyzer-core.CallAndMessage] drm_gem_object_put(obj); ^ ~~~ drivers/gpu/drm/msm/msm_gem.c:1225:2: note: 'obj' declared without an initial value struct drm_gem_object *obj; ^~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/msm/msm_gem.c:1230:6: note: Assuming the condition is false if (!msm_use_mmu(dev)) { ^~~~~~~~~~~~~~~~~ drivers/gpu/drm/msm/msm_gem.c:1230:2: note: Taking false branch if (!msm_use_mmu(dev)) { ^ drivers/gpu/drm/msm/msm_gem.c:1237:8: note: Calling 'msm_gem_new_impl' ret = msm_gem_new_impl(dev, size, MSM_BO_WC, &obj); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/msm/msm_gem.c:1091:2: note: Control jumps to 'case 131072:' at line 1094 switch (flags & MSM_BO_CACHE_MASK) { ^ drivers/gpu/drm/msm/msm_gem.c:1095:3: note: Execution continues on line 1102 break; ^ drivers/gpu/drm/msm/msm_gem.c:1102:12: note: Calling 'kzalloc' msm_obj = kzalloc(sizeof(*msm_obj), GFP_KERNEL); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/slab.h:684:9: note: Calling 'kmalloc' return kmalloc(size, flags | __GFP_ZERO); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/slab.h:542:2: note: Taking false branch if (__builtin_constant_p(size)) { ^ include/linux/slab.h:559:2: note: Returning pointer, which participates in a condition later return __kmalloc(size, flags); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/slab.h:684:9: note: Returning from 'kmalloc' return kmalloc(size, flags | __GFP_ZERO); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/slab.h:684:2: note: Returning pointer, which participates in a condition later return kmalloc(size, flags | __GFP_ZERO); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/msm/msm_gem.c:1102:12: note: Returning from 'kzalloc' msm_obj = kzalloc(sizeof(*msm_obj), GFP_KERNEL); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/msm/msm_gem.c:1103:6: note: Assuming 'msm_obj' is null, which participates in a condition later if (!msm_obj) ^~~~~~~~ drivers/gpu/drm/msm/msm_gem.c:1103:2: note: Taking true branch if (!msm_obj) ^ drivers/gpu/drm/msm/msm_gem.c:1104:3: note: Returning without writing to '*obj' return -ENOMEM; ^ drivers/gpu/drm/msm/msm_gem.c:1104:3: note: Returning the value -12, which participates in a condition later return -ENOMEM; ^~~~~~~~~~~~~~ drivers/gpu/drm/msm/msm_gem.c:1237:8: note: Returning from 'msm_gem_new_impl' ret = msm_gem_new_impl(dev, size, MSM_BO_WC, &obj); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/msm/msm_gem.c:1238:6: note: 'ret' is -12 if (ret) ^~~ drivers/gpu/drm/msm/msm_gem.c:1238:2: note: Taking true branch if (ret) ^ drivers/gpu/drm/msm/msm_gem.c:1239:3: note: Control jumps to line 1274 goto fail; vim +/rem +184 drivers/gpu/drm/msm/dsi/phy/dsi_phy_28nm.c d6d1439ec43808 Dmitry Baryshkov 2021-03-31 124 d6d1439ec43808 Dmitry Baryshkov 2021-03-31 125 /* d6d1439ec43808 Dmitry Baryshkov 2021-03-31 126 * Clock Callbacks d6d1439ec43808 Dmitry Baryshkov 2021-03-31 127 */ d6d1439ec43808 Dmitry Baryshkov 2021-03-31 128 static int dsi_pll_28nm_clk_set_rate(struct clk_hw *hw, unsigned long rate, d6d1439ec43808 Dmitry Baryshkov 2021-03-31 129 unsigned long parent_rate) d6d1439ec43808 Dmitry Baryshkov 2021-03-31 130 { d6d1439ec43808 Dmitry Baryshkov 2021-03-31 131 struct msm_dsi_pll *pll = hw_clk_to_pll(hw); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 132 struct dsi_pll_28nm *pll_28nm = to_pll_28nm(pll); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 133 struct device *dev = &pll_28nm->pdev->dev; d6d1439ec43808 Dmitry Baryshkov 2021-03-31 134 void __iomem *base = pll_28nm->mmio; d6d1439ec43808 Dmitry Baryshkov 2021-03-31 135 unsigned long div_fbx1000, gen_vco_clk; d6d1439ec43808 Dmitry Baryshkov 2021-03-31 136 u32 refclk_cfg, frac_n_mode, frac_n_value; d6d1439ec43808 Dmitry Baryshkov 2021-03-31 137 u32 sdm_cfg0, sdm_cfg1, sdm_cfg2, sdm_cfg3; d6d1439ec43808 Dmitry Baryshkov 2021-03-31 138 u32 cal_cfg10, cal_cfg11; d6d1439ec43808 Dmitry Baryshkov 2021-03-31 139 u32 rem; d6d1439ec43808 Dmitry Baryshkov 2021-03-31 140 int i; d6d1439ec43808 Dmitry Baryshkov 2021-03-31 141 d6d1439ec43808 Dmitry Baryshkov 2021-03-31 142 VERB("rate=%lu, parent's=%lu", rate, parent_rate); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 143 d6d1439ec43808 Dmitry Baryshkov 2021-03-31 144 /* Force postdiv2 to be div-4 */ d6d1439ec43808 Dmitry Baryshkov 2021-03-31 145 pll_write(base + REG_DSI_28nm_PHY_PLL_POSTDIV2_CFG, 3); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 146 d6d1439ec43808 Dmitry Baryshkov 2021-03-31 147 /* Configure the Loop filter resistance */ d6d1439ec43808 Dmitry Baryshkov 2021-03-31 148 for (i = 0; i < LPFR_LUT_SIZE; i++) d6d1439ec43808 Dmitry Baryshkov 2021-03-31 149 if (rate <= lpfr_lut[i].vco_rate) d6d1439ec43808 Dmitry Baryshkov 2021-03-31 150 break; d6d1439ec43808 Dmitry Baryshkov 2021-03-31 151 if (i == LPFR_LUT_SIZE) { d6d1439ec43808 Dmitry Baryshkov 2021-03-31 152 DRM_DEV_ERROR(dev, "unable to get loop filter resistance. vco=%lu\n", d6d1439ec43808 Dmitry Baryshkov 2021-03-31 153 rate); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 154 return -EINVAL; d6d1439ec43808 Dmitry Baryshkov 2021-03-31 155 } d6d1439ec43808 Dmitry Baryshkov 2021-03-31 156 pll_write(base + REG_DSI_28nm_PHY_PLL_LPFR_CFG, lpfr_lut[i].resistance); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 157 d6d1439ec43808 Dmitry Baryshkov 2021-03-31 158 /* Loop filter capacitance values : c1 and c2 */ d6d1439ec43808 Dmitry Baryshkov 2021-03-31 159 pll_write(base + REG_DSI_28nm_PHY_PLL_LPFC1_CFG, 0x70); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 160 pll_write(base + REG_DSI_28nm_PHY_PLL_LPFC2_CFG, 0x15); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 161 d6d1439ec43808 Dmitry Baryshkov 2021-03-31 162 rem = rate % VCO_REF_CLK_RATE; d6d1439ec43808 Dmitry Baryshkov 2021-03-31 163 if (rem) { d6d1439ec43808 Dmitry Baryshkov 2021-03-31 164 refclk_cfg = DSI_28nm_PHY_PLL_REFCLK_CFG_DBLR; d6d1439ec43808 Dmitry Baryshkov 2021-03-31 165 frac_n_mode = 1; d6d1439ec43808 Dmitry Baryshkov 2021-03-31 166 div_fbx1000 = rate / (VCO_REF_CLK_RATE / 500); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 167 gen_vco_clk = div_fbx1000 * (VCO_REF_CLK_RATE / 500); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 168 } else { d6d1439ec43808 Dmitry Baryshkov 2021-03-31 169 refclk_cfg = 0x0; d6d1439ec43808 Dmitry Baryshkov 2021-03-31 170 frac_n_mode = 0; d6d1439ec43808 Dmitry Baryshkov 2021-03-31 171 div_fbx1000 = rate / (VCO_REF_CLK_RATE / 1000); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 172 gen_vco_clk = div_fbx1000 * (VCO_REF_CLK_RATE / 1000); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 173 } d6d1439ec43808 Dmitry Baryshkov 2021-03-31 174 d6d1439ec43808 Dmitry Baryshkov 2021-03-31 175 DBG("refclk_cfg = %d", refclk_cfg); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 176 d6d1439ec43808 Dmitry Baryshkov 2021-03-31 177 rem = div_fbx1000 % 1000; d6d1439ec43808 Dmitry Baryshkov 2021-03-31 178 frac_n_value = (rem << 16) / 1000; d6d1439ec43808 Dmitry Baryshkov 2021-03-31 179 d6d1439ec43808 Dmitry Baryshkov 2021-03-31 180 DBG("div_fb = %lu", div_fbx1000); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 181 DBG("frac_n_value = %d", frac_n_value); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 182 d6d1439ec43808 Dmitry Baryshkov 2021-03-31 183 DBG("Generated VCO Clock: %lu", gen_vco_clk); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 @184 rem = 0; d6d1439ec43808 Dmitry Baryshkov 2021-03-31 185 sdm_cfg1 = pll_read(base + REG_DSI_28nm_PHY_PLL_SDM_CFG1); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 186 sdm_cfg1 &= ~DSI_28nm_PHY_PLL_SDM_CFG1_DC_OFFSET__MASK; d6d1439ec43808 Dmitry Baryshkov 2021-03-31 187 if (frac_n_mode) { d6d1439ec43808 Dmitry Baryshkov 2021-03-31 188 sdm_cfg0 = 0x0; d6d1439ec43808 Dmitry Baryshkov 2021-03-31 189 sdm_cfg0 |= DSI_28nm_PHY_PLL_SDM_CFG0_BYP_DIV(0); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 190 sdm_cfg1 |= DSI_28nm_PHY_PLL_SDM_CFG1_DC_OFFSET( d6d1439ec43808 Dmitry Baryshkov 2021-03-31 191 (u32)(((div_fbx1000 / 1000) & 0x3f) - 1)); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 192 sdm_cfg3 = frac_n_value >> 8; d6d1439ec43808 Dmitry Baryshkov 2021-03-31 193 sdm_cfg2 = frac_n_value & 0xff; d6d1439ec43808 Dmitry Baryshkov 2021-03-31 194 } else { d6d1439ec43808 Dmitry Baryshkov 2021-03-31 195 sdm_cfg0 = DSI_28nm_PHY_PLL_SDM_CFG0_BYP; d6d1439ec43808 Dmitry Baryshkov 2021-03-31 196 sdm_cfg0 |= DSI_28nm_PHY_PLL_SDM_CFG0_BYP_DIV( d6d1439ec43808 Dmitry Baryshkov 2021-03-31 197 (u32)(((div_fbx1000 / 1000) & 0x3f) - 1)); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 198 sdm_cfg1 |= DSI_28nm_PHY_PLL_SDM_CFG1_DC_OFFSET(0); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 199 sdm_cfg2 = 0; d6d1439ec43808 Dmitry Baryshkov 2021-03-31 200 sdm_cfg3 = 0; d6d1439ec43808 Dmitry Baryshkov 2021-03-31 201 } d6d1439ec43808 Dmitry Baryshkov 2021-03-31 202 d6d1439ec43808 Dmitry Baryshkov 2021-03-31 203 DBG("sdm_cfg0=%d", sdm_cfg0); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 204 DBG("sdm_cfg1=%d", sdm_cfg1); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 205 DBG("sdm_cfg2=%d", sdm_cfg2); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 206 DBG("sdm_cfg3=%d", sdm_cfg3); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 207 d6d1439ec43808 Dmitry Baryshkov 2021-03-31 208 cal_cfg11 = (u32)(gen_vco_clk / (256 * 1000000)); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 209 cal_cfg10 = (u32)((gen_vco_clk % (256 * 1000000)) / 1000000); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 210 DBG("cal_cfg10=%d, cal_cfg11=%d", cal_cfg10, cal_cfg11); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 211 d6d1439ec43808 Dmitry Baryshkov 2021-03-31 212 pll_write(base + REG_DSI_28nm_PHY_PLL_CHGPUMP_CFG, 0x02); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 213 pll_write(base + REG_DSI_28nm_PHY_PLL_CAL_CFG3, 0x2b); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 214 pll_write(base + REG_DSI_28nm_PHY_PLL_CAL_CFG4, 0x06); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 215 pll_write(base + REG_DSI_28nm_PHY_PLL_LKDET_CFG2, 0x0d); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 216 d6d1439ec43808 Dmitry Baryshkov 2021-03-31 217 pll_write(base + REG_DSI_28nm_PHY_PLL_SDM_CFG1, sdm_cfg1); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 218 pll_write(base + REG_DSI_28nm_PHY_PLL_SDM_CFG2, d6d1439ec43808 Dmitry Baryshkov 2021-03-31 219 DSI_28nm_PHY_PLL_SDM_CFG2_FREQ_SEED_7_0(sdm_cfg2)); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 220 pll_write(base + REG_DSI_28nm_PHY_PLL_SDM_CFG3, d6d1439ec43808 Dmitry Baryshkov 2021-03-31 221 DSI_28nm_PHY_PLL_SDM_CFG3_FREQ_SEED_15_8(sdm_cfg3)); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 222 pll_write(base + REG_DSI_28nm_PHY_PLL_SDM_CFG4, 0x00); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 223 d6d1439ec43808 Dmitry Baryshkov 2021-03-31 224 /* Add hardware recommended delay for correct PLL configuration */ d6d1439ec43808 Dmitry Baryshkov 2021-03-31 225 if (pll_28nm->vco_delay) d6d1439ec43808 Dmitry Baryshkov 2021-03-31 226 udelay(pll_28nm->vco_delay); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 227 d6d1439ec43808 Dmitry Baryshkov 2021-03-31 228 pll_write(base + REG_DSI_28nm_PHY_PLL_REFCLK_CFG, refclk_cfg); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 229 pll_write(base + REG_DSI_28nm_PHY_PLL_PWRGEN_CFG, 0x00); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 230 pll_write(base + REG_DSI_28nm_PHY_PLL_VCOLPF_CFG, 0x31); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 231 pll_write(base + REG_DSI_28nm_PHY_PLL_SDM_CFG0, sdm_cfg0); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 232 pll_write(base + REG_DSI_28nm_PHY_PLL_CAL_CFG0, 0x12); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 233 pll_write(base + REG_DSI_28nm_PHY_PLL_CAL_CFG6, 0x30); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 234 pll_write(base + REG_DSI_28nm_PHY_PLL_CAL_CFG7, 0x00); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 235 pll_write(base + REG_DSI_28nm_PHY_PLL_CAL_CFG8, 0x60); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 236 pll_write(base + REG_DSI_28nm_PHY_PLL_CAL_CFG9, 0x00); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 237 pll_write(base + REG_DSI_28nm_PHY_PLL_CAL_CFG10, cal_cfg10 & 0xff); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 238 pll_write(base + REG_DSI_28nm_PHY_PLL_CAL_CFG11, cal_cfg11 & 0xff); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 239 pll_write(base + REG_DSI_28nm_PHY_PLL_EFUSE_CFG, 0x20); d6d1439ec43808 Dmitry Baryshkov 2021-03-31 240 d6d1439ec43808 Dmitry Baryshkov 2021-03-31 241 return 0; d6d1439ec43808 Dmitry Baryshkov 2021-03-31 242 } d6d1439ec43808 Dmitry Baryshkov 2021-03-31 243 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected] _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
