[linux-yocto] [PATCH 2/4] LSI nand: Enables support for 3500 NAND
Charlie Paul
cpaul.windriver at gmail.com
Tue May 20 15:36:09 PDT 2014
From: SangeethaRao <sangeetha.rao at lsi.com>
Until this patch NAND driver was disabled for 3500.
This patch, enables the NAND driver for 3500.
Signed-off-by: SangeethaRao <sangeetha.rao at lsi.com>
---
drivers/mtd/nand/lsi_acp_nand.c | 43 +++++++++++++++++++++++++++------------
1 file changed, 30 insertions(+), 13 deletions(-)
diff --git a/drivers/mtd/nand/lsi_acp_nand.c b/drivers/mtd/nand/lsi_acp_nand.c
index ff2566b..dbb95b5 100644
--- a/drivers/mtd/nand/lsi_acp_nand.c
+++ b/drivers/mtd/nand/lsi_acp_nand.c
@@ -601,6 +601,18 @@ lsi_nand_command(struct mtd_info *mtd, unsigned int command,
register struct nand_chip *chip = mtd->priv;
unsigned int status = 0;
struct lsi_nand_private *priv = &lsi_nand_private;
+ struct device_node *np = NULL;
+ void *busy_reg;
+ unsigned long busy_mask;
+
+ np = of_find_compatible_node(NULL, NULL, "lsi,acp3500");
+ if (NULL != np) {
+ busy_reg = (gpreg_base + 0x80);
+ busy_mask = (1 << 20);
+ } else {
+ busy_reg = LSI_NAND_PECC_BUSY_REGISTER;
+ busy_mask = LSI_NAND_PECC_BUSY_MASK;
+ }
DEBUG_PRINT("command=0x%x\n", command);
command &= 0xff;
@@ -705,8 +717,8 @@ lsi_nand_command(struct mtd_info *mtd, unsigned int command,
NAND_NCE | NAND_CLE | NAND_CTRL_CHANGE);
do {
udelay(chip->chip_delay);
- status = READL((void *)LSI_NAND_PECC_BUSY_REGISTER);
- } while (0 != (status & LSI_NAND_PECC_BUSY_MASK));
+ status = READL((void *)busy_reg);
+ } while (0 != (status & busy_mask));
/* wait until CHIP_BUSY goes low */
do {
@@ -802,6 +814,18 @@ static int lsi_nand_wait(struct mtd_info *mtd, struct nand_chip *chip)
{
unsigned long status = 0;
loff_t offset = 0;
+ struct device_node *np = NULL;
+ void *busy_reg;
+ unsigned long busy_mask;
+
+ np = of_find_compatible_node(NULL, NULL, "lsi,acp3500");
+ if (NULL != np) {
+ busy_reg = (gpreg_base + 0x80);
+ busy_mask = (1 << 20);
+ } else {
+ busy_reg = LSI_NAND_PECC_BUSY_REGISTER;
+ busy_mask = LSI_NAND_PECC_BUSY_MASK;
+ }
/*
When reading or writing, wait for the
@@ -810,9 +834,9 @@ static int lsi_nand_wait(struct mtd_info *mtd, struct nand_chip *chip)
#ifdef NOT_USED
if (FL_READING == chip->state || FL_WRITING == chip->state) {
for (;;) {
- status = READL((void *)LSI_NAND_PECC_BUSY_REGISTER);
+ status = READL((void *)busy_reg);
- if (0 == (status & LSI_NAND_PECC_BUSY_MASK))
+ if (0 == (status & busy_mask))
break;
udelay(chip->chip_delay);
@@ -820,9 +844,9 @@ static int lsi_nand_wait(struct mtd_info *mtd, struct nand_chip *chip)
}
#else
for (;;) {
- status = READL((void *)LSI_NAND_PECC_BUSY_REGISTER);
+ status = READL((void *)busy_reg);
- if (0 == (status & LSI_NAND_PECC_BUSY_MASK))
+ if (0 == (status & busy_mask))
break;
udelay(chip->chip_delay);
@@ -3433,13 +3457,6 @@ lsi_nand_init(void)
static const char *part_probe_types[]
= { "cmdlinepart", "ofpart", NULL };
- np = of_find_compatible_node(NULL, NULL, "lsi,acp3500");
-
- if (NULL != np) {
- pr_err("NAND Support is Not Yet Available on 3500\n");
- return -1;
- }
-
memset(&ppdata, 0, sizeof(ppdata));
np = of_find_node_by_type(np, "nand");
--
1.7.9.5
More information about the linux-yocto
mailing list