arm: vf610: add NAND flash support
Subsystems (2)
v5 cover arm: vf610: add NAND flash support
This patch set adds NAND Flash Controller (NFC) support for Freescale Vybrid ARM SoCs (vf610).
The driver is based on Bill Pringlemeirs prelineary patch sent in January 2014 to the MTD mailing list:
http://lists.infradead.org/pipermail/linux-arm-kernel/2014-January/226623.html
Changes in v5
- Fix style issues
Changes in v4
- Drop preparation patches 1 and 2 since they are already merged upstream
- Add memcpy accessor function vf610_nfc_memcpy
- Remove disabled code
Changes in v3
- Further optimizations in vf610_nfc_send_command(s) to avoid performance hit by additional barriers introduced through using writel/readl
- Removed unnecessary barrier and added comment
- Use void __iomem * as memory base data type
- Set page to -1 on read error to allow reread of pages by the higher layers
- Minor style fixes
Changes in v2:
- Renamed the driver from fsl_nfc to vf610_nfc
- Use writel/readl in register access functions
- Optimized some register accesses by read/write value only once in code
- Use CONFIG_SYS_NAND_SELF_INIT and fix board_nand_init implementation
- Removed uncommented code/fixed comments
- Add CONFIG_USE_ARCH_MEMCPY for improved NAND performance
- Use hweight32 for improved count_written_bits performance
- Implement page_read/page_write rather than reuse MTD stacks version
Stefan Agner (2):
mtd: nand: add Freescale vf610_nfc driver
arm: vf610: add NAND support for vf610twr
board/freescale/vf610twr/vf610twr.c | 47 ++- configs/vf610twr_defconfig | 2 +- configs/vf610twr_nand_defconfig | 3 + drivers/mtd/nand/Makefile | 1 + drivers/mtd/nand/vf610_nfc.c | 724 ++++++++++++++++++++++++++++++++++++ include/configs/vf610twr.h | 46 ++- 6 files changed, 818 insertions(+), 5 deletions(-) create mode 100644 configs/vf610twr_nand_defconfig create mode 100644 drivers/mtd/nand/vf610_nfc.c
Signature · 1 line
2.1.0
PATCH v5 1/2 mtd: nand: add Freescale vf610_nfc driver
This adds initial support for Freescale NFC (NAND Flash Controller) found in ARM Vybrid SoC's, Power Architecture MPC5125 and others. The driver is called vf610_nfc since this is the first supported and tested hardware platform supported by the driver.
--- drivers/mtd/nand/Makefile | 1 + drivers/mtd/nand/vf610_nfc.c | 724 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 725 insertions(+) create mode 100644 drivers/mtd/nand/vf610_nfc.c
drivers/mtd/nand/Makefile +1 -0
@@ -51,6 +51,7 @@ obj-$(CONFIG_NAND_KB9202) += kb9202_nand.o obj-$(CONFIG_NAND_KIRKWOOD) += kirkwood_nand.o obj-$(CONFIG_NAND_KMETER1) += kmeter1_nand.o obj-$(CONFIG_NAND_MPC5121_NFC) += mpc5121_nfc.o +obj-$(CONFIG_NAND_VF610_NFC) += vf610_nfc.o obj-$(CONFIG_NAND_MXC) += mxc_nand.o obj-$(CONFIG_NAND_MXS) += mxs_nand.o obj-$(CONFIG_NAND_NDFC) += ndfc.o
drivers/mtd/nand/vf610_nfc.c new file +724 -0
724 lines not on this page · raw message
Signature · 1 line
2.1.0
PATCH v5 1/2 mtd: nand: add Freescale vf610_nfc driver
Quoted 8 lines · Stefan Agner
This adds initial support for Freescale NFC (NAND Flash Controller) found in ARM Vybrid SoC's, Power Architecture MPC5125 and others. The driver is called
vf610_nfcsince this is the first supported and tested hardware platform supported by the driver.Signed-off-by Stefan Agner <[email protected]>Acked-by Bill Pringlemeir <[email protected]>---
Applied to u-boot-imx, thanks !
Best regards,
Stefano Babic
Signature · 5 lines
===================================================================== DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de =====================================================================
PATCH v5 2/2 arm: vf610: add NAND support for vf610twr
In reply to Stefan AgnerThis adds NAND support for the Vybrid tower system (TWR-VF65GS10) provided by the vf610_nfc driver. Full 16-Bit bus width is supported. Also an aditional config vf610twr_nand is introduced which gets the environment from NAND. However, booting U-Boot from NAND is not yet possible due to missing boot configuration block (BCB).
--- board/freescale/vf610twr/vf610twr.c | 47 ++++++++++++++++++++++++++++++++++--- configs/vf610twr_defconfig | 2 +- configs/vf610twr_nand_defconfig | 3 +++ include/configs/vf610twr.h | 46 +++++++++++++++++++++++++++++++++++- 4 files changed, 93 insertions(+), 5 deletions(-) create mode 100644 configs/vf610twr_nand_defconfig
board/freescale/vf610twr/vf610twr.c +44 -3
@@ -278,6 +278,39 @@ static void setup_iomux_i2c(void)imx_iomux_v3_setup_multiple_pads (i2c0_pads,ARRAY_SIZE (i2c0_pads)); } +#ifdef CONFIG_NAND_VF610_NFC +static void setup_iomux_nfc (void ) +{ +static const iomux_v3_cfg_t nfc_pads[] = { +VF610_PAD_PTD31__NF_IO15 , +VF610_PAD_PTD30__NF_IO14 , +VF610_PAD_PTD29__NF_IO13 , +VF610_PAD_PTD28__NF_IO12 , +VF610_PAD_PTD27__NF_IO11 , +VF610_PAD_PTD26__NF_IO10 , +VF610_PAD_PTD25__NF_IO9 , +VF610_PAD_PTD24__NF_IO8 , +VF610_PAD_PTD23__NF_IO7 , +VF610_PAD_PTD22__NF_IO6 , +VF610_PAD_PTD21__NF_IO5 , +VF610_PAD_PTD20__NF_IO4 , +VF610_PAD_PTD19__NF_IO3 , +VF610_PAD_PTD18__NF_IO2 , +VF610_PAD_PTD17__NF_IO1 , +VF610_PAD_PTD16__NF_IO0 , +VF610_PAD_PTB24__NF_WE_B , +VF610_PAD_PTB25__NF_CE0_B , +VF610_PAD_PTB27__NF_RE_B , +VF610_PAD_PTC26__NF_RB_B , +VF610_PAD_PTC27__NF_ALE , +VF610_PAD_PTC28__NF_CLE + }; + +imx_iomux_v3_setup_multiple_pads (nfc_pads,ARRAY_SIZE (nfc_pads)); +} +#endif + +static void setup_iomux_qspi (void ) {static const iomux_v3_cfg_t qspi0_pads[] = {
@@ -354,6 +387,8 @@ static void clock_init(void) CCM_CCGR7_SDHC1_CTRL_MASK);clrsetbits_le32 (&ccm->ccgr9,CCM_REG_CTRL_MASK ,CCM_CCGR9_FEC0_CTRL_MASK |CCM_CCGR9_FEC1_CTRL_MASK ); +clrsetbits_le32 (&ccm->ccgr10,CCM_REG_CTRL_MASK , +CCM_CCGR10_NFC_CTRL_MASK );clrsetbits_le32 (&anadig->pll2_ctrl,ANADIG_PLL2_CTRL_POWERDOWN ,ANADIG_PLL2_CTRL_ENABLE |ANADIG_PLL2_CTRL_DIV_SELECT );
@@ -373,14 +408,17 @@ static void clock_init(void)CCM_CACRR_IPG_CLK_DIV (1 ) |CCM_CACRR_BUS_CLK_DIV (2 ) | CCM_CACRR_ARM_CLK_DIV(0));clrsetbits_le32 (&ccm->cscmr1,CCM_REG_CTRL_MASK , -CCM_CSCMR1_ESDHC1_CLK_SEL (3 ) |CCM_CSCMR1_QSPI0_CLK_SEL (3 )); +CCM_CSCMR1_ESDHC1_CLK_SEL (3 ) |CCM_CSCMR1_QSPI0_CLK_SEL (3 ) | +CCM_CSCMR1_NFC_CLK_SEL (0 ));clrsetbits_le32 (&ccm->cscdr1,CCM_REG_CTRL_MASK ,CCM_CSCDR1_RMII_CLK_EN );clrsetbits_le32 (&ccm->cscdr2,CCM_REG_CTRL_MASK , -CCM_CSCDR2_ESDHC1_EN |CCM_CSCDR2_ESDHC1_CLK_DIV (0 )); +CCM_CSCDR2_ESDHC1_EN |CCM_CSCDR2_ESDHC1_CLK_DIV (0 ) | +CCM_CSCDR2_NFC_EN );clrsetbits_le32 (&ccm->cscdr3,CCM_REG_CTRL_MASK ,CCM_CSCDR3_QSPI0_EN |CCM_CSCDR3_QSPI0_DIV (1 ) | -CCM_CSCDR3_QSPI0_X2_DIV (1 ) |CCM_CSCDR3_QSPI0_X4_DIV (3 )); +CCM_CSCDR3_QSPI0_X2_DIV (1 ) |CCM_CSCDR3_QSPI0_X4_DIV (3 ) | +CCM_CSCDR3_NFC_PRE_DIV (5 ));clrsetbits_le32 (&ccm->cscmr2,CCM_REG_CTRL_MASK ,CCM_CSCMR2_RMII_CLK_SEL (0 )); }
@@ -411,6 +449,9 @@ int board_early_init_f(void)setup_iomux_enet ();setup_iomux_i2c ();setup_iomux_qspi (); +#ifdef CONFIG_NAND_VF610_NFC +setup_iomux_nfc (); +#endif return 0 ; }
configs/vf610twr_defconfig +1 -1
@@ -1,3 +1,3 @@ -CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/vf610twr/imximage.cfg" +CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/vf610twr/imximage.cfg,ENV_IS_IN_MMC" CONFIG_ARM=y CONFIG_TARGET_VF610TWR=y
configs/vf610twr_nand_defconfig new file +3 -0
@@ -0,0 +1,3 @@ +CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/vf610twr/imximage.cfg,ENV_IS_IN_NAND" +CONFIG_ARM=y +CONFIG_TARGET_VF610TWR=y
include/configs/vf610twr.h +45 -1
68 lines not on this page · raw message
Signature · 1 line
2.1.0
PATCH v5 2/2 arm: vf610: add NAND support for vf610twr
Quoted 9 lines · Stefan Agner
This adds NAND support for the Vybrid tower system (TWR-VF65GS10) provided by the
vf610_nfcdriver. Full 16-Bit bus width is supported. Also an aditional configvf610twr_nandis introduced which gets the environment from NAND. However, booting U-Boot from NAND is not yet possible due to missing boot configuration block (BCB).Signed-off-by Stefan Agner <[email protected]>---
Applied to u-boot-imx, thanks !
Best regards,
Stefano Babic
Signature · 5 lines
===================================================================== DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de =====================================================================