From: kernel test robot <lkp@intel.com>
To: Kashyap Desai <kashyap.desai@broadcom.com>, linux-scsi@vger.kernel.org
Cc: kbuild-all@lists.01.org, jejb@linux.ibm.com,
martin.petersen@oracle.com, steve.hagan@broadcom.com,
peter.rivera@broadcom.com, mpi3mr-linuxdrv.pdl@broadcom.com,
Kashyap Desai <kashyap.desai@broadcom.com>,
sathya.prakash@broadcom.com
Subject: Re: [PATCH 02/24] mpi3mr: base driver code
Date: Sun, 27 Dec 2020 22:14:05 +0800 [thread overview]
Message-ID: <202012272222.YNago1gQ-lkp@intel.com> (raw)
In-Reply-To: <20201222101156.98308-3-kashyap.desai@broadcom.com>
[-- Attachment #1: Type: text/plain, Size: 15114 bytes --]
Hi Kashyap,
I love your patch! Yet something to improve:
[auto build test ERROR on mkp-scsi/for-next]
[also build test ERROR on scsi/for-next v5.10 next-20201223]
[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]
url: https://github.com/0day-ci/linux/commits/Kashyap-Desai/Introducing-mpi3mr-driver/20201222-181732
base: https://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git for-next
config: arc-allyesconfig (attached as .config)
compiler: arceb-elf-gcc (GCC) 9.3.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/0day-ci/linux/commit/f1507bd10ed4f38cbe02ec83c46bcac080b681cb
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Kashyap-Desai/Introducing-mpi3mr-driver/20201222-181732
git checkout f1507bd10ed4f38cbe02ec83c46bcac080b681cb
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=arc
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All error/warnings (new ones prefixed by >>):
drivers/scsi/mpi3mr/mpi3mr_fw.c: In function 'mpi3mr_isr':
drivers/scsi/mpi3mr/mpi3mr_fw.c:315:6: warning: variable 'midx' set but not used [-Wunused-but-set-variable]
315 | u16 midx;
| ^~~~
drivers/scsi/mpi3mr/mpi3mr_fw.c:314:21: warning: variable 'mrioc' set but not used [-Wunused-but-set-variable]
314 | struct mpi3mr_ioc *mrioc;
| ^~~~~
In file included from include/linux/printk.h:7,
from include/linux/kernel.h:16,
from include/linux/list.h:9,
from include/linux/rculist.h:10,
from include/linux/pid.h:5,
from include/linux/sched.h:14,
from include/linux/blkdev.h:5,
from drivers/scsi/mpi3mr/mpi3mr.h:13,
from drivers/scsi/mpi3mr/mpi3mr_fw.c:10:
drivers/scsi/mpi3mr/mpi3mr_fw.c: In function 'mpi3mr_process_factsdata':
include/linux/kern_levels.h:5:18: warning: format '%ld' expects argument of type 'long int', but argument 3 has type 'unsigned int' [-Wformat=]
5 | #define KERN_SOH "\001" /* ASCII Start Of Header */
| ^~~~~~
include/linux/kern_levels.h:12:22: note: in expansion of macro 'KERN_SOH'
12 | #define KERN_WARNING KERN_SOH "4" /* warning conditions */
| ^~~~~~~~
include/linux/printk.h:353:9: note: in expansion of macro 'KERN_WARNING'
353 | printk(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__)
| ^~~~~~~~~~~~
drivers/scsi/mpi3mr/mpi3mr_debug.h:49:2: note: in expansion of macro 'pr_warn'
49 | pr_warn("%s: " fmt, (ioc)->name, ##__VA_ARGS__)
| ^~~~~~~
drivers/scsi/mpi3mr/mpi3mr_fw.c:933:3: note: in expansion of macro 'ioc_warn'
933 | ioc_warn(mrioc,
| ^~~~~~~~
drivers/scsi/mpi3mr/mpi3mr_fw.c:934:49: note: format string is defined here
934 | "IOCFactsdata length mismatch driver_sz(%ld) firmware_sz(%d)\n",
| ~~^
| |
| long int
| %d
drivers/scsi/mpi3mr/mpi3mr_fw.c: In function 'mpi3mr_cleanup_resources':
>> drivers/scsi/mpi3mr/mpi3mr_fw.c:1332:16: warning: passing argument 1 of 'iounmap' discards 'volatile' qualifier from pointer target type [-Wdiscarded-qualifiers]
1332 | iounmap(mrioc->sysif_regs);
| ~~~~~^~~~~~~~~~~~
In file included from include/linux/io.h:13,
from include/linux/irq.h:20,
from include/asm-generic/hardirq.h:13,
from ./arch/arc/include/generated/asm/hardirq.h:1,
from include/linux/hardirq.h:10,
from include/linux/highmem.h:10,
from include/linux/pagemap.h:11,
from include/linux/blkdev.h:14,
from drivers/scsi/mpi3mr/mpi3mr.h:13,
from drivers/scsi/mpi3mr/mpi3mr_fw.c:10:
arch/arc/include/asm/io.h:35:41: note: expected 'const void *' but argument is of type 'volatile Mpi3SysIfRegs_t *' {aka 'volatile struct _MPI3_SYSIF_REGISTERS *'}
35 | extern void iounmap(const void __iomem *addr);
| ~~~~~~~~~~~~~~~~~~~~^~~~
drivers/scsi/mpi3mr/mpi3mr_fw.c: In function 'mpi3mr_init_ioc':
>> drivers/scsi/mpi3mr/mpi3mr_fw.c:1476:14: error: implicit declaration of function 'readq'; did you mean 'readl'? [-Werror=implicit-function-declaration]
1476 | base_info = readq(&mrioc->sysif_regs->IOCInformation);
| ^~~~~
| readl
cc1: some warnings being treated as errors
vim +1476 drivers/scsi/mpi3mr/mpi3mr_fw.c
1315
1316
1317 /**
1318 * mpi3mr_cleanup_resources - Free PCI resources
1319 * @mrioc: Adapter instance reference
1320 *
1321 * Unmap PCI device memory and disable PCI device.
1322 *
1323 * Return: 0 on success and non-zero on failure.
1324 */
1325 void mpi3mr_cleanup_resources(struct mpi3mr_ioc *mrioc)
1326 {
1327 struct pci_dev *pdev = mrioc->pdev;
1328
1329 mpi3mr_cleanup_isr(mrioc);
1330
1331 if (mrioc->sysif_regs) {
> 1332 iounmap(mrioc->sysif_regs);
1333 mrioc->sysif_regs = NULL;
1334 }
1335
1336 if (pci_is_enabled(pdev)) {
1337 if (mrioc->bars)
1338 pci_release_selected_regions(pdev, mrioc->bars);
1339 pci_disable_device(pdev);
1340 }
1341 }
1342
1343 /**
1344 * mpi3mr_setup_resources - Enable PCI resources
1345 * @mrioc: Adapter instance reference
1346 *
1347 * Enable PCI device memory, MSI-x registers and set DMA mask.
1348 *
1349 * Return: 0 on success and non-zero on failure.
1350 */
1351 int mpi3mr_setup_resources(struct mpi3mr_ioc *mrioc)
1352 {
1353 struct pci_dev *pdev = mrioc->pdev;
1354 u32 memap_sz = 0;
1355 int i, retval = 0, capb = 0;
1356 u16 message_control;
1357 u64 dma_mask = mrioc->dma_mask ? mrioc->dma_mask :
1358 (((dma_get_required_mask(&pdev->dev) > DMA_BIT_MASK(32)) &&
1359 (sizeof(dma_addr_t) > 4)) ? DMA_BIT_MASK(64):DMA_BIT_MASK(32));
1360
1361 if (pci_enable_device_mem(pdev)) {
1362 ioc_err(mrioc, "pci_enable_device_mem: failed\n");
1363 retval = -ENODEV;
1364 goto out_failed;
1365 }
1366
1367 capb = pci_find_capability(pdev, PCI_CAP_ID_MSIX);
1368 if (!capb) {
1369 ioc_err(mrioc, "Unable to find MSI-X Capabilities\n");
1370 retval = -ENODEV;
1371 goto out_failed;
1372 }
1373 mrioc->bars = pci_select_bars(pdev, IORESOURCE_MEM);
1374
1375 if (pci_request_selected_regions(pdev, mrioc->bars,
1376 mrioc->driver_name)) {
1377 ioc_err(mrioc, "pci_request_selected_regions: failed\n");
1378 retval = -ENODEV;
1379 goto out_failed;
1380 }
1381
1382 for (i = 0; (i < DEVICE_COUNT_RESOURCE); i++) {
1383 if (pci_resource_flags(pdev, i) & IORESOURCE_MEM) {
1384 mrioc->sysif_regs_phys = pci_resource_start(pdev, i);
1385 memap_sz = pci_resource_len(pdev, i);
1386 mrioc->sysif_regs =
1387 ioremap(mrioc->sysif_regs_phys, memap_sz);
1388 break;
1389 }
1390 }
1391
1392 pci_set_master(pdev);
1393
1394 retval = dma_set_mask_and_coherent(&pdev->dev, dma_mask);
1395 if (retval) {
1396 if (dma_mask != DMA_BIT_MASK(32)) {
1397 ioc_warn(mrioc, "Setting 64 bit DMA mask failed\n");
1398 dma_mask = DMA_BIT_MASK(32);
1399 retval = dma_set_mask_and_coherent(&pdev->dev,
1400 dma_mask);
1401 }
1402 if (retval) {
1403 mrioc->dma_mask = 0;
1404 ioc_err(mrioc, "Setting 32 bit DMA mask also failed\n");
1405 goto out_failed;
1406 }
1407 }
1408 mrioc->dma_mask = dma_mask;
1409
1410 if (mrioc->sysif_regs == NULL) {
1411 ioc_err(mrioc,
1412 "Unable to map adapter memory or resource not found\n");
1413 retval = -EINVAL;
1414 goto out_failed;
1415 }
1416
1417 pci_read_config_word(pdev, capb + 2, &message_control);
1418 mrioc->msix_count = (message_control & 0x3FF) + 1;
1419
1420 pci_save_state(pdev);
1421
1422 pci_set_drvdata(pdev, mrioc->shost);
1423
1424 mpi3mr_ioc_disable_intr(mrioc);
1425
1426 ioc_info(mrioc, "iomem(0x%016llx), mapped(0x%p), size(%d)\n",
1427 (unsigned long long)mrioc->sysif_regs_phys,
1428 mrioc->sysif_regs, memap_sz);
1429 ioc_info(mrioc, "Number of MSI-X vectors found in capabilities: (%d)\n",
1430 mrioc->msix_count);
1431 return retval;
1432
1433 out_failed:
1434 mpi3mr_cleanup_resources(mrioc);
1435 return retval;
1436 }
1437
1438 /**
1439 * mpi3mr_init_ioc - Initialize the controller
1440 * @mrioc: Adapter instance reference
1441 *
1442 * This the controller initialization routine, executed either
1443 * after soft reset or from pci probe callback.
1444 * Setup the required resources, memory map the controller
1445 * registers, create admin and operational reply queue pairs,
1446 * allocate required memory for reply pool, sense buffer pool,
1447 * issue IOC init request to the firmware, unmask the events and
1448 * issue port enable to discover SAS/SATA/NVMe devies and RAID
1449 * volumes.
1450 *
1451 * Return: 0 on success and non-zero on failure.
1452 */
1453 int mpi3mr_init_ioc(struct mpi3mr_ioc *mrioc)
1454 {
1455 int retval = 0;
1456 enum mpi3mr_iocstate ioc_state;
1457 u64 base_info;
1458 u32 timeout;
1459 u32 ioc_status, ioc_config;
1460 Mpi3IOCFactsData_t facts_data;
1461
1462 mrioc->change_count = 0;
1463 mrioc->cpu_count = num_online_cpus();
1464 retval = mpi3mr_setup_resources(mrioc);
1465 if (retval) {
1466 ioc_err(mrioc, "Failed to setup resources:error %d\n",
1467 retval);
1468 goto out_nocleanup;
1469 }
1470 ioc_status = readl(&mrioc->sysif_regs->IOCStatus);
1471 ioc_config = readl(&mrioc->sysif_regs->IOCConfiguration);
1472
1473 ioc_info(mrioc, "SOD status %x configuration %x\n",
1474 ioc_status, ioc_config);
1475
> 1476 base_info = readq(&mrioc->sysif_regs->IOCInformation);
1477 ioc_info(mrioc, "SOD base_info %llx\n", base_info);
1478
1479 /*The timeout value is in 2sec unit, changing it to seconds*/
1480 mrioc->ready_timeout =
1481 ((base_info & MPI3_SYSIF_IOC_INFO_LOW_TIMEOUT_MASK) >>
1482 MPI3_SYSIF_IOC_INFO_LOW_TIMEOUT_SHIFT) * 2;
1483
1484 ioc_info(mrioc, "IOC ready timeout %d\n", mrioc->ready_timeout);
1485
1486 ioc_state = mpi3mr_get_iocstate(mrioc);
1487 ioc_info(mrioc, "IOC in %s state during detection\n",
1488 mpi3mr_iocstate_name(ioc_state));
1489
1490 if (ioc_state == MRIOC_STATE_BECOMING_READY ||
1491 ioc_state == MRIOC_STATE_RESET_REQUESTED) {
1492 timeout = mrioc->ready_timeout * 10;
1493 do {
1494 msleep(100);
1495 } while (--timeout);
1496
1497 ioc_state = mpi3mr_get_iocstate(mrioc);
1498 ioc_info(mrioc,
1499 "IOC in %s state after waiting for reset time\n",
1500 mpi3mr_iocstate_name(ioc_state));
1501 }
1502
1503 if (ioc_state == MRIOC_STATE_READY) {
1504 retval = mpi3mr_issue_and_process_mur(mrioc,
1505 MPI3MR_RESET_FROM_BRINGUP);
1506 if (retval) {
1507 ioc_err(mrioc, "Failed to MU reset IOC error %d\n",
1508 retval);
1509 }
1510 ioc_state = mpi3mr_get_iocstate(mrioc);
1511 }
1512 if (ioc_state != MRIOC_STATE_RESET) {
1513 mpi3mr_print_fault_info(mrioc);
1514 retval = mpi3mr_issue_reset(mrioc,
1515 MPI3_SYSIF_HOST_DIAG_RESET_ACTION_SOFT_RESET,
1516 MPI3MR_RESET_FROM_BRINGUP);
1517 if (retval) {
1518 ioc_err(mrioc,
1519 "%s :Failed to soft reset IOC error %d\n",
1520 __func__, retval);
1521 goto out_failed;
1522 }
1523 }
1524 ioc_state = mpi3mr_get_iocstate(mrioc);
1525 if (ioc_state != MRIOC_STATE_RESET) {
1526 ioc_err(mrioc, "Cannot bring IOC to reset state\n");
1527 goto out_failed;
1528 }
1529
1530 retval = mpi3mr_setup_admin_qpair(mrioc);
1531 if (retval) {
1532 ioc_err(mrioc, "Failed to setup admin Qs: error %d\n",
1533 retval);
1534 goto out_failed;
1535 }
1536
1537 retval = mpi3mr_bring_ioc_ready(mrioc);
1538 if (retval) {
1539 ioc_err(mrioc, "Failed to bring ioc ready: error %d\n",
1540 retval);
1541 goto out_failed;
1542 }
1543
1544 retval = mpi3mr_setup_isr(mrioc, 1);
1545 if (retval) {
1546 ioc_err(mrioc, "Failed to setup ISR error %d\n",
1547 retval);
1548 goto out_failed;
1549 }
1550
1551 retval = mpi3mr_issue_iocfacts(mrioc, &facts_data);
1552 if (retval) {
1553 ioc_err(mrioc, "Failed to Issue IOC Facts %d\n",
1554 retval);
1555 goto out_failed;
1556 }
1557
1558 mpi3mr_process_factsdata(mrioc, &facts_data);
1559 retval = mpi3mr_check_reset_dma_mask(mrioc);
1560 if (retval) {
1561 ioc_err(mrioc, "Resetting dma mask failed %d\n",
1562 retval);
1563 goto out_failed;
1564 }
1565
1566 retval = mpi3mr_alloc_reply_sense_bufs(mrioc);
1567 if (retval) {
1568 ioc_err(mrioc,
1569 "%s :Failed to allocated reply sense buffers %d\n",
1570 __func__, retval);
1571 goto out_failed;
1572 }
1573
1574 retval = mpi3mr_alloc_chain_bufs(mrioc);
1575 if (retval) {
1576 ioc_err(mrioc, "Failed to allocated chain buffers %d\n",
1577 retval);
1578 goto out_failed;
1579 }
1580
1581 retval = mpi3mr_issue_iocinit(mrioc);
1582 if (retval) {
1583 ioc_err(mrioc, "Failed to Issue IOC Init %d\n",
1584 retval);
1585 goto out_failed;
1586 }
1587 mrioc->reply_free_queue_host_index = mrioc->num_reply_bufs;
1588 writel(mrioc->reply_free_queue_host_index,
1589 &mrioc->sysif_regs->ReplyFreeHostIndex);
1590
1591 mrioc->sbq_host_index = mrioc->num_sense_bufs;
1592 writel(mrioc->sbq_host_index,
1593 &mrioc->sysif_regs->SenseBufferFreeHostIndex);
1594
1595 retval = mpi3mr_setup_isr(mrioc, 0);
1596 if (retval) {
1597 ioc_err(mrioc, "Failed to re-setup ISR, error %d\n",
1598 retval);
1599 goto out_failed;
1600 }
1601
1602 return retval;
1603
1604 out_failed:
1605 mpi3mr_cleanup_ioc(mrioc);
1606 out_nocleanup:
1607 return retval;
1608 }
1609
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 66536 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: Re: [PATCH 02/24] mpi3mr: base driver code
Date: Sun, 27 Dec 2020 22:14:05 +0800 [thread overview]
Message-ID: <202012272222.YNago1gQ-lkp@intel.com> (raw)
In-Reply-To: <20201222101156.98308-3-kashyap.desai@broadcom.com>
[-- Attachment #1: Type: text/plain, Size: 15509 bytes --]
Hi Kashyap,
I love your patch! Yet something to improve:
[auto build test ERROR on mkp-scsi/for-next]
[also build test ERROR on scsi/for-next v5.10 next-20201223]
[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]
url: https://github.com/0day-ci/linux/commits/Kashyap-Desai/Introducing-mpi3mr-driver/20201222-181732
base: https://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git for-next
config: arc-allyesconfig (attached as .config)
compiler: arceb-elf-gcc (GCC) 9.3.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/0day-ci/linux/commit/f1507bd10ed4f38cbe02ec83c46bcac080b681cb
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Kashyap-Desai/Introducing-mpi3mr-driver/20201222-181732
git checkout f1507bd10ed4f38cbe02ec83c46bcac080b681cb
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=arc
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All error/warnings (new ones prefixed by >>):
drivers/scsi/mpi3mr/mpi3mr_fw.c: In function 'mpi3mr_isr':
drivers/scsi/mpi3mr/mpi3mr_fw.c:315:6: warning: variable 'midx' set but not used [-Wunused-but-set-variable]
315 | u16 midx;
| ^~~~
drivers/scsi/mpi3mr/mpi3mr_fw.c:314:21: warning: variable 'mrioc' set but not used [-Wunused-but-set-variable]
314 | struct mpi3mr_ioc *mrioc;
| ^~~~~
In file included from include/linux/printk.h:7,
from include/linux/kernel.h:16,
from include/linux/list.h:9,
from include/linux/rculist.h:10,
from include/linux/pid.h:5,
from include/linux/sched.h:14,
from include/linux/blkdev.h:5,
from drivers/scsi/mpi3mr/mpi3mr.h:13,
from drivers/scsi/mpi3mr/mpi3mr_fw.c:10:
drivers/scsi/mpi3mr/mpi3mr_fw.c: In function 'mpi3mr_process_factsdata':
include/linux/kern_levels.h:5:18: warning: format '%ld' expects argument of type 'long int', but argument 3 has type 'unsigned int' [-Wformat=]
5 | #define KERN_SOH "\001" /* ASCII Start Of Header */
| ^~~~~~
include/linux/kern_levels.h:12:22: note: in expansion of macro 'KERN_SOH'
12 | #define KERN_WARNING KERN_SOH "4" /* warning conditions */
| ^~~~~~~~
include/linux/printk.h:353:9: note: in expansion of macro 'KERN_WARNING'
353 | printk(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__)
| ^~~~~~~~~~~~
drivers/scsi/mpi3mr/mpi3mr_debug.h:49:2: note: in expansion of macro 'pr_warn'
49 | pr_warn("%s: " fmt, (ioc)->name, ##__VA_ARGS__)
| ^~~~~~~
drivers/scsi/mpi3mr/mpi3mr_fw.c:933:3: note: in expansion of macro 'ioc_warn'
933 | ioc_warn(mrioc,
| ^~~~~~~~
drivers/scsi/mpi3mr/mpi3mr_fw.c:934:49: note: format string is defined here
934 | "IOCFactsdata length mismatch driver_sz(%ld) firmware_sz(%d)\n",
| ~~^
| |
| long int
| %d
drivers/scsi/mpi3mr/mpi3mr_fw.c: In function 'mpi3mr_cleanup_resources':
>> drivers/scsi/mpi3mr/mpi3mr_fw.c:1332:16: warning: passing argument 1 of 'iounmap' discards 'volatile' qualifier from pointer target type [-Wdiscarded-qualifiers]
1332 | iounmap(mrioc->sysif_regs);
| ~~~~~^~~~~~~~~~~~
In file included from include/linux/io.h:13,
from include/linux/irq.h:20,
from include/asm-generic/hardirq.h:13,
from ./arch/arc/include/generated/asm/hardirq.h:1,
from include/linux/hardirq.h:10,
from include/linux/highmem.h:10,
from include/linux/pagemap.h:11,
from include/linux/blkdev.h:14,
from drivers/scsi/mpi3mr/mpi3mr.h:13,
from drivers/scsi/mpi3mr/mpi3mr_fw.c:10:
arch/arc/include/asm/io.h:35:41: note: expected 'const void *' but argument is of type 'volatile Mpi3SysIfRegs_t *' {aka 'volatile struct _MPI3_SYSIF_REGISTERS *'}
35 | extern void iounmap(const void __iomem *addr);
| ~~~~~~~~~~~~~~~~~~~~^~~~
drivers/scsi/mpi3mr/mpi3mr_fw.c: In function 'mpi3mr_init_ioc':
>> drivers/scsi/mpi3mr/mpi3mr_fw.c:1476:14: error: implicit declaration of function 'readq'; did you mean 'readl'? [-Werror=implicit-function-declaration]
1476 | base_info = readq(&mrioc->sysif_regs->IOCInformation);
| ^~~~~
| readl
cc1: some warnings being treated as errors
vim +1476 drivers/scsi/mpi3mr/mpi3mr_fw.c
1315
1316
1317 /**
1318 * mpi3mr_cleanup_resources - Free PCI resources
1319 * @mrioc: Adapter instance reference
1320 *
1321 * Unmap PCI device memory and disable PCI device.
1322 *
1323 * Return: 0 on success and non-zero on failure.
1324 */
1325 void mpi3mr_cleanup_resources(struct mpi3mr_ioc *mrioc)
1326 {
1327 struct pci_dev *pdev = mrioc->pdev;
1328
1329 mpi3mr_cleanup_isr(mrioc);
1330
1331 if (mrioc->sysif_regs) {
> 1332 iounmap(mrioc->sysif_regs);
1333 mrioc->sysif_regs = NULL;
1334 }
1335
1336 if (pci_is_enabled(pdev)) {
1337 if (mrioc->bars)
1338 pci_release_selected_regions(pdev, mrioc->bars);
1339 pci_disable_device(pdev);
1340 }
1341 }
1342
1343 /**
1344 * mpi3mr_setup_resources - Enable PCI resources
1345 * @mrioc: Adapter instance reference
1346 *
1347 * Enable PCI device memory, MSI-x registers and set DMA mask.
1348 *
1349 * Return: 0 on success and non-zero on failure.
1350 */
1351 int mpi3mr_setup_resources(struct mpi3mr_ioc *mrioc)
1352 {
1353 struct pci_dev *pdev = mrioc->pdev;
1354 u32 memap_sz = 0;
1355 int i, retval = 0, capb = 0;
1356 u16 message_control;
1357 u64 dma_mask = mrioc->dma_mask ? mrioc->dma_mask :
1358 (((dma_get_required_mask(&pdev->dev) > DMA_BIT_MASK(32)) &&
1359 (sizeof(dma_addr_t) > 4)) ? DMA_BIT_MASK(64):DMA_BIT_MASK(32));
1360
1361 if (pci_enable_device_mem(pdev)) {
1362 ioc_err(mrioc, "pci_enable_device_mem: failed\n");
1363 retval = -ENODEV;
1364 goto out_failed;
1365 }
1366
1367 capb = pci_find_capability(pdev, PCI_CAP_ID_MSIX);
1368 if (!capb) {
1369 ioc_err(mrioc, "Unable to find MSI-X Capabilities\n");
1370 retval = -ENODEV;
1371 goto out_failed;
1372 }
1373 mrioc->bars = pci_select_bars(pdev, IORESOURCE_MEM);
1374
1375 if (pci_request_selected_regions(pdev, mrioc->bars,
1376 mrioc->driver_name)) {
1377 ioc_err(mrioc, "pci_request_selected_regions: failed\n");
1378 retval = -ENODEV;
1379 goto out_failed;
1380 }
1381
1382 for (i = 0; (i < DEVICE_COUNT_RESOURCE); i++) {
1383 if (pci_resource_flags(pdev, i) & IORESOURCE_MEM) {
1384 mrioc->sysif_regs_phys = pci_resource_start(pdev, i);
1385 memap_sz = pci_resource_len(pdev, i);
1386 mrioc->sysif_regs =
1387 ioremap(mrioc->sysif_regs_phys, memap_sz);
1388 break;
1389 }
1390 }
1391
1392 pci_set_master(pdev);
1393
1394 retval = dma_set_mask_and_coherent(&pdev->dev, dma_mask);
1395 if (retval) {
1396 if (dma_mask != DMA_BIT_MASK(32)) {
1397 ioc_warn(mrioc, "Setting 64 bit DMA mask failed\n");
1398 dma_mask = DMA_BIT_MASK(32);
1399 retval = dma_set_mask_and_coherent(&pdev->dev,
1400 dma_mask);
1401 }
1402 if (retval) {
1403 mrioc->dma_mask = 0;
1404 ioc_err(mrioc, "Setting 32 bit DMA mask also failed\n");
1405 goto out_failed;
1406 }
1407 }
1408 mrioc->dma_mask = dma_mask;
1409
1410 if (mrioc->sysif_regs == NULL) {
1411 ioc_err(mrioc,
1412 "Unable to map adapter memory or resource not found\n");
1413 retval = -EINVAL;
1414 goto out_failed;
1415 }
1416
1417 pci_read_config_word(pdev, capb + 2, &message_control);
1418 mrioc->msix_count = (message_control & 0x3FF) + 1;
1419
1420 pci_save_state(pdev);
1421
1422 pci_set_drvdata(pdev, mrioc->shost);
1423
1424 mpi3mr_ioc_disable_intr(mrioc);
1425
1426 ioc_info(mrioc, "iomem(0x%016llx), mapped(0x%p), size(%d)\n",
1427 (unsigned long long)mrioc->sysif_regs_phys,
1428 mrioc->sysif_regs, memap_sz);
1429 ioc_info(mrioc, "Number of MSI-X vectors found in capabilities: (%d)\n",
1430 mrioc->msix_count);
1431 return retval;
1432
1433 out_failed:
1434 mpi3mr_cleanup_resources(mrioc);
1435 return retval;
1436 }
1437
1438 /**
1439 * mpi3mr_init_ioc - Initialize the controller
1440 * @mrioc: Adapter instance reference
1441 *
1442 * This the controller initialization routine, executed either
1443 * after soft reset or from pci probe callback.
1444 * Setup the required resources, memory map the controller
1445 * registers, create admin and operational reply queue pairs,
1446 * allocate required memory for reply pool, sense buffer pool,
1447 * issue IOC init request to the firmware, unmask the events and
1448 * issue port enable to discover SAS/SATA/NVMe devies and RAID
1449 * volumes.
1450 *
1451 * Return: 0 on success and non-zero on failure.
1452 */
1453 int mpi3mr_init_ioc(struct mpi3mr_ioc *mrioc)
1454 {
1455 int retval = 0;
1456 enum mpi3mr_iocstate ioc_state;
1457 u64 base_info;
1458 u32 timeout;
1459 u32 ioc_status, ioc_config;
1460 Mpi3IOCFactsData_t facts_data;
1461
1462 mrioc->change_count = 0;
1463 mrioc->cpu_count = num_online_cpus();
1464 retval = mpi3mr_setup_resources(mrioc);
1465 if (retval) {
1466 ioc_err(mrioc, "Failed to setup resources:error %d\n",
1467 retval);
1468 goto out_nocleanup;
1469 }
1470 ioc_status = readl(&mrioc->sysif_regs->IOCStatus);
1471 ioc_config = readl(&mrioc->sysif_regs->IOCConfiguration);
1472
1473 ioc_info(mrioc, "SOD status %x configuration %x\n",
1474 ioc_status, ioc_config);
1475
> 1476 base_info = readq(&mrioc->sysif_regs->IOCInformation);
1477 ioc_info(mrioc, "SOD base_info %llx\n", base_info);
1478
1479 /*The timeout value is in 2sec unit, changing it to seconds*/
1480 mrioc->ready_timeout =
1481 ((base_info & MPI3_SYSIF_IOC_INFO_LOW_TIMEOUT_MASK) >>
1482 MPI3_SYSIF_IOC_INFO_LOW_TIMEOUT_SHIFT) * 2;
1483
1484 ioc_info(mrioc, "IOC ready timeout %d\n", mrioc->ready_timeout);
1485
1486 ioc_state = mpi3mr_get_iocstate(mrioc);
1487 ioc_info(mrioc, "IOC in %s state during detection\n",
1488 mpi3mr_iocstate_name(ioc_state));
1489
1490 if (ioc_state == MRIOC_STATE_BECOMING_READY ||
1491 ioc_state == MRIOC_STATE_RESET_REQUESTED) {
1492 timeout = mrioc->ready_timeout * 10;
1493 do {
1494 msleep(100);
1495 } while (--timeout);
1496
1497 ioc_state = mpi3mr_get_iocstate(mrioc);
1498 ioc_info(mrioc,
1499 "IOC in %s state after waiting for reset time\n",
1500 mpi3mr_iocstate_name(ioc_state));
1501 }
1502
1503 if (ioc_state == MRIOC_STATE_READY) {
1504 retval = mpi3mr_issue_and_process_mur(mrioc,
1505 MPI3MR_RESET_FROM_BRINGUP);
1506 if (retval) {
1507 ioc_err(mrioc, "Failed to MU reset IOC error %d\n",
1508 retval);
1509 }
1510 ioc_state = mpi3mr_get_iocstate(mrioc);
1511 }
1512 if (ioc_state != MRIOC_STATE_RESET) {
1513 mpi3mr_print_fault_info(mrioc);
1514 retval = mpi3mr_issue_reset(mrioc,
1515 MPI3_SYSIF_HOST_DIAG_RESET_ACTION_SOFT_RESET,
1516 MPI3MR_RESET_FROM_BRINGUP);
1517 if (retval) {
1518 ioc_err(mrioc,
1519 "%s :Failed to soft reset IOC error %d\n",
1520 __func__, retval);
1521 goto out_failed;
1522 }
1523 }
1524 ioc_state = mpi3mr_get_iocstate(mrioc);
1525 if (ioc_state != MRIOC_STATE_RESET) {
1526 ioc_err(mrioc, "Cannot bring IOC to reset state\n");
1527 goto out_failed;
1528 }
1529
1530 retval = mpi3mr_setup_admin_qpair(mrioc);
1531 if (retval) {
1532 ioc_err(mrioc, "Failed to setup admin Qs: error %d\n",
1533 retval);
1534 goto out_failed;
1535 }
1536
1537 retval = mpi3mr_bring_ioc_ready(mrioc);
1538 if (retval) {
1539 ioc_err(mrioc, "Failed to bring ioc ready: error %d\n",
1540 retval);
1541 goto out_failed;
1542 }
1543
1544 retval = mpi3mr_setup_isr(mrioc, 1);
1545 if (retval) {
1546 ioc_err(mrioc, "Failed to setup ISR error %d\n",
1547 retval);
1548 goto out_failed;
1549 }
1550
1551 retval = mpi3mr_issue_iocfacts(mrioc, &facts_data);
1552 if (retval) {
1553 ioc_err(mrioc, "Failed to Issue IOC Facts %d\n",
1554 retval);
1555 goto out_failed;
1556 }
1557
1558 mpi3mr_process_factsdata(mrioc, &facts_data);
1559 retval = mpi3mr_check_reset_dma_mask(mrioc);
1560 if (retval) {
1561 ioc_err(mrioc, "Resetting dma mask failed %d\n",
1562 retval);
1563 goto out_failed;
1564 }
1565
1566 retval = mpi3mr_alloc_reply_sense_bufs(mrioc);
1567 if (retval) {
1568 ioc_err(mrioc,
1569 "%s :Failed to allocated reply sense buffers %d\n",
1570 __func__, retval);
1571 goto out_failed;
1572 }
1573
1574 retval = mpi3mr_alloc_chain_bufs(mrioc);
1575 if (retval) {
1576 ioc_err(mrioc, "Failed to allocated chain buffers %d\n",
1577 retval);
1578 goto out_failed;
1579 }
1580
1581 retval = mpi3mr_issue_iocinit(mrioc);
1582 if (retval) {
1583 ioc_err(mrioc, "Failed to Issue IOC Init %d\n",
1584 retval);
1585 goto out_failed;
1586 }
1587 mrioc->reply_free_queue_host_index = mrioc->num_reply_bufs;
1588 writel(mrioc->reply_free_queue_host_index,
1589 &mrioc->sysif_regs->ReplyFreeHostIndex);
1590
1591 mrioc->sbq_host_index = mrioc->num_sense_bufs;
1592 writel(mrioc->sbq_host_index,
1593 &mrioc->sysif_regs->SenseBufferFreeHostIndex);
1594
1595 retval = mpi3mr_setup_isr(mrioc, 0);
1596 if (retval) {
1597 ioc_err(mrioc, "Failed to re-setup ISR, error %d\n",
1598 retval);
1599 goto out_failed;
1600 }
1601
1602 return retval;
1603
1604 out_failed:
1605 mpi3mr_cleanup_ioc(mrioc);
1606 out_nocleanup:
1607 return retval;
1608 }
1609
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 66536 bytes --]
next prev parent reply other threads:[~2020-12-27 14:15 UTC|newest]
Thread overview: 75+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-22 10:11 [PATCH 00/24] Introducing mpi3mr driver Kashyap Desai
2020-12-22 10:11 ` [PATCH 01/24] mpi3mr: add mpi30 Rev-R headers and Kconfig Kashyap Desai
2020-12-22 18:15 ` Bart Van Assche
2020-12-23 13:33 ` Kashyap Desai
2021-02-23 12:30 ` Hannes Reinecke
2021-03-02 18:11 ` Kashyap Desai
2020-12-22 10:11 ` [PATCH 02/24] mpi3mr: base driver code Kashyap Desai
2020-12-27 14:14 ` kernel test robot [this message]
2020-12-27 14:14 ` kernel test robot
2021-02-23 12:55 ` Hannes Reinecke
2021-03-02 18:36 ` Kashyap Desai
2020-12-22 10:11 ` [PATCH 03/24] mpi3mr: create operational request and reply queue pair Kashyap Desai
2020-12-22 18:18 ` Bart Van Assche
2020-12-23 13:16 ` Kashyap Desai
2021-02-28 13:04 ` Hannes Reinecke
2021-03-02 19:05 ` Kashyap Desai
2020-12-22 10:11 ` [PATCH 04/24] mpi3mr: add support of queue command processing Kashyap Desai
2021-02-22 15:23 ` Tomas Henzl
2021-02-25 13:24 ` Kashyap Desai
2021-02-25 14:11 ` Tomas Henzl
2021-02-28 13:22 ` Hannes Reinecke
2021-03-08 18:25 ` Kashyap Desai
2020-12-22 10:11 ` [PATCH 05/24] mpi3mr: add support of internal watchdog thread Kashyap Desai
2021-02-28 13:24 ` Hannes Reinecke
2020-12-22 10:11 ` [PATCH 06/24] mpi3mr: add support of event handling part-1 Kashyap Desai
2020-12-27 13:14 ` kernel test robot
2020-12-27 13:14 ` kernel test robot
2021-02-22 15:31 ` Tomas Henzl
2021-02-25 13:36 ` Kashyap Desai
2021-03-01 6:47 ` Hannes Reinecke
2020-12-22 10:11 ` [PATCH 07/24] mpi3mr: add support of event handling pcie devices part-2 Kashyap Desai
2021-03-01 6:52 ` Hannes Reinecke
2020-12-22 10:11 ` [PATCH 08/24] mpi3mr: add support of event handling part-3 Kashyap Desai
2021-03-01 6:53 ` Hannes Reinecke
2020-12-22 10:11 ` [PATCH 09/24] mpi3mr: add support for recovering controller Kashyap Desai
2021-03-01 6:56 ` Hannes Reinecke
2020-12-22 10:11 ` [PATCH 10/24] mpi3mr: add support of timestamp sync with firmware Kashyap Desai
2021-03-01 6:57 ` Hannes Reinecke
2020-12-22 10:11 ` [PATCH 11/24] mpi3mr: print ioc info for debugging Kashyap Desai
2021-03-01 6:59 ` Hannes Reinecke
2020-12-22 10:11 ` [PATCH 12/24] mpi3mr: add bios_param shost template hook Kashyap Desai
2021-03-01 7:00 ` Hannes Reinecke
2020-12-22 10:11 ` [PATCH 13/24] mpi3mr: implement scsi error handler hooks Kashyap Desai
2021-03-01 7:09 ` Hannes Reinecke
2021-04-16 14:12 ` Kashyap Desai
2021-04-16 14:31 ` Hannes Reinecke
2020-12-22 10:11 ` [PATCH 14/24] mpi3mr: add change queue depth support Kashyap Desai
2021-03-01 7:10 ` Hannes Reinecke
2020-12-22 10:11 ` [PATCH 15/24] mpi3mr: allow certain commands during pci-remove hook Kashyap Desai
2021-03-01 7:11 ` Hannes Reinecke
2020-12-22 10:11 ` [PATCH 16/24] mpi3mr: hardware workaround for UNMAP commands to nvme drives Kashyap Desai
2021-03-01 7:13 ` Hannes Reinecke
2020-12-22 10:11 ` [PATCH 17/24] mpi3mr: add support of threaded isr Kashyap Desai
2020-12-27 13:51 ` kernel test robot
2020-12-27 13:51 ` kernel test robot
2021-03-01 7:14 ` Hannes Reinecke
2020-12-22 10:11 ` [PATCH 18/24] mpi3mr: add complete support of soft reset Kashyap Desai
2021-03-01 7:16 ` Hannes Reinecke
2020-12-22 10:11 ` [PATCH 19/24] mpi3mr: print pending host ios for debug Kashyap Desai
2021-03-01 7:16 ` Hannes Reinecke
2020-12-22 10:11 ` [PATCH 20/24] mpi3mr: wait for pending IO completions upon detection of VD IO timeout Kashyap Desai
2021-03-01 7:17 ` Hannes Reinecke
2020-12-22 10:11 ` [PATCH 21/24] mpi3mr: add support of PM suspend and resume Kashyap Desai
2021-02-22 15:32 ` Tomas Henzl
2021-02-25 13:37 ` Kashyap Desai
2021-03-01 7:18 ` Hannes Reinecke
2020-12-22 10:11 ` [PATCH 22/24] mpi3mr: add support of DSN secure fw check Kashyap Desai
2021-03-01 7:19 ` Hannes Reinecke
2020-12-22 10:11 ` [PATCH 23/24] mpi3mr: add eedp dif dix support Kashyap Desai
2021-02-22 15:37 ` Tomas Henzl
2021-02-25 13:39 ` Kashyap Desai
2021-03-01 7:20 ` Hannes Reinecke
2020-12-22 10:11 ` [PATCH 24/24] mpi3mr: add event handling debug prints Kashyap Desai
2021-03-01 7:20 ` Hannes Reinecke
2021-02-22 15:39 ` [PATCH 00/24] Introducing mpi3mr driver Tomas Henzl
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=202012272222.YNago1gQ-lkp@intel.com \
--to=lkp@intel.com \
--cc=jejb@linux.ibm.com \
--cc=kashyap.desai@broadcom.com \
--cc=kbuild-all@lists.01.org \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=mpi3mr-linuxdrv.pdl@broadcom.com \
--cc=peter.rivera@broadcom.com \
--cc=sathya.prakash@broadcom.com \
--cc=steve.hagan@broadcom.com \
/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.