From: kernel test robot <lkp@intel.com>
To: oe-kbuild@lists.linux.dev
Cc: lkp@intel.com, Dan Carpenter <error27@gmail.com>
Subject: [linux-next:master 2646/4394] drivers/memory/tegra/tegra114-emc.c:520 tegra114_emc_prepare_timing_change() warn: variable dereferenced before check 'timing' (see line 515)
Date: Sun, 10 May 2026 05:08:46 +0800 [thread overview]
Message-ID: <202605100506.wJFmI6IM-lkp@intel.com> (raw)
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
TO: Svyatoslav Ryhel <clamor95@gmail.com>
CC: Krzysztof Kozlowski <krzk@kernel.org>
CC: Mikko Perttunen <mperttunen@nvidia.com>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head: e98d21c170b01ddef366f023bbfcf6b31509fa83
commit: dce208b5405f40c36320bb0ee07e9df8f7f2bea4 [2646/4394] memory: tegra: Add Tegra114 EMC driver
:::::: branch date: 32 hours ago
:::::: commit date: 5 days ago
config: um-randconfig-r072-20260509 (https://download.01.org/0day-ci/archive/20260510/202605100506.wJFmI6IM-lkp@intel.com/config)
compiler: clang version 23.0.0git (https://github.com/llvm/llvm-project 5bac06718f502014fade905512f1d26d578a18f3)
smatch: v0.5.0-9065-ge9cc34fd
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202605100506.wJFmI6IM-lkp@intel.com/
smatch warnings:
drivers/memory/tegra/tegra114-emc.c:520 tegra114_emc_prepare_timing_change() warn: variable dereferenced before check 'timing' (see line 515)
vim +/timing +520 drivers/memory/tegra/tegra114-emc.c
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 506
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 507 static int tegra114_emc_prepare_timing_change(struct tegra_emc *emc,
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 508 unsigned long rate)
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 509 {
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 510 struct emc_timing *timing = tegra114_emc_find_timing(emc, rate);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 511 struct emc_timing *last = &emc->last_timing;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 512 enum emc_dll_change dll_change;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 513 unsigned int pre_wait = 0;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 514 u32 val, mask;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 @515 bool next_dll_enabled = !(timing->emc_mode_1 & 0x1);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 516 bool last_dll_enabled = !(last->emc_mode_1 & 0x1);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 517 bool update = false;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 518 unsigned int i;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 519
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 @520 if (!timing)
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 521 return -ENOENT;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 522
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 523 if (next_dll_enabled == last_dll_enabled)
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 524 dll_change = DLL_CHANGE_NONE;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 525 else if (next_dll_enabled)
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 526 dll_change = DLL_CHANGE_ON;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 527 else
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 528 dll_change = DLL_CHANGE_OFF;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 529
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 530 /* Clear CLKCHANGE_COMPLETE interrupts */
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 531 writel(EMC_INTSTATUS_CLKCHANGE_COMPLETE, emc->regs + EMC_INTSTATUS);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 532
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 533 /* Disable dynamic self-refresh */
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 534 val = readl(emc->regs + EMC_CFG);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 535 if (val & EMC_CFG_PWR_MASK) {
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 536 val &= ~EMC_CFG_POWER_FEATURES_MASK;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 537 writel(val, emc->regs + EMC_CFG);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 538
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 539 pre_wait = 5;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 540 }
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 541
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 542 /* Disable SEL_DPD_CTRL for clock change */
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 543 if (emc->dram_type == DRAM_TYPE_DDR3)
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 544 mask = EMC_SEL_DPD_CTRL_DDR3_MASK;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 545 else
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 546 mask = EMC_SEL_DPD_CTRL_MASK;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 547
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 548 val = readl(emc->regs + EMC_SEL_DPD_CTRL);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 549 if (val & mask) {
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 550 val &= ~mask;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 551 writel(val, emc->regs + EMC_SEL_DPD_CTRL);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 552 }
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 553
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 554 /* Prepare DQ/DQS for clock change */
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 555 val = readl(emc->regs + EMC_XM2DQSPADCTRL2);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 556 if (timing->emc_xm2dqspadctrl2 & EMC_XM2DQSPADCTRL2_VREF_ENABLE &&
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 557 !(val & EMC_XM2DQSPADCTRL2_VREF_ENABLE)) {
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 558 val |= EMC_XM2DQSPADCTRL2_VREF_ENABLE;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 559 update = true;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 560 }
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 561
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 562 if (timing->emc_xm2dqspadctrl2 & EMC_XM2DQSPADCTRL2_RX_FT_REC_ENABLE &&
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 563 !(val & EMC_XM2DQSPADCTRL2_RX_FT_REC_ENABLE)) {
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 564 val |= EMC_XM2DQSPADCTRL2_RX_FT_REC_ENABLE;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 565 update = true;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 566 }
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 567
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 568 if (update) {
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 569 writel(val, emc->regs + EMC_XM2DQSPADCTRL2);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 570 if (pre_wait < 30)
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 571 pre_wait = 30;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 572 }
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 573
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 574 /* Wait to settle */
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 575 if (pre_wait) {
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 576 emc_seq_update_timing(emc);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 577 udelay(pre_wait);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 578 }
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 579
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 580 /* Program CTT_TERM control */
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 581 if (last->emc_ctt_term_ctrl != timing->emc_ctt_term_ctrl) {
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 582 emc_seq_disable_auto_cal(emc);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 583 writel(timing->emc_ctt_term_ctrl,
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 584 emc->regs + EMC_CTT_TERM_CTRL);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 585 emc_seq_update_timing(emc);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 586 }
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 587
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 588 /* Program burst shadow registers */
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 589 for (i = 0; i < ARRAY_SIZE(timing->emc_burst_data); ++i)
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 590 writel(timing->emc_burst_data[i],
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 591 emc->regs + emc_burst_regs[i]);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 592
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 593 writel(timing->emc_xm2dqspadctrl2, emc->regs + EMC_XM2DQSPADCTRL2);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 594 writel(timing->emc_zcal_interval, emc->regs + EMC_ZCAL_INTERVAL);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 595
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 596 tegra_mc_write_emem_configuration(emc->mc, timing->rate);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 597
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 598 val = timing->emc_cfg & ~EMC_CFG_POWER_FEATURES_MASK;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 599 emc_ccfifo_writel(emc, val, EMC_CFG);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 600
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 601 /* Program AUTO_CAL_CONFIG */
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 602 if (timing->emc_auto_cal_config2 != last->emc_auto_cal_config2)
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 603 emc_ccfifo_writel(emc, timing->emc_auto_cal_config2,
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 604 EMC_AUTO_CAL_CONFIG2);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 605
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 606 if (timing->emc_auto_cal_config3 != last->emc_auto_cal_config3)
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 607 emc_ccfifo_writel(emc, timing->emc_auto_cal_config3,
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 608 EMC_AUTO_CAL_CONFIG3);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 609
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 610 if (timing->emc_auto_cal_config != last->emc_auto_cal_config) {
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 611 val = timing->emc_auto_cal_config;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 612 val &= EMC_AUTO_CAL_CONFIG_AUTO_CAL_START;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 613 emc_ccfifo_writel(emc, val, EMC_AUTO_CAL_CONFIG);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 614 }
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 615
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 616 /* DDR3: predict MRS long wait count */
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 617 if (emc->dram_type == DRAM_TYPE_DDR3 &&
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 618 dll_change == DLL_CHANGE_ON) {
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 619 u32 cnt = 512;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 620
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 621 if (timing->emc_zcal_interval != 0 &&
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 622 last->emc_zcal_interval == 0)
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 623 cnt -= emc->dram_num * 256;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 624
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 625 val = (timing->emc_mrs_wait_cnt
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 626 & EMC_MRS_WAIT_CNT_SHORT_WAIT_MASK)
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 627 >> EMC_MRS_WAIT_CNT_SHORT_WAIT_SHIFT;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 628 if (cnt < val)
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 629 cnt = val;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 630
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 631 val = timing->emc_mrs_wait_cnt
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 632 & ~EMC_MRS_WAIT_CNT_LONG_WAIT_MASK;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 633 val |= (cnt << EMC_MRS_WAIT_CNT_LONG_WAIT_SHIFT)
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 634 & EMC_MRS_WAIT_CNT_LONG_WAIT_MASK;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 635
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 636 writel(val, emc->regs + EMC_MRS_WAIT_CNT);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 637 }
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 638
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 639 /* DDR3: Turn off DLL and enter self-refresh */
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 640 if (emc->dram_type == DRAM_TYPE_DDR3 && dll_change == DLL_CHANGE_OFF)
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 641 emc_ccfifo_writel(emc, timing->emc_mode_1, EMC_EMRS);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 642
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 643 /* Disable refresh controller */
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 644 emc_ccfifo_writel(emc, EMC_REFCTRL_DEV_SEL(emc->dram_num),
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 645 EMC_REFCTRL);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 646 if (emc->dram_type == DRAM_TYPE_DDR3)
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 647 emc_ccfifo_writel(emc, EMC_DRAM_DEV_SEL(emc->dram_num) |
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 648 EMC_SELF_REF_CMD_ENABLED,
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 649 EMC_SELF_REF);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 650
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 651 /* Flow control marker */
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 652 emc_ccfifo_writel(emc, 1, EMC_STALL_THEN_EXE_AFTER_CLKCHANGE);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 653
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 654 /* DDR3: Exit self-refresh */
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 655 if (emc->dram_type == DRAM_TYPE_DDR3)
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 656 emc_ccfifo_writel(emc, EMC_DRAM_DEV_SEL(emc->dram_num),
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 657 EMC_SELF_REF);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 658 emc_ccfifo_writel(emc, EMC_REFCTRL_DEV_SEL(emc->dram_num) |
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 659 EMC_REFCTRL_ENABLE,
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 660 EMC_REFCTRL);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 661
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 662 /* Set DRAM mode registers */
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 663 if (emc->dram_type == DRAM_TYPE_DDR3) {
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 664 if (timing->emc_mode_1 != last->emc_mode_1)
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 665 emc_ccfifo_writel(emc, timing->emc_mode_1, EMC_EMRS);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 666 if (timing->emc_mode_2 != last->emc_mode_2)
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 667 emc_ccfifo_writel(emc, timing->emc_mode_2, EMC_EMRS2);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 668
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 669 if (timing->emc_mode_reset != last->emc_mode_reset ||
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 670 dll_change == DLL_CHANGE_ON) {
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 671 val = timing->emc_mode_reset;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 672 if (dll_change == DLL_CHANGE_ON) {
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 673 val |= EMC_MODE_SET_DLL_RESET;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 674 val |= EMC_MODE_SET_LONG_CNT;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 675 } else {
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 676 val &= ~EMC_MODE_SET_DLL_RESET;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 677 }
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 678 emc_ccfifo_writel(emc, val, EMC_MRS);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 679 }
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 680 } else {
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 681 if (timing->emc_mode_2 != last->emc_mode_2)
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 682 emc_ccfifo_writel(emc, timing->emc_mode_2, EMC_MRW2);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 683 if (timing->emc_mode_1 != last->emc_mode_1)
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 684 emc_ccfifo_writel(emc, timing->emc_mode_1, EMC_MRW);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 685 if (timing->emc_mode_4 != last->emc_mode_4)
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 686 emc_ccfifo_writel(emc, timing->emc_mode_4, EMC_MRW4);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 687 }
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 688
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 689 /* Issue ZCAL command if turning ZCAL on */
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 690 if (timing->emc_zcal_interval != 0 && last->emc_zcal_interval == 0) {
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 691 emc_ccfifo_writel(emc, EMC_ZQ_CAL_LONG_CMD_DEV0, EMC_ZQ_CAL);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 692 if (emc->dram_num > 1)
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 693 emc_ccfifo_writel(emc, EMC_ZQ_CAL_LONG_CMD_DEV1,
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 694 EMC_ZQ_CAL);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 695 }
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 696
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 697 /* Write to RO register to remove stall after change */
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 698 emc_ccfifo_writel(emc, 0, EMC_CCFIFO_STATUS);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 699
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 700 /* Disable AUTO_CAL for clock change */
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 701 emc_seq_disable_auto_cal(emc);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 702
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 703 /* Read register to wait until programming has settled */
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 704 mc_readl(emc->mc, MC_EMEM_ADR_CFG);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 705
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 706 return 0;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 707 }
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 708
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
WARNING: multiple messages have this Message-ID (diff)
From: Dan Carpenter <error27@gmail.com>
To: oe-kbuild@lists.linux.dev, Svyatoslav Ryhel <clamor95@gmail.com>
Cc: lkp@intel.com, oe-kbuild-all@lists.linux.dev,
Krzysztof Kozlowski <krzk@kernel.org>,
Mikko Perttunen <mperttunen@nvidia.com>
Subject: [linux-next:master 2646/4394] drivers/memory/tegra/tegra114-emc.c:520 tegra114_emc_prepare_timing_change() warn: variable dereferenced before check 'timing' (see line 515)
Date: Sun, 10 May 2026 12:44:03 +0300 [thread overview]
Message-ID: <202605100506.wJFmI6IM-lkp@intel.com> (raw)
Message-ID: <20260510094403.MZrCJd5zl8eW-3Goqh0wn4oAcsmXU-r7hcmr9Epo618@z> (raw)
tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head: e98d21c170b01ddef366f023bbfcf6b31509fa83
commit: dce208b5405f40c36320bb0ee07e9df8f7f2bea4 [2646/4394] memory: tegra: Add Tegra114 EMC driver
config: um-randconfig-r072-20260509 (https://download.01.org/0day-ci/archive/20260510/202605100506.wJFmI6IM-lkp@intel.com/config)
compiler: clang version 23.0.0git (https://github.com/llvm/llvm-project 5bac06718f502014fade905512f1d26d578a18f3)
smatch: v0.5.0-9065-ge9cc34fd
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202605100506.wJFmI6IM-lkp@intel.com/
smatch warnings:
drivers/memory/tegra/tegra114-emc.c:520 tegra114_emc_prepare_timing_change() warn: variable dereferenced before check 'timing' (see line 515)
vim +/timing +520 drivers/memory/tegra/tegra114-emc.c
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 507 static int tegra114_emc_prepare_timing_change(struct tegra_emc *emc,
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 508 unsigned long rate)
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 509 {
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 510 struct emc_timing *timing = tegra114_emc_find_timing(emc, rate);
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 511 struct emc_timing *last = &emc->last_timing;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 512 enum emc_dll_change dll_change;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 513 unsigned int pre_wait = 0;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 514 u32 val, mask;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 @515 bool next_dll_enabled = !(timing->emc_mode_1 & 0x1);
^^^^^^^^^^^^^^^^^^
Dereference
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 516 bool last_dll_enabled = !(last->emc_mode_1 & 0x1);
^^^^^^^^^^^^^^^^
and another
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 517 bool update = false;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 518 unsigned int i;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 519
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 @520 if (!timing)
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 521 return -ENOENT;
Checked too late.
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 522
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 523 if (next_dll_enabled == last_dll_enabled)
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 524 dll_change = DLL_CHANGE_NONE;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 525 else if (next_dll_enabled)
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 526 dll_change = DLL_CHANGE_ON;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 527 else
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 528 dll_change = DLL_CHANGE_OFF;
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 529
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 530 /* Clear CLKCHANGE_COMPLETE interrupts */
dce208b5405f40 Svyatoslav Ryhel 2026-04-27 531 writel(EMC_INTSTATUS_CLKCHANGE_COMPLETE, emc->regs + EMC_INTSTATUS);
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
next reply other threads:[~2026-05-09 21:09 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-09 21:08 kernel test robot [this message]
2026-05-10 9:44 ` [linux-next:master 2646/4394] drivers/memory/tegra/tegra114-emc.c:520 tegra114_emc_prepare_timing_change() warn: variable dereferenced before check 'timing' (see line 515) Dan Carpenter
2026-05-13 18:31 ` Krzysztof Kozlowski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202605100506.wJFmI6IM-lkp@intel.com \
--to=lkp@intel.com \
--cc=error27@gmail.com \
--cc=oe-kbuild@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.