Libertas with if_spi on pxa270
Mike Rapoport
mike at compulab.co.il
Tue Jan 27 06:51:40 EST 2009
Dan,
Dan Williams wrote:
> On Mon, 2009-01-26 at 18:24 +0200, Mike Rapoport wrote:
>> Dan Williams wrote:
>>> On Mon, 2009-01-26 at 16:58 +0200, Mike Rapoport wrote:
>>>> Hi,
>>>>
>>>> Have anybody tried to use 8686 with G-SPI on PXA270?
>>>> I've merged libertas-related changes from wireless-testing tree on top of
>>>> 2.6.29-rc2, added a "libertas_spi" device to my platform code, but all I could
>>>> get from the if_spi was "libertas: Can't read bus mode register." :(
>>> Have you set up the Chip Select stuff correctly for your board (see
>>> gpio_cs in the platform data)? That seems to be board-dependent and
>>> there's not a good generic way of doing this in the current kernel
>>> sources.
>>>
>>> That error is the first error that will get reported when the driver
>>> actually tries to talk to the card, which requires that the Chip Select
>>> stuff be set up correctly. If you think you've got that already set up,
>>> can you manually inspect whether or not the libertas device has actually
>>> been selected on the board?
>> The first thing I've done was to recheck GPIO setup and platform_data for all
>> SPI related stuff.
>> I've even inserted GPIO setup function at the very beginning of if_spi_probe.
>> The Marvell proprietary driver works well on the same board and exactly same
>> GPIOs setup.
>
> Ok, Colin McCabe will probably need to get involved here then since he
> wrote those bits :)
You were right about possible problems with my board setup. The 8686 requires
SPI clock pin to be high at power up to start with G-SPI rather than SDIO. That
part was missing from my board setup.
Still I needed to alter the if_spi.c to make it work. First of all, I think it
makes sence to add
spi->bits_per_word = 16;
spi_setup(spi);
at the beginning of if_spi_probe.
Another thing, it's possible worth adding ability to call platform specific
init/exit functions supplied with libertas_spi_platform_data.
After the driver begun to work I've noted that it's performance is not as good
as I expected. The reason for it is that PXA SPI requires buffers to be 8-byte
aligned to use DMA. And, indeed, changing alignment from 4 to 8 throughout the
if_spi.c gave me x2 boost in large file transfer rate. I've thought about adding
a LIBERTAS_SPI_DMA_ALIGN option to drivers/net/wireless/Kconfig to allow
platforms to select required DMA alignment.
If it sounds reasonable, I can send a patch with the proposed changes.
> Dan
>
>
--
Sincerely yours,
Mike.
More information about the libertas-dev
mailing list