From patchwork Mon Feb 4 16:42:12 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 1036066 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="BUK18UxN"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43tYQv3bvnz9s2P for ; Tue, 5 Feb 2019 03:42:31 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729672AbfBDQmS (ORCPT ); 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-Google-Smtp-Source: AHgI3Ib/Hl2uaVprS8tjLSqG4wAflaDC8nPwp4LcZ8KCvk+UGcZV+uF0DqnIBEXJqRUG6k/PwVzIxg== 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 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@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 Reviewed-by: Heiner Kallweit --- 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); From patchwork Mon Feb 4 16:42:13 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 1036065 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="C5DH5lPZ"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43tYQq3zP6z9s7h for ; Tue, 5 Feb 2019 03:42:27 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729892AbfBDQmV (ORCPT ); Mon, 4 Feb 2019 11:42:21 -0500 Received: from mail-wm1-f67.google.com ([209.85.128.67]:37699 "EHLO mail-wm1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727062AbfBDQmT (ORCPT ); Mon, 4 Feb 2019 11:42:19 -0500 Received: by mail-wm1-f67.google.com with SMTP id g67so606239wmd.2; Mon, 04 Feb 2019 08:42:18 -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:in-reply-to:references :mime-version:content-transfer-encoding; bh=klfMY5bcujzvlO0MLobful1nWbbcATcqEYRjC6qrSNg=; b=C5DH5lPZ1D/zKYXMuB6IfKWgSZxavMuvgzcXCQjhmYGO54EQAe0QT6b5b29e61KtV5 ctxUQHuTa45PKgTpdFnkDkez1/6/NMsLRaQ/6WJMU6T54V/R3fZITJMsKnI3Di1Dx7yx KiYhD8HIp0CIWDm4FYiymQCiPWSSEOdszhfS4ffMHSO5Fg/UEx7/ZICD1ZjotoX5HxWd 8aJNTEGurRT/R4Gzm3btim/kv5lR+dpW107G0XCLfMAO+1AlM/YvYjcaaAxs56oiLFWt 8jRrHlc9hw4bVIgZ2xFElfqATHTdr0ntUjOdVXGo3rRS1vRGC7w0v+ZnQuUm5K2EjRPK PqNA== 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=klfMY5bcujzvlO0MLobful1nWbbcATcqEYRjC6qrSNg=; b=LwNeBJn9mwLacGidQamlw7PFxaCZbJfSnOuvNUbzerwdaKZXbQnb9NWSq1mJHBCTjl qB4a0cshRjqxTPDqYwCVtQ3DEVLE04Wuy5EF84xkLrB5xxaxm4nOVIlRvuXNsvyGvQM2 +PDfTd2DEn4+xXauBv9/8sU5Dhk+ohpEi1qfJ6JcHCj10QMFuUCtsrhAZeDGsogSbdm8 C2xoU1nZYoKkgIpf04RaH4i0hL0UOv4DT/BlldhX0cHEjSdWGr+QLCBfpVaTBVywtiEk BVtCRPn7rJZ34H/4cunGBrOrdIm7GPKtB73h27UIk76NxwvZ59HRCYX0bOu3nVo/GpCb Y8cQ== X-Gm-Message-State: AHQUAuZYQVdkn8MGnWZ5mYlDddvA6ug9pMQ4Dl0F+ec54hdtEEDp2fAP 5tlLmm5/79lvriFDfOQkkVs= X-Google-Smtp-Source: AHgI3IY3ScUnpETUQOLa1MOgKyre9CELJTViPjjG3ZP2Hr5A37SpJX96aGgDQCgZlS7YZt7awDAEqw== X-Received: by 2002:a1c:a185:: with SMTP id k127mr212286wme.134.1549298537184; Mon, 04 Feb 2019 08:42:17 -0800 (PST) Received: from localhost (pD9E51040.dip0.t-ipconnect.de. [217.229.16.64]) by smtp.gmail.com with ESMTPSA id f8sm2374772wrv.41.2019.02.04.08.42.16 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 04 Feb 2019 08:42:16 -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 Subject: [PATCH v2 2/2] r8169: Avoid pointer aliasing Date: Mon, 4 Feb 2019 17:42:13 +0100 Message-Id: <20190204164213.30727-2-thierry.reding@gmail.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190204164213.30727-1-thierry.reding@gmail.com> References: <20190204164213.30727-1-thierry.reding@gmail.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Thierry Reding Read MAC address 32-bit at a time and manually extract the individual bytes. This avoids pointer aliasing and gives the compiler a better chance of optimizing the operation. Suggested-by: Andrew Lunn Signed-off-by: Thierry Reding Reviewed-by: Andrew Lunn --- Applies to net-next. I tested this on a Jetson TX2 with an add-in Realtek ethernet card that has a properly programmed OTP to verify that I got the endianess right. Seems like everything works and the device behaves the same with or without this patch. drivers/net/ethernet/realtek/r8169.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c index 501891be7c56..192fbb36bc9f 100644 --- a/drivers/net/ethernet/realtek/r8169.c +++ b/drivers/net/ethernet/realtek/r8169.c @@ -7113,12 +7113,21 @@ static int rtl_alloc_irq(struct rtl8169_private *tp) static void rtl_read_mac_address(struct rtl8169_private *tp, u8 mac_addr[ETH_ALEN]) { + u32 value; + /* 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); + value = rtl_eri_read(tp, 0xe0, ERIAR_EXGMAC); + mac_addr[0] = (value >> 0) & 0xff; + mac_addr[1] = (value >> 8) & 0xff; + mac_addr[2] = (value >> 16) & 0xff; + mac_addr[3] = (value >> 24) & 0xff; + + value = rtl_eri_read(tp, 0xe4, ERIAR_EXGMAC); + mac_addr[4] = (value >> 0) & 0xff; + mac_addr[5] = (value >> 8) & 0xff; break; default: break; @@ -7316,7 +7325,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) = {}; + u8 mac_addr[ETH_ALEN] = {}; struct rtl8169_private *tp; struct net_device *dev; int chipset, region, i;