aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAfzal Mohammed <afzal@ti.com>2012-08-30 15:53:22 -0400
committerTony Lindgren <tony@atomide.com>2012-08-30 15:53:22 -0400
commit52bd138d616409a45bbb32bd3536cbdadc524de6 (patch)
tree5f545406d3eaae4f2d4d72df09dcf0d5682ba0f9
parentfea7a08acb13524b47711625eebea40a0ede69a0 (diff)
ARM: OMAP2+: gpmc: update nand register helper
Provide helper function for updating NAND register details for the necessary chip select. NAND drivers platform data can be updated with this information so that NAND driver can handle GPMC NAND operations by itself. Signed-off-by: Afzal Mohammed <afzal@ti.com> Signed-off-by: Tony Lindgren <tony@atomide.com>
-rw-r--r--arch/arm/mach-omap2/gpmc.c20
-rw-r--r--arch/arm/plat-omap/include/plat/gpmc.h18
2 files changed, 38 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/gpmc.c b/arch/arm/mach-omap2/gpmc.c
index b2b5759ab0fe..5cce9b00c13e 100644
--- a/arch/arm/mach-omap2/gpmc.c
+++ b/arch/arm/mach-omap2/gpmc.c
@@ -682,6 +682,26 @@ int gpmc_prefetch_reset(int cs)
682} 682}
683EXPORT_SYMBOL(gpmc_prefetch_reset); 683EXPORT_SYMBOL(gpmc_prefetch_reset);
684 684
685void gpmc_update_nand_reg(struct gpmc_nand_regs *reg, int cs)
686{
687 reg->gpmc_status = gpmc_base + GPMC_STATUS;
688 reg->gpmc_nand_command = gpmc_base + GPMC_CS0_OFFSET +
689 GPMC_CS_NAND_COMMAND + GPMC_CS_SIZE * cs;
690 reg->gpmc_nand_address = gpmc_base + GPMC_CS0_OFFSET +
691 GPMC_CS_NAND_ADDRESS + GPMC_CS_SIZE * cs;
692 reg->gpmc_nand_data = gpmc_base + GPMC_CS0_OFFSET +
693 GPMC_CS_NAND_DATA + GPMC_CS_SIZE * cs;
694 reg->gpmc_prefetch_config1 = gpmc_base + GPMC_PREFETCH_CONFIG1;
695 reg->gpmc_prefetch_config2 = gpmc_base + GPMC_PREFETCH_CONFIG2;
696 reg->gpmc_prefetch_control = gpmc_base + GPMC_PREFETCH_CONTROL;
697 reg->gpmc_prefetch_status = gpmc_base + GPMC_PREFETCH_STATUS;
698 reg->gpmc_ecc_config = gpmc_base + GPMC_ECC_CONFIG;
699 reg->gpmc_ecc_control = gpmc_base + GPMC_ECC_CONTROL;
700 reg->gpmc_ecc_size_config = gpmc_base + GPMC_ECC_SIZE_CONFIG;
701 reg->gpmc_ecc1_result = gpmc_base + GPMC_ECC1_RESULT;
702 reg->gpmc_bch_result0 = gpmc_base + GPMC_ECC_BCH_RESULT_0;
703}
704
685static void __init gpmc_mem_init(void) 705static void __init gpmc_mem_init(void)
686{ 706{
687 int cs; 707 int cs;
diff --git a/arch/arm/plat-omap/include/plat/gpmc.h b/arch/arm/plat-omap/include/plat/gpmc.h
index f37764a36072..06198a51c4f0 100644
--- a/arch/arm/plat-omap/include/plat/gpmc.h
+++ b/arch/arm/plat-omap/include/plat/gpmc.h
@@ -133,6 +133,24 @@ struct gpmc_timings {
133 u16 wr_data_mux_bus; /* WRDATAONADMUXBUS */ 133 u16 wr_data_mux_bus; /* WRDATAONADMUXBUS */
134}; 134};
135 135
136struct gpmc_nand_regs {
137 void __iomem *gpmc_status;
138 void __iomem *gpmc_nand_command;
139 void __iomem *gpmc_nand_address;
140 void __iomem *gpmc_nand_data;
141 void __iomem *gpmc_prefetch_config1;
142 void __iomem *gpmc_prefetch_config2;
143 void __iomem *gpmc_prefetch_control;
144 void __iomem *gpmc_prefetch_status;
145 void __iomem *gpmc_ecc_config;
146 void __iomem *gpmc_ecc_control;
147 void __iomem *gpmc_ecc_size_config;
148 void __iomem *gpmc_ecc1_result;
149 void __iomem *gpmc_bch_result0;
150};
151
152extern void gpmc_update_nand_reg(struct gpmc_nand_regs *reg, int cs);
153
136extern unsigned int gpmc_ns_to_ticks(unsigned int time_ns); 154extern unsigned int gpmc_ns_to_ticks(unsigned int time_ns);
137extern unsigned int gpmc_ps_to_ticks(unsigned int time_ps); 155extern unsigned int gpmc_ps_to_ticks(unsigned int time_ps);
138extern unsigned int gpmc_ticks_to_ns(unsigned int ticks); 156extern unsigned int gpmc_ticks_to_ns(unsigned int ticks);