zoukankan      html  css  js  c++  java
  • linux syscon and regmap study not【转】

    转自:https://blog.csdn.net/scarecrow_byr/article/details/48625085

    linux syscon and regmap study note

    -v0.1 2015.9.19 Sherlock draft
    1. What is regmap and syscon

    regmap was introduced by https://lwn.net/Articles/451789/
    From my understanding, it provided us a set API to read/write non memory-map I/O
    (e.g. I2C and SPI read/write) at first. Then after introduced regmap-mmio.c,
    we can use regmap to access memory-map I/O.

    code path: drivers/base/regmap/*

    syscon was introduced by https://lkml.org/lkml/2012/9/4/568
    It provides a set API to access a misc device(e.g. pci-sas subsystem registers
    in P660) based on regmap, explicitly based on regmap-mmio.c I guess.

    code path: drivers/mfd/*
    2. arch of regmap and syscon

    basic structure of regmap:

    struct regmap: per base address per regmap
    struct regmap_bus: include read/write callback, different “bus”
    (e.g. I2C, SPI, mmio) have different regmap_bus
    struct regmap_mmio_context: don’t know…
    struct regmap_config: confiuration info.

    regmap-mmio call flow:

    /* drivers/base/regmap/regmap-mmio.c */
    __devm_regmap_init_mmio_clk
        --> __devm_regmap_init
            /* regmap_bus(regmap_mmio), config as input, create regmap */
            --> __regmap_init
            /* if don't have bus->read or bus->write */
            --> map->reg_read = _regmap_bus_reg_read;
            --> map->reg_write = _regmap_bus_reg_write;
            ...
            /* if have bus->read */
                --> map->reg_read  = _regmap_bus_read;
                --> map->bus->read

    /* drivers/base/regmap/regmap.c */
    regmap_read(struct regmap *map, unsigned int reg, unsigned int *val)
        --> _regmap_read
            /* _regmap_bus_reg_read */
            --> map->reg_read(context, reg, val);
            --> map->bus->reg_read(map->bus_context, reg, val)

    /* drivers/base/regmap/regmap.c */
    regmap_update_bits
        --> _regmap_update_bits
            --> _regmap_read
        --> _regmap_write
            --> map->reg_write


    basic structure of syscon:

    struct syscon:                 include a strutct regmap; an element in list below
    static LIST_HEAD(syscon_list)

    syscon driver init a regmap:
    syscon->regmap = devm_regmap_init_mmio(dev, base, &syscon_regmap_config);

        1
        2
        3
        4
        5

    3. why we need a syscon to describe a misc device

    To understand this, we shoudl search related discussion in community:
    https://lists.ozlabs.org/pipermail/devicetree-discuss/2012-August/018704.html

    From my understanding, syscon firstly registers a syscon dts node to syscon_list,
    we could find this node when we try to access related registers.
    4. how to use syscon to access a misc device

    e.g.

    need dts node:
        pcie_sas: pcie_sas@0xb0000000 {
            compatible = "hisilicon,pcie-sas-subctrl", "syscon";
            reg = <0xb0000000 0x10000>;
        };

        1
        2
        3
        4
        5

    use below function read/write:

        regmap_read(hisi_pcie->subctrl, PCIE_SUBCTRL_SYS_STATE4_REG +
                0x100 * hisi_pcie->port_id, &val);

        regmap_update_bits(pcie->subctrl, reg, bit_mask, mode << bit_shift);

       
    use below function create struct regmap:

        hisi_pcie->subctrl =
            syscon_regmap_lookup_by_compatible("hisilicon,pcie-sas-subctrl");

        1
        2

    reference:

        Documentation/devicetree/bindings/regmap/regmap.txt
        ../mfd/mfd.txt
        ./syscon.txt
    ————————————————
    版权声明:本文为CSDN博主「sherlock-wang」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/scarecrow_byr/article/details/48625085

  • 相关阅读:
    [Robot Framework] Robot Framework用Execute Javascript对XPath表示的元素执行scrollIntoView操作
    一台机器管理其他都装有kvm的实体机的虚拟机
    阿里云服务器问题
    开发族的跨域问题
    mysql不能连接的原因
    网络命令
    mysql5.7报错端口占用,服务起不来
    nagios的原理及server端跟client端安装配置全部过程
    查看CPU数量和核心数
    iptables的生产场景w
  • 原文地址:https://www.cnblogs.com/sky-heaven/p/13041888.html
Copyright © 2011-2022 走看看