Patchwork [U-Boot] add dm9000 eeprom read/write command

login
register
mail settings
Submitter Eric Jarrige
Date Aug. 22, 2011, 9:37 p.m.
Message ID <20110822213742.28083.69514.stgit@shuttle2.etheralp.ch>
Download mbox | patch
Permalink /patch/110996/
State Changes Requested
Headers show

Comments

Eric Jarrige - Aug. 22, 2011, 9:37 p.m.
Signed-off-by: Eric Jarrige <eric.jarrige@armadeus.org>
Signed-off-by: Stefano Babic <sbabic@denx.de>
CC: Ben Warren <biggerbadderben@gmail.com>
---
 README                |    1 +
 common/Makefile       |    1 +
 common/cmd_dm9000ee.c |   84 +++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 86 insertions(+), 0 deletions(-)
 create mode 100644 common/cmd_dm9000ee.c
Mike Frysinger - Aug. 22, 2011, 9:55 p.m.
On Monday, August 22, 2011 17:37:42 Eric Jarrige wrote:
> +#if (!defined(CONFIG_DM9000_NO_SROM) && defined(CONFIG_DRIVER_DM9000))

why is this necessary ?
-mike
Eric Jarrige - Aug. 23, 2011, 5:15 a.m.
Hi Mike,

On 22 août 2011, at 23:55, Mike Frysinger wrote:

> On Monday, August 22, 2011 17:37:42 Eric Jarrige wrote:
>> +#if (!defined(CONFIG_DM9000_NO_SROM) && defined(CONFIG_DRIVER_DM9000))
> 
> why is this necessary ?
> -mike

the methods dm9000_read_srom_word()/dm9000_write_srom_word() need these conditions to be compiled in dm9000x.c
Therefore this avoid dead code and/or compilation failure if these conditions are not met.

Best regards,
Eric
Stefano Babic - Aug. 23, 2011, 9:34 a.m.
On 08/22/2011 11:37 PM, Eric Jarrige wrote:
> Signed-off-by: Eric Jarrige <eric.jarrige@armadeus.org>
> Signed-off-by: Stefano Babic <sbabic@denx.de>
> CC: Ben Warren <biggerbadderben@gmail.com>

I think we should drop Ben's name as maintainer for the network because
he retired some times ago, but his name is still in the maintainer list.

Wolfgang is the maintainer at the moment, I added him in CC.

> ---
>  README                |    1 +
>  common/Makefile       |    1 +
>  common/cmd_dm9000ee.c |   84 +++++++++++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 86 insertions(+), 0 deletions(-)
>  create mode 100644 common/cmd_dm9000ee.c

Why do not we add this code simply to the DM9000 driver ? I think it
belongs to the driver and that is the right place to put this stuff.

Best regards,
Stefano Babic
Mike Frysinger - Aug. 23, 2011, 1:42 p.m.
On Tuesday, August 23, 2011 01:15:25 Eric Jarrige wrote:
> On 22 août 2011, at 23:55, Mike Frysinger wrote:
> > On Monday, August 22, 2011 17:37:42 Eric Jarrige wrote:
> >> +#if (!defined(CONFIG_DM9000_NO_SROM) && defined(CONFIG_DRIVER_DM9000))
> > 
> > why is this necessary ?
> 
> the methods dm9000_read_srom_word()/dm9000_write_srom_word() need these
> conditions to be compiled in dm9000x.c Therefore this avoid dead code
> and/or compilation failure if these conditions are not met.

my point is that it is user error to select CONFIG_CMD_DM9000EE but not select 
the DM9000 settings.  in your case, the user silently gets a build that makes 
no sense.  in my case, they're forced to fix things.
-mike
Stefano Babic - Aug. 23, 2011, 2:21 p.m.
On 08/23/2011 03:42 PM, Mike Frysinger wrote:
> On Tuesday, August 23, 2011 01:15:25 Eric Jarrige wrote:
>> On 22 août 2011, at 23:55, Mike Frysinger wrote:
>>> On Monday, August 22, 2011 17:37:42 Eric Jarrige wrote:
>>>> +#if (!defined(CONFIG_DM9000_NO_SROM) && defined(CONFIG_DRIVER_DM9000))
>>>
>>> why is this necessary ?
>>
>> the methods dm9000_read_srom_word()/dm9000_write_srom_word() need these
>> conditions to be compiled in dm9000x.c Therefore this avoid dead code
>> and/or compilation failure if these conditions are not met.
> 
> my point is that it is user error to select CONFIG_CMD_DM9000EE but not select 
> the DM9000 settings.  in your case, the user silently gets a build that makes 
> no sense.  in my case, they're forced to fix things.

Agree. This is also my point to move this code inside the driver itself,
where CONFIG_DRIVER_DM9000 is set (or it is not compiled).

Best regards,
Stefano Babic
Eric Jarrige - Aug. 24, 2011, 5:36 a.m.
On 23 août 2011, at 16:21, Stefano Babic wrote:

> On 08/23/2011 03:42 PM, Mike Frysinger wrote:
>> On Tuesday, August 23, 2011 01:15:25 Eric Jarrige wrote:
>>> On 22 août 2011, at 23:55, Mike Frysinger wrote:
>>>> On Monday, August 22, 2011 17:37:42 Eric Jarrige wrote:
>>>>> +#if (!defined(CONFIG_DM9000_NO_SROM) && defined(CONFIG_DRIVER_DM9000))
>>>> 
>>>> why is this necessary ?
>>> 
>>> the methods dm9000_read_srom_word()/dm9000_write_srom_word() need these
>>> conditions to be compiled in dm9000x.c Therefore this avoid dead code
>>> and/or compilation failure if these conditions are not met.
>> 
>> my point is that it is user error to select CONFIG_CMD_DM9000EE but not select 
>> the DM9000 settings.  in your case, the user silently gets a build that makes 
>> no sense.  in my case, they're forced to fix things.
> 
> Agree. This is also my point to move this code inside the driver itself,
> where CONFIG_DRIVER_DM9000 is set (or it is not compiled).
> 

That makes sense - I can remove this line.

Best regards,
Eric
Wolfgang Denk - Oct. 6, 2011, 9:49 p.m.
Dear Eric Jarrige,

In message <20110822213742.28083.69514.stgit@shuttle2.etheralp.ch> you wrote:
> Signed-off-by: Eric Jarrige <eric.jarrige@armadeus.org>
> Signed-off-by: Stefano Babic <sbabic@denx.de>
> CC: Ben Warren <biggerbadderben@gmail.com>
> ---
>  README                |    1 +
>  common/Makefile       |    1 +
>  common/cmd_dm9000ee.c |   84 +++++++++++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 86 insertions(+), 0 deletions(-)
>  create mode 100644 common/cmd_dm9000ee.c

Checkpatch says:

total: 0 errors, 2 warnings, 98 lines checked

Please clean up and resubmit.  Thanks.

Best regards,

Wolfgang Denk

Patch

diff --git a/README b/README
index 0886987..c6981bf 100644
--- a/README
+++ b/README
@@ -707,6 +707,7 @@  The following options need to be configured:
 		CONFIG_CMD_DATE		* support for RTC, date/time...
 		CONFIG_CMD_DHCP		* DHCP support
 		CONFIG_CMD_DIAG		* Diagnostics
+		CONFIG_CMD_DM9000EE	  DM9000 external EEPROM support
 		CONFIG_CMD_DS4510	* ds4510 I2C gpio commands
 		CONFIG_CMD_DS4510_INFO	* ds4510 I2C info command
 		CONFIG_CMD_DS4510_MEM	* ds4510 I2C eeprom/sram commansd
diff --git a/common/Makefile b/common/Makefile
index d662468..d22cbac 100644
--- a/common/Makefile
+++ b/common/Makefile
@@ -81,6 +81,7 @@  ifdef CONFIG_POST
 COBJS-$(CONFIG_CMD_DIAG) += cmd_diag.o
 endif
 COBJS-$(CONFIG_CMD_DISPLAY) += cmd_display.o
+COBJS-$(CONFIG_CMD_DM9000EE) += cmd_dm9000ee.o
 COBJS-$(CONFIG_CMD_DTT) += cmd_dtt.o
 COBJS-$(CONFIG_CMD_ECHO) += cmd_echo.o
 COBJS-$(CONFIG_ENV_IS_IN_EEPROM) += cmd_eeprom.o
diff --git a/common/cmd_dm9000ee.c b/common/cmd_dm9000ee.c
new file mode 100644
index 0000000..0d53c70
--- /dev/null
+++ b/common/cmd_dm9000ee.c
@@ -0,0 +1,84 @@ 
+/*
+ * (C) Copyright 2008-2011 Armadeus Project
+ * (C) Copyright 2007
+ * Stefano Babic, DENX Software Engineering, sbabic@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <command.h>
+#include <dm9000.h>
+
+#if (!defined(CONFIG_DM9000_NO_SROM) && defined(CONFIG_DRIVER_DM9000))
+
+static int do_read_dm9000_eeprom(cmd_tbl_t *cmdtp, int flag, int argc,
+				 char *const argv[])
+{
+	unsigned int i;
+	u8 data[2];
+
+	for (i = 0; i < 0x40; i++) {
+		if (!(i % 0x10))
+			printf("\n%08x:", i);
+		dm9000_read_srom_word(i, data);
+		printf(" %02x%02x", data[1], data[0]);
+	}
+	printf("\n");
+	return 0;
+}
+
+static int do_write_dm9000_eeprom(cmd_tbl_t *cmdtp, int flag, int argc,
+				  char *const argv[])
+{
+	unsigned long offset, value;
+
+	if (argc < 4)
+		return cmd_usage(cmdtp);
+
+	strict_strtoul(argv[2], 16, &offset);
+	strict_strtoul(argv[3], 16, &value);
+	if (offset > 0x40) {
+		printf("Wrong offset : 0x%lx\n", offset);
+		return cmd_usage(cmdtp);
+	}
+	dm9000_write_srom_word(offset, value);
+	return 0;
+}
+
+int do_dm9000_eeprom(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
+{
+	if (argc < 2)
+		return cmd_usage(cmdtp);
+
+	if (strcmp(argv[1], "read") == 0)
+		return do_read_dm9000_eeprom(cmdtp, flag, argc, argv);
+	else if (strcmp(argv[1], "write") == 0)
+		return do_write_dm9000_eeprom(cmdtp, flag, argc, argv);
+	else
+		return cmd_usage(cmdtp);
+}
+
+U_BOOT_CMD(dm9000ee, 4, 1, do_dm9000_eeprom,
+	   "Read/Write eeprom connected to Ethernet Controller",
+	   "\ndm9000ee write <word offset> <value> \n"
+	   "\tdm9000ee read \n"
+	   "\tword:\t\t00-02 : MAC Address\n"
+	   "\t\t\t03-07 : DM9000 Configuration\n" "\t\t\t08-63 : User data");
+#endif /* !CONFIG_DM9000_NO_SROM && CONFIG_DRIVER_DM9000 */