[U-Boot] [PATCH v2 6/6] driver: net: fsl-mc: Add support of multiple phys for dpmac
Pankaj Bansal
pankaj.bansal at nxp.com
Wed Oct 10 02:59:40 UTC 2018
> -----Original Message-----
> From: Joe Hershberger [mailto:joe.hershberger at ni.com]
> Sent: Wednesday, October 10, 2018 3:02 AM
> To: Pankaj Bansal <pankaj.bansal at nxp.com>
> Cc: u-boot <u-boot at lists.denx.de>; Joseph Hershberger
> <joseph.hershberger at ni.com>; Priyanka Jain <priyanka.jain at nxp.com>;
> Varun Sethi <V.Sethi at nxp.com>
> Subject: Re: [U-Boot] [PATCH v2 6/6] driver: net: fsl-mc: Add support of
> multiple phys for dpmac
>
> On Mon, Jul 30, 2018 at 2:48 AM Pankaj Bansal <pankaj.bansal at nxp.com>
> wrote:
> >
> > Till now we have had cases where we had one phy device per dpmac.
> > Now, with the upcoming products (LX2160AQDS), we have cases, where
> > there are sometimes two phy devices for one dpmac. One phy for TX
> > lanes and one phy for RX lanes. to handle such cases, add the support
> > for multiple phys in ethernet driver. The ethernet link is up if all
> > the phy devices connected to one dpmac report link up. also the link
> > capabilities are limited by the weakest phy device.
> >
> > i.e. say if there are two phys for one dpmac. one operates at 10G
> > without autoneg and other operate at 1G with autoneg. Then the
> > ethernet interface will operate at 1G without autoneg.
> >
> > Signed-off-by: Pankaj Bansal <pankaj.bansal at nxp.com>
> > ---
> >
> > Notes:
> > V2:
> > - use single-line comment format.
> > - use WRIOP_MAX_PHY_NUM.
> > - use -ENODEV or -EINVAL instead of -1 wherever appropriate
> > - include the variable names in the headers too.
> > - Change the return type of some functions from void to int so that
> > a meaningful error message can be returned
> >
> > board/freescale/ls1088a/eth_ls1088aqds.c | 18 +++---
> > board/freescale/ls1088a/eth_ls1088ardb.c | 21 ++++---
> > board/freescale/ls2080aqds/eth.c | 26 ++++----
> > board/freescale/ls2080ardb/eth_ls2080rdb.c | 24 +++----
> > drivers/net/ldpaa_eth/ldpaa_eth.c | 66 ++++++++++++++------
> > drivers/net/ldpaa_eth/ldpaa_wriop.c | 61 +++++++++++-------
> > include/fsl-mc/ldpaa_wriop.h | 45 ++++++-------
> > 7 files changed, 152 insertions(+), 109 deletions(-)
> >
>
> [ ... ]
>
> > diff --git a/drivers/net/ldpaa_eth/ldpaa_wriop.c
> > b/drivers/net/ldpaa_eth/ldpaa_wriop.c
> > index afbb1ca91e..be3101d26a 100644
> > --- a/drivers/net/ldpaa_eth/ldpaa_wriop.c
> > +++ b/drivers/net/ldpaa_eth/ldpaa_wriop.c
> > @@ -22,11 +22,10 @@ __weak phy_interface_t
> wriop_dpmac_enet_if(int
> > dpmac_id, int lane_prtc) void wriop_init_dpmac(int sd, int dpmac_id,
> > int lane_prtcl) {
> > phy_interface_t enet_if;
> > + int phy_num;
> >
> > dpmac_info[dpmac_id].enabled = 0;
> > dpmac_info[dpmac_id].id = 0;
> > - dpmac_info[dpmac_id].phy_addr = -1;
> > - dpmac_info[dpmac_id].phydev = NULL;
> > dpmac_info[dpmac_id].enet_if = PHY_INTERFACE_MODE_NONE;
> >
> > enet_if = wriop_dpmac_enet_if(dpmac_id, lane_prtcl); @@ -35,15
> > +34,23 @@ void wriop_init_dpmac(int sd, int dpmac_id, int lane_prtcl)
> > dpmac_info[dpmac_id].id = dpmac_id;
> > dpmac_info[dpmac_id].enet_if = enet_if;
> > }
> > + for (phy_num = 0; phy_num < WRIOP_MAX_PHY_NUM;
> phy_num++) {
> > + dpmac_info[dpmac_id].phydev[phy_num] = NULL;
> > + dpmac_info[dpmac_id].phy_addr[phy_num] = -1;
> > + }
> > }
> >
> > void wriop_init_dpmac_enet_if(int dpmac_id, phy_interface_t enet_if)
> > {
> > + int phy_num;
> > +
> > dpmac_info[dpmac_id].enabled = 1;
> > dpmac_info[dpmac_id].id = dpmac_id;
> > - dpmac_info[dpmac_id].phy_addr = -1;
> > dpmac_info[dpmac_id].enet_if = enet_if;
> > - dpmac_info[dpmac_id].phydev = NULL;
> > + for (phy_num = 0; phy_num < WRIOP_MAX_PHY_NUM;
> phy_num++) {
> > + dpmac_info[dpmac_id].phydev[phy_num] = NULL;
> > + dpmac_info[dpmac_id].phy_addr[phy_num] = -1;
> > + }
> > }
> >
> >
> > @@ -60,45 +67,45 @@ static int wriop_dpmac_to_index(int dpmac_id)
> > return -1;
> > }
> >
> > -void wriop_disable_dpmac(int dpmac_id)
> > +int wriop_disable_dpmac(int dpmac_id)
> > {
> > int i = wriop_dpmac_to_index(dpmac_id);
> >
> > if (i == -1)
> > - return;
> > + return -ENODEV;
> >
> > dpmac_info[i].enabled = 0;
> > wriop_dpmac_disable(dpmac_id);
>
> These functions all warn since you don't return 0 at the end of them.
> Now I'll have to back this series out of the release and wait for an update.
> Patches need to build without warnings.
My apologies for this oversight on my part.
I have sent V3 of these patches with the return 0 at the end of all functions, whose return type changed.
I have also tested these patches for build warning after compiling for "ls2080aqds"
>
> > }
> >
> > -void wriop_enable_dpmac(int dpmac_id)
> > +int wriop_enable_dpmac(int dpmac_id)
> > {
> > int i = wriop_dpmac_to_index(dpmac_id);
> >
> > if (i == -1)
> > - return;
> > + return -ENODEV;
> >
> > dpmac_info[i].enabled = 1;
> > wriop_dpmac_enable(dpmac_id);
> > }
> >
> > -u8 wriop_is_enabled_dpmac(int dpmac_id)
> > +int wriop_is_enabled_dpmac(int dpmac_id)
> > {
> > int i = wriop_dpmac_to_index(dpmac_id);
> >
> > if (i == -1)
> > - return -1;
> > + return -ENODEV;
> >
> > return dpmac_info[i].enabled;
> > }
> >
> >
> > -void wriop_set_mdio(int dpmac_id, struct mii_dev *bus)
> > +int wriop_set_mdio(int dpmac_id, struct mii_dev *bus)
> > {
> > int i = wriop_dpmac_to_index(dpmac_id);
> >
> > if (i == -1)
> > - return;
> > + return -ENODEV;
> >
> > dpmac_info[i].bus = bus;
> > }
> > @@ -113,44 +120,52 @@ struct mii_dev *wriop_get_mdio(int
> dpmac_id)
> > return dpmac_info[i].bus;
> > }
> >
> > -void wriop_set_phy_address(int dpmac_id, int address)
> > +int wriop_set_phy_address(int dpmac_id, int phy_num, int address)
> > {
> > int i = wriop_dpmac_to_index(dpmac_id);
> >
> > if (i == -1)
> > - return;
> > + return -ENODEV;
> > + if (phy_num < 0 || phy_num >= WRIOP_MAX_PHY_NUM)
> > + return -EINVAL;
> >
> > - dpmac_info[i].phy_addr = address;
> > + dpmac_info[i].phy_addr[phy_num] = address;
> > }
> >
> > -int wriop_get_phy_address(int dpmac_id)
> > +int wriop_get_phy_address(int dpmac_id, int phy_num)
> > {
> > int i = wriop_dpmac_to_index(dpmac_id);
> >
> > if (i == -1)
> > - return -1;
> > + return -ENODEV;
> > + if (phy_num < 0 || phy_num >= WRIOP_MAX_PHY_NUM)
> > + return -EINVAL;
> >
> > - return dpmac_info[i].phy_addr;
> > + return dpmac_info[i].phy_addr[phy_num];
> > }
> >
> > -void wriop_set_phy_dev(int dpmac_id, struct phy_device *phydev)
> > +int wriop_set_phy_dev(int dpmac_id, int phy_num, struct phy_device
> > +*phydev)
> > {
> > int i = wriop_dpmac_to_index(dpmac_id);
> >
> > if (i == -1)
> > - return;
> > + return -ENODEV;
> > + if (phy_num < 0 || phy_num >= WRIOP_MAX_PHY_NUM)
> > + return -EINVAL;
> >
> > - dpmac_info[i].phydev = phydev;
> > + dpmac_info[i].phydev[phy_num] = phydev;
> > }
> >
> > -struct phy_device *wriop_get_phy_dev(int dpmac_id)
> > +struct phy_device *wriop_get_phy_dev(int dpmac_id, int phy_num)
> > {
> > int i = wriop_dpmac_to_index(dpmac_id);
> >
> > if (i == -1)
> > return NULL;
> > + if (phy_num < 0 || phy_num >= WRIOP_MAX_PHY_NUM)
> > + return NULL;
> >
> > - return dpmac_info[i].phydev;
> > + return dpmac_info[i].phydev[phy_num];
> > }
> >
> > phy_interface_t wriop_get_enet_if(int dpmac_id)
>
> [ ... ]
More information about the U-Boot
mailing list