Message ID | 20170911133411.19963-1-hegdevasant@linux.vnet.ibm.com |
---|---|
State | Superseded |
Headers | show |
Series | prd: Enable error logging via firmware_request interface | expand |
Roland - Where did we land on the constant? Is it 4 or 5? (latest gerrit has 5) + PRD_FW_MSG_TYPE_ERROR_LOG = 4, The rest seems fine. -- Dan Crowell Senior Software Engineer - Power Systems Enablement Firmware IBM Rochester: t/l 553-2987 dcrowell@us.ibm.com From: Vasant Hegde <hegdevasant@linux.vnet.ibm.com> To: skiboot@lists.ozlabs.org Cc: Vasant Hegde <hegdevasant@linux.vnet.ibm.com>, Jeremy Kerr <jk@ozlabs.org>, Daniel M Crowell/Rochester/IBM@IBMUS Date: 09/11/2017 08:34 AM Subject: [PATCH] prd: Enable error logging via firmware_request interface In P9 HBRT sends error logs to FSP via firmware_request interface. This patch adds support to parse error log and send it to FSP. CC: Jeremy Kerr <jk@ozlabs.org> CC: Daniel M Crowell <dcrowell@us.ibm.com> Signed-off-by: Vasant Hegde <hegdevasant@linux.vnet.ibm.com> --- core/hostservices.c | 2 +- hw/prd.c | 13 +++++++++++++ include/hostservices.h | 1 + include/prd-fw-msg.h | 13 +++++++++++++ 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/core/hostservices.c b/core/hostservices.c index d1f6fda..dd8cae2 100644 --- a/core/hostservices.c +++ b/core/hostservices.c @@ -329,7 +329,7 @@ static void hservice_start_elog_send(void) goto again; } -static int hservice_send_error_log(uint32_t plid, uint32_t dsize, void *data) +int hservice_send_error_log(uint32_t plid, uint32_t dsize, void *data) { struct hbrt_elog_ent *ent; void *abuf; diff --git a/hw/prd.c b/hw/prd.c index d076c19..4db92eb 100644 --- a/hw/prd.c +++ b/hw/prd.c @@ -23,6 +23,7 @@ #include <fsp.h> #include <mem_region.h> #include <prd-fw-msg.h> +#include <hostservices.h> enum events { EVENT_ATTN = 1 << 0, @@ -375,6 +376,18 @@ static int prd_msg_handle_firmware_req(struct opal_prd_msg *msg) prd_msg->hdr.size = cpu_to_be16(sizeof(*prd_msg)); rc = 0; break; + case PRD_FW_MSG_TYPE_ERROR_LOG: + rc = hservice_send_error_log(fw_req->errorlog.plid, + fw_req->errorlog.size, + fw_req->errorlog.data); + /* Return generic response to HBRT */ + fw_resp->type = cpu_to_be64(PRD_FW_MSG_TYPE_RESP_GENERIC); + fw_resp->generic_resp.status = cpu_to_be64(rc); + prd_msg->fw_resp.len = cpu_to_be64(PRD_FW_MSG_BASE_SIZE + + sizeof(fw_resp->generic_resp)); + prd_msg->hdr.size = cpu_to_be16(sizeof(*prd_msg)); + rc = 0; + break; default: rc = -ENOSYS; } diff --git a/include/hostservices.h b/include/hostservices.h index d6bb3e3..62ef04b 100644 --- a/include/hostservices.h +++ b/include/hostservices.h @@ -38,5 +38,6 @@ void host_services_occ_base_setup(void); int find_master_and_slave_occ(uint64_t **master, uint64_t **slave, int *nr_masters, int *nr_slaves); +int hservice_send_error_log(uint32_t plid, uint32_t dsize, void *data); #endif /* __HOSTSERVICES_H */ diff --git a/include/prd-fw-msg.h b/include/prd-fw-msg.h index c00405d..950deb5 100644 --- a/include/prd-fw-msg.h +++ b/include/prd-fw-msg.h @@ -26,10 +26,23 @@ enum { PRD_FW_MSG_TYPE_REQ_NOP = 0, PRD_FW_MSG_TYPE_RESP_NOP = 1, + PRD_FW_MSG_TYPE_RESP_GENERIC = 2, + PRD_FW_MSG_TYPE_REQ_HCODE_UPDATE = 3, + PRD_FW_MSG_TYPE_ERROR_LOG = 4, }; struct prd_fw_msg { __be64 type; + union { + struct { + __be64 status; + } generic_resp; + struct { + __be32 plid; + __be32 size; + char data[]; + } __packed errorlog; + }; }; #define PRD_FW_MSG_BASE_SIZE sizeof(__be64)
On 09/11/2017 11:44 PM, Daniel M Crowell wrote: > Roland - Where did we land on the constant? Is it 4 or 5? (latest gerrit > has 5) > + PRD_FW_MSG_TYPE_ERROR_LOG = 4, Ah! I thought ELOG is 4 and other one is 5. Thanks for noticing. I will fix in next iteration. -Vasant
Sorry for the confusion. I have two outstanding firmware request changes
out. Since the ELOG came later, I made it 5.
This is what will be the final numbers:
HBRT_FW_MSG_HBRT_FSP = 4,
HBRT_FW_MSG_TYPE_ERROR_LOG = 5,
Roland
From: Daniel M Crowell/Rochester/IBM
To: Vasant Hegde <hegdevasant@linux.vnet.ibm.com>, Roland
Veloz/Austin/Contr/IBM@IBMUS
Cc: Jeremy Kerr <jk@ozlabs.org>, skiboot@lists.ozlabs.org
Date: 09/11/2017 01:14 PM
Subject: Re: [PATCH] prd: Enable error logging via firmware_request
interface
Roland - Where did we land on the constant? Is it 4 or 5? (latest gerrit
has 5)
+ PRD_FW_MSG_TYPE_ERROR_LOG = 4,
The rest seems fine.
--
Dan Crowell
Senior Software Engineer - Power Systems Enablement Firmware
IBM Rochester: t/l 553-2987
dcrowell@us.ibm.com
From: Vasant Hegde <hegdevasant@linux.vnet.ibm.com>
To: skiboot@lists.ozlabs.org
Cc: Vasant Hegde <hegdevasant@linux.vnet.ibm.com>, Jeremy Kerr
<jk@ozlabs.org>, Daniel M Crowell/Rochester/IBM@IBMUS
Date: 09/11/2017 08:34 AM
Subject: [PATCH] prd: Enable error logging via firmware_request
interface
In P9 HBRT sends error logs to FSP via firmware_request interface.
This patch adds support to parse error log and send it to FSP.
CC: Jeremy Kerr <jk@ozlabs.org>
CC: Daniel M Crowell <dcrowell@us.ibm.com>
Signed-off-by: Vasant Hegde <hegdevasant@linux.vnet.ibm.com>
---
core/hostservices.c | 2 +-
hw/prd.c | 13 +++++++++++++
include/hostservices.h | 1 +
include/prd-fw-msg.h | 13 +++++++++++++
4 files changed, 28 insertions(+), 1 deletion(-)
diff --git a/core/hostservices.c b/core/hostservices.c
index d1f6fda..dd8cae2 100644
--- a/core/hostservices.c
+++ b/core/hostservices.c
@@ -329,7 +329,7 @@ static void hservice_start_elog_send(void)
goto again;
}
-static int hservice_send_error_log(uint32_t plid, uint32_t dsize, void
*data)
+int hservice_send_error_log(uint32_t plid, uint32_t dsize, void *data)
{
struct hbrt_elog_ent *ent;
void *abuf;
diff --git a/hw/prd.c b/hw/prd.c
index d076c19..4db92eb 100644
--- a/hw/prd.c
+++ b/hw/prd.c
@@ -23,6 +23,7 @@
#include <fsp.h>
#include <mem_region.h>
#include <prd-fw-msg.h>
+#include <hostservices.h>
enum events {
EVENT_ATTN = 1 << 0,
@@ -375,6 +376,18 @@ static int prd_msg_handle_firmware_req(struct
opal_prd_msg *msg)
prd_msg->hdr.size = cpu_to_be16(sizeof(*prd_msg));
rc = 0;
break;
+ case PRD_FW_MSG_TYPE_ERROR_LOG:
+ rc = hservice_send_error_log(fw_req->
errorlog.plid,
+ fw_req->
errorlog.size,
+ fw_req->
errorlog.data);
+ /* Return generic response to HBRT */
+ fw_resp->type = cpu_to_be64
(PRD_FW_MSG_TYPE_RESP_GENERIC);
+ fw_resp->generic_resp.status = cpu_to_be64(rc);
+ prd_msg->fw_resp.len = cpu_to_be64
(PRD_FW_MSG_BASE_SIZE +
+
sizeof(fw_resp->generic_resp));
+ prd_msg->hdr.size = cpu_to_be16(sizeof(*prd_msg));
+ rc = 0;
+ break;
default:
rc = -ENOSYS;
}
diff --git a/include/hostservices.h b/include/hostservices.h
index d6bb3e3..62ef04b 100644
--- a/include/hostservices.h
+++ b/include/hostservices.h
@@ -38,5 +38,6 @@ void host_services_occ_base_setup(void);
int find_master_and_slave_occ(uint64_t **master, uint64_t **slave,
int *nr_masters, int
*nr_slaves);
+int hservice_send_error_log(uint32_t plid, uint32_t dsize, void *data);
#endif /* __HOSTSERVICES_H */
diff --git a/include/prd-fw-msg.h b/include/prd-fw-msg.h
index c00405d..950deb5 100644
--- a/include/prd-fw-msg.h
+++ b/include/prd-fw-msg.h
@@ -26,10 +26,23 @@
enum {
PRD_FW_MSG_TYPE_REQ_NOP = 0,
PRD_FW_MSG_TYPE_RESP_NOP = 1,
+ PRD_FW_MSG_TYPE_RESP_GENERIC = 2,
+ PRD_FW_MSG_TYPE_REQ_HCODE_UPDATE = 3,
+ PRD_FW_MSG_TYPE_ERROR_LOG = 4,
};
struct prd_fw_msg {
__be64 type;
+ union {
+ struct {
+ __be64 status;
+ } generic_resp;
+ struct {
+ __be32 plid;
+ __be32 size;
+ char data[];
+ } __packed errorlog;
+ };
};
#define PRD_FW_MSG_BASE_SIZE sizeof(__be64)
--
2.9.3
<html><body><p><font size="2">Sorry for the confusion. I have two outstanding firmware request changes out. Since the ELOG came later, I made it 5.</font><br><br><font size="2">This is what will be the final numbers:</font><br><font size="2"> </font><br><font size="2"> HBRT_FW_MSG_HBRT_FSP = 4,</font><br><font size="2"> HBRT_FW_MSG_TYPE_ERROR_LOG = 5,</font><br><br><font size="2">Roland</font><br><br><img width="16" height="16" src="cid:1__=8FBB0B0ADFC6E7DF8f9e8a93df938690918c8FB@" border="0" alt="Inactive hide details for Daniel M Crowell---09/11/2017 01:14:48 PM---Roland - Where did we land on the constant? Is it 4 or 5"><font size="2" color="#424282">Daniel M Crowell---09/11/2017 01:14:48 PM---Roland - Where did we land on the constant? Is it 4 or 5? (latest gerrit has 5) + PRD_FW_MSG_TYP</font><br><br><font size="2" color="#5F5F5F">From: </font><font size="2">Daniel M Crowell/Rochester/IBM</font><br><font size="2" color="#5F5F5F">To: </font><font size="2">Vasant Hegde <hegdevasant@linux.vnet.ibm.com>, Roland Veloz/Austin/Contr/IBM@IBMUS</font><br><font size="2" color="#5F5F5F">Cc: </font><font size="2">Jeremy Kerr <jk@ozlabs.org>, skiboot@lists.ozlabs.org</font><br><font size="2" color="#5F5F5F">Date: </font><font size="2">09/11/2017 01:14 PM</font><br><font size="2" color="#5F5F5F">Subject: </font><font size="2">Re: [PATCH] prd: Enable error logging via firmware_request interface</font><br><hr width="100%" size="2" align="left" noshade style="color:#8091A5; "><br><br><font size="2">Roland - Where did we land on the constant? Is it 4 or 5? (latest gerrit has 5)</font><br><tt><font size="2">+ PRD_FW_MSG_TYPE_ERROR_LOG = 4,</font></tt><br><br><font size="2">The rest seems fine.</font><br><font size="2"><br>--<br>Dan Crowell<br>Senior Software Engineer - Power Systems Enablement Firmware<br>IBM Rochester: t/l 553-2987<br>dcrowell@us.ibm.com</font><br><br><br><img width="16" height="16" src="cid:1__=8FBB0B0ADFC6E7DF8f9e8a93df938690918c8FB@" border="0" alt="Inactive hide details for Vasant Hegde ---09/11/2017 08:34:28 AM---In P9 HBRT sends error logs to FSP via firmware_request inte"><font size="2" color="#424282">Vasant Hegde ---09/11/2017 08:34:28 AM---In P9 HBRT sends error logs to FSP via firmware_request interface. This patch adds support to parse</font><br><br><font size="2" color="#5F5F5F">From: </font><font size="2">Vasant Hegde <hegdevasant@linux.vnet.ibm.com></font><br><font size="2" color="#5F5F5F">To: </font><font size="2">skiboot@lists.ozlabs.org</font><br><font size="2" color="#5F5F5F">Cc: </font><font size="2">Vasant Hegde <hegdevasant@linux.vnet.ibm.com>, Jeremy Kerr <jk@ozlabs.org>, Daniel M Crowell/Rochester/IBM@IBMUS</font><br><font size="2" color="#5F5F5F">Date: </font><font size="2">09/11/2017 08:34 AM</font><br><font size="2" color="#5F5F5F">Subject: </font><font size="2">[PATCH] prd: Enable error logging via firmware_request interface</font><br><hr width="100%" size="2" align="left" noshade style="color:#8091A5; "><br><br><br><tt><font size="2">In P9 HBRT sends error logs to FSP via firmware_request interface.<br>This patch adds support to parse error log and send it to FSP.<br><br>CC: Jeremy Kerr <jk@ozlabs.org><br>CC: Daniel M Crowell <dcrowell@us.ibm.com><br>Signed-off-by: Vasant Hegde <hegdevasant@linux.vnet.ibm.com><br>---<br> core/hostservices.c | 2 +-<br> hw/prd.c | 13 +++++++++++++<br> include/hostservices.h | 1 +<br> include/prd-fw-msg.h | 13 +++++++++++++<br> 4 files changed, 28 insertions(+), 1 deletion(-)<br><br>diff --git a/core/hostservices.c b/core/hostservices.c<br>index d1f6fda..dd8cae2 100644<br>--- a/core/hostservices.c<br>+++ b/core/hostservices.c<br>@@ -329,7 +329,7 @@ static void hservice_start_elog_send(void)<br> goto again;<br> }<br> <br>-static int hservice_send_error_log(uint32_t plid, uint32_t dsize, void *data)<br>+int hservice_send_error_log(uint32_t plid, uint32_t dsize, void *data)<br> {<br> struct hbrt_elog_ent *ent;<br> void *abuf;<br>diff --git a/hw/prd.c b/hw/prd.c<br>index d076c19..4db92eb 100644<br>--- a/hw/prd.c<br>+++ b/hw/prd.c<br>@@ -23,6 +23,7 @@<br> #include <fsp.h><br> #include <mem_region.h><br> #include <prd-fw-msg.h><br>+#include <hostservices.h><br> <br> enum events {<br> EVENT_ATTN = 1 << 0,<br>@@ -375,6 +376,18 @@ static int prd_msg_handle_firmware_req(struct opal_prd_msg *msg)<br> prd_msg->hdr.size = cpu_to_be16(sizeof(*prd_msg));<br> rc = 0;<br> break;<br>+ case PRD_FW_MSG_TYPE_ERROR_LOG:<br>+ rc = hservice_send_error_log(fw_req->errorlog.plid,<br>+ fw_req->errorlog.size,<br>+ fw_req->errorlog.data);<br>+ /* Return generic response to HBRT */<br>+ fw_resp->type = cpu_to_be64(PRD_FW_MSG_TYPE_RESP_GENERIC);<br>+ fw_resp->generic_resp.status = cpu_to_be64(rc);<br>+ prd_msg->fw_resp.len = cpu_to_be64(PRD_FW_MSG_BASE_SIZE +<br>+ sizeof(fw_resp->generic_resp));<br>+ prd_msg->hdr.size = cpu_to_be16(sizeof(*prd_msg));<br>+ rc = 0;<br>+ break;<br> default:<br> rc = -ENOSYS;<br> }<br>diff --git a/include/hostservices.h b/include/hostservices.h<br>index d6bb3e3..62ef04b 100644<br>--- a/include/hostservices.h<br>+++ b/include/hostservices.h<br>@@ -38,5 +38,6 @@ void host_services_occ_base_setup(void);<br> <br> int find_master_and_slave_occ(uint64_t **master, uint64_t **slave,<br> int *nr_masters, int *nr_slaves);<br>+int hservice_send_error_log(uint32_t plid, uint32_t dsize, void *data);<br> <br> #endif /* __HOSTSERVICES_H */<br>diff --git a/include/prd-fw-msg.h b/include/prd-fw-msg.h<br>index c00405d..950deb5 100644<br>--- a/include/prd-fw-msg.h<br>+++ b/include/prd-fw-msg.h<br>@@ -26,10 +26,23 @@<br> enum {<br> PRD_FW_MSG_TYPE_REQ_NOP = 0,<br> PRD_FW_MSG_TYPE_RESP_NOP = 1,<br>+ PRD_FW_MSG_TYPE_RESP_GENERIC = 2,<br>+ PRD_FW_MSG_TYPE_REQ_HCODE_UPDATE = 3,<br>+ PRD_FW_MSG_TYPE_ERROR_LOG = 4,<br> };<br> <br> struct prd_fw_msg {<br> __be64 type;<br>+ union {<br>+ struct {<br>+ __be64 status;<br>+ } generic_resp;<br>+ struct {<br>+ __be32 plid;<br>+ __be32 size;<br>+ char data[];<br>+ } __packed errorlog;<br>+ };<br> };<br> <br> #define PRD_FW_MSG_BASE_SIZE sizeof(__be64)<br>-- <br>2.9.3<br><br></font></tt><br><br><br><BR>
</body></html>
On 09/12/2017 09:03 PM, Roland Veloz wrote: > > Sorry for the confusion. I have two outstanding firmware request changes > out. Since the ELOG came later, I made it 5. > > This is what will be the final numbers: > > HBRT_FW_MSG_HBRT_FSP = 4, > HBRT_FW_MSG_TYPE_ERROR_LOG = 5, Thanks Roland. I've fixed it in v2. -Vasant
diff --git a/core/hostservices.c b/core/hostservices.c index d1f6fda..dd8cae2 100644 --- a/core/hostservices.c +++ b/core/hostservices.c @@ -329,7 +329,7 @@ static void hservice_start_elog_send(void) goto again; } -static int hservice_send_error_log(uint32_t plid, uint32_t dsize, void *data) +int hservice_send_error_log(uint32_t plid, uint32_t dsize, void *data) { struct hbrt_elog_ent *ent; void *abuf; diff --git a/hw/prd.c b/hw/prd.c index d076c19..4db92eb 100644 --- a/hw/prd.c +++ b/hw/prd.c @@ -23,6 +23,7 @@ #include <fsp.h> #include <mem_region.h> #include <prd-fw-msg.h> +#include <hostservices.h> enum events { EVENT_ATTN = 1 << 0, @@ -375,6 +376,18 @@ static int prd_msg_handle_firmware_req(struct opal_prd_msg *msg) prd_msg->hdr.size = cpu_to_be16(sizeof(*prd_msg)); rc = 0; break; + case PRD_FW_MSG_TYPE_ERROR_LOG: + rc = hservice_send_error_log(fw_req->errorlog.plid, + fw_req->errorlog.size, + fw_req->errorlog.data); + /* Return generic response to HBRT */ + fw_resp->type = cpu_to_be64(PRD_FW_MSG_TYPE_RESP_GENERIC); + fw_resp->generic_resp.status = cpu_to_be64(rc); + prd_msg->fw_resp.len = cpu_to_be64(PRD_FW_MSG_BASE_SIZE + + sizeof(fw_resp->generic_resp)); + prd_msg->hdr.size = cpu_to_be16(sizeof(*prd_msg)); + rc = 0; + break; default: rc = -ENOSYS; } diff --git a/include/hostservices.h b/include/hostservices.h index d6bb3e3..62ef04b 100644 --- a/include/hostservices.h +++ b/include/hostservices.h @@ -38,5 +38,6 @@ void host_services_occ_base_setup(void); int find_master_and_slave_occ(uint64_t **master, uint64_t **slave, int *nr_masters, int *nr_slaves); +int hservice_send_error_log(uint32_t plid, uint32_t dsize, void *data); #endif /* __HOSTSERVICES_H */ diff --git a/include/prd-fw-msg.h b/include/prd-fw-msg.h index c00405d..950deb5 100644 --- a/include/prd-fw-msg.h +++ b/include/prd-fw-msg.h @@ -26,10 +26,23 @@ enum { PRD_FW_MSG_TYPE_REQ_NOP = 0, PRD_FW_MSG_TYPE_RESP_NOP = 1, + PRD_FW_MSG_TYPE_RESP_GENERIC = 2, + PRD_FW_MSG_TYPE_REQ_HCODE_UPDATE = 3, + PRD_FW_MSG_TYPE_ERROR_LOG = 4, }; struct prd_fw_msg { __be64 type; + union { + struct { + __be64 status; + } generic_resp; + struct { + __be32 plid; + __be32 size; + char data[]; + } __packed errorlog; + }; }; #define PRD_FW_MSG_BASE_SIZE sizeof(__be64)
In P9 HBRT sends error logs to FSP via firmware_request interface. This patch adds support to parse error log and send it to FSP. CC: Jeremy Kerr <jk@ozlabs.org> CC: Daniel M Crowell <dcrowell@us.ibm.com> Signed-off-by: Vasant Hegde <hegdevasant@linux.vnet.ibm.com> --- core/hostservices.c | 2 +- hw/prd.c | 13 +++++++++++++ include/hostservices.h | 1 + include/prd-fw-msg.h | 13 +++++++++++++ 4 files changed, 28 insertions(+), 1 deletion(-)