commit 741f5ba7ccba5d7ae796dd11c320e28045524771 upstream. The Qseven BIOS_DISABLE signal on the RK3399-Q7 keeps the on-module eMMC and SPI flash powered-down initially (in fact it keeps the reset signal asserted). BIOS_DISABLE_OVERRIDE pin allows to override that signal so that eMMC and SPI can be used regardless of the state of the signal. Let's make this GPIO a hog so that it's reserved and locked in the proper state. At the same time, make sure the pin is reserved for the hog and cannot be requested by another node. Cc: stable@vger.kernel.org Signed-off-by: Quentin Schulz <quentin.schulz@cherry.de> Link: https://lore.kernel.org/r/20240731-puma-emmc-6-v1-2-4e28eadf32d0@cherry.de Signed-off-by: Heiko Stuebner <heiko@sntech.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
572 lines
12 KiB
Plaintext
572 lines
12 KiB
Plaintext
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
|
/*
|
|
* Copyright (c) 2017 Theobroma Systems Design und Consulting GmbH
|
|
*/
|
|
|
|
#include <dt-bindings/pwm/pwm.h>
|
|
#include "rk3399.dtsi"
|
|
#include "rk3399-opp.dtsi"
|
|
|
|
/ {
|
|
leds {
|
|
compatible = "gpio-leds";
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&led_pin_module>;
|
|
|
|
module-led {
|
|
label = "module_led";
|
|
gpios = <&gpio2 RK_PD1 GPIO_ACTIVE_HIGH>;
|
|
linux,default-trigger = "heartbeat";
|
|
panic-indicator;
|
|
};
|
|
};
|
|
|
|
/*
|
|
* Overwrite the opp-table for CPUB as this board uses a different
|
|
* regulator (FAN53555) that only allows 10mV steps and therefore
|
|
* can't reach the operation point target voltages from rk3399-opp.dtsi
|
|
*/
|
|
/delete-node/ opp-table1;
|
|
cluster1_opp: opp-table1 {
|
|
compatible = "operating-points-v2";
|
|
opp-shared;
|
|
|
|
opp00 {
|
|
opp-hz = /bits/ 64 <408000000>;
|
|
opp-microvolt = <800000>;
|
|
clock-latency-ns = <40000>;
|
|
};
|
|
opp01 {
|
|
opp-hz = /bits/ 64 <600000000>;
|
|
opp-microvolt = <800000>;
|
|
};
|
|
opp02 {
|
|
opp-hz = /bits/ 64 <816000000>;
|
|
opp-microvolt = <830000>;
|
|
opp-suspend;
|
|
};
|
|
opp03 {
|
|
opp-hz = /bits/ 64 <1008000000>;
|
|
opp-microvolt = <880000>;
|
|
};
|
|
opp04 {
|
|
opp-hz = /bits/ 64 <1200000000>;
|
|
opp-microvolt = <950000>;
|
|
};
|
|
opp05 {
|
|
opp-hz = /bits/ 64 <1416000000>;
|
|
opp-microvolt = <1030000>;
|
|
};
|
|
opp06 {
|
|
opp-hz = /bits/ 64 <1608000000>;
|
|
opp-microvolt = <1100000>;
|
|
};
|
|
opp07 {
|
|
opp-hz = /bits/ 64 <1800000000>;
|
|
opp-microvolt = <1200000>;
|
|
};
|
|
opp08 {
|
|
opp-hz = /bits/ 64 <1992000000>;
|
|
opp-microvolt = <1230000>;
|
|
turbo-mode;
|
|
};
|
|
};
|
|
|
|
clkin_gmac: external-gmac-clock {
|
|
compatible = "fixed-clock";
|
|
clock-frequency = <125000000>;
|
|
clock-output-names = "clkin_gmac";
|
|
#clock-cells = <0>;
|
|
};
|
|
|
|
vcc1v2_phy: vcc1v2-phy {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "vcc1v2_phy";
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
regulator-min-microvolt = <1200000>;
|
|
regulator-max-microvolt = <1200000>;
|
|
vin-supply = <&vcc5v0_sys>;
|
|
};
|
|
|
|
vcc3v3_sys: vcc3v3-sys {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "vcc3v3_sys";
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
regulator-min-microvolt = <3300000>;
|
|
regulator-max-microvolt = <3300000>;
|
|
vin-supply = <&vcc5v0_sys>;
|
|
};
|
|
|
|
vcc5v0_host: vcc5v0-host-regulator {
|
|
compatible = "regulator-fixed";
|
|
gpio = <&gpio4 RK_PA3 GPIO_ACTIVE_LOW>;
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&vcc5v0_host_en>;
|
|
regulator-name = "vcc5v0_host";
|
|
regulator-always-on;
|
|
vin-supply = <&vcc5v0_sys>;
|
|
};
|
|
|
|
vcc5v0_sys: vcc5v0-sys {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "vcc5v0_sys";
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
regulator-min-microvolt = <5000000>;
|
|
regulator-max-microvolt = <5000000>;
|
|
};
|
|
};
|
|
|
|
&cpu_b0 {
|
|
cpu-supply = <&vdd_cpu_b>;
|
|
};
|
|
|
|
&cpu_b1 {
|
|
cpu-supply = <&vdd_cpu_b>;
|
|
};
|
|
|
|
&cpu_l0 {
|
|
cpu-supply = <&vdd_cpu_l>;
|
|
};
|
|
|
|
&cpu_l1 {
|
|
cpu-supply = <&vdd_cpu_l>;
|
|
};
|
|
|
|
&cpu_l2 {
|
|
cpu-supply = <&vdd_cpu_l>;
|
|
};
|
|
|
|
&cpu_l3 {
|
|
cpu-supply = <&vdd_cpu_l>;
|
|
};
|
|
|
|
&emmc_phy {
|
|
status = "okay";
|
|
};
|
|
|
|
&gpio3 {
|
|
/*
|
|
* The Qseven BIOS_DISABLE signal on the RK3399-Q7 keeps the on-module
|
|
* eMMC and SPI flash powered-down initially (in fact it keeps the
|
|
* reset signal asserted). BIOS_DISABLE_OVERRIDE pin allows to override
|
|
* that signal so that eMMC and SPI can be used regardless of the state
|
|
* of the signal.
|
|
*/
|
|
bios-disable-override-hog {
|
|
gpios = <RK_PD5 GPIO_ACTIVE_LOW>;
|
|
gpio-hog;
|
|
line-name = "bios_disable_override";
|
|
output-high;
|
|
};
|
|
};
|
|
|
|
&gmac {
|
|
assigned-clocks = <&cru SCLK_RMII_SRC>;
|
|
assigned-clock-parents = <&clkin_gmac>;
|
|
clock_in_out = "input";
|
|
phy-supply = <&vcc1v2_phy>;
|
|
phy-mode = "rgmii";
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&rgmii_pins>;
|
|
snps,reset-gpio = <&gpio3 RK_PC0 GPIO_ACTIVE_LOW>;
|
|
snps,reset-active-low;
|
|
snps,reset-delays-us = <0 10000 50000>;
|
|
tx_delay = <0x10>;
|
|
rx_delay = <0x10>;
|
|
status = "okay";
|
|
};
|
|
|
|
&i2c0 {
|
|
status = "okay";
|
|
i2c-scl-rising-time-ns = <168>;
|
|
i2c-scl-falling-time-ns = <4>;
|
|
clock-frequency = <400000>;
|
|
|
|
rk808: pmic@1b {
|
|
compatible = "rockchip,rk808";
|
|
reg = <0x1b>;
|
|
interrupt-parent = <&gpio1>;
|
|
interrupts = <22 IRQ_TYPE_LEVEL_LOW>;
|
|
#clock-cells = <1>;
|
|
clock-output-names = "xin32k", "rk808-clkout2";
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&pmic_int_l>;
|
|
rockchip,system-power-controller;
|
|
wakeup-source;
|
|
|
|
vcc1-supply = <&vcc5v0_sys>;
|
|
vcc2-supply = <&vcc5v0_sys>;
|
|
vcc3-supply = <&vcc5v0_sys>;
|
|
vcc4-supply = <&vcc5v0_sys>;
|
|
vcc6-supply = <&vcc5v0_sys>;
|
|
vcc7-supply = <&vcc5v0_sys>;
|
|
vcc8-supply = <&vcc3v3_sys>;
|
|
vcc9-supply = <&vcc5v0_sys>;
|
|
vcc10-supply = <&vcc5v0_sys>;
|
|
vcc11-supply = <&vcc5v0_sys>;
|
|
vcc12-supply = <&vcc3v3_sys>;
|
|
vddio-supply = <&vcc1v8_pmu>;
|
|
|
|
regulators {
|
|
vdd_center: DCDC_REG1 {
|
|
regulator-name = "vdd_center";
|
|
regulator-min-microvolt = <750000>;
|
|
regulator-max-microvolt = <1350000>;
|
|
regulator-ramp-delay = <6001>;
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
regulator-state-mem {
|
|
regulator-off-in-suspend;
|
|
};
|
|
};
|
|
|
|
vdd_cpu_l: DCDC_REG2 {
|
|
regulator-name = "vdd_cpu_l";
|
|
regulator-min-microvolt = <750000>;
|
|
regulator-max-microvolt = <1350000>;
|
|
regulator-ramp-delay = <6001>;
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
regulator-state-mem {
|
|
regulator-off-in-suspend;
|
|
};
|
|
};
|
|
|
|
vcc_ddr: DCDC_REG3 {
|
|
regulator-name = "vcc_ddr";
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
regulator-state-mem {
|
|
regulator-on-in-suspend;
|
|
};
|
|
};
|
|
|
|
vcc_1v8: DCDC_REG4 {
|
|
regulator-name = "vcc_1v8";
|
|
regulator-min-microvolt = <1800000>;
|
|
regulator-max-microvolt = <1800000>;
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
regulator-state-mem {
|
|
regulator-on-in-suspend;
|
|
regulator-suspend-microvolt = <1800000>;
|
|
};
|
|
};
|
|
|
|
vcc_ldo1: LDO_REG1 {
|
|
regulator-name = "vcc_ldo1";
|
|
regulator-min-microvolt = <1800000>;
|
|
regulator-max-microvolt = <1800000>;
|
|
regulator-boot-on;
|
|
regulator-state-mem {
|
|
regulator-off-in-suspend;
|
|
};
|
|
};
|
|
|
|
vcc1v8_hdmi: LDO_REG2 {
|
|
regulator-name = "vcc1v8_hdmi";
|
|
regulator-min-microvolt = <1800000>;
|
|
regulator-max-microvolt = <1800000>;
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
regulator-state-mem {
|
|
regulator-off-in-suspend;
|
|
};
|
|
};
|
|
|
|
vcc1v8_pmu: LDO_REG3 {
|
|
regulator-name = "vcc1v8_pmu";
|
|
regulator-min-microvolt = <1800000>;
|
|
regulator-max-microvolt = <1800000>;
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
regulator-state-mem {
|
|
regulator-on-in-suspend;
|
|
regulator-suspend-microvolt = <1800000>;
|
|
};
|
|
};
|
|
|
|
vcc_sd: LDO_REG4 {
|
|
regulator-name = "vcc_sd";
|
|
regulator-min-microvolt = <1800000>;
|
|
regulator-max-microvolt = <3000000>;
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
regulator-state-mem {
|
|
regulator-on-in-suspend;
|
|
regulator-suspend-microvolt = <3000000>;
|
|
};
|
|
};
|
|
|
|
vcc_ldo5: LDO_REG5 {
|
|
regulator-name = "vcc_ldo5";
|
|
regulator-min-microvolt = <3000000>;
|
|
regulator-max-microvolt = <3000000>;
|
|
regulator-boot-on;
|
|
regulator-state-mem {
|
|
regulator-off-in-suspend;
|
|
};
|
|
};
|
|
|
|
vcc_ldo6: LDO_REG6 {
|
|
regulator-name = "vcc_ldo6";
|
|
regulator-min-microvolt = <1500000>;
|
|
regulator-max-microvolt = <1500000>;
|
|
regulator-boot-on;
|
|
regulator-state-mem {
|
|
regulator-off-in-suspend;
|
|
};
|
|
};
|
|
|
|
vcc0v9_hdmi: LDO_REG7 {
|
|
regulator-name = "vcc0v9_hdmi";
|
|
regulator-min-microvolt = <900000>;
|
|
regulator-max-microvolt = <900000>;
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
regulator-state-mem {
|
|
regulator-off-in-suspend;
|
|
};
|
|
};
|
|
|
|
vcc_efuse: LDO_REG8 {
|
|
regulator-name = "vcc_efuse";
|
|
regulator-min-microvolt = <1800000>;
|
|
regulator-max-microvolt = <1800000>;
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
regulator-state-mem {
|
|
regulator-off-in-suspend;
|
|
};
|
|
};
|
|
|
|
vcc3v3_s3: SWITCH_REG1 {
|
|
regulator-name = "vcc3v3_s3";
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
regulator-state-mem {
|
|
regulator-off-in-suspend;
|
|
};
|
|
};
|
|
|
|
vcc3v3_s0: SWITCH_REG2 {
|
|
regulator-name = "vcc3v3_s0";
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
regulator-state-mem {
|
|
regulator-off-in-suspend;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
vdd_gpu: regulator@60 {
|
|
compatible = "fcs,fan53555";
|
|
reg = <0x60>;
|
|
fcs,suspend-voltage-selector = <1>;
|
|
regulator-name = "vdd_gpu";
|
|
regulator-min-microvolt = <600000>;
|
|
regulator-max-microvolt = <1230000>;
|
|
regulator-ramp-delay = <1000>;
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
vin-supply = <&vcc5v0_sys>;
|
|
};
|
|
};
|
|
|
|
&i2c7 {
|
|
status = "okay";
|
|
clock-frequency = <400000>;
|
|
|
|
fan: fan@18 {
|
|
compatible = "ti,amc6821";
|
|
reg = <0x18>;
|
|
cooling-min-state = <0>;
|
|
cooling-max-state = <9>;
|
|
#cooling-cells = <2>;
|
|
};
|
|
|
|
rtc_twi: rtc@6f {
|
|
compatible = "isil,isl1208";
|
|
reg = <0x6f>;
|
|
};
|
|
};
|
|
|
|
&i2c8 {
|
|
status = "okay";
|
|
clock-frequency = <400000>;
|
|
|
|
vdd_cpu_b: regulator@60 {
|
|
compatible = "fcs,fan53555";
|
|
reg = <0x60>;
|
|
vin-supply = <&vcc5v0_sys>;
|
|
regulator-name = "vdd_cpu_b";
|
|
regulator-min-microvolt = <600000>;
|
|
regulator-max-microvolt = <1230000>;
|
|
regulator-ramp-delay = <1000>;
|
|
fcs,suspend-voltage-selector = <1>;
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
};
|
|
};
|
|
|
|
&i2s0 {
|
|
pinctrl-0 = <&i2s0_2ch_bus>;
|
|
rockchip,playback-channels = <2>;
|
|
rockchip,capture-channels = <2>;
|
|
status = "okay";
|
|
};
|
|
|
|
/*
|
|
* As Q7 does not specify neither a global nor a RX clock for I2S these
|
|
* signals are not used. Furthermore I2S0_LRCK_RX is used as GPIO.
|
|
* Therefore we have to redefine the i2s0_2ch_bus definition to prevent
|
|
* conflicts.
|
|
*/
|
|
&i2s0_2ch_bus {
|
|
rockchip,pins =
|
|
<RK_GPIO3 RK_PD0 RK_FUNC_1 &pcfg_pull_none>,
|
|
<RK_GPIO3 RK_PD2 RK_FUNC_1 &pcfg_pull_none>,
|
|
<RK_GPIO3 RK_PD3 RK_FUNC_1 &pcfg_pull_none>,
|
|
<RK_GPIO3 RK_PD7 RK_FUNC_1 &pcfg_pull_none>;
|
|
};
|
|
|
|
&io_domains {
|
|
status = "okay";
|
|
bt656-supply = <&vcc_1v8>;
|
|
audio-supply = <&vcc_1v8>;
|
|
sdmmc-supply = <&vcc_sd>;
|
|
gpio1830-supply = <&vcc_1v8>;
|
|
};
|
|
|
|
&pcie_clkreqn_cpm {
|
|
rockchip,pins =
|
|
<2 RK_PD2 RK_FUNC_GPIO &pcfg_pull_up>;
|
|
};
|
|
|
|
&pinctrl {
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&q7_thermal_pin &bios_disable_override_hog_pin>;
|
|
|
|
gpios {
|
|
bios_disable_override_hog_pin: bios-disable-override-hog-pin {
|
|
rockchip,pins =
|
|
<3 RK_PD5 RK_FUNC_GPIO &pcfg_pull_down>;
|
|
};
|
|
|
|
q7_thermal_pin: q7-thermal-pin {
|
|
rockchip,pins =
|
|
<0 RK_PA3 RK_FUNC_GPIO &pcfg_pull_up>;
|
|
};
|
|
};
|
|
|
|
i2c8 {
|
|
i2c8_xfer_a: i2c8-xfer {
|
|
rockchip,pins =
|
|
<RK_GPIO1 RK_PC4 RK_FUNC_1 &pcfg_pull_up>,
|
|
<RK_GPIO1 RK_PC5 RK_FUNC_1 &pcfg_pull_up>;
|
|
};
|
|
};
|
|
|
|
leds {
|
|
led_pin_module: led-module-gpio {
|
|
rockchip,pins =
|
|
<RK_GPIO2 RK_PD1 RK_FUNC_GPIO &pcfg_pull_none>;
|
|
};
|
|
};
|
|
|
|
pmic {
|
|
pmic_int_l: pmic-int-l {
|
|
rockchip,pins =
|
|
<RK_GPIO1 RK_PC6 RK_FUNC_GPIO &pcfg_pull_up>;
|
|
};
|
|
};
|
|
|
|
usb2 {
|
|
vcc5v0_host_en: vcc5v0-host-en {
|
|
rockchip,pins =
|
|
<RK_GPIO4 RK_PA3 RK_FUNC_GPIO &pcfg_pull_none>;
|
|
};
|
|
};
|
|
};
|
|
|
|
&pmu_io_domains {
|
|
status = "okay";
|
|
pmu1830-supply = <&vcc_1v8>;
|
|
};
|
|
|
|
&pwm2 {
|
|
status = "okay";
|
|
};
|
|
|
|
&sdhci {
|
|
/*
|
|
* Signal integrity isn't great at 200MHz but 100MHz has proven stable
|
|
* enough.
|
|
*/
|
|
max-frequency = <100000000>;
|
|
|
|
bus-width = <8>;
|
|
mmc-hs400-1_8v;
|
|
mmc-hs400-enhanced-strobe;
|
|
non-removable;
|
|
status = "okay";
|
|
};
|
|
|
|
&sdmmc {
|
|
vqmmc = <&vcc_sd>;
|
|
};
|
|
|
|
&spi1 {
|
|
status = "okay";
|
|
|
|
norflash: flash@0 {
|
|
compatible = "jedec,spi-nor";
|
|
reg = <0>;
|
|
spi-max-frequency = <50000000>;
|
|
};
|
|
};
|
|
|
|
&tcphy1 {
|
|
status = "okay";
|
|
};
|
|
|
|
&tsadc {
|
|
rockchip,hw-tshut-mode = <1>;
|
|
rockchip,hw-tshut-polarity = <1>;
|
|
status = "okay";
|
|
};
|
|
|
|
&u2phy1 {
|
|
status = "okay";
|
|
|
|
u2phy1_otg: otg-port {
|
|
status = "okay";
|
|
};
|
|
|
|
u2phy1_host: host-port {
|
|
phy-supply = <&vcc5v0_host>;
|
|
status = "okay";
|
|
};
|
|
};
|
|
|
|
&usbdrd3_1 {
|
|
status = "okay";
|
|
};
|
|
|
|
&usbdrd_dwc3_1 {
|
|
status = "okay";
|
|
dr_mode = "host";
|
|
};
|
|
|
|
&usb_host1_ehci {
|
|
status = "okay";
|
|
};
|
|
|
|
&usb_host1_ohci {
|
|
status = "okay";
|
|
};
|