mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Oleksij Rempel <o.rempel@pengutronix.de>
To: Sascha Hauer <s.hauer@pengutronix.de>
Cc: barebox@lists.infradead.org, Oleksij Rempel <linux@rempel-privat.de>
Subject: Re: [PATCH v2 1/3] MIPS: ath79: provide driver for Atheros ART partition
Date: Fri, 8 Jun 2018 09:23:24 +0200	[thread overview]
Message-ID: <20180608072324.mho6t4bzmoyiwxzu@pengutronix.de> (raw)
In-Reply-To: <20180608070804.j3tnrur5fsf2kuun@pengutronix.de>


[-- Attachment #1.1: Type: text/plain, Size: 5597 bytes --]

On Fri, Jun 08, 2018 at 09:08:04AM +0200, Sascha Hauer wrote:
> On Thu, Jun 07, 2018 at 09:55:50PM +0200, Oleksij Rempel wrote:
> > From: Oleksij Rempel <linux@rempel-privat.de>
> > 
> > this partition contains calibration data for WiFi and
> > some board specific data, like MAC address.
> > 
> > For now we care only about MAC.
> > 
> > Signed-off-by: Oleksij Rempel <linux@rempel-privat.de>
> > ---
> 
> Have you missed Lucas' answer to this patch?

Sorry forgot reflect it here:
there are different Atheros EEPROM formats. Some of them cover with CRC
complete image. Some of them only part of this image.
The EEPROM used on ar9331 (at least on my board) is covered only partially with CRC -
compressed baseband information, see http://web.mit.edu/freebsd/head/sys/contrib/dev/ath/ath_hal/ar9300/ar9300_eeprom.c
ar9300_compression_checksum()
the CRC check in ar9300_check_eeprom() is not enabled.

> Sascha
> 
> >  arch/mips/mach-ath79/Makefile |   1 +
> >  arch/mips/mach-ath79/art.c    | 112 ++++++++++++++++++++++++++++++++++
> >  2 files changed, 113 insertions(+)
> >  create mode 100644 arch/mips/mach-ath79/art.c
> > 
> > diff --git a/arch/mips/mach-ath79/Makefile b/arch/mips/mach-ath79/Makefile
> > index 3772daeba..b827b363c 100644
> > --- a/arch/mips/mach-ath79/Makefile
> > +++ b/arch/mips/mach-ath79/Makefile
> > @@ -1,2 +1,3 @@
> >  obj-y += reset.o
> >  obj-y += bbu.o
> > +obj-y += art.o
> > diff --git a/arch/mips/mach-ath79/art.c b/arch/mips/mach-ath79/art.c
> > new file mode 100644
> > index 000000000..984d08736
> > --- /dev/null
> > +++ b/arch/mips/mach-ath79/art.c
> > @@ -0,0 +1,112 @@
> > +// SPDX-License-Identifier: GPL-2.
> > +/*
> > + * Copyright (c) 2018 Oleksij Rempel <linux@rempel-privat.de>
> > + */
> > +
> > +#include <common.h>
> > +#include <fcntl.h>
> > +#include <init.h>
> > +#include <libfile.h>
> > +#include <net.h>
> > +#include <unistd.h>
> > +
> > +#define AR93000_EPPROM_OFFSET	0x1000
> > +
> > +struct ar9300_eeprom {
> > +	u8 eeprom_version;
> > +	u8 template_version;
> > +	u8 mac_addr[6];
> > +};
> > +
> > +static int art_set_mac(struct device_d *dev, struct ar9300_eeprom *eeprom)
> > +{
> > +	struct device_node *node = dev->device_node;
> > +	struct device_node *rnode;
> > +
> > +	if (!node)
> > +		return -ENOENT;
> > +
> > +	rnode = of_parse_phandle_from(node, NULL,
> > +				     "barebox,provide-mac-address", 0);
> > +	if (!rnode)
> > +		return -ENOENT;
> > +
> > +	of_eth_register_ethaddr(rnode, &eeprom->mac_addr[0]);
> > +
> > +	return 0;
> > +}
> > +
> > +static int art_read_mac(struct device_d *dev, const char *file)
> > +{
> > +	int fd, rbytes;
> > +	struct ar9300_eeprom eeprom;
> > +
> > +	fd = open_and_lseek(file, O_RDONLY, AR93000_EPPROM_OFFSET);
> > +	if (fd < 0) {
> > +		dev_err(dev, "Failed to open eeprom path %s %d\n",
> > +		       file, fd);
> > +		return fd;
> > +	}
> > +
> > +	rbytes = read_full(fd, &eeprom, sizeof(eeprom));
> > +	close(fd);
> > +	if (rbytes < sizeof(eeprom)) {
> > +		dev_err(dev, "Failed to read %s\n", file);
> > +		return rbytes < 0 ? rbytes : -EIO;
> > +	}
> > +
> > +	dev_dbg(dev, "ART version: %x.%x\n",
> > +		 eeprom.eeprom_version, eeprom.template_version);
> > +	dev_dbg(dev, "mac: %02x:%02x:%02x:%02x:%02x:%02x\n",
> > +	       eeprom.mac_addr[0],
> > +	       eeprom.mac_addr[1],
> > +	       eeprom.mac_addr[2],
> > +	       eeprom.mac_addr[3],
> > +	       eeprom.mac_addr[4],
> > +	       eeprom.mac_addr[5]);
> > +
> > +	if (!is_valid_ether_addr(&eeprom.mac_addr[0])) {
> > +		dev_err(dev, "bad MAC addr\n");
> > +		return -EILSEQ;
> > +	}
> > +
> > +	return art_set_mac(dev, &eeprom);
> > +}
> > +
> > +static int art_probe(struct device_d *dev)
> > +{
> > +	char *path;
> > +	int ret;
> > +
> > +	dev_dbg(dev, "found ART partition\n");
> > +
> > +	ret = of_find_path(dev->device_node, "device-path", &path, 0);
> > +	if (ret) {
> > +		dev_err(dev, "can't find path\n");
> > +		return ret;
> > +	}
> > +
> > +	return art_read_mac(dev, path);
> > +}
> > +
> > +static struct of_device_id art_dt_ids[] = {
> > +	{
> > +		.compatible = "qca,art",
> > +	}, {
> > +		/* sentinel */
> > +	}
> > +};
> > +
> > +static struct driver_d art_driver = {
> > +	.name		= "qca-art",
> > +	.probe		= art_probe,
> > +	.of_compatible	= art_dt_ids,
> > +};
> > +
> > +static int art_of_driver_init(void)
> > +{
> > +	platform_driver_register(&art_driver);
> > +
> > +	return 0;
> > +}
> > +late_initcall(art_of_driver_init);
> > -- 
> > 2.17.1
> > 
> > 
> > _______________________________________________
> > barebox mailing list
> > barebox@lists.infradead.org
> > http://lists.infradead.org/mailman/listinfo/barebox
> > 
> 
> -- 
> Pengutronix e.K.                           |                             |
> Industrial Linux Solutions                 | http://www.pengutronix.de/  |
> Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
> Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |
> 
> _______________________________________________
> barebox mailing list
> barebox@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox
> 

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

[-- Attachment #2: Type: text/plain, Size: 149 bytes --]

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

  reply	other threads:[~2018-06-08  7:23 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-07 19:55 Oleksij Rempel
2018-06-07 19:55 ` [PATCH v2 2/3] MIPS: dts: tl_wdr4300: add " Oleksij Rempel
2018-06-07 19:55 ` [PATCH v2 3/3] MIPS: dts: dpt-module: " Oleksij Rempel
2018-06-08  7:08 ` [PATCH v2 1/3] MIPS: ath79: provide driver for " Sascha Hauer
2018-06-08  7:23   ` Oleksij Rempel [this message]
2018-06-14  6:06 ` Sascha Hauer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180608072324.mho6t4bzmoyiwxzu@pengutronix.de \
    --to=o.rempel@pengutronix.de \
    --cc=barebox@lists.infradead.org \
    --cc=linux@rempel-privat.de \
    --cc=s.hauer@pengutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox