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:GPMC CS0存储器范围

Guru**** 2595805 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/646748/linux-am5728-gpmc-cs0-memory-range

器件型号:AM5728

工具/软件:Linux

您好!

我想在16位多路复用模式下将 FPGA 连接到 CS0上的 GPMC。

[1] 使用 cs0可以得到的最大范围是多少?

[2]是否可以在用户空间中映射范围?

谢谢、

Mike

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

    请参阅 AM572x TRM 修订版 I 的第15.4.4.8.1节。最大值 范围为256MB。
    2. GPMC 被存储器映射。 您可以直接读取和写入 GPMC 地址。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Biser、

    谢谢您的回复。

    所有 CS 的最大范围为256MB,是否仅限于 cs0 0x80000 - 0x9000000? (范围=<0 0x8000000 0x1000000>;// CS0 @addr 0x8000000、大小0x1000000 *)
    另外,我们需要映射到用户空间的内存地址是0x80000 - 0x9000000?

    谢谢、
    Mike
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    无、最大 单个 CS 的范围为256MB。 总 GPMC 内存范围为512MB、每个 CS 可分为16MB 到256MB 的块。 是的、GPMC 可直接寻址。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Biser、

    以下是我的 dmesg 输出:
    其适用范围为(范围=<0 0x80000 0x1000000>;// CS0 @addr 0x80000、大小为0x1000000 */)

    [0.412138] OMAP-GPMC 50000000。GPMC:找不到节点/ocp/l4@4a000000 / SCM@2000/pinmux@1400/GPMC_PINS_DEFAULT 的 pctldev、推迟
    [2.293694] OMAP-GPMC 50000000。GPMC:GPMC 版本6.0
    [2.298895] GPMC_mem_init:禁用映射在0x0-0x1000000的 CS 0
    [2.305125] gpiochip_add:在器件:OMAP-GPMC 上注册了 GPIO 510至511

    从用户空间访问它的工作方式符合预期:

    $devmem2 0x80000
    /dev/mem 已打开。
    映射到地址 bb6f62000的内存。
    地址0x80000 (0xb6f62000)的值:0x0

    现在,如果我将映射更改为,范围=<0 0x2000000 0x1000000>;/* CS0 @addr 0x80000,大小为0x1000000 */)

    内核经常生成以下警告:

    未处理的故障:异步外部中止(0x1211)、地址为0x00000000
    [55.682066]------ [在此处剪切]-----
    [55.682087]警告:CPU:0 PID:0 AT drivers/bus/omap_l3_oc.c:147 l3_interrupt_handler + 0x25c/0x368 ()
    [55.682094] 44000000.OCP:L3自定义错误:主 MPU 目标 GPMC (读取):在功能访问期间以用户模式访问数据
    [55.682099]模块链接于:
    [55.682106] CPU:0 PID:0 Comm:swapper/0被污染:g W 4.4.3.32-00004-gd9240c6-脏#76
    [55.682109]硬件名称:通用 DRA74X (平展器件树)
    [55.682114]回溯:
    [55.682128][ ](dump_backtrace)从[ ](show_stack+0x18/0x1c)
    [55.682139] r7:c03125c8 r6:20080193 r5:00000000 r4:c0b185f4
    [55.682148][ ](show_stack)从[ ](dump_stack+0x8c/0xa0)
    [55.682159][ ](dump_stack)从[ ](warn_slESpath_common+0x88/b8)
    [55.682170] r7:c03125c8 r6:00000093 r5:00000009 r4:c0aebd30
    [55.682179][ ](warn_slowpath_common)、来自[ ](WARN_RASPH_FMt+0x38/0x40)
    [55.682190] R8:00000017 r7:c09eaab0 R6:00000002 R5:c09eab70 R4:c09eac14
    [55.682199][ ](warn_slowpath_fmt)、来自[ ](L3_INTERRUPT_Handler+0x25c/0x368)
    [55.682205] r3:ea11e40 r2:c09eac14
    [55.682209] R4:80080003
    [55.682219][ ](L3_interrupt_handler)、来自[ ](handle_irq_event_perpu+b0x4/0x160)
    [55.682232] R10:c0b4524a R9:eea0f840 R8:00000017 r7:00000000 R6:00000000 R5:ee0f8a0
    [55.682236] R4:eea213c0
    [55.682244][ ](handle_irq_event_perpu)、来自[ ](handle_IRQ_EVENT_+0x40/0x64)
    [55.682257] R10:c0aec4e4 R9:c07f01e4 R8:ee808000 r7:00000000 R6:c0af24c4 R5:ee0f8a0
    [55.682260] R4:eea0f840
    [55.682269][ ](handle_irq_event)从[ ](handle_fasteoi_IRQ+0xc0/0x194)
    [55.682277] r7:00000000 R6:c0af24c4 r5:eea0f8a0 r4:ee0f840
    [55.682285][ ](handle_fasteoi_IRQ)、来自[ ](generic_handle_IRQ+0x2C/0x3c)
    [55.682294] r7:00000000 R6:00000000 R5:00000017 R4:c0ae6424
    [55.682302][ ](generic_handle_IRQ)、来自[ ](_handle_domain_IRQ+0x64/bb)
    [55.682309][ ](_handle_domain_IRQ)、来自[ ](GIC_Handle_IRQ+0x40/0x7c)
    [55.682321] R9:c07f01e4 R8:fa213000 r7:fa212000 R6:c0aebef0 R5:fa21200c R4:c0aec8b8
    [55.682327][ ](GIC_Handle_IRQ)、来自[ ](_IRQ_Svc+0x40/0x74)
    [55.682331]异常堆栈(0xc0aebef0至0xc0aebf38)
    [55.682336] bee0: 00000001 00000000 fe600000 00000000
    [55.682341] bf00:c0aea000 c0aec484 00000000 c0aebf60 c07f01e4 c0aec4e4 c0aebf4c
    [55.682345] bf20:c0aebf2c c0aebf40 c0026808 c00105c0 60080013 ffff
    [55.682357] R9:c07f01e4 R8:c0aebf60 r7:c0aebf24 R6:ffff R5:60080013 R4:c00105c0
    [55.682368][ ](arch_cpu_idle)从[ ](DEFAULT_IDLE_CALL + 0x28/0x34)
    [55.682376][ ](DEFAULT_IDLE_CALL)从[ ](CPU_STARTUP_END+0x200/0x260)
    [55.682386][ ](CPU_STARTUP_INPUK)、来自[ ](REST_INIT+0x90/0x94)
    [55.682391] r7:00000000
    [55.68239][ ](REST_INIT)从[ ](start_kernel+0x400/0x40c)
    [55.682405] R5:c0b48000 R4:c0b4804c
    [55.682410][ ](start_kernel)从[<80008090>](0x80008090)
    [55.682413]--[结束线迹37124420284daa8f ]--
    [55.985117] PgD = edb76680
    [55.987832][000000000000]* PgD=acc05003、* PMD=fd0c3003


    根据存储器映射- 0x0000_0000 - 0x1FFF_FFFF 是 GPMC 的最大大小。 根据内核日志,禁用范围0x0-0x1000000可能是针对引导加载程序/内核,为什么不允许映射范围=<0 0x2000000 0x1000000>;// CS0 @addr 0x8000000,大小0x1000000 */)针对 CS0?

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

    将基地址从0x800_0000更改为0x200_0000时、请确保相应的 GPMC_CONFIG7_I[5:0]寄存器已更新。

    有关0x200_0000基地址使用情况的更多信息、请参阅以下 e2e 线程:

    e2e.ti.com/.../279485
    e2e.ti.com/.../609586
    e2e.ti.com/.../537769
    e2e.ti.com/.../509629

    此致、
    帕维尔