mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-11-01 09:13:37 +00:00 
			
		
		
		
	According to the datasheet (Rev. 1.9) the RTL8211F requires at least
72ms "for internal circuits settling time" before accessing the PHY
registers. This fixes an issue seen on ODROID-C2 where the Ethernet
link doesn't come up when using ip link set down/up:
  [ 6630.714855] meson8b-dwmac c9410000.ethernet eth0: Link is Down
  [ 6630.785775] meson8b-dwmac c9410000.ethernet eth0: PHY [stmmac-0:00] driver [RTL8211F Gigabit Ethernet] (irq=36)
  [ 6630.893071] meson8b-dwmac c9410000.ethernet: Failed to reset the dma
  [ 6630.893800] meson8b-dwmac c9410000.ethernet eth0: stmmac_hw_setup: DMA engine initialization failed
  [ 6630.902835] meson8b-dwmac c9410000.ethernet eth0: stmmac_open: Hw setup failed
Fixes: f29cabf240 ("arm64: dts: meson: use the generic Ethernet PHY reset GPIO bindings")
Reviewed-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Signed-off-by: Stefan Agner <stefan@agner.ch>
Signed-off-by: Kevin Hilman <khilman@baylibre.com>
Link: https://lore.kernel.org/r/4a322c198b86e4c8b3dda015560a683babea4d63.1607363522.git.stefan@agner.ch
		
	
			
		
			
				
	
	
		
			276 lines
		
	
	
	
		
			5.1 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			276 lines
		
	
	
	
		
			5.1 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
 | 
						|
/*
 | 
						|
 * Copyright (c) 2016 Andreas Färber
 | 
						|
 */
 | 
						|
 | 
						|
#include "meson-gxbb.dtsi"
 | 
						|
 | 
						|
/ {
 | 
						|
	compatible = "tronsmart,vega-s95", "amlogic,meson-gxbb";
 | 
						|
 | 
						|
	aliases {
 | 
						|
		serial0 = &uart_AO;
 | 
						|
		ethernet0 = ðmac;
 | 
						|
	};
 | 
						|
 | 
						|
	chosen {
 | 
						|
		stdout-path = "serial0:115200n8";
 | 
						|
	};
 | 
						|
 | 
						|
	leds {
 | 
						|
		compatible = "gpio-leds";
 | 
						|
 | 
						|
		led-blue {
 | 
						|
			label = "vega-s95:blue:on";
 | 
						|
			gpios = <&gpio_ao GPIOAO_13 GPIO_ACTIVE_HIGH>;
 | 
						|
			default-state = "on";
 | 
						|
			panic-indicator;
 | 
						|
		};
 | 
						|
	};
 | 
						|
 | 
						|
	usb_pwr: regulator-usb-pwrs {
 | 
						|
		compatible = "regulator-fixed";
 | 
						|
 | 
						|
		regulator-name = "USB_PWR";
 | 
						|
 | 
						|
		regulator-min-microvolt = <5000000>;
 | 
						|
		regulator-max-microvolt = <5000000>;
 | 
						|
 | 
						|
		gpio = <&gpio GPIODV_24 GPIO_ACTIVE_HIGH>;
 | 
						|
		enable-active-high;
 | 
						|
	};
 | 
						|
 | 
						|
	vddio_boot: regulator-vddio_boot {
 | 
						|
		compatible = "regulator-fixed";
 | 
						|
		regulator-name = "VDDIO_BOOT";
 | 
						|
		regulator-min-microvolt = <1800000>;
 | 
						|
		regulator-max-microvolt = <1800000>;
 | 
						|
	};
 | 
						|
 | 
						|
	vddao_3v3: regulator-vddao_3v3 {
 | 
						|
		compatible = "regulator-fixed";
 | 
						|
		regulator-name = "VDDAO_3V3";
 | 
						|
		regulator-min-microvolt = <3300000>;
 | 
						|
		regulator-max-microvolt = <3300000>;
 | 
						|
	};
 | 
						|
 | 
						|
	vddio_ao18: regulator-vddio_ao18 {
 | 
						|
		compatible = "regulator-fixed";
 | 
						|
		regulator-name = "VDDIO_AO18";
 | 
						|
		regulator-min-microvolt = <1800000>;
 | 
						|
		regulator-max-microvolt = <1800000>;
 | 
						|
	};
 | 
						|
 | 
						|
	vcc_3v3: regulator-vcc_3v3 {
 | 
						|
		compatible = "regulator-fixed";
 | 
						|
		regulator-name = "VCC_3V3";
 | 
						|
		regulator-min-microvolt = <3300000>;
 | 
						|
		regulator-max-microvolt = <3300000>;
 | 
						|
	};
 | 
						|
 | 
						|
	emmc_pwrseq: emmc-pwrseq {
 | 
						|
		compatible = "mmc-pwrseq-emmc";
 | 
						|
		reset-gpios = <&gpio BOOT_9 GPIO_ACTIVE_LOW>;
 | 
						|
	};
 | 
						|
 | 
						|
	wifi32k: wifi32k {
 | 
						|
		compatible = "pwm-clock";
 | 
						|
		#clock-cells = <0>;
 | 
						|
		clock-frequency = <32768>;
 | 
						|
		pwms = <&pwm_ef 0 30518 0>; /* PWM_E at 32.768KHz */
 | 
						|
	};
 | 
						|
 | 
						|
	hdmi-connector {
 | 
						|
		compatible = "hdmi-connector";
 | 
						|
		type = "a";
 | 
						|
 | 
						|
		port {
 | 
						|
			hdmi_connector_in: endpoint {
 | 
						|
				remote-endpoint = <&hdmi_tx_tmds_out>;
 | 
						|
			};
 | 
						|
		};
 | 
						|
	};
 | 
						|
 | 
						|
	sdio_pwrseq: sdio-pwrseq {
 | 
						|
		compatible = "mmc-pwrseq-simple";
 | 
						|
		reset-gpios = <&gpio GPIOX_6 GPIO_ACTIVE_LOW>;
 | 
						|
		clocks = <&wifi32k>;
 | 
						|
		clock-names = "ext_clock";
 | 
						|
	};
 | 
						|
};
 | 
						|
 | 
						|
&cec_AO {
 | 
						|
	status = "okay";
 | 
						|
	pinctrl-0 = <&ao_cec_pins>;
 | 
						|
	pinctrl-names = "default";
 | 
						|
	hdmi-phandle = <&hdmi_tx>;
 | 
						|
};
 | 
						|
 | 
						|
ðmac {
 | 
						|
	status = "okay";
 | 
						|
	pinctrl-0 = <ð_rgmii_pins>;
 | 
						|
	pinctrl-names = "default";
 | 
						|
 | 
						|
	phy-handle = <ð_phy0>;
 | 
						|
	phy-mode = "rgmii";
 | 
						|
 | 
						|
	amlogic,tx-delay-ns = <2>;
 | 
						|
 | 
						|
	mdio {
 | 
						|
		compatible = "snps,dwmac-mdio";
 | 
						|
		#address-cells = <1>;
 | 
						|
		#size-cells = <0>;
 | 
						|
 | 
						|
		eth_phy0: ethernet-phy@0 {
 | 
						|
			/* Realtek RTL8211F (0x001cc916) */
 | 
						|
			reg = <0>;
 | 
						|
 | 
						|
			reset-assert-us = <10000>;
 | 
						|
			reset-deassert-us = <80000>;
 | 
						|
			reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>;
 | 
						|
 | 
						|
			interrupt-parent = <&gpio_intc>;
 | 
						|
			/* MAC_INTR on GPIOZ_15 */
 | 
						|
			interrupts = <29 IRQ_TYPE_LEVEL_LOW>;
 | 
						|
		};
 | 
						|
	};
 | 
						|
};
 | 
						|
 | 
						|
&hdmi_tx {
 | 
						|
	status = "okay";
 | 
						|
	pinctrl-0 = <&hdmi_hpd_pins>, <&hdmi_i2c_pins>;
 | 
						|
	pinctrl-names = "default";
 | 
						|
};
 | 
						|
 | 
						|
&hdmi_tx_tmds_port {
 | 
						|
	hdmi_tx_tmds_out: endpoint {
 | 
						|
		remote-endpoint = <&hdmi_connector_in>;
 | 
						|
	};
 | 
						|
};
 | 
						|
 | 
						|
&ir {
 | 
						|
	status = "okay";
 | 
						|
	pinctrl-0 = <&remote_input_ao_pins>;
 | 
						|
	pinctrl-names = "default";
 | 
						|
	linux,rc-map-name = "rc-vega-s9x";
 | 
						|
};
 | 
						|
 | 
						|
&pwm_ef {
 | 
						|
	status = "okay";
 | 
						|
	pinctrl-0 = <&pwm_e_pins>;
 | 
						|
	pinctrl-names = "default";
 | 
						|
	clocks = <&clkc CLKID_FCLK_DIV4>;
 | 
						|
	clock-names = "clkin0";
 | 
						|
};
 | 
						|
 | 
						|
&saradc {
 | 
						|
	status = "okay";
 | 
						|
	vref-supply = <&vddio_ao18>;
 | 
						|
};
 | 
						|
 | 
						|
/* Wireless SDIO Module */
 | 
						|
&sd_emmc_a {
 | 
						|
	status = "okay";
 | 
						|
	pinctrl-0 = <&sdio_pins>;
 | 
						|
	pinctrl-1 = <&sdio_clk_gate_pins>;
 | 
						|
	pinctrl-names = "default", "clk-gate";
 | 
						|
	#address-cells = <1>;
 | 
						|
	#size-cells = <0>;
 | 
						|
 | 
						|
	bus-width = <4>;
 | 
						|
	cap-sd-highspeed;
 | 
						|
	max-frequency = <50000000>;
 | 
						|
 | 
						|
	non-removable;
 | 
						|
	disable-wp;
 | 
						|
 | 
						|
	/* WiFi firmware requires power to be kept while in suspend */
 | 
						|
	keep-power-in-suspend;
 | 
						|
 | 
						|
	mmc-pwrseq = <&sdio_pwrseq>;
 | 
						|
 | 
						|
	vmmc-supply = <&vddao_3v3>;
 | 
						|
	vqmmc-supply = <&vddio_boot>;
 | 
						|
 | 
						|
	brcmf: wifi@1 {
 | 
						|
		reg = <1>;
 | 
						|
		compatible = "brcm,bcm4329-fmac";
 | 
						|
	};
 | 
						|
};
 | 
						|
 | 
						|
/* SD card */
 | 
						|
&sd_emmc_b {
 | 
						|
	status = "okay";
 | 
						|
	pinctrl-0 = <&sdcard_pins>;
 | 
						|
	pinctrl-1 = <&sdcard_clk_gate_pins>;
 | 
						|
	pinctrl-names = "default", "clk-gate";
 | 
						|
 | 
						|
	bus-width = <4>;
 | 
						|
	cap-sd-highspeed;
 | 
						|
	max-frequency = <50000000>;
 | 
						|
	disable-wp;
 | 
						|
 | 
						|
	cd-gpios = <&gpio CARD_6 GPIO_ACTIVE_LOW>;
 | 
						|
 | 
						|
	vmmc-supply = <&vddao_3v3>;
 | 
						|
	vqmmc-supply = <&vcc_3v3>;
 | 
						|
};
 | 
						|
 | 
						|
/* eMMC */
 | 
						|
&sd_emmc_c {
 | 
						|
	status = "okay";
 | 
						|
	pinctrl-0 = <&emmc_pins>, <&emmc_ds_pins>;
 | 
						|
	pinctrl-1 = <&emmc_clk_gate_pins>;
 | 
						|
	pinctrl-names = "default", "clk-gate";
 | 
						|
 | 
						|
	bus-width = <8>;
 | 
						|
	cap-mmc-highspeed;
 | 
						|
	max-frequency = <200000000>;
 | 
						|
	non-removable;
 | 
						|
	disable-wp;
 | 
						|
	mmc-ddr-1_8v;
 | 
						|
	mmc-hs200-1_8v;
 | 
						|
 | 
						|
	mmc-pwrseq = <&emmc_pwrseq>;
 | 
						|
	vmmc-supply = <&vcc_3v3>;
 | 
						|
	vqmmc-supply = <&vddio_boot>;
 | 
						|
};
 | 
						|
 | 
						|
/* This is connected to the Bluetooth module: */
 | 
						|
&uart_A {
 | 
						|
	status = "okay";
 | 
						|
	pinctrl-0 = <&uart_a_pins>, <&uart_a_cts_rts_pins>;
 | 
						|
	pinctrl-names = "default";
 | 
						|
 | 
						|
	bluetooth {
 | 
						|
		compatible = "brcm,bcm43438-bt";
 | 
						|
		shutdown-gpios = <&gpio GPIOX_20 GPIO_ACTIVE_HIGH>;
 | 
						|
		max-speed = <2000000>;
 | 
						|
		clocks = <&wifi32k>;
 | 
						|
		clock-names = "lpo";
 | 
						|
	};
 | 
						|
};
 | 
						|
 | 
						|
/* This UART is brought out to the DB9 connector */
 | 
						|
&uart_AO {
 | 
						|
	status = "okay";
 | 
						|
	pinctrl-0 = <&uart_ao_a_pins>;
 | 
						|
	pinctrl-names = "default";
 | 
						|
};
 | 
						|
 | 
						|
&usb0_phy {
 | 
						|
	status = "okay";
 | 
						|
	phy-supply = <&usb_pwr>;
 | 
						|
};
 | 
						|
 | 
						|
&usb1_phy {
 | 
						|
	status = "okay";
 | 
						|
};
 | 
						|
 | 
						|
&usb0 {
 | 
						|
	status = "okay";
 | 
						|
};
 | 
						|
 | 
						|
&usb1 {
 | 
						|
	status = "okay";
 | 
						|
};
 |