All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Otavio Salvador <otavio@ossystems.com.br>
Cc: oe-kbuild-all@lists.linux.dev
Subject: [freescale-fslc:pr/639 3312/24603] drivers/irqchip/irq-imx-irqsteer.c:193:27: error: use of undeclared identifier 'irqsteer_data'
Date: Thu, 31 Aug 2023 22:01:31 +0800	[thread overview]
Message-ID: <202308312133.TMwtVoiO-lkp@intel.com> (raw)

Hi Fugang,

FYI, the error/warning still remains.

tree:   https://github.com/Freescale/linux-fslc pr/639
head:   857fbf7cebaba3b1ffccc558deee1d13ac0e11d7
commit: 5e46c8d4031866e0084fcdeb68ca1998f158aa9d [3312/24603] MLK-17290-01 irqchip: imx-irqsteer: add runtime pm support
config: riscv-randconfig-r015-20230831 (https://download.01.org/0day-ci/archive/20230831/202308312133.TMwtVoiO-lkp@intel.com/config)
compiler: clang version 14.0.6 (https://github.com/llvm/llvm-project.git f28c006a5895fc0e329fe15fead81e37457cb1d1)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20230831/202308312133.TMwtVoiO-lkp@intel.com/reproduce)

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>
| Closes: https://lore.kernel.org/oe-kbuild-all/202308312133.TMwtVoiO-lkp@intel.com/

All errors (new ones prefixed by >>):

>> drivers/irqchip/irq-imx-irqsteer.c:193:27: error: use of undeclared identifier 'irqsteer_data'
           ret = clk_prepare_enable(irqsteer_data->ipg_clk);
                                    ^
>> drivers/irqchip/irq-imx-irqsteer.c:385:21: error: use of undeclared identifier 'imx_irqsteer_runtime_suspend'; did you mean 'pm_generic_runtime_suspend'?
           SET_RUNTIME_PM_OPS(imx_irqsteer_runtime_suspend,
                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
                              pm_generic_runtime_suspend
   include/linux/pm.h:341:21: note: expanded from macro 'SET_RUNTIME_PM_OPS'
           .runtime_suspend = suspend_fn, \
                              ^
   include/linux/pm_runtime.h:33:12: note: 'pm_generic_runtime_suspend' declared here
   extern int pm_generic_runtime_suspend(struct device *dev);
              ^
>> drivers/irqchip/irq-imx-irqsteer.c:386:7: error: use of undeclared identifier 'imx_irqsteer_runtime_resume'
                              imx_irqsteer_runtime_resume, NULL)
                              ^
   3 errors generated.


vim +/irqsteer_data +193 drivers/irqchip/irq-imx-irqsteer.c

   182	
   183	#ifdef CONFIG_PM_SLEEP
   184	static int imx_irqsteer_chans_enable(struct irqsteer_data *data)
   185	{
   186		return 0;
   187	}
   188	#else
   189	static int imx_irqsteer_chans_enable(struct irqsteer_data *data)
   190	{
   191		int ret;
   192	
 > 193		ret = clk_prepare_enable(irqsteer_data->ipg_clk);
   194		if (ret) {
   195			dev_err(data->dev, "failed to enable ipg clk: %d\n", ret);
   196			return ret;
   197		}
   198	
   199		/* steer all IRQs into configured channel */
   200		writel_relaxed(BIT(data->channel), data->regs + CHANCTRL);
   201	
   202		/* read back CHANCTRL register cannot reflact on HW register
   203		 * real value due to the HW action, so add one flag here.
   204		 */
   205		data->inited = true;
   206		return 0;
   207	}
   208	#endif
   209	
   210	static int imx_irqsteer_probe(struct platform_device *pdev)
   211	{
   212		struct device_node *np = pdev->dev.of_node;
   213		struct irqsteer_data *data;
   214		u32 irqs_num;
   215		int i, ret;
   216	
   217		data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
   218		if (!data)
   219			return -ENOMEM;
   220	
   221		data->chip = imx_irqsteer_irq_chip;
   222		data->chip.parent_device = &pdev->dev;
   223		data->dev = &pdev->dev;
   224		data->inited = false;
   225		data->regs = devm_platform_ioremap_resource(pdev, 0);
   226		if (IS_ERR(data->regs)) {
   227			dev_err(&pdev->dev, "failed to initialize reg\n");
   228			return PTR_ERR(data->regs);
   229		}
   230	
   231		data->ipg_clk = devm_clk_get(&pdev->dev, "ipg");
   232		if (IS_ERR(data->ipg_clk))
   233			return dev_err_probe(&pdev->dev, PTR_ERR(data->ipg_clk),
   234					     "failed to get ipg clk\n");
   235	
   236		ret = imx_irqsteer_attach_pd(data);
   237		if (ret < 0 && ret == -EPROBE_DEFER)
   238			return ret;
   239	
   240		ret = device_reset(&pdev->dev);
   241		if (ret == -EPROBE_DEFER)
   242			return ret;
   243	
   244		raw_spin_lock_init(&data->lock);
   245	
   246		ret = of_property_read_u32(np, "fsl,num-irqs", &irqs_num);
   247		if (ret)
   248			return ret;
   249		ret = of_property_read_u32(np, "fsl,channel", &data->channel);
   250		if (ret)
   251			return ret;
   252	
   253		/*
   254		 * There is one output irq for each group of 64 inputs.
   255		 * One register bit map can represent 32 input interrupts.
   256		 */
   257		data->irq_count = DIV_ROUND_UP(irqs_num, 64);
   258		data->reg_num = irqs_num / 32;
   259	
   260		if (IS_ENABLED(CONFIG_PM_SLEEP)) {
   261			data->saved_reg = devm_kzalloc(&pdev->dev,
   262						sizeof(u32) * data->reg_num,
   263						GFP_KERNEL);
   264			if (!data->saved_reg)
   265				return -ENOMEM;
   266		}
   267	
   268		ret = imx_irqsteer_chans_enable(data);
   269		if (ret)
   270			return ret;
   271	
   272		data->domain = irq_domain_add_linear(np, data->reg_num * 32,
   273						     &imx_irqsteer_domain_ops, data);
   274		if (!data->domain) {
   275			dev_err(&pdev->dev, "failed to create IRQ domain\n");
   276			ret = -ENOMEM;
   277			goto out;
   278		}
   279	
   280		if (!data->irq_count || data->irq_count > CHAN_MAX_OUTPUT_INT) {
   281			ret = -EINVAL;
   282			goto out;
   283		}
   284	
   285		for (i = 0; i < data->irq_count; i++) {
   286			data->irq[i] = irq_of_parse_and_map(np, i);
   287			if (!data->irq[i]) {
   288				ret = -EINVAL;
   289				goto out;
   290			}
   291	
   292			irq_set_chained_handler_and_data(data->irq[i],
   293							 imx_irqsteer_irq_handler,
   294							 data);
   295		}
   296	
   297		platform_set_drvdata(pdev, data);
   298	
   299		pm_runtime_enable(&pdev->dev);
   300		return 0;
   301	out:
   302		clk_disable_unprepare(data->ipg_clk);
   303		return ret;
   304	}
   305	
   306	static int imx_irqsteer_remove(struct platform_device *pdev)
   307	{
   308		struct irqsteer_data *irqsteer_data = platform_get_drvdata(pdev);
   309		int i;
   310	
   311		for (i = 0; i < irqsteer_data->irq_count; i++)
   312			irq_set_chained_handler_and_data(irqsteer_data->irq[i],
   313							 NULL, NULL);
   314	
   315		irq_domain_remove(irqsteer_data->domain);
   316	
   317		return pm_runtime_force_suspend(&pdev->dev);
   318	}
   319	
   320	#ifdef CONFIG_PM_SLEEP
   321	static void imx_irqsteer_init(struct irqsteer_data *data)
   322	{
   323		/* steer all IRQs into configured channel */
   324		writel_relaxed(BIT(data->channel), data->regs + CHANCTRL);
   325	
   326		/* read back CHANCTRL register cannot reflact on HW register
   327		 * real value due to the HW action, so add one flag here.
   328		 */
   329		data->inited = true;
   330	}
   331	
   332	static void imx_irqsteer_save_regs(struct irqsteer_data *data)
   333	{
   334		int i;
   335	
   336		for (i = 0; i < data->reg_num; i++)
   337			data->saved_reg[i] = readl_relaxed(data->regs +
   338							CHANMASK(i, data->reg_num));
   339	}
   340	
   341	static void imx_irqsteer_restore_regs(struct irqsteer_data *data)
   342	{
   343		int i;
   344	
   345		writel_relaxed(BIT(data->channel), data->regs + CHANCTRL);
   346		for (i = 0; i < data->reg_num; i++)
   347			writel_relaxed(data->saved_reg[i],
   348				       data->regs + CHANMASK(i, data->reg_num));
   349	}
   350	
   351	static int imx_irqsteer_runtime_suspend(struct device *dev)
   352	{
   353		struct irqsteer_data *irqsteer_data = dev_get_drvdata(dev);
   354	
   355		imx_irqsteer_save_regs(irqsteer_data);
   356		clk_disable_unprepare(irqsteer_data->ipg_clk);
   357	
   358		return 0;
   359	}
   360	
   361	static int imx_irqsteer_runtime_resume(struct device *dev)
   362	{
   363		struct irqsteer_data *irqsteer_data = dev_get_drvdata(dev);
   364		int ret;
   365	
   366		ret = clk_prepare_enable(irqsteer_data->ipg_clk);
   367		if (ret) {
   368			dev_err(dev, "failed to enable ipg clk: %d\n", ret);
   369			return ret;
   370		}
   371	
   372		/* don't need restore registers when first sub_irq requested */
   373		if (!irqsteer_data->inited)
   374			imx_irqsteer_init(irqsteer_data);
   375		else
   376			imx_irqsteer_restore_regs(irqsteer_data);
   377	
   378		return 0;
   379	}
   380	#endif
   381	
   382	static const struct dev_pm_ops imx_irqsteer_pm_ops = {
   383		SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
   384					      pm_runtime_force_resume)
 > 385		SET_RUNTIME_PM_OPS(imx_irqsteer_runtime_suspend,
 > 386				   imx_irqsteer_runtime_resume, NULL)
   387	};
   388	

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

                 reply	other threads:[~2023-08-31 14:01 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=202308312133.TMwtVoiO-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=oe-kbuild-all@lists.linux.dev \
    --cc=otavio@ossystems.com.br \
    /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.