From: jon-hunter@ti.com (Jon Hunter)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 05/14] ARM: OMAP2+: Convert ONENAND to use gpmc_cs_program_settings()
Date: Tue, 26 Feb 2013 11:30:32 -0600 [thread overview]
Message-ID: <1361899842-30303-6-git-send-email-jon-hunter@ti.com> (raw)
In-Reply-To: <1361899842-30303-1-git-send-email-jon-hunter@ti.com>
Convert the OMAP2+ ONENAND code to use the gpmc_cs_program_settings()
function for configuring the various GPMC options instead of directly
programming the CONFIG1 register.
Signed-off-by: Jon Hunter <jon-hunter@ti.com>
---
arch/arm/mach-omap2/gpmc-onenand.c | 61 +++++++++++++++---------------------
1 file changed, 25 insertions(+), 36 deletions(-)
diff --git a/arch/arm/mach-omap2/gpmc-onenand.c b/arch/arm/mach-omap2/gpmc-onenand.c
index 8b1c08e..1e2191c 100644
--- a/arch/arm/mach-omap2/gpmc-onenand.c
+++ b/arch/arm/mach-omap2/gpmc-onenand.c
@@ -49,17 +49,21 @@ static struct platform_device gpmc_onenand_device = {
static struct gpmc_settings onenand_async = {
.mux_add_data = true,
+ .device_width = GPMC_DEVWIDTH_16BIT,
};
static struct gpmc_settings onenand_sync = {
.burst_read = true,
+ .burst_wrap = true,
.mux_add_data = true,
+ .burst_len = GPMC_BURST_16,
+ .device_width = GPMC_DEVWIDTH_16BIT,
+ .wait_pin = 0,
};
static void omap2_onenand_calc_async_timings(struct gpmc_timings *t)
{
struct gpmc_device_timings dev_t;
-
const int t_cer = 15;
const int t_avdp = 12;
const int t_aavdh = 7;
@@ -86,16 +90,6 @@ static void omap2_onenand_calc_async_timings(struct gpmc_timings *t)
gpmc_calc_timings(t, &onenand_async, &dev_t);
}
-static int gpmc_set_async_mode(int cs, struct gpmc_timings *t)
-{
- /* Configure GPMC for asynchronous read */
- gpmc_cs_write_reg(cs, GPMC_CS_CONFIG1,
- GPMC_CONFIG1_DEVICESIZE_16 |
- GPMC_CONFIG1_MUXADDDATA);
-
- return gpmc_cs_set_timings(cs, t);
-}
-
static void omap2_onenand_set_async_mode(void __iomem *onenand_base)
{
u32 reg;
@@ -243,8 +237,11 @@ static void omap2_onenand_calc_sync_timings(struct gpmc_timings *t,
/* Set synchronous read timings */
memset(&dev_t, 0, sizeof(dev_t));
+ if (onenand_flags & ONENAND_FLAG_SYNCREAD)
+ onenand_sync.sync_read = true;
if (onenand_flags & ONENAND_FLAG_SYNCWRITE) {
onenand_sync.sync_write = true;
+ onenand_sync.burst_write = true;
} else {
dev_t.t_avdp_w = max(t_avdp, t_cer) * 1000;
dev_t.t_wpl = t_wpl * 1000;
@@ -270,29 +267,6 @@ static void omap2_onenand_calc_sync_timings(struct gpmc_timings *t,
gpmc_calc_timings(t, &onenand_sync, &dev_t);
}
-static int gpmc_set_sync_mode(int cs, struct gpmc_timings *t)
-{
- unsigned sync_read = onenand_flags & ONENAND_FLAG_SYNCREAD;
- unsigned sync_write = onenand_flags & ONENAND_FLAG_SYNCWRITE;
-
- /* Configure GPMC for synchronous read */
- gpmc_cs_write_reg(cs, GPMC_CS_CONFIG1,
- GPMC_CONFIG1_WRAPBURST_SUPP |
- GPMC_CONFIG1_READMULTIPLE_SUPP |
- (sync_read ? GPMC_CONFIG1_READTYPE_SYNC : 0) |
- (sync_write ? GPMC_CONFIG1_WRITEMULTIPLE_SUPP : 0) |
- (sync_write ? GPMC_CONFIG1_WRITETYPE_SYNC : 0) |
- GPMC_CONFIG1_PAGE_LEN(2) |
- (cpu_is_omap34xx() ? 0 :
- (GPMC_CONFIG1_WAIT_READ_MON |
- GPMC_CONFIG1_WAIT_PIN_SEL(0))) |
- GPMC_CONFIG1_DEVICESIZE_16 |
- GPMC_CONFIG1_DEVICETYPE_NOR |
- GPMC_CONFIG1_MUXADDDATA);
-
- return gpmc_cs_set_timings(cs, t);
-}
-
static int omap2_onenand_setup_async(void __iomem *onenand_base)
{
struct gpmc_timings t;
@@ -302,7 +276,11 @@ static int omap2_onenand_setup_async(void __iomem *onenand_base)
omap2_onenand_calc_async_timings(&t);
- ret = gpmc_set_async_mode(gpmc_onenand_data->cs, &t);
+ ret = gpmc_cs_program_settings(gpmc_onenand_data->cs, &onenand_async);
+ if (IS_ERR_VALUE(ret))
+ return ret;
+
+ ret = gpmc_cs_set_timings(gpmc_onenand_data->cs, &t);
if (IS_ERR_VALUE(ret))
return ret;
@@ -322,9 +300,20 @@ static int omap2_onenand_setup_sync(void __iomem *onenand_base, int *freq_ptr)
set_onenand_cfg(onenand_base);
}
+ /*
+ * FIXME: Appears to be legacy code from initial ONENAND commit.
+ * Unclear what boards this is for and if this can be removed.
+ */
+ if (!cpu_is_omap34xx())
+ onenand_sync.wait_on_read = true;
+
omap2_onenand_calc_sync_timings(&t, gpmc_onenand_data->flags, freq);
- ret = gpmc_set_sync_mode(gpmc_onenand_data->cs, &t);
+ ret = gpmc_cs_program_settings(gpmc_onenand_data->cs, &onenand_sync);
+ if (IS_ERR_VALUE(ret))
+ return ret;
+
+ ret = gpmc_cs_set_timings(gpmc_onenand_data->cs, &t);
if (IS_ERR_VALUE(ret))
return ret;
--
1.7.10.4
next prev parent reply other threads:[~2013-02-26 17:30 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-26 17:30 [PATCH 00/14] ARM: OMAP2+: GPMC clean-up and DT update Jon Hunter
2013-02-26 17:30 ` [PATCH 01/14] ARM: OMAP2+: Simplify code configuring ONENAND devices Jon Hunter
2013-02-26 17:30 ` [PATCH 02/14] ARM: OMAP2+: Add variable to store number of GPMC waitpins Jon Hunter
2013-02-26 17:30 ` [PATCH 03/14] ARM: OMAP2+: Add structure for storing GPMC settings Jon Hunter
2013-02-26 17:30 ` [PATCH 04/14] ARM: OMAP2+: Add function for configuring " Jon Hunter
2013-02-28 6:05 ` Philip, Avinash
2013-02-28 15:52 ` Jon Hunter
2013-02-28 17:12 ` Jon Hunter
2013-03-01 5:33 ` Philip, Avinash
2013-03-01 15:43 ` Jon Hunter
2013-03-04 10:05 ` Philip, Avinash
2013-02-26 17:30 ` Jon Hunter [this message]
2013-02-26 17:30 ` [PATCH 06/14] ARM: OMAP2+: Convert NAND to use gpmc_cs_program_settings() Jon Hunter
2013-02-28 10:38 ` Philip, Avinash
2013-02-28 16:02 ` Jon Hunter
2013-03-01 5:40 ` Philip, Avinash
2013-03-01 15:50 ` Jon Hunter
2013-02-26 17:30 ` [PATCH 07/14] ARM: OMAP2+: Convert SMC91x " Jon Hunter
2013-02-26 17:30 ` [PATCH 08/14] ARM: OMAP2+: Convert TUSB " Jon Hunter
2013-02-26 17:30 ` [PATCH 09/14] ARM: OMAP2+: Don't configure of chip-select options in gpmc_cs_configure() Jon Hunter
2013-02-26 17:30 ` [PATCH 10/14] ARM: OMAP2+: Add function to read GPMC settings from device-tree Jon Hunter
2013-02-26 17:30 ` [PATCH 11/14] ARM: OMAP2+: Add device-tree support for NOR flash Jon Hunter
2013-03-01 21:25 ` Ezequiel Garcia
2013-03-01 22:24 ` Jon Hunter
2013-03-04 11:57 ` Ezequiel Garcia
2013-03-04 17:51 ` Jon Hunter
2013-03-04 18:19 ` Jon Hunter
2013-03-05 14:34 ` Mark Jackson
2013-03-05 14:46 ` Jon Hunter
2013-03-05 16:20 ` Mark Jackson
2013-03-05 17:30 ` Jon Hunter
2013-03-05 17:43 ` Ezequiel Garcia
2013-03-05 18:41 ` Jon Hunter
2013-03-05 21:34 ` Jon Hunter
2013-03-06 10:23 ` Mark Jackson
2013-03-06 13:30 ` Mark Jackson
2013-03-06 16:44 ` Jon Hunter
2013-03-06 16:48 ` Mark Jackson
2013-03-06 17:00 ` Jon Hunter
2013-03-06 18:01 ` Jon Hunter
2013-03-06 11:58 ` Ezequiel Garcia
2013-03-06 16:46 ` Jon Hunter
2013-03-06 16:54 ` Ezequiel Garcia
2013-03-07 13:02 ` Ezequiel Garcia
2013-02-26 17:30 ` [PATCH 12/14] ARM: OMAP2+: Add additional GPMC timing parameters Jon Hunter
2013-03-01 20:11 ` Ezequiel Garcia
2013-03-01 20:12 ` Ezequiel Garcia
2013-03-01 22:27 ` Jon Hunter
2013-03-01 22:27 ` Jon Hunter
2013-02-26 17:30 ` [PATCH 13/14] ARM: OMAP2+: Convert NAND to retrieve GPMC settings from DT Jon Hunter
2013-02-26 17:30 ` [PATCH 14/14] ARM: OMAP2+: Convert ONENAND " Jon Hunter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1361899842-30303-6-git-send-email-jon-hunter@ti.com \
--to=jon-hunter@ti.com \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).