From patchwork Wed Feb 3 15:02:38 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lubomir Rintel X-Patchwork-Id: 102854 Delivered-To: patch@linaro.org Received: by 10.112.43.199 with SMTP id y7csp346055lbl; Wed, 3 Feb 2016 07:03:10 -0800 (PST) X-Received: by 10.98.14.149 with SMTP id 21mr2833791pfo.79.1454511790377; Wed, 03 Feb 2016 07:03:10 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h21si9802488pfj.153.2016.02.03.07.03.10; Wed, 03 Feb 2016 07:03:10 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932420AbcBCPDG (ORCPT + 30 others); Wed, 3 Feb 2016 10:03:06 -0500 Received: from mx1.redhat.com ([209.132.183.28]:48573 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754669AbcBCPDD (ORCPT ); Wed, 3 Feb 2016 10:03:03 -0500 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (Postfix) with ESMTPS id ABE053CEF52; Wed, 3 Feb 2016 15:03:02 +0000 (UTC) Received: from belphegor.brq.redhat.com (dhcp-0-167.brq.redhat.com [10.34.0.167]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u13F2tpD005819 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Wed, 3 Feb 2016 10:03:00 -0500 From: Lubomir Rintel To: linux-rpi-kernel@lists.infradead.org Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Eric Anholt , Lee Jones , Stephen Warren , Peter Chen , Arnd Bergmann Subject: [PATCH 1/2] net/smscx5xx: use the device tree for mac address Date: Wed, 3 Feb 2016 16:02:38 +0100 Message-Id: <1454511759-24827-2-git-send-email-lkundrak@v3.sk> In-Reply-To: <1454511759-24827-1-git-send-email-lkundrak@v3.sk> References: <1454511759-24827-1-git-send-email-lkundrak@v3.sk> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Arnd Bergmann This takes the MAC address for smsc75xx/smsc95xx USB network devices from a the device tree. This is required to get a usable persistent address on the popular beagleboard, whose hardware designers accidentally forgot that an ethernet device really requires an a MAC address to be functional. The smsc75xx and smsc95xx drivers are just two copies of the same code, so better fix both. Tested-by: Lubomir Rintel Signed-off-by: Arnd Bergmann --- drivers/net/usb/smsc75xx.c | 10 ++++++++++ drivers/net/usb/smsc95xx.c | 10 ++++++++++ 2 files changed, 20 insertions(+) -- 2.5.0 diff --git a/drivers/net/usb/smsc75xx.c b/drivers/net/usb/smsc75xx.c index 30033db..b2e33e6 100644 --- a/drivers/net/usb/smsc75xx.c +++ b/drivers/net/usb/smsc75xx.c @@ -29,6 +29,7 @@ #include #include #include +#include #include "smsc75xx.h" #define SMSC_CHIPNAME "smsc75xx" @@ -761,6 +762,8 @@ static int smsc75xx_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd) static void smsc75xx_init_mac_address(struct usbnet *dev) { + const void *address; + /* try reading mac address from EEPROM */ if (smsc75xx_read_eeprom(dev, EEPROM_MAC_OFFSET, ETH_ALEN, dev->net->dev_addr) == 0) { @@ -772,6 +775,13 @@ static void smsc75xx_init_mac_address(struct usbnet *dev) } } + address = of_get_property(dev->udev->dev.of_node, + "local-mac-address", NULL); + if (address) { + memcpy(dev->net->dev_addr, address, ETH_ALEN); + return; + } + /* no eeprom, or eeprom values are invalid. generate random MAC */ eth_hw_addr_random(dev->net); netif_dbg(dev, ifup, dev->net, "MAC address set to eth_random_addr\n"); diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c index 66b3ab9..021b9ce 100644 --- a/drivers/net/usb/smsc95xx.c +++ b/drivers/net/usb/smsc95xx.c @@ -29,6 +29,7 @@ #include #include #include +#include #include "smsc95xx.h" #define SMSC_CHIPNAME "smsc95xx" @@ -765,6 +766,8 @@ static int smsc95xx_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd) static void smsc95xx_init_mac_address(struct usbnet *dev) { + const void *address; + /* try reading mac address from EEPROM */ if (smsc95xx_read_eeprom(dev, EEPROM_MAC_OFFSET, ETH_ALEN, dev->net->dev_addr) == 0) { @@ -775,6 +778,13 @@ static void smsc95xx_init_mac_address(struct usbnet *dev) } } + address = of_get_property(dev->udev->dev.of_node, + "local-mac-address", NULL); + if (address) { + memcpy(dev->net->dev_addr, address, ETH_ALEN); + return; + } + /* no eeprom, or eeprom values are invalid. generate random MAC */ eth_hw_addr_random(dev->net); netif_dbg(dev, ifup, dev->net, "MAC address set to eth_random_addr\n");