diff mbox

[V2,5/7] ARM: dts: imx6qdl-sabrelite: use GPIO_6 for FEC interrupt.

Message ID 1387565233-16144-6-git-send-email-troy.kisky@boundarydevices.com (mailing list archive)
State New, archived
Headers show

Commit Message

Troy Kisky Dec. 20, 2013, 6:47 p.m. UTC
This works around a hardware bug.
From "Chip Errata for the i.MX 6Dual/6Quad"

ERR006687 ENET: Only the ENET wake-up interrupt request can wake the
system from Wait mode.

The ENET block generates many interrupts. Only one of these interrupt lines
is connected to the General Power Controller (GPC) block, but a logical OR
of all of the ENET interrupts is connected to the General Interrupt Controller
(GIC). When the system enters Wait mode, a normal RX Done or TX Done does not
wake up the system because the GPC cannot see this interrupt. This impacts
performance of the ENET block because its interrupts are serviced only when
the chip exits Wait mode due to an interrupt from some other wake-up source.

Before this patch, ping times of a Sabre Lite board are quite
random:
ping 192.168.0.13 -i.5 -c5
PING 192.168.0.13 (192.168.0.13) 56(84) bytes of data.
64 bytes from 192.168.0.13: icmp_req=1 ttl=64 time=15.7 ms
64 bytes from 192.168.0.13: icmp_req=2 ttl=64 time=14.4 ms
64 bytes from 192.168.0.13: icmp_req=3 ttl=64 time=13.4 ms
64 bytes from 192.168.0.13: icmp_req=4 ttl=64 time=12.4 ms
64 bytes from 192.168.0.13: icmp_req=5 ttl=64 time=11.4 ms

--- 192.168.0.13 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 11.431/13.501/15.746/1.508 ms

Comments

Troy Kisky Dec. 20, 2013, 7:02 p.m. UTC | #1
On 12/20/2013 11:47 AM, Troy Kisky wrote:
> This works around a hardware bug.
> >From "Chip Errata for the i.MX 6Dual/6Quad"
>
> ERR006687 ENET: Only the ENET wake-up interrupt request can wake the
> system from Wait mode.
>
> The ENET block generates many interrupts. Only one of these interrupt lines
> is connected to the General Power Controller (GPC) block, but a logical OR
> of all of the ENET interrupts is connected to the General Interrupt Controller
> (GIC). When the system enters Wait mode, a normal RX Done or TX Done does not
> wake up the system because the GPC cannot see this interrupt. This impacts
> performance of the ENET block because its interrupts are serviced only when
> the chip exits Wait mode due to an interrupt from some other wake-up source.
>
> Before this patch, ping times of a Sabre Lite board are quite
> random:
> ping 192.168.0.13 -i.5 -c5
> PING 192.168.0.13 (192.168.0.13) 56(84) bytes of data.
> 64 bytes from 192.168.0.13: icmp_req=1 ttl=64 time=15.7 ms
> 64 bytes from 192.168.0.13: icmp_req=2 ttl=64 time=14.4 ms
> 64 bytes from 192.168.0.13: icmp_req=3 ttl=64 time=13.4 ms
> 64 bytes from 192.168.0.13: icmp_req=4 ttl=64 time=12.4 ms
> 64 bytes from 192.168.0.13: icmp_req=5 ttl=64 time=11.4 ms
>
> --- 192.168.0.13 ping statistics ---
> 5 packets transmitted, 5 received, 0% packet loss, time 2004ms
> rtt min/avg/max/mdev = 11.431/13.501/15.746/1.508 ms
> ____________________________________________________
> After this patch:
>
> ping 192.168.0.13 -i.5 -c5
> PING 192.168.0.13 (192.168.0.13) 56(84) bytes of data.
> 64 bytes from 192.168.0.13: icmp_req=1 ttl=64 time=0.120 ms
> 64 bytes from 192.168.0.13: icmp_req=2 ttl=64 time=0.175 ms
> 64 bytes from 192.168.0.13: icmp_req=3 ttl=64 time=0.169 ms
> 64 bytes from 192.168.0.13: icmp_req=4 ttl=64 time=0.168 ms
> 64 bytes from 192.168.0.13: icmp_req=5 ttl=64 time=0.172 ms
>
> --- 192.168.0.13 ping statistics ---
> 5 packets transmitted, 5 received, 0% packet loss, time 1999ms
> rtt min/avg/max/mdev = 0.120/0.160/0.175/0.026 ms
> ____________________________________________________
>
> Also, apply same change to imx6qdl-nitrogen6x.
>
> This change may not be appropriate for all boards.
> Sabre Lite uses GPIO6 as a power down output for a ov5642
> camera. As this expansion board does not yet work with mainline,
> this is not yet a conflict. It would be nice to have an alternative
> fix for boards where this is a problem.
>
> For example Sabre SD uses GPIO6 for I2C3_SDA. It also
> has long ping times currently. But cannot use this fix
> without giving up a touchscreen.
>
> Its ping times are also random.
>
> ping 192.168.0.19 -i.5 -c5
> PING 192.168.0.19 (192.168.0.19) 56(84) bytes of data.
> 64 bytes from 192.168.0.19: icmp_req=1 ttl=64 time=16.0 ms
> 64 bytes from 192.168.0.19: icmp_req=2 ttl=64 time=15.4 ms
> 64 bytes from 192.168.0.19: icmp_req=3 ttl=64 time=14.4 ms
> 64 bytes from 192.168.0.19: icmp_req=4 ttl=64 time=13.4 ms
> 64 bytes from 192.168.0.19: icmp_req=5 ttl=64 time=12.4 ms
>
> --- 192.168.0.19 ping statistics ---
> 5 packets transmitted, 5 received, 0% packet loss, time 2003ms
> rtt min/avg/max/mdev = 12.451/14.369/16.057/1.316 ms
>
> Signed-off-by: Troy Kisky <troy.kisky@boundarydevices.com>
> CC: ra5478@freescale.com

Sorry, I forgot to change this to

CC: Ranjani Vaidyanathan<ra5478@freescale.com>


> ---
>   arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi | 3 +++
>   arch/arm/boot/dts/imx6qdl-sabrelite.dtsi  | 3 +++
>   2 files changed, 6 insertions(+)
>
> diff --git a/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi b/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi
> index 34145d1..e83ffc7 100644
> --- a/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi
> +++ b/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi
> @@ -165,6 +165,8 @@
>   	txd1-skew-ps = <0>;
>   	txd2-skew-ps = <0>;
>   	txd3-skew-ps = <0>;
> +	interrupts-extended = <&gpio1 6 IRQ_TYPE_LEVEL_HIGH>,
> +			      <&intc 0 119 IRQ_TYPE_LEVEL_HIGH>;
>   	status = "okay";
>   };
>   
> @@ -211,6 +213,7 @@
>   				MX6QDL_ENET_PINGRP_RGMII_MD(0x1b0b0, 0x100b0)
>   				/* Phy reset */
>   				MX6QDL_PAD_ENET_RXD0__GPIO1_IO27	0x000b0
> +				MX6QDL_PAD_GPIO_6__ENET_IRQ		0x000b1
>   			>;
>   		};
>   
> diff --git a/arch/arm/boot/dts/imx6qdl-sabrelite.dtsi b/arch/arm/boot/dts/imx6qdl-sabrelite.dtsi
> index 4d156f5..24c2c1b 100644
> --- a/arch/arm/boot/dts/imx6qdl-sabrelite.dtsi
> +++ b/arch/arm/boot/dts/imx6qdl-sabrelite.dtsi
> @@ -164,6 +164,8 @@
>   	txd1-skew-ps = <0>;
>   	txd2-skew-ps = <0>;
>   	txd3-skew-ps = <0>;
> +	interrupts-extended = <&gpio1 6 IRQ_TYPE_LEVEL_HIGH>,
> +			      <&intc 0 119 IRQ_TYPE_LEVEL_HIGH>;
>   	status = "okay";
>   };
>   
> @@ -210,6 +212,7 @@
>   				MX6QDL_ENET_PINGRP_RGMII_MD(0x1b0b0, 0x100b0)
>   				/* Phy reset */
>   				MX6QDL_PAD_EIM_D23__GPIO3_IO23		0x000b0
> +				MX6QDL_PAD_GPIO_6__ENET_IRQ		0x000b1
>   			>;
>   		};
>
Shawn Guo Dec. 23, 2013, 7:28 a.m. UTC | #2
On Fri, Dec 20, 2013 at 12:02:13PM -0700, Troy Kisky wrote:
> >Signed-off-by: Troy Kisky <troy.kisky@boundarydevices.com>
> >CC: ra5478@freescale.com
> 
> Sorry, I forgot to change this to
> 
> CC: Ranjani Vaidyanathan<ra5478@freescale.com>

I fixed it up and applied the series.

Shawn
diff mbox

Patch

diff --git a/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi b/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi
index 34145d1..e83ffc7 100644
--- a/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi
+++ b/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi
@@ -165,6 +165,8 @@ 
 	txd1-skew-ps = <0>;
 	txd2-skew-ps = <0>;
 	txd3-skew-ps = <0>;
+	interrupts-extended = <&gpio1 6 IRQ_TYPE_LEVEL_HIGH>,
+			      <&intc 0 119 IRQ_TYPE_LEVEL_HIGH>;
 	status = "okay";
 };
 
@@ -211,6 +213,7 @@ 
 				MX6QDL_ENET_PINGRP_RGMII_MD(0x1b0b0, 0x100b0)
 				/* Phy reset */
 				MX6QDL_PAD_ENET_RXD0__GPIO1_IO27	0x000b0
+				MX6QDL_PAD_GPIO_6__ENET_IRQ		0x000b1
 			>;
 		};
 
diff --git a/arch/arm/boot/dts/imx6qdl-sabrelite.dtsi b/arch/arm/boot/dts/imx6qdl-sabrelite.dtsi
index 4d156f5..24c2c1b 100644
--- a/arch/arm/boot/dts/imx6qdl-sabrelite.dtsi
+++ b/arch/arm/boot/dts/imx6qdl-sabrelite.dtsi
@@ -164,6 +164,8 @@ 
 	txd1-skew-ps = <0>;
 	txd2-skew-ps = <0>;
 	txd3-skew-ps = <0>;
+	interrupts-extended = <&gpio1 6 IRQ_TYPE_LEVEL_HIGH>,
+			      <&intc 0 119 IRQ_TYPE_LEVEL_HIGH>;
 	status = "okay";
 };
 
@@ -210,6 +212,7 @@ 
 				MX6QDL_ENET_PINGRP_RGMII_MD(0x1b0b0, 0x100b0)
 				/* Phy reset */
 				MX6QDL_PAD_EIM_D23__GPIO3_IO23		0x000b0
+				MX6QDL_PAD_GPIO_6__ENET_IRQ		0x000b1
 			>;
 		};