Received: by 10.223.164.202 with SMTP id h10csp843710wrb; Thu, 9 Nov 2017 15:40:48 -0800 (PST) X-Google-Smtp-Source: ABhQp+SO81dorORz03JDikT/NDEc6eakmfnnXN2tbsL9oyk2dGRXZPrZG/DoRlH7eE0yKqrY8M2F X-Received: by 10.84.136.135 with SMTP id 7mr2096574pll.392.1510270848096; Thu, 09 Nov 2017 15:40:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1510270848; cv=none; d=google.com; s=arc-20160816; b=ZzdkdfnVqc3oDewRdMHJhbnHxMYddjAWAbLcGnpj6XcycMEwA3fdwiE+A1A/+lh/Ez /WGQCOzFNkObbiVWFvhTAp7BjrCs3i1XxgyGDZDosZ06d2a+u74g+z0lpmet6zScwyAJ Yptb/upJcxqKc3liCBjNo7aQdTpniS1Hi80M4z8SQHfzpb7m+nFMBwZjmxLfZaLLv9ZB 0/Uty0AGUV++R6itPrzAE/TTmptbYVHUlZjLRAYfqM+aG3K86ZApulGgSk6Sv7LWjHEx fdep7xdfAlY3smIr6r8HPrzpPiEWQNc6H+Qeo7AmEaQxfVu+pqBxG0yM2kp5GeHVsRcn pU5g== 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=5Y62vNhQTrrOsySz5r4Q3m6LGuCqqg/mJNshvOXMoUM=; b=kYrQiosj6gSdogWPMsLTkqIiitKiDtaP8/tZP02qLR7emBT4+fmf4byNR4YzYox0Xv qw2LdPtHWuS60uNDtEvTj0vlrrdY8md1Jd0Tl0Xo6OqlkcRuaKVVcfe/lEHWr/nDbcq5 VUHGnwTU6vS3V879yuMcqGoEC+onnU3LTx/FfAxVDB0XsLuafG5oTYrT4j3Ie4fAXcj/ PVidhfJ/JXafI7WmWBKFegd0cJNr2MgejaMI0WPPf8tjX9FUMowyPqvCXPRgrWMWqncM IN7MJjynot50KNUHfh7G/0aGSrORwTvUNN9903BSrA8KaXhWtKWU2zpeqi1vlfpFv2/Z qHlA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=EtZ0nRCD; 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=NONE 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 g76si7752351pfj.324.2017.11.09.15.40.36; Thu, 09 Nov 2017 15:40:48 -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=EtZ0nRCD; 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=NONE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755362AbdKIXi6 (ORCPT + 83 others); Thu, 9 Nov 2017 18:38:58 -0500 Received: from mail-wm0-f68.google.com ([74.125.82.68]:54606 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755324AbdKIXix (ORCPT ); Thu, 9 Nov 2017 18:38:53 -0500 Received: by mail-wm0-f68.google.com with SMTP id r68so20951049wmr.3; Thu, 09 Nov 2017 15:38:52 -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=5Y62vNhQTrrOsySz5r4Q3m6LGuCqqg/mJNshvOXMoUM=; b=EtZ0nRCDjrM6cXlQ2dC+SHT84qUAEmilq1cwuF+MGbpjUU1xrlF4MhaGOBV4Gi7iDa X7OHRizvFnTCV9TLuJuxiqAJiUShocd/8OjqVvQIaYvDyh1WV95mXIcIFsXEh8dOycgl 8ydhTaMscRmqLf1XOsont53+YDbXbOn4julPNNsSfp5O+4xiUGXAMS6LtdTJwtfQ4x2v c3dGissjhgH0sXlYa+TP64sD0+r5742rO/XAKZnOW6PrU4u5u9oq9jSvcHfUVnWfjSz4 wnq2D8Ad7S8yQjP6SF1fguhdV/O5i7D1lBdgPXoh2s5ssDuOPWD1qUcs0/mO82iMSD22 o1Hw== 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=5Y62vNhQTrrOsySz5r4Q3m6LGuCqqg/mJNshvOXMoUM=; b=VcYowR6lCgIRofx9Aes63Sj9KN5W8nleai32Ss6aIOR2rvsEVGCF+dWzyD4gk/Sh/k cAdA8ogKWlhszWULFtpYouP6u01VSmTK7lbfOXS7vQ7qB3CuzNz9kXJyZ+DiklzojH6Q 7tb87jvEHZ2T+IJqbcdTuiIFJCQSIzeXU9TW2GUAMSDdg5/4JwyQFlLg+z0b2MZfIPdw xviSp0x9XwQ2M+oqL24Au7Lf0BQ+/pnvjVx3a2gkm1l2VxfOaWxHJggYRCSTj7/20sPu 4roj+Ss/zCCocYT9cw9HtkaGvmdpoAnnHVML+3kl8Rbi7Imu8obJOUWQoabQ28ai+tBB vW0w== X-Gm-Message-State: AJaThX5bE3QyXkEfOfSFpikrwE8LIlHYMnx2j2xEOD4EXDj8HkAI4xZb ql1EyibO/vobsa1seEYcUIg= X-Received: by 10.28.33.136 with SMTP id h130mr992185wmh.151.1510270731828; Thu, 09 Nov 2017 15:38:51 -0800 (PST) Received: from Pali-Latitude.lan (pali.kolej.mff.cuni.cz. [78.128.193.202]) by smtp.gmail.com with ESMTPSA id 55sm9578181wrw.60.2017.11.09.15.38.50 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 09 Nov 2017 15:38:51 -0800 (PST) From: =?UTF-8?q?Pali=20Roh=C3=A1r?= To: Ming Lei , "Luis R. Rodriguez" , Greg Kroah-Hartman , Kalle Valo , David Gnedt , Michal Kazior , Daniel Wagner , Tony Lindgren , Sebastian Reichel , Pavel Machek , Ivaylo Dimitrov , Aaro Koskinen , Grazvydas Ignotas Cc: linux-kernel@vger.kernel.org, linux-wireless@vger.kernel.org, netdev@vger.kernel.org, =?UTF-8?q?Pali=20Roh=C3=A1r?= Subject: [PATCH v2 3/6] wl1251: Parse and use MAC address from supplied NVS data Date: Fri, 10 Nov 2017 00:38:25 +0100 Message-Id: <1510270708-14377-4-git-send-email-pali.rohar@gmail.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1510270708-14377-1-git-send-email-pali.rohar@gmail.com> References: <1482598381-16513-1-git-send-email-pali.rohar@gmail.com> <1510270708-14377-1-git-send-email-pali.rohar@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch implements parsing MAC address from NVS data which are sent to wl1251 chip. Calibration NVS data could contain valid MAC address and it will be used instead of randomly generated one. This patch also moves code for requesting NVS data from userspace to driver initialization code to make sure that NVS data will be there at time when permanent MAC address is needed. Calibration NVS data for wl1251 are device specific. Every device with wl1251 chip should have been calibrated in factory and needs to provide own calibration data. Default example file wl1251-nvs.bin, found in linux-firmware repository, contains MAC address 00:00:20:07:03:09. So this MAC address is marked as invalid as it is not real device specific address, just example one. Format of calibration NVS data can be found at: http://notaz.gp2x.de/misc/pnd/wl1251/nvs_map.txt Signed-off-by: Pali Rohár --- drivers/net/wireless/ti/wl1251/main.c | 55 ++++++++++++++++++++++++++++----- 1 file changed, 47 insertions(+), 8 deletions(-) diff --git a/drivers/net/wireless/ti/wl1251/main.c b/drivers/net/wireless/ti/wl1251/main.c index 9106c20..d497ba5 100644 --- a/drivers/net/wireless/ti/wl1251/main.c +++ b/drivers/net/wireless/ti/wl1251/main.c @@ -203,13 +203,6 @@ static int wl1251_chip_wakeup(struct wl1251 *wl) goto out; } - if (wl->nvs == NULL && !wl->use_eeprom) { - /* No NVS from netlink, try to get it from the filesystem */ - ret = wl1251_fetch_nvs(wl); - if (ret < 0) - goto out; - } - out: return ret; } @@ -1448,6 +1441,46 @@ static int wl1251_read_eeprom_mac(struct wl1251 *wl) return 0; } +#define NVS_OFF_MAC_LEN 0x19 +#define NVS_OFF_MAC_ADDR_LO 0x1a +#define NVS_OFF_MAC_ADDR_HI 0x1b +#define NVS_OFF_MAC_DATA 0x1c + +static int wl1251_check_nvs_mac(struct wl1251 *wl) +{ + if (wl->nvs_len < 0x24) + return -ENODATA; + + /* length is 2 and data address is 0x546c (ANDed with 0xfffe) */ + if (wl->nvs[NVS_OFF_MAC_LEN] != 2 || + wl->nvs[NVS_OFF_MAC_ADDR_LO] != 0x6d || + wl->nvs[NVS_OFF_MAC_ADDR_HI] != 0x54) + return -EINVAL; + + return 0; +} + +static int wl1251_read_nvs_mac(struct wl1251 *wl) +{ + u8 mac[ETH_ALEN]; + int i, ret; + + ret = wl1251_check_nvs_mac(wl); + if (ret) + return ret; + + /* MAC is stored in reverse order */ + for (i = 0; i < ETH_ALEN; i++) + mac[i] = wl->nvs[NVS_OFF_MAC_DATA + ETH_ALEN - i - 1]; + + /* 00:00:20:07:03:09 is in example file wl1251-nvs.bin, so invalid */ + if (ether_addr_equal_unaligned(mac, "\x00\x00\x20\x07\x03\x09")) + return -EINVAL; + + memcpy(wl->mac_addr, mac, ETH_ALEN); + return 0; +} + static int wl1251_register_hw(struct wl1251 *wl) { int ret; @@ -1491,10 +1524,16 @@ int wl1251_init_ieee80211(struct wl1251 *wl) wl->hw->queues = 4; + if (wl->nvs == NULL && !wl->use_eeprom) { + ret = wl1251_fetch_nvs(wl); + if (ret < 0) + goto out; + } + if (wl->use_eeprom) ret = wl1251_read_eeprom_mac(wl); else - ret = -EINVAL; + ret = wl1251_read_nvs_mac(wl); if (ret == 0 && !is_valid_ether_addr(wl->mac_addr)) ret = -EINVAL; -- 1.7.9.5 From 1585316890852053809@xxx Tue Nov 28 13:33:22 +0000 2017 X-GM-THRID: 1585267426933007486 X-Gmail-Labels: Inbox,Category Forums,HistoricalUnread