diff options
Diffstat (limited to 'board/w7o/vpd.c')
| -rw-r--r-- | board/w7o/vpd.c | 543 | 
1 files changed, 280 insertions, 263 deletions
| diff --git a/board/w7o/vpd.c b/board/w7o/vpd.c index 57558e88f..d248c97bf 100644 --- a/board/w7o/vpd.c +++ b/board/w7o/vpd.c @@ -22,11 +22,11 @@   */  #if defined(VXWORKS) -# include <stdio.h> -# include <string.h> -# define CONFIG_SYS_DEF_EEPROM_ADDR 0xa0 -extern char iicReadByte( char, char ); -extern ulong_t crc32( unsigned char *, unsigned long ); +#include <stdio.h> +#include <string.h> +#define CONFIG_SYS_DEF_EEPROM_ADDR 0xa0 +extern char iicReadByte(char, char); +extern ulong_t crc32(unsigned char *, unsigned long);  #else  #include <common.h>  #endif @@ -37,78 +37,79 @@ extern ulong_t crc32( unsigned char *, unsigned long );   * vpd_reader() - reads VPD data from I2C EEPROMS.   *                returns pointer to buffer or NULL.   */ -static unsigned char * -vpd_reader(unsigned char *buf, unsigned dev_addr, unsigned off, unsigned count) +static unsigned char *vpd_reader(unsigned char *buf, unsigned dev_addr, +				 unsigned off, unsigned count)  { -    unsigned offset = off;			/* Calculated offset */ +	unsigned offset = off;	/* Calculated offset */ -    /* -     * The main board EEPROM contains -     * SDRAM SPD in the first 128 bytes, -     * so skew the offset. -     */ -    if (dev_addr == CONFIG_SYS_DEF_EEPROM_ADDR) -	offset += SDRAM_SPD_DATA_SIZE; +	/* +	 * The main board EEPROM contains +	 * SDRAM SPD in the first 128 bytes, +	 * so skew the offset. +	 */ +	if (dev_addr == CONFIG_SYS_DEF_EEPROM_ADDR) +		offset += SDRAM_SPD_DATA_SIZE; -    /* Try to read the I2C EEPROM */ +	/* Try to read the I2C EEPROM */  #if defined(VXWORKS) -    { -	int i; -	for( i = 0; i < count; ++i ) { -	    buf[ i ] = iicReadByte( dev_addr, offset+i ); +	{ +		int i; + +		for (i = 0; i < count; ++i) +			buf[i] = iicReadByte(dev_addr, offset + i);  	} -    }  #else -    if (eeprom_read(dev_addr, offset, buf, count)) { -	printf("Failed to read %d bytes from VPD EEPROM 0x%x @ 0x%x\n", -	       count, dev_addr, offset); -	return NULL; -    } +	if (eeprom_read(dev_addr, offset, buf, count)) { +		printf("Failed to read %d bytes from VPD EEPROM 0x%x @ 0x%x\n", +			count, dev_addr, offset); +		return NULL; +	}  #endif -    return buf; -} /* vpd_reader() */ +	return buf; +}  /*   * vpd_get_packet() - returns next VPD packet or NULL.   */ -static vpd_packet_t *vpd_get_packet(vpd_packet_t *vpd_packet) +static vpd_packet_t *vpd_get_packet(vpd_packet_t * vpd_packet)  { -    vpd_packet_t *packet = vpd_packet; +	vpd_packet_t *packet = vpd_packet; -    if (packet != NULL) { -	if (packet->identifier == VPD_PID_TERM) -	    return NULL; -	else -	    packet = (vpd_packet_t *)((char *)packet + packet->size + 2); -    } +	if (packet != NULL) { +		if (packet->identifier == VPD_PID_TERM) +			return NULL; +		else +			packet = (vpd_packet_t *) ((char *) packet + +						   packet->size + 2); +	} -    return packet; -} /* vpd_get_packet() */ +	return packet; +}  /*   * vpd_find_packet() - Locates and returns the specified   *		       VPD packet or NULL on error.   */ -static vpd_packet_t *vpd_find_packet(vpd_t *vpd, unsigned char ident) +static vpd_packet_t *vpd_find_packet(vpd_t * vpd, unsigned char ident)  { -    vpd_packet_t *packet = (vpd_packet_t *)&vpd->packets; +	vpd_packet_t *packet = (vpd_packet_t *) &vpd->packets; -    /* Guaranteed illegal */ -    if (ident == VPD_PID_GI) -	return NULL; +	/* Guaranteed illegal */ +	if (ident == VPD_PID_GI) +		return NULL; -    /* Scan tuples looking for a match */ -    while ((packet->identifier != ident) && -	   (packet->identifier != VPD_PID_TERM)) -	packet = vpd_get_packet(packet); +	/* Scan tuples looking for a match */ +	while ((packet->identifier != ident) && +	       (packet->identifier != VPD_PID_TERM)) +		packet = vpd_get_packet(packet); -    /* Did we find it? */ -    if ((packet->identifier) && (packet->identifier != ident)) -	return NULL; -    return packet; +	/* Did we find it? */ +	if ((packet->identifier) && (packet->identifier != ident)) +		return NULL; +	return packet;  } @@ -119,62 +120,70 @@ static vpd_packet_t *vpd_find_packet(vpd_t *vpd, unsigned char ident)   */  static int vpd_is_valid(unsigned dev_addr, unsigned char *buf)  { -    unsigned	    num_bytes; -    vpd_packet_t    *packet; -    vpd_t	    *vpd = (vpd_t *)buf; -    unsigned short  stored_crc16, calc_crc16 = 0xffff; +	unsigned num_bytes; +	vpd_packet_t *packet; +	vpd_t *vpd = (vpd_t *) buf; +	unsigned short stored_crc16, calc_crc16 = 0xffff; -    /* Check Eyecatcher */ -    if (strncmp((char *)(vpd->header.eyecatcher), VPD_EYECATCHER, VPD_EYE_SIZE) != 0) { -	unsigned offset = 0; -	if (dev_addr == CONFIG_SYS_DEF_EEPROM_ADDR) -	    offset += SDRAM_SPD_DATA_SIZE; -	printf("Error: VPD EEPROM 0x%x corrupt @ 0x%x\n", dev_addr, offset); +	/* Check Eyecatcher */ +	if (strncmp +	    ((char *) (vpd->header.eyecatcher), VPD_EYECATCHER, +	     VPD_EYE_SIZE) != 0) { +		unsigned offset = 0; -	return 0; -    } +		if (dev_addr == CONFIG_SYS_DEF_EEPROM_ADDR) +			offset += SDRAM_SPD_DATA_SIZE; +		printf("Error: VPD EEPROM 0x%x corrupt @ 0x%x\n", dev_addr, +		       offset); -    /* Check Length */ -    if (vpd->header.size> VPD_MAX_EEPROM_SIZE) { -	printf("Error: VPD EEPROM 0x%x contains bad size 0x%x\n", -	       dev_addr, vpd->header.size); -	return 0; -    } +		return 0; +	} -    /* Now find the termination packet */ -    if ((packet = vpd_find_packet(vpd, VPD_PID_TERM)) == NULL) { -	printf("Error: VPD EEPROM 0x%x missing termination packet\n", -	       dev_addr); -	return 0; -    } +	/* Check Length */ +	if (vpd->header.size > VPD_MAX_EEPROM_SIZE) { +		printf("Error: VPD EEPROM 0x%x contains bad size 0x%x\n", +		       dev_addr, vpd->header.size); +		return 0; +	} -    /* Calculate data size */ -    num_bytes = (unsigned long)((unsigned char *)packet - -				(unsigned char *)vpd + sizeof(vpd_packet_t)); +	/* Now find the termination packet */ +	packet = vpd_find_packet(vpd, VPD_PID_TERM); +	if (packet == NULL) { +		printf("Error: VPD EEPROM 0x%x missing termination packet\n", +		       dev_addr); +		return 0; +	} -    /* Find stored CRC and clear it */ -    if ((packet = vpd_find_packet(vpd, VPD_PID_CRC)) == NULL) { -	printf("Error: VPD EEPROM 0x%x missing CRC\n", dev_addr); -	return 0; -    } -    stored_crc16 = *((ushort *)packet->data); -    *(ushort *)packet->data = 0; +	/* Calculate data size */ +	num_bytes = (unsigned long) ((unsigned char *) packet - +				     (unsigned char *) vpd + +				     sizeof(vpd_packet_t)); -    /* OK, lets calculate the CRC and check it */ +	/* Find stored CRC and clear it */ +	packet = vpd_find_packet(vpd, VPD_PID_CRC); +	if (packet == NULL) { +		printf("Error: VPD EEPROM 0x%x missing CRC\n", dev_addr); +		return 0; +	} +	stored_crc16 = *((ushort *) packet->data); +	*(ushort *) packet->data = 0; + +	/* OK, lets calculate the CRC and check it */  #if defined(VXWORKS) -    calc_crc16 = (0xffff & crc32(buf, num_bytes)); +	calc_crc16 = (0xffff & crc32(buf, num_bytes));  #else -    calc_crc16 = (0xffff & crc32(0, buf, num_bytes)); +	calc_crc16 = (0xffff & crc32(0, buf, num_bytes));  #endif -    *(ushort *)packet->data = stored_crc16;     /* Now restore the CRC */ -    if (stored_crc16 != calc_crc16) { -	printf("Error: VPD EEPROM 0x%x has bad CRC 0x%x\n", -	       dev_addr, stored_crc16); -	return 0; -    } +	/* Now restore the CRC */ +	*(ushort *) packet->data = stored_crc16; +	if (stored_crc16 != calc_crc16) { +		printf("Error: VPD EEPROM 0x%x has bad CRC 0x%x\n", +		       dev_addr, stored_crc16); +		return 0; +	} -    return 1; -} /* vpd_is_valid() */ +	return 1; +}  /* @@ -184,12 +193,12 @@ static int vpd_is_valid(unsigned dev_addr, unsigned char *buf)   */  static int size_ok(vpd_packet_t *packet, unsigned long size)  { -    if (packet->size != size) { -	printf("VPD Packet 0x%x corrupt.\n", packet->identifier); -	return 0; -    } -    return 1; -} /* size_ok() */ +	if (packet->size != size) { +		printf("VPD Packet 0x%x corrupt.\n", packet->identifier); +		return 0; +	} +	return 1; +}  /* @@ -199,12 +208,12 @@ static int size_ok(vpd_packet_t *packet, unsigned long size)   */  static int strlen_ok(vpd_packet_t *packet, unsigned long length)  { -    if (packet->size >= length) { -	printf("VPD Packet 0x%x corrupt.\n", packet->identifier); -	return 0; -    } -    return 1; -} /* strlen_ok() */ +	if (packet->size >= length) { +		printf("VPD Packet 0x%x corrupt.\n", packet->identifier); +		return 0; +	} +	return 1; +}  /* @@ -215,110 +224,112 @@ static int strlen_ok(vpd_packet_t *packet, unsigned long length)   */  int vpd_get_data(unsigned char dev_addr, VPD *vpdInfo)  { -    unsigned char buf[VPD_EEPROM_SIZE]; -    vpd_t *vpd = (vpd_t *)buf; -    vpd_packet_t *packet; +	unsigned char buf[VPD_EEPROM_SIZE]; +	vpd_t *vpd = (vpd_t *) buf; +	vpd_packet_t *packet; -    if (vpdInfo == NULL) -	return 1; +	if (vpdInfo == NULL) +		return 1; -     /* -      * Fill vpdInfo with 0s to blank out -      * unused fields, fill vpdInfo->ethAddrs -      * with all 0xffs so that other's code can -      * determine how many real Ethernet addresses -      * there are.  OUIs starting with 0xff are -      * broadcast addresses, and would never be -      * permantely stored. -      */ -    memset((void *)vpdInfo, 0, sizeof(VPD)); -    memset((void *)&vpdInfo->ethAddrs, 0xff, sizeof(vpdInfo->ethAddrs)); -    vpdInfo->_devAddr = dev_addr; +	/* +	 * Fill vpdInfo with 0s to blank out +	 * unused fields, fill vpdInfo->ethAddrs +	 * with all 0xffs so that other's code can +	 * determine how many real Ethernet addresses +	 * there are.  OUIs starting with 0xff are +	 * broadcast addresses, and would never be +	 * permantely stored. +	 */ +	memset((void *) vpdInfo, 0, sizeof(VPD)); +	memset((void *) &vpdInfo->ethAddrs, 0xff, sizeof(vpdInfo->ethAddrs)); +	vpdInfo->_devAddr = dev_addr; -    /* Read the minimum size first */ -    if (vpd_reader(buf, dev_addr, 0, VPD_EEPROM_SIZE) == NULL) { -	return 1; -    } +	/* Read the minimum size first */ +	if (vpd_reader(buf, dev_addr, 0, VPD_EEPROM_SIZE) == NULL) +		return 1; -    /* Check validity of VPD data */ -    if (!vpd_is_valid(dev_addr, buf)) { -	printf("VPD Data is INVALID!\n"); -	return 1; -    } +	/* Check validity of VPD data */ +	if (!vpd_is_valid(dev_addr, buf)) { +		printf("VPD Data is INVALID!\n"); +		return 1; +	} -    /* -      * Walk all the packets and populate -      * the VPD info structure. -      */ -    packet = (vpd_packet_t *)&vpd->packets; -    do { -	switch (packet->identifier) { -	    case VPD_PID_GI: -		printf("Error: Illegal VPD value\n"); -		break; -	    case VPD_PID_PID: -		if (strlen_ok(packet, MAX_PROD_ID)) { -		    strncpy(vpdInfo->productId, -			    (char *)(packet->data), packet->size); -		} -		break; -	    case VPD_PID_REV: -		if (size_ok(packet, sizeof(char))) -		    vpdInfo->revisionId = *packet->data; -		break; -	    case VPD_PID_SN: -		if (size_ok(packet, sizeof(unsigned long))) { -		    vpdInfo->serialNum = -			*(unsigned long *)packet->data; +	/* +	 * Walk all the packets and populate +	 * the VPD info structure. +	 */ +	packet = (vpd_packet_t *) &vpd->packets; +	do { +		switch (packet->identifier) { +		case VPD_PID_GI: +			printf("Error: Illegal VPD value\n"); +			break; +		case VPD_PID_PID: +			if (strlen_ok(packet, MAX_PROD_ID)) { +				strncpy(vpdInfo->productId, +					(char *) (packet->data), +					packet->size); +			} +			break; +		case VPD_PID_REV: +			if (size_ok(packet, sizeof(char))) +				vpdInfo->revisionId = *packet->data; +			break; +		case VPD_PID_SN: +			if (size_ok(packet, sizeof(unsigned long))) { +				vpdInfo->serialNum = +					*(unsigned long *) packet->data; +			} +			break; +		case VPD_PID_MANID: +			if (size_ok(packet, sizeof(unsigned char))) +				vpdInfo->manuID = *packet->data; +			break; +		case VPD_PID_PCO: +			if (size_ok(packet, sizeof(unsigned long))) { +				vpdInfo->configOpt = +					*(unsigned long *) packet->data; +			} +			break; +		case VPD_PID_SYSCLK: +			if (size_ok(packet, sizeof(unsigned long))) +				vpdInfo->sysClk = +					*(unsigned long *) packet->data; +			break; +		case VPD_PID_SERCLK: +			if (size_ok(packet, sizeof(unsigned long))) +				vpdInfo->serClk = +					*(unsigned long *) packet->data; +			break; +		case VPD_PID_FLASH: +			if (size_ok(packet, 9)) {	/* XXX - hardcoded, +							   padding in struct */ +				memcpy(&vpdInfo->flashCfg, packet->data, 9); +			} +			break; +		case VPD_PID_ETHADDR: +			memcpy(vpdInfo->ethAddrs, packet->data, packet->size); +			break; +		case VPD_PID_POTS: +			if (size_ok(packet, sizeof(char))) +				vpdInfo->numPOTS = (unsigned) *packet->data; +			break; +		case VPD_PID_DS1: +			if (size_ok(packet, sizeof(char))) +				vpdInfo->numDS1 = (unsigned) *packet->data; +		case VPD_PID_GAL: +		case VPD_PID_CRC: +		case VPD_PID_TERM: +			break; +		default: +			printf("Warning: Found unknown VPD packet ID 0x%x\n", +			       packet->identifier); +			break;  		} -		break; -	    case VPD_PID_MANID: -		if (size_ok(packet, sizeof(unsigned char))) -		    vpdInfo->manuID = *packet->data; -		break; -	    case VPD_PID_PCO: -		if (size_ok(packet, sizeof(unsigned long))) { -		    vpdInfo->configOpt = -			*(unsigned long *)packet->data; -		} -		break; -	    case VPD_PID_SYSCLK: -		if (size_ok(packet, sizeof(unsigned long))) -		    vpdInfo->sysClk = *(unsigned long *)packet->data; -		break; -	    case VPD_PID_SERCLK: -		if (size_ok(packet, sizeof(unsigned long))) -		    vpdInfo->serClk = *(unsigned long *)packet->data; -		break; -	    case VPD_PID_FLASH: -		if (size_ok(packet, 9)) {	/* XXX - hardcoded, -						   padding in struct */ -		    memcpy(&vpdInfo->flashCfg, packet->data, 9); -		} -		break; -	    case VPD_PID_ETHADDR: -		memcpy(vpdInfo->ethAddrs, packet->data, packet->size); -		break; -	    case VPD_PID_POTS: -		if (size_ok(packet, sizeof(char))) -		    vpdInfo->numPOTS = (unsigned)*packet->data; -		break; -	    case VPD_PID_DS1: -		if (size_ok(packet, sizeof(char))) -		    vpdInfo->numDS1 = (unsigned)*packet->data; -	    case VPD_PID_GAL: -	    case VPD_PID_CRC: -	    case VPD_PID_TERM: -		break; -	    default: -		printf("Warning: Found unknown VPD packet ID 0x%x\n", -		       packet->identifier); -		break; -	} -    } while ((packet = vpd_get_packet(packet))); +	} while ((packet = vpd_get_packet(packet))); -    return 0; -} /* end get_vpd_data() */ +	return 0; +}  /* @@ -326,8 +337,8 @@ int vpd_get_data(unsigned char dev_addr, VPD *vpdInfo)   */  int vpd_init(unsigned char dev_addr)  { -    return (0); -} /* vpd_init() */ +	return 0; +}  /* @@ -335,73 +346,79 @@ int vpd_init(unsigned char dev_addr)   */  void vpd_print(VPD *vpdInfo)  { -    const char *const sp    = ""; -    const char *const sfmt  = "%4s%-20s: \"%s\"\n"; -    const char *const cfmt  = "%4s%-20s: '%c'\n"; -    const char *const dfmt  = "%4s%-20s: %ld\n"; -    const char *const hfmt  = "%4s%-20s: %08lX\n"; -    const char *const dsfmt = "%4s%-20s: %d\n"; -    const char *const hsfmt = "%4s%-20s: %04X\n"; -    const char *const dhfmt = "%4s%-20s: %ld (%lX)\n"; +	const char *const sp = ""; +	const char *const sfmt = "%4s%-20s: \"%s\"\n"; +	const char *const cfmt = "%4s%-20s: '%c'\n"; +	const char *const dfmt = "%4s%-20s: %ld\n"; +	const char *const hfmt = "%4s%-20s: %08lX\n"; +	const char *const dsfmt = "%4s%-20s: %d\n"; +	const char *const hsfmt = "%4s%-20s: %04X\n"; +	const char *const dhfmt = "%4s%-20s: %ld (%lX)\n"; + +	printf("VPD read from I2C device: %02X\n", vpdInfo->_devAddr); -    printf("VPD read from I2C device: %02X\n", vpdInfo->_devAddr); +	if (vpdInfo->productId[0]) +		printf(sfmt, sp, "Product ID", vpdInfo->productId); +	else +		printf(sfmt, sp, "Product ID", "UNKNOWN"); -    if (vpdInfo->productId[0]) -	printf(sfmt, sp, "Product ID", vpdInfo->productId); -    else -	printf(sfmt, sp, "Product ID", "UNKNOWN"); +	if (vpdInfo->revisionId) +		printf(cfmt, sp, "Revision ID", vpdInfo->revisionId); -    if (vpdInfo->revisionId) -	printf(cfmt, sp, "Revision ID", vpdInfo->revisionId); +	if (vpdInfo->serialNum) +		printf(dfmt, sp, "Serial Number", vpdInfo->serialNum); -    if (vpdInfo->serialNum) -	printf(dfmt, sp, "Serial Number", vpdInfo->serialNum); +	if (vpdInfo->manuID) +		printf(dfmt, sp, "Manufacture ID", (long) vpdInfo->manuID); -    if (vpdInfo->manuID) -	printf(dfmt, sp, "Manufacture ID", (long)vpdInfo->manuID); +	if (vpdInfo->configOpt) +		printf(hfmt, sp, "Configuration", vpdInfo->configOpt); -    if (vpdInfo->configOpt) -	printf(hfmt, sp, "Configuration", vpdInfo->configOpt); +	if (vpdInfo->sysClk) +		printf(dhfmt, sp, "System Clock", vpdInfo->sysClk, +		       vpdInfo->sysClk); -    if (vpdInfo->sysClk) -	printf(dhfmt, sp, "System Clock", vpdInfo->sysClk, vpdInfo->sysClk); +	if (vpdInfo->serClk) +		printf(dhfmt, sp, "Serial Clock", vpdInfo->serClk, +		       vpdInfo->serClk); -    if (vpdInfo->serClk) -	printf(dhfmt, sp, "Serial Clock", vpdInfo->serClk, vpdInfo->serClk); +	if (vpdInfo->numPOTS) +		printf(dfmt, sp, "Number of POTS lines", vpdInfo->numPOTS); -    if (vpdInfo->numPOTS) -	printf(dfmt, sp, "Number of POTS lines", vpdInfo->numPOTS); +	if (vpdInfo->numDS1) +		printf(dfmt, sp, "Number of DS1s", vpdInfo->numDS1); -    if (vpdInfo->numDS1) -	printf(dfmt, sp, "Number of DS1s", vpdInfo->numDS1); +	/* Print Ethernet Addresses */ +	if (vpdInfo->ethAddrs[0][0] != 0xff) { +		int i, j; -    /* Print Ethernet Addresses */ -    if (vpdInfo->ethAddrs[0][0] != 0xff) { -	int i, j; -	printf("%4sEtherNet Address(es): ", sp); -	for (i = 0; i < MAX_ETH_ADDRS; i++) { -	    if (vpdInfo->ethAddrs[i][0] != 0xff) { -		for (j = 0; j < 6; j++) { -		    printf("%02X", vpdInfo->ethAddrs[i][j]); -		    if (((j + 1) % 6) != 0) -			printf(":"); -		    else -			printf(" "); +		printf("%4sEtherNet Address(es): ", sp); +		for (i = 0; i < MAX_ETH_ADDRS; i++) { +			if (vpdInfo->ethAddrs[i][0] != 0xff) { +				for (j = 0; j < 6; j++) { +					printf("%02X", +					       vpdInfo->ethAddrs[i][j]); +					if (((j + 1) % 6) != 0) +						printf(":"); +					else +						printf(" "); +				} +				if (((i + 1) % 3) == 0) +					printf("\n%24s: ", sp); +			}  		} -		if (((i + 1) % 3) == 0) printf("\n%24s: ", sp); -	    } +		printf("\n");  	} -	printf("\n"); -    } -    if (vpdInfo->flashCfg.mfg && vpdInfo->flashCfg.dev) { -	printf("Main Flash Configuration:\n"); -	printf(hsfmt, sp, "Manufacture ID", vpdInfo->flashCfg.mfg); -	printf(hsfmt, sp, "Device ID",      vpdInfo->flashCfg.dev); -	printf(dsfmt, sp, "Device Width",   vpdInfo->flashCfg.devWidth); -	printf(dsfmt, sp, "Num. Devices",   vpdInfo->flashCfg.numDevs); -	printf(dsfmt, sp, "Num. Columns",   vpdInfo->flashCfg.numCols); -	printf(dsfmt, sp, "Column Width",   vpdInfo->flashCfg.colWidth); -	printf(dsfmt, sp, "WE Data Width",  vpdInfo->flashCfg.weDataWidth); -    } -} /* vpd_print() */ +	if (vpdInfo->flashCfg.mfg && vpdInfo->flashCfg.dev) { +		printf("Main Flash Configuration:\n"); +		printf(hsfmt, sp, "Manufacture ID", vpdInfo->flashCfg.mfg); +		printf(hsfmt, sp, "Device ID", vpdInfo->flashCfg.dev); +		printf(dsfmt, sp, "Device Width", vpdInfo->flashCfg.devWidth); +		printf(dsfmt, sp, "Num. Devices", vpdInfo->flashCfg.numDevs); +		printf(dsfmt, sp, "Num. Columns", vpdInfo->flashCfg.numCols); +		printf(dsfmt, sp, "Column Width", vpdInfo->flashCfg.colWidth); +		printf(dsfmt, sp, "WE Data Width", +		       vpdInfo->flashCfg.weDataWidth); +	} +} |