Commit f8b5992beea79b68f6695d301868b6a2a8f7e16f

Authored by Lokesh Vutla
Committed by Sekhar Nori
1 parent 24b53d317d

ARM: DRA7: GMAC: Apply Errata i877

Errata ID: i877

Description:
The RGMII Transmit timing is based on the output clock (rgmiin_txc) being
driven relative to the rising edge of an internal clock and the output
control/data (rgmiin_txctl/txd) being driven relative to the falling edge
of an internal clock source. If the internal clock source is allowed to be
static low (i.e., disabled) for an extended period of time then when the
clock is actually enabled the timing delta between the rising edge and
falling edge can change over the lifetime of the device. This can result
in the device switching characteristics degrading over time, and
eventually failing to meet the Data Manual Delay Time/Skew specs.
To maintain RGMII IO Timings, SW should minimize the duration that the
Ethernet internal clock source is disabled. Note that the device reset
state for the Ethernet clock is "disabled".

Workaround:
If the SoC Ethernet interface(s) are used in RGMII mode, SW should minimize
the time the Ethernet internal clock source is disabled to a maximum of
200 hours in a device life cycle. This is done by enabling the clock as
early as possible in IPL (QNX) or SPL/u-boot (Linux/Android) by setting
the register CM_GMAC_CLKSTCTRL[1:0]CLKTRCTRL = 0x2:SW_WKUP.
In addition to programming SW_WKUP(0x2) on CM_GMAC_CLKSTCTRL, SW should
also program modulemode field as ENABLED(0x2) on CM_GMAC_GMAC_CLKCTRL
register.

Note that this erratum applies only when device may need to be used
for 1Gbit operation.
Since the POR is to use 1GB mode, enabling this errata by hooking
ti,no-idle flag to gmac node.

Acked-by: Roger Quadros <rogerq@ti.com>
Tested-by: Mugunthan V N <mugunthanvnm@ti.com>
Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com>
Signed-off-by: Sekhar Nori <nsekhar@ti.com>

Showing 3 changed files with 3 additions and 0 deletions Side-by-side Diff

arch/arm/boot/dts/am57xx-beagle-x15.dts
... ... @@ -487,6 +487,7 @@
487 487 &mac {
488 488 status = "okay";
489 489 dual_emac;
  490 + ti,no-idle;
490 491 };
491 492  
492 493 &cpsw_emac0 {
arch/arm/boot/dts/dra7-evm.dts
... ... @@ -714,6 +714,7 @@
714 714 &mac {
715 715 status = "okay";
716 716 dual_emac;
  717 + ti,no-idle;
717 718 };
718 719  
719 720 &cpsw_emac0 {
arch/arm/boot/dts/dra72-evm.dts
... ... @@ -601,6 +601,7 @@
601 601 pinctrl-0 = <&cpsw_default>;
602 602 pinctrl-1 = <&cpsw_sleep>;
603 603 slaves = <1>;
  604 + ti,no-idle;
604 605 };
605 606  
606 607 &cpsw_emac0 {