Commit 38bdf45f4aa5cb6186d50a29e6cbbd9d486a1519

Authored by Andrew Lunn
1 parent 8f1e8ee286

bus: mvebu-mbus: fix support of MBus window 13

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.

As a minimal fix for stable, don't use window 13. A full fix will
follow later.

Fixes: fddddb52a6c ("bus: introduce an Marvell EBU MBus driver")
Cc: <stable@vger.kernel.org> # v3.10+
Reviewed-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Andrew Lunn <andrew@lunn.ch>

Showing 1 changed file with 13 additions and 0 deletions Side-by-side Diff

drivers/bus/mvebu-mbus.c
... ... @@ -210,12 +210,25 @@
210 210 }
211 211  
212 212 /* Checks whether the given window number is available */
  213 +
  214 +/* On Armada XP, 375 and 38x the MBus window 13 has the remap
  215 + * capability, like windows 0 to 7. However, the mvebu-mbus driver
  216 + * isn't currently taking into account this special case, which means
  217 + * that when window 13 is actually used, the remap registers are left
  218 + * to 0, making the device using this MBus window unavailable. The
  219 + * quick fix for stable is to not use window 13. A follow up patch
  220 + * will correctly handle this window.
  221 +*/
213 222 static int mvebu_mbus_window_is_free(struct mvebu_mbus_state *mbus,
214 223 const int win)
215 224 {
216 225 void __iomem *addr = mbus->mbuswins_base +
217 226 mbus->soc->win_cfg_offset(win);
218 227 u32 ctrl = readl(addr + WIN_CTRL_OFF);
  228 +
  229 + if (win == 13)
  230 + return false;
  231 +
219 232 return !(ctrl & WIN_CTRL_ENABLE);
220 233 }
221 234