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.

AM5728: AM5728的配置

Part Number: AM5728


Hi,

我在AM5728上用GPMC,同步,CS3,目前的现象是,管脚冲突,但是,我尝试把其它的复用管脚delete-node,似乎没有管用,可以看到mmc3在dtb转出dts来,status 还是okay的。

我把overlay里 A0,A1 注释掉,加载GPMC overlay就不报错了。请帮忙看看什么情况? 谢谢!董峰

pinctrl-single,pins = <
DRA7XX_CORE_IOPAD(0x3440, (PIN_INPUT | MUX_MODE0)) /* gpmc_a0.gpmc_a0 */
DRA7XX_CORE_IOPAD(0x3444, (PIN_INPUT | MUX_MODE0)) /* gpmc_a1.gpmc_a1 */

1. 现象

root@xivi:~# echo -n "tl5728f-gpmc-ad-overlay-xivi.dtbo" > /configfs/device-tree/overlays/full/path
[ 27.105896] pinctrl-single 4a003400.pinmux: pin PIN16 already requested by 4a003400.pinmux; cannot claim for 50000000.gpmc
[ 27.117958] pinctrl-single 4a003400.pinmux: pin-16 (50000000.gpmc) status -22
[ 27.125465] pinctrl-single 4a003400.pinmux: could not request pin 16 (PIN16) from group gpmc_pins_default on device pinctrl-single
[ 27.137395] omap-gpmc 50000000.gpmc: Error applying setting, reverse things back
[ 27.144887] omap-gpmc: probe of 50000000.gpmc failed with error -22
root@xivi:~#

2. tl5728f-evm.dts

#include "tl5728-idk.dts"

/ {
model = "TL5728F-EVM";
chosen {
stdout-path = &uart2;
};

mmc2 {
status = "disable";
};

ocp {
/delete-node/ mmc2;
/delete-node/ mmc3;
/delete-node/ qspi;
/delete-node/ vip1;
/delete-node/ vip2;
/delete-node/ vip3;
/delete-node/ vip4;
/delete-node/ gpio7;
/delete-node/ i2c4;
/delete-node/ uart5;
/delete-node/ mmc@480ad000;
// /delete-node/ gpio@48051000;
};
};

3. 我的GPMC Overlay

/* device tree overlay for GPMC CS3 with address/data-non-multiplexed mode */

/dts-v1/;
/plugin/;

#include <dt-bindings/pinctrl/dra.h>

/ {
fragment@1 {
target = <&dra7_pmx_core>;
__overlay__ {
gpmc_pins_default: gpmc_pins_default {
pinctrl-single,pins = <
DRA7XX_CORE_IOPAD(0x3440, (PIN_INPUT | MUX_MODE0)) /* gpmc_a0.gpmc_a0 */
DRA7XX_CORE_IOPAD(0x3444, (PIN_INPUT | MUX_MODE0)) /* gpmc_a1.gpmc_a1 */
DRA7XX_CORE_IOPAD(0x3448, (PIN_INPUT | MUX_MODE0)) /* gpmc_a2.gpmc_a2 */
DRA7XX_CORE_IOPAD(0x344c, (PIN_INPUT | MUX_MODE0)) /* gpmc_a3.gpmc_a3 */
DRA7XX_CORE_IOPAD(0x3450, (PIN_INPUT | MUX_MODE0)) /* gpmc_a4.gpmc_a4 */
DRA7XX_CORE_IOPAD(0x3454, (PIN_INPUT | MUX_MODE0)) /* gpmc_a5.gpmc_a5 */
DRA7XX_CORE_IOPAD(0x3458, (PIN_INPUT | MUX_MODE0)) /* gpmc_a6.gpmc_a6 */
DRA7XX_CORE_IOPAD(0x345c, (PIN_INPUT | MUX_MODE0)) /* gpmc_a7.gpmc_a7 */
DRA7XX_CORE_IOPAD(0x3460, (PIN_INPUT | MUX_MODE0)) /* gpmc_a8.gpmc_a8 */
DRA7XX_CORE_IOPAD(0x3464, (PIN_INPUT | MUX_MODE0)) /* gpmc_a9.gpmc_a9 */
DRA7XX_CORE_IOPAD(0x3468, (PIN_INPUT | MUX_MODE0)) /* gpmc_a10.gpmc_a10 */
DRA7XX_CORE_IOPAD(0x346c, (PIN_INPUT | MUX_MODE0)) /* gpmc_a11.gpmc_a11 */
DRA7XX_CORE_IOPAD(0x3470, (PIN_INPUT | MUX_MODE0)) /* gpmc_a12.gpmc_a12 */
DRA7XX_CORE_IOPAD(0x3474, (PIN_INPUT | MUX_MODE0)) /* gpmc_a13.gpmc_a13 */
DRA7XX_CORE_IOPAD(0x3478, (PIN_INPUT | MUX_MODE0)) /* gpmc_a14.gpmc_a14 */
DRA7XX_CORE_IOPAD(0x347c, (PIN_INPUT | MUX_MODE0)) /* gpmc_a15.gpmc_a15 */
DRA7XX_CORE_IOPAD(0x3480, (PIN_INPUT | MUX_MODE0)) /* gpmc_a16.gpmc_a16 */
DRA7XX_CORE_IOPAD(0x3484, (PIN_INPUT | MUX_MODE0)) /* gpmc_a17.gpmc_a17 */
DRA7XX_CORE_IOPAD(0x3488, (PIN_INPUT | MUX_MODE0)) /* gpmc_a18.gpmc_a18 */

DRA7XX_CORE_IOPAD(0x34d4, (PIN_INPUT | MUX_MODE0)) /* gpmc_ben1.gpmc_ben1 */
DRA7XX_CORE_IOPAD(0x34d0, (PIN_INPUT | MUX_MODE0)) /* gpmc_ben0.gpmc_ben0 */

DRA7XX_CORE_IOPAD(0x3400, (PIN_INPUT_PULLUP | MUX_MODE0)) /* gpmc_ad0.gpmc_d0 */
DRA7XX_CORE_IOPAD(0x3404, (PIN_INPUT_PULLUP | MUX_MODE0)) /* gpmc_ad1.gpmc_d1 */
DRA7XX_CORE_IOPAD(0x3408, (PIN_INPUT_PULLUP | MUX_MODE0)) /* gpmc_ad2.gpmc_d2 */
DRA7XX_CORE_IOPAD(0x340C, (PIN_INPUT_PULLUP | MUX_MODE0)) /* gpmc_ad3.gpmc_d3 */
DRA7XX_CORE_IOPAD(0x3410, (PIN_INPUT_PULLUP | MUX_MODE0)) /* gpmc_ad4.gpmc_d4 */
DRA7XX_CORE_IOPAD(0x3414, (PIN_INPUT_PULLUP | MUX_MODE0)) /* gpmc_ad5.gpmc_d5 */
DRA7XX_CORE_IOPAD(0x3418, (PIN_INPUT_PULLUP | MUX_MODE0)) /* gpmc_ad6.gpmc_d6 */
DRA7XX_CORE_IOPAD(0x341C, (PIN_INPUT_PULLUP | MUX_MODE0)) /* gpmc_ad7.gpmc_d7 */
DRA7XX_CORE_IOPAD(0x3420, (PIN_INPUT_PULLUP | MUX_MODE0)) /* gpmc_ad8.gpmc_d8 */
DRA7XX_CORE_IOPAD(0x3424, (PIN_INPUT_PULLUP | MUX_MODE0)) /* gpmc_ad9.gpmc_d9 */
DRA7XX_CORE_IOPAD(0x3428, (PIN_INPUT_PULLUP | MUX_MODE0)) /* gpmc_ad10.gpmc_d10 */
DRA7XX_CORE_IOPAD(0x342C, (PIN_INPUT_PULLUP | MUX_MODE0)) /* gpmc_ad11.gpmc_d11 */
DRA7XX_CORE_IOPAD(0x3430, (PIN_INPUT_PULLUP | MUX_MODE0)) /* gpmc_ad12.gpmc_d12 */
DRA7XX_CORE_IOPAD(0x3434, (PIN_INPUT_PULLUP | MUX_MODE0)) /* gpmc_ad13.gpmc_d13 */
DRA7XX_CORE_IOPAD(0x3438, (PIN_INPUT_PULLUP | MUX_MODE0)) /* gpmc_ad14.gpmc_d14 */
DRA7XX_CORE_IOPAD(0x343C, (PIN_INPUT_PULLUP | MUX_MODE0)) /* gpmc_ad15.gpmc_d15 */
DRA7XX_CORE_IOPAD(0x34C0, (PIN_INPUT | MUX_MODE0)) /* gpmc_clk.gpmc_clk */
DRA7XX_CORE_IOPAD(0x34C4, (PIN_OUTPUT_PULLUP | MUX_MODE0)) /* gpmc_advn_ale.gpmc_advn_ale */
DRA7XX_CORE_IOPAD(0x34C8, (PIN_OUTPUT_PULLUP | MUX_MODE0)) /* gpmc_oen_ren.gpmc_oen_ren */
DRA7XX_CORE_IOPAD(0x34CC, (PIN_OUTPUT_PULLUP | MUX_MODE0)) /* gpmc_wen.gpmc_wen */
DRA7XX_CORE_IOPAD(0x34BC, (PIN_OUTPUT | MUX_MODE0)) /* gpmc_cs3.gpmc_cs3 */
DRA7XX_CORE_IOPAD(0x34D8, (PIN_INPUT_PULLUP | MUX_MODE14)) /* gpmc_wait0.gpio2_28 */
>;
};
};
};

fragment@2 {
target = <&gpmc>;
__overlay__ {
depth = <1>; /* only create devices on depth 1 */
status = "okay";

#address-cells = <2>;
#size-cells = <1>;
pinctrl-names = "default";
pinctrl-0 = <&gpmc_pins_default>;

ranges = <3 0 0x01000000 0x01000000>; /* CSn3, 0, addr 0x01000000, size 0x1000000 (16MiB) */

gpmc_device0@0,0 {
compatible = "cfi-flash";
linux,mtd-name= "intel,pf48f6000m0y1be";

#address-cells = <1>;
#size-cells = <1>;

status = "okay";

reg = <3 0 0x01000000>;

/* CONFIG 1 */
bank-width = <2>; /* GPMC_CONFIG1_DEVICESIZE(1) 2: 16bits */
gpmc,mux-add-data = <0>; /* GPMC_CONFIG1_MUXTYPE(0) 2: address-data multiplexing mode */

/* CONFIG 2 */
gpmc,cs-on-ns = <0>;
gpmc,cs-rd-off-ns = <37>;
gpmc,cs-wr-off-ns = <37>;

/* CONFIG 3 */
gpmc,adv-on-ns = <3>;
gpmc,adv-rd-off-ns = <11>;
gpmc,adv-wr-off-ns = <11>;

/* CONFIG 4 */
gpmc,oe-on-ns = <15>;
gpmc,oe-off-ns = <37>;
gpmc,we-on-ns = <15>;
gpmc,we-off-ns = <33>;

/* CONFIG 5 */
gpmc,rd-cycle-ns = <37>;
gpmc,wr-cycle-ns = <37>;
gpmc,access-ns = <33>;
gpmc,page-burst-access-ns = <0>;

/* CONFIG 6 */
gpmc,bus-turnaround-ns = <0>;
gpmc,cycle2cycle-delay-ns = <0>;
gpmc,wr-data-mux-bus-ns = <15>;
gpmc,wr-access-ns = <26>;
gpmc,cycle2cycle-samecsen;
gpmc,cycle2cycle-diffcsen;
};
};
};
};

  • 您好,

    首先,您需要确保您的设备树文件中正确地定义了GPMC节点以及相关的管脚和功能。您可以检查设备树文件中的GPMC节点,确保它们与您的硬件设计和引脚配置相匹配。如果您删除了其他复用管脚的节点,但仍然遇到管脚冲突的问题,可能是因为这些节点仍然存在于设备树的其他部分或其他设备树文件中。您需要确保在所有相关的设备树文件中删除了这些节点,以避免冲突。

    另外,当您注释掉A0和A1管脚并加载GPMC overlay后不再报错时,可能是因为A0和A1管脚与GPMC的功能存在冲突。您需要了解A0和A1管脚的功能以及与GPMC的兼容性。如果确实存在冲突,您可能需要重新评估您的引脚配置,以确保GPMC的管脚与其他功能之间没有冲突。