[PATCH v3] mmc: mtk-sd: reduce CIT for better performance

kernel test robot lkp at intel.com
Mon Jun 5 01:43:07 PDT 2023


Hi Wenbin,

kernel test robot noticed the following build errors:

[auto build test ERROR on linus/master]
[also build test ERROR on ulf-hansson-mmc-mirror/next v6.4-rc5 next-20230605]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Wenbin-Mei/mmc-mtk-sd-reduce-CIT-for-better-performance/20230605-140238
base:   linus/master
patch link:    https://lore.kernel.org/r/20230605060107.22044-1-wenbin.mei%40mediatek.com
patch subject: [PATCH v3] mmc: mtk-sd: reduce CIT for better performance
config: x86_64-randconfig-a004-20230605 (https://download.01.org/0day-ci/archive/20230605/202306051634.orHLaQ9t-lkp@intel.com/config)
compiler: clang version 15.0.7 (https://github.com/llvm/llvm-project.git 8dfdcc7b7bf66834a761bd8de445840ef68e4d1a)
reproduce (this is a W=1 build):
        mkdir -p ~/bin
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/225e46f420d48f7ad73253636a0553bd5f986435
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Wenbin-Mei/mmc-mtk-sd-reduce-CIT-for-better-performance/20230605-140238
        git checkout 225e46f420d48f7ad73253636a0553bd5f986435
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang ~/bin/make.cross W=1 O=build_dir ARCH=x86_64 olddefconfig
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang ~/bin/make.cross W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash drivers/mmc/host/

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp at intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202306051634.orHLaQ9t-lkp@intel.com/

All errors (new ones prefixed by >>):

>> drivers/mmc/host/mtk-sd.c:2489:4: error: expected expression
           } else {
             ^
>> drivers/mmc/host/mtk-sd.c:2495:1: error: function definition is not allowed here
   {
   ^
   drivers/mmc/host/mtk-sd.c:2513:1: error: function definition is not allowed here
   {
   ^
   drivers/mmc/host/mtk-sd.c:2539:1: error: function definition is not allowed here
   {
   ^
   drivers/mmc/host/mtk-sd.c:2549:1: error: function definition is not allowed here
   {
   ^
>> drivers/mmc/host/mtk-sd.c:2577:20: error: use of undeclared identifier 'msdc_cqe_enable'
           .enable         = msdc_cqe_enable,
                             ^
>> drivers/mmc/host/mtk-sd.c:2578:20: error: use of undeclared identifier 'msdc_cqe_disable'
           .disable        = msdc_cqe_disable,
                             ^
>> drivers/mmc/host/mtk-sd.c:2579:16: error: use of undeclared identifier 'msdc_cqe_pre_enable'; did you mean 'msdc_cqe_cit_cal'?
           .pre_enable = msdc_cqe_pre_enable,
                         ^~~~~~~~~~~~~~~~~~~
                         msdc_cqe_cit_cal
   drivers/mmc/host/mtk-sd.c:2454:13: note: 'msdc_cqe_cit_cal' declared here
   static void msdc_cqe_cit_cal(struct msdc_host *host, u64 timer_ns)
               ^
>> drivers/mmc/host/mtk-sd.c:2580:18: error: use of undeclared identifier 'msdc_cqe_post_disable'
           .post_disable = msdc_cqe_post_disable,
                           ^
   drivers/mmc/host/mtk-sd.c:2585:1: error: function definition is not allowed here
   {
   ^
   drivers/mmc/host/mtk-sd.c:2616:1: error: function definition is not allowed here
   {
   ^
   drivers/mmc/host/mtk-sd.c:2668:1: error: function definition is not allowed here
   {
   ^
   drivers/mmc/host/mtk-sd.c:2892:1: error: function definition is not allowed here
   {
   ^
   drivers/mmc/host/mtk-sd.c:2920:1: error: function definition is not allowed here
   {
   ^
   drivers/mmc/host/mtk-sd.c:2947:1: error: function definition is not allowed here
   {
   ^
   drivers/mmc/host/mtk-sd.c:2978:1: error: function definition is not allowed here
   {
   ^
   drivers/mmc/host/mtk-sd.c:2997:1: error: function definition is not allowed here
   {
   ^
   drivers/mmc/host/mtk-sd.c:3016:1: error: function definition is not allowed here
   {
   ^
   drivers/mmc/host/mtk-sd.c:3041:1: error: function definition is not allowed here
   {
   ^
   fatal error: too many errors emitted, stopping now [-ferror-limit=]
   20 errors generated.


vim +2489 drivers/mmc/host/mtk-sd.c

  2453	
  2454	static void msdc_cqe_cit_cal(struct msdc_host *host, u64 timer_ns)
  2455	{
  2456		struct mmc_host *mmc = mmc_from_priv(host);
  2457		struct cqhci_host *cq_host = mmc->cqe_private;
  2458		u8 itcfmul;
  2459		u32 hclk_freq;
  2460		u64 value;
  2461	
  2462		/* Since MSDC CQE uses msdc_hclk as ITCFVAL, so driver should use hclk
  2463		 * frequency to get the actual time for CIT.
  2464		 */
  2465		if (host->h_clk) {
  2466			hclk_freq = clk_get_rate(host->h_clk);
  2467			itcfmul = CQHCI_CAP_ITCFMUL(cqhci_readl(cq_host, CQHCI_CAP));
  2468			switch (itcfmul) {
  2469			case 0x0:
  2470				do_div(hclk_freq, 1000);
  2471				break;
  2472			case 0x1:
  2473				do_div(hclk_freq, 100);
  2474				break;
  2475			case 0x2:
  2476				do_div(hclk_freq, 10);
  2477				break;
  2478			case 0x3:
  2479				break;
  2480			case 0x4:
  2481				hclk_freq = hclk_freq * 10;
  2482				break;
  2483			default:
  2484				host->cq_ssc1_time = 0x40;
  2485				return;
  2486			value = hclk_freq * timer_ns;
  2487			do_div(value, 1000000000ULL);
  2488			host->cq_ssc1_time = value;
> 2489		} else {
  2490			host->cq_ssc1_time = 0x40;
  2491		}
  2492	}
  2493	
  2494	static void msdc_cqe_enable(struct mmc_host *mmc)
> 2495	{
  2496		struct msdc_host *host = mmc_priv(mmc);
  2497		struct cqhci_host *cq_host = mmc->cqe_private;
  2498	
  2499		/* enable cmdq irq */
  2500		writel(MSDC_INT_CMDQ, host->base + MSDC_INTEN);
  2501		/* enable busy check */
  2502		sdr_set_bits(host->base + MSDC_PATCH_BIT1, MSDC_PB1_BUSY_CHECK_SEL);
  2503		/* default write data / busy timeout 20s */
  2504		msdc_set_busy_timeout(host, 20 * 1000000000ULL, 0);
  2505		/* default read data timeout 1s */
  2506		msdc_set_timeout(host, 1000000000ULL, 0);
  2507	
  2508		/* Set the send status command idle timer */
  2509		cqhci_writel(cq_host, host->cq_ssc1_time, CQHCI_SSC1);
  2510	}
  2511	
  2512	static void msdc_cqe_disable(struct mmc_host *mmc, bool recovery)
  2513	{
  2514		struct msdc_host *host = mmc_priv(mmc);
  2515		unsigned int val = 0;
  2516	
  2517		/* disable cmdq irq */
  2518		sdr_clr_bits(host->base + MSDC_INTEN, MSDC_INT_CMDQ);
  2519		/* disable busy check */
  2520		sdr_clr_bits(host->base + MSDC_PATCH_BIT1, MSDC_PB1_BUSY_CHECK_SEL);
  2521	
  2522		val = readl(host->base + MSDC_INT);
  2523		writel(val, host->base + MSDC_INT);
  2524	
  2525		if (recovery) {
  2526			sdr_set_field(host->base + MSDC_DMA_CTRL,
  2527				      MSDC_DMA_CTRL_STOP, 1);
  2528			if (WARN_ON(readl_poll_timeout(host->base + MSDC_DMA_CTRL, val,
  2529				!(val & MSDC_DMA_CTRL_STOP), 1, 3000)))
  2530				return;
  2531			if (WARN_ON(readl_poll_timeout(host->base + MSDC_DMA_CFG, val,
  2532				!(val & MSDC_DMA_CFG_STS), 1, 3000)))
  2533				return;
  2534			msdc_reset_hw(host);
  2535		}
  2536	}
  2537	
  2538	static void msdc_cqe_pre_enable(struct mmc_host *mmc)
  2539	{
  2540		struct cqhci_host *cq_host = mmc->cqe_private;
  2541		u32 reg;
  2542	
  2543		reg = cqhci_readl(cq_host, CQHCI_CFG);
  2544		reg |= CQHCI_ENABLE;
  2545		cqhci_writel(cq_host, reg, CQHCI_CFG);
  2546	}
  2547	
  2548	static void msdc_cqe_post_disable(struct mmc_host *mmc)
  2549	{
  2550		struct cqhci_host *cq_host = mmc->cqe_private;
  2551		u32 reg;
  2552	
  2553		reg = cqhci_readl(cq_host, CQHCI_CFG);
  2554		reg &= ~CQHCI_ENABLE;
  2555		cqhci_writel(cq_host, reg, CQHCI_CFG);
  2556	}
  2557	
  2558	static const struct mmc_host_ops mt_msdc_ops = {
  2559		.post_req = msdc_post_req,
  2560		.pre_req = msdc_pre_req,
  2561		.request = msdc_ops_request,
  2562		.set_ios = msdc_ops_set_ios,
  2563		.get_ro = mmc_gpio_get_ro,
  2564		.get_cd = msdc_get_cd,
  2565		.hs400_enhanced_strobe = msdc_hs400_enhanced_strobe,
  2566		.enable_sdio_irq = msdc_enable_sdio_irq,
  2567		.ack_sdio_irq = msdc_ack_sdio_irq,
  2568		.start_signal_voltage_switch = msdc_ops_switch_volt,
  2569		.card_busy = msdc_card_busy,
  2570		.execute_tuning = msdc_execute_tuning,
  2571		.prepare_hs400_tuning = msdc_prepare_hs400_tuning,
  2572		.execute_hs400_tuning = msdc_execute_hs400_tuning,
  2573		.card_hw_reset = msdc_hw_reset,
  2574	};
  2575	
  2576	static const struct cqhci_host_ops msdc_cmdq_ops = {
> 2577		.enable         = msdc_cqe_enable,
> 2578		.disable        = msdc_cqe_disable,
> 2579		.pre_enable = msdc_cqe_pre_enable,
> 2580		.post_disable = msdc_cqe_post_disable,
  2581	};
  2582	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki



More information about the Linux-mediatek mailing list