drivers: ethernet: add support for Xilinx GEM controller
Add support for the Xilinx GEM Ethernet controller, which is integrated in both the Xilinx Zynq and ZynqMP (UltraScale) SoC families. The driver supports the management of a PHY attached to the respective GEM's MDIO interface. This driver was developed with ultimately the Zynq-7000 series in mind, but at the time being, it is limited to use in conjunction with the ZynqMP RPU (Cortex-R5) cores. The differences are minor when it comes to the adjustment of the TX clock frequency derived from the current link speed reported by the PHY, but for use in conjunction with the Zynq-7000, some larger adjustments will have to be made when it comes to the placement of the DMA memory area, as this involves the confi- guration of the MMU in Cortex-A CPUs. The driver was developed under the qemu_cortex_r5 target. The Marvell 88E1111 PHY simulated by QEMU is supported by the driver. Limitations currently exist when it comes to timestamping or VLAN support and other minor things. Those haven't been implemented yet, although they are supported by the hardware. In order to be fully supported by the ZynqMP APU, 64-bit DMA address descriptor format support will be added. Signed-off-by: Immo Birnbaum <Immo.Birnbaum@weidmueller.com>
This commit is contained in:
parent
fbf5b8e8de
commit
dabe728eef
9 changed files with 3949 additions and 0 deletions
44
include/dt-bindings/ethernet/xlnx_gem.h
Normal file
44
include/dt-bindings/ethernet/xlnx_gem.h
Normal file
|
@ -0,0 +1,44 @@
|
|||
/*
|
||||
* Copyright (c) 2021, Weidmueller Interface GmbH & Co. KG
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
#ifndef ZEPHYR_INCLUDE_DT_BINDINGS_ETHERNET_XLNX_GEM_H_
|
||||
#define ZEPHYR_INCLUDE_DT_BINDINGS_ETHERNET_XLNX_GEM_H_
|
||||
|
||||
/* PHY auto-detection alias */
|
||||
#define XLNX_GEM_PHY_AUTO_DETECT 0
|
||||
|
||||
/* MDC divider values */
|
||||
#define XLNX_GEM_MDC_DIVIDER_8 0 /* LPD_LSBUS_CLK < 20 MHz */
|
||||
#define XLNX_GEM_MDC_DIVIDER_16 1 /* LPD_LSBUS_CLK 20 - 40 MHz */
|
||||
#define XLNX_GEM_MDC_DIVIDER_32 2 /* LPD_LSBUS_CLK 40 - 80 MHz */
|
||||
/*
|
||||
* According to the ZynqMP's gem.network_config register documentation,
|
||||
* divider /32 is to be used for a 100 MHz LPD LSBUS clock.
|
||||
*/
|
||||
#define XLNX_GEM_MDC_DIVIDER_48 3 /* LPD_LSBUS_CLK 80 - 120 MHz */
|
||||
|
||||
/* Link speed values */
|
||||
#define XLNX_GEM_LINK_SPEED_10MBIT 1
|
||||
#define XLNX_GEM_LINK_SPEED_100MBIT 2
|
||||
#define XLNX_GEM_LINK_SPEED_1GBIT 3
|
||||
|
||||
/* AMBA AHB data bus width */
|
||||
#define XLNX_GEM_AMBA_AHB_DBUS_WIDTH_32BIT 0
|
||||
#define XLNX_GEM_AMBA_AHB_DBUS_WIDTH_64BIT 1
|
||||
#define XLNX_GEM_AMBA_AHB_DBUS_WIDTH_128BIT 2
|
||||
|
||||
/* AMBA AHB burst length */
|
||||
#define XLNX_GEM_AMBA_AHB_BURST_SINGLE 1
|
||||
#define XLNX_GEM_AMBA_AHB_BURST_INCR4 4
|
||||
#define XLNX_GEM_AMBA_AHB_BURST_INCR8 8
|
||||
#define XLNX_GEM_AMBA_AHB_BURST_INCR16 16
|
||||
|
||||
/* Hardware RX buffer size */
|
||||
#define XLNX_GEM_HW_RX_BUFFER_SIZE_1KB 0
|
||||
#define XLNX_GEM_HW_RX_BUFFER_SIZE_2KB 1
|
||||
#define XLNX_GEM_HW_RX_BUFFER_SIZE_4KB 2
|
||||
#define XLNX_GEM_HW_RX_BUFFER_SIZE_8KB 3
|
||||
|
||||
#endif /* ZEPHYR_INCLUDE_DT_BINDINGS_ETHERNET_XLNX_GEM_H_ */
|
Loading…
Add table
Add a link
Reference in a new issue