<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Consolas, Courier, monospace; font-size: 12pt; color: rgb(0, 0, 0);">
<span style="font-family: Consolas, Courier, monospace, serif, EmojiFont;">Reviewed-by: Andrei Warkentin <andrey.warkentin@gmail.com></span><br>
</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> devel@edk2.groups.io <devel@edk2.groups.io> on behalf of Ard Biesheuvel via groups.io <ard.biesheuvel=arm.com@groups.io><br>
<b>Sent:</b> Monday, May 11, 2020 9:55 AM<br>
<b>To:</b> devel@edk2.groups.io <devel@edk2.groups.io><br>
<b>Cc:</b> Ard Biesheuvel <ard.biesheuvel@arm.com>; Pete Batard <pete@akeo.ie>; Jared McNeill <jmcneill@invisible.ca>; Andrei Warkentin <awarkentin@vmware.com>; Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com>; Jeremy Linton <jeremy.linton@arm.com><br>
<b>Subject:</b> [edk2-devel] [PATCH edk2-platforms v4 7/9] Silicon/Broadcom/BcmGenetDxe: use MemoryFence() for MMIO write ordering</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">ARM synchronization barriers can be used to stall execution and wait<br>
for cache or TLB maintenance to complete. TLB maintenance is irrelevant<br>
in the context of the GENET driver, but cache maintenance is important<br>
for non-cache coherent DMA, and synchronization barriers are needed to<br>
ensure that outgoing data is cleaned before starting DMA for TX frames.<br>
<br>
However, this cache maintenance is already taken care of by the cache<br>
maintenance routines, and so all we need to do in our I/O routines is<br>
ensure that MMIO writes are issued in the right order, and for this,<br>
an ordinary MemoryFence () is sufficient.<br>
<br>
This means we don't need to depend on ArmLib either.<br>
<br>
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@arm.com><br>
---<br>
 Silicon/Broadcom/Drivers/Net/BcmGenetDxe/BcmGenetDxe.inf | 2 --<br>
 Silicon/Broadcom/Drivers/Net/BcmGenetDxe/DriverBinding.c | 1 -<br>
 Silicon/Broadcom/Drivers/Net/BcmGenetDxe/GenetUtil.c     | 3 +--<br>
 3 files changed, 1 insertion(+), 5 deletions(-)<br>
<br>
diff --git a/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/BcmGenetDxe.inf b/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/BcmGenetDxe.inf<br>
index 9b3dc5e62ecf..e3e4ebbddb93 100644<br>
--- a/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/BcmGenetDxe.inf<br>
+++ b/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/BcmGenetDxe.inf<br>
@@ -27,7 +27,6 @@ [Sources]<br>
   SimpleNetwork.c<br>
 <br>
 [Packages]<br>
-  ArmPkg/ArmPkg.dec<br>
   EmbeddedPkg/EmbeddedPkg.dec<br>
   MdeModulePkg/MdeModulePkg.dec<br>
   MdePkg/MdePkg.dec<br>
@@ -35,7 +34,6 @@ [Packages]<br>
   Silicon/Broadcom/Drivers/Net/BcmNet.dec<br>
 <br>
 [LibraryClasses]<br>
-  ArmLib<br>
   BaseLib<br>
   BaseMemoryLib<br>
   DebugLib<br>
diff --git a/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/DriverBinding.c b/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/DriverBinding.c<br>
index 00fbfbc109bb..630a92ef210b 100644<br>
--- a/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/DriverBinding.c<br>
+++ b/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/DriverBinding.c<br>
@@ -9,7 +9,6 @@<br>
 <br>
 **/<br>
 <br>
-#include <Library/ArmLib.h><br>
 #include <Library/DebugLib.h><br>
 #include <Library/IoLib.h><br>
 #include <Library/MemoryAllocationLib.h><br>
diff --git a/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/GenetUtil.c b/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/GenetUtil.c<br>
index 35a3c7abdf1e..e3ce8614aeb2 100644<br>
--- a/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/GenetUtil.c<br>
+++ b/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/GenetUtil.c<br>
@@ -8,7 +8,6 @@<br>
 <br>
 #include "GenetUtil.h"<br>
 <br>
-#include <Library/ArmLib.h><br>
 #include <Library/DmaLib.h><br>
 #include <Library/IoLib.h><br>
 #include <Library/UefiBootServicesTableLib.h><br>
@@ -64,7 +63,7 @@ GenetMmioWrite (<br>
 {<br>
   ASSERT ((Offset & 3) == 0);<br>
 <br>
-  ArmDataSynchronizationBarrier ();<br>
+  MemoryFence ();<br>
   MmioWrite32 (Genet->RegBase + Offset, Data);<br>
 }<br>
 <br>
-- <br>
2.17.1<br>
<br>
<br>
<br>
<br>
</div>
</span></font></div>
</body>
</html>

<div width="1" style="color:white;clear:both">_._,_._,_</div>
<hr>
Groups.io Links:<p>


You receive all messages sent to this group.



<p>

<a target="_blank" href="https://edk2.groups.io/g/devel/message/59148">View/Reply Online (#59148)</a> |


  


|


  
    <a target="_blank" href="https://groups.io/mt/74137456/1813853">Mute This Topic</a>
  

| <a href="https://edk2.groups.io/g/devel/post">New Topic</a><br>



<br>

<a href="https://edk2.groups.io/g/devel/editsub/1813853">Your Subscription</a> |
<a href="mailto:devel+owner@edk2.groups.io">Contact Group Owner</a> |

<a href="https://edk2.groups.io/g/devel/unsub">Unsubscribe</a>

 [edk2-devel-archive@redhat.com]<br>
<div width="1" style="color:white;clear:both">_._,_._,_</div>