Tool/software:
Hi TI team,
We are working with a custom AM5728-based board (derived from Beagle-X15) using TI Linux SDK 9.03.06.05 (kernel 6.1.x) and U-Boot 2023.04. A fan is connected to GPIO3_1 (GPIO number 65), and it is functional at U-Boot but not working under the Linux kernel. Below are all the relevant details and diagnostics.
Platform Info
-
SoC: AM5728
-
Board: Custom based on Beagle-X15
-
TI SDK Version: 09.03.06.05
-
U-Boot Version: 2023.04 (from TI SDK 9.03)
-
Kernel Version: 6.1.46 (from TI SDK 9.03)
-
U-Boot Environment: Fan works when manually setting GPIO 65
-
Linux Environment: Fan does not run even when GPIO 65 is exported and set to 1
Pinmux Information: mux_data.h at uboot
#ifndef _MUX_DATA_BEAGLE_X15_H_
#define _MUX_DATA_BEAGLE_X15_H_
#include <asm/arch/mux_dra7xx.h>
const struct pad_conf_entry core_padconf_array_essential_x15[] = {
{VIN1A_DE0, (M14 | PIN_INPUT)}, /* AD9 vin1a_de0.gpio3_0 */
{VIN1A_FLD0, (M14 | PIN_OUTPUT)}, /* AF9 vin1a_fld0.gpio3_1 */
{VIN1A_D3, (M14 | PIN_INPUT)}, /* AH6 vin1a_d3.gpio3_7 */
{VIN1A_D4, (M14 | PIN_OUTPUT)}, /* AH3 vin1a_d4.gpio3_8 */
{VIN1A_D5, (M14 | PIN_INPUT)}, /* AH5 vin1a_d5.gpio3_9 */
{VIN1A_D6, (M14 | PIN_OUTPUT)}, /* AG6 vin1a_d6.gpio3_10 */
{VIN2A_D2, (M14 | PIN_INPUT)}, /* D1 vin2a_d2.gpio4_3 */
{VIN2A_D4, (M14 | PIN_INPUT)}, /* D2 vin2a_d4.gpio4_5 */
{VIN2A_D6, (M14 | PIN_OUTPUT)}, /* C1 vin2a_d6.gpio4_7 */
{VIN2A_D8, (M14 | PIN_INPUT)}, /* F5 vin2a_d8.gpio4_9 */
}
const struct pad_conf_entry core_padconf_array_delta_x15_sr2_0[] = {
{VOUT1_CLK, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* D11 vout1_clk.vout1_clk */
{VOUT1_DE, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* B10 vout1_de.vout1_de */
{VOUT1_HSYNC, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* C11 vout1_hsync.vout1_hsync */
{VOUT1_VSYNC, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* E11 vout1_vsync.vout1_vsync */
{VOUT1_D0, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* F11 vout1_d0.vout1_d0 */
{VOUT1_D1, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* G10 vout1_d1.vout1_d1 */
{VOUT1_D2, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* F10 vout1_d2.vout1_d2 */
{VOUT1_D3, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* G11 vout1_d3.vout1_d3 */
{VOUT1_D4, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* E9 vout1_d4.vout1_d4 */
{VOUT1_D5, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* F9 vout1_d5.vout1_d5 */
{VOUT1_D6, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* F8 vout1_d6.vout1_d6 */
{VOUT1_D7, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* E7 vout1_d7.vout1_d7 */
{VOUT1_D8, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* E8 vout1_d8.vout1_d8 */
{VOUT1_D9, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* D9 vout1_d9.vout1_d9 */
{VOUT1_D10, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* D7 vout1_d10.vout1_d10 */
{VOUT1_D11, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* D8 vout1_d11.vout1_d11 */
{VOUT1_D12, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* A5 vout1_d12.vout1_d12 */
{VOUT1_D13, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* C6 vout1_d13.vout1_d13 */
{VOUT1_D14, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* C8 vout1_d14.vout1_d14 */
{VOUT1_D15, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* C7 vout1_d15.vout1_d15 */
{VOUT1_D16, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* B7 vout1_d16.vout1_d16 */
{VOUT1_D17, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* B8 vout1_d17.vout1_d17 */
{VOUT1_D18, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* A7 vout1_d18.vout1_d18 */
{VOUT1_D19, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* A8 vout1_d19.vout1_d19 */
{VOUT1_D20, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* C9 vout1_d20.vout1_d20 */
{VOUT1_D21, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* A9 vout1_d21.vout1_d21 */
{VOUT1_D22, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* B9 vout1_d22.vout1_d22 */
{VOUT1_D23, (M0 | PIN_OUTPUT | SLEWCONTROL | MANUAL_MODE)}, /* A10 vout1_d23.vout1_d23 */
};
What Works in U-Boot:
-
Pinmux is correctly set for
vin1a_fld0.gpio3_1
at boot. -
U-Boot command used
=> gpio set 65
gpio: pin 65 (gpio 65) value is 1 - The fan starts running immediately when the GPIO is set.
What Fails After full boot - I manually export and set GPIO65:in Kernel:
echo 65 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio65/direction
echo 1 > /sys/class/gpio/gpio65/value -
Value is set to 1 correctly: