Răsfoiți Sursa

net: emaclite: add barriers to support Xilinx Zynq platform

This patch adds barriers at appropriate places to ensure the driver
works on Xilinx Zynq ARM-based SoC platform.

Signed-off-by: Srikanth Thokala <sthokal@xilinx.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Srikanth Thokala 11 ani în urmă
părinte
comite
ec21b6b404
1 a modificat fișierele cu 13 adăugiri și 0 ștergeri
  1. 13 0
      drivers/net/ethernet/xilinx/xilinx_emaclite.c

+ 13 - 0
drivers/net/ethernet/xilinx/xilinx_emaclite.c

@@ -220,6 +220,13 @@ static void xemaclite_aligned_write(void *src_ptr, u32 *dest_ptr,
 		*to_u16_ptr++ = *from_u16_ptr++;
 		*to_u16_ptr++ = *from_u16_ptr++;
 		*to_u16_ptr++ = *from_u16_ptr++;
 		*to_u16_ptr++ = *from_u16_ptr++;
 
 
+		/* This barrier resolves occasional issues seen around
+		 * cases where the data is not properly flushed out
+		 * from the processor store buffers to the destination
+		 * memory locations.
+		 */
+		wmb();
+
 		/* Output a word */
 		/* Output a word */
 		*to_u32_ptr++ = align_buffer;
 		*to_u32_ptr++ = align_buffer;
 	}
 	}
@@ -235,6 +242,12 @@ static void xemaclite_aligned_write(void *src_ptr, u32 *dest_ptr,
 		for (; length > 0; length--)
 		for (; length > 0; length--)
 			*to_u8_ptr++ = *from_u8_ptr++;
 			*to_u8_ptr++ = *from_u8_ptr++;
 
 
+		/* This barrier resolves occasional issues seen around
+		 * cases where the data is not properly flushed out
+		 * from the processor store buffers to the destination
+		 * memory locations.
+		 */
+		wmb();
 		*to_u32_ptr = align_buffer;
 		*to_u32_ptr = align_buffer;
 	}
 	}
 }
 }