aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/bcm47xx/patches-5.10/105-mtd-rawnand-brcmnand-Add-platform-data-structure-for-BCMA.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/bcm47xx/patches-5.10/105-mtd-rawnand-brcmnand-Add-platform-data-structure-for-BCMA.patch')
-rw-r--r--target/linux/bcm47xx/patches-5.10/105-mtd-rawnand-brcmnand-Add-platform-data-structure-for-BCMA.patch115
1 files changed, 115 insertions, 0 deletions
diff --git a/target/linux/bcm47xx/patches-5.10/105-mtd-rawnand-brcmnand-Add-platform-data-structure-for-BCMA.patch b/target/linux/bcm47xx/patches-5.10/105-mtd-rawnand-brcmnand-Add-platform-data-structure-for-BCMA.patch
new file mode 100644
index 0000000000..973a3e95ee
--- /dev/null
+++ b/target/linux/bcm47xx/patches-5.10/105-mtd-rawnand-brcmnand-Add-platform-data-structure-for-BCMA.patch
@@ -0,0 +1,115 @@
+From: Florian Fainelli <f.fainelli@gmail.com>
+Subject: [PATCH v3 6/9] mtd: rawnand: brcmnand: Add platform data structure for BCMA
+Date: Fri, 07 Jan 2022 10:46:11 -0800
+Content-Type: text/plain; charset="utf-8"
+
+Update the BCMA's chipcommon nand flash driver to detect which
+chip-select is used and pass that information via platform data to the
+brcmnand driver. Make sure that the brcmnand platform data structure is
+always at the beginning of the platform data of the "nflash" device
+created by BCMA to allow brcmnand to safely de-reference it.
+
+Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
+---
+ MAINTAINERS | 1 +
+ drivers/bcma/driver_chipcommon_nflash.c | 20 +++++++++++++++++++-
+ include/linux/bcma/bcma_driver_chipcommon.h | 5 +++++
+ include/linux/platform_data/brcmnand.h | 12 ++++++++++++
+ 4 files changed, 37 insertions(+), 1 deletion(-)
+ create mode 100644 include/linux/platform_data/brcmnand.h
+
+--- a/MAINTAINERS
++++ b/MAINTAINERS
+@@ -3712,6 +3712,7 @@ L: linux-mtd@lists.infradead.org
+ L: bcm-kernel-feedback-list@broadcom.com
+ S: Maintained
+ F: drivers/mtd/nand/raw/brcmnand/
++F: include/linux/platform_data/brcmnand.h
+
+ BROADCOM SYSTEMPORT ETHERNET DRIVER
+ M: Florian Fainelli <f.fainelli@gmail.com>
+--- a/drivers/bcma/driver_chipcommon_nflash.c
++++ b/drivers/bcma/driver_chipcommon_nflash.c
+@@ -7,18 +7,28 @@
+
+ #include "bcma_private.h"
+
++#include <linux/bitops.h>
+ #include <linux/platform_device.h>
++#include <linux/platform_data/brcmnand.h>
+ #include <linux/bcma/bcma.h>
+
++/* Alternate NAND controller driver name in order to allow both bcm47xxnflash
++ * and bcma_brcmnand to be built into the same kernel image.
++ */
++static const char *bcma_nflash_alt_name = "bcma_brcmnand";
++
+ struct platform_device bcma_nflash_dev = {
+ .name = "bcma_nflash",
+ .num_resources = 0,
+ };
+
++static const char *probes[] = { "bcm47xxpart", NULL };
++
+ /* Initialize NAND flash access */
+ int bcma_nflash_init(struct bcma_drv_cc *cc)
+ {
+ struct bcma_bus *bus = cc->core->bus;
++ u32 reg;
+
+ if (bus->chipinfo.id != BCMA_CHIP_ID_BCM4706 &&
+ cc->core->id.rev != 38) {
+@@ -33,8 +43,16 @@ int bcma_nflash_init(struct bcma_drv_cc
+
+ cc->nflash.present = true;
+ if (cc->core->id.rev == 38 &&
+- (cc->status & BCMA_CC_CHIPST_5357_NAND_BOOT))
++ (cc->status & BCMA_CC_CHIPST_5357_NAND_BOOT)) {
+ cc->nflash.boot = true;
++ /* Determine the chip select that is being used */
++ reg = bcma_cc_read32(cc, BCMA_CC_NAND_CS_NAND_SELECT) & 0xff;
++ cc->nflash.brcmnand_info.chip_select = ffs(reg) - 1;
++ cc->nflash.brcmnand_info.part_probe_types = probes;
++ cc->nflash.brcmnand_info.ecc_stepsize = 512;
++ cc->nflash.brcmnand_info.ecc_strength = 1;
++ bcma_nflash_dev.name = bcma_nflash_alt_name;
++ }
+
+ /* Prepare platform device, but don't register it yet. It's too early,
+ * malloc (required by device_private_init) is not available yet. */
+--- a/include/linux/bcma/bcma_driver_chipcommon.h
++++ b/include/linux/bcma/bcma_driver_chipcommon.h
+@@ -3,6 +3,7 @@
+ #define LINUX_BCMA_DRIVER_CC_H_
+
+ #include <linux/platform_device.h>
++#include <linux/platform_data/brcmnand.h>
+ #include <linux/gpio.h>
+
+ /** ChipCommon core registers. **/
+@@ -599,6 +600,10 @@ struct bcma_sflash {
+
+ #ifdef CONFIG_BCMA_NFLASH
+ struct bcma_nflash {
++ /* Must be the fist member for the brcmnand driver to
++ * de-reference that structure.
++ */
++ struct brcmnand_platform_data brcmnand_info;
+ bool present;
+ bool boot; /* This is the flash the SoC boots from */
+ };
+--- /dev/null
++++ b/include/linux/platform_data/brcmnand.h
+@@ -0,0 +1,12 @@
++/* SPDX-License-Identifier: GPL-2.0-only */
++#ifndef BRCMNAND_PLAT_DATA_H
++#define BRCMNAND_PLAT_DATA_H
++
++struct brcmnand_platform_data {
++ int chip_select;
++ const char * const *part_probe_types;
++ unsigned int ecc_stepsize;
++ unsigned int ecc_strength;
++};
++
++#endif /* BRCMNAND_PLAT_DATA_H */