07a634bf6c
The VIM3 on-board MCU can mux the PCIe/USB3.0 shared differential lines using a FUSB340TMX USB 3.1 SuperSpeed Data Switch between an USB3.0 Type A connector and a M.2 Key M slot. The PHY driving these differential lines is shared between the USB3.0 controller and the PCIe Controller, thus only a single controller can use it. The needed DT configuration when the MCU is configured to mux the PCIe/USB3.0 differential lines to the M.2 Key M slot is added commented and may be uncommented to disable USB3.0 from the USB Complex and enable the PCIe controller. The End User is not expected to uncomment the following except for testing purposes, but instead rely on the firmware/bootloader to update these nodes accordingly if PCIe mode is selected by the MCU. Signed-off-by: Neil Armstrong <narmstrong@baylibre.com> Reviewed-by: Andrew Murray <andrew.murray@arm.com> Signed-off-by: Kevin Hilman <khilman@baylibre.com>
368 lines
7.1 KiB
Plaintext
368 lines
7.1 KiB
Plaintext
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
|
/*
|
|
* Copyright (c) 2019 BayLibre, SAS
|
|
* Author: Neil Armstrong <narmstrong@baylibre.com>
|
|
* Copyright (c) 2019 Christian Hewitt <christianshewitt@gmail.com>
|
|
*/
|
|
|
|
#include <dt-bindings/input/input.h>
|
|
#include <dt-bindings/gpio/meson-g12a-gpio.h>
|
|
|
|
/ {
|
|
model = "Khadas VIM3";
|
|
|
|
aliases {
|
|
serial0 = &uart_AO;
|
|
ethernet0 = ðmac;
|
|
};
|
|
|
|
chosen {
|
|
stdout-path = "serial0:115200n8";
|
|
};
|
|
|
|
memory@0 {
|
|
device_type = "memory";
|
|
reg = <0x0 0x0 0x0 0x80000000>;
|
|
};
|
|
|
|
adc-keys {
|
|
compatible = "adc-keys";
|
|
io-channels = <&saradc 2>;
|
|
io-channel-names = "buttons";
|
|
keyup-threshold-microvolt = <1710000>;
|
|
|
|
button-function {
|
|
label = "Function";
|
|
linux,code = <KEY_FN>;
|
|
press-threshold-microvolt = <10000>;
|
|
};
|
|
};
|
|
|
|
leds {
|
|
compatible = "gpio-leds";
|
|
|
|
white {
|
|
label = "vim3:white:sys";
|
|
gpios = <&gpio_ao GPIOAO_4 GPIO_ACTIVE_LOW>;
|
|
linux,default-trigger = "heartbeat";
|
|
};
|
|
|
|
red {
|
|
label = "vim3:red";
|
|
gpios = <&gpio_expander 5 GPIO_ACTIVE_LOW>;
|
|
};
|
|
};
|
|
|
|
emmc_pwrseq: emmc-pwrseq {
|
|
compatible = "mmc-pwrseq-emmc";
|
|
reset-gpios = <&gpio BOOT_12 GPIO_ACTIVE_LOW>;
|
|
};
|
|
|
|
gpio-keys-polled {
|
|
compatible = "gpio-keys-polled";
|
|
poll-interval = <100>;
|
|
|
|
power-button {
|
|
label = "power";
|
|
linux,code = <KEY_POWER>;
|
|
gpios = <&gpio_ao GPIOAO_7 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";
|
|
};
|
|
|
|
dc_in: regulator-dc_in {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "DC_IN";
|
|
regulator-min-microvolt = <5000000>;
|
|
regulator-max-microvolt = <5000000>;
|
|
regulator-always-on;
|
|
};
|
|
|
|
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-high;
|
|
};
|
|
|
|
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 = <&vsys_3v3>;
|
|
regulator-always-on;
|
|
/* FIXME: actually controlled by VDDCPU_B_EN */
|
|
};
|
|
|
|
vddao_1v8: regulator-vddao_1v8 {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "VDDIO_AO1V8";
|
|
regulator-min-microvolt = <1800000>;
|
|
regulator-max-microvolt = <1800000>;
|
|
vin-supply = <&vsys_3v3>;
|
|
regulator-always-on;
|
|
};
|
|
|
|
emmc_1v8: regulator-emmc_1v8 {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "EMMC_AO1V8";
|
|
regulator-min-microvolt = <1800000>;
|
|
regulator-max-microvolt = <1800000>;
|
|
vin-supply = <&vcc_3v3>;
|
|
regulator-always-on;
|
|
};
|
|
|
|
vsys_3v3: regulator-vsys_3v3 {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "VSYS_3V3";
|
|
regulator-min-microvolt = <3300000>;
|
|
regulator-max-microvolt = <3300000>;
|
|
vin-supply = <&dc_in>;
|
|
regulator-always-on;
|
|
};
|
|
|
|
usb_pwr: regulator-usb_pwr {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "USB_PWR";
|
|
regulator-min-microvolt = <5000000>;
|
|
regulator-max-microvolt = <5000000>;
|
|
vin-supply = <&vcc_5v>;
|
|
|
|
gpio = <&gpio GPIOA_6 GPIO_ACTIVE_HIGH>;
|
|
enable-active-high;
|
|
};
|
|
|
|
hdmi-connector {
|
|
compatible = "hdmi-connector";
|
|
type = "a";
|
|
|
|
port {
|
|
hdmi_connector_in: endpoint {
|
|
remote-endpoint = <&hdmi_tx_tmds_out>;
|
|
};
|
|
};
|
|
};
|
|
|
|
wifi32k: wifi32k {
|
|
compatible = "pwm-clock";
|
|
#clock-cells = <0>;
|
|
clock-frequency = <32768>;
|
|
pwms = <&pwm_ef 0 30518 0>; /* PWM_E at 32.768KHz */
|
|
};
|
|
};
|
|
|
|
&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>;
|
|
};
|
|
|
|
&ext_mdio {
|
|
external_phy: ethernet-phy@0 {
|
|
/* Realtek RTL8211F (0x001cc916) */
|
|
reg = <0>;
|
|
max-speed = <1000>;
|
|
|
|
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>;
|
|
};
|
|
|
|
&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>;
|
|
};
|
|
};
|
|
|
|
&i2c_AO {
|
|
status = "okay";
|
|
pinctrl-0 = <&i2c_ao_sck_pins>, <&i2c_ao_sda_pins>;
|
|
pinctrl-names = "default";
|
|
|
|
gpio_expander: gpio-controller@20 {
|
|
compatible = "ti,tca6408";
|
|
reg = <0x20>;
|
|
vcc-supply = <&vcc_3v3>;
|
|
gpio-controller;
|
|
#gpio-cells = <2>;
|
|
};
|
|
|
|
rtc@51 {
|
|
compatible = "haoyu,hym8563";
|
|
reg = <0x51>;
|
|
#clock-cells = <0>;
|
|
};
|
|
};
|
|
|
|
&ir {
|
|
status = "okay";
|
|
pinctrl-0 = <&remote_input_ao_pins>;
|
|
pinctrl-names = "default";
|
|
linux,rc-map-name = "rc-khadas";
|
|
};
|
|
|
|
&pcie {
|
|
reset-gpios = <&gpio GPIOA_8 GPIO_ACTIVE_LOW>;
|
|
};
|
|
|
|
&pwm_ef {
|
|
status = "okay";
|
|
pinctrl-0 = <&pwm_e_pins>;
|
|
pinctrl-names = "default";
|
|
};
|
|
|
|
&saradc {
|
|
status = "okay";
|
|
vref-supply = <&vddao_1v8>;
|
|
};
|
|
|
|
/* 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 = <&vsys_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 = <50000000>;
|
|
disable-wp;
|
|
|
|
cd-gpios = <&gpio GPIOC_6 GPIO_ACTIVE_LOW>;
|
|
vmmc-supply = <&vsys_3v3>;
|
|
vqmmc-supply = <&vsys_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;
|
|
mmc-ddr-1_8v;
|
|
mmc-hs200-1_8v;
|
|
max-frequency = <200000000>;
|
|
disable-wp;
|
|
|
|
mmc-pwrseq = <&emmc_pwrseq>;
|
|
vmmc-supply = <&vcc_3v3>;
|
|
vqmmc-supply = <&emmc_1v8>;
|
|
};
|
|
|
|
&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";
|
|
};
|
|
|
|
&usb2_phy0 {
|
|
phy-supply = <&dc_in>;
|
|
};
|
|
|
|
&usb2_phy1 {
|
|
phy-supply = <&usb_pwr>;
|
|
};
|
|
|
|
&usb3_pcie_phy {
|
|
phy-supply = <&usb_pwr>;
|
|
};
|
|
|
|
&usb {
|
|
status = "okay";
|
|
dr_mode = "peripheral";
|
|
};
|