64 DBGC (
dwmac,
"DWMAC %s ver %08x cfg %08x flt %08x flo %08x\n",
69 DBGC (
dwmac,
"DWMAC %s isr %08x dbg %08x gmi %08x\n",
89 DBGC (
dwmac,
"DWMAC %s bus %08x fea %08x axi %08x ahb %08x\n",
94 DBGC (
dwmac,
"DWMAC %s opm %08x sta %08x drp %08x\n",
97 DBGC (
dwmac,
"DWMAC %s txb %08x txd %08x txb %08x\n",
101 DBGC (
dwmac,
"DWMAC %s rxb %08x rxd %08x rxb %08x\n",
154 DBGC (
dwmac,
"DWMAC %s timed out waiting for reset\n",
214 for ( i = 0 ; i < ring->
count ; i++ ) {
230 DBGC (
dwmac,
"DWMAC %s ring %02x is at [%08lx,%08lx)\n",
232 ( virt_to_phys ( ring->
desc ) + ring->
len ) );
264 unsigned int refilled = 0;
289 DBGC2 (
dwmac,
"DWMAC %s RX %d is [%08lx,%08lx)\n",
393 DBGC (
dwmac,
"DWMAC %s out of transmit descriptors\n",
414 DBGC2 (
dwmac,
"DWMAC %s TX %d is [%08lx,%08lx)\n",
416 ( virt_to_phys ( iobuf->
data ) +
iob_len ( iobuf ) ) );
444 DBGC (
dwmac,
"DWMAC %s TX %d error %#08x\n",
491 DBGC (
dwmac,
"DWMAC %s RX %d error %#08x\n",
498 DBGC2 (
dwmac,
"DWMAC %s RX %d complete (length " 593 DBGC (
dwmac,
"DWMAC %s could not fetch MAC: %s\n",
609 goto err_register_netdev;
#define DWMAC_CFG
MAC configuration register.
#define DWMAC_FILTER_PR
Promiscuous mode.
struct arbelprm_rc_send_wqe rc
#define iob_put(iobuf, len)
void netdev_rx_err(struct net_device *netdev, struct io_buffer *iobuf, int rc)
Discard received packet.
static void dwmac_poll(struct net_device *netdev)
Poll for completed and received packets.
static struct net_device_operations dwmac_operations
DesignWare MAC network device operations.
static void dwmac_poll_rx(struct net_device *netdev)
Poll for received packets.
uint32_t stat
Completion status.
#define DWMAC_NUM_TX_DESC
Number of transmit descriptors.
#define le32_to_cpu(value)
int(* open)(struct net_device *netdev)
Open network device.
unsigned int cons
Consumer index.
#define DWMAC_AXI
AXI bus mode register.
static void netdev_tx_complete_next(struct net_device *netdev)
Complete network transmission.
static void dwmac_dump(struct dwmac *dwmac)
Dump all registers (for debugging)
#define DWMAC_CFG_FD
Full duplex.
static void dwmac_poll_tx(struct net_device *netdev)
Poll for completed packets.
#define DWMAC_OP_RXEN
RX enabled.
#define DWMAC_GMII
SGMII/RGMII status register.
uint32_t readl(volatile uint32_t *io_addr)
Read 32-bit dword from memory-mapped device.
#define DWMAC_FILTER
MAC filter register.
static void dwmac_dump_mac(struct dwmac *dwmac)
Dump MAC registers (for debugging)
static int dwmac_transmit(struct net_device *netdev, struct io_buffer *iobuf)
Transmit packet.
size_t len
Length of descriptors.
#define DWMAC_OP
Operation mode register.
struct dwmac_descriptor * desc
Descriptors.
struct dma_device * dma
DMA device.
void netdev_tx_complete_next_err(struct net_device *netdev, int rc)
Complete network transmission.
void netdev_link_down(struct net_device *netdev)
Mark network device as having link down.
uint8_t mac[ETH_ALEN]
MAC address.
int fdt_mac(struct fdt *fdt, unsigned int offset, struct net_device *netdev)
Get MAC address from property.
#define DWMAC_BUS
Bus mode register.
#define DWMAC_STAT_RX_LAST
Last segment (RX)
#define DWMAC_RXBUF
Current receive buffer address register.
static int dwmac_open(struct net_device *netdev)
Open network device.
uint8_t count
Number of descriptors.
struct device dev
Generic device.
static void dwmac_dump_dma(struct dwmac *dwmac)
Dump DMA registers (for debugging)
static void netdev_init(struct net_device *netdev, struct net_device_operations *op)
Initialise a network device.
A DesignWare MAC address.
struct ena_llq_option desc
Descriptor counts.
void dma_free(struct dma_mapping *map, void *addr, size_t len)
Unmap and free DMA-coherent buffer.
int(* probe)(struct dt_device *dt, unsigned int offset)
Probe device.
#define DWMAC_VER_CORE_MINOR(x)
Core minor version.
#define ENOMEM
Not enough space.
#define DWMAC_CTRL_CHAIN
Chained descriptor.
#define DWMAC_VER
Version register.
void * memcpy(void *dest, const void *src, size_t len) __nonnull
#define DWMAC_RXBASE
Receive descriptor list address register.
#define DWMAC_VER_CORE_MAJOR(x)
Core major version.
u32 version
Driver version.
#define DWMAC_CFG_RXEN
RX enabled.
assert((readw(&hdr->flags) &(GTF_reading|GTF_writing))==0)
static void netdev_put(struct net_device *netdev)
Drop reference to network device.
#define DWMAC_SIZE_RX_CHAIN
Buffer size.
static int dwmac_probe(struct dt_device *dt, unsigned int offset)
Probe devicetree device.
void * priv
Driver private data.
A DesignWare MAC network card.
struct io_buffer * rx_iobuf[DWMAC_NUM_RX_DESC]
Receive I/O buffers.
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
static void netdev_link_up(struct net_device *netdev)
Mark network device as having link up.
const char * name
Device name (for debugging)
void writel(uint32_t data, volatile uint32_t *io_addr)
Write 32-bit dword to memory-mapped device.
#define DWMAC_OP_RXSF
RX store and forward.
#define DWMAC_STATUS_LINK
Link status change.
#define DWMAC_RXDESC
Current receive descriptor register.
static struct net_device * netdev
static __always_inline physaddr_t iob_dma(struct io_buffer *iobuf)
Get I/O buffer DMA address.
#define DWMAC_STAT_ERR
Error summary.
#define DWMAC_ADDRL
MAC address low register.
#define DWMAC_STAT_TX_CHAIN
Chained descriptor (TX)
#define DWMAC_REG_LEN
I/O region length.
void unregister_netdev(struct net_device *netdev)
Unregister network device.
#define DWMAC_OP_TXEN
TX enabled.
#define DWMAC_DMA
DMA register block.
#define cpu_to_le32(value)
#define DWMAC_STAT_RX_FIRST
First segment (RX)
#define DWMAC_DROP
Packet drop counter register.
char * strerror(int errno)
Retrieve string representation of error number.
static void dt_set_drvdata(struct dt_device *dt, void *priv)
Set devicetree driver-private data.
struct io_buffer * alloc_rx_iob(size_t len, struct dma_device *dma)
Allocate and map I/O buffer for receive DMA.
#define DWMAC_CFG_DO
Disable RX own frames.
Synopsys DesignWare MAC network driver.
int register_netdev(struct net_device *netdev)
Register network device.
static size_t iob_len(struct io_buffer *iobuf)
Calculate length of data in an I/O buffer.
static const char * dwmac_ids[]
DesignWare MAC compatible model identifiers.
#define DWMAC_OP_TXSF
TX store and forward.
#define DWMAC_RESET_MAX_WAIT_MS
Time to wait for software reset to complete.
#define ENODEV
No such device.
static void netdev_nullify(struct net_device *netdev)
Stop using a network device.
#define DWMAC_VER_USER_MAJOR(x)
User major version.
A DesignWare descriptor ring.
struct dt_driver dwmac_driver __dt_driver
DesignWare MAC devicetree driver.
#define DWMAC_CFG_TXEN
TX enabled.
#define DWMAC_RXPOLL
Receive poll demand register.
#define DWMAC_NUM_RX_DESC
Number of receive descriptors.
void * dma_alloc(struct dma_device *dma, struct dma_mapping *map, size_t len, size_t align)
Allocate and map DMA-coherent buffer.
uint32_t next
Next descriptor address.
#define DWMAC_BUS_SWR
Software reset.
static struct xen_remove_from_physmap * remove
static void dwmac_destroy_ring(struct dwmac *dwmac, struct dwmac_ring *ring)
Destroy descriptor ring.
#define DWMAC_STAT_TX_LAST
Last segment (TX)
Network device operations.
void netdev_rx(struct net_device *netdev, struct io_buffer *iobuf)
Add packet to receive queue.
#define DWMAC_AHB
AHB or AXI status register.
struct device * dev
Underlying hardware device.
Network device management.
struct dwmac_ring tx
Transmit ring.
#define DWMAC_STATUS
Status register.
void mdelay(unsigned long msecs)
Delay for a fixed number of milliseconds.
static void dwmac_check_link(struct net_device *netdev)
Check link state.
static int dwmac_reset(struct dwmac *dwmac)
Reset hardware.
#define DWMAC_GMII_LINK
Link up.
#define DWMAC_CTRL_TX_LAST
Last segment (TX)
#define DWMAC_TXDESC
Current transmit descriptor register.
const char * name
Driver name.
void free_rx_iob(struct io_buffer *iobuf)
Unmap and free I/O buffer for receive DMA.
#define ENOBUFS
No buffer space available.
uint8_t qbase
Queue base address register (within DMA block)
#define DWMAC_VER_USER_MINOR(x)
User minor version.
static void dwmac_refill_rx(struct dwmac *dwmac)
Refill receive descriptor ring.
#define DWMAC_DEBUG
Debug register.
#define DWMAC_RX_LEN
Length of receive buffers.
#define DWMAC_ADDRH
MAC address high register.
void * data
Start of data.
#define EIO
Input/output error.
#define DWMAC_REG_IDX
I/O region index.
struct net_device * alloc_etherdev(size_t priv_size)
Allocate Ethernet device.
void * dt_ioremap(struct dt_device *dt, unsigned int offset, unsigned int index, size_t len)
Map devicetree range.
u8 rx[WPA_TKIP_MIC_KEY_LEN]
MIC key for packets from the AP.
#define DWMAC_TXPOLL
Transmit poll demand register.
#define cpu_to_le16(value)
void iounmap(volatile const void *io_addr)
Unmap I/O address.
#define DWMAC_FEATURE
Hardware feature register.
uint8_t ctrl
Default control flags.
#define DWMAC_FLOW
Flow control register.
unsigned int prod
Producer index.
uint8_t ll_addr[MAX_LL_ADDR_LEN]
Link-layer address.
uint16_t offset
Offset to command line.
#define DWMAC_STAT_TX_FIRST
First segment (TX)
struct dma_device dma
DMA device.
#define NULL
NULL pointer (VOID *)
struct dwmac_ring rx
Receive ring.
#define ETIMEDOUT
Connection timed out.
static void dwmac_close(struct net_device *netdev)
Close network device.
#define DWMAC_STAT_RX_LEN(x)
Frame length (RX)
physaddr_t dma(struct dma_mapping *map, void *addr)
Get DMA address from virtual address.
#define DWMAC_TXBUF
Current transmit buffer address register.
#define DWMAC_STAT_OWN
Owned by hardware.
#define DWMAC_CTRL_TX_FIRST
First segment (TX)
static int dwmac_create_ring(struct dwmac *dwmac, struct dwmac_ring *ring)
Create descriptor ring.
#define DWMAC_TXBASE
Transmit descriptor list address register.
u8 tx[WPA_TKIP_MIC_KEY_LEN]
MIC key for packets to the AP.
#define DWMAC_ISR
Interrupt status register.
static void * dt_get_drvdata(struct dt_device *dt)
Get devicetree driver-private data.
struct dma_mapping map
Descriptor ring DMA mapping.
static void dwmac_remove(struct dt_device *dt)
Remove devicetree device.
void * memset(void *dest, int character, size_t len) __nonnull
struct dma_device * dma
DMA device.
struct fdt sysfdt
The system flattened device tree (if present)