summaryrefslogtreecommitdiffstats
path: root/target/linux/ppc40x/patches/002-disable_emac_loopback_mode.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/ppc40x/patches/002-disable_emac_loopback_mode.patch')
-rw-r--r--target/linux/ppc40x/patches/002-disable_emac_loopback_mode.patch25
1 files changed, 25 insertions, 0 deletions
diff --git a/target/linux/ppc40x/patches/002-disable_emac_loopback_mode.patch b/target/linux/ppc40x/patches/002-disable_emac_loopback_mode.patch
new file mode 100644
index 000000000..10f17747b
--- /dev/null
+++ b/target/linux/ppc40x/patches/002-disable_emac_loopback_mode.patch
@@ -0,0 +1,25 @@
+--- a/arch/powerpc/platforms/40x/kilauea.c
++++ b/arch/powerpc/platforms/40x/kilauea.c
+@@ -21,6 +21,8 @@
+ #include <asm/uic.h>
+ #include <asm/pci-bridge.h>
+ #include <asm/ppc4xx.h>
++#include <asm/dcr.h>
++#include <asm/dcr-regs.h>
+
+ static __initdata struct of_device_id kilauea_of_bus[] = {
+ { .compatible = "ibm,plb4", },
+@@ -46,6 +48,13 @@
+
+ ppc_pci_flags = PPC_PCI_REASSIGN_ALL_RSRC;
+
++ /*
++ * 405EX(r) has SDR0_MFR[E0CS/E1CS] set after reset. This selects
++ * the internal loopback mode. Clear these bits so that both EMACs
++ * don't use loopback mode as deafult.
++ */
++ mtdcri(SDR0, SDR0_MFR, mfdcri(SDR0, SDR0_MFR) & ~0x0c000000);
++
+ return 1;
+ }
+