* S3C2410 NAND controller updates @ 2009-05-30 17:41 Ben Dooks 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: Move to using platform device table Ben Dooks 0 siblings, 1 reply; 15+ messages in thread From: Ben Dooks @ 2009-05-30 17:41 UTC (permalink / raw) To: linux-mtd Updates for the next kernel release for the S3C2410 NAND controller. This series is available at: git://aeryn.fluff.org.uk/bjdooks/linux.git next-mtd ^ permalink raw reply [flat|nested] 15+ messages in thread
* [MTD] [NAND] S3C2410: Move to using platform device table 2009-05-30 17:41 S3C2410 NAND controller updates Ben Dooks @ 2009-05-30 17:41 ` Ben Dooks 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: Basic kerneldoc comment updates Ben Dooks 2009-06-01 5:47 ` [MTD] [NAND] S3C2410: Move to using platform device table Eric Miao 0 siblings, 2 replies; 15+ messages in thread From: Ben Dooks @ 2009-05-30 17:41 UTC (permalink / raw) To: linux-mtd; +Cc: Eric Miao, Ben Dooks Commit 57fee4a58fe802272742caae248872c392a60670 added an method to specify the platform device compatibility by using an id-table instead of registering multiple drivers. Move the S3C24XX NAND driver to using this ID table. Signed-off-by: Ben Dooks <ben-linux@fluff.org> CC: Eric Miao <eric.miao@marvell.com> --- drivers/mtd/nand/s3c2410.c | 78 ++++++++++++++----------------------------- 1 files changed, 26 insertions(+), 52 deletions(-) diff --git a/drivers/mtd/nand/s3c2410.c b/drivers/mtd/nand/s3c2410.c index 8e375d5..b7f0740 100644 --- a/drivers/mtd/nand/s3c2410.c +++ b/drivers/mtd/nand/s3c2410.c @@ -593,7 +593,7 @@ static inline void s3c2410_nand_cpufreq_deregister(struct s3c2410_nand_info *inf /* device management functions */ -static int s3c2410_nand_remove(struct platform_device *pdev) +static int s3c24xx_nand_remove(struct platform_device *pdev) { struct s3c2410_nand_info *info = to_nand_info(pdev); @@ -788,18 +788,17 @@ static void s3c2410_nand_update_chip(struct s3c2410_nand_info *info, } } -/* s3c2410_nand_probe +/* s3c24xx_nand_probe * * called by device layer when it finds a device matching * one our driver can handled. This code checks to see if * it can allocate all necessary resources then calls the * nand layer to look for devices */ - -static int s3c24xx_nand_probe(struct platform_device *pdev, - enum s3c_cpu_type cpu_type) +static int s3c24xx_nand_probe(struct platform_device *pdev) { struct s3c2410_platform_nand *plat = to_nand_plat(pdev); + enum s3c_cpu_type cpu_type; struct s3c2410_nand_info *info; struct s3c2410_nand_mtd *nmtd; struct s3c2410_nand_set *sets; @@ -809,6 +808,8 @@ static int s3c24xx_nand_probe(struct platform_device *pdev, int nr_sets; int setno; + cpu_type = platform_get_device_id(pdev)->driver_data; + pr_debug("s3c2410_nand_probe(%p)\n", pdev); info = kmalloc(sizeof(*info), GFP_KERNEL); @@ -922,7 +923,7 @@ static int s3c24xx_nand_probe(struct platform_device *pdev, return 0; exit_error: - s3c2410_nand_remove(pdev); + s3c24xx_nand_remove(pdev); if (err == 0) err = -EINVAL; @@ -983,50 +984,30 @@ static int s3c24xx_nand_resume(struct platform_device *dev) /* driver device registration */ -static int s3c2410_nand_probe(struct platform_device *dev) -{ - return s3c24xx_nand_probe(dev, TYPE_S3C2410); -} - -static int s3c2440_nand_probe(struct platform_device *dev) -{ - return s3c24xx_nand_probe(dev, TYPE_S3C2440); -} - -static int s3c2412_nand_probe(struct platform_device *dev) -{ - return s3c24xx_nand_probe(dev, TYPE_S3C2412); -} - -static struct platform_driver s3c2410_nand_driver = { - .probe = s3c2410_nand_probe, - .remove = s3c2410_nand_remove, - .suspend = s3c24xx_nand_suspend, - .resume = s3c24xx_nand_resume, - .driver = { - .name = "s3c2410-nand", - .owner = THIS_MODULE, +static struct platform_device_id s3c24xx_driver_ids[] = { + { + .name = "s3c2410-nand", + .driver_data = TYPE_S3C2410, + }, { + .name = "s3c2440-nand", + .driver_data = TYPE_S3C2440, + }, { + .name = "s3c2412-nand", + .driver_data = TYPE_S3C2412, }, + { } }; -static struct platform_driver s3c2440_nand_driver = { - .probe = s3c2440_nand_probe, - .remove = s3c2410_nand_remove, - .suspend = s3c24xx_nand_suspend, - .resume = s3c24xx_nand_resume, - .driver = { - .name = "s3c2440-nand", - .owner = THIS_MODULE, - }, -}; +MODULE_DEVICE_TABLE(platform, s3c24xx_driver_ids); -static struct platform_driver s3c2412_nand_driver = { - .probe = s3c2412_nand_probe, - .remove = s3c2410_nand_remove, +static struct platform_driver s3c24xx_nand_driver = { + .probe = s3c24xx_nand_probe, + .remove = s3c24xx_nand_remove, .suspend = s3c24xx_nand_suspend, .resume = s3c24xx_nand_resume, + .id_table = s3c24xx_driver_ids, .driver = { - .name = "s3c2412-nand", + .name = "s3c24xx-nand", .owner = THIS_MODULE, }, }; @@ -1035,16 +1016,12 @@ static int __init s3c2410_nand_init(void) { printk("S3C24XX NAND Driver, (c) 2004 Simtec Electronics\n"); - platform_driver_register(&s3c2412_nand_driver); - platform_driver_register(&s3c2440_nand_driver); - return platform_driver_register(&s3c2410_nand_driver); + return platform_driver_register(&s3c24xx_nand_driver); } static void __exit s3c2410_nand_exit(void) { - platform_driver_unregister(&s3c2412_nand_driver); - platform_driver_unregister(&s3c2440_nand_driver); - platform_driver_unregister(&s3c2410_nand_driver); + platform_driver_unregister(&s3c24xx_nand_driver); } module_init(s3c2410_nand_init); @@ -1053,6 +1030,3 @@ module_exit(s3c2410_nand_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>"); MODULE_DESCRIPTION("S3C24XX MTD NAND driver"); -MODULE_ALIAS("platform:s3c2410-nand"); -MODULE_ALIAS("platform:s3c2412-nand"); -MODULE_ALIAS("platform:s3c2440-nand"); -- 1.5.6.5 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [MTD] [NAND] S3C2410: Basic kerneldoc comment updates 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: Move to using platform device table Ben Dooks @ 2009-05-30 17:41 ` Ben Dooks 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: NAND ECC by chip rather than global Ben Dooks 2009-06-01 5:47 ` [MTD] [NAND] S3C2410: Move to using platform device table Eric Miao 1 sibling, 1 reply; 15+ messages in thread From: Ben Dooks @ 2009-05-30 17:41 UTC (permalink / raw) To: linux-mtd; +Cc: Ben Dooks Move to using kerneldoc style commenting in the driver Signed-off-by: Ben Dooks <ben-linux@fluff.org> --- drivers/mtd/nand/s3c2410.c | 89 ++++++++++++++++++++++++++++++++++++++----- 1 files changed, 78 insertions(+), 11 deletions(-) diff --git a/drivers/mtd/nand/s3c2410.c b/drivers/mtd/nand/s3c2410.c index b7f0740..a2d1c70 100644 --- a/drivers/mtd/nand/s3c2410.c +++ b/drivers/mtd/nand/s3c2410.c @@ -74,6 +74,14 @@ static struct nand_ecclayout nand_hw_eccoob = { struct s3c2410_nand_info; +/** + * struct s3c2410_nand_mtd - driver MTD structure + * @mtd: The MTD instance to pass to the MTD layer. + * @chip: The NAND chip information. + * @set: The platform information supplied for this set of NAND chips. + * @info: Link back to the hardware information. + * @scan_res: The result from calling nand_scan_ident(). +*/ struct s3c2410_nand_mtd { struct mtd_info mtd; struct nand_chip chip; @@ -90,6 +98,21 @@ enum s3c_cpu_type { /* overview of the s3c2410 nand state */ +/** + * struct s3c2410_nand_info - NAND controller state. + * @mtds: An array of MTD instances on this controoler. + * @platform: The platform data for this board. + * @device: The platform device we bound to. + * @area: The IO area resource that came from request_mem_region(). + * @clk: The clock resource for this controller. + * @regs: The area mapped for the hardware registers described by @area. + * @sel_reg: Pointer to the register controlling the NAND selection. + * @sel_bit: The bit in @sel_reg to select the NAND chip. + * @mtd_count: The number of MTDs created from this controller. + * @save_sel: The contents of @sel_reg to be saved over suspend. + * @clk_rate: The clock rate from @clk. + * @cpu_type: The exact type of this controller. + */ struct s3c2410_nand_info { /* mtd info */ struct nand_hw_control controller; @@ -145,6 +168,14 @@ static inline int allow_clk_stop(struct s3c2410_nand_info *info) #define NS_IN_KHZ 1000000 +/** + * s3c_nand_calc_rate - calculate timing data. + * @wanted: The cycle time in nanoseconds. + * @clk: The clock rate in kHz. + * @max: The maximum divider value. + * + * Calculate the timing value from the given parameters. + */ static int s3c_nand_calc_rate(int wanted, unsigned long clk, int max) { int result; @@ -169,6 +200,14 @@ static int s3c_nand_calc_rate(int wanted, unsigned long clk, int max) /* controller setup */ +/** + * s3c2410_nand_setrate - setup controller timing information. + * @info: The controller instance. + * + * Given the information supplied by the platform, calculate and set + * the necessary timing registers in the hardware to generate the + * necessary timing cycles to the hardware. + */ static int s3c2410_nand_setrate(struct s3c2410_nand_info *info) { struct s3c2410_platform_nand *plat = info->platform; @@ -245,6 +284,13 @@ static int s3c2410_nand_setrate(struct s3c2410_nand_info *info) return 0; } +/** + * s3c2410_nand_inithw - basic hardware initialisation + * @info: The hardware state. + * + * Do the basic initialisation of the hardware, using s3c2410_nand_setrate() + * to setup the hardware access speeds and set the controller to be enabled. +*/ static int s3c2410_nand_inithw(struct s3c2410_nand_info *info) { int ret; @@ -268,8 +314,19 @@ static int s3c2410_nand_inithw(struct s3c2410_nand_info *info) return 0; } -/* select chip */ - +/** + * s3c2410_nand_select_chip - select the given nand chip + * @mtd: The MTD instance for this chip. + * @chip: The chip number. + * + * This is called by the MTD layer to either select a given chip for the + * @mtd instance, or to indicate that the access has finished and the + * chip can be de-selected. + * + * The routine ensures that the nFCE line is correctly setup, and any + * platform specific selection code is called to route nFCE to the specific + * chip. + */ static void s3c2410_nand_select_chip(struct mtd_info *mtd, int chip) { struct s3c2410_nand_info *info; @@ -667,11 +724,16 @@ static int s3c2410_nand_add_partition(struct s3c2410_nand_info *info, } #endif -/* s3c2410_nand_init_chip +/** + * s3c2410_nand_init_chip - initialise a single instance of an chip + * @info: The base NAND controller the chip is on. + * @nmtd: The new controller MTD instance to fill in. + * @set: The information passed from the board specific platform data. * - * init a single instance of an chip -*/ - + * Initialise the given @nmtd from the information in @info and @set. This + * readies the structure for use with the MTD layer functions by ensuring + * all pointers are setup and the necessary control routines selected. + */ static void s3c2410_nand_init_chip(struct s3c2410_nand_info *info, struct s3c2410_nand_mtd *nmtd, struct s3c2410_nand_set *set) @@ -759,12 +821,17 @@ static void s3c2410_nand_init_chip(struct s3c2410_nand_info *info, chip->ecc.mode = NAND_ECC_NONE; } -/* s3c2410_nand_update_chip +/** + * s3c2410_nand_update_chip - post probe update + * @info: The controller instance. + * @nmtd: The driver version of the MTD instance. * - * post-probe chip update, to change any items, such as the - * layout for large page nand - */ - + * This routine is called after the chip probe has succesfully completed + * and the relevant per-chip information updated. This call ensure that + * we update the internal state accordingly. + * + * The internal state is currently limited to the ECC state information. +*/ static void s3c2410_nand_update_chip(struct s3c2410_nand_info *info, struct s3c2410_nand_mtd *nmtd) { -- 1.5.6.5 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [MTD] [NAND] S3C2410: NAND ECC by chip rather than global 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: Basic kerneldoc comment updates Ben Dooks @ 2009-05-30 17:41 ` Ben Dooks 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: Small colon cleanup Ben Dooks 0 siblings, 1 reply; 15+ messages in thread From: Ben Dooks @ 2009-05-30 17:41 UTC (permalink / raw) To: linux-mtd; +Cc: Andy Green, Nelson Castillo, Ben Dooks From: Andy Green <andy@warmcat.com> This makes us take note about the chosen ECC mode per-chip and not the one set globally. Signed-off-by: Andy Green <andy@warmcat.com> Signed-off-by: Nelson Castillo <arhuaco@freaks-unidos.net> [ben-linux@fluff.org: andy@openmoko.com => andy@warmcat.com, rewrite subject] Signed-off-by: Ben Dooks <ben-linux@fluff.org> --- drivers/mtd/nand/s3c2410.c | 34 +++++++++++++++++++++++++--------- 1 files changed, 25 insertions(+), 9 deletions(-) diff --git a/drivers/mtd/nand/s3c2410.c b/drivers/mtd/nand/s3c2410.c index a2d1c70..daa4af9 100644 --- a/drivers/mtd/nand/s3c2410.c +++ b/drivers/mtd/nand/s3c2410.c @@ -819,6 +819,21 @@ static void s3c2410_nand_init_chip(struct s3c2410_nand_info *info, if (set->disable_ecc) chip->ecc.mode = NAND_ECC_NONE; + + switch (chip->ecc.mode) { + case NAND_ECC_NONE: + dev_info(info->device, "NAND ECC disabled\n"); + break; + case NAND_ECC_SOFT: + dev_info(info->device, "NAND soft ECC\n"); + break; + case NAND_ECC_HW: + dev_info(info->device, "NAND hardware ECC\n"); + break; + default: + dev_info(info->device, "NAND ECC UNKNOWN\n"); + break; + } } /** @@ -840,18 +855,19 @@ static void s3c2410_nand_update_chip(struct s3c2410_nand_info *info, dev_dbg(info->device, "chip %p => page shift %d\n", chip, chip->page_shift); - if (hardware_ecc) { + if (chip->ecc.mode != NAND_ECC_HW) + return; + /* change the behaviour depending on wether we are using * the large or small page nand device */ - if (chip->page_shift > 10) { - chip->ecc.size = 256; - chip->ecc.bytes = 3; - } else { - chip->ecc.size = 512; - chip->ecc.bytes = 3; - chip->ecc.layout = &nand_hw_eccoob; - } + if (chip->page_shift > 10) { + chip->ecc.size = 256; + chip->ecc.bytes = 3; + } else { + chip->ecc.size = 512; + chip->ecc.bytes = 3; + chip->ecc.layout = &nand_hw_eccoob; } } -- 1.5.6.5 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [MTD] [NAND] S3C2410: Small colon cleanup 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: NAND ECC by chip rather than global Ben Dooks @ 2009-05-30 17:41 ` Ben Dooks 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: Uninitialised variable cleanup Ben Dooks 0 siblings, 1 reply; 15+ messages in thread From: Ben Dooks @ 2009-05-30 17:41 UTC (permalink / raw) To: linux-mtd; +Cc: Nelson Castillo, Ben Dooks From: Nelson Castillo <arhuaco@freaks-unidos.net> checkpatch would complain with "disable_ecc : 1". Signed-off-by: Nelson Castillo <arhuaco@freaks-unidos.net> [ben-linux@fluff.org: subject cleanup] Signed-off-by: Ben Dooks <ben-linux@fluff.org> --- arch/arm/plat-s3c/include/plat/nand.h | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/arm/plat-s3c/include/plat/nand.h b/arch/arm/plat-s3c/include/plat/nand.h index f4dcd14..9855467 100644 --- a/arch/arm/plat-s3c/include/plat/nand.h +++ b/arch/arm/plat-s3c/include/plat/nand.h @@ -22,7 +22,7 @@ */ struct s3c2410_nand_set { - unsigned int disable_ecc : 1; + unsigned int disable_ecc:1; int nr_chips; int nr_partitions; @@ -39,7 +39,7 @@ struct s3c2410_platform_nand { int twrph0; /* active time for nWE/nOE */ int twrph1; /* time for release CLE/ALE from nWE/nOE inactive */ - unsigned int ignore_unset_ecc : 1; + unsigned int ignore_unset_ecc:1; int nr_sets; struct s3c2410_nand_set *sets; -- 1.5.6.5 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [MTD] [NAND] S3C2410: Uninitialised variable cleanup 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: Small colon cleanup Ben Dooks @ 2009-05-30 17:41 ` Ben Dooks 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: Fix CFG debug order Ben Dooks 0 siblings, 1 reply; 15+ messages in thread From: Ben Dooks @ 2009-05-30 17:41 UTC (permalink / raw) To: linux-mtd; +Cc: Nelson Castillo, Ben Dooks From: Nelson Castillo <arhuaco@freaks-unidos.net> ~ Avoid warning without generating code. (I don't even get the warning without the macro uninitialized_var). Signed-off-by: Nelson Castillo <arhuaco@freaks-unidos.net> [ben-linux@fluff.org: subject cleanup] Signed-off-by: Ben Dooks <ben-linux@fluff.org> --- drivers/mtd/nand/s3c2410.c | 5 +---- 1 files changed, 1 insertions(+), 4 deletions(-) diff --git a/drivers/mtd/nand/s3c2410.c b/drivers/mtd/nand/s3c2410.c index daa4af9..7be3663 100644 --- a/drivers/mtd/nand/s3c2410.c +++ b/drivers/mtd/nand/s3c2410.c @@ -214,7 +214,7 @@ static int s3c2410_nand_setrate(struct s3c2410_nand_info *info) int tacls_max = (info->cpu_type == TYPE_S3C2412) ? 8 : 4; int tacls, twrph0, twrph1; unsigned long clkrate = clk_get_rate(info->clk); - unsigned long set, cfg, mask; + unsigned long uninitialized_var(set), cfg, uninitialized_var(mask); unsigned long flags; /* calculate the timing information for the controller */ @@ -264,9 +264,6 @@ static int s3c2410_nand_setrate(struct s3c2410_nand_info *info) break; default: - /* keep compiler happy */ - mask = 0; - set = 0; BUG(); } -- 1.5.6.5 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [MTD] [NAND] S3C2410: Fix CFG debug order 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: Uninitialised variable cleanup Ben Dooks @ 2009-05-30 17:41 ` Ben Dooks 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: Allow commandline partition processing Ben Dooks 0 siblings, 1 reply; 15+ messages in thread From: Ben Dooks @ 2009-05-30 17:41 UTC (permalink / raw) To: linux-mtd; +Cc: Andy Green, Nelson Castillo, Ben Dooks From: Andy Green <andy@warmcat.com> Fix NAND CFG debug order. Signed-off-by: Andy Green <andy@warmcat.com> Signed-off-by: Nelson Castillo <arhuaco@freaks-unidos.net> [ben-linux@fluff.org: Change andy@openmoko.com to andy@warmcat.com, subject cleanup] Signed-off-by: Ben Dooks <ben-linux@fluff.org> --- drivers/mtd/nand/s3c2410.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/mtd/nand/s3c2410.c b/drivers/mtd/nand/s3c2410.c index 7be3663..87c40de 100644 --- a/drivers/mtd/nand/s3c2410.c +++ b/drivers/mtd/nand/s3c2410.c @@ -267,8 +267,6 @@ static int s3c2410_nand_setrate(struct s3c2410_nand_info *info) BUG(); } - dev_dbg(info->device, "NF_CONF is 0x%lx\n", cfg); - local_irq_save(flags); cfg = readl(info->regs + S3C2410_NFCONF); @@ -278,6 +276,8 @@ static int s3c2410_nand_setrate(struct s3c2410_nand_info *info) local_irq_restore(flags); + dev_dbg(info->device, "NF_CONF is 0x%lx\n", cfg); + return 0; } -- 1.5.6.5 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [MTD] [NAND] S3C2410: Allow commandline partition processing 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: Fix CFG debug order Ben Dooks @ 2009-05-30 17:41 ` Ben Dooks 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: Added a kerneldoc for s3c2410_nand_set Ben Dooks 0 siblings, 1 reply; 15+ messages in thread From: Ben Dooks @ 2009-05-30 17:41 UTC (permalink / raw) To: linux-mtd; +Cc: Andy Green, Andy Green, Ben Dooks, Nelson Castillo From: Andy Green <andy@warmcat.com> This patch allows commandline partition processing to work with the s3c2410 NAND platform driver. Signed-off-by: Andy Green <andy@warcat.com> Signed-off-by: Nelson Castillo <arhuaco@freaks-unidos.net> [ben-linux@fluff.org: Change andy@openmoko.com to andy@warmcat.com] Signed-off-by: Ben Dooks <ben-linux@fluff.org> --- drivers/mtd/nand/s3c2410.c | 18 ++++++++++++++++-- 1 files changed, 16 insertions(+), 2 deletions(-) diff --git a/drivers/mtd/nand/s3c2410.c b/drivers/mtd/nand/s3c2410.c index 87c40de..ef56652 100644 --- a/drivers/mtd/nand/s3c2410.c +++ b/drivers/mtd/nand/s3c2410.c @@ -699,17 +699,31 @@ static int s3c24xx_nand_remove(struct platform_device *pdev) } #ifdef CONFIG_MTD_PARTITIONS +const char *part_probes[] = { "cmdlinepart", NULL }; static int s3c2410_nand_add_partition(struct s3c2410_nand_info *info, struct s3c2410_nand_mtd *mtd, struct s3c2410_nand_set *set) { + struct mtd_partition *part_info; + int nr_part = 0; + if (set == NULL) return add_mtd_device(&mtd->mtd); - if (set->nr_partitions > 0 && set->partitions != NULL) { - return add_mtd_partitions(&mtd->mtd, set->partitions, set->nr_partitions); + if (set->nr_partitions == 0) { + mtd->mtd.name = set->name; + nr_part = parse_mtd_partitions(&mtd->mtd, part_probes, + &part_info, 0); + } else { + if (set->nr_partitions > 0 && set->partitions != NULL) { + nr_part = set->nr_partitions; + part_info = set->partitions; + } } + if (nr_part > 0 && part_info) + return add_mtd_partitions(&mtd->mtd, part_info, nr_part); + return add_mtd_device(&mtd->mtd); } #else -- 1.5.6.5 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [MTD] [NAND] S3C2410: Added a kerneldoc for s3c2410_nand_set 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: Allow commandline partition processing Ben Dooks @ 2009-05-30 17:41 ` Ben Dooks 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: Allow the machine code to get the BBT table from NAND Ben Dooks 2009-06-02 19:36 ` [MTD] [NAND] S3C2410: Added a kerneldoc for s3c2410_nand_set Peter Korsgaard 0 siblings, 2 replies; 15+ messages in thread From: Ben Dooks @ 2009-05-30 17:41 UTC (permalink / raw) To: linux-mtd; +Cc: Michel Pollet, Ben Dooks From: Michel Pollet <buserror@gmail.com> Converted the old comnent to kerneldoc. Signed-off-by: Michel Pollet <buserror@gmail.com> [ben-linux@fluff.org: updated subject] Signed-off-by: Ben Dooks <ben-linux@fluff.org> --- arch/arm/plat-s3c/include/plat/nand.h | 22 ++++++++++++---------- 1 files changed, 12 insertions(+), 10 deletions(-) diff --git a/arch/arm/plat-s3c/include/plat/nand.h b/arch/arm/plat-s3c/include/plat/nand.h index 9855467..350ec95 100644 --- a/arch/arm/plat-s3c/include/plat/nand.h +++ b/arch/arm/plat-s3c/include/plat/nand.h @@ -10,17 +10,19 @@ * published by the Free Software Foundation. */ -/* struct s3c2410_nand_set +/** + * struct s3c2410_nand_set - define a set of one or more nand chips + * @disable_ecc: Entirely disable ECC - Dangerous + * @nr_chips: Number of chips in this set + * @nr_partitions: Number of partitions pointed to be partitoons (or zero) + * @name: Name of set (optional) + * @nr_map: Map for low-layer logical to physical chip numbers (option) + * @partitions: The mtd partition list * - * define an set of one or more nand chips registered with an unique mtd - * - * nr_chips = number of chips in this set - * nr_partitions = number of partitions pointed to be partitoons (or zero) - * name = name of set (optional) - * nr_map = map for low-layer logical to physical chip numbers (option) - * partitions = mtd partition list -*/ - + * define a set of one or more nand chips registered with an unique mtd. Also + * allows to pass flag to the underlying NAND layer. 'disable_ecc' will trigger + * a warning at boot time. + */ struct s3c2410_nand_set { unsigned int disable_ecc:1; -- 1.5.6.5 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [MTD] [NAND] S3C2410: Allow the machine code to get the BBT table from NAND 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: Added a kerneldoc for s3c2410_nand_set Ben Dooks @ 2009-05-30 17:41 ` Ben Dooks 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: Deal with unaligned lengths in S3C2440 buffer read/write Ben Dooks 2009-06-02 19:36 ` [MTD] [NAND] S3C2410: Added a kerneldoc for s3c2410_nand_set Peter Korsgaard 1 sibling, 1 reply; 15+ messages in thread From: Ben Dooks @ 2009-05-30 17:41 UTC (permalink / raw) To: linux-mtd; +Cc: Michel Pollet, Ben Dooks From: Michel Pollet <buserror@gmail.com> Added a flag to allow the machine code to tell the NAND subsystem that it should try to pickup a BBT from the flash, and also skip the NAND full scan at startup. Signed-off-by: Michel Pollet <buserror@gmail.com> Signed-off-by: Ben Dooks <ben-linux@fluff.org> --- arch/arm/plat-s3c/include/plat/nand.h | 5 +++++ drivers/mtd/nand/s3c2410.c | 6 ++++++ 2 files changed, 11 insertions(+), 0 deletions(-) diff --git a/arch/arm/plat-s3c/include/plat/nand.h b/arch/arm/plat-s3c/include/plat/nand.h index 350ec95..bed4a51 100644 --- a/arch/arm/plat-s3c/include/plat/nand.h +++ b/arch/arm/plat-s3c/include/plat/nand.h @@ -13,6 +13,10 @@ /** * struct s3c2410_nand_set - define a set of one or more nand chips * @disable_ecc: Entirely disable ECC - Dangerous + * @flash_bbt: Openmoko u-boot can create a Bad Block Table + * Setting this flag will allow the kernel to + * look for it at boot time and also skip the NAND + * scan. * @nr_chips: Number of chips in this set * @nr_partitions: Number of partitions pointed to be partitoons (or zero) * @name: Name of set (optional) @@ -25,6 +29,7 @@ */ struct s3c2410_nand_set { unsigned int disable_ecc:1; + unsigned int flash_bbt:1; int nr_chips; int nr_partitions; diff --git a/drivers/mtd/nand/s3c2410.c b/drivers/mtd/nand/s3c2410.c index ef56652..d315b51 100644 --- a/drivers/mtd/nand/s3c2410.c +++ b/drivers/mtd/nand/s3c2410.c @@ -845,6 +845,12 @@ static void s3c2410_nand_init_chip(struct s3c2410_nand_info *info, dev_info(info->device, "NAND ECC UNKNOWN\n"); break; } + + /* If you use u-boot BBT creation code, specifying this flag will + * let the kernel fish out the BBT from the NAND, and also skip the + * full NAND scan that can take 1/2s or so. Little things... */ + if (set->flash_bbt) + chip->options |= NAND_USE_FLASH_BBT | NAND_SKIP_BBTSCAN; } /** -- 1.5.6.5 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [MTD] [NAND] S3C2410: Deal with unaligned lengths in S3C2440 buffer read/write 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: Allow the machine code to get the BBT table from NAND Ben Dooks @ 2009-05-30 17:41 ` Ben Dooks 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: Use DIV_ROUND_UP Ben Dooks 0 siblings, 1 reply; 15+ messages in thread From: Ben Dooks @ 2009-05-30 17:41 UTC (permalink / raw) To: linux-mtd; +Cc: Ben Dooks Add code to deal with fractional lengths, as reported by Werner Almesberger. Re-work of his original patch. Signed-off-by: Ben Dooks <ben-linux@fluff.org> --- drivers/mtd/nand/s3c2410.c | 22 ++++++++++++++++++++-- 1 files changed, 20 insertions(+), 2 deletions(-) diff --git a/drivers/mtd/nand/s3c2410.c b/drivers/mtd/nand/s3c2410.c index d315b51..8a7f960 100644 --- a/drivers/mtd/nand/s3c2410.c +++ b/drivers/mtd/nand/s3c2410.c @@ -584,7 +584,16 @@ static void s3c2410_nand_read_buf(struct mtd_info *mtd, u_char *buf, int len) static void s3c2440_nand_read_buf(struct mtd_info *mtd, u_char *buf, int len) { struct s3c2410_nand_info *info = s3c2410_nand_mtd_toinfo(mtd); - readsl(info->regs + S3C2440_NFDATA, buf, len / 4); + + readsl(info->regs + S3C2440_NFDATA, buf, len >> 2); + + /* cleanup if we've got less than a word to do */ + if (len & 3) { + buf += len & ~3; + + for (; len & 3; len--) + *buf++ = readb(info->regs + S3C2440_NFDATA); + } } static void s3c2410_nand_write_buf(struct mtd_info *mtd, const u_char *buf, int len) @@ -596,7 +605,16 @@ static void s3c2410_nand_write_buf(struct mtd_info *mtd, const u_char *buf, int static void s3c2440_nand_write_buf(struct mtd_info *mtd, const u_char *buf, int len) { struct s3c2410_nand_info *info = s3c2410_nand_mtd_toinfo(mtd); - writesl(info->regs + S3C2440_NFDATA, buf, len / 4); + + writesl(info->regs + S3C2440_NFDATA, buf, len >> 2); + + /* cleanup any fractional write */ + if (len & 3) { + buf += len & ~3; + + for (; len & 3; len--, buf++) + writeb(*buf, info->regs + S3C2440_NFDATA); + } } /* cpufreq driver support */ -- 1.5.6.5 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* [MTD] [NAND] S3C2410: Use DIV_ROUND_UP 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: Deal with unaligned lengths in S3C2440 buffer read/write Ben Dooks @ 2009-05-30 17:41 ` Ben Dooks 0 siblings, 0 replies; 15+ messages in thread From: Ben Dooks @ 2009-05-30 17:41 UTC (permalink / raw) To: linux-mtd; +Cc: Ben Dooks Change to using DIV_ROUND_UP() in the timing calculation instead of blindly doing result++ Signed-off-by: Ben Dooks <ben-linux@fluff.org> --- drivers/mtd/nand/s3c2410.c | 3 +-- 1 files changed, 1 insertions(+), 2 deletions(-) diff --git a/drivers/mtd/nand/s3c2410.c b/drivers/mtd/nand/s3c2410.c index 8a7f960..89b7905 100644 --- a/drivers/mtd/nand/s3c2410.c +++ b/drivers/mtd/nand/s3c2410.c @@ -180,8 +180,7 @@ static int s3c_nand_calc_rate(int wanted, unsigned long clk, int max) { int result; - result = (wanted * clk) / NS_IN_KHZ; - result++; + result = DIV_ROUND_UP((wanted * clk), NS_IN_KHZ); pr_debug("result %d from %ld, %d\n", result, clk, wanted); -- 1.5.6.5 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [MTD] [NAND] S3C2410: Added a kerneldoc for s3c2410_nand_set 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: Added a kerneldoc for s3c2410_nand_set Ben Dooks 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: Allow the machine code to get the BBT table from NAND Ben Dooks @ 2009-06-02 19:36 ` Peter Korsgaard 2009-06-02 22:55 ` Ben Dooks 1 sibling, 1 reply; 15+ messages in thread From: Peter Korsgaard @ 2009-06-02 19:36 UTC (permalink / raw) To: Ben Dooks; +Cc: linux-mtd, Michel Pollet >>>>> "Ben" == Ben Dooks <ben-linux@fluff.org> writes: Hi, Ben> diff --git a/arch/arm/plat-s3c/include/plat/nand.h b/arch/arm/plat-s3c/include/plat/nand.h Ben> index 9855467..350ec95 100644 Ben> --- a/arch/arm/plat-s3c/include/plat/nand.h Ben> +++ b/arch/arm/plat-s3c/include/plat/nand.h Ben> @@ -10,17 +10,19 @@ Ben> * published by the Free Software Foundation. Ben> */ Ben> -/* struct s3c2410_nand_set Ben> +/** Ben> + * struct s3c2410_nand_set - define a set of one or more nand chips Ben> + * @disable_ecc: Entirely disable ECC - Dangerous Ben> + * @nr_chips: Number of chips in this set Ben> + * @nr_partitions: Number of partitions pointed to be partitoons (or zero) s/partitoons/partitions/ - And the text sounds pretty confusing to me. What about Number of struct mtd_partitions pointed to by partitions (or zero) Yes, I know it won't fit in 80 chars. -- Bye, Peter Korsgaard ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [MTD] [NAND] S3C2410: Added a kerneldoc for s3c2410_nand_set 2009-06-02 19:36 ` [MTD] [NAND] S3C2410: Added a kerneldoc for s3c2410_nand_set Peter Korsgaard @ 2009-06-02 22:55 ` Ben Dooks 0 siblings, 0 replies; 15+ messages in thread From: Ben Dooks @ 2009-06-02 22:55 UTC (permalink / raw) To: Peter Korsgaard; +Cc: linux-mtd, Michel Pollet, Ben Dooks On Tue, Jun 02, 2009 at 09:36:35PM +0200, Peter Korsgaard wrote: > >>>>> "Ben" == Ben Dooks <ben-linux@fluff.org> writes: > > Hi, > > Ben> diff --git a/arch/arm/plat-s3c/include/plat/nand.h b/arch/arm/plat-s3c/include/plat/nand.h > Ben> index 9855467..350ec95 100644 > Ben> --- a/arch/arm/plat-s3c/include/plat/nand.h > Ben> +++ b/arch/arm/plat-s3c/include/plat/nand.h > Ben> @@ -10,17 +10,19 @@ > Ben> * published by the Free Software Foundation. > Ben> */ > > Ben> -/* struct s3c2410_nand_set > Ben> +/** > Ben> + * struct s3c2410_nand_set - define a set of one or more nand chips > Ben> + * @disable_ecc: Entirely disable ECC - Dangerous > Ben> + * @nr_chips: Number of chips in this set > Ben> + * @nr_partitions: Number of partitions pointed to be partitoons (or zero) > > s/partitoons/partitions/ - And the text sounds pretty confusing to > me. What about > > Number of struct mtd_partitions pointed to by partitions (or zero) > > Yes, I know it won't fit in 80 chars. bah, merged the wrong patch. will fix. > -- > Bye, Peter Korsgaard > > ______________________________________________________ > Linux MTD discussion mailing list > http://lists.infradead.org/mailman/listinfo/linux-mtd/ -- Ben (ben@fluff.org, http://www.fluff.org/) 'a smiley only costs 4 bytes' ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [MTD] [NAND] S3C2410: Move to using platform device table 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: Move to using platform device table Ben Dooks 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: Basic kerneldoc comment updates Ben Dooks @ 2009-06-01 5:47 ` Eric Miao 1 sibling, 0 replies; 15+ messages in thread From: Eric Miao @ 2009-06-01 5:47 UTC (permalink / raw) To: Ben Dooks; +Cc: Eric Miao, linux-mtd On Sun, May 31, 2009 at 1:41 AM, Ben Dooks <ben-linux@fluff.org> wrote: > Commit 57fee4a58fe802272742caae248872c392a60670 added an > method to specify the platform device compatibility by using > an id-table instead of registering multiple drivers. > > Move the S3C24XX NAND driver to using this ID table. > > Signed-off-by: Ben Dooks <ben-linux@fluff.org> > CC: Eric Miao <eric.miao@marvell.com> Yeah, looks much cleaner. ^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2009-06-02 22:55 UTC | newest] Thread overview: 15+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2009-05-30 17:41 S3C2410 NAND controller updates Ben Dooks 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: Move to using platform device table Ben Dooks 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: Basic kerneldoc comment updates Ben Dooks 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: NAND ECC by chip rather than global Ben Dooks 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: Small colon cleanup Ben Dooks 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: Uninitialised variable cleanup Ben Dooks 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: Fix CFG debug order Ben Dooks 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: Allow commandline partition processing Ben Dooks 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: Added a kerneldoc for s3c2410_nand_set Ben Dooks 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: Allow the machine code to get the BBT table from NAND Ben Dooks 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: Deal with unaligned lengths in S3C2440 buffer read/write Ben Dooks 2009-05-30 17:41 ` [MTD] [NAND] S3C2410: Use DIV_ROUND_UP Ben Dooks 2009-06-02 19:36 ` [MTD] [NAND] S3C2410: Added a kerneldoc for s3c2410_nand_set Peter Korsgaard 2009-06-02 22:55 ` Ben Dooks 2009-06-01 5:47 ` [MTD] [NAND] S3C2410: Move to using platform device table Eric Miao
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox