需要帮助以在DTB中添加64位MMAP设备

发布于 2025-02-01 02:53:46 字数 1791 浏览 5 评论 0原文

有人可以帮助启用64位注册MMAP设备到ARM64 Linux内核DTB。 在我的平台Linux内核设备驱动程序中, *( res) - > start 使用' reg> reg 'dtb和 *resource_size( res)的第1个条目>使用' reg 'dtb的第二个条目。

dev: dev@8000000000 {
        #address-cells = <2>;
        #size-cells = <1>;
        compatible = "nxp,dev-1.0";
        reg-names = "dev0", "dev1";

        reg = <0x00000080 0x00000000 0x01FFFFFF>,//Inst0 0x80_0000_0000 to 0x80_1FFF_FFFF
              <0x00000080 0x50000000 0x01FFFFFF>;//Inst1 0x80_5000_0000 to 0x80_6FFF_FFFF
        interrupts = <0 170 0>;
        interrupt-parent = <&intc>;
};

驱动程序:

    *res = platform_get_resource_byname(pdev, IORESOURCE_MEM, name);
    if (*res == NULL) {
            dev_err(device, "resource %s not found!\n", name);
            return -ENODEV;
    }

    printk("sizeof((*res)->start) %d \n", sizeof((*res)->start));
    printk("sizeof((*res)->end) %d \n", sizeof((*res)->end));

    printk("\n\nNAME %s, (*res)->start 0x%llx, resource_size(*res) 0x%llx dev_name(device) %s \n\n", name, (*res)->start, resource_size(*res), dev_name(device));

    region = devm_request_mem_region(device, (*res)->start,
                                     resource_size(*res), dev_name(device));

log:

sizeof((*res)->start) 8
sizeof((*res)->end) 8


NAME dev0, (*res)->start 0x80, resource_size(*res) 0x0 dev_name(device) 80.dev

80.dev: unable to request dev0
request_and_map() failed for dev0
sizeof((*res)->start) 8
sizeof((*res)->end) 8


NAME dev1, (*res)->start 0x1ffffff, resource_size(*res) 0x80 dev_name(device) 80.dev

80.dev: unable to request dev1

Could someone help to enable 64bit register mmap device to ARM64 linux kernel dtb.
In my platform linux kernel device driver, *(res)->start uses 1st entry of 'reg' dtb and *resource_size(res) uses 2nd entry of 'reg' dtb.

dev: dev@8000000000 {
        #address-cells = <2>;
        #size-cells = <1>;
        compatible = "nxp,dev-1.0";
        reg-names = "dev0", "dev1";

        reg = <0x00000080 0x00000000 0x01FFFFFF>,//Inst0 0x80_0000_0000 to 0x80_1FFF_FFFF
              <0x00000080 0x50000000 0x01FFFFFF>;//Inst1 0x80_5000_0000 to 0x80_6FFF_FFFF
        interrupts = <0 170 0>;
        interrupt-parent = <&intc>;
};

Driver:

    *res = platform_get_resource_byname(pdev, IORESOURCE_MEM, name);
    if (*res == NULL) {
            dev_err(device, "resource %s not found!\n", name);
            return -ENODEV;
    }

    printk("sizeof((*res)->start) %d \n", sizeof((*res)->start));
    printk("sizeof((*res)->end) %d \n", sizeof((*res)->end));

    printk("\n\nNAME %s, (*res)->start 0x%llx, resource_size(*res) 0x%llx dev_name(device) %s \n\n", name, (*res)->start, resource_size(*res), dev_name(device));

    region = devm_request_mem_region(device, (*res)->start,
                                     resource_size(*res), dev_name(device));

Log:

sizeof((*res)->start) 8
sizeof((*res)->end) 8


NAME dev0, (*res)->start 0x80, resource_size(*res) 0x0 dev_name(device) 80.dev

80.dev: unable to request dev0
request_and_map() failed for dev0
sizeof((*res)->start) 8
sizeof((*res)->end) 8


NAME dev1, (*res)->start 0x1ffffff, resource_size(*res) 0x80 dev_name(device) 80.dev

80.dev: unable to request dev1

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文