Hi!
We've got a custom board similar to Nitrogen6X (and SabreLite), where we've mounted a 8GB NAND chip (my schematic says K9LBG08U0D-PCB0). I cannot, however, seem to find an existing i.MX6 board that uses any chips like this.
I think my pads have been setup quite fine, but I'm struggeling with the NAND partitioning and drivers.
- How can I patch up my kernel board-config to setup NAND flash?
- Can my NAND-chip be auto-detected in any way?
- Where can I find a board-config example that uses a large NAND chip for main storage (and perhaps even sets up Android partitioning)
- What driver should I use for my NAND? "mxc_nand"? I see some use "physmap-flash" but that may be something entirely different
Thanks in advance,
Kristian
已解决! 转到解答。
Kristian,
Have you tried a basic init? You can take as example the init on "board-mx6q-sabreauto.c" in Linux 3.0.35. Or our config (very simple):
static int __init es6_gpmi_nand_platform_init(void)
{
return 0;
}
static const struct gpmi_nand_platform_data
es6_gpmi_nand_platform_data __initconst = {
.platform_init = es6_gpmi_nand_platform_init,
.min_prop_delay_in_ns = 5,
.max_prop_delay_in_ns = 9,
.max_chip_count = 1,
.enable_bbt = 1,
};
imx6q_add_gpmi(&es6_gpmi_nand_platform_data); // On Board Init.
With the above simple code and adding support for "nand flash", "mtd" and "ubi", the kernel should detect your device. We have tested two devices of 512MB (8 bit) from Micron and Spansion: both are recognized but the second one doesn't work with this Kernel.
Good luck!
In the end, this was very helpful. Not all board definitions, even from freescale, properly start up the gpmi code. HOWEVER, in addition to just the "simple" code above, the MUX tables are required.
Regardless, this was an excellent hint. If your gpmi driver is not getting started properly, and you're not getting a chip detection, this is a good place to start looking.
Kristian,
Have you tried a basic init? You can take as example the init on "board-mx6q-sabreauto.c" in Linux 3.0.35. Or our config (very simple):
static int __init es6_gpmi_nand_platform_init(void)
{
return 0;
}
static const struct gpmi_nand_platform_data
es6_gpmi_nand_platform_data __initconst = {
.platform_init = es6_gpmi_nand_platform_init,
.min_prop_delay_in_ns = 5,
.max_prop_delay_in_ns = 9,
.max_chip_count = 1,
.enable_bbt = 1,
};
imx6q_add_gpmi(&es6_gpmi_nand_platform_data); // On Board Init.
With the above simple code and adding support for "nand flash", "mtd" and "ubi", the kernel should detect your device. We have tested two devices of 512MB (8 bit) from Micron and Spansion: both are recognized but the second one doesn't work with this Kernel.
Good luck!
Thanks Manuel, for pointing me in the right direction. I had tried that before, but my "es6_gpmi_nand_platform_init" was never called so I started looking elsewhere. It turned out I was missing CONFIG_MTD_NAND_GPMI_NAND=y. My flash is now detected:
NAND device: Manufacturer ID: 0x2c, Chip ID: 0x64 (Micron MT29F64G08CBABBWP)
gpmi-nand imx6q-gpmi-nand.0: enable asynchronous EDO mode 5
mtd: Giving out device 0 to gpmi-nand
GPMI NAND driver registered. (IMX)
Thanks!
Krist