[U-Boot] SUNXI NAND CONTROLLER Driver Model (WIP)

Hi I'm developing a u-boot driver for the sunxi nand controller https://github.com/yassinjaffer/u-boot https://github.com/yassinjaffer/u-boot/tree/sunxi-nand/doc/driver-model. My work is based on bbrezillon mainline driver https://github.com/bbrezillon/linux-sunxi. I would like to move the driver to use the DM framework so I'm wondering if someone could kindly give some suggestions on how to accomplish this. I do know that DM is still WIP but I believe that the nand driver can take advantage of the DM since I'm using the FDT for the run-time configuration.
Thank you in advance.
Yassin Jaffer

Hi Yassin,
On 8 October 2014 18:36, Yassin Jaffer yassinjaffer@gmail.com wrote:
Hi I'm developing a u-boot driver for the sunxi nand controller https://github.com/yassinjaffer/u-boot. My work is based on bbrezillon mainline driver https://github.com/bbrezillon/linux-sunxi. I would like to move the driver to use the DM framework so I'm wondering if someone could kindly give some suggestions on how to accomplish this. I do know that DM is still WIP but I believe that the nand driver can take advantage of the DM since I'm using the FDT for the run-time configuration.
Here are my thoughts. Please be aware that until you actually get into it it's hard to know exactly which path to take.
Also I think you need to be careful about this as some of the files are synced with the Linux kernel and that limits your options. You don't want to turn the code into spaghetti. I think there is a path forward though, but I suggest starting cautiously.
Start with the 'nand' command, which makes mtd calls. You can see the calls that it makes and work from there testing as you go.
Add CONFIG_DM_MTD and use that to change between the old code and the driver model code.
Add a uclass for a NAND driver. I think this corresponds to struct nand_chip.
Then struct nand_chip should become the uclass_priv data for each device (e.g. the sunxi nand controller). You can see how this was done with SPI by looking at the SPI uclass. That means that every device will have this information.
The nand operations should really go in a separate 'ops' structure that is private to the device, so you could #ifdef those out of struct nand_chip.
Once you have an approach please check in with the NAND maintainer too.
Regards, Simon
participants (2)
-
Simon Glass
-
Yassin Jaffer