lkml.org 
[lkml]   [2022]   [Aug]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH v1 tty-next 1/2] 8250: microchip: pci1xxxx: Add driver for the quad-uart function in the multi-function endpoint of pci1xxxx device.
Hi Kumaravel,

I love your patch! Perhaps something to improve:

[auto build test WARNING on tty/tty-testing]
[also build test WARNING on linus/master v6.0-rc3 next-20220830]
[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/Kumaravel-Thiagarajan/8250-microchip-pci1xxxx-Add-driver-for-the-pci1xxxx-s-quad-uart-function/20220831-020314
base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git tty-testing
config: m68k-allmodconfig (https://download.01.org/0day-ci/archive/20220831/202208310659.5tM9wAHE-lkp@intel.com/config)
compiler: m68k-linux-gcc (GCC) 12.1.0
reproduce (this is a W=1 build):
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/075ee716bd7ce075396d0539dffa4ae59e6b985a
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Kumaravel-Thiagarajan/8250-microchip-pci1xxxx-Add-driver-for-the-pci1xxxx-s-quad-uart-function/20220831-020314
git checkout 075ee716bd7ce075396d0539dffa4ae59e6b985a
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=m68k SHELL=/bin/bash drivers/tty/serial/8250/

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

drivers/tty/serial/8250/8250_pci1xxxx.c: In function 'mchp_pci1xxxx_setup':
drivers/tty/serial/8250/8250_pci1xxxx.c:289:32: error: assignment to 'void (*)(struct uart_port *, struct ktermios *, const struct ktermios *)' from incompatible pointer type 'void (*)(struct uart_port *, struct ktermios *, struct ktermios *)' [-Werror=incompatible-pointer-types]
289 | port->port.set_termios = mchp_pci1xxxx_set_termios;
| ^
drivers/tty/serial/8250/8250_pci1xxxx.c: At top level:
>> drivers/tty/serial/8250/8250_pci1xxxx.c:301:6: warning: no previous prototype for 'mchp_pci1xxxx_irq_assign' [-Wmissing-prototypes]
301 | void mchp_pci1xxxx_irq_assign(struct pci1xxxx_8250 *priv,
| ^~~~~~~~~~~~~~~~~~~~~~~~
drivers/tty/serial/8250/8250_pci1xxxx.c: In function 'pci1xxxx_serial_probe':
drivers/tty/serial/8250/8250_pci1xxxx.c:395:57: error: 'PCI_IRQ_ALL_TYPES' undeclared (first use in this function)
395 | num_vectors = pci_alloc_irq_vectors(dev, 1, 4, PCI_IRQ_ALL_TYPES);
| ^~~~~~~~~~~~~~~~~
drivers/tty/serial/8250/8250_pci1xxxx.c:395:57: note: each undeclared identifier is reported only once for each function it appears in
drivers/tty/serial/8250/8250_pci1xxxx.c: At top level:
>> drivers/tty/serial/8250/8250_pci1xxxx.c:459:1: warning: data definition has no type or storage class
459 | module_pci_driver(pci1xxxx_pci_driver);
| ^~~~~~~~~~~~~~~~~
drivers/tty/serial/8250/8250_pci1xxxx.c:459:1: error: type defaults to 'int' in declaration of 'module_pci_driver' [-Werror=implicit-int]
>> drivers/tty/serial/8250/8250_pci1xxxx.c:459:1: warning: parameter names (without types) in function declaration
drivers/tty/serial/8250/8250_pci1xxxx.c:452:26: warning: 'pci1xxxx_pci_driver' defined but not used [-Wunused-variable]
452 | static struct pci_driver pci1xxxx_pci_driver = {
| ^~~~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors


vim +/mchp_pci1xxxx_irq_assign +301 drivers/tty/serial/8250/8250_pci1xxxx.c

300
> 301 void mchp_pci1xxxx_irq_assign(struct pci1xxxx_8250 *priv,
302 struct uart_8250_port *uart, int idx)
303 {
304 switch (priv->dev->subsystem_device) {
305 case PCI_SUBDEVICE_ID_MCHP_PCI1XXXX_1p0:
306 case PCI_SUBDEVICE_ID_MCHP_PCI12000:
307 case PCI_SUBDEVICE_ID_MCHP_PCI11010:
308 case PCI_SUBDEVICE_ID_MCHP_PCI11101:
309 case PCI_SUBDEVICE_ID_MCHP_PCI11400:
310 uart->port.irq = pci_irq_vector(priv->dev, 0);
311 break;
312 case PCI_SUBDEVICE_ID_MCHP_PCI1XXXX_1p1:
313 uart->port.irq = pci_irq_vector(priv->dev, 1);
314 break;
315 case PCI_SUBDEVICE_ID_MCHP_PCI1XXXX_1p2:
316 uart->port.irq = pci_irq_vector(priv->dev, 2);
317 break;
318 case PCI_SUBDEVICE_ID_MCHP_PCI1XXXX_1p3:
319 uart->port.irq = pci_irq_vector(priv->dev, 3);
320 break;
321 case PCI_SUBDEVICE_ID_MCHP_PCI1XXXX_2p01:
322 uart->port.irq = pci_irq_vector(priv->dev, idx);
323 break;
324 case PCI_SUBDEVICE_ID_MCHP_PCI1XXXX_2p02:
325 if (idx > 0)
326 idx++;
327 uart->port.irq = pci_irq_vector(priv->dev, idx);
328 break;
329 case PCI_SUBDEVICE_ID_MCHP_PCI1XXXX_2p03:
330 if (idx > 0)
331 idx += 2;
332 uart->port.irq = pci_irq_vector(priv->dev, idx);
333 break;
334 case PCI_SUBDEVICE_ID_MCHP_PCI1XXXX_2p12:
335 uart->port.irq = pci_irq_vector(priv->dev, idx + 1);
336 break;
337 case PCI_SUBDEVICE_ID_MCHP_PCI1XXXX_2p13:
338 if (idx > 0)
339 idx += 1;
340 uart->port.irq = pci_irq_vector(priv->dev, idx + 1);
341 break;
342 case PCI_SUBDEVICE_ID_MCHP_PCI1XXXX_2p23:
343 uart->port.irq = pci_irq_vector(priv->dev, idx + 2);
344 break;
345 case PCI_SUBDEVICE_ID_MCHP_PCI1XXXX_3p012:
346 uart->port.irq = pci_irq_vector(priv->dev, idx);
347 break;
348 case PCI_SUBDEVICE_ID_MCHP_PCI1XXXX_3p013:
349 if (idx > 1)
350 idx++;
351 uart->port.irq = pci_irq_vector(priv->dev, idx);
352 break;
353 case PCI_SUBDEVICE_ID_MCHP_PCI1XXXX_3p023:
354 if (idx > 0)
355 idx++;
356 uart->port.irq = pci_irq_vector(priv->dev, idx);
357 break;
358 case PCI_SUBDEVICE_ID_MCHP_PCI1XXXX_3p123:
359 uart->port.irq = pci_irq_vector(priv->dev, idx + 1);
360 break;
361 case PCI_SUBDEVICE_ID_MCHP_PCI1XXXX_4p:
362 case PCI_SUBDEVICE_ID_MCHP_PCI11414:
363 uart->port.irq = pci_irq_vector(priv->dev, idx);
364 break;
365 }
366 }
367
368 static int pci1xxxx_serial_probe(struct pci_dev *dev,
369 const struct pci_device_id *ent)
370 {
371 struct pci1xxxx_8250 *priv;
372 struct uart_8250_port uart;
373 unsigned int nr_ports, i;
374 int num_vectors = 0;
375 int rc;
376
377 rc = pcim_enable_device(dev);
378 pci_save_state(dev);
379 if (rc)
380 return rc;
381
382 nr_ports = pci1xxxx_get_num_ports(dev);
383
384 priv = devm_kzalloc(&dev->dev, struct_size(priv, line, nr_ports), GFP_KERNEL);
385
386 priv->membase = pcim_iomap(dev, 0, 0);
387 priv->dev = dev;
388 priv->nr = nr_ports;
389
390 if (!priv)
391 return -ENOMEM;
392
393 pci_set_master(dev);
394
395 num_vectors = pci_alloc_irq_vectors(dev, 1, 4, PCI_IRQ_ALL_TYPES);
396 if (num_vectors < 0)
397 return rc;
398
399 memset(&uart, 0, sizeof(uart));
400 uart.port.flags = UPF_SHARE_IRQ | UPF_FIXED_TYPE | UPF_FIXED_PORT;
401 uart.port.uartclk = 48000000;
402 uart.port.dev = &dev->dev;
403
404 if (num_vectors == 4)
405 writeb(UART_PCI_CTRL_SET_MULTIPLE_MSI, (priv->membase + UART_PCI_CTRL_REG));
406 else
407 uart.port.irq = pci_irq_vector(dev, 0);
408
409 for (i = 0; i < nr_ports; i++) {
410 if (num_vectors == 4)
411 mchp_pci1xxxx_irq_assign(priv, &uart, i);
412 rc = mchp_pci1xxxx_setup(priv, &uart, i);
413 if (rc) {
414 dev_err(&dev->dev, "Failed to setup port %u\n", i);
415 break;
416 }
417 priv->line[i] = serial8250_register_8250_port(&uart);
418
419 if (priv->line[i] < 0) {
420 dev_err(&dev->dev,
421 "Couldn't register serial port %lx, irq %d, type %d, error %d\n",
422 uart.port.iobase, uart.port.irq,
423 uart.port.iotype, priv->line[i]);
424 break;
425 }
426 }
427
428 pci_set_drvdata(dev, priv);
429
430 return 0;
431 }
432
433 static void pci1xxxx_serial_remove(struct pci_dev *dev)
434 {
435 struct pci1xxxx_8250 *priv = pci_get_drvdata(dev);
436 int i;
437
438 for (i = 0; i < priv->nr; i++)
439 serial8250_unregister_port(priv->line[i]);
440 }
441
442 static const struct pci_device_id pci1xxxx_pci_tbl[] = {
443 { PCI_DEVICE(PCI_VENDOR_ID_MCHP_PCI1XXXX, PCI_DEVICE_ID_MCHP_PCI11010) },
444 { PCI_DEVICE(PCI_VENDOR_ID_MCHP_PCI1XXXX, PCI_DEVICE_ID_MCHP_PCI11101) },
445 { PCI_DEVICE(PCI_VENDOR_ID_MCHP_PCI1XXXX, PCI_DEVICE_ID_MCHP_PCI11400) },
446 { PCI_DEVICE(PCI_VENDOR_ID_MCHP_PCI1XXXX, PCI_DEVICE_ID_MCHP_PCI11414) },
447 { PCI_DEVICE(PCI_VENDOR_ID_MCHP_PCI1XXXX, PCI_DEVICE_ID_MCHP_PCI12000) },
448 {0,}
449 };
450 MODULE_DEVICE_TABLE(pci, pci1xxxx_pci_tbl);
451
452 static struct pci_driver pci1xxxx_pci_driver = {
453 .name = "pci1xxxx serial",
454 .probe = pci1xxxx_serial_probe,
455 .remove = pci1xxxx_serial_remove,
456 .id_table = pci1xxxx_pci_tbl,
457 };
458
> 459 module_pci_driver(pci1xxxx_pci_driver);
460

--
0-DAY CI Kernel Test Service
https://01.org/lkp

\
 
 \ /
  Last update: 2022-08-31 00:27    [W:0.785 / U:0.440 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site