Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp573000pxf; Wed, 7 Apr 2021 06:45:57 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxcu0CJVLSY9cmLaFkvbdZ9UV7YEfXBvOVCKMDC19FvZovxz3fY6p5v/EH3oq38FKetd9lx X-Received: by 2002:a92:340e:: with SMTP id b14mr2863087ila.285.1617803157675; Wed, 07 Apr 2021 06:45:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1617803157; cv=none; d=google.com; s=arc-20160816; b=wved/ota3eIdugl6SfGcAcuQYWdIZb0Ze4ZHPIc0PnT1XLKu6Wr0+buix1vwZ19JeW R/NnhJunVgSd13sgLN0Tp2TW23tfC7zlaGroBkFXPI3eujADNMWsyepUSqvBujR92Jes Rbgou+WmfA39CRWrV0qhyeCt6bXVkqAxbWV1yW73pCrHg43QXbtO5ZX2kJzSwrF02RMO FioGsNOzmQjjkvMGlae6OPgAPCwVFGN7u8b/TeIhTIkAcusCnqLOkLcNjdTKURUyTqo3 xBw2qFFoxc0Gp9/aXiUsvGSbjXU6MTcehooKGrpnNKQX4saWOlqEwwe08k0tBUWEuRux cnmA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=eu5NoqJ+3mWtDQgatlKALo34xrKx6es+5serabIswIw=; b=T2ymWAXfM9wTDwwiia4b/c1uc15DImxTED1oGsGm2A/ePXIJ0ccuP4XeVm0ZWo/GLr eRuVq1hotnr0S5fLHgaltB2F6mXi/cxj3nBh9DpWj6i/cD/hp8DP2v9AWetAz+yAXkAN Zj6I7yZmCWmpn9pPsiagC/JIHAYKQz5w1EjKJWJeICjbDrjk0DaPd0llRjCw6qLscuyy phSXcRkFWCr5xCGGKNGZ5zFtgxhneI1e7tL6UmGxgMea0pC8mFUddr4G+6+4obW3AQnk eTEpS/YlzU6zSsmpoZh0BuMdMxO9FcsKLvmEs59nAhQukWS1eQIil3FNgRHjfPk7X0Mk tQ8w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=pRLlQVTS; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id j3si20903648iow.35.2021.04.07.06.45.43; Wed, 07 Apr 2021 06:45:57 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=pRLlQVTS; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234745AbhDGBNi (ORCPT + 99 others); Tue, 6 Apr 2021 21:13:38 -0400 Received: from mail.kernel.org ([198.145.29.99]:51522 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229612AbhDGBNh (ORCPT ); Tue, 6 Apr 2021 21:13:37 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 96BD5613C4; Wed, 7 Apr 2021 01:13:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1617758008; bh=4wmgtd3m+Ta1X4jkV88q8R8S6J8R9xiITuF0Yr6xVvE=; h=References:In-Reply-To:From:Date:Subject:To:Cc:From; b=pRLlQVTSNNqQq6FWgIz2B7IVJb0WD4DcmH/q1OoNuEMrYaWQrNUQZE+TGHQqvO7uZ 0sbEWPuyB8HyaAmOyOmuJUzxCmp1p115y8GLeeHMULg8c7AuvfXjx5Z564IDbK8lJq gmbN4+vm5P6n1CiJ0TfpP9EWDKvzUd31Ix6pvdON87LVzboxcqirc6EFlZYA+M4j8G jHfCtKJ3iJFDoh1b09Poyvm8SAkLWUaz66KIw278EYEG9sTTsgo5EgmZQ4PmQnu3Wd /7t4s6bK6dnu7hbZeox3JOJGIH6WZmQ5XIo2AS7KlPr83ACsPhjvDPLHQqqdmOaGvc LBaAPBKO1awEA== Received: by mail-ej1-f52.google.com with SMTP id n2so18613159ejy.7; Tue, 06 Apr 2021 18:13:28 -0700 (PDT) X-Gm-Message-State: AOAM533YnDaot013beTdGHT2EJJKb9olBZ/IgK/ViKzJymm5cml8JSmO J/yoS2/ORwvBWB7zWBhZRT8+yg7Pu5adv2GpWA== X-Received: by 2002:a17:906:1984:: with SMTP id g4mr847605ejd.525.1617758006930; Tue, 06 Apr 2021 18:13:26 -0700 (PDT) MIME-Version: 1.0 References: <20210405164643.21130-1-michael@walle.cc> <20210405164643.21130-3-michael@walle.cc> In-Reply-To: <20210405164643.21130-3-michael@walle.cc> From: Rob Herring Date: Tue, 6 Apr 2021 20:13:15 -0500 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH 2/2] of: net: fix of_get_mac_addr_nvmem() for PCI and DSA nodes To: Michael Walle Cc: QCA ath9k Development , Microchip Linux Driver Support , linux-arm-kernel , "linux-kernel@vger.kernel.org" , linuxppc-dev , netdev , "moderated list:ARM/Mediatek SoC support" , "open list:MEDIA DRIVERS FOR RENESAS - FCP" , "moderated list:ARM/STM32 ARCHITECTURE" , "open list:ARM/Amlogic Meson..." , linux-oxnas@groups.io, linux-omap , linux-wireless , devicetree@vger.kernel.org, linux-staging@lists.linux.dev, Andrew Lunn , Gregory Clement , Sebastian Hesselbarth , Russell King , Michael Ellerman , Benjamin Herrenschmidt , Paul Mackerras , Andreas Larsson , "David S . Miller" , Jakub Kicinski , Maxime Ripard , Chen-Yu Tsai , Jernej Skrabec , Joyce Ooi , Chris Snook , =?UTF-8?B?UmFmYcWCIE1pxYJlY2tp?= , "maintainer:BROADCOM BCM7XXX ARM ARCHITECTURE" , Florian Fainelli , Nicolas Ferre , Claudiu Beznea , Sunil Goutham , Fugang Duan , Madalin Bucur , Pantelis Antoniou , Claudiu Manoil , Li Yang , Yisen Zhuang , Salil Mehta , Hauke Mehrtens , Thomas Petazzoni , Vadym Kochan , Taras Chornyi , Mirko Lindner , Stephen Hemminger , Felix Fietkau , John Crispin , Sean Wang , Mark Lee , Matthias Brugger , Bryan Whitehead , Vladimir Zapolskiy , Sergei Shtylyov , Byungho An , Kunihiko Hayashi , Giuseppe Cavallaro , Alexandre Torgue , Jose Abreu , Maxime Coquelin , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , NXP Linux Team , Kevin Hilman , Neil Armstrong , Jerome Brunet , Martin Blumenstingl , Vinod Koul , Nobuhiro Iwamatsu , Grygorii Strashko , Wingman Kwok , Murali Karicheri , Michal Simek , Radhey Shyam Pandey , Kalle Valo , Lorenzo Bianconi , Ryder Lee , Stanislaw Gruszka , Helmut Schaa , Heiner Kallweit , Frank Rowand , Greg Kroah-Hartman , =?UTF-8?B?SsOpcsO0bWUgUG91aWxsZXI=?= , Vivien Didelot , Vladimir Oltean Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org On Mon, Apr 5, 2021 at 11:47 AM Michael Walle wrote: > > of_get_mac_address() already supports fetching the MAC address by an > nvmem provider. But until now, it was just working for platform devices. > Esp. it was not working for DSA ports and PCI devices. It gets more > common that PCI devices have a device tree binding since SoCs contain > integrated root complexes. > > Use the nvmem of_* binding to fetch the nvmem cells by a struct > device_node. We still have to try to read the cell by device first > because there might be a nvmem_cell_lookup associated with that device. > > Signed-off-by: Michael Walle > --- > Please note, that I've kept the nvmem_get_mac_address() which operates > on a device. The new of_get_mac_addr_nvmem() is almost identical and > there are no users of the former function right now, but it seems to be > the "newer" version to get the MAC address for a "struct device". Thus > I've kept it. Please advise, if I should kill it though. It seems kind of backwards from how we normally design this type of API where the API with a struct device will call a firmware specific version if there's a firmware handle. But certainly, I don't think we should be operating on platform device if we can help it. > drivers/of/of_net.c | 37 +++++++++++++++++++++++++++++++------ > 1 file changed, 31 insertions(+), 6 deletions(-) > > diff --git a/drivers/of/of_net.c b/drivers/of/of_net.c > index 2344ad7fff5e..2323c6063eaf 100644 > --- a/drivers/of/of_net.c > +++ b/drivers/of/of_net.c > @@ -11,6 +11,7 @@ > #include > #include > #include > +#include > > /** > * of_get_phy_mode - Get phy mode for given device_node > @@ -56,18 +57,42 @@ static int of_get_mac_addr(struct device_node *np, const char *name, u8 *addr) > return -ENODEV; > } > > -static int of_get_mac_addr_nvmem(struct device_node *np, u8 addr) > +static int of_get_mac_addr_nvmem(struct device_node *np, u8 *addr) > { > struct platform_device *pdev = of_find_device_by_node(np); > + struct nvmem_cell *cell; > + const void *mac; > + size_t len; > int ret; > > - if (!pdev) > - return -ENODEV; > + /* Try lookup by device first, there might be a nvmem_cell_lookup > + * associated with a given device. > + */ > + if (pdev) { > + ret = nvmem_get_mac_address(&pdev->dev, addr); > + put_device(&pdev->dev); > + return ret; > + } > + > + cell = of_nvmem_cell_get(np, "mac-address"); > + if (IS_ERR(cell)) > + return PTR_ERR(cell); > + > + mac = nvmem_cell_read(cell, &len); > + nvmem_cell_put(cell); > + > + if (IS_ERR(mac)) > + return PTR_ERR(mac); > + > + if (len != ETH_ALEN || !is_valid_ether_addr(mac)) { > + kfree(mac); > + return -EINVAL; > + } > > - ret = nvmem_get_mac_address(&pdev->dev, addr); > - put_device(&pdev->dev); > + ether_addr_copy(addr, mac); > + kfree(mac); > > - return ret; > + return 0; > } > > /** > -- > 2.20.1 >