ARM: dts: BCM5301X: Add support for Linksys EA9500

Submitted by Vivek Unune on March 15, 2017, 3 p.m.

Details

Message ID 1489590033-4946-1-git-send-email-npcomplete13@gmail.com
State New
Headers show

Commit Message

Vivek Unune March 15, 2017, 3 p.m.
Hardware Info
-------------

Processor	- Broadcom BCM4709C0KFEBG dual-core @ 1.4 GHz
Switch		- BCM53012 in BCM4709C0KFEBG & external BCM53125
DDR3 RAM	- 256 MB
Flash		- 128 MB (Toshiba TC58BVG0S3HTA00)
2.4GHz		- BCM4366 4×4 2.4/5G single chip 802.11ac SoC
Power Amp	- Skyworks SE2623L 2.4 GHz power amp (x4)
5GHz x 2	- BCM4366 4×4 2.4/5G single chip 802.11ac SoC
Power Amp	- PLX Technology PEX8603 3-lane, 3-port PCIe switch
Ports		- 8 Ports, 1 WAN Ports
Antennas	- 8 Antennas
Serial Port	- @J6 [GND,TX,RX] (VCC NC)    115200 8n1

I was able to test this with Lede with following quirks.

- Broadcom 4366c0 wireless chip is used and it's firmware package doesn't
  exist yet. I was able to test it with firmware that came buried in the
  router's dhd.ko
- CPU is connected to port 5
- It has two switches in order to support 8 lan ports. Internal switch is
  BCM53012. The external switch BCM53125 currently works as "dumb switch"
- Using 8 bit ECC gives errors, switching to 1 bit ECC solved the issue
- It uses dual firmware (trx) copies for failsafe purposes.

Installation
------------

Linksys gpg-signs their firmware for this router, hence it is not
possible to install using Factory UI.

This router needs serial cable hooked up to J6. Then interrupt the boot
   process by Ctrl+C to enter CFE prompt
   From there execute:
        `flash -noheader 192.168.1.10:/lede.trx nflash0.trx`
   where 192.168.1.10 is where your tftp server should is running.
You may want to reset partial boots using
  `nvram set partialboot=0 && nvram commit' while at CFE prompt.

TODO
----

- Add BCM53125 (secondary switch) to dts
- Add robo_reset gpio (pin# 10 active low) to dts

Signed-off-by: Vivek Unune <npcomplete13@gmail.com>
---
 arch/arm/boot/dts/bcm47094-linksys-panamera.dts | 97 ++++++++++++++++++++++++-
 1 file changed, 96 insertions(+), 1 deletion(-)

Comments

Andrew Lunn March 15, 2017, 6:52 p.m.
Hi Vivek

> - It has two switches in order to support 8 lan ports. Internal switch is
>   BCM53012. The external switch BCM53125 currently works as "dumb switch"

Do you know how the second switch is connected? Is it cascaded off the
internal switch? Or does it have a dedicated Ethernet interface?

Thanks
	Andrew
Vivek Unune March 15, 2017, 7:44 p.m.
Andrew,

I'm not entirely sure. But here is what I observed.
Bootloader sets up both the switches. And I can use all 8 ports of the
router when I boot Lede. Only the internal switch is detected and
configurable via swconfig tool
Internal switch is connected to CPU via port 5 same as Netgear R8000.
The other bit here is that I looked through the GPL source and gpio
pin 10 is labeled as EA9500_RST2LANSW_GPIO10_PIN/ResetSwitch. So when
I performed a robo reset of the pin and 5 ports (labeled 1 thru 5 on
the unit) of the 8 physical ports stopped working (no packets).

If the external switch were to be connect via dedicated ethernet
interface it should have shown up during the probe. Is in't it?
Unfortunately my understanding about network devices limits me to
investigate this further.

I'll be more than happy to perform any tests if needed.

Thanks,

Vivek

P.S  sorry for duplicate email if you did get this first time around.
I've turned off HTML formatting.


>
>
> On Wed, Mar 15, 2017 at 2:52 PM Andrew Lunn <andrew@lunn.ch> wrote:
>>
>> Hi Vivek
>>
>> > - It has two switches in order to support 8 lan ports. Internal switch is
>> >   BCM53012. The external switch BCM53125 currently works as "dumb switch"
>>
>> Do you know how the second switch is connected? Is it cascaded off the
>> internal switch? Or does it have a dedicated Ethernet interface?
>>
>> Thanks
>>         Andrew
Florian Fainelli March 15, 2017, 7:49 p.m.
On 03/15/2017 12:34 PM, Vivek Unune wrote:
> Andrew,
> 
> I'm not entirely sure. But here is what I observed.
> 
> Boot loader sets up both the switches. And I can use all 8 ports of the
> router when I boot Lede. Only the internal swich is detected and
> configurable via swconfig tool
> Internal switch is connected to CPU via port 5 same as Netgear R8000.
> The other bit here is that I looked through the GPL source and gpio pin
> 10 is labeled as EA9500_RST2LANSW_GPIO10_PIN/ResetSwitch. So when I
> performed a robo reset of the pin and 5 (labeled 1 thru 5 on the unit)
> of the 8 physical ports stopped working (no packets).
> 
> If the external switch were to be connect via dedicated ethernet
> interface it should have shown up during the probe. Is in't it?

Not necessarily, and probably not with LEDE which would treat the
external 53125 as a dumb switch and not even see it. With a mainline
kernel and the B53 DSA driver you would be able to represent both
switches in Device Tree and describe how they are cascading from each other.

The potential Device Tree changes could look like this (based on your
explanation, but I am not sure) for your platform, assuming the 53125 is
actually exposing the front panel ports and that we did introduce a
"mdio" node which would be required to expose the external BCM53125 switch.


/* There is no MDIO node, there should be one */
&mdio {
	status = "okay";

	switch@30 {
		#address-cells = <1>;
		#size-cells = <0>;
		reset-gpios = <&gpio 10>;
		reset-names = "robo_reset";

		ports {
                	#address-cells = <1>;
	                #size-cells = <0>;

        	        port@0 {
                	        reg = <0>;
                        	label = "lan1";
	                };

	                port@1 {
        	                reg = <1>;
                	        label = "lan2";
                	};

	                port@2 {
        	                reg = <2>;
                	        label = "lan3";
                	};

	                port@3 {
        	                reg = <3>;
                	        label = "lan1";
                	};

	                port@4 {
        	                reg = <4>;
                	        label = "wan";
                	};

 	               port@5 {
        	                reg = <5>;
                	        label = "cpu";
                        	ethernet = <&sw0port8>;
				fixed-link {
					speed = <1000>;
					full-duplex;
				};
                	};
		};
	};
};

&srab {
        status = "okay";

	ports {
		#address-cells = <1>;
		#size-cells = <0>;

		port@5 {
			reg = <5>;
			label = "cpu";
			ethernet = <&gmac0>;
			fixed-link {
				speed = <1000>;
				full-duplex;
			};
		};

		sw0port8: port@8 {
			reg = <8>;
			label = "extswitch";

			fixed-link {
				speed = <1000>;
				full-duplex;
			};
		};
        };
};

> 
> Thanks,
> 
> Vivek
> 
> 
> On Wed, Mar 15, 2017 at 2:52 PM Andrew Lunn <andrew@lunn.ch
> <mailto:andrew@lunn.ch>> wrote:
> 
>     Hi Vivek
> 
>     > - It has two switches in order to support 8 lan ports. Internal
>     switch is
>     >   BCM53012. The external switch BCM53125 currently works as "dumb
>     switch"
> 
>     Do you know how the second switch is connected? Is it cascaded off the
>     internal switch? Or does it have a dedicated Ethernet interface?
> 
>     Thanks
>             Andrew
>
Vivek Unune March 15, 2017, 8:18 p.m.
Thanks Florian.

Let me try this out. First I'll try to figure out how to add a mdio node.

Over the weekend I was trying enable DSA driver, but did not see DSA
under network. I'm using LEDE source with kernel 4.9. Nor did I see it
when I tried 'make kernel_menuconfig'

Thanks again.

On Wed, Mar 15, 2017 at 3:49 PM, Florian Fainelli
<florian.fainelli@broadcom.com> wrote:
> On 03/15/2017 12:34 PM, Vivek Unune wrote:
>> Andrew,
>>
>> I'm not entirely sure. But here is what I observed.
>>
>> Boot loader sets up both the switches. And I can use all 8 ports of the
>> router when I boot Lede. Only the internal swich is detected and
>> configurable via swconfig tool
>> Internal switch is connected to CPU via port 5 same as Netgear R8000.
>> The other bit here is that I looked through the GPL source and gpio pin
>> 10 is labeled as EA9500_RST2LANSW_GPIO10_PIN/ResetSwitch. So when I
>> performed a robo reset of the pin and 5 (labeled 1 thru 5 on the unit)
>> of the 8 physical ports stopped working (no packets).
>>
>> If the external switch were to be connect via dedicated ethernet
>> interface it should have shown up during the probe. Is in't it?
>
> Not necessarily, and probably not with LEDE which would treat the
> external 53125 as a dumb switch and not even see it. With a mainline
> kernel and the B53 DSA driver you would be able to represent both
> switches in Device Tree and describe how they are cascading from each other.
>
> The potential Device Tree changes could look like this (based on your
> explanation, but I am not sure) for your platform, assuming the 53125 is
> actually exposing the front panel ports and that we did introduce a
> "mdio" node which would be required to expose the external BCM53125 switch.
>
>
> /* There is no MDIO node, there should be one */
> &mdio {
>         status = "okay";
>
>         switch@30 {
>                 #address-cells = <1>;
>                 #size-cells = <0>;
>                 reset-gpios = <&gpio 10>;
>                 reset-names = "robo_reset";
>
>                 ports {
>                         #address-cells = <1>;
>                         #size-cells = <0>;
>
>                         port@0 {
>                                 reg = <0>;
>                                 label = "lan1";
>                         };
>
>                         port@1 {
>                                 reg = <1>;
>                                 label = "lan2";
>                         };
>
>                         port@2 {
>                                 reg = <2>;
>                                 label = "lan3";
>                         };
>
>                         port@3 {
>                                 reg = <3>;
>                                 label = "lan1";
>                         };
>
>                         port@4 {
>                                 reg = <4>;
>                                 label = "wan";
>                         };
>
>                        port@5 {
>                                 reg = <5>;
>                                 label = "cpu";
>                                 ethernet = <&sw0port8>;
>                                 fixed-link {
>                                         speed = <1000>;
>                                         full-duplex;
>                                 };
>                         };
>                 };
>         };
> };
>
> &srab {
>         status = "okay";
>
>         ports {
>                 #address-cells = <1>;
>                 #size-cells = <0>;
>
>                 port@5 {
>                         reg = <5>;
>                         label = "cpu";
>                         ethernet = <&gmac0>;
>                         fixed-link {
>                                 speed = <1000>;
>                                 full-duplex;
>                         };
>                 };
>
>                 sw0port8: port@8 {
>                         reg = <8>;
>                         label = "extswitch";
>
>                         fixed-link {
>                                 speed = <1000>;
>                                 full-duplex;
>                         };
>                 };
>         };
> };
>
>>
>> Thanks,
>>
>> Vivek
>>
>>
>> On Wed, Mar 15, 2017 at 2:52 PM Andrew Lunn <andrew@lunn.ch
>> <mailto:andrew@lunn.ch>> wrote:
>>
>>     Hi Vivek
>>
>>     > - It has two switches in order to support 8 lan ports. Internal
>>     switch is
>>     >   BCM53012. The external switch BCM53125 currently works as "dumb
>>     switch"
>>
>>     Do you know how the second switch is connected? Is it cascaded off the
>>     internal switch? Or does it have a dedicated Ethernet interface?
>>
>>     Thanks
>>             Andrew
>>
>
>
> --
> Florian
Florian Fainelli March 15, 2017, 9:19 p.m.
On 03/15/2017 01:18 PM, Vivek Unune wrote:
> Thanks Florian.
> 
> Let me try this out. First I'll try to figure out how to add a mdio node.
> 
> Over the weekend I was trying enable DSA driver, but did not see DSA
> under network. I'm using LEDE source with kernel 4.9. Nor did I see it
> when I tried 'make kernel_menuconfig'

(please don't top post on public mailing lists)

You need to enable SWITCHDEV to have DSA. AFAIR SWITCHDEV may depend on
EXPERT/EXPERIMENTAL as of 4.9 (or that was before).

> 
> Thanks again.
> 
> On Wed, Mar 15, 2017 at 3:49 PM, Florian Fainelli
> <florian.fainelli@broadcom.com> wrote:
>> On 03/15/2017 12:34 PM, Vivek Unune wrote:
>>> Andrew,
>>>
>>> I'm not entirely sure. But here is what I observed.
>>>
>>> Boot loader sets up both the switches. And I can use all 8 ports of the
>>> router when I boot Lede. Only the internal swich is detected and
>>> configurable via swconfig tool
>>> Internal switch is connected to CPU via port 5 same as Netgear R8000.
>>> The other bit here is that I looked through the GPL source and gpio pin
>>> 10 is labeled as EA9500_RST2LANSW_GPIO10_PIN/ResetSwitch. So when I
>>> performed a robo reset of the pin and 5 (labeled 1 thru 5 on the unit)
>>> of the 8 physical ports stopped working (no packets).
>>>
>>> If the external switch were to be connect via dedicated ethernet
>>> interface it should have shown up during the probe. Is in't it?
>>
>> Not necessarily, and probably not with LEDE which would treat the
>> external 53125 as a dumb switch and not even see it. With a mainline
>> kernel and the B53 DSA driver you would be able to represent both
>> switches in Device Tree and describe how they are cascading from each other.
>>
>> The potential Device Tree changes could look like this (based on your
>> explanation, but I am not sure) for your platform, assuming the 53125 is
>> actually exposing the front panel ports and that we did introduce a
>> "mdio" node which would be required to expose the external BCM53125 switch.
>>
>>
>> /* There is no MDIO node, there should be one */
>> &mdio {
>>         status = "okay";
>>
>>         switch@30 {
>>                 #address-cells = <1>;
>>                 #size-cells = <0>;
>>                 reset-gpios = <&gpio 10>;
>>                 reset-names = "robo_reset";
>>
>>                 ports {
>>                         #address-cells = <1>;
>>                         #size-cells = <0>;
>>
>>                         port@0 {
>>                                 reg = <0>;
>>                                 label = "lan1";
>>                         };
>>
>>                         port@1 {
>>                                 reg = <1>;
>>                                 label = "lan2";
>>                         };
>>
>>                         port@2 {
>>                                 reg = <2>;
>>                                 label = "lan3";
>>                         };
>>
>>                         port@3 {
>>                                 reg = <3>;
>>                                 label = "lan1";
>>                         };
>>
>>                         port@4 {
>>                                 reg = <4>;
>>                                 label = "wan";
>>                         };
>>
>>                        port@5 {
>>                                 reg = <5>;
>>                                 label = "cpu";
>>                                 ethernet = <&sw0port8>;
>>                                 fixed-link {
>>                                         speed = <1000>;
>>                                         full-duplex;
>>                                 };
>>                         };
>>                 };
>>         };
>> };
>>
>> &srab {
>>         status = "okay";
>>
>>         ports {
>>                 #address-cells = <1>;
>>                 #size-cells = <0>;
>>
>>                 port@5 {
>>                         reg = <5>;
>>                         label = "cpu";
>>                         ethernet = <&gmac0>;
>>                         fixed-link {
>>                                 speed = <1000>;
>>                                 full-duplex;
>>                         };
>>                 };
>>
>>                 sw0port8: port@8 {
>>                         reg = <8>;
>>                         label = "extswitch";
>>
>>                         fixed-link {
>>                                 speed = <1000>;
>>                                 full-duplex;
>>                         };
>>                 };
>>         };
>> };
>>
>>>
>>> Thanks,
>>>
>>> Vivek
>>>
>>>
>>> On Wed, Mar 15, 2017 at 2:52 PM Andrew Lunn <andrew@lunn.ch
>>> <mailto:andrew@lunn.ch>> wrote:
>>>
>>>     Hi Vivek
>>>
>>>     > - It has two switches in order to support 8 lan ports. Internal
>>>     switch is
>>>     >   BCM53012. The external switch BCM53125 currently works as "dumb
>>>     switch"
>>>
>>>     Do you know how the second switch is connected? Is it cascaded off the
>>>     internal switch? Or does it have a dedicated Ethernet interface?
>>>
>>>     Thanks
>>>             Andrew
>>>
>>
>>
>> --
>> Florian

Patch hide | download patch | download mbox

diff --git a/arch/arm/boot/dts/bcm47094-linksys-panamera.dts b/arch/arm/boot/dts/bcm47094-linksys-panamera.dts
index b6750f7..75537ed 100644
--- a/arch/arm/boot/dts/bcm47094-linksys-panamera.dts
+++ b/arch/arm/boot/dts/bcm47094-linksys-panamera.dts
@@ -7,7 +7,7 @@ 
 /dts-v1/;
 
 #include "bcm47094.dtsi"
-#include "bcm5301x-nand-cs0-bch8.dtsi"
+#include "bcm5301x-nand-cs0-bch1.dtsi"
 
 / {
 	compatible = "linksys,panamera", "brcm,bcm47094", "brcm,bcm4708";
@@ -32,5 +32,100 @@ 
 			linux,code = <KEY_WPS_BUTTON>;
 			gpios = <&chipcommon 3 GPIO_ACTIVE_LOW>;
 		};
+
+		rfkill {
+		label = "WiFi";
+		linux,code = <KEY_RFKILL>;
+		gpios = <&chipcommon 16 GPIO_ACTIVE_LOW>;
+		};
+
+		reset {
+		label = "Reset";
+		linux,code = <KEY_RESTART>;
+		gpios = <&chipcommon 17 GPIO_ACTIVE_LOW>;
+		};
+	};
+
+	leds {
+		compatible = "gpio-leds";
+
+		wps {
+		label = "bcm53xx:white:wps";
+		gpios = <&chipcommon 22 GPIO_ACTIVE_LOW>;
+		};
+
+		usb2 {
+		label = "bcm53xx:green:usb2";
+		gpios = <&chipcommon 1 GPIO_ACTIVE_LOW>;
+		};
+
+		usb3 {
+		label = "bcm53xx:green:usb3";
+		gpios = <&chipcommon 2 GPIO_ACTIVE_LOW>;
+		};
+
+		power {
+		label = "bcm53xx:white:power";
+		gpios = <&chipcommon 4 GPIO_ACTIVE_HIGH>;
+		};
+
+		wifi-disabled {
+		label = "bcm53xx:amber:wifi-disabled";
+		gpios = <&chipcommon 0 GPIO_ACTIVE_LOW>;
+		};
+
+		wifi-enabled {
+		label = "bcm53xx:white:wifi-enabled";
+		gpios = <&chipcommon 5 GPIO_ACTIVE_HIGH>;
+		};
+
+		bluebar1 {
+		label = "bcm53xx:white:bluebar1";
+		gpios = <&chipcommon 11 GPIO_ACTIVE_HIGH>;
+		};
+
+		bluebar2 {
+		label = "bcm53xx:white:bluebar2";
+		gpios = <&chipcommon 12 GPIO_ACTIVE_HIGH>;
+		};
+
+		bluebar3 {
+		label = "bcm53xx:white:bluebar3";
+		gpios = <&chipcommon 15 GPIO_ACTIVE_LOW>;
+		};
+
+		bluebar4 {
+		label = "bcm53xx:white:bluebar4";
+		gpios = <&chipcommon 18 GPIO_ACTIVE_HIGH>;
+		};
+
+		bluebar5 {
+		label = "bcm53xx:white:bluebar5";
+		gpios = <&chipcommon 19 GPIO_ACTIVE_HIGH>;
+		};
+
+		bluebar6 {
+		label = "bcm53xx:white:bluebar6";
+		gpios = <&chipcommon 20 GPIO_ACTIVE_HIGH>;
+		};
+
+		bluebar7 {
+		label = "bcm53xx:white:bluebar7";
+		gpios = <&chipcommon 21 GPIO_ACTIVE_HIGH>;
+		};
+
+		bluebar8 {
+		label = "bcm53xx:white:bluebar8";
+		gpios = <&chipcommon 8 GPIO_ACTIVE_HIGH>;
+		};
+
 	};
 };
+
+&usb2 {
+	vcc-gpio = <&chipcommon 13 GPIO_ACTIVE_HIGH>;
+};
+
+&usb3 {
+	vcc-gpio = <&chipcommon 14 GPIO_ACTIVE_HIGH>;
+};