ARM: am335x: Add a NAND update handler for the regular barebox
To be able to not only update the MLO in NAND but also the regular barebox image. Since this is implemented with help of the corresponding xload handler this also removes the 'xload' from the Kconfig options and the filename. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
parent
77b8c95e8b
commit
33e35f208e
|
@ -1,6 +1,6 @@
|
|||
CONFIG_ARCH_OMAP=y
|
||||
CONFIG_BAREBOX_UPDATE_AM33XX_SPI_NOR_MLO=y
|
||||
CONFIG_BAREBOX_UPDATE_AM33XX_NAND_XLOADSLOTS=y
|
||||
CONFIG_BAREBOX_UPDATE_AM33XX_NAND=y
|
||||
CONFIG_OMAP_MULTI_BOARDS=y
|
||||
CONFIG_MACH_AFI_GF=y
|
||||
CONFIG_MACH_BEAGLEBONE=y
|
||||
|
|
|
@ -93,15 +93,16 @@ config BAREBOX_UPDATE_AM33XX_SPI_NOR_MLO
|
|||
Say Y for barebox update SPI NOR MLO handler.
|
||||
AM35xx, AM33xx chips use big endian MLO for SPI NOR flash.
|
||||
|
||||
config BAREBOX_UPDATE_AM33XX_NAND_XLOADSLOTS
|
||||
prompt "barebox update nand xload slots handler"
|
||||
config BAREBOX_UPDATE_AM33XX_NAND
|
||||
prompt "barebox update NAND handler"
|
||||
bool
|
||||
depends on BAREBOX_UPDATE
|
||||
help
|
||||
Say Y for barebox update nand xload slots handler.
|
||||
This update handler updates 4 default nand xload slots
|
||||
with a single command.
|
||||
Say Y for barebox update NAND handler. This update handler updates
|
||||
4 default NAND xload slots with a single command.
|
||||
The Handler also checks if the given image has a valid CH header.
|
||||
This also includes a handler for updating the regular barebox binary
|
||||
in NAND.
|
||||
|
||||
config ARCH_TEXT_BASE
|
||||
hex
|
||||
|
|
|
@ -33,4 +33,4 @@ obj-$(CONFIG_MFD_TWL6030) += omap4_twl6030_mmc.o
|
|||
obj-$(CONFIG_OMAP4_USBBOOT) += omap4_rom_usb.o
|
||||
obj-$(CONFIG_CMD_BOOT_ORDER) += boot_order.o
|
||||
obj-$(CONFIG_BAREBOX_UPDATE_AM33XX_SPI_NOR_MLO) += am33xx_bbu_spi_mlo.o
|
||||
obj-$(CONFIG_BAREBOX_UPDATE_AM33XX_NAND_XLOADSLOTS) += am33xx_bbu_nand_xloadslots.o
|
||||
obj-$(CONFIG_BAREBOX_UPDATE_AM33XX_NAND) += am33xx_bbu_nand.o
|
||||
|
|
|
@ -120,3 +120,42 @@ int am33xx_bbu_nand_xloadslots_register_handler(const char *name,
|
|||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int nand_update_handler(struct bbu_handler *handler,
|
||||
struct bbu_data *data)
|
||||
{
|
||||
int ret = 0;
|
||||
const void *image = data->image;
|
||||
size_t size = data->len;
|
||||
struct nand_bbu_handler *nh;
|
||||
|
||||
if (file_detect_type(image, size) != filetype_arm_barebox) {
|
||||
pr_err("%s is not a valid barebox image\n", data->imagefile);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
nh = container_of(handler, struct nand_bbu_handler, bbu_handler);
|
||||
|
||||
ret = bbu_confirm(data);
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
|
||||
return write_image(data->devicefile, image, size);
|
||||
}
|
||||
|
||||
int am33xx_bbu_nand_register_handler(const char *name, char *devicefile)
|
||||
{
|
||||
struct nand_bbu_handler *handler;
|
||||
int ret;
|
||||
|
||||
handler = xzalloc(sizeof(*handler));
|
||||
handler->bbu_handler.devicefile = devicefile;
|
||||
handler->bbu_handler.handler = nand_update_handler;
|
||||
handler->bbu_handler.name = name;
|
||||
|
||||
ret = bbu_register_handler(&handler->bbu_handler);
|
||||
if (ret)
|
||||
free(handler);
|
||||
|
||||
return ret;
|
||||
}
|
|
@ -18,10 +18,11 @@ static inline int am33xx_bbu_spi_nor_register_handler(const char *name, char *de
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_BAREBOX_UPDATE_AM33XX_NAND_XLOADSLOTS
|
||||
#ifdef CONFIG_BAREBOX_UPDATE_AM33XX_NAND
|
||||
int am33xx_bbu_nand_xloadslots_register_handler(const char *name,
|
||||
char **devicefile,
|
||||
int num_devicefiles);
|
||||
int am33xx_bbu_nand_register_handler(const char *name, char *devicefile);
|
||||
#else
|
||||
static inline int am33xx_bbu_nand_xloadslots_register_handler(const char *name,
|
||||
char **devicefile,
|
||||
|
@ -29,6 +30,11 @@ static inline int am33xx_bbu_nand_xloadslots_register_handler(const char *name,
|
|||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int am33xx_bbu_nand_register_handler(const char *name, char *devicefile)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue