diff mbox series

[3/3] net: e1000: Add missing address translations

Message ID 20201116170230.1148457-3-sr@denx.de
State Accepted
Commit 14807449a4a04fa478c5aba2142b6c157cfcfe4b
Delegated to: Tom Rini
Headers show
Series [1/3] net: e1000: Remove unused bus_to_phys() macro | expand

Commit Message

Stefan Roese Nov. 16, 2020, 5:02 p.m. UTC
Add some missing address translations from virtual address in local DRAM
to physical address, which is needed for the DMA transactions to work
correctly.

This issue was detected while testing the e1000 driver on the MIPS
Octeon III platform, which needs address translation.

Signed-off-by: Stefan Roese <sr@denx.de>
Cc: Joe Hershberger <joe.hershberger@ni.com>
Cc: Aaron Williams <awilliams@marvell.com>
Cc: Chandrakala Chavva <cchavva@marvell.com>
---
 drivers/net/e1000.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

Comments

Tom Rini Jan. 27, 2021, 7:21 p.m. UTC | #1
On Mon, Nov 16, 2020 at 06:02:30PM +0100, Stefan Roese wrote:

> Add some missing address translations from virtual address in local DRAM
> to physical address, which is needed for the DMA transactions to work
> correctly.
> 
> This issue was detected while testing the e1000 driver on the MIPS
> Octeon III platform, which needs address translation.
> 
> Signed-off-by: Stefan Roese <sr@denx.de>
> Cc: Joe Hershberger <joe.hershberger@ni.com>
> Cc: Aaron Williams <awilliams@marvell.com>
> Cc: Chandrakala Chavva <cchavva@marvell.com>

Applied to u-boot/master, thanks!
diff mbox series

Patch

diff --git a/drivers/net/e1000.c b/drivers/net/e1000.c
index bf6cd7d602..cf57ff067b 100644
--- a/drivers/net/e1000.c
+++ b/drivers/net/e1000.c
@@ -5143,7 +5143,7 @@  fill_rx(struct e1000_hw *hw)
 	rd = rx_base + rx_tail;
 	rx_tail = (rx_tail + 1) % 8;
 	memset(rd, 0, 16);
-	rd->buffer_addr = cpu_to_le64((unsigned long)packet);
+	rd->buffer_addr = cpu_to_le64(virt_to_phys(packet));
 
 	/*
 	 * Make sure there are no stale data in WB over this area, which
@@ -5174,8 +5174,8 @@  e1000_configure_tx(struct e1000_hw *hw)
 	unsigned long tipg, tarc;
 	uint32_t ipgr1, ipgr2;
 
-	E1000_WRITE_REG(hw, TDBAL, lower_32_bits((unsigned long)tx_base));
-	E1000_WRITE_REG(hw, TDBAH, upper_32_bits((unsigned long)tx_base));
+	E1000_WRITE_REG(hw, TDBAL, lower_32_bits(virt_to_phys(tx_base)));
+	E1000_WRITE_REG(hw, TDBAH, upper_32_bits(virt_to_phys(tx_base)));
 
 	E1000_WRITE_REG(hw, TDLEN, 128);
 
@@ -5319,8 +5319,8 @@  e1000_configure_rx(struct e1000_hw *hw)
 		E1000_WRITE_FLUSH(hw);
 	}
 	/* Setup the Base and Length of the Rx Descriptor Ring */
-	E1000_WRITE_REG(hw, RDBAL, lower_32_bits((unsigned long)rx_base));
-	E1000_WRITE_REG(hw, RDBAH, upper_32_bits((unsigned long)rx_base));
+	E1000_WRITE_REG(hw, RDBAL, lower_32_bits(virt_to_phys(rx_base)));
+	E1000_WRITE_REG(hw, RDBAH, upper_32_bits(virt_to_phys(rx_base)));
 
 	E1000_WRITE_REG(hw, RDLEN, 128);