CC: [email protected] CC: [email protected] CC: [email protected] TO: Dmitry Osipenko <[email protected]> CC: Krzysztof Kozlowski <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: c8c109546a19613d323a319d0c921cb1f317e629 commit: 131dd9a436d8f6dbaf3d9597803765d271b2fc19 memory: tegra20-emc: Support matching timings by LPDDR2 configuration date: 4 weeks ago :::::: branch date: 8 hours ago :::::: commit date: 4 weeks ago config: riscv-randconfig-c006-20211114 (attached as .config) compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project c3dddeeafb529e769cde87bd29ef6271ac6bfa5c) 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 riscv cross compiling tool for clang build # apt-get install binutils-riscv64-linux-gnu # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=131dd9a436d8f6dbaf3d9597803765d271b2fc19 git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git git fetch --no-tags linus master git checkout 131dd9a436d8f6dbaf3d9597803765d271b2fc19 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=riscv 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 >>) BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^ drivers/clk/clk-cdce706.c:293:32: note: Taking false branch struct cdce706_hw_data *hwd = to_hw_data(hw); ^ drivers/clk/clk-cdce706.c:65:26: note: expanded from macro 'to_hw_data' #define to_hw_data(phw) (container_of((phw), struct cdce706_hw_data, hw)) ^ include/linux/kernel.h:495:2: note: expanded from macro 'container_of' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^ include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG' #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg) ^ include/linux/compiler_types.h:322:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:310:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:302:3: note: expanded from macro '__compiletime_assert' if (!(condition)) \ ^ drivers/clk/clk-cdce706.c:293:32: note: Loop condition is false. Exiting loop struct cdce706_hw_data *hwd = to_hw_data(hw); ^ drivers/clk/clk-cdce706.c:65:26: note: expanded from macro 'to_hw_data' #define to_hw_data(phw) (container_of((phw), struct cdce706_hw_data, hw)) ^ include/linux/kernel.h:495:2: note: expanded from macro 'container_of' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^ include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG' #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg) ^ include/linux/compiler_types.h:322:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:310:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:300:2: note: expanded from macro '__compiletime_assert' do { \ ^ drivers/clk/clk-cdce706.c:297:2: note: Taking false branch dev_dbg(&hwd->dev_data->client->dev, ^ include/linux/dev_printk.h:162:2: note: expanded from macro 'dev_dbg' if (0) \ ^ drivers/clk/clk-cdce706.c:304:6: note: Assuming 'mul' is not equal to 0 if (!mul) ^~~~ drivers/clk/clk-cdce706.c:304:2: note: Taking false branch if (!mul) ^ drivers/clk/clk-cdce706.c:307:6: note: Assuming the condition is true if (clk_hw_get_flags(hw) & CLK_SET_RATE_PARENT) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/clk/clk-cdce706.c:307:2: note: Taking true branch if (clk_hw_get_flags(hw) & CLK_SET_RATE_PARENT) { ^ drivers/clk/clk-cdce706.c:309:3: note: 'best_div' initialized to 0 unsigned long best_div = 0; ^~~~~~~~~~~~~~~~~~~~~~ drivers/clk/clk-cdce706.c:311:27: note: Assuming 'gp_clk' is null unsigned long gp_rate = gp_clk ? clk_get_rate(gp_clk) : 0; ^~~~~~ drivers/clk/clk-cdce706.c:311:27: note: '?' condition is false drivers/clk/clk-cdce706.c:313:43: note: 'best_diff' is not equal to 0 for (div = CDCE706_PLL_FREQ_MIN / rate; best_diff && ^~~~~~~~~ drivers/clk/clk-cdce706.c:313:43: note: Left side of '&&' is true drivers/clk/clk-cdce706.c:314:8: note: Assuming the condition is false div <= CDCE706_PLL_FREQ_MAX / rate; ++div) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/clk/clk-cdce706.c:313:3: note: Loop condition is false. Execution continues on line 342 for (div = CDCE706_PLL_FREQ_MIN / rate; best_diff && ^ drivers/clk/clk-cdce706.c:342:3: note: The value 0 is assigned to 'div' div = best_div; ^~~~~~~~~~~~~~ drivers/clk/clk-cdce706.c:344:3: note: Taking false branch dev_dbg(&hwd->dev_data->client->dev, ^ include/linux/dev_printk.h:162:2: note: expanded from macro 'dev_dbg' if (0) \ ^ drivers/clk/clk-cdce706.c:351:2: note: Taking false branch dev_dbg(&hwd->dev_data->client->dev, ^ include/linux/dev_printk.h:162:2: note: expanded from macro 'dev_dbg' if (0) \ ^ drivers/clk/clk-cdce706.c:355:22: note: Division by zero return *parent_rate / div; ~~~~~~~~~~~~~^~~~~ Suppressed 3 warnings (3 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. 6 warnings generated. >> drivers/memory/tegra/tegra20-emc.c:645:3: warning: Value stored to >> 'dram_type_str' is never read [clang-analyzer-deadcode.DeadStores] dram_type_str = "INVALID"; ^ ~~~~~~~~~ drivers/memory/tegra/tegra20-emc.c:645:3: note: Value stored to 'dram_type_str' is never read dram_type_str = "INVALID"; ^ ~~~~~~~~~ drivers/memory/tegra/tegra20-emc.c:648:3: warning: Value stored to 'dram_type_str' is never read [clang-analyzer-deadcode.DeadStores] dram_type_str = "DDR1"; ^ ~~~~~~ drivers/memory/tegra/tegra20-emc.c:648:3: note: Value stored to 'dram_type_str' is never read dram_type_str = "DDR1"; ^ ~~~~~~ drivers/memory/tegra/tegra20-emc.c:651:3: warning: Value stored to 'dram_type_str' is never read [clang-analyzer-deadcode.DeadStores] dram_type_str = "LPDDR2"; ^ ~~~~~~~~ drivers/memory/tegra/tegra20-emc.c:651:3: note: Value stored to 'dram_type_str' is never read dram_type_str = "LPDDR2"; ^ ~~~~~~~~ drivers/memory/tegra/tegra20-emc.c:654:3: warning: Value stored to 'dram_type_str' is never read [clang-analyzer-deadcode.DeadStores] dram_type_str = "DDR2"; ^ ~~~~~~ drivers/memory/tegra/tegra20-emc.c:654:3: note: Value stored to 'dram_type_str' is never read dram_type_str = "DDR2"; ^ ~~~~~~ Suppressed 2 warnings (2 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 (2 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 (2 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 (2 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. 13 warnings generated. Suppressed 13 warnings (13 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 (2 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. 5 warnings generated. drivers/hwtracing/intel_th/core.c:390:2: 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(thdev->name, name); ^~~~~~ drivers/hwtracing/intel_th/core.c:390:2: 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(thdev->name, name); ^~~~~~ drivers/hwtracing/intel_th/core.c:1023:35: warning: Dereference of null pointer [clang-analyzer-core.NullDereference] struct intel_th_driver *hubdrv = to_intel_th_driver(hub->dev.driver); ^ drivers/hwtracing/intel_th/intel_th.h:192:2: note: expanded from macro 'to_intel_th_driver' container_of((_d), struct intel_th_driver, driver) ^ include/linux/kernel.h:494:25: note: expanded from macro 'container_of' void *__mptr = (void *)(ptr); \ ^ drivers/hwtracing/intel_th/core.c:308:34: note: Left side of '&&' is false struct intel_th_device *thdev = to_intel_th_device(dev); ^ drivers/hwtracing/intel_th/intel_th.h:93:2: note: expanded from macro 'to_intel_th_device' container_of((_d), struct intel_th_device, dev) ^ include/linux/kernel.h:495:61: note: expanded from macro 'container_of' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^ drivers/hwtracing/intel_th/core.c:308:34: note: Taking false branch struct intel_th_device *thdev = to_intel_th_device(dev); ^ drivers/hwtracing/intel_th/intel_th.h:93:2: note: expanded from macro 'to_intel_th_device' container_of((_d), struct intel_th_device, dev) ^ include/linux/kernel.h:495:2: note: expanded from macro 'container_of' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^ include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG' #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg) ^ include/linux/compiler_types.h:322:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:310:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:302:3: note: expanded from macro '__compiletime_assert' if (!(condition)) \ ^ drivers/hwtracing/intel_th/core.c:308:34: note: Loop condition is false. Exiting loop struct intel_th_device *thdev = to_intel_th_device(dev); ^ drivers/hwtracing/intel_th/intel_th.h:93:2: note: expanded from macro 'to_intel_th_device' container_of((_d), struct intel_th_device, dev) ^ include/linux/kernel.h:495:2: note: expanded from macro 'container_of' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^ include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG' #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg) ^ include/linux/compiler_types.h:322:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) vim +/dram_type_str +645 drivers/memory/tegra/tegra20-emc.c 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 595 96e5da7c842424 Dmitry Osipenko 2018-10-21 596 static int emc_setup_hw(struct tegra_emc *emc) 96e5da7c842424 Dmitry Osipenko 2018-10-21 597 { 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 598 u32 emc_cfg, emc_dbg, emc_fbio, emc_adr_cfg; adbcec8862cd7e Dmitry Osipenko 2020-03-19 599 u32 intmask = EMC_REFRESH_OVERFLOW_INT; 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 600 static bool print_sdram_info_once; 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 601 enum emc_dram_type dram_type; 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 602 const char *dram_type_str; 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 603 unsigned int emem_numdev; 96e5da7c842424 Dmitry Osipenko 2018-10-21 604 96e5da7c842424 Dmitry Osipenko 2018-10-21 605 emc_cfg = readl_relaxed(emc->regs + EMC_CFG_2); 96e5da7c842424 Dmitry Osipenko 2018-10-21 606 96e5da7c842424 Dmitry Osipenko 2018-10-21 607 /* 96e5da7c842424 Dmitry Osipenko 2018-10-21 608 * Depending on a memory type, DRAM should enter either self-refresh 96e5da7c842424 Dmitry Osipenko 2018-10-21 609 * or power-down state on EMC clock change. 96e5da7c842424 Dmitry Osipenko 2018-10-21 610 */ 96e5da7c842424 Dmitry Osipenko 2018-10-21 611 if (!(emc_cfg & EMC_CLKCHANGE_PD_ENABLE) && 96e5da7c842424 Dmitry Osipenko 2018-10-21 612 !(emc_cfg & EMC_CLKCHANGE_SR_ENABLE)) { 96e5da7c842424 Dmitry Osipenko 2018-10-21 613 dev_err(emc->dev, 96e5da7c842424 Dmitry Osipenko 2018-10-21 614 "bootloader didn't specify DRAM auto-suspend mode\n"); 96e5da7c842424 Dmitry Osipenko 2018-10-21 615 return -EINVAL; 96e5da7c842424 Dmitry Osipenko 2018-10-21 616 } 96e5da7c842424 Dmitry Osipenko 2018-10-21 617 96e5da7c842424 Dmitry Osipenko 2018-10-21 618 /* enable EMC and CAR to handshake on PLL divider/source changes */ 96e5da7c842424 Dmitry Osipenko 2018-10-21 619 emc_cfg |= EMC_CLKCHANGE_REQ_ENABLE; 96e5da7c842424 Dmitry Osipenko 2018-10-21 620 writel_relaxed(emc_cfg, emc->regs + EMC_CFG_2); 96e5da7c842424 Dmitry Osipenko 2018-10-21 621 96e5da7c842424 Dmitry Osipenko 2018-10-21 622 /* initialize interrupt */ 96e5da7c842424 Dmitry Osipenko 2018-10-21 623 writel_relaxed(intmask, emc->regs + EMC_INTMASK); 96e5da7c842424 Dmitry Osipenko 2018-10-21 624 writel_relaxed(intmask, emc->regs + EMC_INTSTATUS); 96e5da7c842424 Dmitry Osipenko 2018-10-21 625 c72396f941fb9d Dmitry Osipenko 2019-08-12 626 /* ensure that unwanted debug features are disabled */ c72396f941fb9d Dmitry Osipenko 2019-08-12 627 emc_dbg = readl_relaxed(emc->regs + EMC_DBG); c72396f941fb9d Dmitry Osipenko 2019-08-12 628 emc_dbg |= EMC_DBG_CFG_PRIORITY; c72396f941fb9d Dmitry Osipenko 2019-08-12 629 emc_dbg &= ~EMC_DBG_READ_MUX_ASSEMBLY; c72396f941fb9d Dmitry Osipenko 2019-08-12 630 emc_dbg &= ~EMC_DBG_WRITE_MUX_ACTIVE; c72396f941fb9d Dmitry Osipenko 2019-08-12 631 emc_dbg &= ~EMC_DBG_FORCE_UPDATE; c72396f941fb9d Dmitry Osipenko 2019-08-12 632 writel_relaxed(emc_dbg, emc->regs + EMC_DBG); c72396f941fb9d Dmitry Osipenko 2019-08-12 633 d5ef16ba5fbe12 Dmitry Osipenko 2020-11-04 634 emc_fbio = readl_relaxed(emc->regs + EMC_FBIO_CFG5); d5ef16ba5fbe12 Dmitry Osipenko 2020-11-04 635 d5ef16ba5fbe12 Dmitry Osipenko 2020-11-04 636 if (emc_fbio & EMC_FBIO_CFG5_DRAM_WIDTH_X16) d5ef16ba5fbe12 Dmitry Osipenko 2020-11-04 637 emc->dram_bus_width = 16; d5ef16ba5fbe12 Dmitry Osipenko 2020-11-04 638 else d5ef16ba5fbe12 Dmitry Osipenko 2020-11-04 639 emc->dram_bus_width = 32; d5ef16ba5fbe12 Dmitry Osipenko 2020-11-04 640 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 641 dram_type = FIELD_GET(EMC_FBIO_CFG5_DRAM_TYPE, emc_fbio); 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 642 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 643 switch (dram_type) { 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 644 case DRAM_TYPE_RESERVED: 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 @645 dram_type_str = "INVALID"; 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 646 break; 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 647 case DRAM_TYPE_DDR1: 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 648 dram_type_str = "DDR1"; 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 649 break; 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 650 case DRAM_TYPE_LPDDR2: 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 651 dram_type_str = "LPDDR2"; 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 652 break; 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 653 case DRAM_TYPE_DDR2: 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 654 dram_type_str = "DDR2"; 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 655 break; 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 656 } 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 657 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 658 emc_adr_cfg = readl_relaxed(emc->regs + EMC_ADR_CFG_0); 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 659 emem_numdev = FIELD_GET(EMC_ADR_CFG_0_EMEM_NUMDEV, emc_adr_cfg) + 1; 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 660 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 661 dev_info_once(emc->dev, "%ubit DRAM bus, %u %s %s attached\n", 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 662 emc->dram_bus_width, emem_numdev, dram_type_str, 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 663 emem_numdev == 2 ? "devices" : "device"); 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 664 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 665 if (dram_type == DRAM_TYPE_LPDDR2) { 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 666 while (emem_numdev--) 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 667 emc_read_lpddr_sdram_info(emc, emem_numdev, 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 668 !print_sdram_info_once); 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 669 print_sdram_info_once = true; 131dd9a436d8f6 Dmitry Osipenko 2021-10-07 670 } d5ef16ba5fbe12 Dmitry Osipenko 2020-11-04 671 96e5da7c842424 Dmitry Osipenko 2018-10-21 672 return 0; 96e5da7c842424 Dmitry Osipenko 2018-10-21 673 } 96e5da7c842424 Dmitry Osipenko 2018-10-21 674 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected]
.config.gz
Description: application/gzip
_______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
