Skip to content

Commit ba80917

Browse files
Tomas Winklermartinkpetersen
authored andcommitted
scsi: ufs: ufshcd_dump_regs to use memcpy_fromio
ufshcd_dump_regs should use memcpy_fromio to read host registers instead of directly accessing using memcpy. The same function is utilized in ufs-qcom. Elminite compilation warning drivers/scsi/ufs/ufshcd.c:356:9: warning: incorrect type in argument 6 (different address spaces) drivers/scsi/ufs/ufshcd.c:356:9: expected void const *buf drivers/scsi/ufs/ufshcd.c:356:9: got void [noderef] <asn:2>*mmio_base Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Reviewed-by: Avri Altman <avri.altman@wdc.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
1 parent 5b9d397 commit ba80917

File tree

3 files changed

+33
-26
lines changed

3 files changed

+33
-26
lines changed

drivers/scsi/ufs/ufs-qcom.c

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -50,19 +50,10 @@ static void ufs_qcom_get_default_testbus_cfg(struct ufs_qcom_host *host);
5050
static int ufs_qcom_set_dme_vs_core_clk_ctrl_clear_div(struct ufs_hba *hba,
5151
u32 clk_cycles);
5252

53-
static void ufs_qcom_dump_regs(struct ufs_hba *hba, int offset, int len,
54-
char *prefix)
55-
{
56-
print_hex_dump(KERN_ERR, prefix,
57-
len > 4 ? DUMP_PREFIX_OFFSET : DUMP_PREFIX_NONE,
58-
16, 4, (void __force *)hba->mmio_base + offset,
59-
len * 4, false);
60-
}
61-
6253
static void ufs_qcom_dump_regs_wrapper(struct ufs_hba *hba, int offset, int len,
63-
char *prefix, void *priv)
54+
const char *prefix, void *priv)
6455
{
65-
ufs_qcom_dump_regs(hba, offset, len, prefix);
56+
ufshcd_dump_regs(hba, offset, len * 4, prefix);
6657
}
6758

6859
static int ufs_qcom_get_connected_tx_lanes(struct ufs_hba *hba, u32 *tx_lanes)
@@ -1431,7 +1422,7 @@ static int ufs_qcom_clk_scale_notify(struct ufs_hba *hba,
14311422

14321423
static void ufs_qcom_print_hw_debug_reg_all(struct ufs_hba *hba,
14331424
void *priv, void (*print_fn)(struct ufs_hba *hba,
1434-
int offset, int num_regs, char *str, void *priv))
1425+
int offset, int num_regs, const char *str, void *priv))
14351426
{
14361427
u32 reg;
14371428
struct ufs_qcom_host *host;
@@ -1613,7 +1604,7 @@ int ufs_qcom_testbus_config(struct ufs_qcom_host *host)
16131604

16141605
static void ufs_qcom_testbus_read(struct ufs_hba *hba)
16151606
{
1616-
ufs_qcom_dump_regs(hba, UFS_TEST_BUS, 1, "UFS_TEST_BUS ");
1607+
ufshcd_dump_regs(hba, UFS_TEST_BUS, 4, "UFS_TEST_BUS ");
16171608
}
16181609

16191610
static void ufs_qcom_print_unipro_testbus(struct ufs_hba *hba)
@@ -1639,8 +1630,8 @@ static void ufs_qcom_print_unipro_testbus(struct ufs_hba *hba)
16391630

16401631
static void ufs_qcom_dump_dbg_regs(struct ufs_hba *hba)
16411632
{
1642-
ufs_qcom_dump_regs(hba, REG_UFS_SYS1CLK_1US, 16,
1643-
"HCI Vendor Specific Registers ");
1633+
ufshcd_dump_regs(hba, REG_UFS_SYS1CLK_1US, 16 * 4,
1634+
"HCI Vendor Specific Registers ");
16441635

16451636
/* sleep a bit intermittently as we are dumping too much data */
16461637
ufs_qcom_print_hw_debug_reg_all(hba, NULL, ufs_qcom_dump_regs_wrapper);

drivers/scsi/ufs/ufshcd.c

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,29 @@
9999
_ret; \
100100
})
101101

102-
#define ufshcd_hex_dump(prefix_str, buf, len) \
103-
print_hex_dump(KERN_ERR, prefix_str, DUMP_PREFIX_OFFSET, 16, 4, buf, len, false)
102+
#define ufshcd_hex_dump(prefix_str, buf, len) do { \
103+
size_t __len = (len); \
104+
print_hex_dump(KERN_ERR, prefix_str, \
105+
__len > 4 ? DUMP_PREFIX_OFFSET : DUMP_PREFIX_NONE,\
106+
16, 4, buf, __len, false); \
107+
} while (0)
108+
109+
int ufshcd_dump_regs(struct ufs_hba *hba, size_t offset, size_t len,
110+
const char *prefix)
111+
{
112+
u8 *regs;
113+
114+
regs = kzalloc(len, GFP_KERNEL);
115+
if (!regs)
116+
return -ENOMEM;
117+
118+
memcpy_fromio(regs, hba->mmio_base + offset, len);
119+
ufshcd_hex_dump(prefix, regs, len);
120+
kfree(regs);
121+
122+
return 0;
123+
}
124+
EXPORT_SYMBOL_GPL(ufshcd_dump_regs);
104125

105126
enum {
106127
UFSHCD_MAX_CHANNEL = 0,
@@ -386,15 +407,7 @@ static void ufshcd_print_uic_err_hist(struct ufs_hba *hba,
386407

387408
static void ufshcd_print_host_regs(struct ufs_hba *hba)
388409
{
389-
/*
390-
* hex_dump reads its data without the readl macro. This might
391-
* cause inconsistency issues on some platform, as the printed
392-
* values may be from cache and not the most recent value.
393-
* To know whether you are looking at an un-cached version verify
394-
* that IORESOURCE_MEM flag is on when xxx_get_resource() is invoked
395-
* during platform/pci probe function.
396-
*/
397-
ufshcd_hex_dump("host regs: ", hba->mmio_base, UFSHCI_REG_SPACE_SIZE);
410+
ufshcd_dump_regs(hba, 0, UFSHCI_REG_SPACE_SIZE, "host_regs: ");
398411
dev_err(hba->dev, "hba->ufs_version = 0x%x, hba->capabilities = 0x%x\n",
399412
hba->ufs_version, hba->capabilities);
400413
dev_err(hba->dev,

drivers/scsi/ufs/ufshcd.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1043,4 +1043,7 @@ static inline u8 ufshcd_scsi_to_upiu_lun(unsigned int scsi_lun)
10431043
return scsi_lun & UFS_UPIU_MAX_UNIT_NUM_ID;
10441044
}
10451045

1046+
int ufshcd_dump_regs(struct ufs_hba *hba, size_t offset, size_t len,
1047+
const char *prefix);
1048+
10461049
#endif /* End of Header */

0 commit comments

Comments
 (0)