* [PATCH 1/7] mtd: sh_flctl: Update FLCMNCR register bit field @ 2012-02-08 12:16 Bastian Hecht 2012-02-08 12:16 ` [PATCH 2/7] mtd: sh_flctl: Reorder empty_fifo() calls Bastian Hecht ` (5 more replies) 0 siblings, 6 replies; 7+ messages in thread From: Bastian Hecht @ 2012-02-08 12:16 UTC (permalink / raw) To: linux-mtd, linux-sh; +Cc: Bastian Hecht, magnus.damm, laurent.pinchart Updates the FLCMNCR bit field to match the newest hardware generation. Some defines are added to select an appropriate clocking scheme. Signed-off-by: Bastian Hecht <hechtb@gmail.com> --- include/linux/mtd/sh_flctl.h | 24 ++++++++++++++++++++++++ 1 files changed, 24 insertions(+), 0 deletions(-) diff --git a/include/linux/mtd/sh_flctl.h b/include/linux/mtd/sh_flctl.h index 9cf4c4c..ecbf3e6 100644 --- a/include/linux/mtd/sh_flctl.h +++ b/include/linux/mtd/sh_flctl.h @@ -67,6 +67,30 @@ #define CE0_ENABLE (0x1 << 3) /* Chip Enable 0 */ #define TYPESEL_SET (0x1 << 0) +/* + * Clock settings using the PULSEx registers from FLCMNCR + * + * Some hardware uses registers called PULSEx instead of FCKSEL_E and QTSEL_E + * to control the clock divider used between the High-Speed Peripheral Clock + * and the FLCTL internal clock. If so, use CLK_8_BIT_xxx for connecting 8 bit + * and CLK_16_BIT_xxx for connecting 16 bit bus bandwith NAND chips. For the 16 + * bit version the divider is seperate for the pulse width of high and low + * signals. + */ +#define PULSE3 (0x1 << 27) +#define PULSE2 (0x1 << 17) +#define PULSE1 (0x1 << 15) +#define PULSE0 (0x1 << 9) +#define CLK_8_BIT_0_5HP PULSE1 +#define CLK_8_BIT_1HP 0x0 +#define CLK_8_BIT_1_5HP (PULSE1 | PULSE2) +#define CLK_8_BIT_2HP PULSE0 +#define CLK_8_BIT_3HP (PULSE0 | PULSE1 | PULSE2) +#define CLK_8_BIT_4HP (PULSE0 | PULSE2) +#define CLK_16_BIT_6HP_LOW_2HP_HIGH PULSE0 +#define CLK_16_BIT_9HP_LOW_3HP_HIGH (PULSE0 | PULSE1 | PULSE2) +#define CLK_16_BIT_12HP_LOW_4HP_HIGH (PULSE0 | PULSE2) + /* FLCMDCR control bits */ #define ADRCNT2_E (0x1 << 31) /* 5byte address enable */ #define ADRMD_E (0x1 << 26) /* Sector address access */ -- 1.7.5.4 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/7] mtd: sh_flctl: Reorder empty_fifo() calls 2012-02-08 12:16 [PATCH 1/7] mtd: sh_flctl: Update FLCMNCR register bit field Bastian Hecht @ 2012-02-08 12:16 ` Bastian Hecht 2012-02-08 12:16 ` [PATCH 3/7] mtd: sh_flctl: Expand the READID command to 8 bytes Bastian Hecht ` (4 subsequent siblings) 5 siblings, 0 replies; 7+ messages in thread From: Bastian Hecht @ 2012-02-08 12:16 UTC (permalink / raw) To: linux-mtd, linux-sh; +Cc: Bastian Hecht, magnus.damm, laurent.pinchart Reorders the calls to make it a bit shorter and match the calling procedure displayed in the datasheet. Signed-off-by: Bastian Hecht <hechtb@gmail.com> --- drivers/mtd/nand/sh_flctl.c | 4 +--- 1 files changed, 1 insertions(+), 3 deletions(-) diff --git a/drivers/mtd/nand/sh_flctl.c b/drivers/mtd/nand/sh_flctl.c index 93b1f74..8c97367 100644 --- a/drivers/mtd/nand/sh_flctl.c +++ b/drivers/mtd/nand/sh_flctl.c @@ -525,7 +525,6 @@ static void flctl_cmdfunc(struct mtd_info *mtd, unsigned int command, execmd_read_page_sector(mtd, page_addr); break; } - empty_fifo(flctl); if (flctl->page_size) set_cmd_regs(mtd, command, (NAND_CMD_READSTART << 8) | command); @@ -547,7 +546,6 @@ static void flctl_cmdfunc(struct mtd_info *mtd, unsigned int command, break; } - empty_fifo(flctl); if (flctl->page_size) { set_cmd_regs(mtd, command, (NAND_CMD_READSTART << 8) | NAND_CMD_READ0); @@ -560,7 +558,6 @@ static void flctl_cmdfunc(struct mtd_info *mtd, unsigned int command, goto read_normal_exit; case NAND_CMD_READID: - empty_fifo(flctl); set_cmd_regs(mtd, command, command); set_addr(mtd, 0, 0); @@ -654,6 +651,7 @@ static void flctl_cmdfunc(struct mtd_info *mtd, unsigned int command, read_normal_exit: writel(flctl->read_bytes, FLDTCNTR(flctl)); /* set read size */ + empty_fifo(flctl); start_translation(flctl); read_fiforeg(flctl, flctl->read_bytes, 0); wait_completion(flctl); -- 1.7.5.4 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 3/7] mtd: sh_flctl: Expand the READID command to 8 bytes 2012-02-08 12:16 [PATCH 1/7] mtd: sh_flctl: Update FLCMNCR register bit field Bastian Hecht 2012-02-08 12:16 ` [PATCH 2/7] mtd: sh_flctl: Reorder empty_fifo() calls Bastian Hecht @ 2012-02-08 12:16 ` Bastian Hecht 2012-02-08 12:16 ` [PATCH 4/7] mtd: sh_flctl: Implement NAND_CMD_RNDOUT command Bastian Hecht ` (3 subsequent siblings) 5 siblings, 0 replies; 7+ messages in thread From: Bastian Hecht @ 2012-02-08 12:16 UTC (permalink / raw) To: linux-mtd, linux-sh; +Cc: Bastian Hecht, magnus.damm, laurent.pinchart The nand base code wants to read out 8 bytes in the READID command. Reflect this in the driver code. Signed-off-by: Bastian Hecht <hechtb@gmail.com> --- drivers/mtd/nand/sh_flctl.c | 13 ++++++++++--- 1 files changed, 10 insertions(+), 3 deletions(-) diff --git a/drivers/mtd/nand/sh_flctl.c b/drivers/mtd/nand/sh_flctl.c index 8c97367..407acb5 100644 --- a/drivers/mtd/nand/sh_flctl.c +++ b/drivers/mtd/nand/sh_flctl.c @@ -320,6 +320,7 @@ static void set_cmd_regs(struct mtd_info *mtd, uint32_t cmd, uint32_t flcmcdr_va break; case NAND_CMD_READID: flcmncr_val &= ~SNAND_E; + flcmdcr_val |= CDSRC_E; addr_len_bytes = ADRCNT_1; break; case NAND_CMD_STATUS: @@ -559,12 +560,18 @@ static void flctl_cmdfunc(struct mtd_info *mtd, unsigned int command, case NAND_CMD_READID: set_cmd_regs(mtd, command, command); - set_addr(mtd, 0, 0); - flctl->read_bytes = 4; + /* READID is always performed using an 8-bit bus */ + if (flctl->chip.options & NAND_BUSWIDTH_16) + column <<= 1; + set_addr(mtd, column, 0); + + flctl->read_bytes = 8; writel(flctl->read_bytes, FLDTCNTR(flctl)); /* set read size */ + empty_fifo(flctl); start_translation(flctl); - read_datareg(flctl, 0); /* read and end */ + read_fiforeg(flctl, flctl->read_bytes, 0); + wait_completion(flctl); break; case NAND_CMD_ERASE1: -- 1.7.5.4 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 4/7] mtd: sh_flctl: Implement NAND_CMD_RNDOUT command 2012-02-08 12:16 [PATCH 1/7] mtd: sh_flctl: Update FLCMNCR register bit field Bastian Hecht 2012-02-08 12:16 ` [PATCH 2/7] mtd: sh_flctl: Reorder empty_fifo() calls Bastian Hecht 2012-02-08 12:16 ` [PATCH 3/7] mtd: sh_flctl: Expand the READID command to 8 bytes Bastian Hecht @ 2012-02-08 12:16 ` Bastian Hecht 2012-02-08 12:16 ` [PATCH 5/7] mtd: sh_flctl: Add FLHOLDCR register Bastian Hecht ` (2 subsequent siblings) 5 siblings, 0 replies; 7+ messages in thread From: Bastian Hecht @ 2012-02-08 12:16 UTC (permalink / raw) To: linux-mtd, linux-sh; +Cc: Bastian Hecht, magnus.damm, laurent.pinchart Implements the command to seek and read in pages. Signed-off-by: Bastian Hecht <hechtb@gmail.com> --- drivers/mtd/nand/sh_flctl.c | 13 +++++++++++++ 1 files changed, 13 insertions(+), 0 deletions(-) diff --git a/drivers/mtd/nand/sh_flctl.c b/drivers/mtd/nand/sh_flctl.c index 407acb5..5c3e71f 100644 --- a/drivers/mtd/nand/sh_flctl.c +++ b/drivers/mtd/nand/sh_flctl.c @@ -303,6 +303,7 @@ static void set_cmd_regs(struct mtd_info *mtd, uint32_t cmd, uint32_t flcmcdr_va break; case NAND_CMD_READ0: case NAND_CMD_READOOB: + case NAND_CMD_RNDOUT: addr_len_bytes = flctl->rw_ADRCNT; flcmdcr_val |= CDSRC_E; if (flctl->chip.options & NAND_BUSWIDTH_16) @@ -558,6 +559,18 @@ static void flctl_cmdfunc(struct mtd_info *mtd, unsigned int command, flctl->read_bytes = mtd->oobsize; goto read_normal_exit; + case NAND_CMD_RNDOUT: + if (flctl->page_size) + set_cmd_regs(mtd, command, (NAND_CMD_RNDOUTSTART << 8) + | command); + else + set_cmd_regs(mtd, command, command); + + set_addr(mtd, column, 0); + + flctl->read_bytes = mtd->writesize + mtd->oobsize - column; + goto read_normal_exit; + case NAND_CMD_READID: set_cmd_regs(mtd, command, command); -- 1.7.5.4 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 5/7] mtd: sh_flctl: Add FLHOLDCR register 2012-02-08 12:16 [PATCH 1/7] mtd: sh_flctl: Update FLCMNCR register bit field Bastian Hecht ` (2 preceding siblings ...) 2012-02-08 12:16 ` [PATCH 4/7] mtd: sh_flctl: Implement NAND_CMD_RNDOUT command Bastian Hecht @ 2012-02-08 12:16 ` Bastian Hecht 2012-02-08 12:16 ` [PATCH 6/7] mtd: sh_flctl: Add power management support Bastian Hecht 2012-02-08 12:16 ` [PATCH 7/7] ARM: mach-shmobile: mackerel: Add the flash controller flctl Bastian Hecht 5 siblings, 0 replies; 7+ messages in thread From: Bastian Hecht @ 2012-02-08 12:16 UTC (permalink / raw) To: linux-mtd, linux-sh; +Cc: Bastian Hecht, magnus.damm, laurent.pinchart Add a register used in new FLCTL hardware and a feature flag for it. Signed-off-by: Bastian Hecht <hechtb@gmail.com> --- drivers/mtd/nand/sh_flctl.c | 3 +++ include/linux/mtd/sh_flctl.h | 12 ++++++++++++ 2 files changed, 15 insertions(+), 0 deletions(-) diff --git a/drivers/mtd/nand/sh_flctl.c b/drivers/mtd/nand/sh_flctl.c index 5c3e71f..70ca40d 100644 --- a/drivers/mtd/nand/sh_flctl.c +++ b/drivers/mtd/nand/sh_flctl.c @@ -751,6 +751,8 @@ static int flctl_verify_buf(struct mtd_info *mtd, const u_char *buf, int len) static void flctl_register_init(struct sh_flctl *flctl, unsigned long val) { writel(val, FLCMNCR(flctl)); + if (flctl->holden) + writel(HOLDEN, FLHOLDCR(flctl)); } static int flctl_chip_init_tail(struct mtd_info *mtd) @@ -852,6 +854,7 @@ static int __devinit flctl_probe(struct platform_device *pdev) flctl_mtd->priv = nand; flctl->pdev = pdev; flctl->hwecc = pdata->has_hwecc; + flctl->holden = pdata->use_holden; flctl_register_init(flctl, pdata->flcmncr_val); diff --git a/include/linux/mtd/sh_flctl.h b/include/linux/mtd/sh_flctl.h index ecbf3e6..fc77017 100644 --- a/include/linux/mtd/sh_flctl.h +++ b/include/linux/mtd/sh_flctl.h @@ -38,6 +38,7 @@ #define FLDTFIFO(f) (f->reg + 0x24) #define FLECFIFO(f) (f->reg + 0x28) #define FLTRCR(f) (f->reg + 0x2C) +#define FLHOLDCR(f) (f->reg + 0x38) #define FL4ECCRESULT0(f) (f->reg + 0x80) #define FL4ECCRESULT1(f) (f->reg + 0x84) #define FL4ECCRESULT2(f) (f->reg + 0x88) @@ -109,6 +110,15 @@ #define TRSTRT (0x1 << 0) /* translation start */ #define TREND (0x1 << 1) /* translation end */ +/* + * FLHOLDCR control bits + * + * HOLDEN: Bus Occupancy Enable (inverted) + * Enable this bit when the external bus might be used in between transfers. + * If not set and the bus gets used by other modules, a deadlock occurs. + */ +#define HOLDEN (0x1 << 0) + /* FL4ECCCR control bits */ #define _4ECCFA (0x1 << 2) /* 4 symbols correct fault */ #define _4ECCEND (0x1 << 1) /* 4 symbols end */ @@ -137,6 +147,7 @@ struct sh_flctl { unsigned page_size:1; /* NAND page size (0 = 512, 1 = 2048) */ unsigned hwecc:1; /* Hardware ECC (0 = disabled, 1 = enabled) */ + unsigned holden:1; /* Hardware has FLHOLDCR and HOLDEN is set */ }; struct sh_flctl_platform_data { @@ -145,6 +156,7 @@ struct sh_flctl_platform_data { unsigned long flcmncr_val; unsigned has_hwecc:1; + unsigned use_holden:1; }; static inline struct sh_flctl *mtd_to_flctl(struct mtd_info *mtdinfo) -- 1.7.5.4 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 6/7] mtd: sh_flctl: Add power management support 2012-02-08 12:16 [PATCH 1/7] mtd: sh_flctl: Update FLCMNCR register bit field Bastian Hecht ` (3 preceding siblings ...) 2012-02-08 12:16 ` [PATCH 5/7] mtd: sh_flctl: Add FLHOLDCR register Bastian Hecht @ 2012-02-08 12:16 ` Bastian Hecht 2012-02-08 12:16 ` [PATCH 7/7] ARM: mach-shmobile: mackerel: Add the flash controller flctl Bastian Hecht 5 siblings, 0 replies; 7+ messages in thread From: Bastian Hecht @ 2012-02-08 12:16 UTC (permalink / raw) To: linux-mtd, linux-sh; +Cc: Bastian Hecht, magnus.damm, laurent.pinchart Add pm support for global suspend/resume as well as for runtime-suspend/-resume. All transactions with the NAND chip require a chip enable signal. So we wrap the runtime_get()/put()s around it. Signed-off-by: Bastian Hecht <hechtb@gmail.com> --- drivers/mtd/nand/sh_flctl.c | 46 +++++++++++++++++++++++++++++++++++++---- include/linux/mtd/sh_flctl.h | 2 + 2 files changed, 43 insertions(+), 5 deletions(-) diff --git a/drivers/mtd/nand/sh_flctl.c b/drivers/mtd/nand/sh_flctl.c index 70ca40d..a0231dd 100644 --- a/drivers/mtd/nand/sh_flctl.c +++ b/drivers/mtd/nand/sh_flctl.c @@ -26,6 +26,7 @@ #include <linux/delay.h> #include <linux/io.h> #include <linux/platform_device.h> +#include <linux/pm_runtime.h> #include <linux/slab.h> #include <linux/mtd/mtd.h> @@ -515,6 +516,8 @@ static void flctl_cmdfunc(struct mtd_info *mtd, unsigned int command, struct sh_flctl *flctl = mtd_to_flctl(mtd); uint32_t read_cmd = 0; + BUG_ON(!flctl->power); + flctl->read_bytes = 0; if (command != NAND_CMD_PAGEPROG) flctl->index = 0; @@ -681,14 +684,26 @@ read_normal_exit: static void flctl_select_chip(struct mtd_info *mtd, int chipnr) { struct sh_flctl *flctl = mtd_to_flctl(mtd); - uint32_t flcmncr_val = readl(FLCMNCR(flctl)); + uint32_t flcmncr_val; switch (chipnr) { case -1: + flcmncr_val = readl(FLCMNCR(flctl)); flcmncr_val &= ~CE0_ENABLE; writel(flcmncr_val, FLCMNCR(flctl)); + + if (flctl->power) { + pm_runtime_put_sync(&flctl->pdev->dev); + flctl->power = 0; + } break; case 0: + if (!flctl->power) { + pm_runtime_get_sync(&flctl->pdev->dev); + flctl->power = 1; + udelay(1); /* registers read 0 without delay */ + } + flcmncr_val = readl(FLCMNCR(flctl)); flcmncr_val |= CE0_ENABLE; writel(flcmncr_val, FLCMNCR(flctl)); break; @@ -815,6 +830,20 @@ static int flctl_chip_init_tail(struct mtd_info *mtd) return 0; } +static int flctl_reinitialize(struct device *dev) +{ + struct sh_flctl *flctl = dev_get_drvdata(dev); + udelay(1); + flctl_register_init(flctl, flctl->flcmncr_val); + + return 0; +} + +static const struct dev_pm_ops flctl_dev_pm_ops = { + .resume = flctl_reinitialize, + .runtime_resume = flctl_reinitialize, +}; + static int __devinit flctl_probe(struct platform_device *pdev) { struct resource *res; @@ -853,9 +882,13 @@ static int __devinit flctl_probe(struct platform_device *pdev) nand = &flctl->chip; flctl_mtd->priv = nand; flctl->pdev = pdev; + flctl->flcmncr_val = pdata->flcmncr_val; flctl->hwecc = pdata->has_hwecc; flctl->holden = pdata->use_holden; + pm_runtime_enable(&pdev->dev); + pm_runtime_resume(&pdev->dev); + flctl_register_init(flctl, pdata->flcmncr_val); nand->options = NAND_NO_AUTOINCR; @@ -878,20 +911,21 @@ static int __devinit flctl_probe(struct platform_device *pdev) ret = nand_scan_ident(flctl_mtd, 1, NULL); if (ret) - goto err; + goto chip_err; ret = flctl_chip_init_tail(flctl_mtd); if (ret) - goto err; + goto chip_err; ret = nand_scan_tail(flctl_mtd); if (ret) - goto err; + goto chip_err; mtd_device_register(flctl_mtd, pdata->parts, pdata->nr_parts); return 0; - +chip_err: + pm_runtime_disable(&pdev->dev); err: kfree(flctl); return ret; @@ -902,6 +936,7 @@ static int __devexit flctl_remove(struct platform_device *pdev) struct sh_flctl *flctl = platform_get_drvdata(pdev); nand_release(&flctl->mtd); + pm_runtime_disable(&pdev->dev); kfree(flctl); return 0; @@ -912,6 +947,7 @@ static struct platform_driver flctl_driver = { .driver = { .name = "sh_flctl", .owner = THIS_MODULE, + .pm = &flctl_dev_pm_ops, }, }; diff --git a/include/linux/mtd/sh_flctl.h b/include/linux/mtd/sh_flctl.h index fc77017..bdef1b9 100644 --- a/include/linux/mtd/sh_flctl.h +++ b/include/linux/mtd/sh_flctl.h @@ -145,9 +145,11 @@ struct sh_flctl { int hwecc_cant_correct[4]; + unsigned long flcmncr_val; unsigned page_size:1; /* NAND page size (0 = 512, 1 = 2048) */ unsigned hwecc:1; /* Hardware ECC (0 = disabled, 1 = enabled) */ unsigned holden:1; /* Hardware has FLHOLDCR and HOLDEN is set */ + unsigned power:1; /* RTPM flag */ }; struct sh_flctl_platform_data { -- 1.7.5.4 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 7/7] ARM: mach-shmobile: mackerel: Add the flash controller flctl 2012-02-08 12:16 [PATCH 1/7] mtd: sh_flctl: Update FLCMNCR register bit field Bastian Hecht ` (4 preceding siblings ...) 2012-02-08 12:16 ` [PATCH 6/7] mtd: sh_flctl: Add power management support Bastian Hecht @ 2012-02-08 12:16 ` Bastian Hecht 5 siblings, 0 replies; 7+ messages in thread From: Bastian Hecht @ 2012-02-08 12:16 UTC (permalink / raw) To: linux-mtd, linux-sh; +Cc: Bastian Hecht, magnus.damm, laurent.pinchart Add board and clock setup code for the SH Mobile flctl controller. Signed-off-by: Bastian Hecht <hechtb@gmail.com> --- arch/arm/mach-shmobile/board-mackerel.c | 71 +++++++++++++++++++++++++++++++ arch/arm/mach-shmobile/clock-sh7372.c | 4 +- 2 files changed, 74 insertions(+), 1 deletions(-) diff --git a/arch/arm/mach-shmobile/board-mackerel.c b/arch/arm/mach-shmobile/board-mackerel.c index 9c5e598..136b3cb 100644 --- a/arch/arm/mach-shmobile/board-mackerel.c +++ b/arch/arm/mach-shmobile/board-mackerel.c @@ -39,6 +39,7 @@ #include <linux/mtd/mtd.h> #include <linux/mtd/partitions.h> #include <linux/mtd/physmap.h> +#include <linux/mtd/sh_flctl.h> #include <linux/pm_clock.h> #include <linux/smsc911x.h> #include <linux/sh_intc.h> @@ -994,6 +995,50 @@ static struct platform_device fsi_ak4643_device = { .name = "sh_fsi2_a_ak4643", }; +/* FLCTL */ +static struct mtd_partition nand_partition_info[] = { + { + .name = "system", + .offset = 0, + .size = 128 * 1024 * 1024, + }, + { + .name = "userdata", + .offset = MTDPART_OFS_APPEND, + .size = 256 * 1024 * 1024, + }, + { + .name = "cache", + .offset = MTDPART_OFS_APPEND, + .size = 128 * 1024 * 1024, + }, +}; + +static struct resource nand_flash_resources[] = { + [0] = { + .start = 0xe6a30000, + .end = 0xe6a3009b, + .flags = IORESOURCE_MEM, + } +}; + +static struct sh_flctl_platform_data nand_flash_data = { + .parts = nand_partition_info, + .nr_parts = ARRAY_SIZE(nand_partition_info), + .flcmncr_val = CLK_16_BIT_12HP_LOW_4HP_HIGH | TYPESEL_SET + | SHBUSSEL | SEL_16BIT | SNAND_E, + .use_holden = 1, +}; + +static struct platform_device nand_flash_device = { + .name = "sh_flctl", + .resource = nand_flash_resources, + .num_resources = ARRAY_SIZE(nand_flash_resources), + .dev = { + .platform_data = &nand_flash_data, + }, +}; + /* * The card detect pin of the top SD/MMC slot (CN7) is active low and is * connected to GPIO A22 of SH7372 (GPIO_PORT41). @@ -1306,6 +1351,7 @@ static struct platform_device *mackerel_devices[] __initdata = { &fsi_device, &fsi_ak4643_device, &fsi_hdmi_device, + &nand_flash_device, &sdhi0_device, #if !defined(CONFIG_MMC_SH_MMCIF) && !defined(CONFIG_MMC_SH_MMCIF_MODULE) &sdhi1_device, @@ -1558,6 +1604,30 @@ static void __init mackerel_init(void) gpio_request(GPIO_FN_MMCCMD0, NULL); gpio_request(GPIO_FN_MMCCLK0, NULL); + /* FLCTL */ + gpio_request(GPIO_FN_D0_NAF0, NULL); + gpio_request(GPIO_FN_D1_NAF1, NULL); + gpio_request(GPIO_FN_D2_NAF2, NULL); + gpio_request(GPIO_FN_D3_NAF3, NULL); + gpio_request(GPIO_FN_D4_NAF4, NULL); + gpio_request(GPIO_FN_D5_NAF5, NULL); + gpio_request(GPIO_FN_D6_NAF6, NULL); + gpio_request(GPIO_FN_D7_NAF7, NULL); + gpio_request(GPIO_FN_D8_NAF8, NULL); + gpio_request(GPIO_FN_D9_NAF9, NULL); + gpio_request(GPIO_FN_D10_NAF10, NULL); + gpio_request(GPIO_FN_D11_NAF11, NULL); + gpio_request(GPIO_FN_D12_NAF12, NULL); + gpio_request(GPIO_FN_D13_NAF13, NULL); + gpio_request(GPIO_FN_D14_NAF14, NULL); + gpio_request(GPIO_FN_D15_NAF15, NULL); + gpio_request(GPIO_FN_FCE0, NULL); + gpio_request(GPIO_FN_WE0_FWE, NULL); + gpio_request(GPIO_FN_FRB, NULL); + gpio_request(GPIO_FN_A4_FOE, NULL); + gpio_request(GPIO_FN_A5_FCDE, NULL); + gpio_request(GPIO_FN_RD_FSC, NULL); + /* enable GPS module (GT-720F) */ gpio_request(GPIO_FN_SCIFA2_TXD1, NULL); gpio_request(GPIO_FN_SCIFA2_RXD1, NULL); @@ -1602,6 +1672,7 @@ static void __init mackerel_init(void) sh7372_add_device_to_domain(&sh7372_a4mp, &fsi_device); sh7372_add_device_to_domain(&sh7372_a3sp, &usbhs0_device); sh7372_add_device_to_domain(&sh7372_a3sp, &usbhs1_device); + sh7372_add_device_to_domain(&sh7372_a3sp, &nand_flash_device); sh7372_add_device_to_domain(&sh7372_a3sp, &sh_mmcif_device); sh7372_add_device_to_domain(&sh7372_a3sp, &sdhi0_device); #if !defined(CONFIG_MMC_SH_MMCIF) && !defined(CONFIG_MMC_SH_MMCIF_MODULE) diff --git a/arch/arm/mach-shmobile/clock-sh7372.c b/arch/arm/mach-shmobile/clock-sh7372.c index 995a9c3..99dd283 100644 --- a/arch/arm/mach-shmobile/clock-sh7372.c +++ b/arch/arm/mach-shmobile/clock-sh7372.c @@ -511,7 +511,7 @@ enum { MSTP001, MSTP000, MSTP223, MSTP218, MSTP217, MSTP216, MSTP214, MSTP208, MSTP207, MSTP206, MSTP205, MSTP204, MSTP203, MSTP202, MSTP201, MSTP200, - MSTP328, MSTP323, MSTP322, MSTP314, MSTP313, MSTP312, + MSTP328, MSTP323, MSTP322, MSTP315, MSTP314, MSTP313, MSTP312, MSTP423, MSTP415, MSTP413, MSTP411, MSTP410, MSTP407, MSTP406, MSTP405, MSTP404, MSTP403, MSTP400, MSTP_NR }; @@ -553,6 +553,7 @@ static struct clk mstp_clks[MSTP_NR] = { [MSTP328] = MSTP(&div6_clks[DIV6_SPU], SMSTPCR3, 28, 0), /* FSI2 */ [MSTP323] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR3, 23, 0), /* IIC1 */ [MSTP322] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR3, 22, 0), /* USB0 */ + [MSTP315] = MSTP(&div4_clks[DIV4_HP], SMSTPCR3, 15, 0), /* FLCTL*/ [MSTP314] = MSTP(&div4_clks[DIV4_HP], SMSTPCR3, 14, 0), /* SDHI0 */ [MSTP313] = MSTP(&div4_clks[DIV4_HP], SMSTPCR3, 13, 0), /* SDHI1 */ [MSTP312] = MSTP(&div4_clks[DIV4_HP], SMSTPCR3, 12, 0), /* MMC */ @@ -653,6 +654,7 @@ static struct clk_lookup lookups[] = { CLKDEV_DEV_ID("r8a66597_hcd.0", &mstp_clks[MSTP322]), /* USB0 */ CLKDEV_DEV_ID("r8a66597_udc.0", &mstp_clks[MSTP322]), /* USB0 */ CLKDEV_DEV_ID("renesas_usbhs.0", &mstp_clks[MSTP322]), /* USB0 */ + CLKDEV_DEV_ID("sh_flctl.0", &mstp_clks[MSTP315]), /* FLCTL */ CLKDEV_DEV_ID("sh_mobile_sdhi.0", &mstp_clks[MSTP314]), /* SDHI0 */ CLKDEV_DEV_ID("sh_mobile_sdhi.1", &mstp_clks[MSTP313]), /* SDHI1 */ CLKDEV_DEV_ID("sh_mmcif.0", &mstp_clks[MSTP312]), /* MMC */ -- 1.7.5.4 ^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2012-02-08 12:16 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-02-08 12:16 [PATCH 1/7] mtd: sh_flctl: Update FLCMNCR register bit field Bastian Hecht 2012-02-08 12:16 ` [PATCH 2/7] mtd: sh_flctl: Reorder empty_fifo() calls Bastian Hecht 2012-02-08 12:16 ` [PATCH 3/7] mtd: sh_flctl: Expand the READID command to 8 bytes Bastian Hecht 2012-02-08 12:16 ` [PATCH 4/7] mtd: sh_flctl: Implement NAND_CMD_RNDOUT command Bastian Hecht 2012-02-08 12:16 ` [PATCH 5/7] mtd: sh_flctl: Add FLHOLDCR register Bastian Hecht 2012-02-08 12:16 ` [PATCH 6/7] mtd: sh_flctl: Add power management support Bastian Hecht 2012-02-08 12:16 ` [PATCH 7/7] ARM: mach-shmobile: mackerel: Add the flash controller flctl Bastian Hecht
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).