ryu: Add support to flash firmware using fastboot
BUG=chrome-os-partner:35861
BRANCH=None
TEST=Compiles successfully and fastboot flash firmware works fine.
Change-Id: I0a4742f41400118f0a087410a7cbcc0e11f7adf1
Signed-off-by: Furquan Shaikh <furquan@google.com>
Reviewed-on: https://chromium-review.googlesource.com/250948
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Commit-Queue: Furquan Shaikh <furquan@chromium.org>
Tested-by: Furquan Shaikh <furquan@chromium.org>
Trybot-Ready: Furquan Shaikh <furquan@chromium.org>
diff --git a/src/board/rush_ryu/board.c b/src/board/rush_ryu/board.c
index ff6cdec..6ea3c8b 100644
--- a/src/board/rush_ryu/board.c
+++ b/src/board/rush_ryu/board.c
@@ -35,6 +35,7 @@
#include "drivers/gpio/sysinfo.h"
#include "drivers/gpio/tegra.h"
#include "drivers/dma/tegra_apb.h"
+#include "drivers/flash/block_flash.h"
#include "drivers/flash/spi.h"
#include "drivers/power/sysinfo.h"
#include "drivers/power/tps65913.h"
@@ -106,7 +107,11 @@
TegraSpi *spi4 = new_tegra_spi(0x7000da00, dma_controller,
APBDMA_SLAVE_SL2B4);
- flash_set_ops(&new_spi_flash(&spi4->ops)->ops);
+ SpiFlash *flash = new_spi_flash(&spi4->ops);
+
+ flash_set_ops(&flash->ops);
+
+ FlashBlockDev *fbdev = block_flash_register_nor(&flash->ops);
TegraI2c *cam_i2c = new_tegra_i2c((void *)0x7000c500, 3,
(void *)CLK_RST_U_RST_SET,
@@ -139,9 +144,12 @@
list_insert_after(&emmc->mmc.ctrlr.list_node,
&fixed_block_dev_controllers);
-#if CONFIG_FASTBOOT_MODE
- fb_fill_bdev_list(MMC_BDEV, &emmc->mmc.ctrlr);
-#endif
+ /* Fill in fastboot related information */
+ BlockDevCtrlr *bdev_arr[BDEV_COUNT] = {
+ [FLASH_BDEV] = &fbdev->ctrlr,
+ [MMC_BDEV] = &emmc->mmc.ctrlr,
+ };
+ fill_fb_info(bdev_arr);
/* Careful: the EHCI base is at offset 0x100 from the SoC's IP base */
UsbHostController *usbd = new_usb_hc(EHCI, 0x7d000100);
diff --git a/src/board/rush_ryu/fastboot.c b/src/board/rush_ryu/fastboot.c
index eee475a..29e9470 100644
--- a/src/board/rush_ryu/fastboot.c
+++ b/src/board/rush_ryu/fastboot.c
@@ -30,7 +30,7 @@
struct bdev_info fb_bdev_list[BDEV_COUNT] = {
[MMC_BDEV] = {"mmc", NULL, NULL},
- /* [FLASH_BDEV] = {"flash", NULL, NULL}, */
+ [FLASH_BDEV] = {"flash", NULL, NULL},
};
size_t fb_bdev_count = ARRAY_SIZE(fb_bdev_list);
@@ -59,6 +59,7 @@
PART_GPT("persistent", "ext4", BDEV_ENTRY(MMC_BDEV), GPT_TYPE(LINUX_FS),
9),
PART_NONGPT("gpt", "ext4", BDEV_ENTRY(MMC_BDEV), 1, 33),
+ PART_NONGPT("firmware", NULL, BDEV_ENTRY(FLASH_BDEV), 0, 0),
};
size_t fb_part_count = ARRAY_SIZE(fb_part_list);
@@ -97,3 +98,13 @@
dc_usb_initialize();
*udc = chipidea_init(dd);
}
+
+void fill_fb_info(BlockDevCtrlr *bdev_ctrlr_arr[BDEV_COUNT])
+{
+ int i;
+
+ for (i = 0; i < BDEV_COUNT; i++)
+ fb_fill_bdev_list(i, bdev_ctrlr_arr[i]);
+ fb_fill_part_list("firmware", 0, lib_sysinfo.spi_flash.size /
+ lib_sysinfo.spi_flash.sector_size);
+}
diff --git a/src/board/rush_ryu/fastboot.h b/src/board/rush_ryu/fastboot.h
index 24e2c6a..423eb7b 100644
--- a/src/board/rush_ryu/fastboot.h
+++ b/src/board/rush_ryu/fastboot.h
@@ -24,6 +24,13 @@
#define __BOARD_RUSH_RYU_FASTBOOT_H__
#include "config.h"
+#include "drivers/storage/blockdev.h"
+
+typedef enum {
+ MMC_BDEV,
+ FLASH_BDEV,
+ BDEV_COUNT,
+}bdev_t;
#if CONFIG_FASTBOOT_MODE
@@ -31,12 +38,12 @@
#include "fastboot/fastboot.h"
#include "fastboot/udc.h"
-typedef enum {
- MMC_BDEV,
- /* FLASH_BDEV, */
- BDEV_COUNT,
-}bdev_t;
+void fill_fb_info(BlockDevCtrlr *bdev_ctrlr_arr[BDEV_COUNT]);
-#endif
+#else
+
+static inline void fill_fb_info(BlockDevCtrlr *bdev_ctrlr_arr[BDEV_COUNT]) {}
+
+#endif /* CONFIG_FASTBOOT_MODE */
#endif /* __BOARD_RUSH_RYU_FASTBOOT_H__ */