All of lore.kernel.org
 help / color / mirror / Atom feed
* [freescale-fslc:pr/639 3312/24603] drivers/irqchip/irq-imx-irqsteer.c:193:27: error: use of undeclared identifier 'irqsteer_data'
@ 2023-08-31 14:01 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2023-08-31 14:01 UTC (permalink / raw)
  To: Otavio Salvador; +Cc: oe-kbuild-all

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

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-08-31 14:01 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-08-31 14:01 [freescale-fslc:pr/639 3312/24603] drivers/irqchip/irq-imx-irqsteer.c:193:27: error: use of undeclared identifier 'irqsteer_data' kernel test robot

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.