Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp136402imm; Tue, 14 Aug 2018 15:39:46 -0700 (PDT) X-Google-Smtp-Source: AA+uWPy1qRsKplNr7jR2+pM+3AIa3dTQyi6Bo+mxDlehCg7vxLrcHUMnElhdjZbq6eOwp9dxzSd6 X-Received: by 2002:a63:5055:: with SMTP id q21-v6mr21965943pgl.397.1534286385451; Tue, 14 Aug 2018 15:39:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1534286385; cv=none; d=google.com; s=arc-20160816; b=ARd4XRBVDWFBDmtC1DAXJYzf7BOiR5Xcj5fup/ZhpcCkqbfJonXDM+3PQOb3t1gEfy 1tlb1aKFteskYNpF/Y4XGtLI7tkRVaFgI3Arqy+WyUWHLqB2n0VQxKgH7lqS/xRWLzug ytF5DAa4Vz3xGjCtb9kg9srVQ+AVD5uQBSpgItiCaxS8n/bBlggO8NCu7SKY7PhL2drk RPASoiqoWXTtVeunWjqvYbNtPwKQS+rqvc//lunu6BdciCkKbP8jDyuyuOzcQk9UJj+1 9p7qz80cTGH2yNwLeKLy0Hzn50qtFFVYh0U3ULRTn+i1o3h6fntRPV81FHqDmknwwDiH FuMA== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature:arc-authentication-results; bh=wcQbr2j1pyJOpkmzIkNsSWFBmaSgDunCscn2W3Awp2U=; b=EGLgrCUJcYuwJXqVPWW0J2u7nIBJoLKIVO2hBmaXFXbIaulA+t8m4rftpX5NqPvaRR BH2uoiU/KXRGVB/uI/2bbkcLeobM6L6+UY78UK9dfKf0ajX4Sl1PauwvpqKpwVHuDcRj 2ZECAH3t3S8GOMz/tpJnHEyVv05TxjfpixVDUoIrd3xVWpQ0kMZg5FkDhY6cCel6qwIH pCO+YouCpy1abfFpR5RS67djtCo+dj6SYhG0JpIX5g5AgGEARxk18I1XB9kwU+fDxhGb kiyLSF6U4XR5NYIBDRCWAjrhw3jsCPCGAEoK0jAzkpfqcIwJZ19G9t2eOLULZ/cfwbAd R58A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=LUIZ+x4N; 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 i13-v6si17772190pgq.426.2018.08.14.15.39.30; Tue, 14 Aug 2018 15:39:45 -0700 (PDT) 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=LUIZ+x4N; 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 S1732650AbeHOB1v (ORCPT + 99 others); Tue, 14 Aug 2018 21:27:51 -0400 Received: from mail-pf1-f195.google.com ([209.85.210.195]:44093 "EHLO mail-pf1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732605AbeHOB1t (ORCPT ); Tue, 14 Aug 2018 21:27:49 -0400 Received: by mail-pf1-f195.google.com with SMTP id k21-v6so9875269pff.11; Tue, 14 Aug 2018 15:38:30 -0700 (PDT) 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=wcQbr2j1pyJOpkmzIkNsSWFBmaSgDunCscn2W3Awp2U=; b=LUIZ+x4Ng06fZ9iowh6nM/cFI2mO50QTbS3Y5CYvVdnMbsTS0zn5TugBy/wqf4y6hR hsqh6d78znvNJaewVNRJX4r2osL4q95M/RKB5369g3pkFGyITSaaPImELCaqnlEP2d6N mdbq82Sbe/S0u3mIluQ44+Jfb8FvCbt9B/EDNHuRegxTdi8a8LFnESIzj4pJ+w/HnbyI GjD0G7yPrAAThE8shXj9YLx2Z9w16405TRc/5veW5sL18s3PFot0oYL/mz05yeRO1KAR X59mAZKPHD11HDcBo1UwhXp312Ey576jATRcWCNfhilymZIXgFTuavq1IDo5fBxdy9k+ yI4Q== 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=wcQbr2j1pyJOpkmzIkNsSWFBmaSgDunCscn2W3Awp2U=; b=IKb4pcn/JiFO/Jvi70a4pXYcC3Lvix/LYL292GNL/RlnlDOZZmT6nl3GKTyxQQYO2m /QN2IITZNCB90R6/aJMMtL/OuFStvO40TUCvKf9RfgVV1HAln+a+UMn0vrwWnBE1k4gE 9m0GRBDnFoIoRBUFuBiuXCDviovYck6CbZJDyO5qa+2FzNDHdbAiywzkPc4wQJ+Fzilf ToHv/uncjEJn5r5HiHbMs4VItF/IWX2qAaOq3nnWD1zBhujQ10ib2PCpvfBAU+Obc7VJ 6Qx5C/BD4BMjdeuXokZz5MRL3sb9zQEn+yOoozP0YWpIkLmMmgFVT1B2lPwcZcwVC2S7 wY9w== X-Gm-Message-State: AOUpUlHHEye2gfeorobatJ/x9CDWmf9zGD+ikryo1qmmzSvb/tHpWfA6 GTqxW32tiyBi6f8JSxbdjCs= X-Received: by 2002:a63:fa18:: with SMTP id y24-v6mr23040491pgh.362.1534286309834; Tue, 14 Aug 2018 15:38:29 -0700 (PDT) Received: from smtp.gmail.com ([2620:15c:202:1:299d:6b87:5478:d28a]) by smtp.gmail.com with ESMTPSA id e126-v6sm48420948pfg.31.2018.08.14.15.38.28 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 14 Aug 2018 15:38:28 -0700 (PDT) From: Brian Norris X-Google-Original-From: Brian Norris To: Rob Herring , Greg Kroah-Hartman , "Rafael J. Wysocki" Cc: Andrew Lunn , Florian Fainelli , Dmitry Torokhov , Guenter Roeck , netdev@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Julius Werner , Stephen Boyd , Brian Norris Subject: [RFC PATCH v1 3/3] firmware: vpd: add MAC address parser Date: Tue, 14 Aug 2018 15:37:58 -0700 Message-Id: <20180814223758.117433-4-briannorris@chromium.org> X-Mailer: git-send-email 2.18.0.865.gffc8e1a3cd6-goog In-Reply-To: <20180814223758.117433-1-briannorris@chromium.org> References: <20180814223758.117433-1-briannorris@chromium.org> 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 Device trees can now specify their MAC address via something like: mac-address-lookup = "vpd:wifi_mac0"; instead of requiring boot firmware to parse and splice the FDT itself. Signed-off-by: Brian Norris --- drivers/firmware/google/vpd.c | 67 +++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/drivers/firmware/google/vpd.c b/drivers/firmware/google/vpd.c index e9db895916c3..b2b08497db32 100644 --- a/drivers/firmware/google/vpd.c +++ b/drivers/firmware/google/vpd.c @@ -16,6 +16,7 @@ */ #include +#include #include #include #include @@ -24,6 +25,7 @@ #include #include #include +#include #include #include @@ -173,6 +175,36 @@ static ssize_t vpd_section_read(struct file *filp, struct kobject *kobp, sec->bin_attr.size); } +static const char *__vpd_get_entry(struct vpd_section *sec, const char *key) +{ + struct vpd_attrib_info *info; + + list_for_each_entry(info, &sec->attribs, list) + if (!strcmp(info->key, key)) + return info->value; + + return NULL; +} + +static const char *vpd_get_entry(const char *key) +{ + const char *value; + + if (rw_vpd.enabled) { + value = __vpd_get_entry(&rw_vpd, key); + if (value) + return value; + } + + if (ro_vpd.enabled) { + value = __vpd_get_entry(&ro_vpd, key); + if (value) + return value; + } + + return NULL; +} + static int vpd_section_create_attribs(struct vpd_section *sec) { s32 consumed; @@ -286,6 +318,37 @@ static int vpd_sections_init(phys_addr_t physaddr) return 0; } +/* + * 'key' is typically something like 'wifi_mac0' or 'ether_mac1'. Values are 12 + * character strings of MAC address digits, in hex. + */ +static int vpd_lookup_mac_address(const char *key, u8 *mac) +{ + const char *entry; + int ret; + + if (!key) + return -EINVAL; + + entry = vpd_get_entry(key); + if (!entry) + return -ENOENT; + + if (strlen(entry) != ETH_ALEN * 2) + return -EINVAL; + + ret = hex2bin(mac, entry, ETH_ALEN); + if (ret) + return ret; + + return 0; +} + +static struct device_mac_addr_provider vpd_mac_addr_provider = { + .prefix = "google-vpd", + .lookup = &vpd_lookup_mac_address, +}; + static int vpd_probe(struct coreboot_device *dev) { int ret; @@ -300,11 +363,15 @@ static int vpd_probe(struct coreboot_device *dev) return ret; } + device_register_mac_addr_provider(&vpd_mac_addr_provider); + return 0; } static int vpd_remove(struct coreboot_device *dev) { + device_unregister_mac_addr_provider(&vpd_mac_addr_provider); + vpd_section_destroy(&ro_vpd); vpd_section_destroy(&rw_vpd); -- 2.18.0.865.gffc8e1a3cd6-goog