• Vladimir Oltean's avatar
    net: mscc: ocelot: introduce a new ocelot_target_{read,write} API · 3c0e37a9
    Vladimir Oltean authored
    There are some targets (register blocks) in the Ocelot switch that are
    instantiated more than once. For example, the VCAP IS1, IS2 and ES0
    blocks all share the same register layout for interacting with the cache
    for the TCAM and the action RAM.
    
    For the VCAPs, the procedure for servicing them is actually common. We
    just need an API specifying which VCAP we are talking to, and we do that
    via these raw ocelot_target_read and ocelot_target_write accessors.
    
    In plain ocelot_read, the target is encoded into the register enum
    itself:
    
    	u16 target = reg >> TARGET_OFFSET;
    
    For the VCAPs, the registers are currently defined like this:
    
    	enum ocelot_reg {
    	[...]
    		S2_CORE_UPDATE_CTRL = S2 << TARGET_OFFSET,
    		S2_CORE_MV_CFG,
    		S2_CACHE_ENTRY_DAT,
    		S2_CACHE_MASK_DAT,
    		S2_CACHE_ACTION_DAT,
    		S2_CACHE_CNT_DAT,
    		S2_CACHE_TG_DAT,
    	[...]
    	};
    
    which is precisely what we want to avoid, because we'd have to duplicate
    the same register map for S1 and for S0, and then figure out how to pass
    VCAP instance-specific registers to the ocelot_read calls (basically
    another lookup table that undoes the effect of shifting with
    TARGET_OFFSET).
    
    So for some targets, propose a more raw API, similar to what is
    currently done with ocelot_port_readl and ocelot_port_writel. Those
    targets can only be accessed with ocelot_target_{read,write} and not
    with ocelot_{read,write} after the conversion, which is fine.
    
    The VCAP registers are not actually modified to use this new API as of
    this patch. They will be modified in the next one.
    Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
    Acked-by: default avatarAlexandre Belloni <alexandre.belloni@bootlin.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    3c0e37a9
ocelot.h 21.3 KB