From: Florian Fainelli <f.fainelli@gmail.com> To: linux-mtd@lists.infradead.org Cc: "Florian Fainelli" <f.fainelli@gmail.com>, "Rafał Miłecki" <zajec5@gmail.com>, "Miquel Raynal" <miquel.raynal@bootlin.com>, "Richard Weinberger" <richard@nod.at>, "Vignesh Raghavendra" <vigneshr@ti.com>, "Brian Norris" <computersforpeace@gmail.com>, "Kamal Dasu" <kdasu.kdev@gmail.com>, "Arnd Bergmann" <arnd@arndb.de>, "Cai Huoqing" <caihuoqing@baidu.com>, "Colin Ian King" <colin.king@intel.com>, linux-kernel@vger.kernel.org (open list), linux-wireless@vger.kernel.org (open list:BROADCOM SPECIFIC AMBA DRIVER (BCMA)), bcm-kernel-feedback-list@broadcom.com (open list:BROADCOM STB NAND FLASH DRIVER) Subject: [PATCH v3 0/9] BCMA support for brcmnand Date: Fri, 7 Jan 2022 10:46:05 -0800 [thread overview] Message-ID: <20220107184614.2670254-1-f.fainelli@gmail.com> (raw) Hi all, This patch series adds support for the BRCMNAND controller revision 3.4 embedded in MIPS-based SoCs such as 5357, typically found in the Netgear WNR3500L v2 and other kinds of Wi-Fi routers. The upstream platform that uses this controller is under arch/mips/bcm47xx/ and does not use Device Tree (and probably never will by now). BCMA (Broadcom AMBA) is a special kind of discoverable memory mapped interface which requires the use of special accessors to read from/write to the hardware block. The integration of brcmnand into that SoC is a bit quirky in that every register offering byte level data about the flash (OOB, device ID, etc.) requires byte swapping. The command shift should also have been 24, but is in fact 0, took me a while to understand why no reads were actually working because of that. This has been tested with Linux 5.10.82 and Linus' master with OpenWrt and confirmed that the squashfs + jffs2 overlay that OpenWrt creates is entirely functional and that written data is made persistent. Changes in v3: - fixed a few typo/grammar errors in the commit messages, mention when changes are non functional changes - removed the stray hunk in 2 to enable the static key Changes in v2: - re-ordered the patch such that the soc variable is initialized as early as possible - corrected bug in the conversion of brcmnand_init_cs() which incorrectly used the wrong device_node variable (parent instead of child) - took Andy's feedback to make the test for a valid interrupt to be > 0 while calling platform_get_irq_optional() - utilized static branch (disabled by default) and conditional compilation and confirm with disassembly that the generated code is as efficient as before if not enabling the BCMA shim and as efficient as possible if enabling BCMA shim - updated BCMA shim driver descriptor, author and added helper function to encapsulate the container_of usage - added comment to explain why a slightly different platform device name is used for the 5357-style NAND controller Florian Fainelli (9): mtd: rawnand: brcmnand: Assign soc as early as possible mtd: rawnand: brcmnand: Allow SoC to provide I/O operations mtd: rawnand: brcmnand: Avoid pdev in brcmnand_init_cs() mtd: rawnand: brcmnand: Move OF operations out of brcmnand_init_cs() mtd: rawnand: brcmnand: Allow working without interrupts mtd: rawnand: brcmnand: Add platform data structure for BCMA mtd: rawnand: brcmnand: Allow platform data instantation mtd: rawnand: brcmnand: BCMA controller uses command shift of 0 mtd: rawnand: brcmnand: Add BCMA shim MAINTAINERS | 1 + drivers/bcma/driver_chipcommon_nflash.c | 20 ++- drivers/mtd/nand/raw/Kconfig | 13 ++ drivers/mtd/nand/raw/brcmnand/Makefile | 2 + drivers/mtd/nand/raw/brcmnand/bcma_nand.c | 132 ++++++++++++++++ drivers/mtd/nand/raw/brcmnand/brcmnand.c | 160 +++++++++++++------- drivers/mtd/nand/raw/brcmnand/brcmnand.h | 29 ++++ include/linux/bcma/bcma_driver_chipcommon.h | 5 + include/linux/platform_data/brcmnand.h | 12 ++ 9 files changed, 321 insertions(+), 53 deletions(-) create mode 100644 drivers/mtd/nand/raw/brcmnand/bcma_nand.c create mode 100644 include/linux/platform_data/brcmnand.h -- 2.25.1
WARNING: multiple messages have this Message-ID (diff)
From: Florian Fainelli <f.fainelli@gmail.com> To: linux-mtd@lists.infradead.org Cc: "Florian Fainelli" <f.fainelli@gmail.com>, "Rafał Miłecki" <zajec5@gmail.com>, "Miquel Raynal" <miquel.raynal@bootlin.com>, "Richard Weinberger" <richard@nod.at>, "Vignesh Raghavendra" <vigneshr@ti.com>, "Brian Norris" <computersforpeace@gmail.com>, "Kamal Dasu" <kdasu.kdev@gmail.com>, "Arnd Bergmann" <arnd@arndb.de>, "Cai Huoqing" <caihuoqing@baidu.com>, "Colin Ian King" <colin.king@intel.com>, linux-kernel@vger.kernel.org (open list), linux-wireless@vger.kernel.org (open list:BROADCOM SPECIFIC AMBA DRIVER (BCMA)), bcm-kernel-feedback-list@broadcom.com (open list:BROADCOM STB NAND FLASH DRIVER) Subject: [PATCH v3 0/9] BCMA support for brcmnand Date: Fri, 7 Jan 2022 10:46:05 -0800 [thread overview] Message-ID: <20220107184614.2670254-1-f.fainelli@gmail.com> (raw) Hi all, This patch series adds support for the BRCMNAND controller revision 3.4 embedded in MIPS-based SoCs such as 5357, typically found in the Netgear WNR3500L v2 and other kinds of Wi-Fi routers. The upstream platform that uses this controller is under arch/mips/bcm47xx/ and does not use Device Tree (and probably never will by now). BCMA (Broadcom AMBA) is a special kind of discoverable memory mapped interface which requires the use of special accessors to read from/write to the hardware block. The integration of brcmnand into that SoC is a bit quirky in that every register offering byte level data about the flash (OOB, device ID, etc.) requires byte swapping. The command shift should also have been 24, but is in fact 0, took me a while to understand why no reads were actually working because of that. This has been tested with Linux 5.10.82 and Linus' master with OpenWrt and confirmed that the squashfs + jffs2 overlay that OpenWrt creates is entirely functional and that written data is made persistent. Changes in v3: - fixed a few typo/grammar errors in the commit messages, mention when changes are non functional changes - removed the stray hunk in 2 to enable the static key Changes in v2: - re-ordered the patch such that the soc variable is initialized as early as possible - corrected bug in the conversion of brcmnand_init_cs() which incorrectly used the wrong device_node variable (parent instead of child) - took Andy's feedback to make the test for a valid interrupt to be > 0 while calling platform_get_irq_optional() - utilized static branch (disabled by default) and conditional compilation and confirm with disassembly that the generated code is as efficient as before if not enabling the BCMA shim and as efficient as possible if enabling BCMA shim - updated BCMA shim driver descriptor, author and added helper function to encapsulate the container_of usage - added comment to explain why a slightly different platform device name is used for the 5357-style NAND controller Florian Fainelli (9): mtd: rawnand: brcmnand: Assign soc as early as possible mtd: rawnand: brcmnand: Allow SoC to provide I/O operations mtd: rawnand: brcmnand: Avoid pdev in brcmnand_init_cs() mtd: rawnand: brcmnand: Move OF operations out of brcmnand_init_cs() mtd: rawnand: brcmnand: Allow working without interrupts mtd: rawnand: brcmnand: Add platform data structure for BCMA mtd: rawnand: brcmnand: Allow platform data instantation mtd: rawnand: brcmnand: BCMA controller uses command shift of 0 mtd: rawnand: brcmnand: Add BCMA shim MAINTAINERS | 1 + drivers/bcma/driver_chipcommon_nflash.c | 20 ++- drivers/mtd/nand/raw/Kconfig | 13 ++ drivers/mtd/nand/raw/brcmnand/Makefile | 2 + drivers/mtd/nand/raw/brcmnand/bcma_nand.c | 132 ++++++++++++++++ drivers/mtd/nand/raw/brcmnand/brcmnand.c | 160 +++++++++++++------- drivers/mtd/nand/raw/brcmnand/brcmnand.h | 29 ++++ include/linux/bcma/bcma_driver_chipcommon.h | 5 + include/linux/platform_data/brcmnand.h | 12 ++ 9 files changed, 321 insertions(+), 53 deletions(-) create mode 100644 drivers/mtd/nand/raw/brcmnand/bcma_nand.c create mode 100644 include/linux/platform_data/brcmnand.h -- 2.25.1 ______________________________________________________ Linux MTD discussion mailing list http://lists.infradead.org/mailman/listinfo/linux-mtd/
next reply other threads:[~2022-01-07 18:46 UTC|newest] Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-01-07 18:46 Florian Fainelli [this message] 2022-01-07 18:46 ` [PATCH v3 0/9] BCMA support for brcmnand Florian Fainelli 2022-01-07 18:46 ` [PATCH v3 1/9] mtd: rawnand: brcmnand: Assign soc as early as possible Florian Fainelli 2022-01-07 18:46 ` Florian Fainelli 2022-01-07 18:46 ` [PATCH v3 2/9] mtd: rawnand: brcmnand: Allow SoC to provide I/O operations Florian Fainelli 2022-01-07 18:46 ` Florian Fainelli 2022-01-07 18:46 ` [PATCH v3 3/9] mtd: rawnand: brcmnand: Avoid pdev in brcmnand_init_cs() Florian Fainelli 2022-01-07 18:46 ` Florian Fainelli 2022-01-07 18:46 ` [PATCH v3 4/9] mtd: rawnand: brcmnand: Move OF operations out of brcmnand_init_cs() Florian Fainelli 2022-01-07 18:46 ` Florian Fainelli 2022-01-07 18:46 ` [PATCH v3 5/9] mtd: rawnand: brcmnand: Allow working without interrupts Florian Fainelli 2022-01-07 18:46 ` Florian Fainelli 2022-01-07 18:46 ` [PATCH v3 6/9] mtd: rawnand: brcmnand: Add platform data structure for BCMA Florian Fainelli 2022-01-07 18:46 ` Florian Fainelli 2022-01-07 18:46 ` [PATCH v3 7/9] mtd: rawnand: brcmnand: Allow platform data instantation Florian Fainelli 2022-01-07 18:46 ` Florian Fainelli 2022-01-07 18:46 ` [PATCH v3 8/9] mtd: rawnand: brcmnand: BCMA controller uses command shift of 0 Florian Fainelli 2022-01-07 18:46 ` Florian Fainelli 2022-01-07 18:46 ` [PATCH v3 9/9] mtd: rawnand: brcmnand: Add BCMA shim Florian Fainelli 2022-01-07 18:46 ` Florian Fainelli 2022-01-10 17:38 ` [PATCH v3 0/9] BCMA support for brcmnand Kamal Dasu 2022-01-10 17:38 ` Kamal Dasu 2022-01-23 15:42 ` Miquel Raynal 2022-01-23 15:42 ` Miquel Raynal
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=20220107184614.2670254-1-f.fainelli@gmail.com \ --to=f.fainelli@gmail.com \ --cc=arnd@arndb.de \ --cc=bcm-kernel-feedback-list@broadcom.com \ --cc=caihuoqing@baidu.com \ --cc=colin.king@intel.com \ --cc=computersforpeace@gmail.com \ --cc=kdasu.kdev@gmail.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mtd@lists.infradead.org \ --cc=linux-wireless@vger.kernel.org \ --cc=miquel.raynal@bootlin.com \ --cc=richard@nod.at \ --cc=vigneshr@ti.com \ --cc=zajec5@gmail.com \ /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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.