From: Stefan Roese Date: Tue, 20 Feb 2007 12:21:57 +0000 (+0100) Subject: [PATCH] Fix relocation problem with "new" get_dev() function X-Git-Tag: v1.3.0-rc1~161 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=751bb57107d78978ae08e697c3deba816f5be091;p=u-boot [PATCH] Fix relocation problem with "new" get_dev() function This patch enables the "new" get_dev() function for block devices introduced by Grant Likely to be used on systems that still suffer from the relocation problems (manual relocation neede because of problems with linker script). Hopefully we can resolve this relocation issue soon for all platform so we don't need this additional code anymore. Signed-off-by: Stefan Roese --- diff --git a/disk/part.c b/disk/part.c index f1026c5ef2..37bba77dd3 100644 --- a/disk/part.c +++ b/disk/part.c @@ -64,13 +64,25 @@ static const struct block_drvr block_drvr[] = { { }, }; +#ifndef CFG_FIXUP_RELOCATION +DECLARE_GLOBAL_DATA_PTR; +#endif + block_dev_desc_t *get_dev(char* ifname, int dev) { const struct block_drvr *drvr = block_drvr; while (drvr->name) { +#ifndef CFG_FIXUP_RELOCATION + block_dev_desc_t* (*reloc_get_dev)(int dev); + + reloc_get_dev = drvr->get_dev + gd->reloc_off; + if (strncmp(ifname, drvr->name, strlen(drvr->name)) == 0) + return reloc_get_dev(dev); +#else if (strncmp(ifname, drvr->name, strlen(drvr->name)) == 0) return drvr->get_dev(dev); +#endif drvr++; } return NULL;