Skip to content

Commit 996b318

Browse files
sumachidanandij-intel
authored andcommitted
platform/x86/amd/hsmp: Add new error code and error logs
Firmware is updated to send HSMP_ERR_PREREQ_NOT_SATISFIED(0xFD) and HSMP_ERR_SMU_BUSY(0xFC) error codes. Add them here. Add error logs to make it easy to understand the failure reason for different error conditions. Replace pr_err() with dev_err() to identify the driver printing the error. Signed-off-by: Suma Hegde <suma.hegde@amd.com> Reviewed-by: Naveen Krishna Chatradhi <naveenkrishna.chatradhi@amd.com> Link: https://lore.kernel.org/r/20241112120450.2407125-1-suma.hegde@amd.com Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
1 parent bd17863 commit 996b318

1 file changed

Lines changed: 24 additions & 10 deletions

File tree

  • drivers/platform/x86/amd/hsmp

drivers/platform/x86/amd/hsmp/hsmp.c

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@
77
* This file provides a device implementation for HSMP interface
88
*/
99

10-
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
11-
1210
#include <asm/amd_hsmp.h>
1311
#include <asm/amd_nb.h>
1412

@@ -25,6 +23,8 @@
2523
#define HSMP_STATUS_OK 0x01
2624
#define HSMP_ERR_INVALID_MSG 0xFE
2725
#define HSMP_ERR_INVALID_INPUT 0xFF
26+
#define HSMP_ERR_PREREQ_NOT_SATISFIED 0xFD
27+
#define HSMP_ERR_SMU_BUSY 0xFC
2828

2929
/* Timeout in millsec */
3030
#define HSMP_MSG_TIMEOUT 100
@@ -61,7 +61,7 @@ static int __hsmp_send_message(struct hsmp_socket *sock, struct hsmp_message *ms
6161
mbox_status = HSMP_STATUS_NOT_READY;
6262
ret = sock->amd_hsmp_rdwr(sock, mbinfo->msg_resp_off, &mbox_status, HSMP_WR);
6363
if (ret) {
64-
pr_err("Error %d clearing mailbox status register\n", ret);
64+
dev_err(sock->dev, "Error %d clearing mailbox status register\n", ret);
6565
return ret;
6666
}
6767

@@ -71,7 +71,7 @@ static int __hsmp_send_message(struct hsmp_socket *sock, struct hsmp_message *ms
7171
ret = sock->amd_hsmp_rdwr(sock, mbinfo->msg_arg_off + (index << 2),
7272
&msg->args[index], HSMP_WR);
7373
if (ret) {
74-
pr_err("Error %d writing message argument %d\n", ret, index);
74+
dev_err(sock->dev, "Error %d writing message argument %d\n", ret, index);
7575
return ret;
7676
}
7777
index++;
@@ -80,7 +80,7 @@ static int __hsmp_send_message(struct hsmp_socket *sock, struct hsmp_message *ms
8080
/* Write the message ID which starts the operation */
8181
ret = sock->amd_hsmp_rdwr(sock, mbinfo->msg_id_off, &msg->msg_id, HSMP_WR);
8282
if (ret) {
83-
pr_err("Error %d writing message ID %u\n", ret, msg->msg_id);
83+
dev_err(sock->dev, "Error %d writing message ID %u\n", ret, msg->msg_id);
8484
return ret;
8585
}
8686

@@ -97,7 +97,7 @@ static int __hsmp_send_message(struct hsmp_socket *sock, struct hsmp_message *ms
9797
while (time_before(jiffies, timeout)) {
9898
ret = sock->amd_hsmp_rdwr(sock, mbinfo->msg_resp_off, &mbox_status, HSMP_RD);
9999
if (ret) {
100-
pr_err("Error %d reading mailbox status\n", ret);
100+
dev_err(sock->dev, "Error %d reading mailbox status\n", ret);
101101
return ret;
102102
}
103103

@@ -110,14 +110,28 @@ static int __hsmp_send_message(struct hsmp_socket *sock, struct hsmp_message *ms
110110
}
111111

112112
if (unlikely(mbox_status == HSMP_STATUS_NOT_READY)) {
113+
dev_err(sock->dev, "Message ID 0x%X failure : SMU tmeout (status = 0x%X)\n",
114+
msg->msg_id, mbox_status);
113115
return -ETIMEDOUT;
114116
} else if (unlikely(mbox_status == HSMP_ERR_INVALID_MSG)) {
117+
dev_err(sock->dev, "Message ID 0x%X failure : Invalid message (status = 0x%X)\n",
118+
msg->msg_id, mbox_status);
115119
return -ENOMSG;
116120
} else if (unlikely(mbox_status == HSMP_ERR_INVALID_INPUT)) {
121+
dev_err(sock->dev, "Message ID 0x%X failure : Invalid arguments (status = 0x%X)\n",
122+
msg->msg_id, mbox_status);
117123
return -EINVAL;
124+
} else if (unlikely(mbox_status == HSMP_ERR_PREREQ_NOT_SATISFIED)) {
125+
dev_err(sock->dev, "Message ID 0x%X failure : Prerequisite not satisfied (status = 0x%X)\n",
126+
msg->msg_id, mbox_status);
127+
return -EREMOTEIO;
128+
} else if (unlikely(mbox_status == HSMP_ERR_SMU_BUSY)) {
129+
dev_err(sock->dev, "Message ID 0x%X failure : SMU BUSY (status = 0x%X)\n",
130+
msg->msg_id, mbox_status);
131+
return -EBUSY;
118132
} else if (unlikely(mbox_status != HSMP_STATUS_OK)) {
119-
pr_err("Message ID %u unknown failure (status = 0x%X)\n",
120-
msg->msg_id, mbox_status);
133+
dev_err(sock->dev, "Message ID 0x%X unknown failure (status = 0x%X)\n",
134+
msg->msg_id, mbox_status);
121135
return -EIO;
122136
}
123137

@@ -133,8 +147,8 @@ static int __hsmp_send_message(struct hsmp_socket *sock, struct hsmp_message *ms
133147
ret = sock->amd_hsmp_rdwr(sock, mbinfo->msg_arg_off + (index << 2),
134148
&msg->args[index], HSMP_RD);
135149
if (ret) {
136-
pr_err("Error %d reading response %u for message ID:%u\n",
137-
ret, index, msg->msg_id);
150+
dev_err(sock->dev, "Error %d reading response %u for message ID:%u\n",
151+
ret, index, msg->msg_id);
138152
break;
139153
}
140154
index++;

0 commit comments

Comments
 (0)