了解Linux RegMap' d devm_regmap_init_mmio

发布于 2025-01-23 08:02:24 字数 896 浏览 3 评论 0原文

我想知道,如何使用Devm_regmap_init_mmio()将16个字节的regmap导出(跨越两个子区域)。例如,从Linux中的一个驱动程序中:

    regs = devm_platform_ioremap_resource_byname(pdev, "ehb");
    if (IS_ERR(regs)) {
        dev_err(apb->dev, "Couldn't map APB EHB registers\n");
        return PTR_ERR(regs);
    }

    apb->regs = devm_regmap_init_mmio(apb->dev, regs, &bt1_apb_regmap_cfg);
    if (IS_ERR(apb->regs)) {
        dev_err(apb->dev, "Couldn't create APB EHB regmap\n");
        return PTR_ERR(apb->regs);

'带有BT1_APB_REGMAP_CFG填充的填充,

     static const struct regmap_config bt1_apb_regmap_cfg = {
    .reg_bits = 32,
    .val_bits = 32,
    .reg_stride = 4,
    .max_register = APB_EHB_TIMEOUT,
    .fast_io = true
};

看起来整个寄存器范围是使用devm_regmap_init_mmio导出的整个寄存器范围,但是是否有一种方法可以将仅导出16个野蛮人跨越四个寄存器?

另外,这些字段是什么.max_register和.reg_stride在这里意味着?

I would like to know, how devm_regmap_init_mmio() can be used to export a regmap for 16 bytes (span over two subregions). For instance, from one of the driver in Linux:

    regs = devm_platform_ioremap_resource_byname(pdev, "ehb");
    if (IS_ERR(regs)) {
        dev_err(apb->dev, "Couldn't map APB EHB registers\n");
        return PTR_ERR(regs);
    }

    apb->regs = devm_regmap_init_mmio(apb->dev, regs, &bt1_apb_regmap_cfg);
    if (IS_ERR(apb->regs)) {
        dev_err(apb->dev, "Couldn't create APB EHB regmap\n");
        return PTR_ERR(apb->regs);

' with bt1_apb_regmap_cfg filled as

     static const struct regmap_config bt1_apb_regmap_cfg = {
    .reg_bits = 32,
    .val_bits = 32,
    .reg_stride = 4,
    .max_register = APB_EHB_TIMEOUT,
    .fast_io = true
};

here looks like whole register range is exported using devm_regmap_init_mmio but is there a way to export only 16 byters span across four register ?

Also, what are these fields .max_register and .reg_stride means here ?

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

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

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

凑诗 2025-01-30 08:02:24

max_register表示寄存器范围从0x1000到0x1040,而不是
max_register = 0x40

reg_stride表示寄存器地址应为此值的多个

max_register means if the register range is from 0x1000 to 0x1040 than than
max_register = 0x40

reg_stride means the register address should be multiple of this value

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文