* [PATCH edk2-platforms v3 0/5] BCM genet fixes
@ 2020-05-11 7:06 Ard Biesheuvel
2020-05-11 7:06 ` [PATCH edk2-platforms v3 1/5] Silicon/Broadcom/BcmGenetDxe: whitespace/cosmetic cleanup Ard Biesheuvel
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: Ard Biesheuvel @ 2020-05-11 7:06 UTC (permalink / raw)
To: devel
Cc: Ard Biesheuvel, Pete Batard, Jared McNeill, Andrei Warkentin,
Samer El-Haj-Mahmoud
This fixes the multicast/broadcast/promisc handling, and switches to
ordinary page allocations for RX buffers. Patch #1 is cosmetic only.
Changes since v2:
- fix MDF filter handling (fixes issue reported by Samer)
- add patch to deal with ExitBootServices() so we don't leave the RX DMA
ring running when we enter the OS
https://github.com/pftf/edk2-platforms/tree/rpi4_genet_v3_ardb
Cc: Pete Batard <pete@akeo.ie>
Cc: Jared McNeill <jmcneill@invisible.ca>
Cc: Andrei Warkentin <awarkentin@vmware.com>
Cc: Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com>
Ard Biesheuvel (5):
Silicon/Broadcom/BcmGenetDxe: whitespace/cosmetic cleanup
Silicon/Broadcom/BcmGenetDxe: add support for broadcast filtering
Silicon/Broadcom/BcmGenetDxe: fix multicast/broadcast handling
Silicon/Broadcom/BcmGenetDxe: avoid uncached memory for streaming DMA
Silicon/Broadcom/BcmGenetDxe: shut down devices on ExitBootServices()
.../Drivers/Net/BcmGenetDxe/BcmGenetDxe.inf | 8 +
.../Drivers/Net/BcmGenetDxe/GenetUtil.h | 8 +
.../Drivers/Net/BcmGenetDxe/DriverBinding.c | 38 +-
.../Drivers/Net/BcmGenetDxe/GenetUtil.c | 715 ++++++++++--------
.../Drivers/Net/BcmGenetDxe/SimpleNetwork.c | 20 +-
5 files changed, 441 insertions(+), 348 deletions(-)
--
2.17.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH edk2-platforms v3 1/5] Silicon/Broadcom/BcmGenetDxe: whitespace/cosmetic cleanup
2020-05-11 7:06 [PATCH edk2-platforms v3 0/5] BCM genet fixes Ard Biesheuvel
@ 2020-05-11 7:06 ` Ard Biesheuvel
2020-05-11 7:06 ` [PATCH edk2-platforms v3 2/5] Silicon/Broadcom/BcmGenetDxe: add support for broadcast filtering Ard Biesheuvel
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Ard Biesheuvel @ 2020-05-11 7:06 UTC (permalink / raw)
To: devel
Cc: Ard Biesheuvel, Pete Batard, Jared McNeill, Andrei Warkentin,
Samer El-Haj-Mahmoud
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@arm.com>
---
Silicon/Broadcom/Drivers/Net/BcmGenetDxe/GenetUtil.c | 672 ++++++++++----------
1 file changed, 340 insertions(+), 332 deletions(-)
diff --git a/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/GenetUtil.c b/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/GenetUtil.c
index d471b1cadadc..af7c06656433 100644
--- a/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/GenetUtil.c
+++ b/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/GenetUtil.c
@@ -31,13 +31,13 @@
STATIC
UINT32
GenetMmioRead (
- IN GENET_PRIVATE_DATA *Genet,
- IN UINT32 Offset
- )
+ IN GENET_PRIVATE_DATA *Genet,
+ IN UINT32 Offset
+ )
{
- ASSERT((Offset & 3) == 0);
+ ASSERT ((Offset & 3) == 0);
- return MmioRead32 (Genet->RegBase + Offset);
+ return MmioRead32 (Genet->RegBase + Offset);
}
/**
@@ -53,15 +53,15 @@ GenetMmioRead (
STATIC
VOID
GenetMmioWrite (
- IN GENET_PRIVATE_DATA *Genet,
- IN UINT32 Offset,
- IN UINT32 Data
- )
+ IN GENET_PRIVATE_DATA *Genet,
+ IN UINT32 Offset,
+ IN UINT32 Data
+ )
{
- ASSERT((Offset & 3) == 0);
+ ASSERT ((Offset & 3) == 0);
- ArmDataSynchronizationBarrier ();
- MmioWrite32 (Genet->RegBase + Offset, Data);
+ ArmDataSynchronizationBarrier ();
+ MmioWrite32 (Genet->RegBase + Offset, Data);
}
/**
@@ -79,37 +79,38 @@ GenetMmioWrite (
EFI_STATUS
EFIAPI
GenetPhyRead (
- IN VOID *Priv,
- IN UINT8 PhyAddr,
- IN UINT8 Reg,
- OUT UINT16 *Data
- )
+ IN VOID *Priv,
+ IN UINT8 PhyAddr,
+ IN UINT8 Reg,
+ OUT UINT16 *Data
+ )
{
- GENET_PRIVATE_DATA *Genet = Priv;
- UINTN Retry;
- UINT32 Value;
+ GENET_PRIVATE_DATA *Genet = Priv;
+ UINTN Retry;
+ UINT32 Value;
- Value = GENET_MDIO_READ |
- GENET_MDIO_START_BUSY |
- __SHIFTIN(PhyAddr, GENET_MDIO_PMD) |
- __SHIFTIN(Reg, GENET_MDIO_REG);
- GenetMmioWrite (Genet, GENET_MDIO_CMD, Value);
+ Value = GENET_MDIO_READ |
+ GENET_MDIO_START_BUSY |
+ __SHIFTIN(PhyAddr, GENET_MDIO_PMD) |
+ __SHIFTIN(Reg, GENET_MDIO_REG);
+ GenetMmioWrite (Genet, GENET_MDIO_CMD, Value);
- for (Retry = GENET_PHY_RETRY; Retry > 0; Retry--) {
- Value = GenetMmioRead (Genet, GENET_MDIO_CMD);
- if ((Value & GENET_MDIO_START_BUSY) == 0) {
- *Data = Value & 0xffff;
- break;
- }
- gBS->Stall (10);
+ for (Retry = GENET_PHY_RETRY; Retry > 0; Retry--) {
+ Value = GenetMmioRead (Genet, GENET_MDIO_CMD);
+ if ((Value & GENET_MDIO_START_BUSY) == 0) {
+ *Data = Value & 0xffff;
+ break;
}
+ gBS->Stall (10);
+ }
- if (Retry == 0) {
- DEBUG ((DEBUG_ERROR, "GenetPhyRead: Timeout reading PhyAddr %d, Reg %d\n", PhyAddr, Reg));
- return EFI_DEVICE_ERROR;
- }
+ if (Retry == 0) {
+ DEBUG ((DEBUG_ERROR,
+ "GenetPhyRead: Timeout reading PhyAddr %d, Reg %d\n", PhyAddr, Reg));
+ return EFI_DEVICE_ERROR;
+ }
- return EFI_SUCCESS;
+ return EFI_SUCCESS;
}
/**
@@ -127,36 +128,37 @@ GenetPhyRead (
EFI_STATUS
EFIAPI
GenetPhyWrite (
- IN VOID *Priv,
- IN UINT8 PhyAddr,
- IN UINT8 Reg,
- IN UINT16 Data
- )
+ IN VOID *Priv,
+ IN UINT8 PhyAddr,
+ IN UINT8 Reg,
+ IN UINT16 Data
+ )
{
- GENET_PRIVATE_DATA *Genet = Priv;
- UINTN Retry;
- UINT32 Value;
+ GENET_PRIVATE_DATA *Genet = Priv;
+ UINTN Retry;
+ UINT32 Value;
- Value = GENET_MDIO_WRITE |
- GENET_MDIO_START_BUSY |
- __SHIFTIN(PhyAddr, GENET_MDIO_PMD) |
- __SHIFTIN(Reg, GENET_MDIO_REG);
- GenetMmioWrite (Genet, GENET_MDIO_CMD, Value | Data);
+ Value = GENET_MDIO_WRITE |
+ GENET_MDIO_START_BUSY |
+ __SHIFTIN(PhyAddr, GENET_MDIO_PMD) |
+ __SHIFTIN(Reg, GENET_MDIO_REG);
+ GenetMmioWrite (Genet, GENET_MDIO_CMD, Value | Data);
- for (Retry = GENET_PHY_RETRY; Retry > 0; Retry--) {
- Value = GenetMmioRead (Genet, GENET_MDIO_CMD);
- if ((Value & GENET_MDIO_START_BUSY) == 0) {
- break;
- }
- gBS->Stall (10);
+ for (Retry = GENET_PHY_RETRY; Retry > 0; Retry--) {
+ Value = GenetMmioRead (Genet, GENET_MDIO_CMD);
+ if ((Value & GENET_MDIO_START_BUSY) == 0) {
+ break;
}
+ gBS->Stall (10);
+ }
- if (Retry == 0) {
- DEBUG ((DEBUG_ERROR, "GenetPhyRead: Timeout writing PhyAddr %d, Reg %d\n", PhyAddr, Reg));
- return EFI_DEVICE_ERROR;
- }
+ if (Retry == 0) {
+ DEBUG ((DEBUG_ERROR,
+ "GenetPhyRead: Timeout writing PhyAddr %d, Reg %d\n", PhyAddr, Reg));
+ return EFI_DEVICE_ERROR;
+ }
- return EFI_SUCCESS;
+ return EFI_SUCCESS;
}
/**
@@ -170,13 +172,13 @@ GenetPhyWrite (
VOID
EFIAPI
GenetPhyConfigure (
- IN VOID *Priv,
- IN GENERIC_PHY_SPEED Speed,
- IN GENERIC_PHY_DUPLEX Duplex
- )
+ IN VOID *Priv,
+ IN GENERIC_PHY_SPEED Speed,
+ IN GENERIC_PHY_DUPLEX Duplex
+ )
{
- GENET_PRIVATE_DATA *Genet = Priv;
- UINT32 Value;
+ GENET_PRIVATE_DATA *Genet = Priv;
+ UINT32 Value;
Value = GenetMmioRead (Genet, GENET_EXT_RGMII_OOB_CTRL);
Value &= ~GENET_EXT_RGMII_OOB_OOB_DISABLE;
@@ -293,38 +295,40 @@ GenetPhyResetAction (
**/
VOID
GenetReset (
- IN GENET_PRIVATE_DATA *Genet
- )
+ IN GENET_PRIVATE_DATA *Genet
+ )
{
- UINT32 Value;
+ UINT32 Value;
- Value = GenetMmioRead (Genet, GENET_SYS_RBUF_FLUSH_CTRL);
- Value |= GENET_SYS_RBUF_FLUSH_RESET;
- GenetMmioWrite (Genet, GENET_SYS_RBUF_FLUSH_CTRL, Value);
- gBS->Stall (10);
+ Value = GenetMmioRead (Genet, GENET_SYS_RBUF_FLUSH_CTRL);
+ Value |= GENET_SYS_RBUF_FLUSH_RESET;
+ GenetMmioWrite (Genet, GENET_SYS_RBUF_FLUSH_CTRL, Value);
+ gBS->Stall (10);
- Value &= ~GENET_SYS_RBUF_FLUSH_RESET;
- GenetMmioWrite (Genet, GENET_SYS_RBUF_FLUSH_CTRL, Value);
- gBS->Stall (10);
+ Value &= ~GENET_SYS_RBUF_FLUSH_RESET;
+ GenetMmioWrite (Genet, GENET_SYS_RBUF_FLUSH_CTRL, Value);
+ gBS->Stall (10);
- GenetMmioWrite (Genet, GENET_SYS_RBUF_FLUSH_CTRL, 0);
- gBS->Stall (10);
+ GenetMmioWrite (Genet, GENET_SYS_RBUF_FLUSH_CTRL, 0);
+ gBS->Stall (10);
- GenetMmioWrite (Genet, GENET_UMAC_CMD, 0);
- GenetMmioWrite (Genet, GENET_UMAC_CMD, GENET_UMAC_CMD_LCL_LOOP_EN | GENET_UMAC_CMD_SW_RESET);
- gBS->Stall (10);
- GenetMmioWrite (Genet, GENET_UMAC_CMD, 0);
+ GenetMmioWrite (Genet, GENET_UMAC_CMD, 0);
+ GenetMmioWrite (Genet, GENET_UMAC_CMD,
+ GENET_UMAC_CMD_LCL_LOOP_EN | GENET_UMAC_CMD_SW_RESET);
+ gBS->Stall (10);
+ GenetMmioWrite (Genet, GENET_UMAC_CMD, 0);
- GenetMmioWrite (Genet, GENET_UMAC_MIB_CTRL, GENET_UMAC_MIB_RESET_RUNT | GENET_UMAC_MIB_RESET_RX | GENET_UMAC_MIB_RESET_TX);
- GenetMmioWrite (Genet, GENET_UMAC_MIB_CTRL, 0);
+ GenetMmioWrite (Genet, GENET_UMAC_MIB_CTRL,
+ GENET_UMAC_MIB_RESET_RUNT | GENET_UMAC_MIB_RESET_RX | GENET_UMAC_MIB_RESET_TX);
+ GenetMmioWrite (Genet, GENET_UMAC_MIB_CTRL, 0);
- GenetMmioWrite (Genet, GENET_UMAC_MAX_FRAME_LEN, 1536);
+ GenetMmioWrite (Genet, GENET_UMAC_MAX_FRAME_LEN, 1536);
- Value = GenetMmioRead (Genet, GENET_RBUF_CTRL);
- Value |= GENET_RBUF_ALIGN_2B;
- GenetMmioWrite (Genet, GENET_RBUF_CTRL, Value);
+ Value = GenetMmioRead (Genet, GENET_RBUF_CTRL);
+ Value |= GENET_RBUF_ALIGN_2B;
+ GenetMmioWrite (Genet, GENET_RBUF_CTRL, Value);
- GenetMmioWrite (Genet, GENET_RBUF_TBUF_SIZE_CTRL, 1);
+ GenetMmioWrite (Genet, GENET_RBUF_TBUF_SIZE_CTRL, 1);
}
/**
@@ -337,20 +341,20 @@ GenetReset (
VOID
EFIAPI
GenetSetMacAddress (
- IN GENET_PRIVATE_DATA *Genet,
- IN EFI_MAC_ADDRESS *MacAddr
- )
+ IN GENET_PRIVATE_DATA *Genet,
+ IN EFI_MAC_ADDRESS *MacAddr
+ )
{
- UINT32 Value;
+ UINT32 Value;
- Value = MacAddr->Addr[3] |
- MacAddr->Addr[2] << 8 |
- MacAddr->Addr[1] << 16 |
- MacAddr->Addr[0] << 24;
- GenetMmioWrite (Genet, GENET_UMAC_MAC0, Value);
- Value = MacAddr->Addr[5] |
- MacAddr->Addr[4] << 8;
- GenetMmioWrite (Genet, GENET_UMAC_MAC1, Value);
+ Value = MacAddr->Addr[3] |
+ MacAddr->Addr[2] << 8 |
+ MacAddr->Addr[1] << 16 |
+ MacAddr->Addr[0] << 24;
+ GenetMmioWrite (Genet, GENET_UMAC_MAC0, Value);
+ Value = MacAddr->Addr[5] |
+ MacAddr->Addr[4] << 8;
+ GenetMmioWrite (Genet, GENET_UMAC_MAC1, Value);
}
/**
@@ -362,24 +366,24 @@ GenetSetMacAddress (
**/
VOID
GenetSetPhyMode (
- IN GENET_PRIVATE_DATA *Genet,
- IN GENET_PHY_MODE PhyMode
- )
+ IN GENET_PRIVATE_DATA *Genet,
+ IN GENET_PHY_MODE PhyMode
+ )
{
- UINT32 Value;
+ UINT32 Value;
- switch (PhyMode) {
- case GENET_PHY_MODE_RGMII:
- case GENET_PHY_MODE_RGMII_RXID:
- case GENET_PHY_MODE_RGMII_TXID:
- case GENET_PHY_MODE_RGMII_ID:
- Value = GENET_SYS_PORT_MODE_EXT_GPHY;
- break;
- default:
- Value = 0;
- break;
- }
- GenetMmioWrite (Genet, GENET_SYS_PORT_CTRL, Value);
+ switch (PhyMode) {
+ case GENET_PHY_MODE_RGMII:
+ case GENET_PHY_MODE_RGMII_RXID:
+ case GENET_PHY_MODE_RGMII_TXID:
+ case GENET_PHY_MODE_RGMII_ID:
+ Value = GENET_SYS_PORT_MODE_EXT_GPHY;
+ break;
+ default:
+ Value = 0;
+ break;
+ }
+ GenetMmioWrite (Genet, GENET_SYS_PORT_CTRL, Value);
}
/**
@@ -390,31 +394,32 @@ GenetSetPhyMode (
**/
VOID
GenetEnableTxRx (
- IN GENET_PRIVATE_DATA *Genet
- )
+ IN GENET_PRIVATE_DATA *Genet
+ )
{
- UINT32 Value;
- UINT8 Qid = GENET_DMA_DEFAULT_QUEUE;
+ UINT32 Value;
+ UINT8 Qid = GENET_DMA_DEFAULT_QUEUE;
- // Start TX DMA on default queue
- Value = GenetMmioRead (Genet, GENET_TX_DMA_CTRL);
- Value |= GENET_TX_DMA_CTRL_EN;
- Value |= GENET_TX_DMA_CTRL_RBUF_EN(Qid);
- GenetMmioWrite (Genet, GENET_TX_DMA_CTRL, Value);
+ // Start TX DMA on default queue
+ Value = GenetMmioRead (Genet, GENET_TX_DMA_CTRL);
+ Value |= GENET_TX_DMA_CTRL_EN;
+ Value |= GENET_TX_DMA_CTRL_RBUF_EN (Qid);
+ GenetMmioWrite (Genet, GENET_TX_DMA_CTRL, Value);
- // Start RX DMA on default queue
- Value = GenetMmioRead (Genet, GENET_RX_DMA_CTRL);
- Value |= GENET_RX_DMA_CTRL_EN;
- Value |= GENET_RX_DMA_CTRL_RBUF_EN(Qid);
- GenetMmioWrite (Genet, GENET_RX_DMA_CTRL, Value);
+ // Start RX DMA on default queue
+ Value = GenetMmioRead (Genet, GENET_RX_DMA_CTRL);
+ Value |= GENET_RX_DMA_CTRL_EN;
+ Value |= GENET_RX_DMA_CTRL_RBUF_EN (Qid);
+ GenetMmioWrite (Genet, GENET_RX_DMA_CTRL, Value);
- // Enable transmitter and receiver
- Value = GenetMmioRead (Genet, GENET_UMAC_CMD);
- Value |= GENET_UMAC_CMD_TXEN | GENET_UMAC_CMD_RXEN;
- GenetMmioWrite (Genet, GENET_UMAC_CMD, Value);
+ // Enable transmitter and receiver
+ Value = GenetMmioRead (Genet, GENET_UMAC_CMD);
+ Value |= GENET_UMAC_CMD_TXEN | GENET_UMAC_CMD_RXEN;
+ GenetMmioWrite (Genet, GENET_UMAC_CMD, Value);
- // Enable interrupts
- GenetMmioWrite (Genet, GENET_INTRL2_CPU_CLEAR_MASK, GENET_IRQ_TXDMA_DONE | GENET_IRQ_RXDMA_DONE);
+ // Enable interrupts
+ GenetMmioWrite (Genet, GENET_INTRL2_CPU_CLEAR_MASK,
+ GENET_IRQ_TXDMA_DONE | GENET_IRQ_RXDMA_DONE);
}
/**
@@ -425,42 +430,42 @@ GenetEnableTxRx (
**/
VOID
GenetDisableTxRx (
- IN GENET_PRIVATE_DATA *Genet
- )
+ IN GENET_PRIVATE_DATA *Genet
+ )
{
- UINT32 Value;
- UINT8 Qid = GENET_DMA_DEFAULT_QUEUE;
+ UINT32 Value;
+ UINT8 Qid = GENET_DMA_DEFAULT_QUEUE;
- // Disable interrupts
- GenetMmioWrite (Genet, GENET_INTRL2_CPU_SET_MASK, 0xFFFFFFFF);
- GenetMmioWrite (Genet, GENET_INTRL2_CPU_CLEAR, 0xFFFFFFFF);
+ // Disable interrupts
+ GenetMmioWrite (Genet, GENET_INTRL2_CPU_SET_MASK, 0xFFFFFFFF);
+ GenetMmioWrite (Genet, GENET_INTRL2_CPU_CLEAR, 0xFFFFFFFF);
- // Disable receiver
- Value = GenetMmioRead (Genet, GENET_UMAC_CMD);
- Value &= ~GENET_UMAC_CMD_RXEN;
- GenetMmioWrite (Genet, GENET_UMAC_CMD, Value);
+ // Disable receiver
+ Value = GenetMmioRead (Genet, GENET_UMAC_CMD);
+ Value &= ~GENET_UMAC_CMD_RXEN;
+ GenetMmioWrite (Genet, GENET_UMAC_CMD, Value);
- // Stop RX DMA
- Value = GenetMmioRead (Genet, GENET_RX_DMA_CTRL);
- Value &= ~GENET_RX_DMA_CTRL_EN;
- Value &= ~GENET_RX_DMA_CTRL_RBUF_EN(Qid);
- GenetMmioWrite (Genet, GENET_RX_DMA_CTRL, Value);
+ // Stop RX DMA
+ Value = GenetMmioRead (Genet, GENET_RX_DMA_CTRL);
+ Value &= ~GENET_RX_DMA_CTRL_EN;
+ Value &= ~GENET_RX_DMA_CTRL_RBUF_EN (Qid);
+ GenetMmioWrite (Genet, GENET_RX_DMA_CTRL, Value);
- // Stop TX DMA
- Value = GenetMmioRead (Genet, GENET_TX_DMA_CTRL);
- Value &= ~GENET_TX_DMA_CTRL_EN;
- Value &= ~GENET_TX_DMA_CTRL_RBUF_EN(Qid);
- GenetMmioWrite (Genet, GENET_TX_DMA_CTRL, Value);
+ // Stop TX DMA
+ Value = GenetMmioRead (Genet, GENET_TX_DMA_CTRL);
+ Value &= ~GENET_TX_DMA_CTRL_EN;
+ Value &= ~GENET_TX_DMA_CTRL_RBUF_EN (Qid);
+ GenetMmioWrite (Genet, GENET_TX_DMA_CTRL, Value);
- // Flush data in the TX FIFO
- GenetMmioWrite (Genet, GENET_UMAC_TX_FLUSH, 1);
- gBS->Stall (10);
- GenetMmioWrite (Genet, GENET_UMAC_TX_FLUSH, 0);
+ // Flush data in the TX FIFO
+ GenetMmioWrite (Genet, GENET_UMAC_TX_FLUSH, 1);
+ gBS->Stall (10);
+ GenetMmioWrite (Genet, GENET_UMAC_TX_FLUSH, 0);
- // Disable transmitter
- Value = GenetMmioRead (Genet, GENET_UMAC_CMD);
- Value &= ~GENET_UMAC_CMD_TXEN;
- GenetMmioWrite (Genet, GENET_UMAC_CMD, Value);
+ // Disable transmitter
+ Value = GenetMmioRead (Genet, GENET_UMAC_CMD);
+ Value &= ~GENET_UMAC_CMD_TXEN;
+ GenetMmioWrite (Genet, GENET_UMAC_CMD, Value);
}
/**
@@ -472,19 +477,19 @@ GenetDisableTxRx (
**/
VOID
GenetSetPromisc (
- IN GENET_PRIVATE_DATA *Genet,
- IN BOOLEAN Enable
- )
+ IN GENET_PRIVATE_DATA *Genet,
+ IN BOOLEAN Enable
+ )
{
- UINT32 Value;
+ UINT32 Value;
- Value = GenetMmioRead (Genet, GENET_UMAC_CMD);
- if (Enable) {
- Value |= GENET_UMAC_CMD_PROMISC;
- } else {
- Value &= ~GENET_UMAC_CMD_PROMISC;
- }
- GenetMmioWrite (Genet, GENET_UMAC_CMD, Value);
+ Value = GenetMmioRead (Genet, GENET_UMAC_CMD);
+ if (Enable) {
+ Value |= GENET_UMAC_CMD_PROMISC;
+ } else {
+ Value &= ~GENET_UMAC_CMD_PROMISC;
+ }
+ GenetMmioWrite (Genet, GENET_UMAC_CMD, Value);
}
/**
@@ -495,63 +500,63 @@ GenetSetPromisc (
**/
VOID
GenetDmaInitRings (
- IN GENET_PRIVATE_DATA *Genet
- )
+ IN GENET_PRIVATE_DATA *Genet
+ )
{
- UINT8 Qid = GENET_DMA_DEFAULT_QUEUE;
+ UINT8 Qid = GENET_DMA_DEFAULT_QUEUE;
- Genet->TxQueued = 0;
- Genet->TxNext = 0;
- Genet->TxConsIndex = 0;
- Genet->TxProdIndex = 0;
+ Genet->TxQueued = 0;
+ Genet->TxNext = 0;
+ Genet->TxConsIndex = 0;
+ Genet->TxProdIndex = 0;
- Genet->RxConsIndex = 0;
- Genet->RxProdIndex = 0;
+ Genet->RxConsIndex = 0;
+ Genet->RxProdIndex = 0;
- // Configure TX queue
- GenetMmioWrite (Genet, GENET_TX_SCB_BURST_SIZE, 0x08);
- GenetMmioWrite (Genet, GENET_TX_DMA_READ_PTR_LO(Qid), 0);
- GenetMmioWrite (Genet, GENET_TX_DMA_READ_PTR_HI(Qid), 0);
- GenetMmioWrite (Genet, GENET_TX_DMA_CONS_INDEX(Qid), 0);
- GenetMmioWrite (Genet, GENET_TX_DMA_PROD_INDEX(Qid), 0);
- GenetMmioWrite (Genet, GENET_TX_DMA_RING_BUF_SIZE(Qid),
- __SHIFTIN(GENET_DMA_DESC_COUNT, GENET_TX_DMA_RING_BUF_SIZE_DESC_COUNT) |
- __SHIFTIN(GENET_MAX_PACKET_SIZE, GENET_TX_DMA_RING_BUF_SIZE_BUF_LENGTH));
- GenetMmioWrite (Genet, GENET_TX_DMA_START_ADDR_LO(Qid), 0);
- GenetMmioWrite (Genet, GENET_TX_DMA_START_ADDR_HI(Qid), 0);
- GenetMmioWrite (Genet, GENET_TX_DMA_END_ADDR_LO(Qid),
- GENET_DMA_DESC_COUNT * GENET_DMA_DESC_SIZE / 4 - 1);
- GenetMmioWrite (Genet, GENET_TX_DMA_END_ADDR_HI(Qid), 0);
- GenetMmioWrite (Genet, GENET_TX_DMA_MBUF_DONE_THRES(Qid), 1);
- GenetMmioWrite (Genet, GENET_TX_DMA_FLOW_PERIOD(Qid), 0);
- GenetMmioWrite (Genet, GENET_TX_DMA_WRITE_PTR_LO(Qid), 0);
- GenetMmioWrite (Genet, GENET_TX_DMA_WRITE_PTR_HI(Qid), 0);
+ // Configure TX queue
+ GenetMmioWrite (Genet, GENET_TX_SCB_BURST_SIZE, 0x08);
+ GenetMmioWrite (Genet, GENET_TX_DMA_READ_PTR_LO (Qid), 0);
+ GenetMmioWrite (Genet, GENET_TX_DMA_READ_PTR_HI (Qid), 0);
+ GenetMmioWrite (Genet, GENET_TX_DMA_CONS_INDEX (Qid), 0);
+ GenetMmioWrite (Genet, GENET_TX_DMA_PROD_INDEX (Qid), 0);
+ GenetMmioWrite (Genet, GENET_TX_DMA_RING_BUF_SIZE (Qid),
+ __SHIFTIN(GENET_DMA_DESC_COUNT, GENET_TX_DMA_RING_BUF_SIZE_DESC_COUNT) |
+ __SHIFTIN(GENET_MAX_PACKET_SIZE, GENET_TX_DMA_RING_BUF_SIZE_BUF_LENGTH));
+ GenetMmioWrite (Genet, GENET_TX_DMA_START_ADDR_LO (Qid), 0);
+ GenetMmioWrite (Genet, GENET_TX_DMA_START_ADDR_HI (Qid), 0);
+ GenetMmioWrite (Genet, GENET_TX_DMA_END_ADDR_LO (Qid),
+ GENET_DMA_DESC_COUNT * GENET_DMA_DESC_SIZE / 4 - 1);
+ GenetMmioWrite (Genet, GENET_TX_DMA_END_ADDR_HI (Qid), 0);
+ GenetMmioWrite (Genet, GENET_TX_DMA_MBUF_DONE_THRES (Qid), 1);
+ GenetMmioWrite (Genet, GENET_TX_DMA_FLOW_PERIOD (Qid), 0);
+ GenetMmioWrite (Genet, GENET_TX_DMA_WRITE_PTR_LO (Qid), 0);
+ GenetMmioWrite (Genet, GENET_TX_DMA_WRITE_PTR_HI (Qid), 0);
- // Enable TX queue
- GenetMmioWrite (Genet, GENET_TX_DMA_RING_CFG, (1U << Qid));
+ // Enable TX queue
+ GenetMmioWrite (Genet, GENET_TX_DMA_RING_CFG, (1U << Qid));
- // Configure RX queue
- GenetMmioWrite (Genet, GENET_RX_SCB_BURST_SIZE, 0x08);
- GenetMmioWrite (Genet, GENET_RX_DMA_WRITE_PTR_LO(Qid), 0);
- GenetMmioWrite (Genet, GENET_RX_DMA_WRITE_PTR_HI(Qid), 0);
- GenetMmioWrite (Genet, GENET_RX_DMA_PROD_INDEX(Qid), 0);
- GenetMmioWrite (Genet, GENET_RX_DMA_CONS_INDEX(Qid), 0);
- GenetMmioWrite (Genet, GENET_RX_DMA_RING_BUF_SIZE(Qid),
- __SHIFTIN(GENET_DMA_DESC_COUNT, GENET_RX_DMA_RING_BUF_SIZE_DESC_COUNT) |
- __SHIFTIN(GENET_MAX_PACKET_SIZE, GENET_RX_DMA_RING_BUF_SIZE_BUF_LENGTH));
- GenetMmioWrite (Genet, GENET_RX_DMA_START_ADDR_LO(Qid), 0);
- GenetMmioWrite (Genet, GENET_RX_DMA_START_ADDR_HI(Qid), 0);
- GenetMmioWrite (Genet, GENET_RX_DMA_END_ADDR_LO(Qid),
- GENET_DMA_DESC_COUNT * GENET_DMA_DESC_SIZE / 4 - 1);
- GenetMmioWrite (Genet, GENET_RX_DMA_END_ADDR_HI(Qid), 0);
- GenetMmioWrite (Genet, GENET_RX_DMA_XON_XOFF_THRES(Qid),
- __SHIFTIN(5, GENET_RX_DMA_XON_XOFF_THRES_LO) |
- __SHIFTIN(GENET_DMA_DESC_COUNT >> 4, GENET_RX_DMA_XON_XOFF_THRES_HI));
- GenetMmioWrite (Genet, GENET_RX_DMA_READ_PTR_LO(Qid), 0);
- GenetMmioWrite (Genet, GENET_RX_DMA_READ_PTR_HI(Qid), 0);
+ // Configure RX queue
+ GenetMmioWrite (Genet, GENET_RX_SCB_BURST_SIZE, 0x08);
+ GenetMmioWrite (Genet, GENET_RX_DMA_WRITE_PTR_LO (Qid), 0);
+ GenetMmioWrite (Genet, GENET_RX_DMA_WRITE_PTR_HI (Qid), 0);
+ GenetMmioWrite (Genet, GENET_RX_DMA_PROD_INDEX (Qid), 0);
+ GenetMmioWrite (Genet, GENET_RX_DMA_CONS_INDEX (Qid), 0);
+ GenetMmioWrite (Genet, GENET_RX_DMA_RING_BUF_SIZE (Qid),
+ __SHIFTIN(GENET_DMA_DESC_COUNT, GENET_RX_DMA_RING_BUF_SIZE_DESC_COUNT) |
+ __SHIFTIN(GENET_MAX_PACKET_SIZE, GENET_RX_DMA_RING_BUF_SIZE_BUF_LENGTH));
+ GenetMmioWrite (Genet, GENET_RX_DMA_START_ADDR_LO (Qid), 0);
+ GenetMmioWrite (Genet, GENET_RX_DMA_START_ADDR_HI (Qid), 0);
+ GenetMmioWrite (Genet, GENET_RX_DMA_END_ADDR_LO (Qid),
+ GENET_DMA_DESC_COUNT * GENET_DMA_DESC_SIZE / 4 - 1);
+ GenetMmioWrite (Genet, GENET_RX_DMA_END_ADDR_HI (Qid), 0);
+ GenetMmioWrite (Genet, GENET_RX_DMA_XON_XOFF_THRES (Qid),
+ __SHIFTIN(5, GENET_RX_DMA_XON_XOFF_THRES_LO) |
+ __SHIFTIN(GENET_DMA_DESC_COUNT >> 4, GENET_RX_DMA_XON_XOFF_THRES_HI));
+ GenetMmioWrite (Genet, GENET_RX_DMA_READ_PTR_LO (Qid), 0);
+ GenetMmioWrite (Genet, GENET_RX_DMA_READ_PTR_HI (Qid), 0);
- // Enable RX queue
- GenetMmioWrite (Genet, GENET_RX_DMA_RING_CFG, (1U << Qid));
+ // Enable RX queue
+ GenetMmioWrite (Genet, GENET_RX_DMA_RING_CFG, (1U << Qid));
}
/**
@@ -564,22 +569,22 @@ GenetDmaInitRings (
**/
EFI_STATUS
GenetDmaAlloc (
- IN GENET_PRIVATE_DATA *Genet
- )
+ IN GENET_PRIVATE_DATA *Genet
+ )
{
- EFI_STATUS Status;
- UINTN n;
+ EFI_STATUS Status;
+ UINTN Idx;
- for (n = 0; n < GENET_DMA_DESC_COUNT; n++) {
- Status = DmaAllocateBuffer (EfiBootServicesData, EFI_SIZE_TO_PAGES (GENET_MAX_PACKET_SIZE), (VOID **)&Genet->RxBuffer[n]);
- if (EFI_ERROR (Status)) {
- DEBUG ((DEBUG_ERROR, "GenetDmaAlloc: Failed to allocate RX buffer: %r\n", Status));
- GenetDmaFree (Genet);
- return Status;
- }
+ for (Idx = 0; Idx < GENET_DMA_DESC_COUNT; Idx++) {
+ Status = DmaAllocateBuffer (EfiBootServicesData, EFI_SIZE_TO_PAGES (GENET_MAX_PACKET_SIZE), (VOID **)&Genet->RxBuffer[Idx]);
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR, "GenetDmaAlloc: Failed to allocate RX buffer: %r\n", Status));
+ GenetDmaFree (Genet);
+ return Status;
}
+ }
- return EFI_SUCCESS;
+ return EFI_SUCCESS;
}
/**
@@ -594,33 +599,34 @@ GenetDmaAlloc (
**/
EFI_STATUS
GenetDmaMapRxDescriptor (
- IN GENET_PRIVATE_DATA * Genet,
- IN UINT8 DescIndex
- )
+ IN GENET_PRIVATE_DATA * Genet,
+ IN UINT8 DescIndex
+ )
{
- EFI_STATUS Status;
- UINTN DmaNumberOfBytes;
+ EFI_STATUS Status;
+ UINTN DmaNumberOfBytes;
- ASSERT (Genet->RxBufferMap[DescIndex].Mapping == NULL);
- ASSERT (Genet->RxBuffer[DescIndex] != NULL);
+ ASSERT (Genet->RxBufferMap[DescIndex].Mapping == NULL);
+ ASSERT (Genet->RxBuffer[DescIndex] != NULL);
- DmaNumberOfBytes = GENET_MAX_PACKET_SIZE;
- Status = DmaMap (MapOperationBusMasterWrite,
- (VOID *)Genet->RxBuffer[DescIndex],
- &DmaNumberOfBytes,
- &Genet->RxBufferMap[DescIndex].Pa,
- &Genet->RxBufferMap[DescIndex].Mapping);
- if (EFI_ERROR (Status)) {
- DEBUG ((DEBUG_ERROR, "GenetDmaMapRxDescriptor: Failed to map RX buffer: %r\n", Status));
- return Status;
- }
+ DmaNumberOfBytes = GENET_MAX_PACKET_SIZE;
+ Status = DmaMap (MapOperationBusMasterWrite,
+ (VOID *)Genet->RxBuffer[DescIndex],
+ &DmaNumberOfBytes,
+ &Genet->RxBufferMap[DescIndex].Pa,
+ &Genet->RxBufferMap[DescIndex].Mapping);
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_ERROR,
+ "GenetDmaMapRxDescriptor: Failed to map RX buffer: %r\n", Status));
+ return Status;
+ }
- //DEBUG ((DEBUG_INFO, "GenetDmaMapRxDescriptor: Desc 0x%X mapped to 0x%X\n", DescIndex, Genet->RxBufferMap[DescIndex].Pa));
+ GenetMmioWrite (Genet, GENET_RX_DESC_ADDRESS_LO (DescIndex),
+ Genet->RxBufferMap[DescIndex].Pa & 0xFFFFFFFF);
+ GenetMmioWrite (Genet, GENET_RX_DESC_ADDRESS_HI (DescIndex),
+ (Genet->RxBufferMap[DescIndex].Pa >> 32) & 0xFFFFFFFF);
- GenetMmioWrite (Genet, GENET_RX_DESC_ADDRESS_LO (DescIndex), Genet->RxBufferMap[DescIndex].Pa & 0xFFFFFFFF);
- GenetMmioWrite (Genet, GENET_RX_DESC_ADDRESS_HI (DescIndex), (Genet->RxBufferMap[DescIndex].Pa >> 32) & 0xFFFFFFFF);
-
- return EFI_SUCCESS;
+ return EFI_SUCCESS;
}
/**
@@ -632,14 +638,14 @@ GenetDmaMapRxDescriptor (
**/
VOID
GenetDmaUnmapRxDescriptor (
- IN GENET_PRIVATE_DATA * Genet,
- IN UINT8 DescIndex
- )
+ IN GENET_PRIVATE_DATA * Genet,
+ IN UINT8 DescIndex
+ )
{
- if (Genet->RxBufferMap[DescIndex].Mapping != NULL) {
- DmaUnmap (Genet->RxBufferMap[DescIndex].Mapping);
- Genet->RxBufferMap[DescIndex].Mapping = NULL;
- }
+ if (Genet->RxBufferMap[DescIndex].Mapping != NULL) {
+ DmaUnmap (Genet->RxBufferMap[DescIndex].Mapping);
+ Genet->RxBufferMap[DescIndex].Mapping = NULL;
+ }
}
/**
@@ -651,19 +657,20 @@ GenetDmaUnmapRxDescriptor (
**/
VOID
GenetDmaFree (
- IN GENET_PRIVATE_DATA *Genet
- )
+ IN GENET_PRIVATE_DATA *Genet
+ )
{
- UINTN n;
+ UINTN Idx;
- for (n = 0; n < GENET_DMA_DESC_COUNT; n++) {
- GenetDmaUnmapRxDescriptor (Genet, n);
+ for (Idx = 0; Idx < GENET_DMA_DESC_COUNT; Idx++) {
+ GenetDmaUnmapRxDescriptor (Genet, Idx);
- if (Genet->RxBuffer[n] != NULL) {
- DmaFreeBuffer (EFI_SIZE_TO_PAGES (GENET_MAX_PACKET_SIZE), Genet->RxBuffer[n]);
- Genet->RxBuffer[n] = NULL;
- }
+ if (Genet->RxBuffer[Idx] != NULL) {
+ DmaFreeBuffer (EFI_SIZE_TO_PAGES (GENET_MAX_PACKET_SIZE),
+ Genet->RxBuffer[Idx]);
+ Genet->RxBuffer[Idx] = NULL;
}
+ }
}
/**
@@ -677,26 +684,29 @@ GenetDmaFree (
**/
VOID
GenetDmaTriggerTx (
- IN GENET_PRIVATE_DATA * Genet,
- IN UINT8 DescIndex,
- IN EFI_PHYSICAL_ADDRESS PhysAddr,
- IN UINTN NumberOfBytes
- )
+ IN GENET_PRIVATE_DATA * Genet,
+ IN UINT8 DescIndex,
+ IN EFI_PHYSICAL_ADDRESS PhysAddr,
+ IN UINTN NumberOfBytes
+ )
{
- UINT32 DescStatus;
- UINT8 Qid = GENET_DMA_DEFAULT_QUEUE;
+ UINT32 DescStatus;
+ UINT8 Qid = GENET_DMA_DEFAULT_QUEUE;
- DescStatus = GENET_TX_DESC_STATUS_SOP |
- GENET_TX_DESC_STATUS_EOP |
- GENET_TX_DESC_STATUS_CRC |
- GENET_TX_DESC_STATUS_QTAG |
- __SHIFTIN(NumberOfBytes, GENET_TX_DESC_STATUS_BUFLEN);
+ DescStatus = GENET_TX_DESC_STATUS_SOP |
+ GENET_TX_DESC_STATUS_EOP |
+ GENET_TX_DESC_STATUS_CRC |
+ GENET_TX_DESC_STATUS_QTAG |
+ __SHIFTIN(NumberOfBytes, GENET_TX_DESC_STATUS_BUFLEN);
- GenetMmioWrite (Genet, GENET_TX_DESC_ADDRESS_LO(DescIndex), PhysAddr & 0xFFFFFFFF);
- GenetMmioWrite (Genet, GENET_TX_DESC_ADDRESS_HI(DescIndex), (PhysAddr >> 32) & 0xFFFFFFFF);
- GenetMmioWrite (Genet, GENET_TX_DESC_STATUS(DescIndex), DescStatus);
+ GenetMmioWrite (Genet, GENET_TX_DESC_ADDRESS_LO(DescIndex),
+ PhysAddr & 0xFFFFFFFF);
+ GenetMmioWrite (Genet, GENET_TX_DESC_ADDRESS_HI(DescIndex),
+ (PhysAddr >> 32) & 0xFFFFFFFF);
+ GenetMmioWrite (Genet, GENET_TX_DESC_STATUS(DescIndex), DescStatus);
- GenetMmioWrite (Genet, GENET_TX_DMA_PROD_INDEX (Qid), (DescIndex + 1) & 0xFFFF);
+ GenetMmioWrite (Genet, GENET_TX_DMA_PROD_INDEX (Qid),
+ (DescIndex + 1) & 0xFFFF);
}
/**
@@ -708,24 +718,24 @@ GenetDmaTriggerTx (
**/
VOID
GenetTxIntr (
- IN GENET_PRIVATE_DATA *Genet,
- OUT VOID **TxBuf
- )
+ IN GENET_PRIVATE_DATA *Genet,
+ OUT VOID **TxBuf
+ )
{
- UINT32 ConsIndex, Total;
- UINT8 Qid = GENET_DMA_DEFAULT_QUEUE;
+ UINT32 ConsIndex, Total;
+ UINT8 Qid = GENET_DMA_DEFAULT_QUEUE;
- ConsIndex = GenetMmioRead (Genet, GENET_TX_DMA_CONS_INDEX (Qid)) & 0xFFFF;
+ ConsIndex = GenetMmioRead (Genet, GENET_TX_DMA_CONS_INDEX (Qid)) & 0xFFFF;
- Total = (ConsIndex - Genet->TxConsIndex) & 0xFFFF;
- if (Genet->TxQueued > 0 && Total > 0) {
- *TxBuf = Genet->TxBuffer[Genet->TxNext];
- Genet->TxQueued--;
- Genet->TxNext = (Genet->TxNext + 1) % GENET_DMA_DESC_COUNT;
- Genet->TxConsIndex++;
- } else {
- *TxBuf = NULL;
- }
+ Total = (ConsIndex - Genet->TxConsIndex) & 0xFFFF;
+ if (Genet->TxQueued > 0 && Total > 0) {
+ *TxBuf = Genet->TxBuffer[Genet->TxNext];
+ Genet->TxQueued--;
+ Genet->TxNext = (Genet->TxNext + 1) % GENET_DMA_DESC_COUNT;
+ Genet->TxConsIndex++;
+ } else {
+ *TxBuf = NULL;
+ }
}
/**
@@ -742,32 +752,30 @@ GenetTxIntr (
**/
EFI_STATUS
GenetRxIntr (
- IN GENET_PRIVATE_DATA *Genet,
- OUT UINT8 *DescIndex,
- OUT UINTN *FrameLength
- )
+ IN GENET_PRIVATE_DATA *Genet,
+ OUT UINT8 *DescIndex,
+ OUT UINTN *FrameLength
+ )
{
- EFI_STATUS Status;
- UINT32 ProdIndex, Total;
- UINT32 DescStatus;
- UINT8 Qid = GENET_DMA_DEFAULT_QUEUE;
+ EFI_STATUS Status;
+ UINT32 ProdIndex, Total;
+ UINT32 DescStatus;
+ UINT8 Qid = GENET_DMA_DEFAULT_QUEUE;
- ProdIndex = GenetMmioRead (Genet, GENET_RX_DMA_PROD_INDEX (Qid)) & 0xFFFF;
+ ProdIndex = GenetMmioRead (Genet, GENET_RX_DMA_PROD_INDEX (Qid)) & 0xFFFF;
- Total = (ProdIndex - Genet->RxConsIndex) & 0xFFFF;
- if (Total > 0) {
- *DescIndex = Genet->RxConsIndex % GENET_DMA_DESC_COUNT;
- DescStatus = GenetMmioRead (Genet, GENET_RX_DESC_STATUS (*DescIndex));
- *FrameLength = __SHIFTOUT (DescStatus, GENET_RX_DESC_STATUS_BUFLEN);
+ Total = (ProdIndex - Genet->RxConsIndex) & 0xFFFF;
+ if (Total > 0) {
+ *DescIndex = Genet->RxConsIndex % GENET_DMA_DESC_COUNT;
+ DescStatus = GenetMmioRead (Genet, GENET_RX_DESC_STATUS (*DescIndex));
+ *FrameLength = __SHIFTOUT (DescStatus, GENET_RX_DESC_STATUS_BUFLEN);
- //DEBUG ((DEBUG_INFO, "GenetRxIntr: DescIndex=0x%X FrameLength=0x%X\n", *DescIndex, *FrameLength));
+ Genet->RxConsIndex = (Genet->RxConsIndex + 1) & 0xFFFF;
+ GenetMmioWrite (Genet, GENET_RX_DMA_CONS_INDEX (Qid), Genet->RxConsIndex);
+ Status = EFI_SUCCESS;
+ } else {
+ Status = EFI_NOT_READY;
+ }
- Genet->RxConsIndex = (Genet->RxConsIndex + 1) & 0xFFFF;
- GenetMmioWrite (Genet, GENET_RX_DMA_CONS_INDEX (Qid), Genet->RxConsIndex);
- Status = EFI_SUCCESS;
- } else {
- Status = EFI_NOT_READY;
- }
-
- return Status;
+ return Status;
}
--
2.17.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH edk2-platforms v3 2/5] Silicon/Broadcom/BcmGenetDxe: add support for broadcast filtering
2020-05-11 7:06 [PATCH edk2-platforms v3 0/5] BCM genet fixes Ard Biesheuvel
2020-05-11 7:06 ` [PATCH edk2-platforms v3 1/5] Silicon/Broadcom/BcmGenetDxe: whitespace/cosmetic cleanup Ard Biesheuvel
@ 2020-05-11 7:06 ` Ard Biesheuvel
2020-05-11 7:06 ` [PATCH edk2-platforms v3 3/5] Silicon/Broadcom/BcmGenetDxe: fix multicast/broadcast handling Ard Biesheuvel
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Ard Biesheuvel @ 2020-05-11 7:06 UTC (permalink / raw)
To: devel
Cc: Ard Biesheuvel, Pete Batard, Jared McNeill, Andrei Warkentin,
Samer El-Haj-Mahmoud
Add a helper to configure the first MDF filter for filtering the
broadcast Ethernet address.
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@arm.com>
---
Silicon/Broadcom/Drivers/Net/BcmGenetDxe/GenetUtil.h | 7 ++++++
Silicon/Broadcom/Drivers/Net/BcmGenetDxe/GenetUtil.c | 24 ++++++++++++++++++++
2 files changed, 31 insertions(+)
diff --git a/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/GenetUtil.h b/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/GenetUtil.h
index 2e7b78322bcd..1dc7a51a1ca6 100644
--- a/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/GenetUtil.h
+++ b/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/GenetUtil.h
@@ -107,6 +107,7 @@
#define GENET_UMAC_MDF_CTRL 0xe50
#define GENET_UMAC_MDF_ADDR0(n) (0xe54 + (n) * 0x8)
#define GENET_UMAC_MDF_ADDR1(n) (0xe58 + (n) * 0x8)
+#define GENET_MAX_MDF_FILTER 17
#define GENET_DMA_DESC_COUNT 256
#define GENET_DMA_DESC_SIZE 12
@@ -300,6 +301,12 @@ GenetSetPromisc (
IN BOOLEAN Enable
);
+VOID
+GenetEnableBroadcastFilter (
+ IN GENET_PRIVATE_DATA *Genet,
+ IN BOOLEAN Enable
+ );
+
VOID
GenetDmaInitRings (
IN GENET_PRIVATE_DATA *Genet
diff --git a/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/GenetUtil.c b/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/GenetUtil.c
index af7c06656433..2176bb451e7d 100644
--- a/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/GenetUtil.c
+++ b/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/GenetUtil.c
@@ -492,6 +492,30 @@ GenetSetPromisc (
GenetMmioWrite (Genet, GENET_UMAC_CMD, Value);
}
+/**
+ Enable the MAC filter for the Ethernet broadcast address
+
+ @param Genet[in] Pointer to GENET_PRIVATE_DATA.
+ @param Enable[in] Promiscuous mode state.
+
+**/
+VOID
+GenetEnableBroadcastFilter (
+ IN GENET_PRIVATE_DATA *Genet,
+ IN BOOLEAN Enable
+ )
+{
+ UINT32 Value;
+
+ Value = (1U << GENET_MAX_MDF_FILTER) - 1;
+ if (Enable) {
+ GenetMmioWrite (Genet, GENET_UMAC_MDF_ADDR0 (0), 0xffff);
+ GenetMmioWrite (Genet, GENET_UMAC_MDF_ADDR1 (0), 0xffffffff);
+ Value &= ~BIT0;
+ }
+ GenetMmioWrite (Genet, GENET_UMAC_MDF_CTRL, Value);
+}
+
/**
Configure DMA TX and RX queues, enabling them.
--
2.17.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH edk2-platforms v3 3/5] Silicon/Broadcom/BcmGenetDxe: fix multicast/broadcast handling
2020-05-11 7:06 [PATCH edk2-platforms v3 0/5] BCM genet fixes Ard Biesheuvel
2020-05-11 7:06 ` [PATCH edk2-platforms v3 1/5] Silicon/Broadcom/BcmGenetDxe: whitespace/cosmetic cleanup Ard Biesheuvel
2020-05-11 7:06 ` [PATCH edk2-platforms v3 2/5] Silicon/Broadcom/BcmGenetDxe: add support for broadcast filtering Ard Biesheuvel
@ 2020-05-11 7:06 ` Ard Biesheuvel
2020-05-11 7:06 ` [PATCH edk2-platforms v3 4/5] Silicon/Broadcom/BcmGenetDxe: avoid uncached memory for streaming DMA Ard Biesheuvel
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Ard Biesheuvel @ 2020-05-11 7:06 UTC (permalink / raw)
To: devel
Cc: Ard Biesheuvel, Pete Batard, Jared McNeill, Andrei Warkentin,
Samer El-Haj-Mahmoud
Move the handling of the promiscuous receive control to the SNP
ReceiveFilters() method where it belongs. Given that we do not
support multicast filtering, only minimal handling is required to
test the promiscuous bit and program the MAC accordingly. Any
multicast handling will be done by the MNP layer above it.
For reception of broadcast frames, wire up the new helper that
programs the MDF filter bank accordingly.
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@arm.com>
---
Silicon/Broadcom/Drivers/Net/BcmGenetDxe/DriverBinding.c | 7 +++----
Silicon/Broadcom/Drivers/Net/BcmGenetDxe/GenetUtil.c | 19 ++++++++++++++-----
Silicon/Broadcom/Drivers/Net/BcmGenetDxe/SimpleNetwork.c | 20 +++++++++-----------
3 files changed, 26 insertions(+), 20 deletions(-)
diff --git a/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/DriverBinding.c b/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/DriverBinding.c
index e3d015dd0820..a6102421cc26 100644
--- a/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/DriverBinding.c
+++ b/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/DriverBinding.c
@@ -154,11 +154,10 @@ GenetDriverBindingStart (
Genet->SnpMode.NvRamSize = 0;
Genet->SnpMode.NvRamAccessSize = 0;
Genet->SnpMode.ReceiveFilterMask = EFI_SIMPLE_NETWORK_RECEIVE_UNICAST |
- EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST |
EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST |
- EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS |
- EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST;
- Genet->SnpMode.ReceiveFilterSetting = Genet->SnpMode.ReceiveFilterMask;
+ EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS;
+ Genet->SnpMode.ReceiveFilterSetting = EFI_SIMPLE_NETWORK_RECEIVE_UNICAST |
+ EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST;
Genet->SnpMode.MaxMCastFilterCount = 0;
Genet->SnpMode.MCastFilterCount = 0;
Genet->SnpMode.IfType = NET_IFTYPE_ETHERNET;
diff --git a/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/GenetUtil.c b/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/GenetUtil.c
index 2176bb451e7d..746fbfe51b1d 100644
--- a/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/GenetUtil.c
+++ b/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/GenetUtil.c
@@ -505,13 +505,22 @@ GenetEnableBroadcastFilter (
IN BOOLEAN Enable
)
{
- UINT32 Value;
+ CONST EFI_MAC_ADDRESS *MacAddr = &Genet->SnpMode.CurrentAddress;
+ UINT32 Value;
- Value = (1U << GENET_MAX_MDF_FILTER) - 1;
if (Enable) {
- GenetMmioWrite (Genet, GENET_UMAC_MDF_ADDR0 (0), 0xffff);
- GenetMmioWrite (Genet, GENET_UMAC_MDF_ADDR1 (0), 0xffffffff);
- Value &= ~BIT0;
+ GenetMmioWrite (Genet, GENET_UMAC_MDF_ADDR0 (0),
+ MacAddr->Addr[1] | MacAddr->Addr[0] << 8);
+ GenetMmioWrite (Genet, GENET_UMAC_MDF_ADDR1 (0),
+ MacAddr->Addr[5] | MacAddr->Addr[4] << 8 |
+ MacAddr->Addr[3] << 16 | MacAddr->Addr[2] << 24);
+
+ GenetMmioWrite (Genet, GENET_UMAC_MDF_ADDR0 (1), 0xffff);
+ GenetMmioWrite (Genet, GENET_UMAC_MDF_ADDR1 (1), 0xffffffff);
+
+ Value = (1U << GENET_MAX_MDF_FILTER) & ~(BIT1 | BIT0);
+ } else {
+ Value = 0;
}
GenetMmioWrite (Genet, GENET_UMAC_MDF_CTRL, Value);
}
diff --git a/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/SimpleNetwork.c b/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/SimpleNetwork.c
index bf28448445d1..e6de4653cde9 100644
--- a/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/SimpleNetwork.c
+++ b/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/SimpleNetwork.c
@@ -148,10 +148,6 @@ GenetSimpleNetworkInitialize (
}
GenetSetMacAddress (Genet, &Genet->SnpMode.CurrentAddress);
- /*
- * TODO: this belongs in GenetSimpleNetworkReceiveFilters, not here.
- */
- GenetSetPromisc (Genet, TRUE);
GenetDmaInitRings (Genet);
@@ -306,6 +302,10 @@ GenetSimpleNetworkReceiveFilters (
}
Genet = GENET_PRIVATE_DATA_FROM_SNP_THIS (This);
+ if (((Enable | Disable) & ~Genet->SnpMode.ReceiveFilterMask) != 0 ||
+ (!ResetMCastFilter && MCastFilterCnt > Genet->SnpMode.MaxMCastFilterCount)) {
+ return EFI_INVALID_PARAMETER;
+ }
if (Genet->SnpMode.State == EfiSimpleNetworkStopped) {
return EFI_NOT_STARTED;
}
@@ -313,13 +313,11 @@ GenetSimpleNetworkReceiveFilters (
return EFI_DEVICE_ERROR;
}
- //
- // Can't actually return EFI_UNSUPPORTED, so just ignore the filters
- // (we set promiscuous mode ON inside GenetSimpleNetworkInitialize).
- //
- // TODO: move promisc handling here.
- // TODO 2: support multicast/broadcast.
- //
+ GenetEnableBroadcastFilter (Genet,
+ (Enable & ~Disable & EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST) != 0);
+
+ GenetSetPromisc (Genet,
+ (Enable & ~Disable & EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS) != 0);
return EFI_SUCCESS;
}
--
2.17.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH edk2-platforms v3 4/5] Silicon/Broadcom/BcmGenetDxe: avoid uncached memory for streaming DMA
2020-05-11 7:06 [PATCH edk2-platforms v3 0/5] BCM genet fixes Ard Biesheuvel
` (2 preceding siblings ...)
2020-05-11 7:06 ` [PATCH edk2-platforms v3 3/5] Silicon/Broadcom/BcmGenetDxe: fix multicast/broadcast handling Ard Biesheuvel
@ 2020-05-11 7:06 ` Ard Biesheuvel
2020-05-11 7:06 ` [PATCH edk2-platforms v3 5/5] Silicon/Broadcom/BcmGenetDxe: shut down devices on ExitBootServices() Ard Biesheuvel
2020-05-11 9:02 ` [PATCH edk2-platforms v3 0/5] BCM genet fixes Ard Biesheuvel
5 siblings, 0 replies; 7+ messages in thread
From: Ard Biesheuvel @ 2020-05-11 7:06 UTC (permalink / raw)
To: devel
Cc: Ard Biesheuvel, Pete Batard, Jared McNeill, Andrei Warkentin,
Samer El-Haj-Mahmoud
The non-coherent version of DmaAllocateBuffer () returns uncached
memory, to ensure that the CPU and the device see the same data,
even we they are accessing the buffer at the same time.
This is not really necessary for our RX ring: the CPU never accesses
the buffer while it is mapped for writing by the device, and so we
can simply use the streaming DMA model, which uses ordinary cached
buffers, but issues a cache invalidate at DMA unmap time.
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@arm.com>
---
Silicon/Broadcom/Drivers/Net/BcmGenetDxe/BcmGenetDxe.inf | 4 ++++
Silicon/Broadcom/Drivers/Net/BcmGenetDxe/GenetUtil.c | 18 +++++++++++++-----
2 files changed, 17 insertions(+), 5 deletions(-)
diff --git a/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/BcmGenetDxe.inf b/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/BcmGenetDxe.inf
index e74fa02ad209..3cabc5936562 100644
--- a/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/BcmGenetDxe.inf
+++ b/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/BcmGenetDxe.inf
@@ -49,3 +49,7 @@ [Protocols]
gBcmGenetPlatformDeviceProtocolGuid ## TO_START
gEfiDevicePathProtocolGuid ## BY_START
gEfiSimpleNetworkProtocolGuid ## BY_START
+
+[Pcd]
+ gEmbeddedTokenSpaceGuid.PcdDmaDeviceOffset
+ gEmbeddedTokenSpaceGuid.PcdDmaDeviceLimit
diff --git a/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/GenetUtil.c b/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/GenetUtil.c
index 746fbfe51b1d..23bd1c1d2baa 100644
--- a/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/GenetUtil.c
+++ b/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/GenetUtil.c
@@ -19,6 +19,10 @@
#define GENET_PHY_RETRY 1000
+STATIC CONST
+EFI_PHYSICAL_ADDRESS mDmaAddressLimit = FixedPcdGet64 (PcdDmaDeviceLimit) -
+ FixedPcdGet64 (PcdDmaDeviceOffset);
+
/**
Read a memory-mapped device CSR.
@@ -605,16 +609,20 @@ GenetDmaAlloc (
IN GENET_PRIVATE_DATA *Genet
)
{
- EFI_STATUS Status;
- UINTN Idx;
+ EFI_PHYSICAL_ADDRESS Address;
+ EFI_STATUS Status;
+ UINTN Idx;
for (Idx = 0; Idx < GENET_DMA_DESC_COUNT; Idx++) {
- Status = DmaAllocateBuffer (EfiBootServicesData, EFI_SIZE_TO_PAGES (GENET_MAX_PACKET_SIZE), (VOID **)&Genet->RxBuffer[Idx]);
+ Address = mDmaAddressLimit;
+ Status = gBS->AllocatePages (AllocateMaxAddress, EfiBootServicesData,
+ EFI_SIZE_TO_PAGES (GENET_MAX_PACKET_SIZE), &Address);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_ERROR, "GenetDmaAlloc: Failed to allocate RX buffer: %r\n", Status));
GenetDmaFree (Genet);
return Status;
}
+ Genet->RxBuffer[Idx] = (UINT8 *)(UINTN)Address;
}
return EFI_SUCCESS;
@@ -699,8 +707,8 @@ GenetDmaFree (
GenetDmaUnmapRxDescriptor (Genet, Idx);
if (Genet->RxBuffer[Idx] != NULL) {
- DmaFreeBuffer (EFI_SIZE_TO_PAGES (GENET_MAX_PACKET_SIZE),
- Genet->RxBuffer[Idx]);
+ gBS->FreePages ((UINTN)Genet->RxBuffer[Idx],
+ EFI_SIZE_TO_PAGES (GENET_MAX_PACKET_SIZE));
Genet->RxBuffer[Idx] = NULL;
}
}
--
2.17.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH edk2-platforms v3 5/5] Silicon/Broadcom/BcmGenetDxe: shut down devices on ExitBootServices()
2020-05-11 7:06 [PATCH edk2-platforms v3 0/5] BCM genet fixes Ard Biesheuvel
` (3 preceding siblings ...)
2020-05-11 7:06 ` [PATCH edk2-platforms v3 4/5] Silicon/Broadcom/BcmGenetDxe: avoid uncached memory for streaming DMA Ard Biesheuvel
@ 2020-05-11 7:06 ` Ard Biesheuvel
2020-05-11 9:02 ` [PATCH edk2-platforms v3 0/5] BCM genet fixes Ard Biesheuvel
5 siblings, 0 replies; 7+ messages in thread
From: Ard Biesheuvel @ 2020-05-11 7:06 UTC (permalink / raw)
To: devel
Cc: Ard Biesheuvel, Pete Batard, Jared McNeill, Andrei Warkentin,
Samer El-Haj-Mahmoud
When the OS takes over the machine, it calls ExitBootServices() in
order to shut down all resident services and event notifications so
that all asynchronous activity is stopped.
At this point, any DMA masters that are still active should be shut
down. This is especially important for network controllers, since
any activity on the network will trigger DMA writes into memory, which
will no longer be reserved for this purpose once the OS takes over.
So register for the ExitBootServices event, and shut down the controller
at this point if it was started before.
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@arm.com>
---
Silicon/Broadcom/Drivers/Net/BcmGenetDxe/BcmGenetDxe.inf | 4 +++
Silicon/Broadcom/Drivers/Net/BcmGenetDxe/GenetUtil.h | 1 +
Silicon/Broadcom/Drivers/Net/BcmGenetDxe/DriverBinding.c | 31 ++++++++++++++++++++
3 files changed, 36 insertions(+)
diff --git a/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/BcmGenetDxe.inf b/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/BcmGenetDxe.inf
index 3cabc5936562..a287f0495ff9 100644
--- a/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/BcmGenetDxe.inf
+++ b/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/BcmGenetDxe.inf
@@ -42,6 +42,7 @@ [LibraryClasses]
IoLib
MemoryAllocationLib
NetLib
+ UefiBootServicesTableLib
UefiDriverEntryPoint
UefiLib
@@ -50,6 +51,9 @@ [Protocols]
gEfiDevicePathProtocolGuid ## BY_START
gEfiSimpleNetworkProtocolGuid ## BY_START
+[Guids]
+ gEfiEventExitBootServicesGuid
+
[Pcd]
gEmbeddedTokenSpaceGuid.PcdDmaDeviceOffset
gEmbeddedTokenSpaceGuid.PcdDmaDeviceLimit
diff --git a/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/GenetUtil.h b/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/GenetUtil.h
index 1dc7a51a1ca6..d03bf8daed58 100644
--- a/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/GenetUtil.h
+++ b/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/GenetUtil.h
@@ -203,6 +203,7 @@ typedef struct {
EFI_HANDLE ControllerHandle;
EFI_LOCK Lock;
+ EFI_EVENT ExitBootServicesEvent;
EFI_SIMPLE_NETWORK_PROTOCOL Snp;
EFI_SIMPLE_NETWORK_MODE SnpMode;
diff --git a/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/DriverBinding.c b/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/DriverBinding.c
index a6102421cc26..29753d8ac754 100644
--- a/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/DriverBinding.c
+++ b/Silicon/Broadcom/Drivers/Net/BcmGenetDxe/DriverBinding.c
@@ -76,6 +76,23 @@ GenetDriverBindingSupported (
return Status;
}
+/**
+ Callback function to shut down the network device at ExitBootServices
+
+ @param Event Pointer to this event
+ @param Context Event handler private data
+
+**/
+STATIC
+VOID
+EFIAPI
+GenetNotifyExitBootServices (
+ EFI_EVENT Event,
+ VOID *Context
+ )
+{
+ GenetDisableTxRx ((GENET_PRIVATE_DATA *)Context);
+}
/**
Starts a device controller or a bus controller.
@@ -173,6 +190,17 @@ GenetDriverBindingStart (
CopyMem (&Genet->SnpMode.CurrentAddress, &Genet->Dev->MacAddress,
sizeof(EFI_MAC_ADDRESS));
+ Status = gBS->CreateEventEx (EVT_NOTIFY_SIGNAL, TPL_CALLBACK,
+ GenetNotifyExitBootServices, Genet,
+ &gEfiEventExitBootServicesGuid,
+ &Genet->ExitBootServicesEvent);
+ if (EFI_ERROR (Status)) {
+ DEBUG ((DEBUG_WARN,
+ "GenetDriverBindingStart: failed to register for ExitBootServices event - %r\n",
+ Status));
+ goto FreeDevice;
+ }
+
Status = gBS->InstallMultipleProtocolInterfaces (&ControllerHandle,
&gEfiSimpleNetworkProtocolGuid, &Genet->Snp,
NULL);
@@ -251,6 +279,9 @@ GenetDriverBindingStop (
return Status;
}
+ Status = gBS->CloseEvent (Genet->ExitBootServicesEvent);
+ ASSERT_EFI_ERROR (Status);
+
GenetDmaFree (Genet);
Status = gBS->CloseProtocol (ControllerHandle,
--
2.17.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH edk2-platforms v3 0/5] BCM genet fixes
2020-05-11 7:06 [PATCH edk2-platforms v3 0/5] BCM genet fixes Ard Biesheuvel
` (4 preceding siblings ...)
2020-05-11 7:06 ` [PATCH edk2-platforms v3 5/5] Silicon/Broadcom/BcmGenetDxe: shut down devices on ExitBootServices() Ard Biesheuvel
@ 2020-05-11 9:02 ` Ard Biesheuvel
5 siblings, 0 replies; 7+ messages in thread
From: Ard Biesheuvel @ 2020-05-11 9:02 UTC (permalink / raw)
To: devel; +Cc: Pete Batard, Jared McNeill, Andrei Warkentin,
Samer El-Haj-Mahmoud
On 5/11/20 9:06 AM, Ard Biesheuvel wrote:
> This fixes the multicast/broadcast/promisc handling, and switches to
> ordinary page allocations for RX buffers. Patch #1 is cosmetic only.
>
> Changes since v2:
> - fix MDF filter handling (fixes issue reported by Samer)
> - add patch to deal with ExitBootServices() so we don't leave the RX DMA
> ring running when we enter the OS
>
> https://github.com/pftf/edk2-platforms/tree/rpi4_genet_v3_ardb
>
Apologies for the spam - I ran into another DMA issue with the original
contribution, I'll have a v4 out today.
> Cc: Pete Batard <pete@akeo.ie>
> Cc: Jared McNeill <jmcneill@invisible.ca>
> Cc: Andrei Warkentin <awarkentin@vmware.com>
> Cc: Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com>
>
> Ard Biesheuvel (5):
> Silicon/Broadcom/BcmGenetDxe: whitespace/cosmetic cleanup
> Silicon/Broadcom/BcmGenetDxe: add support for broadcast filtering
> Silicon/Broadcom/BcmGenetDxe: fix multicast/broadcast handling
> Silicon/Broadcom/BcmGenetDxe: avoid uncached memory for streaming DMA
> Silicon/Broadcom/BcmGenetDxe: shut down devices on ExitBootServices()
>
> .../Drivers/Net/BcmGenetDxe/BcmGenetDxe.inf | 8 +
> .../Drivers/Net/BcmGenetDxe/GenetUtil.h | 8 +
> .../Drivers/Net/BcmGenetDxe/DriverBinding.c | 38 +-
> .../Drivers/Net/BcmGenetDxe/GenetUtil.c | 715 ++++++++++--------
> .../Drivers/Net/BcmGenetDxe/SimpleNetwork.c | 20 +-
> 5 files changed, 441 insertions(+), 348 deletions(-)
>
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2020-05-11 9:02 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-05-11 7:06 [PATCH edk2-platforms v3 0/5] BCM genet fixes Ard Biesheuvel
2020-05-11 7:06 ` [PATCH edk2-platforms v3 1/5] Silicon/Broadcom/BcmGenetDxe: whitespace/cosmetic cleanup Ard Biesheuvel
2020-05-11 7:06 ` [PATCH edk2-platforms v3 2/5] Silicon/Broadcom/BcmGenetDxe: add support for broadcast filtering Ard Biesheuvel
2020-05-11 7:06 ` [PATCH edk2-platforms v3 3/5] Silicon/Broadcom/BcmGenetDxe: fix multicast/broadcast handling Ard Biesheuvel
2020-05-11 7:06 ` [PATCH edk2-platforms v3 4/5] Silicon/Broadcom/BcmGenetDxe: avoid uncached memory for streaming DMA Ard Biesheuvel
2020-05-11 7:06 ` [PATCH edk2-platforms v3 5/5] Silicon/Broadcom/BcmGenetDxe: shut down devices on ExitBootServices() Ard Biesheuvel
2020-05-11 9:02 ` [PATCH edk2-platforms v3 0/5] BCM genet fixes Ard Biesheuvel
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox