This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM5706:UART6在 Linux SDK 09.03.06.05上不起作用

Guru**** 2330840 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1518156/am5706-uart6-not-working-on-linux-sdk-09-03-06-05

部件号:AM5706

工具/软件:

我们将将设计从 SDK 6 (Linux v4.10)迁移到 SDK 9。 到目前为止我们没有任何重大问题、但当我在 DTB 中启用 UART 6时、内核无法加载。 它在 U-Boot 中卡住"starting kernel ..."消息。

如果我将 uart6状态设置为"禁用"、则会进行引导。

我正在从 SDK 6使用 U-Boot 并通过 TFTP 引导。 我知道硬件和 Pinmux 正常、因为使用 SDK 6 内核进行引导可以正常工作、U-Boot 会设置 pinmux。 我的控制台 UART 是 UART1、因此我应该可以看到 引导消息。

我怀疑时钟中有东西损坏、因为 UART6使用 CD_IPU、而我使用的其他 UART 位于 CD_L4_PER1上。 但是、我不明白为什么它无法启用此类时钟。

有任何关于如何调试该问题的建议? 这很难,因为只要我启用 UART ,我就看不到任何东西,所以 基于 printk()的调试是不能选择的。

这是我正在使用的 DTS、在未对默认 SDK 进行修改的情况下编译内核:

// SPDX-License-Identifier: GPL-2.0-only
/*
 * Copyright (C) 2016 Texas Instruments Incorporated - https://www.ti.com/
 */

#include "dra71x.dtsi"
#include "dra7-mmc-iodelay.dtsi"
#include "dra72x-mmc-iodelay.dtsi"
#include "am5718.dtsi"
#include "dra7-ipu-dsp-common.dtsi"
#include <dt-bindings/gpio/gpio.h>

/ {
	compatible = "ti,dra718-evm", "ti,dra718", "ti,dra722", "ti,dra72", "ti,dra7";
	model = "TI DRA718 EVM";

	memory {
		device_type = "memory";
		reg = <0x0 0x80000000 0x0 0x40000000>; /* 1GB */
	};

	reserved-memory {
		#address-cells = <2>;
		#size-cells = <2>;
		ranges;

		ipu2_memory_region: ipu2-memory@95800000 {
			compatible = "shared-dma-pool";
			reg = <0x0 0x95800000 0x0 0x3800000>;
			reusable;
			status = "okay";
		};

		dsp1_memory_region: dsp1-memory@99000000 {
			compatible = "shared-dma-pool";
			reg = <0x0 0x99000000 0x0 0x4000000>;
			reusable;
			status = "okay";
		};

		ipu1_memory_region: ipu1-memory@9d000000 {
			compatible = "shared-dma-pool";
			reg = <0x0 0x9d000000 0x0 0x2000000>;
			reusable;
			status = "okay";
		};
	};

	vpo_sd_1v8_3v3: gpio-regulator-TPS74801 {
		compatible = "regulator-gpio";

		regulator-name = "vddshv8";
		regulator-okmin-microvolt = <1800000>;
		regulator-max-microvolt = <3000000>;
		regulator-boot-on;
		vin-supply = <&evm_5v0>;

		gpios = <&gpio7 11 GPIO_ACTIVE_HIGH>;
		states = <1800000 0x0
			  3000000 0x1>;
	};

	evm_1v8_sw: fixedregulator-evm_1v8 {
		compatible = "regulator-fixed";
		regulator-name = "evm_1v8";
		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <1800000>;
		vin-supply = <&lp8732_buck0_reg>;
		regulator-always-on;
		regulator-boot-on;
	};

	poweroff: gpio-poweroff {
		compatible = "gpio-poweroff";
		gpios = <&gpio7 30 GPIO_ACTIVE_HIGH>;
		input;
	};

	reserved-memory {
		#address-cells = <2>;
		#size-cells = <2>;
		ranges;

		/* CMEM For di-platform FW (dsp1, ipu1 and A15) */
		cmem_block_mem_0: cmem_block_mem@93000000 {
			reg = <0x0 0x93000000 0x0 0x2000000>;
			no-map;
			status = "okay";
		};

		/* CMEM for Bridge PRUSS1 ADC */
		pru1-memory@9fec0000 {
			reg = <0x0 0x950c0000 0x0 0x40000>;
			no-map;
			status = "okay";
		};
	};

	cmem {
		compatible = "ti,cmem";
		#address-cells = <1>;
		#size-cells = <0>;
		#pool-size-cells = <2>;
		status = "okay";

		cmem_block_0: cmem_block@0 {
			reg = <0>;
			memory-region = <&cmem_block_mem_0>;
			cmem-buf-pools = <0x1 0x0 0x2000000>;
		};
	};
};

&i2c1 {
	status = "okay";
	clock-frequency = <400000>;

	lp8733: lp8733@60 {
		compatible = "ti,lp8733";
		reg = <0x60>;

		buck0-in-supply =<&vsys_3v3>;
		buck1-in-supply =<&vsys_3v3>;
		ldo0-in-supply =<&evm_5v0>;
		ldo1-in-supply =<&evm_5v0>;

		lp8733_regulators: regulators {
			lp8733_buck0_reg: buck0 {
				/* FB_B0 -> LP8733-BUCK1 - VPO_S1_AVS - VDD_CORE_AVS (core, mpu, gpu) */
				regulator-name = "lp8733-buck0";
				regulator-min-microvolt = <850000>;
				regulator-max-microvolt = <1250000>;
				regulator-always-on;
				regulator-boot-on;
			};

			lp8733_buck1_reg: buck1 {
				/* FB_B1 -> LP8733-BUCK2 - VPO_S2_AVS - VDD_DSP_AVS (DSP/eve/iva) */
				regulator-name = "lp8733-buck1";
				regulator-min-microvolt = <850000>;
				regulator-max-microvolt = <1250000>;
				regulator-boot-on;
				regulator-always-on;
			};

			lp8733_ldo0_reg: ldo0 {
				/* LDO0 -> LP8733-LDO1 - VPO_L1_3V3 - VDDSHV8 (optional) */
				regulator-name = "lp8733-ldo0";
				regulator-min-microvolt = <3300000>;
				regulator-max-microvolt = <3300000>;
				regulator-boot-on;
				regulator-always-on;
			};

			lp8733_ldo1_reg: ldo1 {
				/* LDO1 -> LP8733-LDO2 - VPO_L2_3V3 - VDDA_USB3V3 */
				regulator-name = "lp8733-ldo1";
				regulator-min-microvolt = <3300000>;
				regulator-max-microvolt = <3300000>;
				regulator-always-on;
				regulator-boot-on;
			};
		};
	};

	lp8732: lp8732@61 {
		compatible = "ti,lp8732";
		reg = <0x61>;

		buck0-in-supply =<&vsys_3v3>;
		buck1-in-supply =<&vsys_3v3>;
		ldo0-in-supply =<&vsys_3v3>;
		ldo1-in-supply =<&vsys_3v3>;

		lp8732_regulators: regulators {
			lp8732_buck0_reg: buck0 {
				/* FB_B0 -> LP8732-BUCK1 - VPO_S3_1V8 - VDDS_1V8 */
				regulator-name = "lp8732-buck0";
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <1800000>;
				regulator-always-on;
				regulator-boot-on;
			};

			lp8732_buck1_reg: buck1 {
				/* FB_B1 -> LP8732-BUCK2 - VPO_S4_DDR - VDD_DDR_1V35 */
				regulator-name = "lp8732-buck1";
				regulator-min-microvolt = <1350000>;
				regulator-max-microvolt = <1350000>;
				regulator-boot-on;
				regulator-always-on;
			};

			lp8732_ldo0_reg: ldo0 {
				/* LDO0 -> LP8732-LDO1 - VPO_L3_1V8 - VDA_1V8_PLL */
				regulator-name = "lp8732-ldo0";
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <1800000>;
				regulator-boot-on;
				regulator-always-on;
			};

			lp8732_ldo1_reg: ldo1 {
				/* LDO1 -> LP8732-LDO2 - VPO_L4_1V8 - VDA_1V8_PHY */
				regulator-name = "lp8732-ldo1";
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <1800000>;
				regulator-always-on;
				regulator-boot-on;
			};
		};
	};
};

&uart1 {
	status = "okay";
	overrun-throttle-ms = <500>;
};

&uart3 {
	status = "okay";
	overrun-throttle-ms = <500>;
};

#if 1
/* FIXME: doesn't boot, probably needs a clock? */
&uart6 {
	status = "okay";
	//overrun-throttle-ms = <500>;
};
#endif

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Sebastian 您好:

    我将在下周对这个问题进行研究。  

    感谢您的耐心。

    -Josue

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢 Josue。  我今天设法解决了这个问题,问题是当启用 UART6时内核 chages 中的枚举,所以 传递到内核命令行的"console"参数是不正确的。 在启动前更改此变量解决了问题。

    这花了我 一个不可确认的量,以找到时间。  很抱歉给您带来不便!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您发布您的解决方案! 我认为这些枚举问题很常见、很容易被错过! (我自己这样做的成本太多的小时。)

    -Josue