diff mbox series

[1/5] arm64: dts: broadcom: bcm4908: describe USB PHY

Message ID 20210215204105.27830-1-zajec5@gmail.com
State Superseded
Headers show
Series [1/5] arm64: dts: broadcom: bcm4908: describe USB PHY | expand

Commit Message

Rafał Miłecki Feb. 15, 2021, 8:41 p.m. UTC
From: Rafał Miłecki <rafal@milecki.pl>

BCM4908 uses slightly modified STB family USB PHY. It handles OHCI/EHCI
and XHCI. It requires powering up using the PMB.

Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
---
 .../bcm4908/bcm4906-netgear-r8000p.dts        | 17 +++++++++++++
 .../bcm4908/bcm4908-asus-gt-ac5300.dts        | 17 +++++++++++++
 .../boot/dts/broadcom/bcm4908/bcm4908.dtsi    | 25 ++++++++++++++++---
 3 files changed, 55 insertions(+), 4 deletions(-)

Comments

Florian Fainelli Feb. 16, 2021, 2:50 a.m. UTC | #1
On 2/15/2021 12:41 PM, Rafał Miłecki wrote:
> From: Rafał Miłecki <rafal@milecki.pl>

> 

> BCM4908 SoCs have an integrated Ethernet controller.

> 

> Signed-off-by: Rafał Miłecki <rafal@milecki.pl>

> ---

>  .../boot/dts/broadcom/bcm4908/bcm4908.dtsi    | 20 +++++++++++++++++++

>  1 file changed, 20 insertions(+)

> 

> diff --git a/arch/arm64/boot/dts/broadcom/bcm4908/bcm4908.dtsi b/arch/arm64/boot/dts/broadcom/bcm4908/bcm4908.dtsi

> index 358958105337..2d2c23292508 100644

> --- a/arch/arm64/boot/dts/broadcom/bcm4908/bcm4908.dtsi

> +++ b/arch/arm64/boot/dts/broadcom/bcm4908/bcm4908.dtsi

> @@ -112,6 +112,14 @@ soc {

>  		#size-cells = <1>;

>  		ranges = <0x00 0x00 0x80000000 0x281000>;

>  

> +		enet: ethernet@2000 {

> +			compatible = "brcm,bcm4908-enet";

> +			reg = <0x2000 0x1000>;

> +

> +			interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;

> +			interrupt-names = "rx";

> +		};

> +

>  		usb_phy: usb-phy@c200 {

>  			compatible = "brcm,bcm4908-usb-phy";

>  			reg = <0xc200 0x100>;

> @@ -199,6 +207,18 @@ port@3 {

>  						phy-mode = "internal";

>  						phy-handle = <&phy11>;

>  					};

> +

> +					port@8 {

> +						reg = <8>;

> +						phy-mode = "internal";

> +						ethernet = <&enet>;

> +						brcm,use-bcm-hdr;


This looks redundant, because we have an "ethernet" phandle property
here this will become the CPU port for DSA and so we would enable
Broadcom tags on that port. Did you somehow need that for the switch
driver to work?
-- 
Florian
Rafał Miłecki Feb. 17, 2021, 9:31 p.m. UTC | #2
On 16.02.2021 03:50, Florian Fainelli wrote:
> On 2/15/2021 12:41 PM, Rafał Miłecki wrote:

>> From: Rafał Miłecki <rafal@milecki.pl>

>>

>> BCM4908 SoCs have an integrated Ethernet controller.

>>

>> Signed-off-by: Rafał Miłecki <rafal@milecki.pl>

>> ---

>>   .../boot/dts/broadcom/bcm4908/bcm4908.dtsi    | 20 +++++++++++++++++++

>>   1 file changed, 20 insertions(+)

>>

>> diff --git a/arch/arm64/boot/dts/broadcom/bcm4908/bcm4908.dtsi b/arch/arm64/boot/dts/broadcom/bcm4908/bcm4908.dtsi

>> index 358958105337..2d2c23292508 100644

>> --- a/arch/arm64/boot/dts/broadcom/bcm4908/bcm4908.dtsi

>> +++ b/arch/arm64/boot/dts/broadcom/bcm4908/bcm4908.dtsi

>> @@ -112,6 +112,14 @@ soc {

>>   		#size-cells = <1>;

>>   		ranges = <0x00 0x00 0x80000000 0x281000>;

>>   

>> +		enet: ethernet@2000 {

>> +			compatible = "brcm,bcm4908-enet";

>> +			reg = <0x2000 0x1000>;

>> +

>> +			interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;

>> +			interrupt-names = "rx";

>> +		};

>> +

>>   		usb_phy: usb-phy@c200 {

>>   			compatible = "brcm,bcm4908-usb-phy";

>>   			reg = <0xc200 0x100>;

>> @@ -199,6 +207,18 @@ port@3 {

>>   						phy-mode = "internal";

>>   						phy-handle = <&phy11>;

>>   					};

>> +

>> +					port@8 {

>> +						reg = <8>;

>> +						phy-mode = "internal";

>> +						ethernet = <&enet>;

>> +						brcm,use-bcm-hdr;

> 

> This looks redundant, because we have an "ethernet" phandle property

> here this will become the CPU port for DSA and so we would enable

> Broadcom tags on that port. Did you somehow need that for the switch

> driver to work?


I blindly added that property. I verified now that it's not needed.

It seems bcm_sf2_imp_setup() handles setup properly.
diff mbox series

Patch

diff --git a/arch/arm64/boot/dts/broadcom/bcm4908/bcm4906-netgear-r8000p.dts b/arch/arm64/boot/dts/broadcom/bcm4908/bcm4906-netgear-r8000p.dts
index ee3ed612274c..bf0d534ace2e 100644
--- a/arch/arm64/boot/dts/broadcom/bcm4908/bcm4906-netgear-r8000p.dts
+++ b/arch/arm64/boot/dts/broadcom/bcm4908/bcm4906-netgear-r8000p.dts
@@ -26,6 +26,23 @@  wps {
 	};
 };
 
+&usb_phy {
+	brcm,ioc = <1>;
+	status = "okay";
+};
+
+&ehci {
+	status = "okay";
+};
+
+&ohci {
+	status = "okay";
+};
+
+&xhci {
+	status = "okay";
+};
+
 &nandcs {
 	nand-ecc-strength = <4>;
 	nand-ecc-step-size = <512>;
diff --git a/arch/arm64/boot/dts/broadcom/bcm4908/bcm4908-asus-gt-ac5300.dts b/arch/arm64/boot/dts/broadcom/bcm4908/bcm4908-asus-gt-ac5300.dts
index 6e4ad66ff536..bb06683d6acf 100644
--- a/arch/arm64/boot/dts/broadcom/bcm4908/bcm4908-asus-gt-ac5300.dts
+++ b/arch/arm64/boot/dts/broadcom/bcm4908/bcm4908-asus-gt-ac5300.dts
@@ -44,6 +44,23 @@  brightness {
 	};
 };
 
+&usb_phy {
+	brcm,ioc = <1>;
+	status = "okay";
+};
+
+&ehci {
+	status = "okay";
+};
+
+&ohci {
+	status = "okay";
+};
+
+&xhci {
+	status = "okay";
+};
+
 &ports {
 	port@0 {
 		label = "lan2";
diff --git a/arch/arm64/boot/dts/broadcom/bcm4908/bcm4908.dtsi b/arch/arm64/boot/dts/broadcom/bcm4908/bcm4908.dtsi
index 9354077f74cd..358958105337 100644
--- a/arch/arm64/boot/dts/broadcom/bcm4908/bcm4908.dtsi
+++ b/arch/arm64/boot/dts/broadcom/bcm4908/bcm4908.dtsi
@@ -2,6 +2,8 @@ 
 
 #include <dt-bindings/interrupt-controller/irq.h>
 #include <dt-bindings/interrupt-controller/arm-gic.h>
+#include <dt-bindings/phy/phy.h>
+#include <dt-bindings/soc/bcm-pmb.h>
 
 /dts-v1/;
 
@@ -110,24 +112,39 @@  soc {
 		#size-cells = <1>;
 		ranges = <0x00 0x00 0x80000000 0x281000>;
 
-		usb@c300 {
+		usb_phy: usb-phy@c200 {
+			compatible = "brcm,bcm4908-usb-phy";
+			reg = <0xc200 0x100>;
+			reg-names = "crtl";
+			power-domains = <&pmb BCM_PMB_HOST_USB>;
+			dr_mode = "host";
+			brcm,has-xhci;
+			brcm,has-eohci;
+			#phy-cells = <1>;
+			status = "disabled";
+		};
+
+		ehci: usb@c300 {
 			compatible = "generic-ehci";
 			reg = <0xc300 0x100>;
 			interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
+			phys = <&usb_phy PHY_TYPE_USB2>;
 			status = "disabled";
 		};
 
-		usb@c400 {
+		ohci: usb@c400 {
 			compatible = "generic-ohci";
 			reg = <0xc400 0x100>;
 			interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>;
+			phys = <&usb_phy PHY_TYPE_USB2>;
 			status = "disabled";
 		};
 
-		usb@d000 {
+		xhci: usb@d000 {
 			compatible = "generic-xhci";
 			reg = <0xd000 0x8c8>;
 			interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>;
+			phys = <&usb_phy PHY_TYPE_USB3>;
 			status = "disabled";
 		};
 
@@ -222,7 +239,7 @@  procmon: syscon@280000 {
 			#address-cells = <1>;
 			#size-cells = <1>;
 
-			power-controller@2800c0 {
+			pmb: power-controller@2800c0 {
 				compatible = "brcm,bcm4908-pmb";
 				reg = <0x2800c0 0x40>;
 				#power-domain-cells = <1>;