View Single Post
Posts: 110 | Thanked: 362 times | Joined on May 2014
#11
Does anyone know how to increase the speed of sdio_memcpy_toio? It kind of sleeps after each call..

I used a lattice ice40hx8k breakout board and the icestorm tools to build a sdio memory/network card.

I hacked together two drivers one network card and a one block device.

But i used the linux sdio subsystem. It seems it doesnt use a double buffer and is sleeping half the time (confirmed by la). So i only get 6MByte random io at 30mhz, 4 channels at 4kbyte blocksize. (should be around 10MByte) Increasing frequency leads to further diminishing returns. Not fast enough compared to a good sd card.. (I cant go faster than 35 Mhz cause the lattice board alone is huge so long traces)

Why did i use sdio in the first place. Cause as a first step a sdio network card is nice target that gives you some possibilities.
I want a connection to low power memory (which is probably on a som/soc), so a symmetrical setup made sense. So you can connect whatever som/soc you choose/ is available. sdio support is in mainline and may have hw interrupt support on some platforms. Despite the insane sdio init sequence it is not as insane as sd/mmc init sequence.

My current working sdio network setup between two n900 is at around 1Mbyte/s. It uses 512Byte block transfers and has multiple remote buffers so streaming is possible.
It currently does not make sense, cause n900 has no linux sdio hardware interrupt support and the hx8k has "only" 16kbyte ram so no buffer and one n900 has to "spin" wait to transfer data fast. (and this sdio spinning is not that fast)
The kernel has build in polling support via cmd53 which is kind of useless, cause you cant transfer enough data and you have to poll for the state anyway.

Good news: sdio is working in kernel-power53 after a tiny kernel patch.

For "low" speed the hx8k is not a good chip cause there are no simple ready small cheap tested boards, it is bga so designing a board is not as simple as it should be and finally it has not enough memory to buffer enough data for 2 non sdio hw interrupt devices.
Adding memory feels kind of wrong (powerwise, another "useless" ic, to small memory sizes, many traces).
The best fitting board found is the icezero. But it has zeros dimensions and the hx4k which im not sure is big enough yet. Most other devices use 5V supply.

So for fast memory via sdio low power ram is still missing and the linux sdio subsystem currently doesnt allow "very" fast io. Maybe i can reuse the transfer parts of the sd/mmc driver. But i need to find cheap low power "low latency" memory first.

The more i learn about linux kernel the less i like it.
 

The Following 4 Users Say Thank You to pythoneye2 For This Useful Post: