All of lore.kernel.org
 help / color / mirror / Atom feed
* [asahilinux:bits/090-spi-hid 14/21] drivers/soc/apple/dockchannel.c:240 dockchannel_init() warn: passing zero to 'dev_err_probe'
@ 2023-11-23  3:16 kernel test robot
  0 siblings, 0 replies; 3+ messages in thread
From: kernel test robot @ 2023-11-23  3:16 UTC (permalink / raw)
  To: oe-kbuild; +Cc: lkp, Dan Carpenter

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
TO: Hector Martin <marcan@marcan.st>

tree:   https://github.com/AsahiLinux/linux bits/090-spi-hid
head:   16871bb3228eaf55cbdb1dfb81c1cecec4ee0d52
commit: 7c1543b965b465df17e43246abe9ef43c4bd8358 [14/21] soc: apple: Add DockChannel driver
:::::: branch date: 4 days ago
:::::: commit date: 9 weeks ago
config: mips-randconfig-r081-20231121 (https://download.01.org/0day-ci/archive/20231123/202311231037.4kh3kwIP-lkp@intel.com/config)
compiler: mips-linux-gcc (GCC) 13.2.0
reproduce: (https://download.01.org/0day-ci/archive/20231123/202311231037.4kh3kwIP-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>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202311231037.4kh3kwIP-lkp@intel.com/

New smatch warnings:
drivers/soc/apple/dockchannel.c:240 dockchannel_init() warn: passing zero to 'dev_err_probe'
drivers/soc/apple/dockchannel.c:358 dockchannel_probe() warn: passing zero to 'dev_err_probe'

Old smatch warnings:
drivers/soc/apple/dockchannel.c:246 dockchannel_init() warn: passing zero to 'dev_err_probe'

vim +/dev_err_probe +240 drivers/soc/apple/dockchannel.c

7c1543b965b465 Hector Martin 2022-07-08  211  
7c1543b965b465 Hector Martin 2022-07-08  212  struct dockchannel *dockchannel_init(struct platform_device *pdev)
7c1543b965b465 Hector Martin 2022-07-08  213  {
7c1543b965b465 Hector Martin 2022-07-08  214  	struct device *dev = &pdev->dev;
7c1543b965b465 Hector Martin 2022-07-08  215  	struct dockchannel *dockchannel;
7c1543b965b465 Hector Martin 2022-07-08  216  	int ret;
7c1543b965b465 Hector Martin 2022-07-08  217  
7c1543b965b465 Hector Martin 2022-07-08  218  	dockchannel = devm_kzalloc(dev, sizeof(*dockchannel), GFP_KERNEL);
7c1543b965b465 Hector Martin 2022-07-08  219  	if (!dockchannel)
7c1543b965b465 Hector Martin 2022-07-08  220  		return ERR_PTR(-ENOMEM);
7c1543b965b465 Hector Martin 2022-07-08  221  
7c1543b965b465 Hector Martin 2022-07-08  222  	dockchannel->dev = dev;
7c1543b965b465 Hector Martin 2022-07-08  223  	dockchannel->config_base = devm_platform_ioremap_resource_byname(pdev, "config");
7c1543b965b465 Hector Martin 2022-07-08  224  	if (IS_ERR(dockchannel->config_base))
7c1543b965b465 Hector Martin 2022-07-08  225  		return (__force void *)dockchannel->config_base;
7c1543b965b465 Hector Martin 2022-07-08  226  
7c1543b965b465 Hector Martin 2022-07-08  227  	dockchannel->data_base = devm_platform_ioremap_resource_byname(pdev, "data");
7c1543b965b465 Hector Martin 2022-07-08  228  	if (IS_ERR(dockchannel->data_base))
7c1543b965b465 Hector Martin 2022-07-08  229  		return (__force void *)dockchannel->data_base;
7c1543b965b465 Hector Martin 2022-07-08  230  
7c1543b965b465 Hector Martin 2022-07-08  231  	ret = of_property_read_u32(dev->of_node, "apple,fifo-size", &dockchannel->fifo_size);
7c1543b965b465 Hector Martin 2022-07-08  232  	if (ret)
7c1543b965b465 Hector Martin 2022-07-08  233  		return ERR_PTR(dev_err_probe(dev, ret, "Missing apple,fifo-size property"));
7c1543b965b465 Hector Martin 2022-07-08  234  
7c1543b965b465 Hector Martin 2022-07-08  235  	init_completion(&dockchannel->tx_comp);
7c1543b965b465 Hector Martin 2022-07-08  236  	init_completion(&dockchannel->rx_comp);
7c1543b965b465 Hector Martin 2022-07-08  237  
7c1543b965b465 Hector Martin 2022-07-08  238  	dockchannel->tx_irq = platform_get_irq_byname(pdev, "tx");
7c1543b965b465 Hector Martin 2022-07-08  239  	if (dockchannel->tx_irq <= 0) {
7c1543b965b465 Hector Martin 2022-07-08 @240  		return ERR_PTR(dev_err_probe(dev, dockchannel->tx_irq,
7c1543b965b465 Hector Martin 2022-07-08  241  				     "Failed to get TX IRQ"));
7c1543b965b465 Hector Martin 2022-07-08  242  	}
7c1543b965b465 Hector Martin 2022-07-08  243  
7c1543b965b465 Hector Martin 2022-07-08  244  	dockchannel->rx_irq = platform_get_irq_byname(pdev, "rx");
7c1543b965b465 Hector Martin 2022-07-08  245  	if (dockchannel->rx_irq <= 0) {
7c1543b965b465 Hector Martin 2022-07-08  246  		return ERR_PTR(dev_err_probe(dev, dockchannel->rx_irq,
7c1543b965b465 Hector Martin 2022-07-08  247  				     "Failed to get RX IRQ"));
7c1543b965b465 Hector Martin 2022-07-08  248  	}
7c1543b965b465 Hector Martin 2022-07-08  249  
7c1543b965b465 Hector Martin 2022-07-08  250  	ret = devm_request_irq(dev, dockchannel->tx_irq, dockchannel_tx_irq, IRQF_NO_AUTOEN,
7c1543b965b465 Hector Martin 2022-07-08  251  			       "apple-dockchannel-tx", dockchannel);
7c1543b965b465 Hector Martin 2022-07-08  252  	if (ret)
7c1543b965b465 Hector Martin 2022-07-08  253  		return ERR_PTR(dev_err_probe(dev, ret, "Failed to request TX IRQ"));
7c1543b965b465 Hector Martin 2022-07-08  254  
7c1543b965b465 Hector Martin 2022-07-08  255  	ret = devm_request_threaded_irq(dev, dockchannel->rx_irq, dockchannel_rx_irq,
7c1543b965b465 Hector Martin 2022-07-08  256  					dockchannel_rx_irq_thread, IRQF_NO_AUTOEN,
7c1543b965b465 Hector Martin 2022-07-08  257  					"apple-dockchannel-rx", dockchannel);
7c1543b965b465 Hector Martin 2022-07-08  258  	if (ret)
7c1543b965b465 Hector Martin 2022-07-08  259  		return ERR_PTR(dev_err_probe(dev, ret, "Failed to request RX IRQ"));
7c1543b965b465 Hector Martin 2022-07-08  260  
7c1543b965b465 Hector Martin 2022-07-08  261  	return dockchannel;
7c1543b965b465 Hector Martin 2022-07-08  262  }
7c1543b965b465 Hector Martin 2022-07-08  263  EXPORT_SYMBOL(dockchannel_init);
7c1543b965b465 Hector Martin 2022-07-08  264  
7c1543b965b465 Hector Martin 2022-07-08  265  
7c1543b965b465 Hector Martin 2022-07-08  266  /* Dockchannel IRQchip */
7c1543b965b465 Hector Martin 2022-07-08  267  
7c1543b965b465 Hector Martin 2022-07-08  268  static void dockchannel_irq(struct irq_desc *desc)
7c1543b965b465 Hector Martin 2022-07-08  269  {
7c1543b965b465 Hector Martin 2022-07-08  270  	unsigned int irq = irq_desc_get_irq(desc);
7c1543b965b465 Hector Martin 2022-07-08  271  	struct irq_chip *chip = irq_desc_get_chip(desc);
7c1543b965b465 Hector Martin 2022-07-08  272  	struct dockchannel_common *dcc = irq_get_handler_data(irq);
7c1543b965b465 Hector Martin 2022-07-08  273  	unsigned long flags = readl_relaxed(dcc->irq_base + IRQ_FLAG);
7c1543b965b465 Hector Martin 2022-07-08  274  	int bit;
7c1543b965b465 Hector Martin 2022-07-08  275  
7c1543b965b465 Hector Martin 2022-07-08  276  	chained_irq_enter(chip, desc);
7c1543b965b465 Hector Martin 2022-07-08  277  
7c1543b965b465 Hector Martin 2022-07-08  278  	for_each_set_bit(bit, &flags, DOCKCHANNEL_MAX_IRQ)
7c1543b965b465 Hector Martin 2022-07-08  279  		generic_handle_domain_irq(dcc->domain, bit);
7c1543b965b465 Hector Martin 2022-07-08  280  
7c1543b965b465 Hector Martin 2022-07-08  281  	chained_irq_exit(chip, desc);
7c1543b965b465 Hector Martin 2022-07-08  282  }
7c1543b965b465 Hector Martin 2022-07-08  283  
7c1543b965b465 Hector Martin 2022-07-08  284  static void dockchannel_irq_ack(struct irq_data *data)
7c1543b965b465 Hector Martin 2022-07-08  285  {
7c1543b965b465 Hector Martin 2022-07-08  286  	struct dockchannel_common *dcc = irq_data_get_irq_chip_data(data);
7c1543b965b465 Hector Martin 2022-07-08  287  	unsigned int hwirq = data->hwirq;
7c1543b965b465 Hector Martin 2022-07-08  288  
7c1543b965b465 Hector Martin 2022-07-08  289  	writel_relaxed(BIT(hwirq), dcc->irq_base + IRQ_FLAG);
7c1543b965b465 Hector Martin 2022-07-08  290  }
7c1543b965b465 Hector Martin 2022-07-08  291  
7c1543b965b465 Hector Martin 2022-07-08  292  static void dockchannel_irq_mask(struct irq_data *data)
7c1543b965b465 Hector Martin 2022-07-08  293  {
7c1543b965b465 Hector Martin 2022-07-08  294  	struct dockchannel_common *dcc = irq_data_get_irq_chip_data(data);
7c1543b965b465 Hector Martin 2022-07-08  295  	unsigned int hwirq = data->hwirq;
7c1543b965b465 Hector Martin 2022-07-08  296  	u32 val = readl_relaxed(dcc->irq_base + IRQ_MASK);
7c1543b965b465 Hector Martin 2022-07-08  297  
7c1543b965b465 Hector Martin 2022-07-08  298  	writel_relaxed(val & ~BIT(hwirq), dcc->irq_base + IRQ_MASK);
7c1543b965b465 Hector Martin 2022-07-08  299  }
7c1543b965b465 Hector Martin 2022-07-08  300  
7c1543b965b465 Hector Martin 2022-07-08  301  static void dockchannel_irq_unmask(struct irq_data *data)
7c1543b965b465 Hector Martin 2022-07-08  302  {
7c1543b965b465 Hector Martin 2022-07-08  303  	struct dockchannel_common *dcc = irq_data_get_irq_chip_data(data);
7c1543b965b465 Hector Martin 2022-07-08  304  	unsigned int hwirq = data->hwirq;
7c1543b965b465 Hector Martin 2022-07-08  305  	u32 val = readl_relaxed(dcc->irq_base + IRQ_MASK);
7c1543b965b465 Hector Martin 2022-07-08  306  
7c1543b965b465 Hector Martin 2022-07-08  307  	writel_relaxed(val | BIT(hwirq), dcc->irq_base + IRQ_MASK);
7c1543b965b465 Hector Martin 2022-07-08  308  }
7c1543b965b465 Hector Martin 2022-07-08  309  
7c1543b965b465 Hector Martin 2022-07-08  310  static const struct irq_chip dockchannel_irqchip = {
7c1543b965b465 Hector Martin 2022-07-08  311  	.name = "dockchannel-irqc",
7c1543b965b465 Hector Martin 2022-07-08  312  	.irq_ack = dockchannel_irq_ack,
7c1543b965b465 Hector Martin 2022-07-08  313  	.irq_mask = dockchannel_irq_mask,
7c1543b965b465 Hector Martin 2022-07-08  314  	.irq_unmask = dockchannel_irq_unmask,
7c1543b965b465 Hector Martin 2022-07-08  315  };
7c1543b965b465 Hector Martin 2022-07-08  316  
7c1543b965b465 Hector Martin 2022-07-08  317  static int dockchannel_irq_domain_map(struct irq_domain *d, unsigned int virq,
7c1543b965b465 Hector Martin 2022-07-08  318  				      irq_hw_number_t hw)
7c1543b965b465 Hector Martin 2022-07-08  319  {
7c1543b965b465 Hector Martin 2022-07-08  320  	irq_set_chip_data(virq, d->host_data);
7c1543b965b465 Hector Martin 2022-07-08  321  	irq_set_chip_and_handler(virq, &dockchannel_irqchip, handle_level_irq);
7c1543b965b465 Hector Martin 2022-07-08  322  
7c1543b965b465 Hector Martin 2022-07-08  323  	return 0;
7c1543b965b465 Hector Martin 2022-07-08  324  }
7c1543b965b465 Hector Martin 2022-07-08  325  
7c1543b965b465 Hector Martin 2022-07-08  326  static const struct irq_domain_ops dockchannel_irq_domain_ops = {
7c1543b965b465 Hector Martin 2022-07-08  327  	.xlate	= irq_domain_xlate_twocell,
7c1543b965b465 Hector Martin 2022-07-08  328  	.map	= dockchannel_irq_domain_map,
7c1543b965b465 Hector Martin 2022-07-08  329  };
7c1543b965b465 Hector Martin 2022-07-08  330  
7c1543b965b465 Hector Martin 2022-07-08  331  static int dockchannel_probe(struct platform_device *pdev)
7c1543b965b465 Hector Martin 2022-07-08  332  {
7c1543b965b465 Hector Martin 2022-07-08  333  	struct device *dev = &pdev->dev;
7c1543b965b465 Hector Martin 2022-07-08  334  	struct dockchannel_common *dcc;
7c1543b965b465 Hector Martin 2022-07-08  335  	struct device_node *child;
7c1543b965b465 Hector Martin 2022-07-08  336  
7c1543b965b465 Hector Martin 2022-07-08  337  	dcc = devm_kzalloc(dev, sizeof(*dcc), GFP_KERNEL);
7c1543b965b465 Hector Martin 2022-07-08  338  	if (!dcc)
7c1543b965b465 Hector Martin 2022-07-08  339  		return -ENOMEM;
7c1543b965b465 Hector Martin 2022-07-08  340  
7c1543b965b465 Hector Martin 2022-07-08  341  	dcc->dev = dev;
7c1543b965b465 Hector Martin 2022-07-08  342  	platform_set_drvdata(pdev, dcc);
7c1543b965b465 Hector Martin 2022-07-08  343  
7c1543b965b465 Hector Martin 2022-07-08  344  	dcc->irq_base = devm_platform_ioremap_resource_byname(pdev, "irq");
7c1543b965b465 Hector Martin 2022-07-08  345  	if (IS_ERR(dcc->irq_base))
7c1543b965b465 Hector Martin 2022-07-08  346  		return PTR_ERR(dcc->irq_base);
7c1543b965b465 Hector Martin 2022-07-08  347  
7c1543b965b465 Hector Martin 2022-07-08  348  	writel_relaxed(0, dcc->irq_base + IRQ_MASK);
7c1543b965b465 Hector Martin 2022-07-08  349  	writel_relaxed(~0, dcc->irq_base + IRQ_FLAG);
7c1543b965b465 Hector Martin 2022-07-08  350  
7c1543b965b465 Hector Martin 2022-07-08  351  	dcc->domain = irq_domain_add_linear(dev->of_node, DOCKCHANNEL_MAX_IRQ,
7c1543b965b465 Hector Martin 2022-07-08  352  					    &dockchannel_irq_domain_ops, dcc);
7c1543b965b465 Hector Martin 2022-07-08  353  	if (!dcc->domain)
7c1543b965b465 Hector Martin 2022-07-08  354  		return -ENOMEM;
7c1543b965b465 Hector Martin 2022-07-08  355  
7c1543b965b465 Hector Martin 2022-07-08  356  	dcc->irq = platform_get_irq(pdev, 0);
7c1543b965b465 Hector Martin 2022-07-08  357  	if (dcc->irq <= 0)
7c1543b965b465 Hector Martin 2022-07-08 @358  		return dev_err_probe(dev, dcc->irq, "Failed to get IRQ");
7c1543b965b465 Hector Martin 2022-07-08  359  
7c1543b965b465 Hector Martin 2022-07-08  360  	irq_set_handler_data(dcc->irq, dcc);
7c1543b965b465 Hector Martin 2022-07-08  361  	irq_set_chained_handler(dcc->irq, dockchannel_irq);
7c1543b965b465 Hector Martin 2022-07-08  362  
7c1543b965b465 Hector Martin 2022-07-08  363  	for_each_child_of_node(dev->of_node, child)
7c1543b965b465 Hector Martin 2022-07-08  364  		of_platform_device_create(child, NULL, dev);
7c1543b965b465 Hector Martin 2022-07-08  365  
7c1543b965b465 Hector Martin 2022-07-08  366  	return 0;
7c1543b965b465 Hector Martin 2022-07-08  367  }
7c1543b965b465 Hector Martin 2022-07-08  368  

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

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [asahilinux:bits/090-spi-hid 14/21] drivers/soc/apple/dockchannel.c:240 dockchannel_init() warn: passing zero to 'dev_err_probe'
@ 2023-11-23  6:20 Dan Carpenter
  0 siblings, 0 replies; 3+ messages in thread
From: Dan Carpenter @ 2023-11-23  6:20 UTC (permalink / raw)
  To: oe-kbuild, Hector Martin; +Cc: lkp, oe-kbuild-all

tree:   https://github.com/AsahiLinux/linux bits/090-spi-hid
head:   16871bb3228eaf55cbdb1dfb81c1cecec4ee0d52
commit: 7c1543b965b465df17e43246abe9ef43c4bd8358 [14/21] soc: apple: Add DockChannel driver
config: mips-randconfig-r081-20231121 (https://download.01.org/0day-ci/archive/20231123/202311231037.4kh3kwIP-lkp@intel.com/config)
compiler: mips-linux-gcc (GCC) 13.2.0
reproduce: (https://download.01.org/0day-ci/archive/20231123/202311231037.4kh3kwIP-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>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202311231037.4kh3kwIP-lkp@intel.com/

New smatch warnings:
drivers/soc/apple/dockchannel.c:240 dockchannel_init() warn: passing zero to 'dev_err_probe'
drivers/soc/apple/dockchannel.c:358 dockchannel_probe() warn: passing zero to 'dev_err_probe'

Old smatch warnings:
drivers/soc/apple/dockchannel.c:246 dockchannel_init() warn: passing zero to 'dev_err_probe'

vim +/dev_err_probe +240 drivers/soc/apple/dockchannel.c

7c1543b965b465 Hector Martin 2022-07-08  212  struct dockchannel *dockchannel_init(struct platform_device *pdev)
7c1543b965b465 Hector Martin 2022-07-08  213  {
7c1543b965b465 Hector Martin 2022-07-08  214  	struct device *dev = &pdev->dev;
7c1543b965b465 Hector Martin 2022-07-08  215  	struct dockchannel *dockchannel;
7c1543b965b465 Hector Martin 2022-07-08  216  	int ret;
7c1543b965b465 Hector Martin 2022-07-08  217  
7c1543b965b465 Hector Martin 2022-07-08  218  	dockchannel = devm_kzalloc(dev, sizeof(*dockchannel), GFP_KERNEL);
7c1543b965b465 Hector Martin 2022-07-08  219  	if (!dockchannel)
7c1543b965b465 Hector Martin 2022-07-08  220  		return ERR_PTR(-ENOMEM);
7c1543b965b465 Hector Martin 2022-07-08  221  
7c1543b965b465 Hector Martin 2022-07-08  222  	dockchannel->dev = dev;
7c1543b965b465 Hector Martin 2022-07-08  223  	dockchannel->config_base = devm_platform_ioremap_resource_byname(pdev, "config");
7c1543b965b465 Hector Martin 2022-07-08  224  	if (IS_ERR(dockchannel->config_base))
7c1543b965b465 Hector Martin 2022-07-08  225  		return (__force void *)dockchannel->config_base;
7c1543b965b465 Hector Martin 2022-07-08  226  
7c1543b965b465 Hector Martin 2022-07-08  227  	dockchannel->data_base = devm_platform_ioremap_resource_byname(pdev, "data");
7c1543b965b465 Hector Martin 2022-07-08  228  	if (IS_ERR(dockchannel->data_base))
7c1543b965b465 Hector Martin 2022-07-08  229  		return (__force void *)dockchannel->data_base;
7c1543b965b465 Hector Martin 2022-07-08  230  
7c1543b965b465 Hector Martin 2022-07-08  231  	ret = of_property_read_u32(dev->of_node, "apple,fifo-size", &dockchannel->fifo_size);
7c1543b965b465 Hector Martin 2022-07-08  232  	if (ret)
7c1543b965b465 Hector Martin 2022-07-08  233  		return ERR_PTR(dev_err_probe(dev, ret, "Missing apple,fifo-size property"));
7c1543b965b465 Hector Martin 2022-07-08  234  
7c1543b965b465 Hector Martin 2022-07-08  235  	init_completion(&dockchannel->tx_comp);
7c1543b965b465 Hector Martin 2022-07-08  236  	init_completion(&dockchannel->rx_comp);
7c1543b965b465 Hector Martin 2022-07-08  237  
7c1543b965b465 Hector Martin 2022-07-08  238  	dockchannel->tx_irq = platform_get_irq_byname(pdev, "tx");
7c1543b965b465 Hector Martin 2022-07-08  239  	if (dockchannel->tx_irq <= 0) {

Change this to < 0.  platform_get_irq_byname() can never return zero.

7c1543b965b465 Hector Martin 2022-07-08 @240  		return ERR_PTR(dev_err_probe(dev, dockchannel->tx_irq,
                                                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Warning.

7c1543b965b465 Hector Martin 2022-07-08  241  				     "Failed to get TX IRQ"));
7c1543b965b465 Hector Martin 2022-07-08  242  	}
7c1543b965b465 Hector Martin 2022-07-08  243  
7c1543b965b465 Hector Martin 2022-07-08  244  	dockchannel->rx_irq = platform_get_irq_byname(pdev, "rx");
7c1543b965b465 Hector Martin 2022-07-08  245  	if (dockchannel->rx_irq <= 0) {
7c1543b965b465 Hector Martin 2022-07-08  246  		return ERR_PTR(dev_err_probe(dev, dockchannel->rx_irq,
7c1543b965b465 Hector Martin 2022-07-08  247  				     "Failed to get RX IRQ"));

[ snip ]

7c1543b965b465 Hector Martin 2022-07-08  344  	dcc->irq_base = devm_platform_ioremap_resource_byname(pdev, "irq");
7c1543b965b465 Hector Martin 2022-07-08  345  	if (IS_ERR(dcc->irq_base))
7c1543b965b465 Hector Martin 2022-07-08  346  		return PTR_ERR(dcc->irq_base);
7c1543b965b465 Hector Martin 2022-07-08  347  
7c1543b965b465 Hector Martin 2022-07-08  348  	writel_relaxed(0, dcc->irq_base + IRQ_MASK);
7c1543b965b465 Hector Martin 2022-07-08  349  	writel_relaxed(~0, dcc->irq_base + IRQ_FLAG);
7c1543b965b465 Hector Martin 2022-07-08  350  
7c1543b965b465 Hector Martin 2022-07-08  351  	dcc->domain = irq_domain_add_linear(dev->of_node, DOCKCHANNEL_MAX_IRQ,
7c1543b965b465 Hector Martin 2022-07-08  352  					    &dockchannel_irq_domain_ops, dcc);
7c1543b965b465 Hector Martin 2022-07-08  353  	if (!dcc->domain)
7c1543b965b465 Hector Martin 2022-07-08  354  		return -ENOMEM;
7c1543b965b465 Hector Martin 2022-07-08  355  
7c1543b965b465 Hector Martin 2022-07-08  356  	dcc->irq = platform_get_irq(pdev, 0);
7c1543b965b465 Hector Martin 2022-07-08  357  	if (dcc->irq <= 0)
7c1543b965b465 Hector Martin 2022-07-08 @358  		return dev_err_probe(dev, dcc->irq, "Failed to get IRQ");

Same thing.  platform_get_irq() can't return zero.

Prior to 2006 these did used to return zero and unfortunately, there
are some legacy get_irq() functions which still do return zero.  I think
the trend is to slowly update them.  Read my blog for more details:
https://staticthinking.wordpress.com/2023/08/07/writing-a-check-for-zero-irq-error-codes/

7c1543b965b465 Hector Martin 2022-07-08  359  
7c1543b965b465 Hector Martin 2022-07-08  360  	irq_set_handler_data(dcc->irq, dcc);
7c1543b965b465 Hector Martin 2022-07-08  361  	irq_set_chained_handler(dcc->irq, dockchannel_irq);
7c1543b965b465 Hector Martin 2022-07-08  362  
7c1543b965b465 Hector Martin 2022-07-08  363  	for_each_child_of_node(dev->of_node, child)
7c1543b965b465 Hector Martin 2022-07-08  364  		of_platform_device_create(child, NULL, dev);
7c1543b965b465 Hector Martin 2022-07-08  365  
7c1543b965b465 Hector Martin 2022-07-08  366  	return 0;
7c1543b965b465 Hector Martin 2022-07-08  367  }

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


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [asahilinux:bits/090-spi-hid 14/21] drivers/soc/apple/dockchannel.c:240 dockchannel_init() warn: passing zero to 'dev_err_probe'
@ 2023-11-25  3:11 kernel test robot
  0 siblings, 0 replies; 3+ messages in thread
From: kernel test robot @ 2023-11-25  3:11 UTC (permalink / raw)
  To: oe-kbuild; +Cc: lkp, Dan Carpenter

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
TO: Hector Martin <marcan@marcan.st>

tree:   https://github.com/AsahiLinux/linux bits/090-spi-hid
head:   16871bb3228eaf55cbdb1dfb81c1cecec4ee0d52
commit: 7c1543b965b465df17e43246abe9ef43c4bd8358 [14/21] soc: apple: Add DockChannel driver
:::::: branch date: 6 days ago
:::::: commit date: 9 weeks ago
config: mips-randconfig-r081-20231121 (https://download.01.org/0day-ci/archive/20231125/202311250933.YsLePo4M-lkp@intel.com/config)
compiler: mips-linux-gcc (GCC) 13.2.0
reproduce: (https://download.01.org/0day-ci/archive/20231125/202311250933.YsLePo4M-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>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202311250933.YsLePo4M-lkp@intel.com/

New smatch warnings:
drivers/soc/apple/dockchannel.c:240 dockchannel_init() warn: passing zero to 'dev_err_probe'
drivers/soc/apple/dockchannel.c:358 dockchannel_probe() warn: passing zero to 'dev_err_probe'

Old smatch warnings:
drivers/soc/apple/dockchannel.c:246 dockchannel_init() warn: passing zero to 'dev_err_probe'

vim +/dev_err_probe +240 drivers/soc/apple/dockchannel.c

7c1543b965b465 Hector Martin 2022-07-08  211  
7c1543b965b465 Hector Martin 2022-07-08  212  struct dockchannel *dockchannel_init(struct platform_device *pdev)
7c1543b965b465 Hector Martin 2022-07-08  213  {
7c1543b965b465 Hector Martin 2022-07-08  214  	struct device *dev = &pdev->dev;
7c1543b965b465 Hector Martin 2022-07-08  215  	struct dockchannel *dockchannel;
7c1543b965b465 Hector Martin 2022-07-08  216  	int ret;
7c1543b965b465 Hector Martin 2022-07-08  217  
7c1543b965b465 Hector Martin 2022-07-08  218  	dockchannel = devm_kzalloc(dev, sizeof(*dockchannel), GFP_KERNEL);
7c1543b965b465 Hector Martin 2022-07-08  219  	if (!dockchannel)
7c1543b965b465 Hector Martin 2022-07-08  220  		return ERR_PTR(-ENOMEM);
7c1543b965b465 Hector Martin 2022-07-08  221  
7c1543b965b465 Hector Martin 2022-07-08  222  	dockchannel->dev = dev;
7c1543b965b465 Hector Martin 2022-07-08  223  	dockchannel->config_base = devm_platform_ioremap_resource_byname(pdev, "config");
7c1543b965b465 Hector Martin 2022-07-08  224  	if (IS_ERR(dockchannel->config_base))
7c1543b965b465 Hector Martin 2022-07-08  225  		return (__force void *)dockchannel->config_base;
7c1543b965b465 Hector Martin 2022-07-08  226  
7c1543b965b465 Hector Martin 2022-07-08  227  	dockchannel->data_base = devm_platform_ioremap_resource_byname(pdev, "data");
7c1543b965b465 Hector Martin 2022-07-08  228  	if (IS_ERR(dockchannel->data_base))
7c1543b965b465 Hector Martin 2022-07-08  229  		return (__force void *)dockchannel->data_base;
7c1543b965b465 Hector Martin 2022-07-08  230  
7c1543b965b465 Hector Martin 2022-07-08  231  	ret = of_property_read_u32(dev->of_node, "apple,fifo-size", &dockchannel->fifo_size);
7c1543b965b465 Hector Martin 2022-07-08  232  	if (ret)
7c1543b965b465 Hector Martin 2022-07-08  233  		return ERR_PTR(dev_err_probe(dev, ret, "Missing apple,fifo-size property"));
7c1543b965b465 Hector Martin 2022-07-08  234  
7c1543b965b465 Hector Martin 2022-07-08  235  	init_completion(&dockchannel->tx_comp);
7c1543b965b465 Hector Martin 2022-07-08  236  	init_completion(&dockchannel->rx_comp);
7c1543b965b465 Hector Martin 2022-07-08  237  
7c1543b965b465 Hector Martin 2022-07-08  238  	dockchannel->tx_irq = platform_get_irq_byname(pdev, "tx");
7c1543b965b465 Hector Martin 2022-07-08  239  	if (dockchannel->tx_irq <= 0) {
7c1543b965b465 Hector Martin 2022-07-08 @240  		return ERR_PTR(dev_err_probe(dev, dockchannel->tx_irq,
7c1543b965b465 Hector Martin 2022-07-08  241  				     "Failed to get TX IRQ"));
7c1543b965b465 Hector Martin 2022-07-08  242  	}
7c1543b965b465 Hector Martin 2022-07-08  243  
7c1543b965b465 Hector Martin 2022-07-08  244  	dockchannel->rx_irq = platform_get_irq_byname(pdev, "rx");
7c1543b965b465 Hector Martin 2022-07-08  245  	if (dockchannel->rx_irq <= 0) {
7c1543b965b465 Hector Martin 2022-07-08  246  		return ERR_PTR(dev_err_probe(dev, dockchannel->rx_irq,
7c1543b965b465 Hector Martin 2022-07-08  247  				     "Failed to get RX IRQ"));
7c1543b965b465 Hector Martin 2022-07-08  248  	}
7c1543b965b465 Hector Martin 2022-07-08  249  
7c1543b965b465 Hector Martin 2022-07-08  250  	ret = devm_request_irq(dev, dockchannel->tx_irq, dockchannel_tx_irq, IRQF_NO_AUTOEN,
7c1543b965b465 Hector Martin 2022-07-08  251  			       "apple-dockchannel-tx", dockchannel);
7c1543b965b465 Hector Martin 2022-07-08  252  	if (ret)
7c1543b965b465 Hector Martin 2022-07-08  253  		return ERR_PTR(dev_err_probe(dev, ret, "Failed to request TX IRQ"));
7c1543b965b465 Hector Martin 2022-07-08  254  
7c1543b965b465 Hector Martin 2022-07-08  255  	ret = devm_request_threaded_irq(dev, dockchannel->rx_irq, dockchannel_rx_irq,
7c1543b965b465 Hector Martin 2022-07-08  256  					dockchannel_rx_irq_thread, IRQF_NO_AUTOEN,
7c1543b965b465 Hector Martin 2022-07-08  257  					"apple-dockchannel-rx", dockchannel);
7c1543b965b465 Hector Martin 2022-07-08  258  	if (ret)
7c1543b965b465 Hector Martin 2022-07-08  259  		return ERR_PTR(dev_err_probe(dev, ret, "Failed to request RX IRQ"));
7c1543b965b465 Hector Martin 2022-07-08  260  
7c1543b965b465 Hector Martin 2022-07-08  261  	return dockchannel;
7c1543b965b465 Hector Martin 2022-07-08  262  }
7c1543b965b465 Hector Martin 2022-07-08  263  EXPORT_SYMBOL(dockchannel_init);
7c1543b965b465 Hector Martin 2022-07-08  264  
7c1543b965b465 Hector Martin 2022-07-08  265  
7c1543b965b465 Hector Martin 2022-07-08  266  /* Dockchannel IRQchip */
7c1543b965b465 Hector Martin 2022-07-08  267  
7c1543b965b465 Hector Martin 2022-07-08  268  static void dockchannel_irq(struct irq_desc *desc)
7c1543b965b465 Hector Martin 2022-07-08  269  {
7c1543b965b465 Hector Martin 2022-07-08  270  	unsigned int irq = irq_desc_get_irq(desc);
7c1543b965b465 Hector Martin 2022-07-08  271  	struct irq_chip *chip = irq_desc_get_chip(desc);
7c1543b965b465 Hector Martin 2022-07-08  272  	struct dockchannel_common *dcc = irq_get_handler_data(irq);
7c1543b965b465 Hector Martin 2022-07-08  273  	unsigned long flags = readl_relaxed(dcc->irq_base + IRQ_FLAG);
7c1543b965b465 Hector Martin 2022-07-08  274  	int bit;
7c1543b965b465 Hector Martin 2022-07-08  275  
7c1543b965b465 Hector Martin 2022-07-08  276  	chained_irq_enter(chip, desc);
7c1543b965b465 Hector Martin 2022-07-08  277  
7c1543b965b465 Hector Martin 2022-07-08  278  	for_each_set_bit(bit, &flags, DOCKCHANNEL_MAX_IRQ)
7c1543b965b465 Hector Martin 2022-07-08  279  		generic_handle_domain_irq(dcc->domain, bit);
7c1543b965b465 Hector Martin 2022-07-08  280  
7c1543b965b465 Hector Martin 2022-07-08  281  	chained_irq_exit(chip, desc);
7c1543b965b465 Hector Martin 2022-07-08  282  }
7c1543b965b465 Hector Martin 2022-07-08  283  
7c1543b965b465 Hector Martin 2022-07-08  284  static void dockchannel_irq_ack(struct irq_data *data)
7c1543b965b465 Hector Martin 2022-07-08  285  {
7c1543b965b465 Hector Martin 2022-07-08  286  	struct dockchannel_common *dcc = irq_data_get_irq_chip_data(data);
7c1543b965b465 Hector Martin 2022-07-08  287  	unsigned int hwirq = data->hwirq;
7c1543b965b465 Hector Martin 2022-07-08  288  
7c1543b965b465 Hector Martin 2022-07-08  289  	writel_relaxed(BIT(hwirq), dcc->irq_base + IRQ_FLAG);
7c1543b965b465 Hector Martin 2022-07-08  290  }
7c1543b965b465 Hector Martin 2022-07-08  291  
7c1543b965b465 Hector Martin 2022-07-08  292  static void dockchannel_irq_mask(struct irq_data *data)
7c1543b965b465 Hector Martin 2022-07-08  293  {
7c1543b965b465 Hector Martin 2022-07-08  294  	struct dockchannel_common *dcc = irq_data_get_irq_chip_data(data);
7c1543b965b465 Hector Martin 2022-07-08  295  	unsigned int hwirq = data->hwirq;
7c1543b965b465 Hector Martin 2022-07-08  296  	u32 val = readl_relaxed(dcc->irq_base + IRQ_MASK);
7c1543b965b465 Hector Martin 2022-07-08  297  
7c1543b965b465 Hector Martin 2022-07-08  298  	writel_relaxed(val & ~BIT(hwirq), dcc->irq_base + IRQ_MASK);
7c1543b965b465 Hector Martin 2022-07-08  299  }
7c1543b965b465 Hector Martin 2022-07-08  300  
7c1543b965b465 Hector Martin 2022-07-08  301  static void dockchannel_irq_unmask(struct irq_data *data)
7c1543b965b465 Hector Martin 2022-07-08  302  {
7c1543b965b465 Hector Martin 2022-07-08  303  	struct dockchannel_common *dcc = irq_data_get_irq_chip_data(data);
7c1543b965b465 Hector Martin 2022-07-08  304  	unsigned int hwirq = data->hwirq;
7c1543b965b465 Hector Martin 2022-07-08  305  	u32 val = readl_relaxed(dcc->irq_base + IRQ_MASK);
7c1543b965b465 Hector Martin 2022-07-08  306  
7c1543b965b465 Hector Martin 2022-07-08  307  	writel_relaxed(val | BIT(hwirq), dcc->irq_base + IRQ_MASK);
7c1543b965b465 Hector Martin 2022-07-08  308  }
7c1543b965b465 Hector Martin 2022-07-08  309  
7c1543b965b465 Hector Martin 2022-07-08  310  static const struct irq_chip dockchannel_irqchip = {
7c1543b965b465 Hector Martin 2022-07-08  311  	.name = "dockchannel-irqc",
7c1543b965b465 Hector Martin 2022-07-08  312  	.irq_ack = dockchannel_irq_ack,
7c1543b965b465 Hector Martin 2022-07-08  313  	.irq_mask = dockchannel_irq_mask,
7c1543b965b465 Hector Martin 2022-07-08  314  	.irq_unmask = dockchannel_irq_unmask,
7c1543b965b465 Hector Martin 2022-07-08  315  };
7c1543b965b465 Hector Martin 2022-07-08  316  
7c1543b965b465 Hector Martin 2022-07-08  317  static int dockchannel_irq_domain_map(struct irq_domain *d, unsigned int virq,
7c1543b965b465 Hector Martin 2022-07-08  318  				      irq_hw_number_t hw)
7c1543b965b465 Hector Martin 2022-07-08  319  {
7c1543b965b465 Hector Martin 2022-07-08  320  	irq_set_chip_data(virq, d->host_data);
7c1543b965b465 Hector Martin 2022-07-08  321  	irq_set_chip_and_handler(virq, &dockchannel_irqchip, handle_level_irq);
7c1543b965b465 Hector Martin 2022-07-08  322  
7c1543b965b465 Hector Martin 2022-07-08  323  	return 0;
7c1543b965b465 Hector Martin 2022-07-08  324  }
7c1543b965b465 Hector Martin 2022-07-08  325  
7c1543b965b465 Hector Martin 2022-07-08  326  static const struct irq_domain_ops dockchannel_irq_domain_ops = {
7c1543b965b465 Hector Martin 2022-07-08  327  	.xlate	= irq_domain_xlate_twocell,
7c1543b965b465 Hector Martin 2022-07-08  328  	.map	= dockchannel_irq_domain_map,
7c1543b965b465 Hector Martin 2022-07-08  329  };
7c1543b965b465 Hector Martin 2022-07-08  330  
7c1543b965b465 Hector Martin 2022-07-08  331  static int dockchannel_probe(struct platform_device *pdev)
7c1543b965b465 Hector Martin 2022-07-08  332  {
7c1543b965b465 Hector Martin 2022-07-08  333  	struct device *dev = &pdev->dev;
7c1543b965b465 Hector Martin 2022-07-08  334  	struct dockchannel_common *dcc;
7c1543b965b465 Hector Martin 2022-07-08  335  	struct device_node *child;
7c1543b965b465 Hector Martin 2022-07-08  336  
7c1543b965b465 Hector Martin 2022-07-08  337  	dcc = devm_kzalloc(dev, sizeof(*dcc), GFP_KERNEL);
7c1543b965b465 Hector Martin 2022-07-08  338  	if (!dcc)
7c1543b965b465 Hector Martin 2022-07-08  339  		return -ENOMEM;
7c1543b965b465 Hector Martin 2022-07-08  340  
7c1543b965b465 Hector Martin 2022-07-08  341  	dcc->dev = dev;
7c1543b965b465 Hector Martin 2022-07-08  342  	platform_set_drvdata(pdev, dcc);
7c1543b965b465 Hector Martin 2022-07-08  343  
7c1543b965b465 Hector Martin 2022-07-08  344  	dcc->irq_base = devm_platform_ioremap_resource_byname(pdev, "irq");
7c1543b965b465 Hector Martin 2022-07-08  345  	if (IS_ERR(dcc->irq_base))
7c1543b965b465 Hector Martin 2022-07-08  346  		return PTR_ERR(dcc->irq_base);
7c1543b965b465 Hector Martin 2022-07-08  347  
7c1543b965b465 Hector Martin 2022-07-08  348  	writel_relaxed(0, dcc->irq_base + IRQ_MASK);
7c1543b965b465 Hector Martin 2022-07-08  349  	writel_relaxed(~0, dcc->irq_base + IRQ_FLAG);
7c1543b965b465 Hector Martin 2022-07-08  350  
7c1543b965b465 Hector Martin 2022-07-08  351  	dcc->domain = irq_domain_add_linear(dev->of_node, DOCKCHANNEL_MAX_IRQ,
7c1543b965b465 Hector Martin 2022-07-08  352  					    &dockchannel_irq_domain_ops, dcc);
7c1543b965b465 Hector Martin 2022-07-08  353  	if (!dcc->domain)
7c1543b965b465 Hector Martin 2022-07-08  354  		return -ENOMEM;
7c1543b965b465 Hector Martin 2022-07-08  355  
7c1543b965b465 Hector Martin 2022-07-08  356  	dcc->irq = platform_get_irq(pdev, 0);
7c1543b965b465 Hector Martin 2022-07-08  357  	if (dcc->irq <= 0)
7c1543b965b465 Hector Martin 2022-07-08 @358  		return dev_err_probe(dev, dcc->irq, "Failed to get IRQ");
7c1543b965b465 Hector Martin 2022-07-08  359  
7c1543b965b465 Hector Martin 2022-07-08  360  	irq_set_handler_data(dcc->irq, dcc);
7c1543b965b465 Hector Martin 2022-07-08  361  	irq_set_chained_handler(dcc->irq, dockchannel_irq);
7c1543b965b465 Hector Martin 2022-07-08  362  
7c1543b965b465 Hector Martin 2022-07-08  363  	for_each_child_of_node(dev->of_node, child)
7c1543b965b465 Hector Martin 2022-07-08  364  		of_platform_device_create(child, NULL, dev);
7c1543b965b465 Hector Martin 2022-07-08  365  
7c1543b965b465 Hector Martin 2022-07-08  366  	return 0;
7c1543b965b465 Hector Martin 2022-07-08  367  }
7c1543b965b465 Hector Martin 2022-07-08  368  

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

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2023-11-25  3:12 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-11-23  3:16 [asahilinux:bits/090-spi-hid 14/21] drivers/soc/apple/dockchannel.c:240 dockchannel_init() warn: passing zero to 'dev_err_probe' kernel test robot
  -- strict thread matches above, loose matches on Subject: below --
2023-11-23  6:20 Dan Carpenter
2023-11-25  3:11 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.