Received: by 2002:ac0:8c9a:0:0:0:0:0 with SMTP id r26csp4052086ima; Mon, 4 Feb 2019 09:23:44 -0800 (PST) X-Google-Smtp-Source: AHgI3IZmC+hrtBvzvwt75iYiT7B9hD+rh7FjALVMfi9vJ5G8eOKXU7jXzFxTlOMp+TkJ05mGKZ03 X-Received: by 2002:a17:902:1745:: with SMTP id i63mr440608pli.145.1549301024131; Mon, 04 Feb 2019 09:23:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1549301024; cv=none; d=google.com; s=arc-20160816; b=tyf1mjr4T8mrAOYEEIVkwqWfTkf8Gg1pgXACcA8Ia1cMCcEGzxz8KpvL7gZhHJZJ4d G+TSadsB0mOm15osaanicp/XxxxRGskEW76bN8hCYQpEpYtqdULffppTDATQR3eKWvMB +DcYuFQ/DhiELXOnijZG0xBvDKR9C3HChxOekY/iDndht1mAfRhWdtocCVyRZL1kcP3G zv5gUU18FwIoUsKbISuVcBZ3gpNQuMz+N1qvsJyQedgNSbn5oK5hqgx3v085rKlaFNmA REa0JSARCi6isvc7K8R+xe8+8PqAynMFWpRSqXXpvS4K+0UThDjqmew5XlocEInnTKWw 4rjA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=vEZh4Vb6WlyoK2dCleg7LPen3l6UpLhkjMsz2qZaOGI=; b=H+cG/5bCjjEzFaKZk6r1yPdQp0jlO5ZjAqSG9eZ/Qb0wybixBUTvmUBGTKw0yjIOfg ph4HhSRkwk12QAyj6IfKeHMTtmh/lxFc6BBNtHIsXmQTKhe+jf96GaVO2yc+ARG8FmsL HJf1lFFURgjk7rDiZVQQZ8bBfpSxZ5SxkFgQ7ES2o3xII0Im2jq71es8NK+OtNiXqcvD MJ4kzaqb7syz28m+7HST48/exNfkO41F2Scb0ZDKoWgErBs+Q8SAQEf+NZI9dMwYaLMR j0hb3MRp00CECVE4FFoSXb38bYQSippFCqWu62We5ndVKhLK1wenfIJJEFSfnrGmi0sO ELKQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=BUK18UxN; 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; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e7si482979pgv.499.2019.02.04.09.23.27; Mon, 04 Feb 2019 09:23:44 -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; dkim=pass header.i=@gmail.com header.s=20161025 header.b=BUK18UxN; 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; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729723AbfBDQmS (ORCPT + 99 others); Mon, 4 Feb 2019 11:42:18 -0500 Received: from mail-wr1-f65.google.com ([209.85.221.65]:45350 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728791AbfBDQmS (ORCPT ); Mon, 4 Feb 2019 11:42:18 -0500 Received: by mail-wr1-f65.google.com with SMTP id q15so496540wro.12; Mon, 04 Feb 2019 08:42:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=vEZh4Vb6WlyoK2dCleg7LPen3l6UpLhkjMsz2qZaOGI=; b=BUK18UxNtJ+kZOUiGR461VP2bqm1ZW7kvthWjRS7igqj+rLNPnSYGj1aUAZtLWw9bv fFojEX656a0Jvx14wSy1tQkncEAe5V2DCjz1duwg+JDbBcHQJJPq0JfeIF2MRnGZAu8r DnG8ruTmvNSylif07bXhEHdsqaAlBB7lZNEa7jOZzXJhG78Znt7P8ii+JWhDEW/cEArU bZ13ZI2hFj+1jaZU8P9RaenIMn8g8P9YlQYhZ+30TIn3dQUolEqGhjgmgYD4zZxQ3/eB URu6UwoyF6q3WpvojSPdOkDkdBKj4ZklkRIrSUoZK0xzx+lbfATGdBf5sB0Zwj0VtT7P ezCA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=vEZh4Vb6WlyoK2dCleg7LPen3l6UpLhkjMsz2qZaOGI=; b=cWMHG175Yjxa3TJQxUSlk7kOUu4BSVFz4xtPrMTbWsdvCnHHc9BQnhxDRx1bmhY1uI QionKI8a3hczUE9+ie0iwwA1HRifTzDZmGjuqTg+z+CQzzldjO0vr6u9YVNJQsMVshf8 RJ+jK43oBRLFrMy/60vqlLoCFz3jRsoIozCOBAuuguWYjYNTmbUdTbli4uNGDlEe8v77 eNFnSiHqylHuDC5nRxfPO3cY3/h38G3to6m535NgfgBw0ElbRxePVfHn6Eic4hliJ/YT ZQTPAnKdCMnfg22n52ZC/Zf223hzdba9FZimoCEWE7KUvSg519lxRZq+GhOTmQk5Y3b1 cX9g== X-Gm-Message-State: AHQUAub13OVqfo9P/3dDbhQr5o/NpLLsyFoEVvOYQZRSorNOT5is1iBB +fuQDlO2zcI30bCUb3iKxx0= X-Received: by 2002:a5d:530a:: with SMTP id e10mr192150wrv.151.1549298535558; Mon, 04 Feb 2019 08:42:15 -0800 (PST) Received: from localhost (pD9E51040.dip0.t-ipconnect.de. [217.229.16.64]) by smtp.gmail.com with ESMTPSA id g188sm18521604wmf.32.2019.02.04.08.42.14 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 04 Feb 2019 08:42:14 -0800 (PST) From: Thierry Reding To: "David S. Miller" Cc: Heiner Kallweit , Andrew Lunn , Realtek linux nic maintainers , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org Subject: [PATCH v2 1/2] r8169: Load MAC address from device tree if present Date: Mon, 4 Feb 2019 17:42:12 +0100 Message-Id: <20190204164213.30727-1-thierry.reding@gmail.com> X-Mailer: git-send-email 2.19.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Thierry Reding If the system was booted using a device tree and if the device tree contains a MAC address, use it instead of reading one from the EEPROM. This is useful in situations where the EEPROM isn't properly programmed or where the firmware wants to override the existing MAC address. Signed-off-by: Thierry Reding --- Applies to net-next. Changes in v2: - rewrite error check for readability - initialize mac_addr array drivers/net/ethernet/realtek/r8169.c | 36 ++++++++++++++++++---------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c index e8a112149a62..501891be7c56 100644 --- a/drivers/net/ethernet/realtek/r8169.c +++ b/drivers/net/ethernet/realtek/r8169.c @@ -7110,6 +7110,21 @@ static int rtl_alloc_irq(struct rtl8169_private *tp) return pci_alloc_irq_vectors(tp->pci_dev, 1, 1, flags); } +static void rtl_read_mac_address(struct rtl8169_private *tp, + u8 mac_addr[ETH_ALEN]) +{ + /* Get MAC address */ + switch (tp->mac_version) { + case RTL_GIGA_MAC_VER_35 ... RTL_GIGA_MAC_VER_38: + case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_51: + *(u32 *)&mac_addr[0] = rtl_eri_read(tp, 0xe0, ERIAR_EXGMAC); + *(u16 *)&mac_addr[4] = rtl_eri_read(tp, 0xe4, ERIAR_EXGMAC); + break; + default: + break; + } +} + DECLARE_RTL_COND(rtl_link_list_ready_cond) { return RTL_R8(tp, MCU) & LINK_LIST_RDY; @@ -7301,6 +7316,7 @@ static int rtl_get_ether_clk(struct rtl8169_private *tp) static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) { const struct rtl_cfg_info *cfg = rtl_cfg_infos + ent->driver_data; + u8 mac_addr[ETH_ALEN] __aligned(4) = {}; struct rtl8169_private *tp; struct net_device *dev; int chipset, region, i; @@ -7403,20 +7419,14 @@ static int rtl_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) u64_stats_init(&tp->rx_stats.syncp); u64_stats_init(&tp->tx_stats.syncp); - /* Get MAC address */ - switch (tp->mac_version) { - u8 mac_addr[ETH_ALEN] __aligned(4); - case RTL_GIGA_MAC_VER_35 ... RTL_GIGA_MAC_VER_38: - case RTL_GIGA_MAC_VER_40 ... RTL_GIGA_MAC_VER_51: - *(u32 *)&mac_addr[0] = rtl_eri_read(tp, 0xe0, ERIAR_EXGMAC); - *(u16 *)&mac_addr[4] = rtl_eri_read(tp, 0xe4, ERIAR_EXGMAC); + /* get MAC address */ + rc = eth_platform_get_mac_address(&pdev->dev, mac_addr); + if (rc) + rtl_read_mac_address(tp, mac_addr); + + if (is_valid_ether_addr(mac_addr)) + rtl_rar_set(tp, mac_addr); - if (is_valid_ether_addr(mac_addr)) - rtl_rar_set(tp, mac_addr); - break; - default: - break; - } for (i = 0; i < ETH_ALEN; i++) dev->dev_addr[i] = RTL_R8(tp, MAC0 + i); -- 2.19.1