struct qbman_release_desc rd;
 
        for (i = 0; i < 7; i++) {
-               addr = memalign(L1_CACHE_BYTES, LDPAA_ETH_RX_BUFFER_SIZE);
+               addr = memalign(LDPAA_ETH_BUF_ALIGN, LDPAA_ETH_RX_BUFFER_SIZE);
                if (!addr) {
                        printf("addr allocation failed\n");
                        goto err_alloc;
        /* Configure our buffers' layout */
        dflt_dpni->buf_layout.options = DPNI_BUF_LAYOUT_OPT_PARSER_RESULT |
                                   DPNI_BUF_LAYOUT_OPT_FRAME_STATUS |
-                                  DPNI_BUF_LAYOUT_OPT_PRIVATE_DATA_SIZE;
+                                  DPNI_BUF_LAYOUT_OPT_PRIVATE_DATA_SIZE |
+                                  DPNI_BUF_LAYOUT_OPT_DATA_ALIGN;
        dflt_dpni->buf_layout.pass_parser_result = true;
        dflt_dpni->buf_layout.pass_frame_status = true;
        dflt_dpni->buf_layout.private_data_size = LDPAA_ETH_SWA_SIZE;
+       /* HW erratum mandates data alignment in multiples of 256 */
+       dflt_dpni->buf_layout.data_align = LDPAA_ETH_BUF_ALIGN;
        /* ...rx, ... */
        err = dpni_set_rx_buffer_layout(dflt_mc_io, MC_CMD_NO_FLAGS,
                                        dflt_dpni->dpni_handle,
        }
 
        /* ... tx, ... */
-       dflt_dpni->buf_layout.options &= ~DPNI_BUF_LAYOUT_OPT_PARSER_RESULT;
+       /* remove Rx-only options */
+       dflt_dpni->buf_layout.options &= ~(DPNI_BUF_LAYOUT_OPT_DATA_ALIGN |
+                                     DPNI_BUF_LAYOUT_OPT_PARSER_RESULT);
        err = dpni_set_tx_buffer_layout(dflt_mc_io, MC_CMD_NO_FLAGS,
                                        dflt_dpni->dpni_handle,
                                        &dflt_dpni->buf_layout);
 
 #define LDPAA_ETH_REFILL_THRESH                (LDPAA_ETH_NUM_BUFS/2)
 #define LDPAA_ETH_RX_BUFFER_SIZE       2048
 
-/* Hardware requires alignment for ingress/egress buffer addresses
- * and ingress buffer lengths.
+/* Hardware requires alignment for buffer address and length: 256-byte
+ * for ingress, 64-byte for egress. Using 256 for both.
  */
-#define LDPAA_ETH_BUF_ALIGN            64
+#define LDPAA_ETH_BUF_ALIGN            256
 
 /* So far we're only accomodating a skb backpointer in the frame's
  * software annotation, but the hardware options are either 0 or 64.