@ -875,17 +875,21 @@ mpc52xx_fec_probe(struct of_device *op, const struct of_device_id *match)
if ( rv ) {
printk ( KERN_ERR DRIVER_NAME " : "
" Error while parsing device node resource \n " ) ;
return r v;
goto err_netde v;
}
if ( ( mem . end - mem . start + 1 ) < sizeof ( struct mpc52xx_fec ) ) {
printk ( KERN_ERR DRIVER_NAME
" - invalid resource size (%lx < %x), check mpc52xx_devices.c \n " ,
( unsigned long ) ( mem . end - mem . start + 1 ) , sizeof ( struct mpc52xx_fec ) ) ;
return - EINVAL ;
rv = - EINVAL ;
goto err_netdev ;
}
if ( ! request_mem_region ( mem . start , sizeof ( struct mpc52xx_fec ) , DRIVER_NAME ) )
return - EBUSY ;
if ( ! request_mem_region ( mem . start , sizeof ( struct mpc52xx_fec ) ,
DRIVER_NAME ) ) {
rv = - EBUSY ;
goto err_netdev ;
}
/* Init ether ndev with what we have */
ndev - > netdev_ops = & mpc52xx_fec_netdev_ops ;
@ -901,7 +905,7 @@ mpc52xx_fec_probe(struct of_device *op, const struct of_device_id *match)
if ( ! priv - > fec ) {
rv = - ENOMEM ;
goto probe_error ;
goto err_mem_region ;
}
/* Bestcomm init */
@ -914,7 +918,7 @@ mpc52xx_fec_probe(struct of_device *op, const struct of_device_id *match)
if ( ! priv - > rx_dmatsk | | ! priv - > tx_dmatsk ) {
printk ( KERN_ERR DRIVER_NAME " : Can not init SDMA tasks \n " ) ;
rv = - ENOMEM ;
goto probe_error ;
goto err_rx_tx_dmatsk ;
}
/* Get the IRQ we need one by one */
@ -966,33 +970,25 @@ mpc52xx_fec_probe(struct of_device *op, const struct of_device_id *match)
rv = register_netdev ( ndev ) ;
if ( rv < 0 )
goto probe_error ;
goto err_node ;
/* We're done ! */
dev_set_drvdata ( & op - > dev , ndev ) ;
return 0 ;
/* Error handling - free everything that might be allocated */
probe_error :
if ( priv - > phy_node )
of_node_put ( priv - > phy_node ) ;
priv - > phy_node = NULL ;
err_node :
of_node_put ( priv - > phy_node ) ;
irq_dispose_mapping ( ndev - > irq ) ;
err_rx_tx_dmatsk :
if ( priv - > rx_dmatsk )
bcom_fec_rx_release ( priv - > rx_dmatsk ) ;
if ( priv - > tx_dmatsk )
bcom_fec_tx_release ( priv - > tx_dmatsk ) ;
if ( priv - > fec )
iounmap ( priv - > fec ) ;
iounmap ( priv - > fec ) ;
err_mem_region :
release_mem_region ( mem . start , sizeof ( struct mpc52xx_fec ) ) ;
err_netdev :
free_netdev ( ndev ) ;
return rv ;