Implementing NAND driver on a PrimeCell SMC PL350 series

Ricard Wanderlof ricard.wanderlof at axis.com
Fri Jan 11 06:02:28 EST 2013


On Fri, 11 Jan 2013, Daniel Tang wrote:

> I'm trying to write a NAND driver for the PL350 memory controller.
>
> The problem is that the memory controller abstracts quite a lot of the 
> processes needed to access the NAND. For example, the controller handles 
> all the hardware controlling (like dealing with the CLE and ALE lines). 
> This makes it difficult to write a driver that integrates cleanly with 
> the current NAND subsystem of the kernel.
>
> The issue specifically is the cmd_ctrl function that my driver needs to 
> provide. When the kernel needs to write a command and address, it calls 
> the function multiple times to write all the information. E.g. set CLE, 
> write command, set ALE, then write one byte of the page address at a 
> time. The controller, on the other hand, needs all that information to 
> be in a single write to the controller. It does this by embedding the 
> command into the address and have the data value be the page address.

Have you looked among the existing NAND controller drivers in 
drivers/mtd/nand to see if there's another driver which has similar 
requirements which you could use as a starting point? It's not unusual for 
NAND controllers to do some of the operations automatically, and the mtd 
framework supports this by letting you replace higher-level functions with 
functions from the driver, and not just the low-level functions such as 
hwcontrol and read_byte.

/Ricard
-- 
Ricard Wolf Wanderlöf                           ricardw(at)axis.com
Axis Communications AB, Lund, Sweden            www.axis.com
Phone +46 46 272 2016                           Fax +46 46 13 61 30



More information about the linux-mtd mailing list