]> git.sur5r.net Git - u-boot/commitdiff
serial: Enhance the manual relocation
authorMarek Vasut <marex@denx.de>
Sun, 16 Sep 2012 16:54:22 +0000 (18:54 +0200)
committerTom Rini <trini@ti.com>
Mon, 15 Oct 2012 18:53:59 +0000 (11:53 -0700)
Enhance the manual relocation of drivers operations structure by
checking if the entries are NULL and increment them only if they
are not. This allows for setting any entry to NULL and it will
survive the manual relocation.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Marek Vasut <marek.vasut@gmail.com>
Cc: Tom Rini <trini@ti.com>
Cc: Anatolij Gustschin <agust@denx.de>
Cc: Stefan Roese <sr@denx.de>
drivers/serial/serial.c

index acb74af963b92c0ae3bd1d22253f8c3ab758397a..5bbf3aeb4456faaa9f154d9fcb2b4338e868c770 100644 (file)
@@ -97,12 +97,20 @@ serial_initfunc(sh_serial_initialize);
 void serial_register(struct serial_device *dev)
 {
 #ifdef CONFIG_NEEDS_MANUAL_RELOC
-       dev->start += gd->reloc_off;
-       dev->setbrg += gd->reloc_off;
-       dev->getc += gd->reloc_off;
-       dev->tstc += gd->reloc_off;
-       dev->putc += gd->reloc_off;
-       dev->puts += gd->reloc_off;
+       if (dev->start)
+               dev->start += gd->reloc_off;
+       if (dev->stop)
+               dev->stop += gd->reloc_off;
+       if (dev->setbrg)
+               dev->setbrg += gd->reloc_off;
+       if (dev->getc)
+               dev->getc += gd->reloc_off;
+       if (dev->tstc)
+               dev->tstc += gd->reloc_off;
+       if (dev->putc)
+               dev->putc += gd->reloc_off;
+       if (dev->puts)
+               dev->puts += gd->reloc_off;
 #endif
 
        dev->next = serial_devices;