UART controllers without flow control seem to behave unstable
in case DMA is enabled. The issues were indicated in the message:
https://lore.kernel.org/linux-arm-kernel/CAMdYzYpXtMocCtCpZLU_xuWmOp2Ja_v0Aj0e6YFNRA-yV7u14g@mail.gmail.com/
In case of PX30-uQ7 Ringneck SoM, it was noticed that after couple
of hours of UART communication, the CPU stall was occurring,
leading to the system becoming unresponsive.
After disabling the DMA, extensive UART communication tests for
up to two weeks were performed, and no issues were further
observed.
The flow control pins for uart5 are not available on PX30-uQ7
Ringneck, as configured by pinctrl-0, so the DMA nodes were
removed on SoM dtsi.
Cc: stable@vger.kernel.org
Fixes: c484cf93f6
("arm64: dts: rockchip: add PX30-µQ7 (Ringneck) SoM with Haikou baseboard")
Reviewed-by: Quentin Schulz <quentin.schulz@cherry.de>
Signed-off-by: Lukasz Czechowski <lukasz.czechowski@thaumatec.com>
Link: https://lore.kernel.org/r/20250121125604.3115235-3-lukasz.czechowski@thaumatec.com
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
416 lines
8.1 KiB
Text
416 lines
8.1 KiB
Text
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
|
|
/*
|
|
* Copyright (c) 2022 Theobroma Systems Design und Consulting GmbH
|
|
*/
|
|
|
|
/dts-v1/;
|
|
#include "px30.dtsi"
|
|
#include <dt-bindings/leds/common.h>
|
|
|
|
/ {
|
|
aliases {
|
|
i2c10 = &i2c10;
|
|
mmc0 = &emmc;
|
|
mmc1 = &sdio;
|
|
rtc0 = &rtc_twi;
|
|
rtc1 = &rk809;
|
|
};
|
|
|
|
/* allows userspace to control the gate of the ATtiny UPDI pass FET via sysfs */
|
|
attiny-updi-gate-regulator {
|
|
compatible = "regulator-output";
|
|
vout-supply = <&vg_attiny_updi>;
|
|
};
|
|
|
|
emmc_pwrseq: emmc-pwrseq {
|
|
compatible = "mmc-pwrseq-emmc";
|
|
pinctrl-0 = <&emmc_reset>;
|
|
pinctrl-names = "default";
|
|
reset-gpios = <&gpio1 RK_PB3 GPIO_ACTIVE_HIGH>;
|
|
};
|
|
|
|
leds {
|
|
compatible = "gpio-leds";
|
|
pinctrl-names = "default";
|
|
pinctrl-0 = <&module_led_pin>;
|
|
status = "okay";
|
|
|
|
module_led: led-0 {
|
|
gpios = <&gpio1 RK_PB0 GPIO_ACTIVE_HIGH>;
|
|
function = LED_FUNCTION_HEARTBEAT;
|
|
linux,default-trigger = "heartbeat";
|
|
color = <LED_COLOR_ID_AMBER>;
|
|
};
|
|
};
|
|
|
|
vcc5v0_sys: regulator-vccsys {
|
|
compatible = "regulator-fixed";
|
|
regulator-name = "vcc5v0_sys";
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
regulator-min-microvolt = <5000000>;
|
|
regulator-max-microvolt = <5000000>;
|
|
};
|
|
};
|
|
|
|
&cpu0 {
|
|
cpu-supply = <&vdd_arm>;
|
|
};
|
|
|
|
&cpu1 {
|
|
cpu-supply = <&vdd_arm>;
|
|
};
|
|
|
|
&cpu2 {
|
|
cpu-supply = <&vdd_arm>;
|
|
};
|
|
|
|
&cpu3 {
|
|
cpu-supply = <&vdd_arm>;
|
|
};
|
|
|
|
&emmc {
|
|
bus-width = <8>;
|
|
cap-mmc-highspeed;
|
|
mmc-hs200-1_8v;
|
|
mmc-pwrseq = <&emmc_pwrseq>;
|
|
non-removable;
|
|
vmmc-supply = <&vcc_3v3>;
|
|
vqmmc-supply = <&vcc_emmc>;
|
|
|
|
status = "okay";
|
|
};
|
|
|
|
/* On-module TI DP83825I PHY but no connector, enable in carrierboard */
|
|
&gmac {
|
|
snps,reset-gpio = <&gpio3 RK_PB0 GPIO_ACTIVE_LOW>;
|
|
snps,reset-active-low;
|
|
snps,reset-delays-us = <0 50000 50000>;
|
|
phy-supply = <&vcc_3v3>;
|
|
clock_in_out = "output";
|
|
};
|
|
|
|
&gpio2 {
|
|
/*
|
|
* The Qseven BIOS_DISABLE signal on the PX30-µQ7 keeps the on-module
|
|
* eMMC powered-down initially (in fact it keeps the reset signal
|
|
* asserted). BIOS_DISABLE_OVERRIDE pin allows to re-enable eMMC after
|
|
* the SPL has been booted from SD Card.
|
|
*/
|
|
bios-disable-override-hog {
|
|
gpios = <RK_PB5 GPIO_ACTIVE_LOW>;
|
|
output-high;
|
|
line-name = "bios_disable_override";
|
|
gpio-hog;
|
|
};
|
|
|
|
/*
|
|
* The BIOS_DISABLE hog is a feedback pin for the actual status of the
|
|
* signal, ignoring the BIOS_DISABLE_OVERRIDE logic. This usually
|
|
* represents the state of a switch on the baseboard.
|
|
*/
|
|
bios-disable-n-hog {
|
|
gpios = <RK_PC2 GPIO_ACTIVE_LOW>;
|
|
line-name = "bios_disable";
|
|
input;
|
|
gpio-hog;
|
|
};
|
|
};
|
|
|
|
&gpu {
|
|
status = "okay";
|
|
};
|
|
|
|
&i2c0 {
|
|
status = "okay";
|
|
|
|
rk809: pmic@20 {
|
|
compatible = "rockchip,rk809";
|
|
reg = <0x20>;
|
|
interrupt-parent = <&gpio0>;
|
|
interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
|
|
pinctrl-0 = <&pmic_int>;
|
|
pinctrl-names = "default";
|
|
#clock-cells = <0>;
|
|
clock-output-names = "xin32k";
|
|
system-power-controller;
|
|
wakeup-source;
|
|
|
|
vcc1-supply = <&vcc5v0_sys>;
|
|
vcc2-supply = <&vcc5v0_sys>;
|
|
vcc3-supply = <&vcc5v0_sys>;
|
|
vcc4-supply = <&vcc5v0_sys>;
|
|
vcc5-supply = <&vcc_3v3>;
|
|
vcc6-supply = <&vcc_3v3>;
|
|
vcc7-supply = <&vcc_3v3>;
|
|
vcc9-supply = <&vcc5v0_sys>;
|
|
|
|
regulators {
|
|
vdd_log: DCDC_REG1 {
|
|
regulator-name = "vdd_log";
|
|
regulator-min-microvolt = <950000>;
|
|
regulator-max-microvolt = <1350000>;
|
|
regulator-ramp-delay = <6001>;
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
|
|
regulator-state-mem {
|
|
regulator-on-in-suspend;
|
|
regulator-suspend-microvolt = <950000>;
|
|
};
|
|
};
|
|
|
|
vdd_arm: DCDC_REG2 {
|
|
regulator-name = "vdd_arm";
|
|
regulator-min-microvolt = <950000>;
|
|
regulator-max-microvolt = <1350000>;
|
|
regulator-ramp-delay = <6001>;
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
|
|
regulator-state-mem {
|
|
regulator-off-in-suspend;
|
|
regulator-suspend-microvolt = <950000>;
|
|
};
|
|
};
|
|
|
|
vcc_ddr: DCDC_REG3 {
|
|
regulator-name = "vcc_ddr";
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
|
|
regulator-state-mem {
|
|
regulator-on-in-suspend;
|
|
};
|
|
};
|
|
|
|
vcc_3v0_1v8: vcc_emmc: DCDC_REG4 {
|
|
regulator-name = "vcc_3v0_1v8";
|
|
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_3v3: DCDC_REG5 {
|
|
regulator-name = "vcc_3v3";
|
|
regulator-min-microvolt = <3300000>;
|
|
regulator-max-microvolt = <3300000>;
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
|
|
regulator-state-mem {
|
|
regulator-on-in-suspend;
|
|
regulator-suspend-microvolt = <3300000>;
|
|
};
|
|
};
|
|
|
|
vcc_1v8: LDO_REG2 {
|
|
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_1v0: LDO_REG3 {
|
|
regulator-name = "vcc_1v0";
|
|
regulator-min-microvolt = <1000000>;
|
|
regulator-max-microvolt = <1000000>;
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
|
|
regulator-state-mem {
|
|
regulator-on-in-suspend;
|
|
regulator-suspend-microvolt = <1000000>;
|
|
};
|
|
};
|
|
|
|
vccio_sd: LDO_REG5 {
|
|
regulator-name = "vccio_sd";
|
|
regulator-min-microvolt = <1800000>;
|
|
regulator-max-microvolt = <3300000>;
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
|
|
regulator-state-mem {
|
|
regulator-on-in-suspend;
|
|
regulator-suspend-microvolt = <3300000>;
|
|
};
|
|
};
|
|
|
|
vcc_lcd: LDO_REG7 {
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
regulator-min-microvolt = <1000000>;
|
|
regulator-max-microvolt = <1000000>;
|
|
regulator-name = "vcc_lcd";
|
|
|
|
regulator-state-mem {
|
|
regulator-off-in-suspend;
|
|
regulator-suspend-microvolt = <1000000>;
|
|
};
|
|
};
|
|
|
|
vcc_1v8_lcd: LDO_REG8 {
|
|
regulator-name = "vcc_1v8_lcd";
|
|
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>;
|
|
};
|
|
};
|
|
|
|
vcca_1v8: LDO_REG9 {
|
|
regulator-name = "vcca_1v8";
|
|
regulator-min-microvolt = <1800000>;
|
|
regulator-max-microvolt = <1800000>;
|
|
regulator-always-on;
|
|
regulator-boot-on;
|
|
|
|
regulator-state-mem {
|
|
regulator-off-in-suspend;
|
|
regulator-suspend-microvolt = <1800000>;
|
|
};
|
|
};
|
|
|
|
/* supplies the gate of the ATtiny UPDI pass FET */
|
|
vg_attiny_updi: SWITCH_REG1 {
|
|
regulator-name = "vg_attiny_updi";
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
&i2c1 {
|
|
status = "okay";
|
|
|
|
/* SE05x is limited to Fast Mode */
|
|
clock-frequency = <400000>;
|
|
|
|
fan: fan@18 {
|
|
compatible = "tsd,mule", "ti,amc6821";
|
|
reg = <0x18>;
|
|
|
|
i2c-mux {
|
|
compatible = "tsd,mule-i2c-mux";
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
|
|
i2c10: i2c@0 {
|
|
reg = <0x0>;
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
|
|
rtc_twi: rtc@6f {
|
|
compatible = "isil,isl1208";
|
|
reg = <0x6f>;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
&i2c3 {
|
|
status = "okay";
|
|
};
|
|
|
|
&i2s0_8ch {
|
|
rockchip,trcm-sync-tx-only;
|
|
|
|
pinctrl-0 = <&i2s0_8ch_sclktx &i2s0_8ch_lrcktx
|
|
&i2s0_8ch_sdo0 &i2s0_8ch_sdi0>;
|
|
};
|
|
|
|
&io_domains {
|
|
vccio1-supply = <&vcc_3v3>;
|
|
vccio2-supply = <&vccio_sd>;
|
|
vccio3-supply = <&vcc_3v3>;
|
|
vccio4-supply = <&vcc_3v3>;
|
|
vccio5-supply = <&vcc_3v3>;
|
|
vccio6-supply = <&vcc_emmc>;
|
|
vccio-oscgpi-supply = <&vcc_3v3>;
|
|
|
|
status = "okay";
|
|
};
|
|
|
|
&pinctrl {
|
|
emmc {
|
|
emmc_reset: emmc-reset {
|
|
rockchip,pins = <1 RK_PB3 RK_FUNC_GPIO &pcfg_pull_none>;
|
|
};
|
|
};
|
|
|
|
leds {
|
|
module_led_pin: module-led-pin {
|
|
rockchip,pins = <1 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>;
|
|
};
|
|
};
|
|
|
|
pmic {
|
|
pmic_int: pmic-int {
|
|
rockchip,pins =
|
|
<0 RK_PA7 RK_FUNC_GPIO &pcfg_pull_up>;
|
|
};
|
|
};
|
|
};
|
|
|
|
&pmu_io_domains {
|
|
pmuio1-supply = <&vcc_3v3>;
|
|
pmuio2-supply = <&vcc_3v3>;
|
|
status = "okay";
|
|
};
|
|
|
|
&saradc {
|
|
vref-supply = <&vcc_1v8>;
|
|
status = "okay";
|
|
};
|
|
|
|
&sdmmc {
|
|
vqmmc-supply = <&vccio_sd>;
|
|
};
|
|
|
|
&tsadc {
|
|
status = "okay";
|
|
};
|
|
|
|
&u2phy {
|
|
status = "okay";
|
|
};
|
|
|
|
&u2phy_host {
|
|
status = "okay";
|
|
};
|
|
|
|
&uart5 {
|
|
/delete-property/ dmas;
|
|
/delete-property/ dma-names;
|
|
pinctrl-0 = <&uart5_xfer>;
|
|
};
|
|
|
|
/* Mule UCAN */
|
|
&usb_host0_ehci {
|
|
status = "okay";
|
|
};
|
|
|
|
&usb_host0_ohci {
|
|
status = "okay";
|
|
};
|
|
|
|
&wdt {
|
|
status = "okay";
|
|
};
|