• Michal Mazur's avatar
    bus: mvebu-mbus: fix support of MBus window 13 on Armada XP/375/38x · 7fdf3d8a
    Michal Mazur authored
    On Armada XP, 375 and 38x the MBus window 13 has the remap capability,
    like windows 0 to 7. However, the mvebu-mbus driver isn't currently
    taking into account this special case, which means that when window 13
    is actually used, the remap registers are left to 0, making the device
    using this MBus window unavailable.
    
    To make things even more fun, the hardware designers have chosen to
    put the window 13 remap registers in a completely custom location,
    using a logic that differs from the one used for all other remappable
    windows.
    
    To solve this problem, this commit:
    
     * Adds a SoC specific function to calculate offset of remap registers
       to the mvebu_mbus_soc_data structure. This function,
       ->win_remap_offset(), returns the offset of the remap registers, or
       MVEBU_MBUS_NO_REMAP if the window does not have the remap
       capability. This new function replaces the previous integer field
       num_remappable_wins, which was insufficient to encode the special
       case of window 13.
    
     * Adds an implementation of the ->win_remap_offset() function for the
       various SoC families. Some have 2 first windows that are remapable,
       some the 4 first, some the 8 first, and then the Armada XP/375/38x
       case where the 8 first are remapable plus the special window
       13. This is implemented in functions
       generic_mbus_win_remap_2_offset(),
       generic_mbus_win_remap_4_offset(),
       generic_mbus_win_remap_8_offset() and
       armada_xp_mbus_win_remap_offset() respectively.
    
     * Change the code to use the ->win_remap_offset() function when
       accessing the remap registers, and also to use a newly introduced
       mvebu_mbus_window_is_remappable() helper function that tells
       whether a given window is remapable or not.
    
     * Separate Armada 370 from XP/375/38X because the window 13 of Armada
       370 does not support the remap capability.
    
    [Thomas: adapted for the mainline kernel, minor clarifications in the
    code, reword the commit log.]
    Signed-off-by: default avatarMichal Mazur <arg@semihalf.com>
    Signed-off-by: default avatarThomas Petazzoni <thomas.petazzoni@free-electrons.com>
    [Andrew Lunn <andrew@lunn.ch>: Undo the simple fix for stable]
    Signed-off-by: default avatarAndrew Lunn <andrew@lunn.ch>
    7fdf3d8a
mvebu-mbus.c 31.9 KB