[U-Boot] [PATCH] mgcoge, mgsuvd: added support for the IVM EEprom.

Wolfgang Denk wd at denx.de
Mon Sep 29 11:10:14 CEST 2008


Dear Heiko Schocher,

In message <48E08A41.1090708 at denx.de> you wrote:
> The EEprom contains some Manufacturerinformation,
> which are read from u-boot at boot time, and saved
> in same Environmentvars.
> 
> Signed-off-by: Heiko Schocher <hs at denx.de>
> ---
>  board/keymile/common/common.c |  285 +++++++++++++++++++++++++++++++++++++++++
>  include/configs/mgcoge.h      |    5 +
>  include/configs/mgsuvd.h      |    5 +
>  lib_ppc/board.c               |    6 +
>  4 files changed, 301 insertions(+), 0 deletions(-)
> 
> diff --git a/board/keymile/common/common.c b/board/keymile/common/common.c
> index a6ed379..25c5900 100644
> --- a/board/keymile/common/common.c
> +++ b/board/keymile/common/common.c
> @@ -38,6 +38,291 @@
>  extern int i2c_mgsuvd_read (void);
>  #endif
> 
> +int ivm_calc_crc (unsigned char *buf, int len)
> +{
> +	const unsigned short cCrc16Table[16] = {
> +		0x0000, 0xCC01, 0xD801, 0x1400,
> +		0xF001, 0x3C00, 0x2800, 0xE401,
> +		0xA001, 0x6C00, 0x7800, 0xB401,
> +		0x5000, 0x9C01, 0x8801, 0x4400};

If we need support for CRC16, it should be factored out and move to
lib_generic.

> +#define BTChar	unsigned char

Please get rid of this #define.

> +static char toAscii(char c)
> +{
> +	return (c<' ' || c>'~') ? '.' : c;
> +}

Mixed case identifiers like "toAscii" are deprecated.

Also, the name is misleading as it can be easily confised with the
standard function toascii() which implements a different function.

> +{
> +	int xcode = 0;
> +	BTChar cr = '\r';
> +	/* Semikolon char */
> +	BTChar sc = ';';

Come on. Do we really need variables for these? And do you think that
"sc" is easier to read or understand than ';'?

Please drop these.

> +	/* Number of CR found */
> +	unsigned long crFound = 0;
> +	/* Current address */
> +	unsigned long address = INVENTORYDATAADDRESS;
> +	/* String length */
> +	unsigned long strSize = 0;
> +	/* Number of CR to skip */
> +	unsigned long nbrOfCR = aType;
> +	/* Semicolon to end */
> +	int endWithSemikolon = 0;

This is difficult to read. Please put the comments in the  same  line
as  the  variable  declarations,  and  get  rid  of  these mixed case
identifiers.

> +	switch (aType)
> +	{

Incorrect brace style. See also rest of file.

> +		/* Copy the IVM string in the corresponding string */
> +		for (; (buf[address] != cr)			&&   /* not cr found */
> +			((buf[address] != sc) ||  (!endWithSemikolon))  &&   /* not semikolon found */

Maximum line length exceeded.

> +	/* IVM_MacAddress */
> +	sprintf ((char *)valbuf, "%02X:%02X:%02X:%02X:%02X:%02X",
> +			buf[1],
> +			buf[2],
> +			buf[3],
> +			buf[4],
> +			buf[5],
> +			buf[6]);	
> +	setenv ("IVM_MacAddress", (char *)valbuf);

Do we really need this? We already have "ethaddr" ?

> +	if (getenv ("ethaddr") == NULL)
> +		setenv ((char *)"ethaddr", (char *)valbuf);

Oops? You are even aware of this.

Please avoid duplicate data.

> +int ivm_analyse_eeprom (unsigned char *buf, int len)

...analyze...

> +	unsigned short	val;
> +	unsigned char	valbuf[CFG_IVM_EEPROM_PAGE_LEN];
> +	unsigned char	*tmp;
> +
> +	/* used Code from ivm/src/devsrv_baseproductdata.cpp */

What is ivm/src/devsrv_baseproductdata.cpp ?

> +	ivm_get_value (buf, CFG_IVM_EEPROM_PAGE_LEN, "IVM_BoardId", 0, 1);
> +	val = ivm_get_value (buf, CFG_IVM_EEPROM_PAGE_LEN, "IVM_HWKey", 6, 1);
> +	if (val != 0xffff) {
> +		sprintf ((char *)valbuf, "%x", ((val /100) % 10));
> +		setenv ("IVM_HWVariant", (char *)valbuf);
> +		sprintf ((char *)valbuf, "%x", (val % 100));
> +		setenv ("IVM_HWVersion", (char *)valbuf);
> +	}

You're really polluting the environment here.

Is this reasonable?

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Lots of folks confuse bad management with destiny.   -- Frank Hubbard


More information about the U-Boot mailing list