diff options
author | Linu Cherian <lcherian@marvell.com> | 2018-11-22 17:18:37 +0530 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-11-23 17:23:25 -0800 |
commit | d3b2b9ab1ef2ca1d883f3729ceb54503193b7958 (patch) | |
tree | c34a5c218a4f8191cda44a4737ea03cafa3a4dd6 /drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c | |
parent | c929323609aefdd6da40d02860c2d59fb4a9d421 (diff) | |
download | linux-d3b2b9ab1ef2ca1d883f3729ceb54503193b7958.tar.gz |
octeontx2-af: Bringup CGX LMAC links by default
- Added new CGX firmware interface API for sending link up/down
commands
- Do link up for cgx lmac ports by default at the time of CGX
driver probe. Since cgx link up in driver probe affects the
Linux boot time, linkup procedure is kept threaded using
workqueues.
For this, a new cgx API cgx_lmac_linkup_start has been added.
Signed-off-by: Linu Cherian <lcherian@marvell.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c')
-rw-r--r-- | drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c b/drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c index 66d94df9b8a2..7d7133c5f799 100644 --- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c +++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c @@ -238,6 +238,8 @@ static int cgx_lmac_event_handler_init(struct rvu *rvu) for (cgx = 0; cgx <= rvu->cgx_cnt_max; cgx++) { cgxd = rvu_cgx_pdata(cgx, rvu); + if (!cgxd) + continue; for (lmac = 0; lmac < cgx_get_lmac_cnt(cgxd); lmac++) { err = cgx_lmac_evh_register(&cb, cgxd, lmac); if (err) @@ -262,6 +264,7 @@ static void rvu_cgx_wq_destroy(struct rvu *rvu) int rvu_cgx_init(struct rvu *rvu) { int cgx, err; + void *cgxd; /* CGX port id starts from 0 and are not necessarily contiguous * Hence we allocate resources based on the maximum port id value. @@ -291,6 +294,23 @@ int rvu_cgx_init(struct rvu *rvu) if (err) return err; + /* Ensure event handler registration is completed, before + * we turn on the links + */ + mb(); + + /* Do link up for all CGX ports */ + for (cgx = 0; cgx <= rvu->cgx_cnt_max; cgx++) { + cgxd = rvu_cgx_pdata(cgx, rvu); + if (!cgxd) + continue; + err = cgx_lmac_linkup_start(cgxd); + if (err) + dev_err(rvu->dev, + "Link up process failed to start on cgx %d\n", + cgx); + } + return 0; } |