prd: Enable error logging via firmware_request interface

Message ID 20170911133411.19963-1-hegdevasant@linux.vnet.ibm.com
State Superseded
Headers show
Series
  • prd: Enable error logging via firmware_request interface
Related show

Commit Message

Vasant Hegde Sept. 11, 2017, 1:34 p.m.
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(-)

Comments

Daniel M Crowell Sept. 11, 2017, 6:14 p.m. | #1
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)
Vasant Hegde Sept. 12, 2017, 3:50 a.m. | #2
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
Roland Veloz Sept. 12, 2017, 3:33 p.m. | #3
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 &lt;hegdevasant@linux.vnet.ibm.com&gt;, Roland Veloz/Austin/Contr/IBM@IBMUS</font><br><font size="2" color="#5F5F5F">Cc:        </font><font size="2">Jeremy Kerr &lt;jk@ozlabs.org&gt;, 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 &lt;hegdevasant@linux.vnet.ibm.com&gt;</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 &lt;hegdevasant@linux.vnet.ibm.com&gt;, Jeremy Kerr &lt;jk@ozlabs.org&gt;, 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 &lt;jk@ozlabs.org&gt;<br>CC: Daniel M Crowell &lt;dcrowell@us.ibm.com&gt;<br>Signed-off-by: Vasant Hegde &lt;hegdevasant@linux.vnet.ibm.com&gt;<br>---<br> core/hostservices.c &nbsp; &nbsp;| &nbsp;2 +-<br> hw/prd.c &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; | 13 +++++++++++++<br> include/hostservices.h | &nbsp;1 +<br> include/prd-fw-msg.h &nbsp; | 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 &lt;fsp.h&gt;<br> #include &lt;mem_region.h&gt;<br> #include &lt;prd-fw-msg.h&gt;<br>+#include &lt;hostservices.h&gt;<br> <br> enum events {<br>                  EVENT_ATTN                 = 1 &lt;&lt; 0,<br>@@ -375,6 +376,18 @@ static int prd_msg_handle_firmware_req(struct opal_prd_msg *msg)<br>                                   prd_msg-&gt;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-&gt;errorlog.plid,<br>+                                                                                     &nbsp; &nbsp; &nbsp;fw_req-&gt;errorlog.size,<br>+                                                                                     &nbsp; &nbsp; &nbsp;fw_req-&gt;errorlog.data);<br>+                                  /* Return generic response to HBRT */<br>+                                  fw_resp-&gt;type = cpu_to_be64(PRD_FW_MSG_TYPE_RESP_GENERIC);<br>+                                  fw_resp-&gt;generic_resp.status = cpu_to_be64(rc);<br>+                                  prd_msg-&gt;fw_resp.len = cpu_to_be64(PRD_FW_MSG_BASE_SIZE +<br>+                                                                                                      &nbsp;sizeof(fw_resp-&gt;generic_resp));<br>+                                  prd_msg-&gt;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>                                                    &nbsp; &nbsp; &nbsp; 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>
Vasant Hegde Sept. 12, 2017, 4:05 p.m. | #4
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

Patch

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)