225 lines
9.4 KiB
Plaintext
225 lines
9.4 KiB
Plaintext
|
Device tree binding for NVIDIA Tegra186 Ethernet QOS Controller
|
|||
|
=================================================================
|
|||
|
|
|||
|
The Tegra186 EQOS (Ethernet QOS) device is an Ethernet controller which
|
|||
|
supports Quality of Service features.
|
|||
|
|
|||
|
Supported Hardware Features are
|
|||
|
=====================================================/
|
|||
|
10/100 Mbps Support : YES
|
|||
|
1000 Mbps Support : YES
|
|||
|
Half-duplex Support : YES
|
|||
|
PCS Registers(TBI/SGMII/RTBI PHY interface) : NO
|
|||
|
VLAN Hash Filter Selected : NO
|
|||
|
SMA (MDIO) Interface : YES
|
|||
|
PMT Remote Wake-up Packet Enable : YES
|
|||
|
PMT Magic Packet Enable : YES
|
|||
|
RMON/MMC Module Enable : YES
|
|||
|
ARP Offload Enabled : YES
|
|||
|
IEEE 1588-2008 Timestamp Enabled : YES
|
|||
|
Energy Efficient Ethernet Enabled : YES
|
|||
|
Transmit Checksum Offload Enabled : YES
|
|||
|
Receive Checksum Offload Enabled : YES
|
|||
|
MAC Addresses 16–31 Selected : YES
|
|||
|
MAC Addresses 32–63 Selected : YES
|
|||
|
MAC Addresses 64–127 Selected : YES
|
|||
|
Timestamp System Time Source : INTERNAL
|
|||
|
Source Address or VLAN Insertion Enable : YES
|
|||
|
Active PHY Selected : RGMII
|
|||
|
MTL Receive FIFO Size : 16 KBytes
|
|||
|
MTL Transmit FIFO Size : 16 KBytes
|
|||
|
IEEE 1588 High Word Register Enable : YES
|
|||
|
DCB Feature Enable : NO
|
|||
|
Split Header Feature Enable : YES
|
|||
|
TCP Segmentation Offload Enable : YES
|
|||
|
DMA Debug Registers Enabled : YES
|
|||
|
AV Feature Enabled : YES
|
|||
|
Low Power Mode Enabled : YES
|
|||
|
Hash Table Size : No hash table selected
|
|||
|
Total number of L3 or L4 Filters : 8 L3/L4 Filter
|
|||
|
Number of MTL Receive Queues : 4
|
|||
|
Number of MTL Transmit Queues : 4
|
|||
|
Number of DMA Receive Channels : 4
|
|||
|
Number of DMA Transmit Channels : 4
|
|||
|
Number of PPS Outputs : No PPS output
|
|||
|
Number of Auxiliary Snapshot Inputs : 1 auxiliary input
|
|||
|
=====================================================/
|
|||
|
|
|||
|
Required properties:
|
|||
|
- compatible: should be "nvidia,eqos"
|
|||
|
- reg: Physical base address and length of registers.
|
|||
|
- interrupts: An array of tuples specifying IRQ number for
|
|||
|
each tx/rx queue in case of multi-queue, and
|
|||
|
for the only tx/rx queue,in case of single queue.
|
|||
|
please check example at end for reference.
|
|||
|
- clocks: Specifies the needed clocks.
|
|||
|
- clock-names: Specifies the names of the needed clocks.
|
|||
|
- resets: Specifies the reset line.
|
|||
|
- reset-names: Specifies the name of the reset line.
|
|||
|
- iommu-group-id: Specifies IOMMU group ID.
|
|||
|
- nvidia,csr_clock_speed: This is a free-running clock input provided
|
|||
|
by the application. The MAC Control Interface,
|
|||
|
CSR, and Station Management Agent (SMA) of the
|
|||
|
MAC run on this clock. The valid frequency range
|
|||
|
of this clock is 20–300 MHz (minimum frequency
|
|||
|
is 25 MHz when the MMC module is active in
|
|||
|
1000 Mbps mode). Frequencies outside this range
|
|||
|
may result in incorrect operation
|
|||
|
- nvidia,use_multi_queues: EQOS HW supports upto 4 Tx/Rx Queues/Channels.
|
|||
|
This property enables us to make use of 4Queues,
|
|||
|
each queue size is configured to 4KB. if this
|
|||
|
property is not defined then EQOS HW is
|
|||
|
configured to make use of a single queue with a
|
|||
|
total of 16KB size.To support Jumbo frame
|
|||
|
feature we makes use of a single queue so that
|
|||
|
9k packet size can be fit into a single queue.
|
|||
|
- nvidia,ptp_ref_clock_speed: This is reference for PTP clock frequency and
|
|||
|
the value set for tegra is 125MHz.
|
|||
|
The frequency of this clock is programmable and
|
|||
|
can be configured based on the requirements.
|
|||
|
The maximum frequency it can take is 125MHz and
|
|||
|
minimum frequency is 25MHz
|
|||
|
- nvidia,queue_prio: An array where each entry specifies priority of
|
|||
|
rx queue. Based on the VLAN tag PCP priority
|
|||
|
value rx packets will be routed the corresponding
|
|||
|
channel.
|
|||
|
For example - If the values are "0 7 2 3", it
|
|||
|
means that packets with priority 0 will be
|
|||
|
mapped to DMA channel 0, similarly 7 will be
|
|||
|
mapped to 1 and so on.
|
|||
|
"nvidia,queue_prio = <0 7 2 3> " means
|
|||
|
priority-0 = DMA-0, priority-7 = DMA-1,
|
|||
|
priority-2 = DMA-2, priority-3 = DMA-3
|
|||
|
- nvidia,phy-reset-gpio: If this gpio is provided, then the PHY is reset
|
|||
|
by toggling this gpio LOW during driver probe.
|
|||
|
- nvidia,phy-intr-gpio: Specifies gpio pin for PHY interrupts.
|
|||
|
- nvidia,rxq_enable_ctrl: Mode of the RxQ to enabled either AV mode or legacy mode.
|
|||
|
example: rxq_enable_ctrl = <rx0 rx1 rx2 rx3>
|
|||
|
0x0 = Not enabled, 0x1 = Enabled for AV
|
|||
|
0x2 = Enabled for Legacy, 0x3 = Reserved
|
|||
|
- nvidia,phy-max-frame-size: Specifies maximum frame size supported by PHY
|
|||
|
in kilobytes. Default is 10kb. It Will determine
|
|||
|
jumbo frame size.
|
|||
|
- phy-mode: should be "rgmii".
|
|||
|
- pinctrl-names If we define these property, then we can control
|
|||
|
EQOS pin-mux states dynamically so that we can
|
|||
|
save power based on the Ethernet link.
|
|||
|
- pinctrl-0 Valid only when "pinctrl-names" is defined, this
|
|||
|
property has the configuration that need to be
|
|||
|
set to EQOS signals when Ethernet link is down.
|
|||
|
- pinctrl-1 Valid only when "pinctrl-names" is defined, this
|
|||
|
property has the configuration that need to be
|
|||
|
set when Ethernet link is up.
|
|||
|
|
|||
|
Optional properties:
|
|||
|
- nvidia,use_tagged_ptp: if this property is set we will make use of the
|
|||
|
channel/Queue which is defined in "ptp_dma_ch"
|
|||
|
for routing the rx ptp packets.
|
|||
|
- nvidia,ptp_dma_ch: Specifies channel/Queue number where the rx PTP
|
|||
|
packets need to be be routed.
|
|||
|
Channel 0 is default.
|
|||
|
- nvidia,chan_napi_quota: Specifies number of tx/rx completions to process
|
|||
|
when napi handler is called. Default is "64".
|
|||
|
- nvidia,pause_frames: Used to disable/enable PAUSE frames support.
|
|||
|
This is a flag. If this property is present
|
|||
|
then PAUSE frames will be enabled.
|
|||
|
- nvidia,brcm_phy_apd_mode: Flag specifies the Auto Power Down mode for
|
|||
|
BRCM89610 PHY.
|
|||
|
- nvidia,iso_bw: ISO BW, indicates sum of read and write bandwidth.
|
|||
|
- nvidia,eth_iso_enable: Specifies whether ISO enabled for EQOS or not.
|
|||
|
- nvidia,slot_intvl_val: Specifies slot interval for fetching the data from DMA.
|
|||
|
In T186 EQOS - 125usec is default and fixed value.
|
|||
|
In T194 EQOS this value can be changed based on the usecase.
|
|||
|
- nvidia,rx_riwt: Specifies the RX wathcdog interrupt timeout in usec
|
|||
|
for an Rx descriptor for which IOC bit is not set.
|
|||
|
The RIWT field is programmed as (<val> * 256) / 62.5
|
|||
|
- phy_rst_lp_mode Specifies that the phy should be put in reset for low
|
|||
|
power mode when it is set.
|
|||
|
|
|||
|
Example:
|
|||
|
|
|||
|
ether_qos@2490000 {
|
|||
|
compatible = "nvidia,eqos";
|
|||
|
reg = <0x0 0x02490000 0x0 0x10000>; /* EQOS Base Register */
|
|||
|
reg-names = "eqos_base";
|
|||
|
interrupts = <0 194 0x4>, /* common */
|
|||
|
<0 195 0x4>, /* power */
|
|||
|
<0 190 0x4>, /* rx0 */
|
|||
|
<0 186 0x4>, /* tx0 */
|
|||
|
<0 191 0x4>, /* rx1 */
|
|||
|
<0 187 0x4>, /* tx1 */
|
|||
|
<0 192 0x4>, /* rx2 */
|
|||
|
<0 188 0x4>, /* tx2 */
|
|||
|
<0 193 0x4>, /* rx3 */
|
|||
|
<0 189 0x4>; /* tx3 */
|
|||
|
nvidia,csr_clock_speed = <0x19>; /* CSR clock speed 25MHz */
|
|||
|
clocks = <&tegra_car TEGRA186_CLK_EQOS_AXI>,
|
|||
|
<&tegra_car TEGRA186_CLK_EQOS_RX>,
|
|||
|
<&tegra_car TEGRA186_CLK_EQOS_PTP_REF>,
|
|||
|
<&tegra_car TEGRA186_CLK_EQOS_TX>,
|
|||
|
<&tegra_car TEGRA186_CLK_AXI_CBB>;
|
|||
|
clock-names = "eqos_axi", "eqos_rx", "eqos_ptp_ref", "eqos_tx", "axi_cbb";
|
|||
|
resets = <&tegra_car TEGRA186_RESET_EQOS>;
|
|||
|
reset-names = "eqos_rst";
|
|||
|
phy-mode = "rgmii";
|
|||
|
status = "disabled";
|
|||
|
pinctrl-names = "idle", "default";
|
|||
|
pinctrl-0 = <&eqos_txrx_tri_state_idle>;
|
|||
|
pinctrl-1 = <&eqos_txrx_tri_state_default>;
|
|||
|
nvidia,queue_prio = <0 1 2 3>;
|
|||
|
nvidia,use_tagged_ptp;
|
|||
|
nvidia,chan_napi_quota = <64 64 64 64>;
|
|||
|
nvidia,ptp_dma_ch = <3>;
|
|||
|
nvidia,phy-max-frame-size = <10>;
|
|||
|
nvidia,ptp_ref_clock_speed = <125>;
|
|||
|
nvidia,use_multi_queues
|
|||
|
nvidia,brcm_phy_apd_mode;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
Pinctrl Description (pinctrl-0/1 property)
|
|||
|
====================================================/
|
|||
|
|
|||
|
The pinctrl property of the eqos node above manages the EQOS pin mux'ing and
|
|||
|
its configuration. In this case, enabling and disabling the pins drive state
|
|||
|
for the eqos function group.
|
|||
|
|
|||
|
Proprties:
|
|||
|
- nvidia, pins Represent name of the pin or its mux group name.
|
|||
|
- nvidia, tristate pins are set to TEGRA_PIN_ENABLE in eqos idle state
|
|||
|
(eqos_idle) OR set to TEGRA_PIN_DISABLE in
|
|||
|
eqos active state (eqos_default)
|
|||
|
|
|||
|
For more details on tegra pinmux controller and pins, please refer to
|
|||
|
the document nvidia,tegra186-pinmux.txt.
|
|||
|
|
|||
|
Example:
|
|||
|
|
|||
|
pinmux@2430000 {
|
|||
|
eqos_txrx_tri_state_idle: eqos_idle {
|
|||
|
eqos {
|
|||
|
nvidia,pins = "eqos_td3_pe4","eqos_td2_pe3",
|
|||
|
"eqos_td1_pe2","eqos_td0_pe1",
|
|||
|
"eqos_txc_pe0","eqos_tx_ctl_pe5",
|
|||
|
"eqos_rd3_pf1","eqos_rd2_pf0",
|
|||
|
"eqos_rd1_pe7","eqos_rd0_pe6",
|
|||
|
"eqos_rxc_pf3","eqos_rx_ctl_pf2";
|
|||
|
nvidia,tristate = <TEGRA_PIN_ENABLE>;
|
|||
|
};
|
|||
|
};
|
|||
|
|
|||
|
eqos_txrx_tri_state_default: eqos_default {
|
|||
|
eqos {
|
|||
|
nvidia,pins = "eqos_td3_pe4","eqos_td2_pe3",
|
|||
|
"eqos_td1_pe2","eqos_td0_pe1",
|
|||
|
"eqos_txc_pe0","eqos_tx_ctl_pe5",
|
|||
|
"eqos_rd3_pf1","eqos_rd2_pf0",
|
|||
|
"eqos_rd1_pe7","eqos_rd0_pe6",
|
|||
|
"eqos_rxc_pf3","eqos_rx_ctl_pf2";
|
|||
|
nvidia,tristate = <TEGRA_PIN_DISABLE>;
|
|||
|
};
|
|||
|
};
|
|||
|
|
|||
|
}
|