#include <linux/string.h>
#include <miiphy.h>
#include <spi.h>
+#include <spi_flash.h>
#include "mox_sp.h"
return 0;
}
+/* Load default system DTB binary to $fdr_addr */
+static void load_spi_dtb(void)
+{
+ const char *const env_name[1] = { "fdt_addr" };
+ unsigned long size, offset;
+ struct udevice *spi_dev;
+ struct spi_flash *flash;
+ const char *addr_str;
+ unsigned long addr;
+ void *buf;
+
+ addr_str = env_get(env_name[0]);
+ if (!addr_str) {
+ env_set_default_vars(1, (char * const *)env_name, 0);
+ addr_str = env_get(env_name[0]);
+ }
+
+ if (!addr_str)
+ return;
+
+ addr = hextoul(addr_str, NULL);
+ if (!addr)
+ return;
+
+ spi_flash_probe_bus_cs(CONFIG_SF_DEFAULT_BUS, CONFIG_SF_DEFAULT_CS, &spi_dev);
+ flash = dev_get_uclass_priv(spi_dev);
+ if (!flash)
+ return;
+
+ /*
+ * SPI NOR "dtb" partition offset & size hardcoded for now because the
+ * mtd subsystem does not offer finding the partition yet and we do not
+ * want to reimplement OF partition parser here.
+ */
+ offset = 0x7f0000;
+ size = 0x10000;
+
+ buf = map_physmem(addr, size, MAP_WRBACK);
+ if (!buf)
+ return;
+
+ spi_flash_read(flash, offset, size, buf);
+ unmap_physmem(buf, size);
+}
+
int misc_init_r(void)
{
u8 mac[2][6];
eth_env_set_enetaddr_by_index("eth", i, mac[i]);
}
+ load_spi_dtb();
+
return 0;
}