* [PATCH] driver/mtd:IFC NAND:Initialise internal SRAM before any write
@ 2012-09-13 8:54 Prabhakar Kushwaha
2012-09-13 12:53 ` Kumar Gala
2012-09-27 12:33 ` Kumar Gala
0 siblings, 2 replies; 5+ messages in thread
From: Prabhakar Kushwaha @ 2012-09-13 8:54 UTC (permalink / raw)
To: linux-mtd, linuxppc-dev; +Cc: scottwood, Prabhakar Kushwaha, dedekind1
IFC-1.1.0 uses 28nm techenology for SRAM. This tech has known limitaion for
SRAM i.e. "byte select" is not supported. Hence Read Modify Write is
implemented in IFC for any "system side write" into sram buffer. Reading an
uninitialized memory results in ECC Error from sram wrapper.
Hence we must initialize/prefill SRAM buffer by any data before writing
anything in SRAM from system side. To initialize SRAM user can use "READID"
NAND command with read bytes equal to SRAM size. It will be a one time
activity post boot.
Signed-off-by: Prabhakar Kushwaha <prabhakar@freescale.com>
---
Based upon git://git.infradead.org/linux-mtd.git branch master
The compilation of this patch depends upon following patch.
http://patchwork.ozlabs.org/patch/177893/
This patch is currently applied on git://git.kernel.org/pub/scm/linux/kernel/git/galak/powerpc.git
branch next and status is "Awaiting Upstream"
drivers/mtd/nand/fsl_ifc_nand.c | 56 ++++++++++++++++++++++++++++++++++++++-
1 file changed, 55 insertions(+), 1 deletion(-)
diff --git a/drivers/mtd/nand/fsl_ifc_nand.c b/drivers/mtd/nand/fsl_ifc_nand.c
index 1f71b54..3d15b92 100644
--- a/drivers/mtd/nand/fsl_ifc_nand.c
+++ b/drivers/mtd/nand/fsl_ifc_nand.c
@@ -31,6 +31,7 @@
#include <linux/mtd/nand_ecc.h>
#include <asm/fsl_ifc.h>
+#define FSL_IFC_V1_1_0 0x01010000
#define ERR_BYTE 0xFF /* Value returned for read
bytes when read failed */
#define IFC_TIMEOUT_MSECS 500 /* Maximum number of mSecs to wait
@@ -775,13 +776,62 @@ static int fsl_ifc_chip_init_tail(struct mtd_info *mtd)
return 0;
}
+static void fsl_ifc_sram_init(struct fsl_ifc_mtd *priv)
+{
+ struct fsl_ifc_ctrl *ctrl = priv->ctrl;
+ struct fsl_ifc_regs __iomem *ifc = ctrl->regs;
+ uint32_t csor = 0, csor_8k = 0, csor_ext = 0;
+ uint32_t cs = priv->bank;
+
+ /* Save CSOR and CSOR_ext */
+ csor = in_be32(&ifc->csor_cs[cs].csor);
+ csor_ext = in_be32(&ifc->csor_cs[cs].csor_ext);
+
+ /* chage PageSize 8K and SpareSize 1K*/
+ csor_8k = (csor & ~(CSOR_NAND_PGS_MASK)) | 0x0018C000;
+ out_be32(&ifc->csor_cs[cs].csor, csor_8k);
+ out_be32(&ifc->csor_cs[cs].csor_ext, 0x0000400);
+
+ /* READID */
+ out_be32(&ifc->ifc_nand.nand_fir0,
+ (IFC_FIR_OP_CMD0 << IFC_NAND_FIR0_OP0_SHIFT) |
+ (IFC_FIR_OP_UA << IFC_NAND_FIR0_OP1_SHIFT) |
+ (IFC_FIR_OP_RB << IFC_NAND_FIR0_OP2_SHIFT));
+ out_be32(&ifc->ifc_nand.nand_fcr0,
+ NAND_CMD_READID << IFC_NAND_FCR0_CMD0_SHIFT);
+ out_be32(&ifc->ifc_nand.row3, 0x0);
+
+ out_be32(&ifc->ifc_nand.nand_fbcr, 0x0);
+
+ /* Program ROW0/COL0 */
+ out_be32(&ifc->ifc_nand.row0, 0x0);
+ out_be32(&ifc->ifc_nand.col0, 0x0);
+
+ /* set the chip select for NAND Transaction */
+ out_be32(&ifc->ifc_nand.nand_csel, cs << IFC_NAND_CSEL_SHIFT);
+
+ /* start read seq */
+ out_be32(&ifc->ifc_nand.nandseq_strt, IFC_NAND_SEQ_STRT_FIR_STRT);
+
+ /* wait for command complete flag or timeout */
+ wait_event_timeout(ctrl->nand_wait, ctrl->nand_stat,
+ IFC_TIMEOUT_MSECS * HZ/1000);
+
+ if (ctrl->nand_stat != IFC_NAND_EVTER_STAT_OPC)
+ printk(KERN_ERR "fsl-ifc: Failed to Initialise SRAM\n");
+
+ /* Restore CSOR and CSOR_ext */
+ out_be32(&ifc->csor_cs[cs].csor, csor);
+ out_be32(&ifc->csor_cs[cs].csor_ext, csor_ext);
+}
+
static int fsl_ifc_chip_init(struct fsl_ifc_mtd *priv)
{
struct fsl_ifc_ctrl *ctrl = priv->ctrl;
struct fsl_ifc_regs __iomem *ifc = ctrl->regs;
struct nand_chip *chip = &priv->chip;
struct nand_ecclayout *layout;
- u32 csor;
+ u32 csor, ver;
/* Fill in fsl_ifc_mtd structure */
priv->mtd.priv = chip;
@@ -875,6 +925,10 @@ static int fsl_ifc_chip_init(struct fsl_ifc_mtd *priv)
chip->ecc.mode = NAND_ECC_SOFT;
}
+ ver = in_be32(&ifc->ifc_rev);
+ if (ver == FSL_IFC_V1_1_0)
+ fsl_ifc_sram_init(priv);
+
return 0;
}
--
1.7.9.5
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH] driver/mtd:IFC NAND:Initialise internal SRAM before any write
2012-09-13 8:54 [PATCH] driver/mtd:IFC NAND:Initialise internal SRAM before any write Prabhakar Kushwaha
@ 2012-09-13 12:53 ` Kumar Gala
2012-09-26 4:45 ` Prabhakar Kushwaha
2012-09-26 9:16 ` Artem Bityutskiy
2012-09-27 12:33 ` Kumar Gala
1 sibling, 2 replies; 5+ messages in thread
From: Kumar Gala @ 2012-09-13 12:53 UTC (permalink / raw)
To: Prabhakar Kushwaha; +Cc: scottwood, linuxppc-dev, linux-mtd, dedekind1
On Sep 13, 2012, at 3:54 AM, Prabhakar Kushwaha wrote:
> IFC-1.1.0 uses 28nm techenology for SRAM. This tech has known =
limitaion for
> SRAM i.e. "byte select" is not supported. Hence Read Modify Write is
> implemented in IFC for any "system side write" into sram buffer. =
Reading an
> uninitialized memory results in ECC Error from sram wrapper.
>=20
> Hence we must initialize/prefill SRAM buffer by any data before =
writing
> anything in SRAM from system side. To initialize SRAM user can use =
"READID"
> NAND command with read bytes equal to SRAM size. It will be a one time
> activity post boot.
>=20
> Signed-off-by: Prabhakar Kushwaha <prabhakar@freescale.com>
> ---
> Based upon git://git.infradead.org/linux-mtd.git branch master
> The compilation of this patch depends upon following patch.
> http://patchwork.ozlabs.org/patch/177893/
> This patch is currently applied on =
git://git.kernel.org/pub/scm/linux/kernel/git/galak/powerpc.git=20
> branch next and status is "Awaiting Upstream"
>=20
>=20
> drivers/mtd/nand/fsl_ifc_nand.c | 56 =
++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 55 insertions(+), 1 deletion(-)
If MTD maintainers ack, I'm happy to pull this in via PPC tree.
- k=
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] driver/mtd:IFC NAND:Initialise internal SRAM before any write
2012-09-13 12:53 ` Kumar Gala
@ 2012-09-26 4:45 ` Prabhakar Kushwaha
2012-09-26 9:16 ` Artem Bityutskiy
1 sibling, 0 replies; 5+ messages in thread
From: Prabhakar Kushwaha @ 2012-09-26 4:45 UTC (permalink / raw)
To: dedekind1; +Cc: scottwood, linuxppc-dev, linux-mtd
On 09/13/2012 06:23 PM, Kumar Gala wrote:
> On Sep 13, 2012, at 3:54 AM, Prabhakar Kushwaha wrote:
>
>> IFC-1.1.0 uses 28nm techenology for SRAM. This tech has known limitaion for
>> SRAM i.e. "byte select" is not supported. Hence Read Modify Write is
>> implemented in IFC for any "system side write" into sram buffer. Reading an
>> uninitialized memory results in ECC Error from sram wrapper.
>>
>> Hence we must initialize/prefill SRAM buffer by any data before writing
>> anything in SRAM from system side. To initialize SRAM user can use "READID"
>> NAND command with read bytes equal to SRAM size. It will be a one time
>> activity post boot.
>>
>> Signed-off-by: Prabhakar Kushwaha <prabhakar@freescale.com>
>> ---
>> Based upon git://git.infradead.org/linux-mtd.git branch master
>> The compilation of this patch depends upon following patch.
>> http://patchwork.ozlabs.org/patch/177893/
>> This patch is currently applied on git://git.kernel.org/pub/scm/linux/kernel/git/galak/powerpc.git
>> branch next and status is "Awaiting Upstream"
>>
>>
>> drivers/mtd/nand/fsl_ifc_nand.c | 56 ++++++++++++++++++++++++++++++++++++++-
>> 1 file changed, 55 insertions(+), 1 deletion(-)
> If MTD maintainers ack, I'm happy to pull this in via PPC tree.
Hi Artem,
Can you please ACK this patch so that it can be pulled via PPC tree.
Regards,
Prabhakar
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] driver/mtd:IFC NAND:Initialise internal SRAM before any write
2012-09-13 12:53 ` Kumar Gala
2012-09-26 4:45 ` Prabhakar Kushwaha
@ 2012-09-26 9:16 ` Artem Bityutskiy
1 sibling, 0 replies; 5+ messages in thread
From: Artem Bityutskiy @ 2012-09-26 9:16 UTC (permalink / raw)
To: Kumar Gala; +Cc: scottwood, linuxppc-dev, linux-mtd, Prabhakar Kushwaha
[-- Attachment #1: Type: text/plain, Size: 367 bytes --]
On Thu, 2012-09-13 at 07:53 -0500, Kumar Gala wrote:
> > drivers/mtd/nand/fsl_ifc_nand.c | 56 ++++++++++++++++++++++++++++++++++++++-
> > 1 file changed, 55 insertions(+), 1 deletion(-)
>
> If MTD maintainers ack, I'm happy to pull this in via PPC tree.
Acked-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
--
Best Regards,
Artem Bityutskiy
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] driver/mtd:IFC NAND:Initialise internal SRAM before any write
2012-09-13 8:54 [PATCH] driver/mtd:IFC NAND:Initialise internal SRAM before any write Prabhakar Kushwaha
2012-09-13 12:53 ` Kumar Gala
@ 2012-09-27 12:33 ` Kumar Gala
1 sibling, 0 replies; 5+ messages in thread
From: Kumar Gala @ 2012-09-27 12:33 UTC (permalink / raw)
To: Prabhakar Kushwaha; +Cc: scottwood, linuxppc-dev, linux-mtd, dedekind1
On Sep 13, 2012, at 3:54 AM, Prabhakar Kushwaha wrote:
> IFC-1.1.0 uses 28nm techenology for SRAM. This tech has known =
limitaion for
> SRAM i.e. "byte select" is not supported. Hence Read Modify Write is
> implemented in IFC for any "system side write" into sram buffer. =
Reading an
> uninitialized memory results in ECC Error from sram wrapper.
>=20
> Hence we must initialize/prefill SRAM buffer by any data before =
writing
> anything in SRAM from system side. To initialize SRAM user can use =
"READID"
> NAND command with read bytes equal to SRAM size. It will be a one time
> activity post boot.
>=20
> Signed-off-by: Prabhakar Kushwaha <prabhakar@freescale.com>
> ---
> Based upon git://git.infradead.org/linux-mtd.git branch master
> The compilation of this patch depends upon following patch.
> http://patchwork.ozlabs.org/patch/177893/
> This patch is currently applied on =
git://git.kernel.org/pub/scm/linux/kernel/git/galak/powerpc.git=20
> branch next and status is "Awaiting Upstream"
>=20
>=20
> drivers/mtd/nand/fsl_ifc_nand.c | 56 =
++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 55 insertions(+), 1 deletion(-)
applied to next
- k=
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2012-09-27 12:33 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-09-13 8:54 [PATCH] driver/mtd:IFC NAND:Initialise internal SRAM before any write Prabhakar Kushwaha
2012-09-13 12:53 ` Kumar Gala
2012-09-26 4:45 ` Prabhakar Kushwaha
2012-09-26 9:16 ` Artem Bityutskiy
2012-09-27 12:33 ` Kumar Gala
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).