• Vladimir Oltean's avatar
    net: dsa: felix: update regmap requests to be string-based · 1109b97b
    Vladimir Oltean authored
    Existing felix DSA drivers (vsc9959, vsc9953) are all switches that were
    integrated in NXP SoCs, which makes them a bit unusual compared to the
    usual Microchip branded Ocelot switches.
    
    To be precise, looking at
    Documentation/devicetree/bindings/net/mscc,vsc7514-switch.yaml, one can
    see 21 memory regions for the "switch" node, and these correspond to the
    "targets" of the switch IP, which are spread throughout the guts of that
    SoC's memory space.
    
    In NXP integrations, those targets still exist, but they were condensed
    within a single memory region, with no other peripheral in between them,
    so it made more sense for the driver to ioremap the entire memory space
    of the switch, and then find the targets within that memory space via
    some offsets hardcoded in the driver.
    
    The effect of this design decision is that now, the felix driver expects
    hardware instantiations to provide their own resource definitions, which
    is kind of odd when considering a typical device (those are retrieved
    from 'reg' properties in the device tree, using platform_get_resource()
    or similar).
    
    Allow other hardware instantiations that share the felix driver to not
    provide a hardcoded array of resources in the future. Instead, make the
    common denominator based on which regmaps are created be just the
    resource "names". Each instantiation comes with its own array of names
    that are mandatory for it, and with an optional array of resources.
    
    So we split the resources in 2 arrays, one is what's requested and the
    other is what's provided. There is one pool of provided resources, in
    felix->info->resources (of length felix->info->num_resources). There are
    2 different ways of requesting a resource. One is by enum ocelot_target
    (this handles the global regmaps), and one is by int port (this handles
    the per-port ones).
    
    For the existing vsc9959 and vsc9953, it would be a bit stupid to
    request something that's not provided, given that the 2 arrays are both
    defined in the same place.
    
    The advantage is that we can now modify felix_request_regmap_by_name()
    to make felix->info->resources[] optional, and if absent, the
    implementation can call dev_get_regmap() and this is something that is
    compatible with MFD.
    Co-developed-by: default avatarColin Foster <colin.foster@in-advantage.com>
    Signed-off-by: default avatarColin Foster <colin.foster@in-advantage.com>
    Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    1109b97b
felix_vsc9959.c 77.8 KB