* [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.