According to the datasheet (Rev. 1.9) the RTL8211F requires at least
72ms "for internal circuits settling time" before accessing the PHY
registers. On similar boards with the same PHY this fixes an issue where
Ethernet link would not come up when using ip link set down/up.
Fixes: ed5e8f6891
("arm64: dts: meson: g12a: x96-max: fix the Ethernet PHY reset line")
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/12506964ca5d5f936579a280ad0a7e7f9a0a2d4c.1607363522.git.stefan@agner.ch
481 lines
9.1 KiB
Text
481 lines
9.1 KiB
Text
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
|
/*
|
|
* Copyright (c) 2018 BayLibre SAS. All rights reserved.
|
|
*/
|
|
|
|
/dts-v1/;
|
|
|
|
#include "meson-g12a.dtsi"
|
|
#include <dt-bindings/gpio/gpio.h>
|
|
#include <dt-bindings/gpio/meson-g12a-gpio.h>
|
|
#include <dt-bindings/sound/meson-g12a-tohdmitx.h>
|
|
|
|
/ {
|
|
compatible = "amediatech,x96-max", "amlogic,g12a";
|
|
model = "Shenzhen Amediatech Technology Co., Ltd X96 Max";
|
|
|
|
aliases {
|
|
serial0 = &uart_AO;
|
|
ethernet0 = ðmac;
|
|
};
|
|
|
|
spdif_dit: audio-codec-1 {
|
|
#sound-dai-cells = <0>;
|
|
compatible = "linux,spdif-dit";
|
|
status = "okay";
|
|
sound-name-prefix = "DIT";
|
|
};
|
|
|
|
chosen {
|
|
stdout-path = "serial0:115200n8";
|
|
};
|
|
memory@0 {
|
|
device_type = "memory";
|
|
reg = <0x0 0x0 0x0 0x40000000>;
|
|
};
|
|
|
|
cvbs-connector {
|
|
compatible = "composite-video-connector";
|
|
|
|
port {
|
|
cvbs_connector_in: endpoint {
|
|
remote-endpoint = <&cvbs_vdac_out>;
|
|
};
|
|
};
|
|
};
|
|
|
|
hdmi-connector {
|
|
compatible = "hdmi-connector";
|
|
type = "a";
|
|
|
|
port {
|
|
hdmi_connector_in: endpoint {
|
|
remote-endpoint = <&hdmi_tx_tmds_out>;
|
|
};
|
|
};
|
|
};
|
|
|
|
emmc_pwrseq: emmc-pwrseq {
|
|
compatible = "mmc-pwrseq-emmc";
|
|
reset-gpios = <&gpio BOOT_12 GPIO_ACTIVE_LOW>;
|
|
};
|
|
|
|
sdio_pwrseq: sdio-pwrseq {
|
|
compatible = "mmc-pwrseq-simple";
|
|
reset-gpios = <&gpio GPIOX_6 GPIO_ACTIVE_LOW>;
|
|
clocks = <&wifi32k>;
|
|
clock-names = "ext_clock";
|
|
};
|
|
|
|
flash_1v8: regulator-flash_1v8 {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "FLASH_1V8";
|
|
regulator-min-microvolt = <1800000>;
|
|
regulator-max-microvolt = <1800000>;
|
|
vin-supply = <&vcc_3v3>;
|
|
regulator-always-on;
|
|
};
|
|
|
|
dc_in: regulator-dc_in {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "DC_IN";
|
|
regulator-min-microvolt = <5000000>;
|
|
regulator-max-microvolt = <5000000>;
|
|
regulator-always-on;
|
|
};
|
|
|
|
vcc_1v8: regulator-vcc_1v8 {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "VCC_1V8";
|
|
regulator-min-microvolt = <1800000>;
|
|
regulator-max-microvolt = <1800000>;
|
|
vin-supply = <&vcc_3v3>;
|
|
regulator-always-on;
|
|
};
|
|
|
|
vcc_3v3: regulator-vcc_3v3 {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "VCC_3V3";
|
|
regulator-min-microvolt = <3300000>;
|
|
regulator-max-microvolt = <3300000>;
|
|
vin-supply = <&vddao_3v3>;
|
|
regulator-always-on;
|
|
/* FIXME: actually controlled by VDDCPU_B_EN */
|
|
};
|
|
|
|
vcc_5v: regulator-vcc_5v {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "VCC_5V";
|
|
regulator-min-microvolt = <5000000>;
|
|
regulator-max-microvolt = <5000000>;
|
|
vin-supply = <&dc_in>;
|
|
|
|
gpio = <&gpio GPIOH_8 GPIO_OPEN_DRAIN>;
|
|
enable-active-low;
|
|
};
|
|
|
|
vddao_1v8: regulator-vddao_1v8 {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "VDDAO_1V8";
|
|
regulator-min-microvolt = <1800000>;
|
|
regulator-max-microvolt = <1800000>;
|
|
vin-supply = <&vddao_3v3>;
|
|
regulator-always-on;
|
|
};
|
|
|
|
vddao_3v3: regulator-vddao_3v3 {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "VDDAO_3V3";
|
|
regulator-min-microvolt = <3300000>;
|
|
regulator-max-microvolt = <3300000>;
|
|
vin-supply = <&dc_in>;
|
|
regulator-always-on;
|
|
};
|
|
|
|
vddcpu: regulator-vddcpu {
|
|
compatible = "pwm-regulator";
|
|
|
|
regulator-name = "VDDCPU";
|
|
regulator-min-microvolt = <721000>;
|
|
regulator-max-microvolt = <1022000>;
|
|
|
|
vin-supply = <&dc_in>;
|
|
|
|
pwms = <&pwm_AO_cd 1 1250 0>;
|
|
pwm-dutycycle-range = <100 0>;
|
|
|
|
regulator-boot-on;
|
|
regulator-always-on;
|
|
};
|
|
|
|
sound {
|
|
compatible = "amlogic,axg-sound-card";
|
|
model = "G12A-X96-MAX";
|
|
audio-aux-devs = <&tdmout_b>;
|
|
audio-routing = "TDMOUT_B IN 0", "FRDDR_A OUT 1",
|
|
"TDMOUT_B IN 1", "FRDDR_B OUT 1",
|
|
"TDMOUT_B IN 2", "FRDDR_C OUT 1",
|
|
"TDM_B Playback", "TDMOUT_B OUT",
|
|
"SPDIFOUT IN 0", "FRDDR_A OUT 3",
|
|
"SPDIFOUT IN 1", "FRDDR_B OUT 3",
|
|
"SPDIFOUT IN 2", "FRDDR_C OUT 3";
|
|
|
|
assigned-clocks = <&clkc CLKID_MPLL2>,
|
|
<&clkc CLKID_MPLL0>,
|
|
<&clkc CLKID_MPLL1>;
|
|
assigned-clock-parents = <0>, <0>, <0>;
|
|
assigned-clock-rates = <294912000>,
|
|
<270950400>,
|
|
<393216000>;
|
|
status = "okay";
|
|
|
|
dai-link-0 {
|
|
sound-dai = <&frddr_a>;
|
|
};
|
|
|
|
dai-link-1 {
|
|
sound-dai = <&frddr_b>;
|
|
};
|
|
|
|
dai-link-2 {
|
|
sound-dai = <&frddr_c>;
|
|
};
|
|
|
|
/* 8ch hdmi interface */
|
|
dai-link-3 {
|
|
sound-dai = <&tdmif_b>;
|
|
dai-format = "i2s";
|
|
dai-tdm-slot-tx-mask-0 = <1 1>;
|
|
dai-tdm-slot-tx-mask-1 = <1 1>;
|
|
dai-tdm-slot-tx-mask-2 = <1 1>;
|
|
dai-tdm-slot-tx-mask-3 = <1 1>;
|
|
mclk-fs = <256>;
|
|
|
|
codec {
|
|
sound-dai = <&tohdmitx TOHDMITX_I2S_IN_B>;
|
|
};
|
|
};
|
|
|
|
/* spdif hdmi or toslink interface */
|
|
dai-link-4 {
|
|
sound-dai = <&spdifout>;
|
|
|
|
codec-0 {
|
|
sound-dai = <&spdif_dit>;
|
|
};
|
|
|
|
codec-1 {
|
|
sound-dai = <&tohdmitx TOHDMITX_SPDIF_IN_A>;
|
|
};
|
|
};
|
|
|
|
/* spdif hdmi interface */
|
|
dai-link-5 {
|
|
sound-dai = <&spdifout_b>;
|
|
|
|
codec {
|
|
sound-dai = <&tohdmitx TOHDMITX_SPDIF_IN_B>;
|
|
};
|
|
};
|
|
|
|
/* hdmi glue */
|
|
dai-link-6 {
|
|
sound-dai = <&tohdmitx TOHDMITX_I2S_OUT>;
|
|
|
|
codec {
|
|
sound-dai = <&hdmi_tx>;
|
|
};
|
|
};
|
|
};
|
|
|
|
wifi32k: wifi32k {
|
|
compatible = "pwm-clock";
|
|
#clock-cells = <0>;
|
|
clock-frequency = <32768>;
|
|
pwms = <&pwm_ef 0 30518 0>; /* PWM_E at 32.768KHz */
|
|
};
|
|
};
|
|
|
|
&arb {
|
|
status = "okay";
|
|
};
|
|
|
|
&cec_AO {
|
|
pinctrl-0 = <&cec_ao_a_h_pins>;
|
|
pinctrl-names = "default";
|
|
status = "disabled";
|
|
hdmi-phandle = <&hdmi_tx>;
|
|
};
|
|
|
|
&cecb_AO {
|
|
pinctrl-0 = <&cec_ao_b_h_pins>;
|
|
pinctrl-names = "default";
|
|
status = "okay";
|
|
hdmi-phandle = <&hdmi_tx>;
|
|
};
|
|
|
|
&clkc_audio {
|
|
status = "okay";
|
|
};
|
|
|
|
&cpu0 {
|
|
cpu-supply = <&vddcpu>;
|
|
operating-points-v2 = <&cpu_opp_table>;
|
|
clocks = <&clkc CLKID_CPU_CLK>;
|
|
clock-latency = <50000>;
|
|
};
|
|
|
|
&cpu1 {
|
|
cpu-supply = <&vddcpu>;
|
|
operating-points-v2 = <&cpu_opp_table>;
|
|
clocks = <&clkc CLKID_CPU_CLK>;
|
|
clock-latency = <50000>;
|
|
};
|
|
|
|
&cpu2 {
|
|
cpu-supply = <&vddcpu>;
|
|
operating-points-v2 = <&cpu_opp_table>;
|
|
clocks = <&clkc CLKID_CPU_CLK>;
|
|
clock-latency = <50000>;
|
|
};
|
|
|
|
&cpu3 {
|
|
cpu-supply = <&vddcpu>;
|
|
operating-points-v2 = <&cpu_opp_table>;
|
|
clocks = <&clkc CLKID_CPU_CLK>;
|
|
clock-latency = <50000>;
|
|
};
|
|
|
|
&cvbs_vdac_port {
|
|
cvbs_vdac_out: endpoint {
|
|
remote-endpoint = <&cvbs_connector_in>;
|
|
};
|
|
};
|
|
|
|
&frddr_a {
|
|
status = "okay";
|
|
};
|
|
|
|
&frddr_b {
|
|
status = "okay";
|
|
};
|
|
|
|
&frddr_c {
|
|
status = "okay";
|
|
};
|
|
|
|
&hdmi_tx {
|
|
status = "okay";
|
|
pinctrl-0 = <&hdmitx_hpd_pins>, <&hdmitx_ddc_pins>;
|
|
pinctrl-names = "default";
|
|
hdmi-supply = <&vcc_5v>;
|
|
};
|
|
|
|
&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-x96max";
|
|
};
|
|
|
|
&pwm_AO_cd {
|
|
pinctrl-0 = <&pwm_ao_d_e_pins>;
|
|
pinctrl-names = "default";
|
|
clocks = <&xtal>;
|
|
clock-names = "clkin1";
|
|
status = "okay";
|
|
};
|
|
|
|
&ext_mdio {
|
|
external_phy: ethernet-phy@0 {
|
|
/* Realtek RTL8211F (0x001cc916) */
|
|
reg = <0>;
|
|
max-speed = <1000>;
|
|
eee-broken-1000t;
|
|
|
|
reset-assert-us = <10000>;
|
|
reset-deassert-us = <80000>;
|
|
reset-gpios = <&gpio GPIOZ_15 (GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN)>;
|
|
|
|
interrupt-parent = <&gpio_intc>;
|
|
/* MAC_INTR on GPIOZ_14 */
|
|
interrupts = <26 IRQ_TYPE_LEVEL_LOW>;
|
|
};
|
|
};
|
|
|
|
ðmac {
|
|
pinctrl-0 = <ð_pins>, <ð_rgmii_pins>;
|
|
pinctrl-names = "default";
|
|
status = "okay";
|
|
phy-mode = "rgmii";
|
|
phy-handle = <&external_phy>;
|
|
amlogic,tx-delay-ns = <2>;
|
|
};
|
|
|
|
&pwm_ef {
|
|
status = "okay";
|
|
pinctrl-0 = <&pwm_e_pins>;
|
|
pinctrl-names = "default";
|
|
clocks = <&xtal>;
|
|
clock-names = "clkin0";
|
|
};
|
|
|
|
&uart_A {
|
|
status = "okay";
|
|
pinctrl-0 = <&uart_a_pins>, <&uart_a_cts_rts_pins>;
|
|
pinctrl-names = "default";
|
|
uart-has-rtscts;
|
|
|
|
bluetooth {
|
|
compatible = "brcm,bcm43438-bt";
|
|
shutdown-gpios = <&gpio GPIOX_17 GPIO_ACTIVE_HIGH>;
|
|
max-speed = <2000000>;
|
|
clocks = <&wifi32k>;
|
|
clock-names = "lpo";
|
|
};
|
|
};
|
|
|
|
&uart_AO {
|
|
status = "okay";
|
|
pinctrl-0 = <&uart_ao_a_pins>;
|
|
pinctrl-names = "default";
|
|
};
|
|
|
|
&usb {
|
|
status = "okay";
|
|
dr_mode = "host";
|
|
};
|
|
|
|
/* SDIO */
|
|
&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;
|
|
sd-uhs-sdr50;
|
|
max-frequency = <100000000>;
|
|
|
|
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 = <&vddao_1v8>;
|
|
|
|
brcmf: wifi@1 {
|
|
reg = <1>;
|
|
compatible = "brcm,bcm4329-fmac";
|
|
};
|
|
};
|
|
|
|
/* SD card */
|
|
&sd_emmc_b {
|
|
status = "okay";
|
|
pinctrl-0 = <&sdcard_c_pins>;
|
|
pinctrl-1 = <&sdcard_clk_gate_c_pins>;
|
|
pinctrl-names = "default", "clk-gate";
|
|
|
|
bus-width = <4>;
|
|
cap-sd-highspeed;
|
|
max-frequency = <100000000>;
|
|
disable-wp;
|
|
|
|
cd-gpios = <&gpio GPIOC_6 GPIO_ACTIVE_LOW>;
|
|
vmmc-supply = <&vddao_3v3>;
|
|
vqmmc-supply = <&vddao_3v3>;
|
|
};
|
|
|
|
/* eMMC */
|
|
&sd_emmc_c {
|
|
status = "okay";
|
|
pinctrl-0 = <&emmc_ctrl_pins>, <&emmc_data_8b_pins>, <&emmc_ds_pins>;
|
|
pinctrl-1 = <&emmc_clk_gate_pins>;
|
|
pinctrl-names = "default", "clk-gate";
|
|
|
|
bus-width = <8>;
|
|
cap-mmc-highspeed;
|
|
max-frequency = <100000000>;
|
|
non-removable;
|
|
disable-wp;
|
|
|
|
mmc-pwrseq = <&emmc_pwrseq>;
|
|
vmmc-supply = <&vcc_3v3>;
|
|
vqmmc-supply = <&flash_1v8>;
|
|
};
|
|
|
|
&spdifout {
|
|
pinctrl-0 = <&spdif_out_h_pins>;
|
|
pinctrl-names = "default";
|
|
status = "okay";
|
|
};
|
|
|
|
&spdifout_b {
|
|
status = "okay";
|
|
};
|
|
|
|
&tdmif_b {
|
|
status = "okay";
|
|
};
|
|
|
|
&tdmout_b {
|
|
status = "okay";
|
|
};
|
|
|
|
&tohdmitx {
|
|
status = "okay";
|
|
};
|