From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mark Rutland Subject: Re: [PATCH 2/2] net, thunder, bgx: Add support for ACPI binding. Date: Fri, 7 Aug 2015 15:01:06 +0100 Message-ID: <20150807140106.GE7646@leverpostej> References: <1438907590-29649-1-git-send-email-ddaney.cavm@gmail.com> <1438907590-29649-3-git-send-email-ddaney.cavm@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Return-path: Content-Disposition: inline In-Reply-To: <1438907590-29649-3-git-send-email-ddaney.cavm@gmail.com> Sender: linux-kernel-owner@vger.kernel.org To: David Daney , grant.likely@linaro.org, rob.herring@linaro.org Cc: "netdev@vger.kernel.org" , "David S. Miller" , "linux-kernel@vger.kernel.org" , "linux-mips@linux-mips.org" , David Daney , Tomasz Nowicki , Robert Richter , "linux-acpi@vger.kernel.org" , Sunil Goutham , "linux-arm-kernel@lists.infradead.org" , deviectree@vger.kernel.org List-Id: linux-acpi@vger.kernel.org On Fri, Aug 07, 2015 at 01:33:10AM +0100, David Daney wrote: > From: David Daney > > Find out which PHYs belong to which BGX instance in the ACPI way. > > Set the MAC address of the device as provided by ACPI tables. This is > similar to the implementation for devicetree in > of_get_mac_address(). The table is searched for the device property > entries "mac-address", "local-mac-address" and "address" in that > order. The address is provided in a u64 variable and must contain a > valid 6 bytes-len mac addr. > > Based on code from: Narinder Dhillon > Tomasz Nowicki > Robert Richter > > Signed-off-by: Tomasz Nowicki > Signed-off-by: Robert Richter > Signed-off-by: David Daney > --- > drivers/net/ethernet/cavium/thunder/thunder_bgx.c | 137 +++++++++++++++++++++- > 1 file changed, 135 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/ethernet/cavium/thunder/thunder_bgx.c b/drivers/net/ethernet/cavium/thunder/thunder_bgx.c > index 615b2af..2056583 100644 > --- a/drivers/net/ethernet/cavium/thunder/thunder_bgx.c > +++ b/drivers/net/ethernet/cavium/thunder/thunder_bgx.c > @@ -6,6 +6,7 @@ > * as published by the Free Software Foundation. > */ > > +#include > #include > #include > #include > @@ -26,7 +27,7 @@ > struct lmac { > struct bgx *bgx; > int dmac; > - unsigned char mac[ETH_ALEN]; > + u8 mac[ETH_ALEN]; > bool link_up; > int lmacid; /* ID within BGX */ > int lmacid_bd; /* ID on board */ > @@ -835,6 +836,133 @@ static void bgx_get_qlm_mode(struct bgx *bgx) > } > } > > +#ifdef CONFIG_ACPI > + > +static int bgx_match_phy_id(struct device *dev, void *data) > +{ > + struct phy_device *phydev = to_phy_device(dev); > + u32 *phy_id = data; > + > + if (phydev->addr == *phy_id) > + return 1; > + > + return 0; > +} > + > +static const char * const addr_propnames[] = { > + "mac-address", > + "local-mac-address", > + "address", > +}; If these are going to be generally necessary, then we should get them adopted as standardised _DSD properties (ideally just one of them). [...] > +static acpi_status bgx_acpi_register_phy(acpi_handle handle, > + u32 lvl, void *context, void **rv) > +{ > + struct acpi_reference_args args; > + const union acpi_object *prop; > + struct bgx *bgx = context; > + struct acpi_device *adev; > + struct device *phy_dev; > + u32 phy_id; > + > + if (acpi_bus_get_device(handle, &adev)) > + goto out; > + > + SET_NETDEV_DEV(&bgx->lmac[bgx->lmac_count].netdev, &bgx->pdev->dev); > + > + acpi_get_mac_address(adev, bgx->lmac[bgx->lmac_count].mac); > + > + bgx->lmac[bgx->lmac_count].lmacid = bgx->lmac_count; > + > + if (acpi_dev_get_property_reference(adev, "phy-handle", 0, &args)) > + goto out; > + > + if (acpi_dev_get_property(args.adev, "phy-channel", ACPI_TYPE_INTEGER, &prop)) > + goto out; Likewise for any inter-device properties, so that we can actually handle them in a generic fashion, and avoid / learn from the mistakes we've already handled with DT. Mark. From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932295AbbHGOBn (ORCPT ); Fri, 7 Aug 2015 10:01:43 -0400 Received: from foss.arm.com ([217.140.101.70]:42882 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932227AbbHGOBk (ORCPT ); Fri, 7 Aug 2015 10:01:40 -0400 Date: Fri, 7 Aug 2015 15:01:06 +0100 From: Mark Rutland To: David Daney , grant.likely@linaro.org, rob.herring@linaro.org Cc: "netdev@vger.kernel.org" , "David S. Miller" , "linux-kernel@vger.kernel.org" , "linux-mips@linux-mips.org" , David Daney , Tomasz Nowicki , Robert Richter , "linux-acpi@vger.kernel.org" , Sunil Goutham , "linux-arm-kernel@lists.infradead.org" , deviectree@vger.kernel.org Subject: Re: [PATCH 2/2] net, thunder, bgx: Add support for ACPI binding. Message-ID: <20150807140106.GE7646@leverpostej> References: <1438907590-29649-1-git-send-email-ddaney.cavm@gmail.com> <1438907590-29649-3-git-send-email-ddaney.cavm@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1438907590-29649-3-git-send-email-ddaney.cavm@gmail.com> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Aug 07, 2015 at 01:33:10AM +0100, David Daney wrote: > From: David Daney > > Find out which PHYs belong to which BGX instance in the ACPI way. > > Set the MAC address of the device as provided by ACPI tables. This is > similar to the implementation for devicetree in > of_get_mac_address(). The table is searched for the device property > entries "mac-address", "local-mac-address" and "address" in that > order. The address is provided in a u64 variable and must contain a > valid 6 bytes-len mac addr. > > Based on code from: Narinder Dhillon > Tomasz Nowicki > Robert Richter > > Signed-off-by: Tomasz Nowicki > Signed-off-by: Robert Richter > Signed-off-by: David Daney > --- > drivers/net/ethernet/cavium/thunder/thunder_bgx.c | 137 +++++++++++++++++++++- > 1 file changed, 135 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/ethernet/cavium/thunder/thunder_bgx.c b/drivers/net/ethernet/cavium/thunder/thunder_bgx.c > index 615b2af..2056583 100644 > --- a/drivers/net/ethernet/cavium/thunder/thunder_bgx.c > +++ b/drivers/net/ethernet/cavium/thunder/thunder_bgx.c > @@ -6,6 +6,7 @@ > * as published by the Free Software Foundation. > */ > > +#include > #include > #include > #include > @@ -26,7 +27,7 @@ > struct lmac { > struct bgx *bgx; > int dmac; > - unsigned char mac[ETH_ALEN]; > + u8 mac[ETH_ALEN]; > bool link_up; > int lmacid; /* ID within BGX */ > int lmacid_bd; /* ID on board */ > @@ -835,6 +836,133 @@ static void bgx_get_qlm_mode(struct bgx *bgx) > } > } > > +#ifdef CONFIG_ACPI > + > +static int bgx_match_phy_id(struct device *dev, void *data) > +{ > + struct phy_device *phydev = to_phy_device(dev); > + u32 *phy_id = data; > + > + if (phydev->addr == *phy_id) > + return 1; > + > + return 0; > +} > + > +static const char * const addr_propnames[] = { > + "mac-address", > + "local-mac-address", > + "address", > +}; If these are going to be generally necessary, then we should get them adopted as standardised _DSD properties (ideally just one of them). [...] > +static acpi_status bgx_acpi_register_phy(acpi_handle handle, > + u32 lvl, void *context, void **rv) > +{ > + struct acpi_reference_args args; > + const union acpi_object *prop; > + struct bgx *bgx = context; > + struct acpi_device *adev; > + struct device *phy_dev; > + u32 phy_id; > + > + if (acpi_bus_get_device(handle, &adev)) > + goto out; > + > + SET_NETDEV_DEV(&bgx->lmac[bgx->lmac_count].netdev, &bgx->pdev->dev); > + > + acpi_get_mac_address(adev, bgx->lmac[bgx->lmac_count].mac); > + > + bgx->lmac[bgx->lmac_count].lmacid = bgx->lmac_count; > + > + if (acpi_dev_get_property_reference(adev, "phy-handle", 0, &args)) > + goto out; > + > + if (acpi_dev_get_property(args.adev, "phy-channel", ACPI_TYPE_INTEGER, &prop)) > + goto out; Likewise for any inter-device properties, so that we can actually handle them in a generic fashion, and avoid / learn from the mistakes we've already handled with DT. Mark. From mboxrd@z Thu Jan 1 00:00:00 1970 From: mark.rutland@arm.com (Mark Rutland) Date: Fri, 7 Aug 2015 15:01:06 +0100 Subject: [PATCH 2/2] net, thunder, bgx: Add support for ACPI binding. In-Reply-To: <1438907590-29649-3-git-send-email-ddaney.cavm@gmail.com> References: <1438907590-29649-1-git-send-email-ddaney.cavm@gmail.com> <1438907590-29649-3-git-send-email-ddaney.cavm@gmail.com> Message-ID: <20150807140106.GE7646@leverpostej> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On Fri, Aug 07, 2015 at 01:33:10AM +0100, David Daney wrote: > From: David Daney > > Find out which PHYs belong to which BGX instance in the ACPI way. > > Set the MAC address of the device as provided by ACPI tables. This is > similar to the implementation for devicetree in > of_get_mac_address(). The table is searched for the device property > entries "mac-address", "local-mac-address" and "address" in that > order. The address is provided in a u64 variable and must contain a > valid 6 bytes-len mac addr. > > Based on code from: Narinder Dhillon > Tomasz Nowicki > Robert Richter > > Signed-off-by: Tomasz Nowicki > Signed-off-by: Robert Richter > Signed-off-by: David Daney > --- > drivers/net/ethernet/cavium/thunder/thunder_bgx.c | 137 +++++++++++++++++++++- > 1 file changed, 135 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/ethernet/cavium/thunder/thunder_bgx.c b/drivers/net/ethernet/cavium/thunder/thunder_bgx.c > index 615b2af..2056583 100644 > --- a/drivers/net/ethernet/cavium/thunder/thunder_bgx.c > +++ b/drivers/net/ethernet/cavium/thunder/thunder_bgx.c > @@ -6,6 +6,7 @@ > * as published by the Free Software Foundation. > */ > > +#include > #include > #include > #include > @@ -26,7 +27,7 @@ > struct lmac { > struct bgx *bgx; > int dmac; > - unsigned char mac[ETH_ALEN]; > + u8 mac[ETH_ALEN]; > bool link_up; > int lmacid; /* ID within BGX */ > int lmacid_bd; /* ID on board */ > @@ -835,6 +836,133 @@ static void bgx_get_qlm_mode(struct bgx *bgx) > } > } > > +#ifdef CONFIG_ACPI > + > +static int bgx_match_phy_id(struct device *dev, void *data) > +{ > + struct phy_device *phydev = to_phy_device(dev); > + u32 *phy_id = data; > + > + if (phydev->addr == *phy_id) > + return 1; > + > + return 0; > +} > + > +static const char * const addr_propnames[] = { > + "mac-address", > + "local-mac-address", > + "address", > +}; If these are going to be generally necessary, then we should get them adopted as standardised _DSD properties (ideally just one of them). [...] > +static acpi_status bgx_acpi_register_phy(acpi_handle handle, > + u32 lvl, void *context, void **rv) > +{ > + struct acpi_reference_args args; > + const union acpi_object *prop; > + struct bgx *bgx = context; > + struct acpi_device *adev; > + struct device *phy_dev; > + u32 phy_id; > + > + if (acpi_bus_get_device(handle, &adev)) > + goto out; > + > + SET_NETDEV_DEV(&bgx->lmac[bgx->lmac_count].netdev, &bgx->pdev->dev); > + > + acpi_get_mac_address(adev, bgx->lmac[bgx->lmac_count].mac); > + > + bgx->lmac[bgx->lmac_count].lmacid = bgx->lmac_count; > + > + if (acpi_dev_get_property_reference(adev, "phy-handle", 0, &args)) > + goto out; > + > + if (acpi_dev_get_property(args.adev, "phy-channel", ACPI_TYPE_INTEGER, &prop)) > + goto out; Likewise for any inter-device properties, so that we can actually handle them in a generic fashion, and avoid / learn from the mistakes we've already handled with DT. Mark.