|
@@ -57,6 +57,54 @@ u32 spl_boot_device(void)
|
|
|
return boot_device;
|
|
|
}
|
|
|
|
|
|
+const char *spl_decode_boot_device(u32 boot_device)
|
|
|
+{
|
|
|
+ int i;
|
|
|
+ static const struct {
|
|
|
+ u32 boot_device;
|
|
|
+ const char *ofpath;
|
|
|
+ } spl_boot_devices_tbl[] = {
|
|
|
+ { BOOT_DEVICE_MMC1, "/dwmmc@fe320000" },
|
|
|
+ { BOOT_DEVICE_MMC2, "/sdhci@fe330000" },
|
|
|
+ { BOOT_DEVICE_SPI, "/spi@ff1d0000" },
|
|
|
+ };
|
|
|
+
|
|
|
+ for (i = 0; i < ARRAY_SIZE(spl_boot_devices_tbl); ++i)
|
|
|
+ if (spl_boot_devices_tbl[i].boot_device == boot_device)
|
|
|
+ return spl_boot_devices_tbl[i].ofpath;
|
|
|
+
|
|
|
+ return NULL;
|
|
|
+}
|
|
|
+
|
|
|
+void spl_perform_fixups(struct spl_image_info *spl_image)
|
|
|
+{
|
|
|
+ void *blob = spl_image->fdt_addr;
|
|
|
+ const char *boot_ofpath;
|
|
|
+ int chosen;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Inject the ofpath of the device the full U-Boot (or Linux in
|
|
|
+ * Falcon-mode) was booted from into the FDT, if a FDT has been
|
|
|
+ * loaded at the same time.
|
|
|
+ */
|
|
|
+ if (!blob)
|
|
|
+ return;
|
|
|
+
|
|
|
+ boot_ofpath = spl_decode_boot_device(spl_image->boot_device);
|
|
|
+ if (!boot_ofpath) {
|
|
|
+ pr_err("%s: could not map boot_device to ofpath\n", __func__);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ chosen = fdt_find_or_add_subnode(blob, 0, "chosen");
|
|
|
+ if (chosen < 0) {
|
|
|
+ pr_err("%s: could not find/create '/chosen'\n", __func__);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ fdt_setprop_string(blob, chosen,
|
|
|
+ "u-boot,spl-boot-device", boot_ofpath);
|
|
|
+}
|
|
|
+
|
|
|
#define TIMER_CHN10_BASE 0xff8680a0
|
|
|
#define TIMER_END_COUNT_L 0x00
|
|
|
#define TIMER_END_COUNT_H 0x04
|