net: zynq: Free allocated buffers in case of error

Driver probe function is called again and again in case of error.
Malloc space is getting full which is is reported by:
 Insufficient RAM for page table: 0x15000 > 0x14000.
 Please increase the size in get_page_table_size()
 ### ERROR ### Please RESET the board ###

The patch is freeing allocated buffers on error path to avoid panic.

Signed-off-by: Michal Simek <michal.simek@xilinx.com>
This commit is contained in:
Michal Simek 2020-02-06 14:36:46 +01:00
parent 380376520f
commit 58ecd9ad0b

View file

@ -661,8 +661,10 @@ static int zynq_gem_probe(struct udevice *dev)
/* Align bd_space to MMU_SECTION_SHIFT */
bd_space = memalign(1 << MMU_SECTION_SHIFT, BD_SPACE);
if (!bd_space)
return -ENOMEM;
if (!bd_space) {
ret = -ENOMEM;
goto err1;
}
mmu_set_region_dcache_behaviour((phys_addr_t)bd_space,
BD_SPACE, DCACHE_OFF);
@ -674,7 +676,7 @@ static int zynq_gem_probe(struct udevice *dev)
ret = clk_get_by_name(dev, "tx_clk", &priv->clk);
if (ret < 0) {
dev_err(dev, "failed to get clock\n");
return -EINVAL;
goto err1;
}
priv->bus = mdio_alloc();
@ -684,9 +686,19 @@ static int zynq_gem_probe(struct udevice *dev)
ret = mdio_register_seq(priv->bus, dev->seq);
if (ret)
return ret;
goto err2;
return zynq_phy_init(dev);
ret = zynq_phy_init(dev);
if (ret)
goto err2;
return ret;
err2:
free(priv->rxbuffers);
err1:
free(priv->tx_bd);
return ret;
}
static int zynq_gem_remove(struct udevice *dev)