From: Siva Durga Prasad Paladugu Date: Tue, 26 Feb 2019 11:47:00 +0000 (+0530) Subject: net: phy: Reloc next and prev pointers inside phy_drivers X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=260ac1c66dd77b45dde22565ed4ab5ad180a1a03;p=thirdparty%2Fu-boot.git net: phy: Reloc next and prev pointers inside phy_drivers This patch relocates the pointers inside phy_drivers incase of manual reloc. Without this reloc, these points to invalid pre relocation address and hence causes exception or hang. Signed-off-by: Siva Durga Prasad Paladugu Signed-off-by: Michal Simek --- diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c index 25656ca08c9..0b3388eaa54 100644 --- a/drivers/net/phy/phy.c +++ b/drivers/net/phy/phy.c @@ -462,6 +462,18 @@ static LIST_HEAD(phy_drivers); int phy_init(void) { +#ifdef CONFIG_NEEDS_MANUAL_RELOC + /* + * The pointers inside phy_drivers also needs to be updated incase of + * manual reloc, without which these points to some invalid + * pre reloc address and leads to invalid accesses, hangs. + */ + struct list_head *head = &phy_drivers; + + head->next = (void *)head->next + gd->reloc_off; + head->prev = (void *)head->prev + gd->reloc_off; +#endif + #ifdef CONFIG_B53_SWITCH phy_b53_init(); #endif