* [PATCH v4 0/3] NAND support for Broadcom NS2 SoC
@ 2015-10-30 6:18 Anup Patel
[not found] ` <1446185938-17520-1-git-send-email-anup.patel-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Anup Patel @ 2015-10-30 6:18 UTC (permalink / raw)
To: David Woodhouse, Brian Norris, Linux MTD
Cc: Rob Herring, Pawel Moll, Mark Rutland, Catalin Marinas,
Will Deacon, Sudeep Holla, Ian Campbell, Kumar Gala, Ray Jui,
Scott Branden, Florian Fainelli, Pramod KUMAR, Vikram Prakash,
Sandeep Tripathy, Linux ARM Kernel, Device Tree, Linux Kernel,
BCM Kernel Feedback, Anup Patel
We enable NAND support for Broadcom NS2 SoC by reusing existing
BRCMNAND driver.
This patchset applies on-top of "arm64: Simple additions to
NS2 DT" v1 patchset and is available in ns2_nand_v4 branch of
https://github.com/Broadcom/arm64-linux.git.
The patchset is tested on NS2 SVK.
Changes since v3:
- Include Brian's patch for magic number cleanup related to
CFG and CFG_EXT registers
- Base patch1 of v3 patchset upon Brian's cleanup patch
Changes since v2:
- Dropped patch1 and patch2 because these are already merged
by MTD maintainer.
- Avoid using absolute node paths in ns2-svk.dts.
Changes since v1:
- Dropped patch3 and patch4 because we don't need to reset
BRCMNAND controller for NS2.
- Added patch to force 8bit mode before doing nand_scan_ident()
in brcmnand_init_cs().
Anup Patel (2):
mtd: brcmnand: Force 8bit mode before doing nand_scan_ident()
arm64: dts: Add BRCM IPROC NAND DT node for NS2
Brian Norris (1):
mtd: brcmnand: factor out CFG and CFG_EXT bitfields
arch/arm64/boot/dts/broadcom/ns2-svk.dts | 30 +++++++++++++-------
arch/arm64/boot/dts/broadcom/ns2.dtsi | 14 ++++++++++
drivers/mtd/nand/brcmnand/brcmnand.c | 48 +++++++++++++++++++++++++++-----
3 files changed, 75 insertions(+), 17 deletions(-)
--
1.9.1
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v4 1/3] mtd: brcmnand: factor out CFG and CFG_EXT bitfields
[not found] ` <1446185938-17520-1-git-send-email-anup.patel-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
@ 2015-10-30 6:18 ` Anup Patel
2015-10-30 6:57 ` [PATCH v4 0/3] NAND support for Broadcom NS2 SoC Anup Patel
1 sibling, 0 replies; 6+ messages in thread
From: Anup Patel @ 2015-10-30 6:18 UTC (permalink / raw)
To: David Woodhouse, Brian Norris, Linux MTD
Cc: Rob Herring, Pawel Moll, Mark Rutland, Catalin Marinas,
Will Deacon, Sudeep Holla, Ian Campbell, Kumar Gala, Ray Jui,
Scott Branden, Florian Fainelli, Pramod KUMAR, Vikram Prakash,
Sandeep Tripathy, Linux ARM Kernel, Device Tree, Linux Kernel,
BCM Kernel Feedback
From: Brian Norris <computersforpeace-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Use enum instead of magic numbers for CFG and CFG_EXT bitfields.
Signed-off-by: Brian Norris <computersforpeace-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Tested-by: Anup Patel <anup.patel-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
---
drivers/mtd/nand/brcmnand/brcmnand.c | 38 +++++++++++++++++++++++++++++-------
1 file changed, 31 insertions(+), 7 deletions(-)
diff --git a/drivers/mtd/nand/brcmnand/brcmnand.c b/drivers/mtd/nand/brcmnand/brcmnand.c
index 4cba03d..dda96fa 100644
--- a/drivers/mtd/nand/brcmnand/brcmnand.c
+++ b/drivers/mtd/nand/brcmnand/brcmnand.c
@@ -344,6 +344,28 @@ static const u8 brcmnand_cs_offsets_cs0[] = {
[BRCMNAND_CS_TIMING2] = 0x14,
};
+/*
+ * Bitfields for the CFG and CFG_EXT registers. Pre-v7.1 controllers only had
+ * one config register, but once the bitfields overflowed, newer controllers
+ * (v7.1 and newer) added a CFG_EXT register and shuffled a few fields around.
+ */
+enum {
+ CFG_BLK_ADR_BYTES_SHIFT = 8,
+ CFG_COL_ADR_BYTES_SHIFT = 12,
+ CFG_FUL_ADR_BYTES_SHIFT = 16,
+ CFG_BUS_WIDTH_SHIFT = 23,
+ CFG_BUS_WIDTH = BIT(CFG_BUS_WIDTH_SHIFT),
+ CFG_DEVICE_SIZE_SHIFT = 24,
+
+ /* Only for pre-v7.1 (with no CFG_EXT register) */
+ CFG_PAGE_SIZE_SHIFT = 20,
+ CFG_BLK_SIZE_SHIFT = 28,
+
+ /* Only for v7.1+ (with CFG_EXT register) */
+ CFG_EXT_PAGE_SIZE_SHIFT = 0,
+ CFG_EXT_BLK_SIZE_SHIFT = 4,
+};
+
/* BRCMNAND_INTFC_STATUS */
enum {
INTFC_FLASH_STATUS = GENMASK(7, 0),
@@ -1720,17 +1742,19 @@ static int brcmnand_set_cfg(struct brcmnand_host *host,
}
device_size = fls64(cfg->device_size) - fls64(BRCMNAND_MIN_DEVSIZE);
- tmp = (cfg->blk_adr_bytes << 8) |
- (cfg->col_adr_bytes << 12) |
- (cfg->ful_adr_bytes << 16) |
- (!!(cfg->device_width == 16) << 23) |
- (device_size << 24);
+ tmp = (cfg->blk_adr_bytes << CFG_BLK_ADR_BYTES_SHIFT) |
+ (cfg->col_adr_bytes << CFG_COL_ADR_BYTES_SHIFT) |
+ (cfg->ful_adr_bytes << CFG_FUL_ADR_BYTES_SHIFT) |
+ (!!(cfg->device_width == 16) << CFG_BUS_WIDTH_SHIFT) |
+ (device_size << CFG_DEVICE_SIZE_SHIFT);
if (cfg_offs == cfg_ext_offs) {
- tmp |= (page_size << 20) | (block_size << 28);
+ tmp |= (page_size << CFG_PAGE_SIZE_SHIFT) |
+ (block_size << CFG_BLK_SIZE_SHIFT);
nand_writereg(ctrl, cfg_offs, tmp);
} else {
nand_writereg(ctrl, cfg_offs, tmp);
- tmp = page_size | (block_size << 4);
+ tmp = (page_size << CFG_EXT_PAGE_SIZE_SHIFT) |
+ (block_size << CFG_EXT_BLK_SIZE_SHIFT);
nand_writereg(ctrl, cfg_ext_offs, tmp);
}
--
1.9.1
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v4 2/3] mtd: brcmnand: Force 8bit mode before doing nand_scan_ident()
2015-10-30 6:18 [PATCH v4 0/3] NAND support for Broadcom NS2 SoC Anup Patel
[not found] ` <1446185938-17520-1-git-send-email-anup.patel-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
@ 2015-10-30 6:18 ` Anup Patel
[not found] ` <1446185938-17520-3-git-send-email-anup.patel-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
2015-10-30 6:18 ` [PATCH v4 3/3] arm64: dts: Add BRCM IPROC NAND DT node for NS2 Anup Patel
2 siblings, 1 reply; 6+ messages in thread
From: Anup Patel @ 2015-10-30 6:18 UTC (permalink / raw)
To: David Woodhouse, Brian Norris, Linux MTD
Cc: Rob Herring, Pawel Moll, Mark Rutland, Catalin Marinas,
Will Deacon, Sudeep Holla, Ian Campbell, Kumar Gala, Ray Jui,
Scott Branden, Florian Fainelli, Pramod KUMAR, Vikram Prakash,
Sandeep Tripathy, Linux ARM Kernel, Device Tree, Linux Kernel,
BCM Kernel Feedback, Anup Patel
Just like other NAND controllers, the NAND READID command only works
in 8bit mode for all versions of BRCMNAND controller.
This patch forces 8bit mode for each NAND CS in brcmnand_init_cs()
before doing nand_scan_ident() to ensure that BRCMNAND controller
is in 8bit mode when NAND READID command is issued.
Signed-off-by: Anup Patel <anup.patel@broadcom.com>
Reviewed-by: Ray Jui <rjui@broadcom.com>
Reviewed-by: Scott Branden <sbranden@broadcom.com>
---
drivers/mtd/nand/brcmnand/brcmnand.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/drivers/mtd/nand/brcmnand/brcmnand.c b/drivers/mtd/nand/brcmnand/brcmnand.c
index dda96fa..641591d 100644
--- a/drivers/mtd/nand/brcmnand/brcmnand.c
+++ b/drivers/mtd/nand/brcmnand/brcmnand.c
@@ -1912,6 +1912,7 @@ static int brcmnand_init_cs(struct brcmnand_host *host)
struct mtd_info *mtd;
struct nand_chip *chip;
int ret;
+ u16 cfg_offs;
struct mtd_part_parser_data ppdata = { .of_node = dn };
ret = of_property_read_u32(dn, "reg", &host->cs);
@@ -1954,6 +1955,15 @@ static int brcmnand_init_cs(struct brcmnand_host *host)
chip->controller = &ctrl->controller;
+ /*
+ * The bootloader might have configured 16bit mode but
+ * NAND READID command only works in 8bit mode. We force
+ * 8bit mode here to ensure that NAND READID commands works.
+ */
+ cfg_offs = brcmnand_cs_offset(ctrl, host->cs, BRCMNAND_CS_CFG);
+ nand_writereg(ctrl, cfg_offs,
+ nand_readreg(ctrl, cfg_offs) & CFG_BUS_WIDTH);
+
if (nand_scan_ident(mtd, 1, NULL))
return -ENXIO;
--
1.9.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v4 3/3] arm64: dts: Add BRCM IPROC NAND DT node for NS2
2015-10-30 6:18 [PATCH v4 0/3] NAND support for Broadcom NS2 SoC Anup Patel
[not found] ` <1446185938-17520-1-git-send-email-anup.patel-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
2015-10-30 6:18 ` [PATCH v4 2/3] mtd: brcmnand: Force 8bit mode before doing nand_scan_ident() Anup Patel
@ 2015-10-30 6:18 ` Anup Patel
2 siblings, 0 replies; 6+ messages in thread
From: Anup Patel @ 2015-10-30 6:18 UTC (permalink / raw)
To: David Woodhouse, Brian Norris, Linux MTD
Cc: Rob Herring, Pawel Moll, Mark Rutland, Catalin Marinas,
Will Deacon, Sudeep Holla, Ian Campbell, Kumar Gala, Ray Jui,
Scott Branden, Florian Fainelli, Pramod KUMAR, Vikram Prakash,
Sandeep Tripathy, Linux ARM Kernel, Device Tree, Linux Kernel,
BCM Kernel Feedback, Anup Patel
The NAND controller on NS2 SoC is compatible with existing
BRCM IPROC NAND driver so let's enable it in NS2 DT and
NS2 SVK DT.
This patch also fixes use of node labels in ns2-svk.dts.
Signed-off-by: Anup Patel <anup.patel@broadcom.com>
Reviewed-by: Ray Jui <rjui@broadcom.com>
Reviewed-by: Scott Branden <sbranden@broadcom.com>
Reviewed-by: Brian Norris <computersforpeace@gmail.com>
---
arch/arm64/boot/dts/broadcom/ns2-svk.dts | 30 ++++++++++++++++++++----------
arch/arm64/boot/dts/broadcom/ns2.dtsi | 14 ++++++++++++++
2 files changed, 34 insertions(+), 10 deletions(-)
diff --git a/arch/arm64/boot/dts/broadcom/ns2-svk.dts b/arch/arm64/boot/dts/broadcom/ns2-svk.dts
index e5950d5..6bb3d4d 100644
--- a/arch/arm64/boot/dts/broadcom/ns2-svk.dts
+++ b/arch/arm64/boot/dts/broadcom/ns2-svk.dts
@@ -50,18 +50,28 @@
device_type = "memory";
reg = <0x000000000 0x80000000 0x00000000 0x40000000>;
};
+};
- soc: soc {
- i2c0: i2c@66080000 {
- status = "ok";
- };
+&i2c0 {
+ status = "ok";
+};
- i2c1: i2c@660b0000 {
- status = "ok";
- };
+&i2c1 {
+ status = "ok";
+};
+
+&uart3 {
+ status = "ok";
+};
- uart3: serial@66130000 {
- status = "ok";
- };
+&nand {
+ nandcs@0 {
+ compatible = "brcm,nandcs";
+ reg = <0>;
+ nand-ecc-mode = "hw";
+ nand-ecc-strength = <8>;
+ nand-ecc-step-size = <512>;
+ #address-cells = <1>;
+ #size-cells = <1>;
};
};
diff --git a/arch/arm64/boot/dts/broadcom/ns2.dtsi b/arch/arm64/boot/dts/broadcom/ns2.dtsi
index f603277..9610822 100644
--- a/arch/arm64/boot/dts/broadcom/ns2.dtsi
+++ b/arch/arm64/boot/dts/broadcom/ns2.dtsi
@@ -212,5 +212,19 @@
compatible = "brcm,iproc-rng200";
reg = <0x66220000 0x28>;
};
+
+ nand: nand@66460000 {
+ compatible = "brcm,nand-iproc", "brcm,brcmnand-v6.1";
+ reg = <0x66460000 0x600>,
+ <0x67015408 0x600>,
+ <0x66460f00 0x20>;
+ reg-names = "nand", "iproc-idm", "iproc-ext";
+ interrupts = <GIC_SPI 420 IRQ_TYPE_LEVEL_HIGH>;
+
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ brcm,nand-has-wp;
+ };
};
};
--
1.9.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* RE: [PATCH v4 0/3] NAND support for Broadcom NS2 SoC
[not found] ` <1446185938-17520-1-git-send-email-anup.patel-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
2015-10-30 6:18 ` [PATCH v4 1/3] mtd: brcmnand: factor out CFG and CFG_EXT bitfields Anup Patel
@ 2015-10-30 6:57 ` Anup Patel
1 sibling, 0 replies; 6+ messages in thread
From: Anup Patel @ 2015-10-30 6:57 UTC (permalink / raw)
To: Anup Patel, David Woodhouse, Brian Norris, Linux MTD
Cc: Rob Herring, Pawel Moll, Mark Rutland, Catalin Marinas,
Will Deacon, Sudeep Holla, Ian Campbell, Kumar Gala, Ray Jui,
Scott Branden, Florian Fainelli, Pramod Kumar, Vikram Prakash,
Sandeep Tripathy, Linux ARM Kernel, Device Tree, Linux Kernel,
bcm-kernel-feedback-list
Hi All,
Please disregard this patchset.
There is an accidental typo in patch2.
We should use ~CFG_BUS_WIDTH instead of CFG_BUS_WIDTH
in patch2. I will quickly send v5 patchset to fix this.
Sorry, for the noise.
Regards,
Anup
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 6+ messages in thread
* RE: [PATCH v4 2/3] mtd: brcmnand: Force 8bit mode before doing nand_scan_ident()
[not found] ` <1446185938-17520-3-git-send-email-anup.patel-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
@ 2015-10-30 6:58 ` Anup Patel
0 siblings, 0 replies; 6+ messages in thread
From: Anup Patel @ 2015-10-30 6:58 UTC (permalink / raw)
To: Anup Patel, David Woodhouse, Brian Norris, Linux MTD
Cc: Rob Herring, Pawel Moll, Mark Rutland, Catalin Marinas,
Will Deacon, Sudeep Holla, Ian Campbell, Kumar Gala, Ray Jui,
Scott Branden, Florian Fainelli, Pramod Kumar, Vikram Prakash,
Sandeep Tripathy, Linux ARM Kernel, Device Tree, Linux Kernel,
bcm-kernel-feedback-list
> -----Original Message-----
> From: Anup Patel [mailto:anup.patel-dY08KVG/lbpWk0Htik3J/w@public.gmane.org]
> Sent: 30 October 2015 11:49
> To: David Woodhouse; Brian Norris; Linux MTD
> Cc: Rob Herring; Pawel Moll; Mark Rutland; Catalin Marinas; Will Deacon;
> Sudeep Holla; Ian Campbell; Kumar Gala; Ray Jui; Scott Branden; Florian Fainelli;
> Pramod Kumar; Vikram Prakash; Sandeep Tripathy; Linux ARM Kernel; Device
> Tree; Linux Kernel; bcm-kernel-feedback-list; Anup Patel
> Subject: [PATCH v4 2/3] mtd: brcmnand: Force 8bit mode before doing
> nand_scan_ident()
>
> Just like other NAND controllers, the NAND READID command only works in 8bit
> mode for all versions of BRCMNAND controller.
>
> This patch forces 8bit mode for each NAND CS in brcmnand_init_cs() before
> doing nand_scan_ident() to ensure that BRCMNAND controller is in 8bit mode
> when NAND READID command is issued.
>
> Signed-off-by: Anup Patel <anup.patel-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
> Reviewed-by: Ray Jui <rjui-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
> Reviewed-by: Scott Branden <sbranden-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
> ---
> drivers/mtd/nand/brcmnand/brcmnand.c | 10 ++++++++++
> 1 file changed, 10 insertions(+)
>
> diff --git a/drivers/mtd/nand/brcmnand/brcmnand.c
> b/drivers/mtd/nand/brcmnand/brcmnand.c
> index dda96fa..641591d 100644
> --- a/drivers/mtd/nand/brcmnand/brcmnand.c
> +++ b/drivers/mtd/nand/brcmnand/brcmnand.c
> @@ -1912,6 +1912,7 @@ static int brcmnand_init_cs(struct brcmnand_host
> *host)
> struct mtd_info *mtd;
> struct nand_chip *chip;
> int ret;
> + u16 cfg_offs;
> struct mtd_part_parser_data ppdata = { .of_node = dn };
>
> ret = of_property_read_u32(dn, "reg", &host->cs); @@ -1954,6
> +1955,15 @@ static int brcmnand_init_cs(struct brcmnand_host *host)
>
> chip->controller = &ctrl->controller;
>
> + /*
> + * The bootloader might have configured 16bit mode but
> + * NAND READID command only works in 8bit mode. We force
> + * 8bit mode here to ensure that NAND READID commands works.
> + */
> + cfg_offs = brcmnand_cs_offset(ctrl, host->cs, BRCMNAND_CS_CFG);
> + nand_writereg(ctrl, cfg_offs,
> + nand_readreg(ctrl, cfg_offs) & CFG_BUS_WIDTH);
This should have been "nand_readreg(ctrl, cfg_offs) & ~CFG_BUS_WIDTH".
My bad ...
--
Anup
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2015-10-30 6:58 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-10-30 6:18 [PATCH v4 0/3] NAND support for Broadcom NS2 SoC Anup Patel
[not found] ` <1446185938-17520-1-git-send-email-anup.patel-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
2015-10-30 6:18 ` [PATCH v4 1/3] mtd: brcmnand: factor out CFG and CFG_EXT bitfields Anup Patel
2015-10-30 6:57 ` [PATCH v4 0/3] NAND support for Broadcom NS2 SoC Anup Patel
2015-10-30 6:18 ` [PATCH v4 2/3] mtd: brcmnand: Force 8bit mode before doing nand_scan_ident() Anup Patel
[not found] ` <1446185938-17520-3-git-send-email-anup.patel-dY08KVG/lbpWk0Htik3J/w@public.gmane.org>
2015-10-30 6:58 ` Anup Patel
2015-10-30 6:18 ` [PATCH v4 3/3] arm64: dts: Add BRCM IPROC NAND DT node for NS2 Anup Patel
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).