[yocto] [PATCH][linux-yocto] pch_gbe: Do not abort probe on bad MAC

Bruce Ashfield bruce.ashfield at windriver.com
Sun Jan 22 20:01:42 PST 2012


On 12-01-19 4:34 PM, Darren Hart wrote:
> Bruce, please apply to linux-yocto-3.0/yocto/standard/base

Queued.

Bruce

>
> Upstream-Status: Accepted (Linux 3.3)
>
> If the MAC is invalid or not implemented, do not abort the probe. Issue
> a warning and prevent bringing the interface up until a MAC is set manually
> (via ifconfig $IFACE hw ether $MAC).
>
> Tested on two platforms, one with a valid MAC, the other without a MAC. The real
> MAC is used if present, the interface fails to come up until the MAC is set on
> the other. They successfully get an IP over DHCP and pass a simple ping and
> login over ssh test.
>
> This is meant to allow the Inforce SYS940X development board:
> http://www.inforcecomputing.com/SYS940X_ECX.html
> (and others suffering from a missing MAC) to work with the mainline kernel.
> Without this patch, the probe will fail and the interface will not be created,
> preventing the user from configuring the MAC manually.
>
> This does not make any attempt to address a missing or invalid MAC for the
> pch_phub driver.
>
> Signed-off-by: Darren Hart<dvhart at linux.intel.com>
> CC: Arjan van de Ven<arjan at linux.intel.com>
> CC: Alan Cox<alan at linux.intel.com>
> CC: Tomoya MORINAGA<tomoya.rohm at gmail.com>
> CC: Jeff Kirsher<jeffrey.t.kirsher at intel.com>
> CC: "David S. Miller"<davem at davemloft.net>
> CC: Paul Gortmaker<paul.gortmaker at windriver.com>
> CC: Jon Mason<jdmason at kudzu.us>
> CC: netdev at vger.kernel.org
> CC: Mark Brown<broonie at opensource.wolfsonmicro.com>
> CC: David Laight<David.Laight at ACULAB.COM>
> CC: Joe Perches<joe at perches.com>
> ---
>   drivers/net/pch_gbe/pch_gbe_main.c |   17 ++++++++++++++---
>   1 files changed, 14 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/pch_gbe/pch_gbe_main.c b/drivers/net/pch_gbe/pch_gbe_main.c
> index eac3c5c..e7412f2 100644
> --- a/drivers/net/pch_gbe/pch_gbe_main.c
> +++ b/drivers/net/pch_gbe/pch_gbe_main.c
> @@ -1701,6 +1701,12 @@ int pch_gbe_up(struct pch_gbe_adapter *adapter)
>   	struct pch_gbe_rx_ring *rx_ring = adapter->rx_ring;
>   	int err;
>
> +	/* Ensure we have a valid MAC */
> +	if (!is_valid_ether_addr(adapter->hw.mac.addr)) {
> +		pr_err("Error: Invalid MAC address\n");
> +		return -EINVAL;
> +	}
> +
>   	/* hardware has been reset, we need to reload some things */
>   	pch_gbe_set_multi(netdev);
>
> @@ -2392,9 +2398,14 @@ static int pch_gbe_probe(struct pci_dev *pdev,
>
>   	memcpy(netdev->dev_addr, adapter->hw.mac.addr, netdev->addr_len);
>   	if (!is_valid_ether_addr(netdev->dev_addr)) {
> -		dev_err(&pdev->dev, "Invalid MAC Address\n");
> -		ret = -EIO;
> -		goto err_free_adapter;
> +		/*
> +		 * If the MAC is invalid (or just missing), display a warning
> +		 * but do not abort setting up the device. pch_gbe_up will
> +		 * prevent the interface from being brought up until a valid MAC
> +		 * is set.
> +		 */
> +		dev_err(&pdev->dev, "Invalid MAC address, "
> +		                    "interface disabled.\n");
>   	}
>   	setup_timer(&adapter->watchdog_timer, pch_gbe_watchdog,
>   		    (unsigned long)adapter);




More information about the yocto mailing list