@@ -1434,8 +1434,11 @@ static struct fsl_mc_device *setup_dpcon(struct dpaa2_eth_priv *priv)
1434
1434
err = fsl_mc_object_allocate (to_fsl_mc_device (dev ),
1435
1435
FSL_MC_POOL_DPCON , & dpcon );
1436
1436
if (err ) {
1437
- dev_info (dev , "Not enough DPCONs, will go on as-is\n" );
1438
- return NULL ;
1437
+ if (err == - ENXIO )
1438
+ err = - EPROBE_DEFER ;
1439
+ else
1440
+ dev_info (dev , "Not enough DPCONs, will go on as-is\n" );
1441
+ return ERR_PTR (err );
1439
1442
}
1440
1443
1441
1444
err = dpcon_open (priv -> mc_io , 0 , dpcon -> obj_desc .id , & dpcon -> mc_handle );
@@ -1493,8 +1496,10 @@ alloc_channel(struct dpaa2_eth_priv *priv)
1493
1496
return NULL ;
1494
1497
1495
1498
channel -> dpcon = setup_dpcon (priv );
1496
- if (!channel -> dpcon )
1499
+ if (IS_ERR_OR_NULL (channel -> dpcon )) {
1500
+ err = PTR_ERR (channel -> dpcon );
1497
1501
goto err_setup ;
1502
+ }
1498
1503
1499
1504
err = dpcon_get_attributes (priv -> mc_io , 0 , channel -> dpcon -> mc_handle ,
1500
1505
& attr );
@@ -1513,7 +1518,7 @@ alloc_channel(struct dpaa2_eth_priv *priv)
1513
1518
free_dpcon (priv , channel -> dpcon );
1514
1519
err_setup :
1515
1520
kfree (channel );
1516
- return NULL ;
1521
+ return ERR_PTR ( err ) ;
1517
1522
}
1518
1523
1519
1524
static void free_channel (struct dpaa2_eth_priv * priv ,
@@ -1547,10 +1552,11 @@ static int setup_dpio(struct dpaa2_eth_priv *priv)
1547
1552
for_each_online_cpu (i ) {
1548
1553
/* Try to allocate a channel */
1549
1554
channel = alloc_channel (priv );
1550
- if (!channel ) {
1551
- dev_info (dev ,
1552
- "No affine channel for cpu %d and above\n" , i );
1553
- err = - ENODEV ;
1555
+ if (IS_ERR_OR_NULL (channel )) {
1556
+ err = PTR_ERR (channel );
1557
+ if (err != - EPROBE_DEFER )
1558
+ dev_info (dev ,
1559
+ "No affine channel for cpu %d and above\n" , i );
1554
1560
goto err_alloc_ch ;
1555
1561
}
1556
1562
@@ -1608,9 +1614,12 @@ static int setup_dpio(struct dpaa2_eth_priv *priv)
1608
1614
err_service_reg :
1609
1615
free_channel (priv , channel );
1610
1616
err_alloc_ch :
1617
+ if (err == - EPROBE_DEFER )
1618
+ return err ;
1619
+
1611
1620
if (cpumask_empty (& priv -> dpio_cpumask )) {
1612
1621
dev_err (dev , "No cpu with an affine DPIO/DPCON\n" );
1613
- return err ;
1622
+ return - ENODEV ;
1614
1623
}
1615
1624
1616
1625
dev_info (dev , "Cores %*pbl available for processing ingress traffic\n" ,
@@ -1732,7 +1741,10 @@ static int setup_dpbp(struct dpaa2_eth_priv *priv)
1732
1741
err = fsl_mc_object_allocate (to_fsl_mc_device (dev ), FSL_MC_POOL_DPBP ,
1733
1742
& dpbp_dev );
1734
1743
if (err ) {
1735
- dev_err (dev , "DPBP device allocation failed\n" );
1744
+ if (err == - ENXIO )
1745
+ err = - EPROBE_DEFER ;
1746
+ else
1747
+ dev_err (dev , "DPBP device allocation failed\n" );
1736
1748
return err ;
1737
1749
}
1738
1750
0 commit comments