From 60e8a35f0efa5a7e5d797a3f239971c84061ef11 Mon Sep 17 00:00:00 2001 From: Daniel Schwierzeck Date: Tue, 6 Nov 2012 21:39:47 +0100 Subject: sf: handle CONFIG_MANUAL_RELOC Signed-off-by: Daniel Schwierzeck --- a/drivers/mtd/spi/spi_flash.c +++ b/drivers/mtd/spi/spi_flash.c @@ -293,7 +293,7 @@ int spi_flash_cmd_write_status(struct sp */ #define IDCODE_CONT_LEN 0 #define IDCODE_PART_LEN 5 -static const struct { +static struct { const u8 shift; const u8 idcode; struct spi_flash *(*probe) (struct spi_slave *spi, u8 *idcode); @@ -335,6 +335,10 @@ static const struct { }; #define IDCODE_LEN (IDCODE_CONT_LEN + IDCODE_PART_LEN) +#ifdef CONFIG_NEEDS_MANUAL_RELOC +DECLARE_GLOBAL_DATA_PTR; +#endif + struct spi_flash *spi_flash_probe(unsigned int bus, unsigned int cs, unsigned int max_hz, unsigned int spi_mode) { @@ -342,6 +346,16 @@ struct spi_flash *spi_flash_probe(unsign struct spi_flash *flash = NULL; int ret, i, shift; u8 idcode[IDCODE_LEN], *idp; +#ifdef CONFIG_NEEDS_MANUAL_RELOC + static int relocated; + + if (!relocated) { + for (i = 0; i < ARRAY_SIZE(flashes); i++) + flashes[i].probe += gd->reloc_off; + + relocated = 1; + } +#endif spi = spi_setup_slave(bus, cs, max_hz, spi_mode); if (!spi) {