[PATCH v2] scsi: ufs: make ufshcd_get_lists_status() register operation obvious

2017-04-26 Thread kusumi . tomohiro
From: Tomohiro Kusumi 

It could be just cmp 0xe instead of >>1 and cmp 0x7, with readable code.

Signed-off-by: Tomohiro Kusumi 
---
 drivers/scsi/ufs/ufshcd.c | 11 +--
 drivers/scsi/ufs/ufshci.h |  4 
 2 files changed, 5 insertions(+), 10 deletions(-)

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index 9278666..95911fea 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -668,16 +668,7 @@ static inline void ufshcd_outstanding_req_clear(struct 
ufs_hba *hba, int tag)
  */
 static inline int ufshcd_get_lists_status(u32 reg)
 {
-   /*
-* The mask 0xFF is for the following HCS register bits
-* Bit  Description
-*  0   Device Present
-*  1   UTRLRDY
-*  2   UTMRLRDY
-*  3   UCRDY
-* 4-7  reserved
-*/
-   return ((reg & 0xFF) >> 1) ^ 0x07;
+   return !((reg & UFSHCD_STATUS_READY) == UFSHCD_STATUS_READY);
 }
 
 /**
diff --git a/drivers/scsi/ufs/ufshci.h b/drivers/scsi/ufs/ufshci.h
index d14e9b9..8cd4f0e 100644
--- a/drivers/scsi/ufs/ufshci.h
+++ b/drivers/scsi/ufs/ufshci.h
@@ -159,6 +159,10 @@ enum {
 #define DEVICE_ERROR_INDICATOR UFS_BIT(5)
 #define UIC_POWER_MODE_CHANGE_REQ_STATUS_MASK  UFS_MASK(0x7, 8)
 
+#define UFSHCD_STATUS_READY(UTP_TRANSFER_REQ_LIST_READY |\
+   UTP_TASK_REQ_LIST_READY |\
+   UIC_COMMAND_READY)
+
 enum {
PWR_OK  = 0x0,
PWR_LOCAL   = 0x01,
-- 
2.9.3



[PATCH 2/2] scsi: ufs: make ufshcd_get_lists_status() register operation obvious

2017-04-20 Thread kusumi . tomohiro
From: Tomohiro Kusumi 

It could be just cmp 0xe instead of >>1 and cmp 0x7, with readable code.

Signed-off-by: Tomohiro Kusumi 
---
 drivers/scsi/ufs/ufshcd.c | 11 +--
 drivers/scsi/ufs/ufshci.h |  4 
 2 files changed, 5 insertions(+), 10 deletions(-)

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index 9278666..ad9532b 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -668,16 +668,7 @@ static inline void ufshcd_outstanding_req_clear(struct 
ufs_hba *hba, int tag)
  */
 static inline int ufshcd_get_lists_status(u32 reg)
 {
-   /*
-* The mask 0xFF is for the following HCS register bits
-* Bit  Description
-*  0   Device Present
-*  1   UTRLRDY
-*  2   UTMRLRDY
-*  3   UCRDY
-* 4-7  reserved
-*/
-   return ((reg & 0xFF) >> 1) ^ 0x07;
+   return !((reg & UFSHCD_STATUS_READY) == (u32)UFSHCD_STATUS_READY);
 }
 
 /**
diff --git a/drivers/scsi/ufs/ufshci.h b/drivers/scsi/ufs/ufshci.h
index d14e9b9..8cd4f0e 100644
--- a/drivers/scsi/ufs/ufshci.h
+++ b/drivers/scsi/ufs/ufshci.h
@@ -159,6 +159,10 @@ enum {
 #define DEVICE_ERROR_INDICATOR UFS_BIT(5)
 #define UIC_POWER_MODE_CHANGE_REQ_STATUS_MASK  UFS_MASK(0x7, 8)
 
+#define UFSHCD_STATUS_READY(UTP_TRANSFER_REQ_LIST_READY |\
+   UTP_TASK_REQ_LIST_READY |\
+   UIC_COMMAND_READY)
+
 enum {
PWR_OK  = 0x0,
PWR_LOCAL   = 0x01,
-- 
2.9.3



[PATCH 1/2] scsi: ufs: use MASK_EE_STATUS

2017-04-20 Thread kusumi . tomohiro
From: Tomohiro Kusumi 

MASK_EE_STATUS added by 66ec6d59 was unused, but it seems to have been
defined to do this.

Signed-off-by: Tomohiro Kusumi 
---
 drivers/scsi/ufs/ufshcd.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index 096e95b..9278666 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -4717,7 +4717,7 @@ static int ufshcd_disable_ee(struct ufs_hba *hba, u16 
mask)
goto out;
 
val = hba->ee_ctrl_mask & ~mask;
-   val &= 0x; /* 2 bytes */
+   val &= MASK_EE_STATUS;
err = ufshcd_query_attr_retry(hba, UPIU_QUERY_OPCODE_WRITE_ATTR,
QUERY_ATTR_IDN_EE_CONTROL, 0, 0, );
if (!err)
@@ -4745,7 +4745,7 @@ static int ufshcd_enable_ee(struct ufs_hba *hba, u16 mask)
goto out;
 
val = hba->ee_ctrl_mask | mask;
-   val &= 0x; /* 2 bytes */
+   val &= MASK_EE_STATUS;
err = ufshcd_query_attr_retry(hba, UPIU_QUERY_OPCODE_WRITE_ATTR,
QUERY_ATTR_IDN_EE_CONTROL, 0, 0, );
if (!err)
-- 
2.9.3



[PATCH 1/6] scsi: ufs: make ufshcd_is_{device_present,hba_active}() return bool

2017-03-28 Thread kusumi . tomohiro
From: Tomohiro Kusumi 

ufshcd driver generally uses bool for is_xxx type things instead of int,
so conform to its style.

Signed-off-by: Tomohiro Kusumi 
---
 drivers/scsi/ufs/ufshcd.c | 12 ++--
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index b7e5128..b006f1e 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -585,12 +585,12 @@ static inline u32 ufshcd_get_ufs_version(struct ufs_hba 
*hba)
  *   the host controller
  * @hba: pointer to adapter instance
  *
- * Returns 1 if device present, 0 if no device detected
+ * Returns true if device present, false if no device detected
  */
-static inline int ufshcd_is_device_present(struct ufs_hba *hba)
+static inline bool ufshcd_is_device_present(struct ufs_hba *hba)
 {
return (ufshcd_readl(hba, REG_CONTROLLER_STATUS) &
-   DEVICE_PRESENT) ? 1 : 0;
+   DEVICE_PRESENT) ? true : false;
 }
 
 /**
@@ -832,11 +832,11 @@ static inline void ufshcd_hba_start(struct ufs_hba *hba)
  * ufshcd_is_hba_active - Get controller state
  * @hba: per adapter instance
  *
- * Returns zero if controller is active, 1 otherwise
+ * Returns false if controller is active, true otherwise
  */
-static inline int ufshcd_is_hba_active(struct ufs_hba *hba)
+static inline bool ufshcd_is_hba_active(struct ufs_hba *hba)
 {
-   return (ufshcd_readl(hba, REG_CONTROLLER_ENABLE) & 0x1) ? 0 : 1;
+   return (ufshcd_readl(hba, REG_CONTROLLER_ENABLE) & 0x1) ? false : true;
 }
 
 static const char *ufschd_uic_link_state_to_string(
-- 
2.9.3



[PATCH 3/6] scsi: ufs: non functional macro fix

2017-03-28 Thread kusumi . tomohiro
From: Tomohiro Kusumi 

Not having () isn't likely to do any harm in this case, but all the
other macros below do have it. Also add "are" in a comment.

Signed-off-by: Tomohiro Kusumi 
---
 drivers/scsi/ufs/ufshcd.c | 8 
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index dd46259..089b76f 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -151,11 +151,11 @@ enum {
 };
 
 #define ufshcd_set_eh_in_progress(h) \
-   (h->eh_flags |= UFSHCD_EH_IN_PROGRESS)
+   ((h)->eh_flags |= UFSHCD_EH_IN_PROGRESS)
 #define ufshcd_eh_in_progress(h) \
-   (h->eh_flags & UFSHCD_EH_IN_PROGRESS)
+   ((h)->eh_flags & UFSHCD_EH_IN_PROGRESS)
 #define ufshcd_clear_eh_in_progress(h) \
-   (h->eh_flags &= ~UFSHCD_EH_IN_PROGRESS)
+   ((h)->eh_flags &= ~UFSHCD_EH_IN_PROGRESS)
 
 #define ufshcd_set_ufs_dev_active(h) \
((h)->curr_dev_pwr_mode = UFS_ACTIVE_PWR_MODE)
@@ -1491,7 +1491,7 @@ int ufshcd_hold(struct ufs_hba *hba, bool async)
break;
}
/*
-* If we here, it means gating work is either done or
+* If we are here, it means gating work is either done or
 * currently running. Hence, fall through to cancel gating
 * work and to enable clocks.
 */
-- 
2.9.3



[PATCH 5/6] scsi: ufs: remove deprecated enum for hw interrupt

2017-03-28 Thread kusumi . tomohiro
From: Tomohiro Kusumi 

These flags are no longer needed after 2fbd009b in 2013.

Signed-off-by: Tomohiro Kusumi 
---
 drivers/scsi/ufs/ufshcd.c | 7 ---
 1 file changed, 7 deletions(-)

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index 089b76f..109a762 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -143,13 +143,6 @@ enum {
UFSHCD_UIC_DME_ERROR = (1 << 5), /* DME error */
 };
 
-/* Interrupt configuration options */
-enum {
-   UFSHCD_INT_DISABLE,
-   UFSHCD_INT_ENABLE,
-   UFSHCD_INT_CLEAR,
-};
-
 #define ufshcd_set_eh_in_progress(h) \
((h)->eh_flags |= UFSHCD_EH_IN_PROGRESS)
 #define ufshcd_eh_in_progress(h) \
-- 
2.9.3



[PATCH 6/6] scsi: ufs: just use sizeof() for snprintf()

2017-03-28 Thread kusumi . tomohiro
From: Tomohiro Kusumi 

Not much reason to use ARRAY_SIZE() when we know it's for a C string.

Signed-off-by: Tomohiro Kusumi 
---
 drivers/scsi/ufs/ufshcd.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index 109a762..790c19c 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -7880,7 +7880,7 @@ int ufshcd_init(struct ufs_hba *hba, void __iomem 
*mmio_base, unsigned int irq)
INIT_WORK(>clk_scaling.resume_work,
  ufshcd_clk_scaling_resume_work);
 
-   snprintf(wq_name, ARRAY_SIZE(wq_name), "ufs_clkscaling_%d",
+   snprintf(wq_name, sizeof(wq_name), "ufs_clkscaling_%d",
 host->host_no);
hba->clk_scaling.workq = create_singlethread_workqueue(wq_name);
 
-- 
2.9.3



[PATCH 4/6] scsi: ufs: add missing macros for register bits from UFSHCI spec

2017-03-28 Thread kusumi . tomohiro
From: Tomohiro Kusumi 

Add macros for register bits that can be found in JESD223C (v2.1).

Not all registers are defined in ufshci.h (i.e. some are unused
whether macros are defined or undefined), but all the bits for
those registers that are already defined should appear here.

Signed-off-by: Tomohiro Kusumi 
---
 drivers/scsi/ufs/ufshci.h | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/scsi/ufs/ufshci.h b/drivers/scsi/ufs/ufshci.h
index d14e9b9..88acfd3 100644
--- a/drivers/scsi/ufs/ufshci.h
+++ b/drivers/scsi/ufs/ufshci.h
@@ -48,6 +48,7 @@ enum {
REG_UFS_VERSION = 0x08,
REG_CONTROLLER_DEV_ID   = 0x10,
REG_CONTROLLER_PROD_ID  = 0x14,
+   REG_AUTO_HIBERNATE_IDLE_TIMER   = 0x18,
REG_INTERRUPT_STATUS= 0x20,
REG_INTERRUPT_ENABLE= 0x24,
REG_CONTROLLER_STATUS   = 0x30,
@@ -171,6 +172,7 @@ enum {
 /* HCE - Host Controller Enable 34h */
 #define CONTROLLER_ENABLE  UFS_BIT(0)
 #define CONTROLLER_DISABLE 0x0
+#define CRYPTO_GENERAL_ENABLE  UFS_BIT(1)
 
 /* UECPA - Host UIC Error Code PHY Adapter Layer 38h */
 #define UIC_PHY_ADAPTER_LAYER_ERRORUFS_BIT(31)
-- 
2.9.3



[PATCH 2/6] scsi: ufs: use existing macro CONTROLLER_ENABLE to test register bit

2017-03-28 Thread kusumi . tomohiro
From: Tomohiro Kusumi 

(Note this commit directly goes on top of the previous one)

Signed-off-by: Tomohiro Kusumi 
---
 drivers/scsi/ufs/ufshcd.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index b006f1e..dd46259 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -836,7 +836,8 @@ static inline void ufshcd_hba_start(struct ufs_hba *hba)
  */
 static inline bool ufshcd_is_hba_active(struct ufs_hba *hba)
 {
-   return (ufshcd_readl(hba, REG_CONTROLLER_ENABLE) & 0x1) ? false : true;
+   return (ufshcd_readl(hba, REG_CONTROLLER_ENABLE) & CONTROLLER_ENABLE)
+   ? false : true;
 }
 
 static const char *ufschd_uic_link_state_to_string(
-- 
2.9.3



[PATCH] scsi: ufs: fix wrong/ambiguous fall through comments

2017-03-23 Thread kusumi . tomohiro
From: Tomohiro Kusumi 

These aren't really falling through to anywhere meaningful.

Signed-off-by: Tomohiro Kusumi 
---
 drivers/scsi/ufs/ufshcd.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index dc6efbd..b7e5128 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -553,15 +553,14 @@ static inline u32 ufshcd_get_intr_mask(struct ufs_hba 
*hba)
case UFSHCI_VERSION_10:
intr_mask = INTERRUPT_MASK_ALL_VER_10;
break;
-   /* allow fall through */
case UFSHCI_VERSION_11:
case UFSHCI_VERSION_20:
intr_mask = INTERRUPT_MASK_ALL_VER_11;
break;
-   /* allow fall through */
case UFSHCI_VERSION_21:
default:
intr_mask = INTERRUPT_MASK_ALL_VER_21;
+   break;
}
 
return intr_mask;
-- 
2.9.3