Commit 751bb57107d78978ae08e697c3deba816f5be091
1 parent
d93e2212f9
Exists in
master
and in
55 other branches
[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 <sr@denx.de>
Showing 1 changed file with 12 additions and 0 deletions Side-by-side Diff
disk/part.c
... | ... | @@ -64,13 +64,25 @@ |
64 | 64 | { }, |
65 | 65 | }; |
66 | 66 | |
67 | +#ifndef CFG_FIXUP_RELOCATION | |
68 | +DECLARE_GLOBAL_DATA_PTR; | |
69 | +#endif | |
70 | + | |
67 | 71 | block_dev_desc_t *get_dev(char* ifname, int dev) |
68 | 72 | { |
69 | 73 | const struct block_drvr *drvr = block_drvr; |
70 | 74 | |
71 | 75 | while (drvr->name) { |
76 | +#ifndef CFG_FIXUP_RELOCATION | |
77 | + block_dev_desc_t* (*reloc_get_dev)(int dev); | |
78 | + | |
79 | + reloc_get_dev = drvr->get_dev + gd->reloc_off; | |
72 | 80 | if (strncmp(ifname, drvr->name, strlen(drvr->name)) == 0) |
81 | + return reloc_get_dev(dev); | |
82 | +#else | |
83 | + if (strncmp(ifname, drvr->name, strlen(drvr->name)) == 0) | |
73 | 84 | return drvr->get_dev(dev); |
85 | +#endif | |
74 | 86 | drvr++; |
75 | 87 | } |
76 | 88 | return NULL; |