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.

[参考译文] Linux/AM5728:使用 Linux 在 AM572x IDK 上配置 GPMC 寄存器

Guru**** 2547320 points
Other Parts Discussed in Thread: AM5728

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/569852/linux-am5728-configure-gpmc-registers-on-am572x-idk-using-linux

器件型号:AM5728

工具/软件:Linux

我有一个有效的裸机 ARM A15代码、该代码将 GPMC 配置为 AM5728 IDK、以便与存储器地址0x01000000处的 Altera FGPA Cyclone5进行通信。
(使用 CS0 16位、异步、非多路复用地址和数据线路)-寄存器设置在末尾。

现在、我正在尝试从 Linux 配置 GPMC 寄存器。 但是、在尝试更改 DTS 文件后、我无法让 Linux 显示 GPMC 寄存器映射。


我使用的是具有 RT 内核4.4.3.2的最新处理器 SDK3.2、


我在启动时遇到以下 GPMC 探测器错误:

OMAP-GPMC 50000000。GPMC:找不到节点/pinmux_gpMC_pins 的 pctldev、延迟探针


我有几个问题

1.如何从 Linux 配置 GPMC 寄存器? 这应该在哪里进行? 在 Uboot、dtb 文件还是内核中?

2、如何映射 FPGA 的存储器地址0x01000000? 我是否需要保留 CMA 或 cmem 地址范围?

3.我需要编写内核模块还是可以使用 userspace 中的 mmap?

4.如果使用设备树设置,范围和寄存器值是多少?
  我是否需要为 CS0添加子节点... GPMC 寄存器时序或地址映射?


我已向 AM572x-idk.dts 器件树文件中添加了以下内容、但这似乎不起作用。
我缺少什么?


/{
   GPMC_PINS:pinmux_GPMC_PINS{
       pinctrl-single、pins =<
           0xB4 (PIN_OUTPUT 上拉| MUX_MODE0)/* GPMC_cs0.cs0 0x4A00 34B4 *
           0xC0 (PIN_OUTPUT 上拉| MUX_MODE0)/* GPMC_clk.clk 0x4A00 34C0 *
           0xc4 (PIN_INPUT_PULLUP | MUX_MODE0)/* GPMC_advn_ALe.GPIO2_23、不用于 GPMC、 用作测试的 GP 输入*/
           0xC8 (PIN_OUTPUT PULLUP | MUX_MODE0)/* GPMC_oen_ren。oen_ren *
           0xCC (PIN_OUTPLUG_PULLUP | MUX_MODE0)/* GPMC_WN.Wen*/
           0xD0 (PIN_OUTPUT 上拉| MUX_MODE0)/* gpmc_ben0.ben0 0x4A00 34D0 */
           0xD4 (PIN_OUTPUT 上拉| MUX_MODE0)/* gpmc_ben1.ben1 *            
           /* 0xD8 (PIN_INPUT_PULLUP | MUX_MODE14) GPMC_wait0.wait0 */                
                   
           0x00 (PIN_OUTPUT 上拉| MUX_MODE0)/* GPMC_ad0.ad0 0x4A00 3400*/
           0x04 (PIN_OUTPUT 上拉| MUX_MODE0)/* GPMC_ad1.ad1 */
           0x08 (PIN_OUTPUT 上拉| MUX_MODE0)/* GPMC_ad2.ad2 */
           0x0C (PIN_OUTPUT 上拉| MUX_MODE0)/* GPMC_ad3.ad3 */
           0x10 (PIN_OUTPUT 上拉| MUX_MODE0)/* GPMC_AD4.AD4 0x4A00 3410*/
           0x14 (PIN_OUTPUT 上拉| MUX_MODE0)/* GPMC_ad5.ad5 */
           0x18 (PIN_OUTPUT 上拉| MUX_MODE0)/* GPMC_AD6.AD6 */
           0x1C (PIN_OUTPUT 上拉| MUX_MODE0)/* GPMC_AD7.AD7 */
           0x20 (PIN_OUTPUT 上拉| MUX_MODE0)/* GPMC_AD8.ad8 0x4A00 3420*/
           0x24 (PIN_OUTPUT 上拉| MUX_MODE0)/* GPMC_ad9.ad9 */
           0x28 (PIN_OUTPUT 上拉| MUX_MODE0)/* GPMC_ad10.ad10 */
           0x2C (PIN_OUTPUT 上拉| MUX_MODE0)/* GPMC_ad11.ad11 */
           0x30 (PIN_OUTPUT 上拉| MUX_MODE0)/* GPMC_AD12.ad12 0x4A00 3430*/
           0x34 (PIN_OUTPUT 上拉| MUX_MODE0)/* GPMC_ad13.ad13 *
           0x38 (PIN_OUTPUT 上拉| MUX_MODE0)/* GPMC_ad14.ad14 */
           0x3C (PIN_OUTPUT 上拉| MUX_MODE0)/* GPMC_ad15.ad15 */
   
           0x40 (PIN_OUTPUT 上拉| MUX_MODE0)/* GPMC_a0.a0 0x4A00 3440 A0不用于16位*/
           0x44 (PIN_OUTPUT 上拉| MUX_MODE0)/* GPMC_A1.A1 */
           0x48 (PIN_OUTPUT 上拉| MUX_MODE0)/* GPMC_A2.A2 */
           0x4C (PIN_OUTPUT 上拉| MUX_MODE0)/* GPMC_A3.A3 */
           0x50 (PIN_OUTPUT 上拉| MUX_MODE0)/* GPMC_A4.A4 0x4A00 3450*/
           0x54 (PIN_OUTPUT 上拉| MUX_MODE0)/* GPMC_A5.A5 */
           0x58 (PIN_OUTPUT 上拉| MUX_MODE0)/* GPMC_A6.A6 */
           0x5C (PIN_OUTPUT 上拉| MUX_MODE0)/* GPMC_A7.A7 */
           0x60 (PIN_OUTPUT 上拉| MUX_MODE0)/* GPMC_A8.A8 0x4A00 3460*/
           0x64 (PIN_OUTPUT 上拉| MUX_MODE0)/* GPMC_A9.A9 *
           0x68 (PIN_OUTPUT 上拉| MUX_MODE0)/* GPMC_A10.A10 */
           0x6C (PIN_OUTPUT 上拉| MUX_MODE0)/* GPMC_A11.A11 */
           0x70 (PIN_OUTPUT 上拉| MUX_MODE0)/* GPMC_A12.A12 0x4A00 3470*/
       >;
   };
};

GPMC{
   状态="正常";
   pinctrl-names ="default";    
   pinctrl-0 =<&GPMC_PINs>;
   REG =<0x50000000 0x1000000>;
   /*范围=<0 0x08000000 0x1000000>;    CS0:16MB、用于 NAND *
   #address-cells =<2>;
   大小单元格=<1>;
   
   范围=<0 0x01000000 0x1000000>;
   /*范围;*/
};






这些寄存器设置通过 helloworld ARM 应用程序工作。


FPGA_INIT

   

WR_MEM_32 (0x4A0034B4、0x01000000);//CTRL_CORE_PAD_GPMC_CS0启用 cs0

WR_MEM_32 (0x50000060、0x01801003);//GPMC_CONFIG1_I_0异步 GPMC 3 = clk div 4

WR_MEM_32 (0x50000078、0x00000F41);//GPMC_CONFIG7_I_0映射到01000000

WR_MEM_32 (0x4A0034C0、0x01060000);//CTRL_CORE_PAD_GPMC_CLK
WR_MEM_32 (0x4A0034C8、0x01000000);//CTRL_CORE_PAD_GPMC_OEn
WR_MEM_32 (0x4A0034CC、0x01000000);//CTRL_CORE_PAD_GPMC_WEN
WR_MEM_32 (0x4A003400、0x01040000);//CTRL_CORE_PAD_GPMC_AD0
WR_MEM_32 (0x4A003404、0x01040000);//CTRL_CORE_PAD_GPMC_AD1
WR_MEM_32 (0x4A003408、0x01040000);//CTRL_CORE_PAD_GPMC_AD2
WR_MEM_32 (0x4A00340C、0x01040000);//CTRL_CORE_PAD_GPMC_AD3
WR_MEM_32 (0x4A003410、0x01040000);//CTRL_CORE_PAD_GPMC_AD4
WR_MEM_32 (0x4A003414、0x01040000);//CTRL_CORE_PAD_GPMC_AD5
WR_MEM_32 (0x4A003418、0x01040000);//CTRL_CORE_PAD_GPMC_AD6
WR_MEM_32 (0x4A00341C、0x01040000);//CTRL_CORE_PAD_GPMC_AD7
WR_MEM_32 (0x4A003420、0x01040000);//CTRL_CORE_PAD_GPMC_AD8
WR_MEM_32 (0x4A003424、0x01040000);//CTRL_CORE_PAD_GPMC_AD9
WR_MEM_32 (0x4A003428、0x01040000);//CTRL_CORE_PAD_GPMC_AD10
WR_MEM_32 (0x4A00342C、0x01040000);//CTRL_CORE_PAD_GPMC_AD11
WR_MEM_32 (0x4A003430、0x01040000);//CTRL_CORE_PAD_GPMC_AD12
WR_MEM_32 (0x4A003434、0x01040000);//CTRL_CORE_PAD_GPMC_AD13
WR_MEM_32 (0x4A003438、0x01040000);//CTRL_CORE_PAD_GPMC_AD14
WR_MEM_32 (0x4A00343C、0x01040000);//CTRL_CORE_PAD_GPMC_AD15

WR_MEM_32 (0x4A003440、0x01000000);//CTRL_CORE_PAD_GPMC_A0
WR_MEM_32 (0x4A003444、0x01000000);//CTRL_CORE_PAD_GPMC_A1
WR_MEM_32 (0x4A003448、0x01000000);//CTRL_CORE_PAD_GPMC_A2
WR_MEM_32 (0x4A00344C、0x01000000);//CTRL_CORE_PAD_GPMC_A3
WR_MEM_32 (0x4A003450、0x01000000);//CTRL_CORE_PAD_GPMC_A4
WR_MEM_32 (0x4A003454、0x01000000);//CTRL_CORE_PAD_GPMC_A5
WR_MEM_32 (0x4A003458、0x01000000);//CTRL_CORE_PAD_GPMC_A6
WR_MEM_32 (0x4A00345C、0x01000000);//CTRL_CORE_PAD_GPMC_A7
WR_MEM_32 (0x4A003460、0x01000000);//CTRL_CORE_PAD_GPMC_A8
WR_MEM_32 (0x4A003464、0x01000000);//CTRL_CORE_PAD_GPMC_A9
WR_MEM_32 (0x4A003468、0x01000000);//CTRL_CORE_PAD_GPMC_A10
WR_MEM_32 (0x4A00346C、0x01000000);//CTRL_CORE_PAD_GPMC_A11
WR_MEM_32 (0x4A003470、0x01000000);//CTRL_CORE_PAD_GPMC_A12