[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1282402579.4799.20.camel@maxim-laptop>
Date: Sat, 21 Aug 2010 17:56:19 +0300
From: Maxim Levitsky <maximlevitsky@...il.com>
To: Alex Dubov <oakad@...oo.com>
Cc: LKML <linux-kernel@...r.kernel.org>,
Andrew Morton <akpm@...ux-foundation.org>
Subject: Re: [PATCH] My work on MemoryStick system
On Sat, 2010-08-21 at 06:50 -0700, Alex Dubov wrote:
> >
> > I just tested this series with Jmicron, and unfortunelly
> > there are bugs.
> >
> > * driver refuses to handle 26 byte TPC I use to read regs
> > (sizeof(ms_registers). If I bump it to 32, it works.
>
> It will work with any multiply of 4 (24 and 28 work as well). It's a known
> "feature".
Then I bump the size of ms_registers to 32 and leave this as is.
OK?
And I add a warning about this feature of some hardwares someplace.
But what about MS_TPC_GET_INT. This asks for single byte.
Hardware has to support it.
>
> >
> > * With this fix first few reads still fail.
> > That means that card isn't detected always because boot
> > blocks might not
> > be read.
> > Later card works fine.
> >
> > * Also I found out that msproblk.c allocates memory for
> > attributes IO
> > using stock kmalloc, and hangs that to driver.
> > However if driver doesn't support such address, it will
> > fail.
>
> Why would hardware do anything at all with attribute memory space?
Read it?
You allocate the memory with kmalloc, create a sg with sg_init_one and
pass that to driver.
So therefore it can be from arbitrary address.
In fact swiotlb takes care of that, and I just forgot the dma_unmap_sg
in my r592.c...
>
> > I fixed that in my driver by properly calling dma_unmap_sg,
> > and thus
> > using SWIOTLB if necessary.
> > But Jmicron driver doesn't unmap its sg.
It does btw, didn't notice....
> > (Yet the system with Jmicron device has just one GB, so
> > this isn't the
> > problem I am seeing).
I found further problems in jmicron driver:
1. Serial mode doesn't work well.
I first read the boot block, and then enable parallel mode.
I do so because boot block has a flag that tells if parallel mode is
supported.
It turns out that sector reads often don't finish, especially first and
often second one which contain boot blocks.
If I enable parallel mode right away problem goes away.
2. the MS_TPC_WRITE_LONG_DATA fail, therefore I can't write anything to
the stick.
As soon as my driver starts to write a block, first
MS_TPC_WRITE_LONG_DATA succeeds, but second one timeouts.
(there is no MS_TPC_GET_INT in between, because of parallel mode).
Maybe I do something wrong in my ms_block.c, but I checked it many
times, and it appears to be correct, and it works fine with r592.c
Best regards,
Maxim Levitsky
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists