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
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