e661b75a44
There are some devices which are able to boot from nand flash and other are using a serial flash for booting. Add a bool to indicate that the device is booted from that flash chip and not from some other chip also connected to the SoC. This is needed to find the nvram, as it is stored on the flash the devices booted from. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> Signed-off-by: John W. Linville <linville@tuxdriver.com>
45 lines
1.1 KiB
C
45 lines
1.1 KiB
C
/*
|
|
* Broadcom specific AMBA
|
|
* ChipCommon NAND flash interface
|
|
*
|
|
* Licensed under the GNU/GPL. See COPYING for details.
|
|
*/
|
|
|
|
#include <linux/platform_device.h>
|
|
#include <linux/bcma/bcma.h>
|
|
|
|
#include "bcma_private.h"
|
|
|
|
struct platform_device bcma_nflash_dev = {
|
|
.name = "bcma_nflash",
|
|
.num_resources = 0,
|
|
};
|
|
|
|
/* Initialize NAND flash access */
|
|
int bcma_nflash_init(struct bcma_drv_cc *cc)
|
|
{
|
|
struct bcma_bus *bus = cc->core->bus;
|
|
|
|
if (bus->chipinfo.id != BCMA_CHIP_ID_BCM4706 &&
|
|
cc->core->id.rev != 0x38) {
|
|
bcma_err(bus, "NAND flash on unsupported board!\n");
|
|
return -ENOTSUPP;
|
|
}
|
|
|
|
if (!(cc->capabilities & BCMA_CC_CAP_NFLASH)) {
|
|
bcma_err(bus, "NAND flash not present according to ChipCommon\n");
|
|
return -ENODEV;
|
|
}
|
|
|
|
cc->nflash.present = true;
|
|
if (cc->core->id.rev == 38 &&
|
|
(cc->status & BCMA_CC_CHIPST_5357_NAND_BOOT))
|
|
cc->nflash.boot = true;
|
|
|
|
/* Prepare platform device, but don't register it yet. It's too early,
|
|
* malloc (required by device_private_init) is not available yet. */
|
|
bcma_nflash_dev.dev.platform_data = &cc->nflash;
|
|
|
|
return 0;
|
|
}
|