diff options
Diffstat (limited to 'drivers/misc/mei/init.c')
-rw-r--r-- | drivers/misc/mei/init.c | 38 |
1 files changed, 33 insertions, 5 deletions
diff --git a/drivers/misc/mei/init.c b/drivers/misc/mei/init.c index 7901d076c127..9306219d5675 100644 --- a/drivers/misc/mei/init.c +++ b/drivers/misc/mei/init.c | |||
@@ -54,6 +54,35 @@ const char *mei_pg_state_str(enum mei_pg_state state) | |||
54 | #undef MEI_PG_STATE | 54 | #undef MEI_PG_STATE |
55 | } | 55 | } |
56 | 56 | ||
57 | /** | ||
58 | * mei_fw_status2str - convert fw status registers to printable string | ||
59 | * | ||
60 | * @fw_status: firmware status | ||
61 | * @buf: string buffer at minimal size MEI_FW_STATUS_STR_SZ | ||
62 | * @len: buffer len must be >= MEI_FW_STATUS_STR_SZ | ||
63 | * | ||
64 | * Return: number of bytes written or -EINVAL if buffer is to small | ||
65 | */ | ||
66 | ssize_t mei_fw_status2str(struct mei_fw_status *fw_status, | ||
67 | char *buf, size_t len) | ||
68 | { | ||
69 | ssize_t cnt = 0; | ||
70 | int i; | ||
71 | |||
72 | buf[0] = '\0'; | ||
73 | |||
74 | if (len < MEI_FW_STATUS_STR_SZ) | ||
75 | return -EINVAL; | ||
76 | |||
77 | for (i = 0; i < fw_status->count; i++) | ||
78 | cnt += scnprintf(buf + cnt, len - cnt, "%08X ", | ||
79 | fw_status->status[i]); | ||
80 | |||
81 | /* drop last space */ | ||
82 | buf[cnt] = '\0'; | ||
83 | return cnt; | ||
84 | } | ||
85 | EXPORT_SYMBOL_GPL(mei_fw_status2str); | ||
57 | 86 | ||
58 | /** | 87 | /** |
59 | * mei_cancel_work - Cancel mei background jobs | 88 | * mei_cancel_work - Cancel mei background jobs |
@@ -86,12 +115,11 @@ int mei_reset(struct mei_device *dev) | |||
86 | state != MEI_DEV_DISABLED && | 115 | state != MEI_DEV_DISABLED && |
87 | state != MEI_DEV_POWER_DOWN && | 116 | state != MEI_DEV_POWER_DOWN && |
88 | state != MEI_DEV_POWER_UP) { | 117 | state != MEI_DEV_POWER_UP) { |
89 | struct mei_fw_status fw_status; | 118 | char fw_sts_str[MEI_FW_STATUS_STR_SZ]; |
90 | 119 | ||
91 | mei_fw_status(dev, &fw_status); | 120 | mei_fw_status_str(dev, fw_sts_str, MEI_FW_STATUS_STR_SZ); |
92 | dev_warn(dev->dev, | 121 | dev_warn(dev->dev, "unexpected reset: dev_state = %s fw status = %s\n", |
93 | "unexpected reset: dev_state = %s " FW_STS_FMT "\n", | 122 | mei_dev_state_str(state), fw_sts_str); |
94 | mei_dev_state_str(state), FW_STS_PRM(fw_status)); | ||
95 | } | 123 | } |
96 | 124 | ||
97 | /* we're already in reset, cancel the init timer | 125 | /* we're already in reset, cancel the init timer |