Received: by 2002:ac0:8845:0:0:0:0:0 with SMTP id g63csp656400img; Thu, 28 Feb 2019 05:53:34 -0800 (PST) X-Google-Smtp-Source: AHgI3Ib8SFWAyBkyIzdLvm0tiAllWhwrT/Y9OH2f7aI1M38A9cJBDwh94bS0/V12zBJ17w07m0TL X-Received: by 2002:a17:902:59c3:: with SMTP id d3mr8166832plj.214.1551362013944; Thu, 28 Feb 2019 05:53:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1551362013; cv=none; d=google.com; s=arc-20160816; b=ghx+DY5fpO1bBy+aHkAfoixVRqWxI1XuVDfJUP5C15///gyl/zn6ck2/M1wVrT6dGG +qv35sQEMw5kdP6TdRMNzfSKoFqEy2ir/chxgCeuLepoq7paIHcWpWzwU4GDZ1Nkrj51 MamqpwcA2/yhRmw//+XYwN4UV2B4uFCnjyVD1UuIcE2lNshYAI85GEGzeWdbVSaL1onZ oc8OehDWMBZ+ueAQpGhIRZtLiVI/VgsTDmdkCZFawFg27QMLmwUxOJLKUjyruN6r/Jne 3EFVK5k+FRC8xGZx1Ywoo4x5DPZ9fHBqWzXUpWcC1j0X6PWTWyhLPc8/A69/PiBoyZgs +EvA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=U39qjm1T+MqhEeDOCfHe1SPSxuUAA8lHGusW6zr6SIo=; b=OjoIQzwvquBz7DroeaONl6i9j6WAJV/uGE5DPiZVKbVELHYqUX6zxuwgdK4ZGdmJ5J L6aE64QSFP2xHOQxofxfyzV3OV8EeavoJqnS3G2PYVitZPAlADRxd7kZIlLLwhCdXFPV QYWT9SQo8n2hA0c6xDUdcToIyfeIgQzyGKkVHWON62R7eLZ5NloK7oRNRyyKIbIGX5f3 U0r3BvdWAfvpzO8UnXJWWmc7OBe5iPhrR+9YeOXgNTkD3muDLZE7P/bf6STmAcGJ/dpZ DBwelEJ6YsmuA1ZYl2VcI4j/c+9Y6bo/uI9QmhZJAyJ03nArv+w72wQ6WGvGPrh3Ni+J XpcQ== ARC-Authentication-Results: i=1; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k185si17505629pge.2.2019.02.28.05.53.18; Thu, 28 Feb 2019 05:53:33 -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 S1731450AbfB1Nwj (ORCPT + 99 others); Thu, 28 Feb 2019 08:52:39 -0500 Received: from smtp.asem.it ([151.1.184.197]:49741 "EHLO smtp.asem.it" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726003AbfB1Nwi (ORCPT ); Thu, 28 Feb 2019 08:52:38 -0500 Received: from webmail.asem.it by asem.it (smtp.asem.it) (SecurityGateway 5.5.0) with ESMTP id SG003723177.MSG for ; Thu, 28 Feb 2019 14:52:33 +0100S Received: from ASAS044.asem.intra (172.16.16.44) by ASAS044.asem.intra (172.16.16.44) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1261.35; Thu, 28 Feb 2019 14:52:32 +0100 Received: from flavio-x.asem.intra (172.16.17.161) by ASAS044.asem.intra (172.16.16.44) with Microsoft SMTP Server id 15.1.1261.35 via Frontend Transport; Thu, 28 Feb 2019 14:52:32 +0100 From: Flavio Suligoi To: Jeff Kirsher , "David S . Miller" , , , CC: Flavio Suligoi Subject: [PATCH v3] net: e1000e: add MAC address kernel cmd line parameter Date: Thu, 28 Feb 2019 14:52:31 +0100 Message-ID: <1551361951-1595-1-git-send-email-f.suligoi@asem.it> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1551361135-404-1-git-send-email-f.suligoi@asem.it> References: <1551361135-404-1-git-send-email-f.suligoi@asem.it> MIME-Version: 1.0 Content-Type: text/plain X-SGHeloLookup-Result: pass smtp.helo=webmail.asem.it (ip=172.16.16.44) X-SGSPF-Result: none (smtp.asem.it) X-SGOP-RefID: str=0001.0A0B0208.5C77E7A1.0031,ss=1,re=0.000,recu=0.000,reip=0.000,cl=1,cld=1,fgs=0 (_st=1 _vt=0 _iwf=0) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Sometimes, in some embedded systems boards (i.e. ARM boards), the NVM eeprom is not mounted, to save cost and space. In this case it is necessary to bypass the NVM management and directly force the MAC address using a kernel command-line parameter (macaddr). Signed-off-by: Flavio Suligoi --- v3: - move patch changelog in the right place v2: - e1000_probe: remove wrong newline in the middle of the local variable list v1: - written drivers/net/ethernet/intel/e1000e/netdev.c | 49 +++++++++++++++++++----------- 1 file changed, 32 insertions(+), 17 deletions(-) diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c index 189f231..34ab560 100644 --- a/drivers/net/ethernet/intel/e1000e/netdev.c +++ b/drivers/net/ethernet/intel/e1000e/netdev.c @@ -39,6 +39,10 @@ static int debug = -1; module_param(debug, int, 0); MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)"); +static unsigned char macaddr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; +module_param_array(macaddr, byte, NULL, 0); +MODULE_PARM_DESC(macaddr, "e1000e Ethernet MAC address"); + static const struct e1000_info *e1000_info_tbl[] = { [board_82571] = &e1000_82571_info, [board_82572] = &e1000_82572_info, @@ -7232,27 +7236,38 @@ static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent) */ adapter->hw.mac.ops.reset_hw(&adapter->hw); - /* systems with ASPM and others may see the checksum fail on the first - * attempt. Let's give it a few tries - */ - for (i = 0;; i++) { - if (e1000_validate_nvm_checksum(&adapter->hw) >= 0) - break; - if (i == 2) { - dev_err(&pdev->dev, "The NVM Checksum Is Not Valid\n"); - err = -EIO; - goto err_eeprom; + /* If the MAC address is supplied by the bootloader, use it! */ + if (!is_multicast_ether_addr(macaddr)) { + dev_info(&pdev->dev, + "MAC address from kernel command line argument\n"); + memcpy(adapter->hw.mac.addr, macaddr, netdev->addr_len); + memcpy(netdev->dev_addr, macaddr, netdev->addr_len); + } else { + /* systems with ASPM and others may see the checksum fail on + * the first attempt. Let's give it a few tries + */ + dev_info(&pdev->dev, "MAC address from NVM\n"); + for (i = 0;; i++) { + if (e1000_validate_nvm_checksum(&adapter->hw) >= 0) + break; + if (i == 2) { + dev_err(&pdev->dev, + "The NVM Checksum Is Not Valid\n"); + err = -EIO; + goto err_eeprom; + } } - } - e1000_eeprom_checks(adapter); + e1000_eeprom_checks(adapter); - /* copy the MAC address */ - if (e1000e_read_mac_addr(&adapter->hw)) - dev_err(&pdev->dev, - "NVM Read Error while reading MAC address\n"); + /* copy the MAC address */ + if (e1000e_read_mac_addr(&adapter->hw)) + dev_err(&pdev->dev, + "NVM Read Error while reading MAC address\n"); - memcpy(netdev->dev_addr, adapter->hw.mac.addr, netdev->addr_len); + 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: %pM\n", -- 2.7.4