aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap2
diff options
context:
space:
mode:
authorJon Hunter <jon-hunter@ti.com>2013-02-25 12:37:58 -0500
committerJon Hunter <jon-hunter@ti.com>2013-04-03 21:13:39 -0400
commit32cde0b5141030030f950a3c7e971018c81a9360 (patch)
treea7f1e6b0af06947a0e32fe5aceb4f030e925dba2 /arch/arm/mach-omap2
parentacc79980c92ca9e8a39115b60ca832718a8156df (diff)
ARM: OMAP2+: Convert ONENAND to retrieve GPMC settings from DT
When booting with device-tree, retrieve GPMC settings for ONENAND from the device-tree blob. This will allow us to remove all static settings stored in the gpmc-nand.c in the future once the migration to device-tree is complete. The user must now specify the ONENAND device width in the device-tree binding so that the GPMC can be programmed correctly. Therefore, update the device-tree binding documentation for ONENAND devices connected to the GPMC to reflect this. Please note that this does not include GPMC timings for ONENAND. The timings are being calculated at runtime. There is some legacy code that only enables read wait monitoring for non-OMAP3 devices. There are no known OMAP3 device issues that prevent this feature being enabled and so when booting with device-tree use the wait-monitoring settings described in the device-tree blob. Signed-off-by: Jon Hunter <jon-hunter@ti.com> Tested-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
Diffstat (limited to 'arch/arm/mach-omap2')
-rw-r--r--arch/arm/mach-omap2/gpmc-onenand.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/arch/arm/mach-omap2/gpmc-onenand.c b/arch/arm/mach-omap2/gpmc-onenand.c
index 46aac83d73d4..64b5a8346982 100644
--- a/arch/arm/mach-omap2/gpmc-onenand.c
+++ b/arch/arm/mach-omap2/gpmc-onenand.c
@@ -272,6 +272,10 @@ static int omap2_onenand_setup_async(void __iomem *onenand_base)
272 struct gpmc_timings t; 272 struct gpmc_timings t;
273 int ret; 273 int ret;
274 274
275 if (gpmc_onenand_data->of_node)
276 gpmc_read_settings_dt(gpmc_onenand_data->of_node,
277 &onenand_async);
278
275 omap2_onenand_set_async_mode(onenand_base); 279 omap2_onenand_set_async_mode(onenand_base);
276 280
277 omap2_onenand_calc_async_timings(&t); 281 omap2_onenand_calc_async_timings(&t);
@@ -300,12 +304,17 @@ static int omap2_onenand_setup_sync(void __iomem *onenand_base, int *freq_ptr)
300 set_onenand_cfg(onenand_base); 304 set_onenand_cfg(onenand_base);
301 } 305 }
302 306
303 /* 307 if (gpmc_onenand_data->of_node) {
304 * FIXME: Appears to be legacy code from initial ONENAND commit. 308 gpmc_read_settings_dt(gpmc_onenand_data->of_node,
305 * Unclear what boards this is for and if this can be removed. 309 &onenand_sync);
306 */ 310 } else {
307 if (!cpu_is_omap34xx()) 311 /*
308 onenand_sync.wait_on_read = true; 312 * FIXME: Appears to be legacy code from initial ONENAND commit.
313 * Unclear what boards this is for and if this can be removed.
314 */
315 if (!cpu_is_omap34xx())
316 onenand_sync.wait_on_read = true;
317 }
309 318
310 omap2_onenand_calc_sync_timings(&t, gpmc_onenand_data->flags, freq); 319 omap2_onenand_calc_sync_timings(&t, gpmc_onenand_data->flags, freq);
311 320