From 364c3aadfde81e20adf51efdeae0bb8347c663c2 Mon Sep 17 00:00:00 2001 From: Alexander Aring Date: Thu, 5 Jan 2012 12:03:29 +0100 Subject: [PATCH 1/6] ioctl: add support for ECCGETSTATS and MEMGETREGIONINFO Support added for ioctl of ECCGETSTATS and MEMGETREGIONINFO. Fix default handling in core.c to return -EINVAL, if request was unknown. Signed-off-by: Alexander Aring Signed-off-by: Sascha Hauer --- drivers/mtd/core.c | 31 +++++++++++++++++++++++++++---- fs/devfs-core.c | 39 +++++++++++++++++++++++++++++++++------ 2 files changed, 60 insertions(+), 10 deletions(-) diff --git a/drivers/mtd/core.c b/drivers/mtd/core.c index f25863dad..ab4babddc 100644 --- a/drivers/mtd/core.c +++ b/drivers/mtd/core.c @@ -116,17 +116,22 @@ out: int mtd_ioctl(struct cdev *cdev, int request, void *buf) { + int ret = 0; struct mtd_info *mtd = cdev->priv; struct mtd_info_user *user = buf; + struct mtd_ecc_stats *ecc = buf; + struct region_info_user *reg = buf; switch (request) { case MEMGETBADBLOCK: dev_dbg(cdev->dev, "MEMGETBADBLOCK: 0x%08lx\n", (off_t)buf); - return mtd->block_isbad(mtd, (off_t)buf); + ret = mtd->block_isbad(mtd, (off_t)buf); + break; #ifdef CONFIG_MTD_WRITE case MEMSETBADBLOCK: dev_dbg(cdev->dev, "MEMSETBADBLOCK: 0x%08lx\n", (off_t)buf); - return mtd->block_markbad(mtd, (off_t)buf); + ret = mtd->block_markbad(mtd, (off_t)buf); + break; #endif case MEMGETINFO: user->type = mtd->type; @@ -138,10 +143,28 @@ int mtd_ioctl(struct cdev *cdev, int request, void *buf) /* The below fields are obsolete */ user->ecctype = -1; user->eccsize = 0; - return 0; + break; +#if (defined(CONFIG_NAND_ECC_HW) || defined(CONFIG_NAND_ECC_SOFT)) + case ECCGETSTATS: + ecc->corrected = mtd->ecc_stats.corrected; + ecc->failed = mtd->ecc_stats.failed; + ecc->badblocks = mtd->ecc_stats.badblocks; + ecc->bbtblocks = mtd->ecc_stats.bbtblocks; + break; +#endif + case MEMGETREGIONINFO: + if (cdev->mtd) { + reg->offset = cdev->offset; + reg->erasesize = cdev->mtd->erasesize; + reg->numblocks = cdev->size/reg->erasesize; + reg->regionindex = cdev->mtd->index; + } + break; + default: + ret = -EINVAL; } - return 0; + return ret; } #ifdef CONFIG_MTD_WRITE diff --git a/fs/devfs-core.c b/fs/devfs-core.c index 5f22ce72f..e11fea2ea 100644 --- a/fs/devfs-core.c +++ b/fs/devfs-core.c @@ -103,15 +103,18 @@ int cdev_flush(struct cdev *cdev) static int partition_ioctl(struct cdev *cdev, int request, void *buf) { + int ret = 0; size_t offset; struct mtd_info_user *user = buf; + struct region_info_user *reg = buf; switch (request) { case MEMSETBADBLOCK: case MEMGETBADBLOCK: offset = (off_t)buf; offset += cdev->offset; - return cdev->ops->ioctl(cdev, request, (void *)offset); + ret = cdev->ops->ioctl(cdev, request, (void *)offset); + break; case MEMGETINFO: if (cdev->mtd) { user->type = cdev->mtd->type; @@ -123,14 +126,38 @@ static int partition_ioctl(struct cdev *cdev, int request, void *buf) /* The below fields are obsolete */ user->ecctype = -1; user->eccsize = 0; - return 0; + break; } - if (!cdev->ops->ioctl) - return -EINVAL; - return cdev->ops->ioctl(cdev, request, buf); + if (!cdev->ops->ioctl) { + ret = -EINVAL; + break; + } + ret = cdev->ops->ioctl(cdev, request, buf); + break; +#if (defined(CONFIG_NAND_ECC_HW) || defined(CONFIG_NAND_ECC_SOFT)) + case ECCGETSTATS: + if (!cdev->ops->ioctl) { + ret = -EINVAL; + break; + } + ret = cdev->ops->ioctl(cdev, request, buf); + break; +#endif +#ifdef CONFIG_PARTITION + case MEMGETREGIONINFO: + if (cdev->mtd) { + reg->offset = cdev->offset; + reg->erasesize = cdev->mtd->erasesize; + reg->numblocks = cdev->size/reg->erasesize; + reg->regionindex = cdev->mtd->index; + } + break; +#endif default: - return -EINVAL; + ret = -EINVAL; } + + return ret; } int cdev_ioctl(struct cdev *cdev, int request, void *buf) From 75a646755c128a2289c87f17eb82eae549aec902 Mon Sep 17 00:00:00 2001 From: Alexander Aring Date: Thu, 5 Jan 2012 12:03:30 +0100 Subject: [PATCH 2/6] nandtest: fix typo Fix typo nand -> nandtest. Signed-off-by: Alexander Aring Signed-off-by: Sascha Hauer --- commands/nandtest.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/commands/nandtest.c b/commands/nandtest.c index 3a955e93f..9f41ae2fa 100644 --- a/commands/nandtest.c +++ b/commands/nandtest.c @@ -349,7 +349,7 @@ err: /* String for usage of nandtest */ static const __maybe_unused char cmd_nandtest_help[] = -"Usage: nand [OPTION] \n" +"Usage: nandtest [OPTION] \n" " -t, Really do a nandtest on device.\n" " -m, Mark blocks bad if they appear so.\n" " -s , Supply random seed.\n" From 58ad6c152a181434c0bd6a862be0f0ff5d134d8a Mon Sep 17 00:00:00 2001 From: Alexander Aring Date: Thu, 5 Jan 2012 14:56:03 +0100 Subject: [PATCH 3/6] nandtest: add missing select. Add select PARTITION_NEED_MTD in nandtest. Signed-off-by: Alexander Aring Signed-off-by: Sascha Hauer --- commands/Kconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/commands/Kconfig b/commands/Kconfig index 6f9ccb82c..17e66570f 100644 --- a/commands/Kconfig +++ b/commands/Kconfig @@ -178,6 +178,7 @@ config CMD_NANDTEST depends on NAND depends on PARTITION depends on NAND_ECC_HW || NAND_ECC_SOFT + select PARTITION_NEED_MTD prompt "nandtest" endmenu From 1c5f4ffd5721849f5d239b5b17642a3a1c96433c Mon Sep 17 00:00:00 2001 From: Alexander Aring Date: Thu, 5 Jan 2012 14:56:04 +0100 Subject: [PATCH 4/6] twl6030: add missing twl6030 header file. Add missing twl6030 header file. Signed-off-by: Alexander Aring Signed-off-by: Sascha Hauer --- include/mci/twl6030.h | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 include/mci/twl6030.h diff --git a/include/mci/twl6030.h b/include/mci/twl6030.h new file mode 100644 index 000000000..0ca828c11 --- /dev/null +++ b/include/mci/twl6030.h @@ -0,0 +1,10 @@ +/* + * TWL6030 header file. + */ + +#ifndef __MCI_TWL6030_H__ +#define __MCI_TWL6030_H__ + +void twl6030_mci_power_init(void); + +#endif From 8eeab1778b2299a3002363f0cda9fd741e2b5123 Mon Sep 17 00:00:00 2001 From: Sanjeev Premi Date: Wed, 11 Jan 2012 20:27:18 +0530 Subject: [PATCH 5/6] ARM omap: Use updated config option The config option CONFIG_GPMC is renamed to CONFIG_OMAP_GPMC as result of this commit: 819f416b86b0d4ad3b6e1ec6375a626aabb96bbd Still, sources continue to use CONFIG_GPMC. Fix it. Signed-off-by: Sanjeev Premi Signed-off-by: Sascha Hauer --- arch/arm/boards/omap/board-beagle.c | 2 +- arch/arm/boards/omap/board-omap3evm.c | 2 +- arch/arm/boards/omap/board-sdp343x.c | 2 +- arch/arm/boards/phycard-a-l1/pca-a-l1.c | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/arch/arm/boards/omap/board-beagle.c b/arch/arm/boards/omap/board-beagle.c index e5f0f9449..5f8c2df72 100644 --- a/arch/arm/boards/omap/board-beagle.c +++ b/arch/arm/boards/omap/board-beagle.c @@ -298,7 +298,7 @@ static int beagle_devices_init(void) add_usb_ehci_device(-1, 0x48064700 + 0x100, 0x48064700 + 0x110, &ehci_pdata); #endif /* CONFIG_USB_EHCI_OMAP */ -#ifdef CONFIG_GPMC +#ifdef CONFIG_OMAP_GPMC /* WP is made high and WAIT1 active Low */ gpmc_generic_init(0x10); #endif diff --git a/arch/arm/boards/omap/board-omap3evm.c b/arch/arm/boards/omap/board-omap3evm.c index d2f041ad7..9e96bc8f8 100644 --- a/arch/arm/boards/omap/board-omap3evm.c +++ b/arch/arm/boards/omap/board-omap3evm.c @@ -246,7 +246,7 @@ mem_initcall(omap3evm_mem_init); static int omap3evm_init_devices(void) { -#ifdef CONFIG_GPMC +#ifdef CONFIG_OMAP_GPMC /* * WP is made high and WAIT1 active Low */ diff --git a/arch/arm/boards/omap/board-sdp343x.c b/arch/arm/boards/omap/board-sdp343x.c index d486c20d7..73aefb2d6 100644 --- a/arch/arm/boards/omap/board-sdp343x.c +++ b/arch/arm/boards/omap/board-sdp343x.c @@ -635,7 +635,7 @@ mem_initcall(sdp3430_mem_init); static int sdp3430_devices_init(void) { -#ifdef CONFIG_GPMC +#ifdef CONFIG_OMAP_GPMC /* WP is made high and WAIT1 active Low */ gpmc_generic_init(0x10); #endif diff --git a/arch/arm/boards/phycard-a-l1/pca-a-l1.c b/arch/arm/boards/phycard-a-l1/pca-a-l1.c index 6fe27b711..7b127f365 100644 --- a/arch/arm/boards/phycard-a-l1/pca-a-l1.c +++ b/arch/arm/boards/phycard-a-l1/pca-a-l1.c @@ -286,7 +286,7 @@ static void pcaal1_setup_net_chip(void) static int pcaal1_mem_init(void) { -#ifdef CONFIG_GPMC +#ifdef CONFIG_OMAP_GPMC /* * WP is made high and WAIT1 active Low */ From e54e3289aa12401927cb8e6184b0550ccd0c7319 Mon Sep 17 00:00:00 2001 From: Sanjeev Premi Date: Wed, 11 Jan 2012 20:27:19 +0530 Subject: [PATCH 6/6] ARM omap3beagle: Fix incorrect base addresses The base address passed for device "omap-hsmmc" was incorrectly passed as OMAP_I2C1_BASE and the base address for device "i2c-omap" was hardcoded to 0x4809C000 which, in fact, refers to OMAP_MMC1_BASE. Similarly, in call to add_usb_ehci_device(), addition is not required if right base address is used. In fact, 0x48064700 (used as base in the addition) falls in the OHCI Address space. Signed-off-by: Sanjeev Premi Signed-off-by: Sascha Hauer --- arch/arm/boards/omap/board-beagle.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/arch/arm/boards/omap/board-beagle.c b/arch/arm/boards/omap/board-beagle.c index 5f8c2df72..9f0acad4f 100644 --- a/arch/arm/boards/omap/board-beagle.c +++ b/arch/arm/boards/omap/board-beagle.c @@ -290,13 +290,13 @@ mem_initcall(beagle_mem_init); static int beagle_devices_init(void) { i2c_register_board_info(0, i2c_devices, ARRAY_SIZE(i2c_devices)); - add_generic_device("i2c-omap", -1, NULL, 0x4809C000, SZ_4K, + add_generic_device("i2c-omap", -1, NULL, OMAP_I2C1_BASE, SZ_4K, IORESOURCE_MEM, NULL); #ifdef CONFIG_USB_EHCI_OMAP if (ehci_omap_init(&omap_ehci_pdata) >= 0) - add_usb_ehci_device(-1, 0x48064700 + 0x100, - 0x48064700 + 0x110, &ehci_pdata); + add_usb_ehci_device(-1, OMAP_EHCI_BASE, + OMAP_EHCI_BASE + 0x10, &ehci_pdata); #endif /* CONFIG_USB_EHCI_OMAP */ #ifdef CONFIG_OMAP_GPMC /* WP is made high and WAIT1 active Low */ @@ -304,7 +304,7 @@ static int beagle_devices_init(void) #endif gpmc_generic_nand_devices_init(0, 16, OMAP_ECC_HAMMING_CODE_HW_ROMCODE); - add_generic_device("omap-hsmmc", -1, NULL, OMAP_I2C1_BASE, 0, + add_generic_device("omap-hsmmc", -1, NULL, OMAP_MMC1_BASE, SZ_4K, IORESOURCE_MEM, NULL); armlinux_set_bootparams((void *)0x80000100);