[PATCH v3 for 3.10] Introduce a Marvell EBU MBus driver

Thomas Petazzoni thomas.petazzoni at free-electrons.com
Thu Mar 28 03:33:06 EDT 2013


Dear Neil Greatorex,

On Thu, 28 Mar 2013 01:32:11 +0000, Neil Greatorex wrote:

> This set of patches seems to break the mvsdio driver (and hence
> mwifiex_sdio) on the Globalscale Mirabox. I believe this is because
> mvsdio.c contains a function mv_conf_mbus_windows that seems to
> conflict with the new mbus driver. I don't understand enough about the
> hardware (without the datasheets anyway) to be able to understand the
> exact problem, but I hope that this is enough to point you (or someone
> else) to it!

Thanks for reporting this problem. As Ryan Press said in reply to your
e-mail, it is well known that the mvsdio driver doesn't handle DMA
properly with SDIO devices that are not SD cards, and this, regardless
of whether the mvebu-mbus driver patches are applied or not.

Therefore, are you sure that this problem is really introduced by the
mvebu-mbus driver, and doesn't exist without applying the patches?

The mv_conf_mbus_windows() function of the mvsdio driver doesn't
conflict with the mvebu-mbus driver. What the mvsdio driver does is
request the list of DRAM chip-selects using mv_mbus_dram_info(), and
configure the SDIO unit with those informations in
mv_conf_mbus_windows(). But yes, the list of DRAM chip-selects is
provided by mv_mbus_dram_info() and this function has changed by the
introduction of the mvebu-mbus driver.

I'm on the move right now, so I don't have hardware around to test
this. Would it be possible for you to test the Mirabox with the
following patch applied on mvsdio, and do a run with and without the
patch series that introduces mvebu-mbus? The idea is that the
informations listed should be identical. If not, then indeed there is
potentially a problem with the mvebu-mbus driver.

diff --git a/drivers/mmc/host/mvsdio.c b/drivers/mmc/host/mvsdio.c
index 145cdaf..65648ee 100644
--- a/drivers/mmc/host/mvsdio.c
+++ b/drivers/mmc/host/mvsdio.c
@@ -674,6 +674,8 @@ mv_conf_mbus_windows(struct mvsd_host *host,
 
        for (i = 0; i < dram->num_cs; i++) {
                const struct mbus_dram_window *cs = dram->cs + i;
+               pr_info("mvsdio: CS[%d], base = 0x%x, size = 0x%x, mbus_attr = 0x%x\n",
+                       i, cs->base, cs->size, cs->mbus_attr);
                writel(((cs->size - 1) & 0xffff0000) |
                       (cs->mbus_attr << 8) |
                       (dram->mbus_dram_target_id << 4) | 1,

Thanks a lot!

Thomas
-- 
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com



More information about the linux-arm-kernel mailing list