123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- From: Florian Fainelli <[email protected]>
- 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 <[email protected]>
- ---
- 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
- @@ -3901,6 +3901,7 @@ L: [email protected]
- L: [email protected]
- S: Maintained
- F: drivers/mtd/nand/raw/brcmnand/
- +F: include/linux/platform_data/brcmnand.h
-
- BROADCOM STB PCIE DRIVER
- M: Jim Quinlan <[email protected]>
- --- 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 */
|