From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [net-next,07/19] net: usb: aqc111: Add support for getting and setting of MAC address From: Andrew Lunn Message-Id: <20181006010346.GA32455@lunn.ch> Date: Sat, 6 Oct 2018 03:03:46 +0200 To: Igor Russkikh Cc: "David S . Miller" , "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Dmitry Bezrukov List-ID: T24gRnJpLCBPY3QgMDUsIDIwMTggYXQgMTA6MjQ6NThBTSArMDAwMCwgSWdvciBSdXNza2lraCB3 cm90ZToKPiBGcm9tOiBEbWl0cnkgQmV6cnVrb3YgPGRtaXRyeS5iZXpydWtvdkBhcXVhbnRpYS5j b20+Cj4gCj4gU2lnbmVkLW9mZi1ieTogRG1pdHJ5IEJlenJ1a292IDxkbWl0cnkuYmV6cnVrb3ZA YXF1YW50aWEuY29tPgo+IFNpZ25lZC1vZmYtYnk6IElnb3IgUnVzc2tpa2ggPGlnb3IucnVzc2tp a2hAYXF1YW50aWEuY29tPgo+IC0tLQo+ICBkcml2ZXJzL25ldC91c2IvYXFjMTExLmMgfCA1MSAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgZHJpdmVy cy9uZXQvdXNiL2FxYzExMS5oIHwgIDEgKwo+ICAyIGZpbGVzIGNoYW5nZWQsIDUyIGluc2VydGlv bnMoKykKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jIGIvZHJpdmVy cy9uZXQvdXNiL2FxYzExMS5jCj4gaW5kZXggMWQzNjZmNGExYzUxLi4wNzVmNTFjZDA0YWIgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9uZXQvdXNiL2FxYzExMS5jCj4gKysrIGIvZHJpdmVycy9uZXQv dXNiL2FxYzExMS5jCj4gQEAgLTExLDYgKzExLDcgQEAKPiAgI2luY2x1ZGUgPGxpbnV4L25ldGRl dmljZS5oPgo+ICAjaW5jbHVkZSA8bGludXgvbWlpLmg+Cj4gICNpbmNsdWRlIDxsaW51eC91c2Iu aD4KPiArI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KPiAgI2luY2x1ZGUgPGxpbnV4L3VzYi9j ZGMuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L3VzYi91c2JuZXQuaD4KPiAgCj4gQEAgLTI2NiwxMSAr MjY3LDQ2IEBAIHN0YXRpYyB2b2lkIGFxYzExMV9zZXRfcGh5X3NwZWVkKHN0cnVjdCB1c2JuZXQg KmRldiwgdTggYXV0b25lZywgdTE2IHNwZWVkKQo+ICAJCWFxYzExMV9zZXRfcGh5X3NwZWVkX2Z3 X2lmYWNlKGRldiwgYXFjMTExX2RhdGEpOwo+ICB9Cj4gIAo+ICtzdGF0aWMgaW50IGFxYzExMV9z ZXRfbWFjX2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgdm9pZCAqcCkKPiArewo+ICsJc3Ry dWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKPiArCXN0cnVjdCBzb2NrYWRkciAq YWRkciA9IHA7Cj4gKwo+ICsJaWYgKG5ldGlmX3J1bm5pbmcobmV0KSkKPiArCQlyZXR1cm4gLUVC VVNZOwo+ICsJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHItPnNhX2RhdGEpKQo+ICsJCXJl dHVybiAtRUFERFJOT1RBVkFJTDsKCkl0IGlzIHByb2JhYmx5IGJldHRlciB0byB1c2UgZXRoX21h Y19hZGRyKCkuCgo+ICsKPiArCW1lbWNweShuZXQtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBF VEhfQUxFTik7Cj4gKwo+ICsJLyogU2V0IHRoZSBNQUMgYWRkcmVzcyAqLwo+ICsJcmV0dXJuIGFx YzExMV93cml0ZV9jbWQoZGV2LCBBUV9BQ0NFU1NfTUFDLCBTRlJfTk9ERV9JRCwgRVRIX0FMRU4s Cj4gKwkJCQlFVEhfQUxFTiwgbmV0LT5kZXZfYWRkcik7Cj4gK30KPiArCj4gIHN0YXRpYyBjb25z dCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgYXFjMTExX25ldGRldl9vcHMgPSB7Cj4gIAkubmRvX29w ZW4JCT0gdXNibmV0X29wZW4sCj4gIAkubmRvX3N0b3AJCT0gdXNibmV0X3N0b3AsCj4gKwkubmRv X3NldF9tYWNfYWRkcmVzcwk9IGFxYzExMV9zZXRfbWFjX2FkZHIsCj4gKwkubmRvX3ZhbGlkYXRl X2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKPiAgfTsKPiAgCj4gK3N0YXRpYyBpbnQgYXFjMTEx X2dldF9tYWMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCAqYnVmKQo+ICt7Cj4gKwlpbnQgcmV0Owo+ ICsKPiArCXJldCA9IGFxYzExMV9yZWFkX2NtZChkZXYsIEFRX0ZMQVNIX1BBUkFNRVRFUlMsIDAs IDAsIDYsIGJ1Zik7CgpFVEhfQUxFTiBpbnN0ZWFkIG9mIDY/Cgo+ICsJaWYgKHJldCA8IDApCj4g KwkJZ290byBvdXQ7Cj4gKwo+ICsJbWVtY3B5KGRldi0+bmV0LT5kZXZfYWRkciwgYnVmLCBFVEhf QUxFTik7Cj4gKwltZW1jcHkoZGV2LT5uZXQtPnBlcm1fYWRkciwgZGV2LT5uZXQtPmRldl9hZGRy LCBFVEhfQUxFTik7CgpJcyB0aGlzIHJlYWxseSB0aGUgcGVybWFuZW50IGFkZHJlc3M/IElmIGkg Y2FsbCBhcWMxMTFfc2V0X21hY19hZGRyKCkKZm9sbG93ZWQgYnkgYXFjMTExX2dldF9tYWMoKSBp IHN0aWxsIGdldCB3aGF0IGlzIGluIHRoZSBPVFAgRUVQUk9NPwoKICsKPiArCXJldHVybiAwOwo+ ICtvdXQ6Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICBzdGF0aWMgdm9pZCBhcWMxMTFfcmVh ZF9md192ZXJzaW9uKHN0cnVjdCB1c2JuZXQgKmRldiwKPiAgCQkJCSAgIHN0cnVjdCBhcWMxMTFf ZGF0YSAqYXFjMTExX2RhdGEpCj4gIHsKPiBAQCAtMjg5LDYgKzMyNSw3IEBAIHN0YXRpYyB2b2lk IGFxYzExMV9yZWFkX2Z3X3ZlcnNpb24oc3RydWN0IHVzYm5ldCAqZGV2LAo+ICAKPiAgc3RhdGlj IGludCBhcWMxMTFfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNl ICppbnRmKQo+ICB7Cj4gKwl1OCBidWZbNl0gPSB7IDAgfTsKCkVUSF9BTEVOCgo+ICAJaW50IHJl dDsKPiAgCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRm KTsKPiAgCXN0cnVjdCBhcWMxMTFfZGF0YSAqYXFjMTExX2RhdGE7Cj4gQEAgLTMxNiw2ICszNTMs MTIgQEAgc3RhdGljIGludCBhcWMxMTFfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1 c2JfaW50ZXJmYWNlICppbnRmKQo+ICAJZGV2LT5kYXRhWzBdID0gKHVuc2lnbmVkIGxvbmcpYXFj MTExX2RhdGE7Cj4gIAltZW1zZXQoYXFjMTExX2RhdGEsIDAsIHNpemVvZigqYXFjMTExX2RhdGEp KTsKPiAgCj4gKwkvKiBHZXQgdGhlIE1BQyBhZGRyZXNzICovCj4gKwltZW1zZXQoYnVmLCAwLCBF VEhfQUxFTik7CgpZb3UgaW5pdGlhbGl6ZWQgaXQgYWJvdmUgYXMgezB9LiBZb3UgZG9uJ3QgbmVl ZCB0byBtZW1zZXQgaXQgaGVyZS4KCj4gKwlyZXQgPSBhcWMxMTFfZ2V0X21hYyhkZXYsIGJ1Zik7 CgpEbyB5b3UgZXZlbiBuZWVkIHRvIHplcm8gaXQ/IElmIGFxYzExMV9nZXRfbWFjKCkgZmFpbHMs IGl0IHdpbGwgYmUKbGVmdCB1bmRlZmluZWQsIGJ1dCB5b3UgZmFpbCB0aGUgYmluZCBhbnl3YXku Cgo+ICsJaWYgKHJldCkKPiArCQlnb3RvIG91dDsKPiArCj4gIAlkZXYtPm5ldC0+bmV0ZGV2X29w cyA9ICZhcWMxMTFfbmV0ZGV2X29wczsKPiAgCj4gIAlhcWMxMTFfcmVhZF9md192ZXJzaW9uKGRl diwgYXFjMTExX2RhdGEpOwo+IEBAIC0zMjQsNiArMzY3LDEwIEBAIHN0YXRpYyBpbnQgYXFjMTEx X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKPiAg CQkJCQkgU1BFRURfNTAwMCA6IFNQRUVEXzEwMDA7Cj4gIAo+ICAJcmV0dXJuIDA7Cj4gKwo+ICtv dXQ6Cj4gKwlrZnJlZShhcWMxMTFfZGF0YSk7Cj4gKwlyZXR1cm4gcmV0Owo+ICB9CgogICBBbmRy ZXcK From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Lunn Subject: Re: [PATCH net-next 07/19] net: usb: aqc111: Add support for getting and setting of MAC address Date: Sat, 6 Oct 2018 03:03:46 +0200 Message-ID: <20181006010346.GA32455@lunn.ch> References: <9ab691fa129ceb7a8947fde6f307fbd855d085cf.1538734658.git.igor.russkikh@aquantia.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: "David S . Miller" , "linux-usb@vger.kernel.org" , "netdev@vger.kernel.org" , Dmitry Bezrukov To: Igor Russkikh Return-path: Received: from vps0.lunn.ch ([185.16.172.187]:55547 "EHLO vps0.lunn.ch" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726505AbeJFIFE (ORCPT ); Sat, 6 Oct 2018 04:05:04 -0400 Content-Disposition: inline In-Reply-To: <9ab691fa129ceb7a8947fde6f307fbd855d085cf.1538734658.git.igor.russkikh@aquantia.com> Sender: netdev-owner@vger.kernel.org List-ID: On Fri, Oct 05, 2018 at 10:24:58AM +0000, Igor Russkikh wrote: > From: Dmitry Bezrukov > > Signed-off-by: Dmitry Bezrukov > Signed-off-by: Igor Russkikh > --- > drivers/net/usb/aqc111.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++ > drivers/net/usb/aqc111.h | 1 + > 2 files changed, 52 insertions(+) > > diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c > index 1d366f4a1c51..075f51cd04ab 100644 > --- a/drivers/net/usb/aqc111.c > +++ b/drivers/net/usb/aqc111.c > @@ -11,6 +11,7 @@ > #include > #include > #include > +#include > #include > #include > > @@ -266,11 +267,46 @@ static void aqc111_set_phy_speed(struct usbnet *dev, u8 autoneg, u16 speed) > aqc111_set_phy_speed_fw_iface(dev, aqc111_data); > } > > +static int aqc111_set_mac_addr(struct net_device *net, void *p) > +{ > + struct usbnet *dev = netdev_priv(net); > + struct sockaddr *addr = p; > + > + if (netif_running(net)) > + return -EBUSY; > + if (!is_valid_ether_addr(addr->sa_data)) > + return -EADDRNOTAVAIL; It is probably better to use eth_mac_addr(). > + > + memcpy(net->dev_addr, addr->sa_data, ETH_ALEN); > + > + /* Set the MAC address */ > + return aqc111_write_cmd(dev, AQ_ACCESS_MAC, SFR_NODE_ID, ETH_ALEN, > + ETH_ALEN, net->dev_addr); > +} > + > static const struct net_device_ops aqc111_netdev_ops = { > .ndo_open = usbnet_open, > .ndo_stop = usbnet_stop, > + .ndo_set_mac_address = aqc111_set_mac_addr, > + .ndo_validate_addr = eth_validate_addr, > }; > > +static int aqc111_get_mac(struct usbnet *dev, u8 *buf) > +{ > + int ret; > + > + ret = aqc111_read_cmd(dev, AQ_FLASH_PARAMETERS, 0, 0, 6, buf); ETH_ALEN instead of 6? > + if (ret < 0) > + goto out; > + > + memcpy(dev->net->dev_addr, buf, ETH_ALEN); > + memcpy(dev->net->perm_addr, dev->net->dev_addr, ETH_ALEN); Is this really the permanent address? If i call aqc111_set_mac_addr() followed by aqc111_get_mac() i still get what is in the OTP EEPROM? + > + return 0; > +out: > + return ret; > +} > + > static void aqc111_read_fw_version(struct usbnet *dev, > struct aqc111_data *aqc111_data) > { > @@ -289,6 +325,7 @@ static void aqc111_read_fw_version(struct usbnet *dev, > > static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) > { > + u8 buf[6] = { 0 }; ETH_ALEN > int ret; > struct usb_device *udev = interface_to_usbdev(intf); > struct aqc111_data *aqc111_data; > @@ -316,6 +353,12 @@ static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) > dev->data[0] = (unsigned long)aqc111_data; > memset(aqc111_data, 0, sizeof(*aqc111_data)); > > + /* Get the MAC address */ > + memset(buf, 0, ETH_ALEN); You initialized it above as {0}. You don't need to memset it here. > + ret = aqc111_get_mac(dev, buf); Do you even need to zero it? If aqc111_get_mac() fails, it will be left undefined, but you fail the bind anyway. > + if (ret) > + goto out; > + > dev->net->netdev_ops = &aqc111_netdev_ops; > > aqc111_read_fw_version(dev, aqc111_data); > @@ -324,6 +367,10 @@ static int aqc111_bind(struct usbnet *dev, struct usb_interface *intf) > SPEED_5000 : SPEED_1000; > > return 0; > + > +out: > + kfree(aqc111_data); > + return ret; > } Andrew