<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">On Sat, Oct 17, 2026 at 9:49 PM Alexander Goodkind <<a href="mailto:alex@goodkind.io">alex@goodkind.io</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Use memcpy to copy each firmware command word into a local uint32_t<br>
before writing it to the card. Replace the uint32_t pointer reads in<br>
bnxt_hwrm_send_message() with byte access.<br>
<br>
Fixes: 1cd45aeb3270 ("net/bnxt: support Stratus VF device")<br>
Cc: <a href="mailto:stable@dpdk.org" target="_blank">stable@dpdk.org</a><br>
<br>
Signed-off-by: Alexander Goodkind <<a href="mailto:alex@goodkind.io" target="_blank">alex@goodkind.io</a>><br>
---<br>
<br>
VPP could not initialize the interfaces on my PowerEdge XR11 with a<br>
Broadcom BCM57504 card, using SR-IOV virtual functions inside an Ubuntu<br>
LXC container on Proxmox. The debugger showed an empty command header<br>
immediately before the driver wrote it to the card.<br>
<br>
The original pointer reads violate GCC's strict-aliasing rule [1].<br>
The patched driver initialized the interfaces and transferred packets<br>
with DPDK 26.03.0 and VPP 26.06-release. Separate build and software<br>
tests passed against the current Broadcom source.<br>
<br>
[1] <a href="https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html" rel="noreferrer" target="_blank">https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html</a><br>
<br>
 .mailmap                     |  1 +<br>
 drivers/net/bnxt/bnxt_hwrm.c | 11 +++++++----<br>
 2 files changed, 8 insertions(+), 4 deletions(-)<br>
<br>
diff --git a/.mailmap b/.mailmap<br>
index 5d1df79860..3143e642b5 100644<br>
--- a/.mailmap<br>
+++ b/.mailmap<br>
@@ -65,6 +65,7 @@ Alex Zelezniak <<a href="mailto:alexz@att.com" target="_blank">alexz@att.com</a>><br>
 Alexander Bechikov <<a href="mailto:asb.tyum@gmail.com" target="_blank">asb.tyum@gmail.com</a>><br>
 Alexander Belyakov <<a href="mailto:abelyako@gmail.com" target="_blank">abelyako@gmail.com</a>><br>
 Alexander Chernavin <<a href="mailto:achernavin@netgate.com" target="_blank">achernavin@netgate.com</a>><br>
+Alexander Goodkind <<a href="mailto:alex@goodkind.io" target="_blank">alex@goodkind.io</a>><br>
 Alexander Guy <<a href="mailto:alexander@andern.org" target="_blank">alexander@andern.org</a>><br>
 Alexander Kozyrev <<a href="mailto:akozyrev@nvidia.com" target="_blank">akozyrev@nvidia.com</a>> <<a href="mailto:akozyrev@mellanox.com" target="_blank">akozyrev@mellanox.com</a>><br>
 Alexander Matushevsky <<a href="mailto:matua@amazon.com" target="_blank">matua@amazon.com</a>><br>
diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c<br>
index ab1521953a..573a33b2de 100644<br>
--- a/drivers/net/bnxt/bnxt_hwrm.c<br>
+++ b/drivers/net/bnxt/bnxt_hwrm.c<br>
@@ -483,7 +483,7 @@ static int bnxt_hwrm_send_message(struct bnxt *bp,<br>
void *msg,<br>
        unsigned int i;<br>
        struct input *req = msg;<br>
        struct output *resp = bp->hwrm_cmd_resp_addr;<br>
-       uint32_t *data = msg;<br>
+       const uint8_t *data = msg;<br>
        uint8_t *bar;<br>
        uint8_t *valid;<br>
        uint16_t max_req_len = bp->max_req_len;<br>
@@ -526,7 +526,7 @@ static int bnxt_hwrm_send_message(struct bnxt *bp,<br>
void *msg,<br>
                short_input.req_addr =<br>
                        rte_cpu_to_le_64(bp->hwrm_short_cmd_req_dma_addr);<br>
<br>
-               data = (uint32_t *)&short_input;<br>
+               data = (const uint8_t *)&short_input;<br>
                msg_len = sizeof(short_input);<br>
<br>
                max_req_len = BNXT_HWRM_SHORT_REQ_LEN;<br>
@@ -534,9 +534,12 @@ static int bnxt_hwrm_send_message(struct bnxt<br>
*bp, void *msg,<br>
<br>
        /* Write request msg to hwrm channel */<br>
        for (i = 0; i < msg_len; i += 4) {<br>
+               uint32_t request_word;<br>
+<br>
                bar = (uint8_t *)bp->bar0 + bar_offset + i;<br>
-               rte_write32(*data, bar);<br>
-               data++;<br>
+               memcpy(&request_word, data, sizeof(request_word));<br>
+               rte_write32(request_word, bar);<br>
+               data += sizeof(request_word);<br>
        }<br>
<br>
        /* Zero the rest of the request space */<br>
<br>
base-commit: af80aca47b05d46f4a5e1951de3ce8372bd726b6<br>
--</blockquote><div> <span style="font-family:Calibri;font-size:11pt;background-color:transparent">Acked-by: Kishore
Padmanabha <<a href="mailto:kishore.padmanabha@broadcom.com">kishore.padmanabha@broadcom.com</a>></span></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> <br>
2.54.0 (Apple Git-157)<br>
</blockquote></div></div>