* [PATCH v2 00/11] skd: various fixes/cleanups
@ 2013-11-05 11:36 Bartlomiej Zolnierkiewicz
2013-11-05 11:36 ` [PATCH v2 01/11] skd: fix unregister_blkdev() placement Bartlomiej Zolnierkiewicz
` (11 more replies)
0 siblings, 12 replies; 13+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2013-11-05 11:36 UTC (permalink / raw)
To: axboe
Cc: abhansali, jmoyer, kyungmin.park, linux-kernel,
Bartlomiej Zolnierkiewicz
Hi,
Here is a bunch of fixes/cleanups for the new skd driver.
Reference to v1:
https://lkml.org/lkml/2013/9/30/279
Changes since v1:
- synced against for-3.13/drivers branch (commit 76c4a6f) of block tree
- dropped no longer needed patch #4 ("skd: alloc flush slab only if some
devices are present"), #12 ("skd: reorder skd_flush_cmd_[en,de]queue()
code") and #14 ("skd: remove skd_bio code")
Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics
Bartlomiej Zolnierkiewicz (11):
skd: fix unregister_blkdev() placement
skd: fix error paths in skd_init()
skd: fix error messages in skd_init()
skd: register block device only if some devices are present
skd: remove SCSI subsystem specific includes
skd: use <asm/unaligned.h>
skd: remove redundant skdev->pdev assignment from skd_pci_probe()
skd: remove SKD_OMIT_FROM_SRC_DIST ifdefs
skd: cleanup skd_do_inq_page_da()
skd: reorder construct/destruct code
skd: fix formatting in skd_s1120.h
drivers/block/skd_main.c | 393 +++++++++++++++++++++-------------------------
drivers/block/skd_s1120.h | 244 +++++++++++++---------------
2 files changed, 286 insertions(+), 351 deletions(-)
--
1.8.2.3
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 01/11] skd: fix unregister_blkdev() placement
2013-11-05 11:36 [PATCH v2 00/11] skd: various fixes/cleanups Bartlomiej Zolnierkiewicz
@ 2013-11-05 11:36 ` Bartlomiej Zolnierkiewicz
2013-11-05 11:37 ` [PATCH v2 02/11] skd: fix error paths in skd_init() Bartlomiej Zolnierkiewicz
` (10 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2013-11-05 11:36 UTC (permalink / raw)
To: axboe
Cc: abhansali, jmoyer, kyungmin.park, linux-kernel,
Bartlomiej Zolnierkiewicz
register_blkdev() is called before pci_register_driver() in skd_init()
so unregister_blkdev() should be called after pci_unregister_driver()
in skd_exit(). Fix it.
Cc: Akhil Bhansali <abhansali@stec-inc.com>
Cc: Jeff Moyer <jmoyer@redhat.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
---
drivers/block/skd_main.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/block/skd_main.c b/drivers/block/skd_main.c
index 5dc5b39..6f09bca 100644
--- a/drivers/block/skd_main.c
+++ b/drivers/block/skd_main.c
@@ -5465,8 +5465,8 @@ static void __exit skd_exit(void)
{
pr_info(PFX " v%s-b%s unloading\n", DRV_VERSION, DRV_BUILD_ID);
- unregister_blkdev(skd_major, DRV_NAME);
pci_unregister_driver(&skd_driver);
+ unregister_blkdev(skd_major, DRV_NAME);
}
module_init(skd_init);
--
1.8.2.3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v2 02/11] skd: fix error paths in skd_init()
2013-11-05 11:36 [PATCH v2 00/11] skd: various fixes/cleanups Bartlomiej Zolnierkiewicz
2013-11-05 11:36 ` [PATCH v2 01/11] skd: fix unregister_blkdev() placement Bartlomiej Zolnierkiewicz
@ 2013-11-05 11:37 ` Bartlomiej Zolnierkiewicz
2013-11-05 11:37 ` [PATCH v2 03/11] skd: fix error messages " Bartlomiej Zolnierkiewicz
` (9 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2013-11-05 11:37 UTC (permalink / raw)
To: axboe
Cc: abhansali, jmoyer, kyungmin.park, linux-kernel,
Bartlomiej Zolnierkiewicz
Cc: Akhil Bhansali <abhansali@stec-inc.com>
Cc: Jeff Moyer <jmoyer@redhat.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
---
drivers/block/skd_main.c | 16 +++++++++++++---
1 file changed, 13 insertions(+), 3 deletions(-)
diff --git a/drivers/block/skd_main.c b/drivers/block/skd_main.c
index 6f09bca..8c96d18 100644
--- a/drivers/block/skd_main.c
+++ b/drivers/block/skd_main.c
@@ -5396,7 +5396,7 @@ static void skd_log_skreq(struct skd_device *skdev,
static int __init skd_init(void)
{
- int rc = 0;
+ int rc = -ENOMEM;
pr_info(PFX " v%s-b%s loaded\n", DRV_VERSION, DRV_BUILD_ID);
@@ -5454,11 +5454,21 @@ static int __init skd_init(void)
/* Obtain major device number. */
rc = register_blkdev(0, DRV_NAME);
if (rc < 0)
- return rc;
+ goto err_register_blkdev;
skd_major = rc;
- return pci_register_driver(&skd_driver);
+ rc = pci_register_driver(&skd_driver);
+ if (rc < 0)
+ goto err_pci_register_driver;
+
+ return rc;
+
+err_pci_register_driver:
+ unregister_blkdev(skd_major, DRV_NAME);
+
+err_register_blkdev:
+ return rc;
}
static void __exit skd_exit(void)
--
1.8.2.3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v2 03/11] skd: fix error messages in skd_init()
2013-11-05 11:36 [PATCH v2 00/11] skd: various fixes/cleanups Bartlomiej Zolnierkiewicz
2013-11-05 11:36 ` [PATCH v2 01/11] skd: fix unregister_blkdev() placement Bartlomiej Zolnierkiewicz
2013-11-05 11:37 ` [PATCH v2 02/11] skd: fix error paths in skd_init() Bartlomiej Zolnierkiewicz
@ 2013-11-05 11:37 ` Bartlomiej Zolnierkiewicz
2013-11-05 11:37 ` [PATCH v2 04/11] skd: register block device only if some devices are present Bartlomiej Zolnierkiewicz
` (8 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2013-11-05 11:37 UTC (permalink / raw)
To: axboe
Cc: abhansali, jmoyer, kyungmin.park, linux-kernel,
Bartlomiej Zolnierkiewicz
* change priority level from KERN_INFO to KERN_ERR
* add "skd: " prefix
* do minor CodingStyle fixes
Cc: Akhil Bhansali <abhansali@stec-inc.com>
Cc: Jeff Moyer <jmoyer@redhat.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
---
drivers/block/skd_main.c | 21 +++++++++------------
1 file changed, 9 insertions(+), 12 deletions(-)
diff --git a/drivers/block/skd_main.c b/drivers/block/skd_main.c
index 8c96d18..99d5d12 100644
--- a/drivers/block/skd_main.c
+++ b/drivers/block/skd_main.c
@@ -5406,47 +5406,44 @@ static int __init skd_init(void)
case SKD_IRQ_MSIX:
break;
default:
- pr_info("skd_isr_type %d invalid, re-set to %d\n",
+ pr_err(PFX "skd_isr_type %d invalid, re-set to %d\n",
skd_isr_type, SKD_IRQ_DEFAULT);
skd_isr_type = SKD_IRQ_DEFAULT;
}
- if (skd_max_queue_depth < 1
- || skd_max_queue_depth > SKD_MAX_QUEUE_DEPTH) {
- pr_info(
- "skd_max_queue_depth %d invalid, re-set to %d\n",
+ if (skd_max_queue_depth < 1 ||
+ skd_max_queue_depth > SKD_MAX_QUEUE_DEPTH) {
+ pr_err(PFX "skd_max_queue_depth %d invalid, re-set to %d\n",
skd_max_queue_depth, SKD_MAX_QUEUE_DEPTH_DEFAULT);
skd_max_queue_depth = SKD_MAX_QUEUE_DEPTH_DEFAULT;
}
if (skd_max_req_per_msg < 1 || skd_max_req_per_msg > 14) {
- pr_info(
- "skd_max_req_per_msg %d invalid, re-set to %d\n",
+ pr_err(PFX "skd_max_req_per_msg %d invalid, re-set to %d\n",
skd_max_req_per_msg, SKD_MAX_REQ_PER_MSG_DEFAULT);
skd_max_req_per_msg = SKD_MAX_REQ_PER_MSG_DEFAULT;
}
if (skd_sgs_per_request < 1 || skd_sgs_per_request > 4096) {
- pr_info(
- "skd_sg_per_request %d invalid, re-set to %d\n",
+ pr_err(PFX "skd_sg_per_request %d invalid, re-set to %d\n",
skd_sgs_per_request, SKD_N_SG_PER_REQ_DEFAULT);
skd_sgs_per_request = SKD_N_SG_PER_REQ_DEFAULT;
}
if (skd_dbg_level < 0 || skd_dbg_level > 2) {
- pr_info("skd_dbg_level %d invalid, re-set to %d\n",
+ pr_err(PFX "skd_dbg_level %d invalid, re-set to %d\n",
skd_dbg_level, 0);
skd_dbg_level = 0;
}
if (skd_isr_comp_limit < 0) {
- pr_info("skd_isr_comp_limit %d invalid, set to %d\n",
+ pr_err(PFX "skd_isr_comp_limit %d invalid, set to %d\n",
skd_isr_comp_limit, 0);
skd_isr_comp_limit = 0;
}
if (skd_max_pass_thru < 1 || skd_max_pass_thru > 50) {
- pr_info("skd_max_pass_thru %d invalid, re-set to %d\n",
+ pr_err(PFX "skd_max_pass_thru %d invalid, re-set to %d\n",
skd_max_pass_thru, SKD_N_SPECIAL_CONTEXT);
skd_max_pass_thru = SKD_N_SPECIAL_CONTEXT;
}
--
1.8.2.3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v2 04/11] skd: register block device only if some devices are present
2013-11-05 11:36 [PATCH v2 00/11] skd: various fixes/cleanups Bartlomiej Zolnierkiewicz
` (2 preceding siblings ...)
2013-11-05 11:37 ` [PATCH v2 03/11] skd: fix error messages " Bartlomiej Zolnierkiewicz
@ 2013-11-05 11:37 ` Bartlomiej Zolnierkiewicz
2013-11-05 11:37 ` [PATCH v2 05/11] skd: remove SCSI subsystem specific includes Bartlomiej Zolnierkiewicz
` (7 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2013-11-05 11:37 UTC (permalink / raw)
To: axboe
Cc: abhansali, jmoyer, kyungmin.park, linux-kernel,
Bartlomiej Zolnierkiewicz
Register block device in skd_pci_probe() instead of in skd_init() so it
is registered only if some devices are present (currently it is always
registered when the driver is loaded). Please note that this change
depends on the fact that register_blkdev(0, ...) never returns 0.
Cc: Akhil Bhansali <abhansali@stec-inc.com>
Cc: Jeff Moyer <jmoyer@redhat.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
---
drivers/block/skd_main.c | 33 ++++++++++++---------------------
1 file changed, 12 insertions(+), 21 deletions(-)
diff --git a/drivers/block/skd_main.c b/drivers/block/skd_main.c
index 99d5d12..9ff34be 100644
--- a/drivers/block/skd_main.c
+++ b/drivers/block/skd_main.c
@@ -4899,6 +4899,14 @@ static int skd_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
}
}
+ if (!skd_major) {
+ rc = register_blkdev(0, DRV_NAME);
+ if (rc < 0)
+ goto err_out_regions;
+ BUG_ON(!rc);
+ skd_major = rc;
+ }
+
skdev = skd_construct(pdev);
if (skdev == NULL) {
rc = -ENOMEM;
@@ -5396,8 +5404,6 @@ static void skd_log_skreq(struct skd_device *skdev,
static int __init skd_init(void)
{
- int rc = -ENOMEM;
-
pr_info(PFX " v%s-b%s loaded\n", DRV_VERSION, DRV_BUILD_ID);
switch (skd_isr_type) {
@@ -5448,24 +5454,7 @@ static int __init skd_init(void)
skd_max_pass_thru = SKD_N_SPECIAL_CONTEXT;
}
- /* Obtain major device number. */
- rc = register_blkdev(0, DRV_NAME);
- if (rc < 0)
- goto err_register_blkdev;
-
- skd_major = rc;
-
- rc = pci_register_driver(&skd_driver);
- if (rc < 0)
- goto err_pci_register_driver;
-
- return rc;
-
-err_pci_register_driver:
- unregister_blkdev(skd_major, DRV_NAME);
-
-err_register_blkdev:
- return rc;
+ return pci_register_driver(&skd_driver);
}
static void __exit skd_exit(void)
@@ -5473,7 +5462,9 @@ static void __exit skd_exit(void)
pr_info(PFX " v%s-b%s unloading\n", DRV_VERSION, DRV_BUILD_ID);
pci_unregister_driver(&skd_driver);
- unregister_blkdev(skd_major, DRV_NAME);
+
+ if (skd_major)
+ unregister_blkdev(skd_major, DRV_NAME);
}
module_init(skd_init);
--
1.8.2.3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v2 05/11] skd: remove SCSI subsystem specific includes
2013-11-05 11:36 [PATCH v2 00/11] skd: various fixes/cleanups Bartlomiej Zolnierkiewicz
` (3 preceding siblings ...)
2013-11-05 11:37 ` [PATCH v2 04/11] skd: register block device only if some devices are present Bartlomiej Zolnierkiewicz
@ 2013-11-05 11:37 ` Bartlomiej Zolnierkiewicz
2013-11-05 11:37 ` [PATCH v2 06/11] skd: use <asm/unaligned.h> Bartlomiej Zolnierkiewicz
` (6 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2013-11-05 11:37 UTC (permalink / raw)
To: axboe
Cc: abhansali, jmoyer, kyungmin.park, linux-kernel,
Bartlomiej Zolnierkiewicz
This is not a SCSI host driver so remove SCSI subsystem specific
includes.
Cc: Akhil Bhansali <abhansali@stec-inc.com>
Cc: Jeff Moyer <jmoyer@redhat.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
---
drivers/block/skd_main.c | 3 ---
1 file changed, 3 deletions(-)
diff --git a/drivers/block/skd_main.c b/drivers/block/skd_main.c
index 9ff34be..47d8a6a 100644
--- a/drivers/block/skd_main.c
+++ b/drivers/block/skd_main.c
@@ -42,9 +42,6 @@
#include <linux/wait.h>
#include <linux/uio.h>
#include <scsi/scsi.h>
-#include <scsi/scsi_host.h>
-#include <scsi/scsi_tcq.h>
-#include <scsi/scsi_cmnd.h>
#include <scsi/sg.h>
#include <linux/io.h>
#include <linux/uaccess.h>
--
1.8.2.3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v2 06/11] skd: use <asm/unaligned.h>
2013-11-05 11:36 [PATCH v2 00/11] skd: various fixes/cleanups Bartlomiej Zolnierkiewicz
` (4 preceding siblings ...)
2013-11-05 11:37 ` [PATCH v2 05/11] skd: remove SCSI subsystem specific includes Bartlomiej Zolnierkiewicz
@ 2013-11-05 11:37 ` Bartlomiej Zolnierkiewicz
2013-11-05 11:37 ` [PATCH v2 07/11] skd: remove redundant skdev->pdev assignment from skd_pci_probe() Bartlomiej Zolnierkiewicz
` (5 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2013-11-05 11:37 UTC (permalink / raw)
To: axboe
Cc: abhansali, jmoyer, kyungmin.park, linux-kernel,
Bartlomiej Zolnierkiewicz
Use <asm/unaligned.h> instead of <asm-generic/unaligned.h>.
Cc: Akhil Bhansali <abhansali@stec-inc.com>
Cc: Jeff Moyer <jmoyer@redhat.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
---
drivers/block/skd_main.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/block/skd_main.c b/drivers/block/skd_main.c
index 47d8a6a..e3dfd0da 100644
--- a/drivers/block/skd_main.c
+++ b/drivers/block/skd_main.c
@@ -45,7 +45,7 @@
#include <scsi/sg.h>
#include <linux/io.h>
#include <linux/uaccess.h>
-#include <asm-generic/unaligned.h>
+#include <asm/unaligned.h>
#include "skd_s1120.h"
--
1.8.2.3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v2 07/11] skd: remove redundant skdev->pdev assignment from skd_pci_probe()
2013-11-05 11:36 [PATCH v2 00/11] skd: various fixes/cleanups Bartlomiej Zolnierkiewicz
` (5 preceding siblings ...)
2013-11-05 11:37 ` [PATCH v2 06/11] skd: use <asm/unaligned.h> Bartlomiej Zolnierkiewicz
@ 2013-11-05 11:37 ` Bartlomiej Zolnierkiewicz
2013-11-05 11:37 ` [PATCH v2 08/11] skd: remove SKD_OMIT_FROM_SRC_DIST ifdefs Bartlomiej Zolnierkiewicz
` (4 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2013-11-05 11:37 UTC (permalink / raw)
To: axboe
Cc: abhansali, jmoyer, kyungmin.park, linux-kernel,
Bartlomiej Zolnierkiewicz
skdev->pdev is set to pdev twice in skd_pci_probe(), first time
through skd_construct() call and the second time directly in
the function. Remove the second assignment as it is not needed.
Cc: Akhil Bhansali <abhansali@stec-inc.com>
Cc: Jeff Moyer <jmoyer@redhat.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
---
drivers/block/skd_main.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/block/skd_main.c b/drivers/block/skd_main.c
index e3dfd0da..70118a1 100644
--- a/drivers/block/skd_main.c
+++ b/drivers/block/skd_main.c
@@ -4925,7 +4925,7 @@ static int skd_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
pci_set_drvdata(pdev, skdev);
- skdev->pdev = pdev;
+
skdev->disk->driverfs_dev = &pdev->dev;
for (i = 0; i < SKD_MAX_BARS; i++) {
--
1.8.2.3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v2 08/11] skd: remove SKD_OMIT_FROM_SRC_DIST ifdefs
2013-11-05 11:36 [PATCH v2 00/11] skd: various fixes/cleanups Bartlomiej Zolnierkiewicz
` (6 preceding siblings ...)
2013-11-05 11:37 ` [PATCH v2 07/11] skd: remove redundant skdev->pdev assignment from skd_pci_probe() Bartlomiej Zolnierkiewicz
@ 2013-11-05 11:37 ` Bartlomiej Zolnierkiewicz
2013-11-05 11:37 ` [PATCH v2 09/11] skd: cleanup skd_do_inq_page_da() Bartlomiej Zolnierkiewicz
` (3 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2013-11-05 11:37 UTC (permalink / raw)
To: axboe
Cc: abhansali, jmoyer, kyungmin.park, linux-kernel,
Bartlomiej Zolnierkiewicz
SKD_OMIT_FROM_SRC_DIST is never defined.
Cc: Akhil Bhansali <abhansali@stec-inc.com>
Cc: Jeff Moyer <jmoyer@redhat.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
---
drivers/block/skd_s1120.h | 14 --------------
1 file changed, 14 deletions(-)
diff --git a/drivers/block/skd_s1120.h b/drivers/block/skd_s1120.h
index bf01941..426581e 100644
--- a/drivers/block/skd_s1120.h
+++ b/drivers/block/skd_s1120.h
@@ -21,11 +21,9 @@
#define FIT_QCMD_QID_MASK (0x3 << 1)
#define FIT_QCMD_QID0 (0x0 << 1)
#define FIT_QCMD_QID_NORMAL FIT_QCMD_QID0
-#ifndef SKD_OMIT_FROM_SRC_DIST
#define FIT_QCMD_QID1 (0x1 << 1)
#define FIT_QCMD_QID2 (0x2 << 1)
#define FIT_QCMD_QID3 (0x3 << 1)
-#endif /* SKD_OMIT_FROM_SRC_DIST */
#define FIT_QCMD_FLUSH_QUEUE (0ull) /* add QID */
#define FIT_QCMD_MSGSIZE_MASK (0x3 << 4)
#define FIT_QCMD_MSGSIZE_64 (0x0 << 4)
@@ -39,13 +37,9 @@
* Control, 32-bit r/w
*/
#define FIT_CONTROL 0x500u
-#ifndef SKD_OMIT_FROM_SRC_DIST
#define FIT_CR_HARD_RESET (1u << 0u)
-#endif /* SKD_OMIT_FROM_SRC_DIST */
#define FIT_CR_SOFT_RESET (1u << 1u)
-#ifndef SKD_OMIT_FROM_SRC_DIST
#define FIT_CR_DIS_TIMESTAMPS (1u << 6u)
-#endif /* SKD_OMIT_FROM_SRC_DIST */
#define FIT_CR_ENABLE_INTERRUPTS (1u << 7u)
/*
@@ -53,10 +47,8 @@
*/
#define FIT_STATUS 0x510u
#define FIT_SR_DRIVE_STATE_MASK 0x000000FFu
-#ifndef SKD_OMIT_FROM_SRC_DIST
#define FIT_SR_SIGNATURE (0xFF << 8)
#define FIT_SR_PIO_DMA (1 << 16)
-#endif /* SKD_OMIT_FROM_SRC_DIST */
#define FIT_SR_DRIVE_OFFLINE 0x00
#define FIT_SR_DRIVE_INIT 0x01
/* #define FIT_SR_DRIVE_READY 0x02 */
@@ -74,14 +66,12 @@
#define FIT_SR_DEVICE_MISSING 0xFF
#define FIT_SR__RESERVED 0xFFFFFF00u
-#ifndef SKD_OMIT_FROM_SRC_DIST
/*
* FIT_STATUS - Status register data definition
*/
#define FIT_SR_STATE_MASK (0xFF << 0)
#define FIT_SR_SIGNATURE (0xFF << 8)
#define FIT_SR_PIO_DMA (1 << 16)
-#endif /* SKD_OMIT_FROM_SRC_DIST */
/*
@@ -189,10 +179,8 @@
#define FIT_MFD_PM_SLEEP 0x17u
#define FIT_MFD_CMD_PROGRESS 0x18u
-#ifndef SKD_OMIT_FROM_SRC_DIST
#define FIT_MTD_DEBUG 0xFEu
#define FIT_MFD_DEBUG 0xFFu
-#endif /* SKD_OMIT_FROM_SRC_DIST */
#define FIT_MFD_MASK (0xFFu)
#define FIT_MFD_DATA_MASK (0xFFu)
@@ -248,7 +236,6 @@ struct fit_msg_hdr {
#define FIT_PROTOCOL_MINOR_VER(mtd_val) ((mtd_val >> 16) & 0xF)
#define FIT_PROTOCOL_MAJOR_VER(mtd_val) ((mtd_val >> 20) & 0xF)
-#ifndef SKD_OMIT_FROM_SRC_DIST
/*
* Format of a completion entry. The completion queue is circular
* and must have at least as many entries as the maximum number
@@ -264,7 +251,6 @@ struct fit_msg_hdr {
* Command_context is opaque and taken verbatim from the SSDI command.
* All other fields are big endian.
*/
-#endif /* SKD_OMIT_FROM_SRC_DIST */
#define FIT_PROTOCOL_VERSION_0 0
/*
--
1.8.2.3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v2 09/11] skd: cleanup skd_do_inq_page_da()
2013-11-05 11:36 [PATCH v2 00/11] skd: various fixes/cleanups Bartlomiej Zolnierkiewicz
` (7 preceding siblings ...)
2013-11-05 11:37 ` [PATCH v2 08/11] skd: remove SKD_OMIT_FROM_SRC_DIST ifdefs Bartlomiej Zolnierkiewicz
@ 2013-11-05 11:37 ` Bartlomiej Zolnierkiewicz
2013-11-05 11:37 ` [PATCH v2 10/11] skd: reorder construct/destruct code Bartlomiej Zolnierkiewicz
` (2 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2013-11-05 11:37 UTC (permalink / raw)
To: axboe
Cc: abhansali, jmoyer, kyungmin.park, linux-kernel,
Bartlomiej Zolnierkiewicz
skdev->pdev and skdev->pdev->bus are always different than NULL in
skd_do_inq_page_da() so simplify the code accordingly.
Also cache skdev->pdev value in pdev variable while at it.
Cc: Akhil Bhansali <abhansali@stec-inc.com>
Cc: Jeff Moyer <jmoyer@redhat.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
---
drivers/block/skd_main.c | 39 +++++++++++++--------------------------
1 file changed, 13 insertions(+), 26 deletions(-)
diff --git a/drivers/block/skd_main.c b/drivers/block/skd_main.c
index 70118a1..2886a8c 100644
--- a/drivers/block/skd_main.c
+++ b/drivers/block/skd_main.c
@@ -2590,6 +2590,7 @@ static void skd_do_inq_page_da(struct skd_device *skdev,
volatile struct fit_comp_error_info *skerr,
uint8_t *cdb, uint8_t *buf)
{
+ struct pci_dev *pdev = skdev->pdev;
unsigned max_bytes;
struct driver_inquiry_data inq;
u16 val;
@@ -2601,36 +2602,22 @@ static void skd_do_inq_page_da(struct skd_device *skdev,
inq.page_code = DRIVER_INQ_EVPD_PAGE_CODE;
- if (skdev->pdev && skdev->pdev->bus) {
- skd_get_link_info(skdev->pdev,
- &inq.pcie_link_speed, &inq.pcie_link_lanes);
- inq.pcie_bus_number = cpu_to_be16(skdev->pdev->bus->number);
- inq.pcie_device_number = PCI_SLOT(skdev->pdev->devfn);
- inq.pcie_function_number = PCI_FUNC(skdev->pdev->devfn);
+ skd_get_link_info(pdev, &inq.pcie_link_speed, &inq.pcie_link_lanes);
+ inq.pcie_bus_number = cpu_to_be16(pdev->bus->number);
+ inq.pcie_device_number = PCI_SLOT(pdev->devfn);
+ inq.pcie_function_number = PCI_FUNC(pdev->devfn);
- pci_read_config_word(skdev->pdev, PCI_VENDOR_ID, &val);
- inq.pcie_vendor_id = cpu_to_be16(val);
+ pci_read_config_word(pdev, PCI_VENDOR_ID, &val);
+ inq.pcie_vendor_id = cpu_to_be16(val);
- pci_read_config_word(skdev->pdev, PCI_DEVICE_ID, &val);
- inq.pcie_device_id = cpu_to_be16(val);
+ pci_read_config_word(pdev, PCI_DEVICE_ID, &val);
+ inq.pcie_device_id = cpu_to_be16(val);
- pci_read_config_word(skdev->pdev, PCI_SUBSYSTEM_VENDOR_ID,
- &val);
- inq.pcie_subsystem_vendor_id = cpu_to_be16(val);
+ pci_read_config_word(pdev, PCI_SUBSYSTEM_VENDOR_ID, &val);
+ inq.pcie_subsystem_vendor_id = cpu_to_be16(val);
- pci_read_config_word(skdev->pdev, PCI_SUBSYSTEM_ID, &val);
- inq.pcie_subsystem_device_id = cpu_to_be16(val);
- } else {
- inq.pcie_bus_number = 0xFFFF;
- inq.pcie_device_number = 0xFF;
- inq.pcie_function_number = 0xFF;
- inq.pcie_link_speed = 0xFF;
- inq.pcie_link_lanes = 0xFF;
- inq.pcie_vendor_id = 0xFFFF;
- inq.pcie_device_id = 0xFFFF;
- inq.pcie_subsystem_vendor_id = 0xFFFF;
- inq.pcie_subsystem_device_id = 0xFFFF;
- }
+ pci_read_config_word(pdev, PCI_SUBSYSTEM_ID, &val);
+ inq.pcie_subsystem_device_id = cpu_to_be16(val);
/* Driver version, fixed lenth, padded with spaces on the right */
inq.driver_version_length = sizeof(inq.driver_version);
--
1.8.2.3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v2 10/11] skd: reorder construct/destruct code
2013-11-05 11:36 [PATCH v2 00/11] skd: various fixes/cleanups Bartlomiej Zolnierkiewicz
` (8 preceding siblings ...)
2013-11-05 11:37 ` [PATCH v2 09/11] skd: cleanup skd_do_inq_page_da() Bartlomiej Zolnierkiewicz
@ 2013-11-05 11:37 ` Bartlomiej Zolnierkiewicz
2013-11-05 11:37 ` [PATCH v2 11/11] skd: fix formatting in skd_s1120.h Bartlomiej Zolnierkiewicz
2013-11-05 16:07 ` [PATCH v2 00/11] skd: various fixes/cleanups Jens Axboe
11 siblings, 0 replies; 13+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2013-11-05 11:37 UTC (permalink / raw)
To: axboe
Cc: abhansali, jmoyer, kyungmin.park, linux-kernel,
Bartlomiej Zolnierkiewicz
Reorder placement of skd_construct(), skd_cons_sg_list(), skd_destruct()
and skd_free_sg_list() functions. Then remove no longer needed function
prototypes.
Cc: Akhil Bhansali <abhansali@stec-inc.com>
Cc: Jeff Moyer <jmoyer@redhat.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
---
drivers/block/skd_main.c | 305 ++++++++++++++++++++++-------------------------
1 file changed, 141 insertions(+), 164 deletions(-)
diff --git a/drivers/block/skd_main.c b/drivers/block/skd_main.c
index 2886a8c..9199c93 100644
--- a/drivers/block/skd_main.c
+++ b/drivers/block/skd_main.c
@@ -449,7 +449,6 @@ MODULE_PARM_DESC(skd_isr_comp_limit, "s1120 isr comp limit (0=none) default=4");
/* Major device number dynamically assigned. */
static u32 skd_major;
-static struct skd_device *skd_construct(struct pci_dev *pdev);
static void skd_destruct(struct skd_device *skdev);
static const struct block_device_operations skd_blockdev_ops;
static void skd_send_fitmsg(struct skd_device *skdev,
@@ -4115,96 +4114,6 @@ static void skd_release_irq(struct skd_device *skdev)
*****************************************************************************
*/
-static int skd_cons_skcomp(struct skd_device *skdev);
-static int skd_cons_skmsg(struct skd_device *skdev);
-static int skd_cons_skreq(struct skd_device *skdev);
-static int skd_cons_skspcl(struct skd_device *skdev);
-static int skd_cons_sksb(struct skd_device *skdev);
-static struct fit_sg_descriptor *skd_cons_sg_list(struct skd_device *skdev,
- u32 n_sg,
- dma_addr_t *ret_dma_addr);
-static int skd_cons_disk(struct skd_device *skdev);
-
-#define SKD_N_DEV_TABLE 16u
-static u32 skd_next_devno;
-
-static struct skd_device *skd_construct(struct pci_dev *pdev)
-{
- struct skd_device *skdev;
- int blk_major = skd_major;
- int rc;
-
- skdev = kzalloc(sizeof(*skdev), GFP_KERNEL);
-
- if (!skdev) {
- pr_err(PFX "(%s): memory alloc failure\n",
- pci_name(pdev));
- return NULL;
- }
-
- skdev->state = SKD_DRVR_STATE_LOAD;
- skdev->pdev = pdev;
- skdev->devno = skd_next_devno++;
- skdev->major = blk_major;
- skdev->irq_type = skd_isr_type;
- sprintf(skdev->name, DRV_NAME "%d", skdev->devno);
- skdev->dev_max_queue_depth = 0;
-
- skdev->num_req_context = skd_max_queue_depth;
- skdev->num_fitmsg_context = skd_max_queue_depth;
- skdev->n_special = skd_max_pass_thru;
- skdev->cur_max_queue_depth = 1;
- skdev->queue_low_water_mark = 1;
- skdev->proto_ver = 99;
- skdev->sgs_per_request = skd_sgs_per_request;
- skdev->dbg_level = skd_dbg_level;
-
- atomic_set(&skdev->device_count, 0);
-
- spin_lock_init(&skdev->lock);
-
- INIT_WORK(&skdev->completion_worker, skd_completion_worker);
-
- pr_debug("%s:%s:%d skcomp\n", skdev->name, __func__, __LINE__);
- rc = skd_cons_skcomp(skdev);
- if (rc < 0)
- goto err_out;
-
- pr_debug("%s:%s:%d skmsg\n", skdev->name, __func__, __LINE__);
- rc = skd_cons_skmsg(skdev);
- if (rc < 0)
- goto err_out;
-
- pr_debug("%s:%s:%d skreq\n", skdev->name, __func__, __LINE__);
- rc = skd_cons_skreq(skdev);
- if (rc < 0)
- goto err_out;
-
- pr_debug("%s:%s:%d skspcl\n", skdev->name, __func__, __LINE__);
- rc = skd_cons_skspcl(skdev);
- if (rc < 0)
- goto err_out;
-
- pr_debug("%s:%s:%d sksb\n", skdev->name, __func__, __LINE__);
- rc = skd_cons_sksb(skdev);
- if (rc < 0)
- goto err_out;
-
- pr_debug("%s:%s:%d disk\n", skdev->name, __func__, __LINE__);
- rc = skd_cons_disk(skdev);
- if (rc < 0)
- goto err_out;
-
- pr_debug("%s:%s:%d VICTORY\n", skdev->name, __func__, __LINE__);
- return skdev;
-
-err_out:
- pr_debug("%s:%s:%d construct failed\n",
- skdev->name, __func__, __LINE__);
- skd_destruct(skdev);
- return NULL;
-}
-
static int skd_cons_skcomp(struct skd_device *skdev)
{
int rc = 0;
@@ -4292,6 +4201,35 @@ err_out:
return rc;
}
+static struct fit_sg_descriptor *skd_cons_sg_list(struct skd_device *skdev,
+ u32 n_sg,
+ dma_addr_t *ret_dma_addr)
+{
+ struct fit_sg_descriptor *sg_list;
+ u32 nbytes;
+
+ nbytes = sizeof(*sg_list) * n_sg;
+
+ sg_list = pci_alloc_consistent(skdev->pdev, nbytes, ret_dma_addr);
+
+ if (sg_list != NULL) {
+ uint64_t dma_address = *ret_dma_addr;
+ u32 i;
+
+ memset(sg_list, 0, nbytes);
+
+ for (i = 0; i < n_sg - 1; i++) {
+ uint64_t ndp_off;
+ ndp_off = (i + 1) * sizeof(struct fit_sg_descriptor);
+
+ sg_list[i].next_desc_ptr = dma_address + ndp_off;
+ }
+ sg_list[i].next_desc_ptr = 0LL;
+ }
+
+ return sg_list;
+}
+
static int skd_cons_skreq(struct skd_device *skdev)
{
int rc = 0;
@@ -4465,35 +4403,6 @@ err_out:
return rc;
}
-static struct fit_sg_descriptor *skd_cons_sg_list(struct skd_device *skdev,
- u32 n_sg,
- dma_addr_t *ret_dma_addr)
-{
- struct fit_sg_descriptor *sg_list;
- u32 nbytes;
-
- nbytes = sizeof(*sg_list) * n_sg;
-
- sg_list = pci_alloc_consistent(skdev->pdev, nbytes, ret_dma_addr);
-
- if (sg_list != NULL) {
- uint64_t dma_address = *ret_dma_addr;
- u32 i;
-
- memset(sg_list, 0, nbytes);
-
- for (i = 0; i < n_sg - 1; i++) {
- uint64_t ndp_off;
- ndp_off = (i + 1) * sizeof(struct fit_sg_descriptor);
-
- sg_list[i].next_desc_ptr = dma_address + ndp_off;
- }
- sg_list[i].next_desc_ptr = 0LL;
- }
-
- return sg_list;
-}
-
static int skd_cons_disk(struct skd_device *skdev)
{
int rc = 0;
@@ -4550,50 +4459,92 @@ err_out:
return rc;
}
-/*
- *****************************************************************************
- * DESTRUCT (FREE)
- *****************************************************************************
- */
-
-static void skd_free_skcomp(struct skd_device *skdev);
-static void skd_free_skmsg(struct skd_device *skdev);
-static void skd_free_skreq(struct skd_device *skdev);
-static void skd_free_skspcl(struct skd_device *skdev);
-static void skd_free_sksb(struct skd_device *skdev);
-static void skd_free_sg_list(struct skd_device *skdev,
- struct fit_sg_descriptor *sg_list,
- u32 n_sg, dma_addr_t dma_addr);
-static void skd_free_disk(struct skd_device *skdev);
+#define SKD_N_DEV_TABLE 16u
+static u32 skd_next_devno;
-static void skd_destruct(struct skd_device *skdev)
+static struct skd_device *skd_construct(struct pci_dev *pdev)
{
- if (skdev == NULL)
- return;
+ struct skd_device *skdev;
+ int blk_major = skd_major;
+ int rc;
+ skdev = kzalloc(sizeof(*skdev), GFP_KERNEL);
- pr_debug("%s:%s:%d disk\n", skdev->name, __func__, __LINE__);
- skd_free_disk(skdev);
+ if (!skdev) {
+ pr_err(PFX "(%s): memory alloc failure\n",
+ pci_name(pdev));
+ return NULL;
+ }
- pr_debug("%s:%s:%d sksb\n", skdev->name, __func__, __LINE__);
- skd_free_sksb(skdev);
+ skdev->state = SKD_DRVR_STATE_LOAD;
+ skdev->pdev = pdev;
+ skdev->devno = skd_next_devno++;
+ skdev->major = blk_major;
+ skdev->irq_type = skd_isr_type;
+ sprintf(skdev->name, DRV_NAME "%d", skdev->devno);
+ skdev->dev_max_queue_depth = 0;
- pr_debug("%s:%s:%d skspcl\n", skdev->name, __func__, __LINE__);
- skd_free_skspcl(skdev);
+ skdev->num_req_context = skd_max_queue_depth;
+ skdev->num_fitmsg_context = skd_max_queue_depth;
+ skdev->n_special = skd_max_pass_thru;
+ skdev->cur_max_queue_depth = 1;
+ skdev->queue_low_water_mark = 1;
+ skdev->proto_ver = 99;
+ skdev->sgs_per_request = skd_sgs_per_request;
+ skdev->dbg_level = skd_dbg_level;
- pr_debug("%s:%s:%d skreq\n", skdev->name, __func__, __LINE__);
- skd_free_skreq(skdev);
+ atomic_set(&skdev->device_count, 0);
- pr_debug("%s:%s:%d skmsg\n", skdev->name, __func__, __LINE__);
- skd_free_skmsg(skdev);
+ spin_lock_init(&skdev->lock);
+
+ INIT_WORK(&skdev->completion_worker, skd_completion_worker);
pr_debug("%s:%s:%d skcomp\n", skdev->name, __func__, __LINE__);
- skd_free_skcomp(skdev);
+ rc = skd_cons_skcomp(skdev);
+ if (rc < 0)
+ goto err_out;
- pr_debug("%s:%s:%d skdev\n", skdev->name, __func__, __LINE__);
- kfree(skdev);
+ pr_debug("%s:%s:%d skmsg\n", skdev->name, __func__, __LINE__);
+ rc = skd_cons_skmsg(skdev);
+ if (rc < 0)
+ goto err_out;
+
+ pr_debug("%s:%s:%d skreq\n", skdev->name, __func__, __LINE__);
+ rc = skd_cons_skreq(skdev);
+ if (rc < 0)
+ goto err_out;
+
+ pr_debug("%s:%s:%d skspcl\n", skdev->name, __func__, __LINE__);
+ rc = skd_cons_skspcl(skdev);
+ if (rc < 0)
+ goto err_out;
+
+ pr_debug("%s:%s:%d sksb\n", skdev->name, __func__, __LINE__);
+ rc = skd_cons_sksb(skdev);
+ if (rc < 0)
+ goto err_out;
+
+ pr_debug("%s:%s:%d disk\n", skdev->name, __func__, __LINE__);
+ rc = skd_cons_disk(skdev);
+ if (rc < 0)
+ goto err_out;
+
+ pr_debug("%s:%s:%d VICTORY\n", skdev->name, __func__, __LINE__);
+ return skdev;
+
+err_out:
+ pr_debug("%s:%s:%d construct failed\n",
+ skdev->name, __func__, __LINE__);
+ skd_destruct(skdev);
+ return NULL;
}
+/*
+ *****************************************************************************
+ * DESTRUCT (FREE)
+ *****************************************************************************
+ */
+
static void skd_free_skcomp(struct skd_device *skdev)
{
if (skdev->skcomp_table != NULL) {
@@ -4636,6 +4587,19 @@ static void skd_free_skmsg(struct skd_device *skdev)
skdev->skmsg_table = NULL;
}
+static void skd_free_sg_list(struct skd_device *skdev,
+ struct fit_sg_descriptor *sg_list,
+ u32 n_sg, dma_addr_t dma_addr)
+{
+ if (sg_list != NULL) {
+ u32 nbytes;
+
+ nbytes = sizeof(*sg_list) * n_sg;
+
+ pci_free_consistent(skdev->pdev, nbytes, sg_list, dma_addr);
+ }
+}
+
static void skd_free_skreq(struct skd_device *skdev)
{
u32 i;
@@ -4732,19 +4696,6 @@ static void skd_free_sksb(struct skd_device *skdev)
skspcl->req.sksg_dma_address = 0;
}
-static void skd_free_sg_list(struct skd_device *skdev,
- struct fit_sg_descriptor *sg_list,
- u32 n_sg, dma_addr_t dma_addr)
-{
- if (sg_list != NULL) {
- u32 nbytes;
-
- nbytes = sizeof(*sg_list) * n_sg;
-
- pci_free_consistent(skdev->pdev, nbytes, sg_list, dma_addr);
- }
-}
-
static void skd_free_disk(struct skd_device *skdev)
{
struct gendisk *disk = skdev->disk;
@@ -4761,7 +4712,33 @@ static void skd_free_disk(struct skd_device *skdev)
skdev->disk = NULL;
}
+static void skd_destruct(struct skd_device *skdev)
+{
+ if (skdev == NULL)
+ return;
+
+
+ pr_debug("%s:%s:%d disk\n", skdev->name, __func__, __LINE__);
+ skd_free_disk(skdev);
+
+ pr_debug("%s:%s:%d sksb\n", skdev->name, __func__, __LINE__);
+ skd_free_sksb(skdev);
+
+ pr_debug("%s:%s:%d skspcl\n", skdev->name, __func__, __LINE__);
+ skd_free_skspcl(skdev);
+
+ pr_debug("%s:%s:%d skreq\n", skdev->name, __func__, __LINE__);
+ skd_free_skreq(skdev);
+
+ pr_debug("%s:%s:%d skmsg\n", skdev->name, __func__, __LINE__);
+ skd_free_skmsg(skdev);
+ pr_debug("%s:%s:%d skcomp\n", skdev->name, __func__, __LINE__);
+ skd_free_skcomp(skdev);
+
+ pr_debug("%s:%s:%d skdev\n", skdev->name, __func__, __LINE__);
+ kfree(skdev);
+}
/*
*****************************************************************************
--
1.8.2.3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v2 11/11] skd: fix formatting in skd_s1120.h
2013-11-05 11:36 [PATCH v2 00/11] skd: various fixes/cleanups Bartlomiej Zolnierkiewicz
` (9 preceding siblings ...)
2013-11-05 11:37 ` [PATCH v2 10/11] skd: reorder construct/destruct code Bartlomiej Zolnierkiewicz
@ 2013-11-05 11:37 ` Bartlomiej Zolnierkiewicz
2013-11-05 16:07 ` [PATCH v2 00/11] skd: various fixes/cleanups Jens Axboe
11 siblings, 0 replies; 13+ messages in thread
From: Bartlomiej Zolnierkiewicz @ 2013-11-05 11:37 UTC (permalink / raw)
To: axboe
Cc: abhansali, jmoyer, kyungmin.park, linux-kernel,
Bartlomiej Zolnierkiewicz
Cc: Akhil Bhansali <abhansali@stec-inc.com>
Cc: Jeff Moyer <jmoyer@redhat.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
---
drivers/block/skd_s1120.h | 230 ++++++++++++++++++++++------------------------
1 file changed, 110 insertions(+), 120 deletions(-)
diff --git a/drivers/block/skd_s1120.h b/drivers/block/skd_s1120.h
index 426581e..61c757f 100644
--- a/drivers/block/skd_s1120.h
+++ b/drivers/block/skd_s1120.h
@@ -17,30 +17,29 @@
/*
* Q-channel, 64-bit r/w
*/
-#define FIT_Q_COMMAND 0x400u
-#define FIT_QCMD_QID_MASK (0x3 << 1)
-#define FIT_QCMD_QID0 (0x0 << 1)
-#define FIT_QCMD_QID_NORMAL FIT_QCMD_QID0
-#define FIT_QCMD_QID1 (0x1 << 1)
-#define FIT_QCMD_QID2 (0x2 << 1)
-#define FIT_QCMD_QID3 (0x3 << 1)
-#define FIT_QCMD_FLUSH_QUEUE (0ull) /* add QID */
-#define FIT_QCMD_MSGSIZE_MASK (0x3 << 4)
-#define FIT_QCMD_MSGSIZE_64 (0x0 << 4)
-#define FIT_QCMD_MSGSIZE_128 (0x1 << 4)
-#define FIT_QCMD_MSGSIZE_256 (0x2 << 4)
-#define FIT_QCMD_MSGSIZE_512 (0x3 << 4)
-#define FIT_QCMD_BASE_ADDRESS_MASK (0xFFFFFFFFFFFFFFC0ull)
-
+#define FIT_Q_COMMAND 0x400u
+#define FIT_QCMD_QID_MASK (0x3 << 1)
+#define FIT_QCMD_QID0 (0x0 << 1)
+#define FIT_QCMD_QID_NORMAL FIT_QCMD_QID0
+#define FIT_QCMD_QID1 (0x1 << 1)
+#define FIT_QCMD_QID2 (0x2 << 1)
+#define FIT_QCMD_QID3 (0x3 << 1)
+#define FIT_QCMD_FLUSH_QUEUE (0ull) /* add QID */
+#define FIT_QCMD_MSGSIZE_MASK (0x3 << 4)
+#define FIT_QCMD_MSGSIZE_64 (0x0 << 4)
+#define FIT_QCMD_MSGSIZE_128 (0x1 << 4)
+#define FIT_QCMD_MSGSIZE_256 (0x2 << 4)
+#define FIT_QCMD_MSGSIZE_512 (0x3 << 4)
+#define FIT_QCMD_BASE_ADDRESS_MASK (0xFFFFFFFFFFFFFFC0ull)
/*
* Control, 32-bit r/w
*/
-#define FIT_CONTROL 0x500u
-#define FIT_CR_HARD_RESET (1u << 0u)
-#define FIT_CR_SOFT_RESET (1u << 1u)
-#define FIT_CR_DIS_TIMESTAMPS (1u << 6u)
-#define FIT_CR_ENABLE_INTERRUPTS (1u << 7u)
+#define FIT_CONTROL 0x500u
+#define FIT_CR_HARD_RESET (1u << 0u)
+#define FIT_CR_SOFT_RESET (1u << 1u)
+#define FIT_CR_DIS_TIMESTAMPS (1u << 6u)
+#define FIT_CR_ENABLE_INTERRUPTS (1u << 7u)
/*
* Status, 32-bit, r/o
@@ -63,88 +62,82 @@
#define FIT_SR_DRIVE_BUSY_ERASE 0x0B
#define FIT_SR_DRIVE_FW_BOOTING 0x0C
#define FIT_SR_DRIVE_NEED_FW_DOWNLOAD 0xFE
-#define FIT_SR_DEVICE_MISSING 0xFF
+#define FIT_SR_DEVICE_MISSING 0xFF
#define FIT_SR__RESERVED 0xFFFFFF00u
/*
* FIT_STATUS - Status register data definition
*/
-#define FIT_SR_STATE_MASK (0xFF << 0)
-#define FIT_SR_SIGNATURE (0xFF << 8)
-#define FIT_SR_PIO_DMA (1 << 16)
-
+#define FIT_SR_STATE_MASK (0xFF << 0)
+#define FIT_SR_SIGNATURE (0xFF << 8)
+#define FIT_SR_PIO_DMA (1 << 16)
/*
* Interrupt status, 32-bit r/w1c (w1c ==> write 1 to clear)
*/
-#define FIT_INT_STATUS_HOST 0x520u
-#define FIT_ISH_FW_STATE_CHANGE (1u << 0u)
-#define FIT_ISH_COMPLETION_POSTED (1u << 1u)
-#define FIT_ISH_MSG_FROM_DEV (1u << 2u)
-#define FIT_ISH_UNDEFINED_3 (1u << 3u)
-#define FIT_ISH_UNDEFINED_4 (1u << 4u)
-#define FIT_ISH_Q0_FULL (1u << 5u)
-#define FIT_ISH_Q1_FULL (1u << 6u)
-#define FIT_ISH_Q2_FULL (1u << 7u)
-#define FIT_ISH_Q3_FULL (1u << 8u)
-#define FIT_ISH_QCMD_FIFO_OVERRUN (1u << 9u)
-#define FIT_ISH_BAD_EXP_ROM_READ (1u << 10u)
-
-
-#define FIT_INT_DEF_MASK \
- (FIT_ISH_FW_STATE_CHANGE | \
- FIT_ISH_COMPLETION_POSTED | \
- FIT_ISH_MSG_FROM_DEV | \
- FIT_ISH_Q0_FULL | \
- FIT_ISH_Q1_FULL | \
- FIT_ISH_Q2_FULL | \
- FIT_ISH_Q3_FULL | \
- FIT_ISH_QCMD_FIFO_OVERRUN | \
- FIT_ISH_BAD_EXP_ROM_READ)
-
-#define FIT_INT_QUEUE_FULL \
- (FIT_ISH_Q0_FULL | \
- FIT_ISH_Q1_FULL | \
- FIT_ISH_Q2_FULL | \
- FIT_ISH_Q3_FULL)
-
-
-#define MSI_MSG_NWL_ERROR_0 0x00000000
-#define MSI_MSG_NWL_ERROR_1 0x00000001
-#define MSI_MSG_NWL_ERROR_2 0x00000002
-#define MSI_MSG_NWL_ERROR_3 0x00000003
-#define MSI_MSG_STATE_CHANGE 0x00000004
-#define MSI_MSG_COMPLETION_POSTED 0x00000005
-#define MSI_MSG_MSG_FROM_DEV 0x00000006
-#define MSI_MSG_RESERVED_0 0x00000007
-#define MSI_MSG_RESERVED_1 0x00000008
-#define MSI_MSG_QUEUE_0_FULL 0x00000009
-#define MSI_MSG_QUEUE_1_FULL 0x0000000A
-#define MSI_MSG_QUEUE_2_FULL 0x0000000B
-#define MSI_MSG_QUEUE_3_FULL 0x0000000C
-
-
-
-#define FIT_INT_RESERVED_MASK \
- (FIT_ISH_UNDEFINED_3 | \
- FIT_ISH_UNDEFINED_4)
+#define FIT_INT_STATUS_HOST 0x520u
+#define FIT_ISH_FW_STATE_CHANGE (1u << 0u)
+#define FIT_ISH_COMPLETION_POSTED (1u << 1u)
+#define FIT_ISH_MSG_FROM_DEV (1u << 2u)
+#define FIT_ISH_UNDEFINED_3 (1u << 3u)
+#define FIT_ISH_UNDEFINED_4 (1u << 4u)
+#define FIT_ISH_Q0_FULL (1u << 5u)
+#define FIT_ISH_Q1_FULL (1u << 6u)
+#define FIT_ISH_Q2_FULL (1u << 7u)
+#define FIT_ISH_Q3_FULL (1u << 8u)
+#define FIT_ISH_QCMD_FIFO_OVERRUN (1u << 9u)
+#define FIT_ISH_BAD_EXP_ROM_READ (1u << 10u)
+
+#define FIT_INT_DEF_MASK \
+ (FIT_ISH_FW_STATE_CHANGE | \
+ FIT_ISH_COMPLETION_POSTED | \
+ FIT_ISH_MSG_FROM_DEV | \
+ FIT_ISH_Q0_FULL | \
+ FIT_ISH_Q1_FULL | \
+ FIT_ISH_Q2_FULL | \
+ FIT_ISH_Q3_FULL | \
+ FIT_ISH_QCMD_FIFO_OVERRUN | \
+ FIT_ISH_BAD_EXP_ROM_READ)
+
+#define FIT_INT_QUEUE_FULL \
+ (FIT_ISH_Q0_FULL | \
+ FIT_ISH_Q1_FULL | \
+ FIT_ISH_Q2_FULL | \
+ FIT_ISH_Q3_FULL)
+
+#define MSI_MSG_NWL_ERROR_0 0x00000000
+#define MSI_MSG_NWL_ERROR_1 0x00000001
+#define MSI_MSG_NWL_ERROR_2 0x00000002
+#define MSI_MSG_NWL_ERROR_3 0x00000003
+#define MSI_MSG_STATE_CHANGE 0x00000004
+#define MSI_MSG_COMPLETION_POSTED 0x00000005
+#define MSI_MSG_MSG_FROM_DEV 0x00000006
+#define MSI_MSG_RESERVED_0 0x00000007
+#define MSI_MSG_RESERVED_1 0x00000008
+#define MSI_MSG_QUEUE_0_FULL 0x00000009
+#define MSI_MSG_QUEUE_1_FULL 0x0000000A
+#define MSI_MSG_QUEUE_2_FULL 0x0000000B
+#define MSI_MSG_QUEUE_3_FULL 0x0000000C
+
+#define FIT_INT_RESERVED_MASK \
+ (FIT_ISH_UNDEFINED_3 | \
+ FIT_ISH_UNDEFINED_4)
+
/*
* Interrupt mask, 32-bit r/w
* Bit definitions are the same as FIT_INT_STATUS_HOST
*/
-#define FIT_INT_MASK_HOST 0x528u
-
+#define FIT_INT_MASK_HOST 0x528u
/*
* Message to device, 32-bit r/w
*/
-#define FIT_MSG_TO_DEVICE 0x540u
+#define FIT_MSG_TO_DEVICE 0x540u
/*
* Message from device, 32-bit, r/o
*/
-#define FIT_MSG_FROM_DEVICE 0x548u
-
+#define FIT_MSG_FROM_DEVICE 0x548u
/*
* 32-bit messages to/from device, composition/extraction macros
@@ -153,52 +146,50 @@
((((TYPE) & 0xFFu) << 24u) | \
(((PARAM) & 0xFFu) << 16u) | \
(((DATA) & 0xFFFFu) << 0u))
-#define FIT_MXD_TYPE(MXD) (((MXD) >> 24u) & 0xFFu)
-#define FIT_MXD_PARAM(MXD) (((MXD) >> 16u) & 0xFFu)
-#define FIT_MXD_DATA(MXD) (((MXD) >> 0u) & 0xFFFFu)
-
+#define FIT_MXD_TYPE(MXD) (((MXD) >> 24u) & 0xFFu)
+#define FIT_MXD_PARAM(MXD) (((MXD) >> 16u) & 0xFFu)
+#define FIT_MXD_DATA(MXD) (((MXD) >> 0u) & 0xFFFFu)
/*
* Types of messages to/from device
*/
-#define FIT_MTD_FITFW_INIT 0x01u
-#define FIT_MTD_GET_CMDQ_DEPTH 0x02u
-#define FIT_MTD_SET_COMPQ_DEPTH 0x03u
-#define FIT_MTD_SET_COMPQ_ADDR 0x04u
-#define FIT_MTD_ARM_QUEUE 0x05u
-#define FIT_MTD_CMD_LOG_HOST_ID 0x07u
-#define FIT_MTD_CMD_LOG_TIME_STAMP_LO 0x08u
-#define FIT_MTD_CMD_LOG_TIME_STAMP_HI 0x09u
-#define FIT_MFD_SMART_EXCEEDED 0x10u
-#define FIT_MFD_POWER_DOWN 0x11u
-#define FIT_MFD_OFFLINE 0x12u
-#define FIT_MFD_ONLINE 0x13u
-#define FIT_MFD_FW_RESTARTING 0x14u
-#define FIT_MFD_PM_ACTIVE 0x15u
-#define FIT_MFD_PM_STANDBY 0x16u
-#define FIT_MFD_PM_SLEEP 0x17u
-#define FIT_MFD_CMD_PROGRESS 0x18u
-
-#define FIT_MTD_DEBUG 0xFEu
-#define FIT_MFD_DEBUG 0xFFu
+#define FIT_MTD_FITFW_INIT 0x01u
+#define FIT_MTD_GET_CMDQ_DEPTH 0x02u
+#define FIT_MTD_SET_COMPQ_DEPTH 0x03u
+#define FIT_MTD_SET_COMPQ_ADDR 0x04u
+#define FIT_MTD_ARM_QUEUE 0x05u
+#define FIT_MTD_CMD_LOG_HOST_ID 0x07u
+#define FIT_MTD_CMD_LOG_TIME_STAMP_LO 0x08u
+#define FIT_MTD_CMD_LOG_TIME_STAMP_HI 0x09u
+#define FIT_MFD_SMART_EXCEEDED 0x10u
+#define FIT_MFD_POWER_DOWN 0x11u
+#define FIT_MFD_OFFLINE 0x12u
+#define FIT_MFD_ONLINE 0x13u
+#define FIT_MFD_FW_RESTARTING 0x14u
+#define FIT_MFD_PM_ACTIVE 0x15u
+#define FIT_MFD_PM_STANDBY 0x16u
+#define FIT_MFD_PM_SLEEP 0x17u
+#define FIT_MFD_CMD_PROGRESS 0x18u
+
+#define FIT_MTD_DEBUG 0xFEu
+#define FIT_MFD_DEBUG 0xFFu
#define FIT_MFD_MASK (0xFFu)
#define FIT_MFD_DATA_MASK (0xFFu)
#define FIT_MFD_MSG(x) (((x) >> 24) & FIT_MFD_MASK)
#define FIT_MFD_DATA(x) ((x) & FIT_MFD_MASK)
-
/*
* Extra arg to FIT_MSG_TO_DEVICE, 64-bit r/w
* Used to set completion queue address (FIT_MTD_SET_COMPQ_ADDR)
* (was Response buffer in docs)
*/
-#define FIT_MSG_TO_DEVICE_ARG 0x580u
+#define FIT_MSG_TO_DEVICE_ARG 0x580u
/*
* Hardware (ASIC) version, 32-bit r/o
*/
-#define FIT_HW_VERSION 0x588u
+#define FIT_HW_VERSION 0x588u
/*
* Scatter/gather list descriptor.
@@ -213,8 +204,8 @@ struct fit_sg_descriptor {
uint64_t next_desc_ptr;
};
-#define FIT_SGD_CONTROL_NOT_LAST 0x000u
-#define FIT_SGD_CONTROL_LAST 0x40Eu
+#define FIT_SGD_CONTROL_NOT_LAST 0x000u
+#define FIT_SGD_CONTROL_LAST 0x40Eu
/*
* Header at the beginning of a FIT message. The header
@@ -228,9 +219,9 @@ struct fit_msg_hdr {
uint8_t _reserved[62];
};
-#define FIT_PROTOCOL_ID_FIT 1
-#define FIT_PROTOCOL_ID_SSDI 2
-#define FIT_PROTOCOL_ID_SOFIT 3
+#define FIT_PROTOCOL_ID_FIT 1
+#define FIT_PROTOCOL_ID_SSDI 2
+#define FIT_PROTOCOL_ID_SOFIT 3
#define FIT_PROTOCOL_MINOR_VER(mtd_val) ((mtd_val >> 16) & 0xF)
@@ -251,7 +242,7 @@ struct fit_msg_hdr {
* Command_context is opaque and taken verbatim from the SSDI command.
* All other fields are big endian.
*/
-#define FIT_PROTOCOL_VERSION_0 0
+#define FIT_PROTOCOL_VERSION_0 0
/*
* Protocol major version 1 completion entry.
@@ -264,8 +255,8 @@ struct fit_completion_entry_v1 {
uint8_t status; /* SCSI status */
uint8_t cycle;
};
-#define FIT_PROTOCOL_VERSION_1 1
-#define FIT_PROTOCOL_VERSION_CURRENT FIT_PROTOCOL_VERSION_1
+#define FIT_PROTOCOL_VERSION_1 1
+#define FIT_PROTOCOL_VERSION_CURRENT FIT_PROTOCOL_VERSION_1
struct fit_comp_error_info {
uint8_t type:7; /* 00: Bits0-6 indicates the type of sense data. */
@@ -293,10 +284,9 @@ struct fit_comp_error_info {
/* Task management constants */
-#define SOFT_TASK_SIMPLE 0x00
-#define SOFT_TASK_HEAD_OF_QUEUE 0x01
-#define SOFT_TASK_ORDERED 0x02
-
+#define SOFT_TASK_SIMPLE 0x00
+#define SOFT_TASK_HEAD_OF_QUEUE 0x01
+#define SOFT_TASK_ORDERED 0x02
/* Version zero has the last 32 bits reserved,
* Version one has the last 32 bits sg_list_len_bytes;
--
1.8.2.3
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH v2 00/11] skd: various fixes/cleanups
2013-11-05 11:36 [PATCH v2 00/11] skd: various fixes/cleanups Bartlomiej Zolnierkiewicz
` (10 preceding siblings ...)
2013-11-05 11:37 ` [PATCH v2 11/11] skd: fix formatting in skd_s1120.h Bartlomiej Zolnierkiewicz
@ 2013-11-05 16:07 ` Jens Axboe
11 siblings, 0 replies; 13+ messages in thread
From: Jens Axboe @ 2013-11-05 16:07 UTC (permalink / raw)
To: Bartlomiej Zolnierkiewicz; +Cc: abhansali, jmoyer, kyungmin.park, linux-kernel
On 11/05/2013 04:36 AM, Bartlomiej Zolnierkiewicz wrote:
> Hi,
>
> Here is a bunch of fixes/cleanups for the new skd driver.
>
> Reference to v1:
> https://lkml.org/lkml/2013/9/30/279
>
> Changes since v1:
> - synced against for-3.13/drivers branch (commit 76c4a6f) of block tree
> - dropped no longer needed patch #4 ("skd: alloc flush slab only if some
> devices are present"), #12 ("skd: reorder skd_flush_cmd_[en,de]queue()
> code") and #14 ("skd: remove skd_bio code")
>
> Best regards,
> --
> Bartlomiej Zolnierkiewicz
> Samsung R&D Institute Poland
> Samsung Electronics
>
> Bartlomiej Zolnierkiewicz (11):
> skd: fix unregister_blkdev() placement
> skd: fix error paths in skd_init()
> skd: fix error messages in skd_init()
> skd: register block device only if some devices are present
> skd: remove SCSI subsystem specific includes
> skd: use <asm/unaligned.h>
> skd: remove redundant skdev->pdev assignment from skd_pci_probe()
> skd: remove SKD_OMIT_FROM_SRC_DIST ifdefs
> skd: cleanup skd_do_inq_page_da()
> skd: reorder construct/destruct code
> skd: fix formatting in skd_s1120.h
Thanks Bart, applied.
--
Jens Axboe
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2013-11-05 16:07 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-11-05 11:36 [PATCH v2 00/11] skd: various fixes/cleanups Bartlomiej Zolnierkiewicz
2013-11-05 11:36 ` [PATCH v2 01/11] skd: fix unregister_blkdev() placement Bartlomiej Zolnierkiewicz
2013-11-05 11:37 ` [PATCH v2 02/11] skd: fix error paths in skd_init() Bartlomiej Zolnierkiewicz
2013-11-05 11:37 ` [PATCH v2 03/11] skd: fix error messages " Bartlomiej Zolnierkiewicz
2013-11-05 11:37 ` [PATCH v2 04/11] skd: register block device only if some devices are present Bartlomiej Zolnierkiewicz
2013-11-05 11:37 ` [PATCH v2 05/11] skd: remove SCSI subsystem specific includes Bartlomiej Zolnierkiewicz
2013-11-05 11:37 ` [PATCH v2 06/11] skd: use <asm/unaligned.h> Bartlomiej Zolnierkiewicz
2013-11-05 11:37 ` [PATCH v2 07/11] skd: remove redundant skdev->pdev assignment from skd_pci_probe() Bartlomiej Zolnierkiewicz
2013-11-05 11:37 ` [PATCH v2 08/11] skd: remove SKD_OMIT_FROM_SRC_DIST ifdefs Bartlomiej Zolnierkiewicz
2013-11-05 11:37 ` [PATCH v2 09/11] skd: cleanup skd_do_inq_page_da() Bartlomiej Zolnierkiewicz
2013-11-05 11:37 ` [PATCH v2 10/11] skd: reorder construct/destruct code Bartlomiej Zolnierkiewicz
2013-11-05 11:37 ` [PATCH v2 11/11] skd: fix formatting in skd_s1120.h Bartlomiej Zolnierkiewicz
2013-11-05 16:07 ` [PATCH v2 00/11] skd: various fixes/cleanups Jens Axboe
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).