summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Baiocchi <baiocchi@us.ibm.com>2013-11-25 10:23:04 -0600
committerA. Patrick Williams III <iawillia@us.ibm.com>2014-01-09 18:00:58 -0600
commitb35a7f31ac2bb296aa7e7bb231e686549b36ba3b (patch)
tree61111cc258f32f2574be7550959153a3633bd4ef
parentc7e0df0b86a229449ff2be99c20d91595a86f36d (diff)
downloadtalos-hostboot-b35a7f31ac2bb296aa7e7bb231e686549b36ba3b.tar.gz
talos-hostboot-b35a7f31ac2bb296aa7e7bb231e686549b36ba3b.zip
Update I2C and EEPROM Device Drivers Error Paths
This commit removes the retry path from the I2C Device Driver and adds two to the EEPROM Device Driver. This will provide more flexibility to I2C DD use in the future, while keeping the current level of EEPROM DD robustness. Change-Id: I2b2aa3ed83557a5f2d9523cd55a7486924205e2f RTC: 89667 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/7508 Tested-by: Jenkins Server Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
-rw-r--r--src/include/usr/i2c/i2creasoncodes.H5
-rwxr-xr-xsrc/usr/i2c/eepromdd.C422
-rwxr-xr-xsrc/usr/i2c/eepromdd.H3
-rwxr-xr-xsrc/usr/i2c/i2c.C311
-rwxr-xr-xsrc/usr/i2c/i2c.H8
-rwxr-xr-xsrc/usr/i2c/test/eepromddtest.H58
-rwxr-xr-xsrc/usr/i2c/test/i2ctest.H56
-rwxr-xr-xsrc/usr/targeting/common/genHwsvMrwXml.pl1
-rw-r--r--src/usr/targeting/common/xmltohb/attribute_types.xml32
-rw-r--r--src/usr/targeting/common/xmltohb/simics_MURANO.system.xml34
-rw-r--r--src/usr/targeting/common/xmltohb/simics_VENICE.system.xml100
11 files changed, 754 insertions, 276 deletions
diff --git a/src/include/usr/i2c/i2creasoncodes.H b/src/include/usr/i2c/i2creasoncodes.H
index 267ffcc65..90da53c6f 100644
--- a/src/include/usr/i2c/i2creasoncodes.H
+++ b/src/include/usr/i2c/i2creasoncodes.H
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2011,2013 */
+/* COPYRIGHT International Business Machines Corp. 2011,2014 */
/* */
/* p1 */
/* */
@@ -72,11 +72,12 @@ enum i2cReasonCode
I2C_FIFO_TIMEOUT = I2C_COMP_ID | 0x03, // Timed out waiting on FIFO
I2C_BUS_NOT_READY = I2C_COMP_ID | 0x04, // Bus Not ready
I2C_CMD_COMP_TIMEOUT = I2C_COMP_ID | 0x05, // Timeout waiting for Cmd Complete
- I2C_HW_ERROR_FOUND = I2C_COMP_ID | 0x06, // Error found in Status register
+ I2C_HW_ERROR_FOUND = I2C_COMP_ID | 0x06, // Error found in status register
I2C_MASTER_SENTINEL_TARGET = I2C_COMP_ID | 0x07, // Master Sentinel used as target
I2C_NO_CENTAUR_FOUND = I2C_COMP_ID | 0x08, // No Centaur chip found
I2C_NO_PROC_FOUND = I2C_COMP_ID | 0x09, // No Processor chip found
I2C_INVALID_BUS_SPEED_MODE = I2C_COMP_ID | 0x0A, // Invalid Bus Speed Mode
+ I2C_NACK_ONLY_FOUND = I2C_COMP_ID | 0x0B, // Only NACK found in status register
};
}; // end I2C
diff --git a/src/usr/i2c/eepromdd.C b/src/usr/i2c/eepromdd.C
index 56885d874..ce9b4be85 100755
--- a/src/usr/i2c/eepromdd.C
+++ b/src/usr/i2c/eepromdd.C
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2011,2013 */
+/* COPYRIGHT International Business Machines Corp. 2011,2014 */
/* */
/* p1 */
/* */
@@ -34,16 +34,16 @@
// ----------------------------------------------
#include <string.h>
#include <sys/time.h>
-
#include <trace/interface.H>
#include <errl/errlentry.H>
#include <errl/errlmanager.H>
#include <errl/errludtarget.H>
+#include <errl/errludstring.H>
#include <targeting/common/targetservice.H>
#include <devicefw/driverif.H>
-#include <sys/time.h>
#include <i2c/eepromddreasoncodes.H>
#include <i2c/eepromif.H>
+#include <i2c/i2creasoncodes.H>
#include "eepromdd.H"
// ----------------------------------------------
@@ -55,7 +55,7 @@ mutex_t g_eepromMutex = MUTEX_INITIALIZER;
// Trace definitions
// ----------------------------------------------
trace_desc_t* g_trac_eeprom = NULL;
-TRAC_INIT( & g_trac_eeprom, "EEPROM", KILOBYTE );
+TRAC_INIT( & g_trac_eeprom, EEPROM_COMP_NAME, KILOBYTE );
trace_desc_t* g_trac_eepromr = NULL;
TRAC_INIT( & g_trac_eepromr, "EEPROMR", KILOBYTE );
@@ -68,8 +68,10 @@ TRAC_INIT( & g_trac_eepromr, "EEPROMR", KILOBYTE );
// Defines
// ----------------------------------------------
#define MAX_BYTE_ADDR 2
+#define EEPROM_MAX_NACK_RETRIES 2
// ----------------------------------------------
+
namespace EEPROM
{
@@ -116,7 +118,6 @@ errlHndl_t eepromPerformOp( DeviceFW::OperationType i_opType,
"i_opType=%d, chip=%d, offset=%d, len=%d",
(uint64_t) i_opType, i2cInfo.chip, i2cInfo.offset, io_buflen);
-
do
{
// Read Attributes needed to complete the operation
@@ -171,6 +172,7 @@ errlHndl_t eepromPerformOp( DeviceFW::OperationType i_opType,
break;
}
+
// Do the read or write
if( i_opType == DeviceFW::READ )
{
@@ -179,10 +181,11 @@ errlHndl_t eepromPerformOp( DeviceFW::OperationType i_opType,
io_buflen,
i2cInfo );
- if( err )
+ if ( err )
{
break;
}
+
}
else if( i_opType == DeviceFW::WRITE )
{
@@ -191,10 +194,11 @@ errlHndl_t eepromPerformOp( DeviceFW::OperationType i_opType,
io_buflen,
i2cInfo );
- if( err )
+ if ( err )
{
break;
}
+
}
else
{
@@ -221,9 +225,10 @@ errlHndl_t eepromPerformOp( DeviceFW::OperationType i_opType,
} while( 0 );
- // If there is an error, add target to log
+ // If there is an error, add target and trace to log
if ( (err != NULL) && (i_target != NULL) )
{
+ err->collectTrace(EEPROM_COMP_NAME);
ERRORLOG::ErrlUserDetailsTarget(i_target).addToLog(err);
}
@@ -244,6 +249,7 @@ errlHndl_t eepromRead ( TARGETING::Target * i_target,
eeprom_addr_t i_i2cInfo )
{
errlHndl_t err = NULL;
+ errlHndl_t err_NACK = NULL;
uint8_t byteAddr[MAX_BYTE_ADDR];
size_t byteAddrSize = 0;
bool unlock = false;
@@ -270,51 +276,174 @@ errlHndl_t eepromRead ( TARGETING::Target * i_target,
mutex_lock( &g_eepromMutex );
unlock = true;
- // Only write the byte address if we have data to write
- if( 0 != byteAddrSize )
+ /***********************************************************/
+ /* Attempt read multiple times ONLY on NACK fails */
+ /***********************************************************/
+ for (uint8_t retry = 0;
+ retry <= EEPROM_MAX_NACK_RETRIES;
+ retry++)
{
- // Use the I2C OFFSET Interface for the READ
- err = deviceOp( DeviceFW::READ,
- i_target,
- o_buffer,
- i_buflen,
- DEVICE_I2C_ADDRESS_OFFSET(
+ // Only write the byte address if we have data to write
+ if( 0 != byteAddrSize )
+ {
+ // Use the I2C OFFSET Interface for the READ
+ err = deviceOp( DeviceFW::READ,
+ i_target,
+ o_buffer,
+ i_buflen,
+ DEVICE_I2C_ADDRESS_OFFSET(
i_i2cInfo.port,
i_i2cInfo.engine,
i_i2cInfo.devAddr,
byteAddrSize,
reinterpret_cast<uint8_t*>(&byteAddr)));
- if( err )
+ if( err )
+ {
+ TRACFCOMP(g_trac_eeprom,
+ ERR_MRK"eepromRead(): I2C Read-Offset failed on "
+ "%d/%d/0x%X aS=%d",
+ i_i2cInfo.port, i_i2cInfo.engine,
+ i_i2cInfo.devAddr, byteAddrSize);
+ TRACFBIN(g_trac_eeprom, "byteAddr[]",
+ &byteAddr, byteAddrSize);
+
+ // Don't break here -- error handled below
+ }
+ }
+ else
{
- TRACFCOMP(g_trac_eeprom,
- ERR_MRK"eepromRead(): I2C Read-Offset failed on "
- "%d/%d/0x%X",
- i_i2cInfo.port, i_i2cInfo.engine, i_i2cInfo.devAddr);
+ // Do the actual read via I2C
+ err = deviceOp( DeviceFW::READ,
+ i_target,
+ o_buffer,
+ i_buflen,
+ DEVICE_I2C_ADDRESS( i_i2cInfo.port,
+ i_i2cInfo.engine,
+ i_i2cInfo.devAddr ) );
+
+ if( err )
+ {
+ TRACFCOMP(g_trac_eeprom,
+ ERR_MRK"eepromRead(): I2C Read failed on "
+ "%d/%d/0x%0X", i_i2cInfo.port, i_i2cInfo.engine,
+ i_i2cInfo.devAddr);
+
+ // Don't break here -- error handled below
+ }
+ }
+
+ if ( err == NULL )
+ {
+ // Operation completed successfully
+ // break from retry loop
break;
}
- }
- else
+ else if ( err->reasonCode() != I2C::I2C_NACK_ONLY_FOUND )
+ {
+ // Only retry on NACK failures: break from retry loop
+ TRACFCOMP( g_trac_eeprom, ERR_MRK"eepromRead(): Non-Nack "
+ "Error: rc=0x%X, tgt=0x%X, No Retry (retry=%d)",
+ err->reasonCode(),
+ TARGETING::get_huid(i_target), retry);
+
+ err->collectTrace(EEPROM_COMP_NAME);
+
+ // break from retry loop
+ break;
+ }
+ else // Handle NACK error
+ {
+ // If op will be attempted again: save log and continue
+ if ( retry < EEPROM_MAX_NACK_RETRIES )
+ {
+ // Only save original NACK error
+ if ( err_NACK == NULL )
+ {
+ // Save original NACK error
+ err_NACK = err;
+
+ TRACFCOMP( g_trac_eeprom, ERR_MRK"eepromRead(): "
+ "NACK Error rc=0x%X, eid=%d, tgt=0x%X, "
+ "retry/MAX=%d/%d. Save error and retry",
+ err_NACK->reasonCode(),
+ err_NACK->eid(),
+ TARGETING::get_huid(i_target),
+ retry, EEPROM_MAX_NACK_RETRIES);
+
+ err_NACK->collectTrace(EEPROM_COMP_NAME);
+ }
+ else
+ {
+ // Add data to original NACK error
+ TRACFCOMP( g_trac_eeprom, ERR_MRK"eepromRead(): "
+ "Another NACK Error rc=0x%X, eid=0x%X "
+ "plid=0x%X, tgt=0x%X, retry/MAX=%d/%d. "
+ "Delete error and retry",
+ err->reasonCode(), err->eid(), err->plid(),
+ TARGETING::get_huid(i_target),
+ retry, EEPROM_MAX_NACK_RETRIES);
+
+ ERRORLOG::ErrlUserDetailsString(
+ "Another NACK ERROR found")
+ .addToLog(err_NACK);
+
+ // Delete this new NACK error
+ delete err;
+ err = NULL;
+ }
+
+ // continue to retry
+ continue;
+ }
+ else // no more retries: trace and break
+ {
+ TRACFCOMP( g_trac_eeprom, ERR_MRK"eepromRead(): "
+ "Error rc=0x%X, eid=%d, tgt=0x%X. No More "
+ "Retries (retry/MAX=%d/%d). Returning Error",
+ err->reasonCode(), err->eid(),
+ TARGETING::get_huid(i_target),
+ retry, EEPROM_MAX_NACK_RETRIES);
+
+ err->collectTrace(EEPROM_COMP_NAME);
+
+ // break from retry loop
+ break;
+ }
+ }
+
+ } // end of retry loop
+
+ // Handle saved NACK error, if any
+ if (err_NACK)
{
- // Do the actual read via I2C
- err = deviceOp( DeviceFW::READ,
- i_target,
- o_buffer,
- i_buflen,
- DEVICE_I2C_ADDRESS( i_i2cInfo.port,
- i_i2cInfo.engine,
- i_i2cInfo.devAddr ) );
+ if (err)
+ {
+ // commit original NACK error with new err PLID
+ err_NACK->plid(err->plid());
+ TRACFCOMP(g_trac_eeprom, "eepromRead(): Committing saved NACK "
+ "err eid=0x%X with plid of returned err: 0x%X",
+ err_NACK->eid(), err_NACK->plid());
- if( err )
+ ERRORLOG::ErrlUserDetailsTarget(i_target)
+ .addToLog(err_NACK);
+
+ errlCommit(err_NACK, EEPROM_COMP_ID);
+ }
+ else
{
- TRACFCOMP(g_trac_eeprom,
- ERR_MRK"eepromRead(): I2C Read failed on %d/%d/0x%0X",
- i_i2cInfo.port, i_i2cInfo.engine, i_i2cInfo.devAddr);
- break;
+ // Since we eventually succeeded, delete original NACK error
+ TRACFCOMP(g_trac_eeprom, "eepromRead(): Op successful, "
+ "deleting saved NACK err eid=0x%X, plid=0x%X",
+ err_NACK->eid(), err_NACK->plid());
+
+ delete err_NACK;
+ err_NACK = NULL;
}
}
+
mutex_unlock( &g_eepromMutex );
unlock = false;
@@ -347,11 +476,14 @@ errlHndl_t eepromWrite ( TARGETING::Target * i_target,
eeprom_addr_t i_i2cInfo )
{
errlHndl_t err = NULL;
+ errlHndl_t err_NACK = NULL;
uint8_t byteAddr[MAX_BYTE_ADDR];
size_t byteAddrSize = 0;
uint8_t * newBuffer = NULL;
bool needFree = false;
bool unlock = false;
+ uint32_t data_left = 0;
+ uint32_t diff_wps = 0;
TRACDCOMP( g_trac_eeprom,
ENTER_MRK"eepromWrite()" );
@@ -392,36 +524,29 @@ errlHndl_t eepromWrite ( TARGETING::Target * i_target,
size_t loop_data_length = 0;
size_t total_bytes_written = 0;
+
for ( uint64_t i = 0 ;
- (i * i_i2cInfo.writePageSize) < io_buflen ;
- i++)
+ total_bytes_written < io_buflen ;
+ i++ )
{
+ // Determine how much data can be written in this loop
+ // Can't go over a writePageSize boundary
- if ( (io_buflen - (i * i_i2cInfo.writePageSize) )
- >= i_i2cInfo.writePageSize)
- {
- // Data to write >= to writePageSize, so write
- // the maximum amount: writePageSize
- loop_data_length = i_i2cInfo.writePageSize;
- }
- else
- {
- // Less than writePageSize to write
- loop_data_length = io_buflen % i_i2cInfo.writePageSize;
- }
+ // Total data left to write
+ data_left = io_buflen - total_bytes_written;
- // Add the data the user wanted to write
- memcpy( newBuffer,
- &l_data_ptr[i * i_i2cInfo.writePageSize],
- loop_data_length);
+ // Difference to next writePageSize boundary
+ diff_wps = i_i2cInfo.writePageSize -
+ (i_i2cInfo.offset % i_i2cInfo.writePageSize);
+ // Take the lesser of the 2 options
+ loop_data_length = (data_left < diff_wps ) ? data_left : diff_wps;
+ // Add the data the user wanted to write
+ memcpy( newBuffer,
+ &l_data_ptr[total_bytes_written],
+ loop_data_length );
- // Update the offset for each loop after the first one
- if ( i > 0 )
- {
- i_i2cInfo.offset += i_i2cInfo.writePageSize;
- }
// Setup offset/address parms
err = eepromPrepareAddress( &byteAddr,
@@ -433,19 +558,25 @@ errlHndl_t eepromWrite ( TARGETING::Target * i_target,
break;
}
-
TRACUCOMP(g_trac_eeprom,"eepromWrite() Loop: %d/%d/0x%X "
- "loop=%d, l_d_l=%d, offset=0x%X, bAS=%d",
+ "loop=%d, l_d_l=%d, offset=0x%X, bAS=%d, diffs=%d/%d",
i_i2cInfo.port, i_i2cInfo.engine, i_i2cInfo.devAddr,
- i, loop_data_length, i_i2cInfo.offset, byteAddrSize);
-
-
- // Do the actual data write
- err = deviceOp( DeviceFW::WRITE,
- i_target,
- newBuffer,
- loop_data_length,
- DEVICE_I2C_ADDRESS_OFFSET(
+ i, loop_data_length, i_i2cInfo.offset, byteAddrSize,
+ data_left, diff_wps);
+
+ /***********************************************************/
+ /* Attempt write multiple times ONLY on NACK fails */
+ /***********************************************************/
+ for (uint8_t retry = 0;
+ retry <= EEPROM_MAX_NACK_RETRIES;
+ retry++)
+ {
+ // Do the actual data write
+ err = deviceOp( DeviceFW::WRITE,
+ i_target,
+ newBuffer,
+ loop_data_length,
+ DEVICE_I2C_ADDRESS_OFFSET(
i_i2cInfo.port,
i_i2cInfo.engine,
i_i2cInfo.devAddr,
@@ -453,27 +584,153 @@ errlHndl_t eepromWrite ( TARGETING::Target * i_target,
reinterpret_cast<uint8_t*>(
&byteAddr)));
- if( err )
+
+ if ( err == NULL )
+ {
+ // Operation completed successfully
+ // break from retry loop
+ break;
+ }
+ else if ( err->reasonCode() != I2C::I2C_NACK_ONLY_FOUND )
+ {
+ // Only retry on NACK failures: break from retry loop
+ TRACFCOMP(g_trac_eeprom, ERR_MRK"eepromWrite(): I2C "
+ "Write Non-NACK fail %d/%d/0x%X loop=%d, "
+ "ldl=%d, offset=0x%X, aS=%d, retry=%d",
+ i_i2cInfo.port, i_i2cInfo.engine,
+ i_i2cInfo.devAddr, i, loop_data_length,
+ i_i2cInfo.offset, i_i2cInfo.addrSize, retry);
+
+ err->collectTrace(EEPROM_COMP_NAME);
+
+ // break from retry loop
+ break;
+ }
+ else // Handle NACK error
+ {
+ TRACFCOMP(g_trac_eeprom, ERR_MRK"eepromWrite(): I2C "
+ "Write NACK fail %d/%d/0x%X loop=%d, "
+ "ldl=%d, offset=0x%X, aS=%d",
+ i_i2cInfo.port, i_i2cInfo.engine,
+ i_i2cInfo.devAddr, i, loop_data_length,
+ i_i2cInfo.offset, i_i2cInfo.addrSize);
+
+ // If op will be attempted again: save error and continue
+ if ( retry < EEPROM_MAX_NACK_RETRIES )
+ {
+ // Only save original NACK error
+ if ( err_NACK == NULL )
+ {
+ // Save original NACK error
+ err_NACK = err;
+
+ TRACFCOMP( g_trac_eeprom, ERR_MRK"eepromWrite(): "
+ "Error rc=0x%X, eid=0x%X plid=0x%X, "
+ "tgt=0x%X, retry/MAX=%d/%d. Save error "
+ "and retry",
+ err_NACK->reasonCode(),
+ err_NACK->eid(),
+ err_NACK->plid(),
+ TARGETING::get_huid(i_target),
+ retry, EEPROM_MAX_NACK_RETRIES);
+
+ err_NACK->collectTrace(EEPROM_COMP_NAME);
+ }
+ else
+ {
+ // Add data to original NACK error
+ TRACFCOMP( g_trac_eeprom, ERR_MRK"eepromWrite(): "
+ "Another NACK Error rc=0x%X, eid=0x%X "
+ "plid=0x%X, tgt=0x%X, retry/MAX=%d/%d. "
+ "Delete error and retry",
+ err->reasonCode(), err->eid(),
+ err->plid(),
+ TARGETING::get_huid(i_target),
+ retry, EEPROM_MAX_NACK_RETRIES);
+
+ ERRORLOG::ErrlUserDetailsString(
+ "Another NACK ERROR found")
+ .addToLog(err_NACK);
+
+ // Delete this new NACK error
+ delete err;
+ err = NULL;
+ }
+
+ // continue to retry
+ continue;
+ }
+ else // no more retries: trace and break
+ {
+ TRACFCOMP( g_trac_eeprom, ERR_MRK"eepromWrite(): "
+ "Error rc=0x%X, tgt=0x%X. No More Retries "
+ "(retry/MAX=%d/%d). Returning Error",
+ err->reasonCode(),
+ TARGETING::get_huid(i_target),
+ retry, EEPROM_MAX_NACK_RETRIES);
+
+ err->collectTrace(EEPROM_COMP_NAME);
+
+ // break from retry loop
+ break;
+ }
+ }
+
+ } // end of retry loop
+ /***********************************************************/
+
+ // Handle saved NACK errors, if any
+ if (err_NACK)
{
- TRACFCOMP(g_trac_eeprom,
- ERR_MRK"eepromWrite(): I2C Write failed on %d/%d/0x%X "
- "loop=%d, l_d_l=%d, offset=0x%X, aS=%d",
- i_i2cInfo.port, i_i2cInfo.engine, i_i2cInfo.devAddr, i,
- loop_data_length, i_i2cInfo.offset, i_i2cInfo.addrSize);
+ if (err)
+ {
+ // commit original NACK error with new err PLID
+ err_NACK->plid(err->plid());
+ TRACFCOMP(g_trac_eeprom, "eepromWrite(): Committing saved "
+ "NACK err eid=0x%X with plid of returned err: "
+ "0x%X",
+ err_NACK->eid(), err_NACK->plid());
+ ERRORLOG::ErrlUserDetailsTarget(i_target)
+ .addToLog(err_NACK);
+
+ errlCommit(err_NACK, EEPROM_COMP_ID);
+ }
+ else
+ {
+ // Since we eventually succeeded, delete original NACK error
+ TRACFCOMP(g_trac_eeprom, "eepromWrite(): Op successful, "
+ "deleting saved NACK err eid=0x%X, plid=0x%X",
+ err_NACK->eid(), err_NACK->plid());
+
+ delete err_NACK;
+ err_NACK = NULL;
+ }
+ }
+
+ if ( err )
+ {
// Can't assume that anything was written if
// there was an error, so no update to total_bytes_written
// for this loop
break;
}
- // Wait 5ms for EEPROM o write data to its internal memory
- nanosleep(0,5 * NS_PER_MSEC); // 5 msec
-
+ // Wait for EEPROM to write data to its internal memory
+ // i_i2cInfo.writeCycleTime value in milliseconds
+ nanosleep(0, i_i2cInfo.writeCycleTime * NS_PER_MSEC);
// Update how much data was written
total_bytes_written += loop_data_length;
+ // Update offset
+ i_i2cInfo.offset += loop_data_length;
+
+ TRACUCOMP(g_trac_eeprom,"eepromWrite() Loop %d End: "
+ "l_d_l=%d, offset=0x%X, t_b_w=%d, io_buflen=%d",
+ i, loop_data_length, i_i2cInfo.offset,
+ total_bytes_written, io_buflen);
+
} // end of write for-loop
// Release mutex lock
@@ -510,6 +767,7 @@ errlHndl_t eepromWrite ( TARGETING::Target * i_target,
EXIT_MRK"eepromWrite()" );
return err;
+
} // end eepromWrite
@@ -710,6 +968,7 @@ errlHndl_t eepromReadAttributes ( TARGETING::Target * i_target,
o_i2cInfo.i2cMasterPath = eepromData.i2cMasterPath;
o_i2cInfo.writePageSize = eepromData.writePageSize;
o_i2cInfo.devSize_KB = eepromData.maxMemorySizeKB;
+ o_i2cInfo.writeCycleTime = eepromData.writeCycleTime;
// Convert attribute info to eeprom_addr_size_t enum
if ( eepromData.byteAddrOffset == 0x2 )
@@ -754,10 +1013,11 @@ errlHndl_t eepromReadAttributes ( TARGETING::Target * i_target,
} while( 0 );
TRACUCOMP(g_trac_eeprom,"eepromReadAttributes() %d/%d/0x%X "
- "wpw=0x%X, dsKb=0x%X, aS=%d (%d)",
+ "wpw=0x%X, dsKb=0x%X, aS=%d (%d), wct=%d",
o_i2cInfo.port, o_i2cInfo.engine, o_i2cInfo.devAddr,
o_i2cInfo.writePageSize, o_i2cInfo.devSize_KB,
- o_i2cInfo.addrSize, eepromData.byteAddrOffset);
+ o_i2cInfo.addrSize, eepromData.byteAddrOffset,
+ o_i2cInfo.writeCycleTime);
TRACDCOMP( g_trac_eeprom,
diff --git a/src/usr/i2c/eepromdd.H b/src/usr/i2c/eepromdd.H
index d30862b62..69e9c7b17 100755
--- a/src/usr/i2c/eepromdd.H
+++ b/src/usr/i2c/eepromdd.H
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2011,2013 */
+/* COPYRIGHT International Business Machines Corp. 2011,2014 */
/* */
/* p1 */
/* */
@@ -65,6 +65,7 @@ typedef struct
TARGETING::EntityPath i2cMasterPath;
uint64_t writePageSize; // in bytes
uint64_t devSize_KB; // in kilobytes
+ uint64_t writeCycleTime; // in milliseconds
} eeprom_addr_t;
/**
diff --git a/src/usr/i2c/i2c.C b/src/usr/i2c/i2c.C
index 8c2656f18..1f5cf336a 100755
--- a/src/usr/i2c/i2c.C
+++ b/src/usr/i2c/i2c.C
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2011,2013 */
+/* COPYRIGHT International Business Machines Corp. 2011,2014 */
/* */
/* p1 */
/* */
@@ -65,8 +65,7 @@ TRAC_INIT( & g_trac_i2cr, "I2CR", KILOBYTE );
// ----------------------------------------------
// Defines
// ----------------------------------------------
-#define I2C_COMMAND_ATTEMPTS 2 // 1 Retry on failure
-#define I2C_RETRY_DELAY 10000000 // Sleep for 10 ms before retrying
+#define I2C_RESET_DELAY_NS (5 * NS_PER_MSEC) // Sleep for 5 ms after reset
#define MAX_I2C_ENGINES 3 // Maximum of 3 engines per I2C Master
#define P8_MASTER_ENGINES 2 // Number of Engines used in P8
#define CENTAUR_MASTER_ENGINES 1 // Number of Engines in a Centaur
@@ -98,6 +97,7 @@ errlHndl_t i2cPerformOp( DeviceFW::OperationType i_opType,
va_list i_args )
{
errlHndl_t err = NULL;
+ errlHndl_t err_reset = NULL;
mutex_t * engineLock = NULL;
bool mutex_needs_unlock = false;
@@ -204,169 +204,180 @@ errlHndl_t i2cPerformOp( DeviceFW::OperationType i_opType,
if( err )
{
+ // Skip performing the actual I2C Operation
break;
}
- for( int attempt = 0; attempt < I2C_COMMAND_ATTEMPTS; attempt++ )
+ /*******************************************************/
+ /* Perform the I2C Operation */
+ /*******************************************************/
+
+ /***********************************************/
+ /* I2C Read with Offset */
+ /***********************************************/
+ if( i_opType == DeviceFW::READ &&
+ l_offset_length != 0 )
{
- if( err )
- {
- // Catch and commit the log here if we failed on first attempt.
- TRACFCOMP( g_trac_i2c,
- ERR_MRK"Error Encountered, Attempt %d out of %d",
- (attempt + 1), // Add 1 since we started counting at 0
- I2C_COMMAND_ATTEMPTS );
- errlCommit( err,
- I2C_COMP_ID );
+ // First WRITE offset to device without a stop
+ args.read_not_write = false;
+ args.with_stop = false;
+ args.skip_mode_setup = false;
- // Reset the I2C Master
- err = i2cReset( i_target,
- args );
+ err = i2cWrite( i_target,
+ l_offset_buffer,
+ l_offset_length,
+ args );
- if( err )
- {
- break;
- }
+ if( err == NULL )
+ {
+ // Now do the READ with a stop
+ args.read_not_write = true;
+ args.with_stop = true;
- // Sleep before trying again.
- nanosleep( 0, I2C_RETRY_DELAY );
- }
+ // Skip mode setup on this cmd -
+ // already set with previous cmd
+ args.skip_mode_setup = true;
+ err = i2cRead( i_target,
+ io_buffer,
+ io_buflen,
+ args );
+ }
+ }
- if( i_opType == DeviceFW::READ &&
- l_offset_length != 0 )
- {
+ /***********************************************/
+ /* I2C Write with Offset */
+ /***********************************************/
+ else if( i_opType == DeviceFW::WRITE &&
+ l_offset_length != 0 )
+ {
- // First WRITE offset to device without a stop
- args.read_not_write = false;
- args.with_stop = false;
- args.skip_mode_setup = false;
+ // Add the Offset Information to the start of the data and
+ // then send as a single write operation
- err = i2cWrite( i_target,
- l_offset_buffer,
- l_offset_length,
- args );
+ size_t newBufLen = l_offset_length + io_buflen;
+ uint8_t * newBuffer = static_cast<uint8_t*>(malloc(newBufLen));
- if( err == NULL )
- {
- // Now do the READ with a stop
- args.read_not_write = true;
- args.with_stop = true;
-
- // Skip mode setup on this cmd -
- // already set with previous cmd
- args.skip_mode_setup = true;
-
- err = i2cRead( i_target,
- io_buffer,
- io_buflen,
- args );
- }
- }
+ // Add the Offset to the buffer
+ memcpy( newBuffer, l_offset_buffer, l_offset_length);
- else if( i_opType == DeviceFW::WRITE &&
- l_offset_length != 0 )
- {
+ // Now add the data the user wanted to write
+ memcpy( &newBuffer[l_offset_length], io_buffer, io_buflen);
- // Add the Offset Information to the start of the data and
- // then send as a single write operation
+ // Write parms:
+ args.read_not_write = false;
+ args.with_stop = true;
+ args.skip_mode_setup = false;
- size_t newBufLen = l_offset_length + io_buflen;
- uint8_t * newBuffer = static_cast<uint8_t*>(malloc(newBufLen));
+ err = i2cWrite( i_target,
+ newBuffer,
+ newBufLen,
+ args );
- // Add the Offset to the buffer
- memcpy( newBuffer, l_offset_buffer, l_offset_length);
- // Now add the data the user wanted to write
- memcpy( &newBuffer[l_offset_length], io_buffer, io_buflen);
+ free( newBuffer );
- // Write parms:
- args.read_not_write = false;
- args.with_stop = true;
- args.skip_mode_setup = false;
+ }
- err = i2cWrite( i_target,
- newBuffer,
- newBufLen,
- args );
+ /***********************************************/
+ /* I2C Read (no offset) */
+ /***********************************************/
+ else if ( i_opType == DeviceFW::READ &&
+ l_offset_length == 0 )
+ {
+ // Do a direct READ
+ args.read_not_write = true;
+ args.with_stop = true;
+ args.skip_mode_setup = false;
+
+ err = i2cRead( i_target,
+ io_buffer,
+ io_buflen,
+ args);
+ }
- free( newBuffer );
+ /***********************************************/
+ /* I2C Write (no offset) */
+ /***********************************************/
+ else if( i_opType == DeviceFW::WRITE &&
+ l_offset_length == 0 )
+ {
+ // Do a direct WRITE with a stop
+ args.read_not_write = false;
+ args.with_stop = true;
+ args.skip_mode_setup = false;
+
+ err = i2cWrite( i_target,
+ io_buffer,
+ io_buflen,
+ args);
+ }
- }
+ /********************************************************/
+ /* Error - Unsupported I2C Op/Offset Type Combination */
+ /********************************************************/
+ else
+ {
+ TRACFCOMP( g_trac_i2c, ERR_MRK"i2cPerformOp() - "
+ "Unsupported Op/Offset-Type Combination=%d/%d",
+ i_opType, l_offset_length );
+ uint64_t userdata2 = l_offset_length;
+ userdata2 = (userdata2 << 16) | args.port;
+ userdata2 = (userdata2 << 16) | args.engine;
+ userdata2 = (userdata2 << 16) | args.devAddr;
- else if ( i_opType == DeviceFW::READ &&
- l_offset_length == 0 )
- {
- // Do a direct READ
- args.read_not_write = true;
- args.with_stop = true;
- args.skip_mode_setup = false;
+ /*@
+ * @errortype
+ * @reasoncode I2C_INVALID_OP_TYPE
+ * @severity ERRL_SEV_UNRECOVERABLE
+ * @moduleid I2C_PERFORM_OP
+ * @userdata1 i_opType
+ * @userdata2[0:15] Offset Length
+ * @userdata2[16:31] Master Port
+ * @userdata2[32:47] Master Engine
+ * @userdata2[48:63] Slave Device Address
+ * @devdesc Invalid Operation type.
+ */
+ err = new ERRORLOG::ErrlEntry( ERRORLOG::ERRL_SEV_UNRECOVERABLE,
+ I2C_PERFORM_OP,
+ I2C_INVALID_OP_TYPE,
+ i_opType,
+ userdata2 );
- err = i2cRead( i_target,
- io_buffer,
- io_buflen,
- args);
- }
+ // No Operation performed, so can break and skip the section
+ // that handles operation errors
+ break;
+ }
+ // Handle Error from I2C Operation
+ if( err )
+ {
+ // Reset the I2C Master
+ err_reset = i2cReset( i_target,
+ args );
- else if( i_opType == DeviceFW::WRITE &&
- l_offset_length == 0 )
- {
- // Do a direct WRITE with a stop
- args.read_not_write = false;
- args.with_stop = true;
- args.skip_mode_setup = false;
-
- err = i2cWrite( i_target,
- io_buffer,
- io_buflen,
- args);
- }
- else
+ if( err_reset )
{
+ // 2 error logs, so commit the reset log here
TRACFCOMP( g_trac_i2c, ERR_MRK"i2cPerformOp() - "
- "Unsupported Op/Offset-Type Combination=%d/%d",
- i_opType, l_offset_length );
- uint64_t userdata2 = l_offset_length;
- userdata2 = (userdata2 << 16) | args.port;
- userdata2 = (userdata2 << 16) | args.engine;
- userdata2 = (userdata2 << 16) | args.devAddr;
+ "Previous error (rc=0x%X, eid=0x%X) before "
+ "i2cReset() failed. Committing reset error "
+ "(rc=0x%X, eid=0x%X) and returning original error",
+ err->reasonCode(), err->eid(),
+ err_reset->reasonCode(), err_reset->eid() );
- /*@
- * @errortype
- * @reasoncode I2C_INVALID_OP_TYPE
- * @severity ERRL_SEV_UNRECOVERABLE
- * @moduleid I2C_PERFORM_OP
- * @userdata1 i_opType
- * @userdata2[0:15] Offset Length
- * @userdata2[16:31] Master Port
- * @userdata2[32:47] Master Engine
- * @userdata2[48:63] Slave Device Address
- * @devdesc Invalid Operation type.
- */
- err = new ERRORLOG::ErrlEntry( ERRORLOG::ERRL_SEV_UNRECOVERABLE,
- I2C_PERFORM_OP,
- I2C_INVALID_OP_TYPE,
- i_opType,
- userdata2 );
-
- break;
+ errlCommit( err_reset, I2C_COMP_ID );
}
- // If no errors, break here
- if( err == NULL )
- {
- break;
- }
- }
+ // Sleep to allow devices to recover from reset
+ nanosleep( 0, I2C_RESET_DELAY_NS );
- if( err )
- {
break;
}
+
} while( 0 );
// Check if we need to unlock the mutex
@@ -895,6 +906,7 @@ errlHndl_t i2cCheckForErrors ( TARGETING::Target * i_target,
{
errlHndl_t err = NULL;
bool errorFound = false;
+ bool nackFound = false;
uint64_t intRegVal = 0x0;
TRACDCOMP( g_trac_i2c,
@@ -944,7 +956,8 @@ errlHndl_t i2cCheckForErrors ( TARGETING::Target * i_target,
if( 1 == i_statusVal.nack_received )
{
- errorFound = true;
+ // Rather than using 'errorFound', use specific nackFound
+ nackFound = true;
TRACFCOMP( g_trac_i2c,
ERR_MRK"I2C NACK Received! - status reg: %016llx",
i_statusVal.value );
@@ -983,7 +996,7 @@ errlHndl_t i2cCheckForErrors ( TARGETING::Target * i_target,
if( errorFound )
{
TRACFCOMP( g_trac_i2c,
- ERR_MRK"i2cCheckForErrors() - Error(s) found after command complete!" );
+ ERR_MRK"i2cCheckForErrors() - Error(s) found" );
/*@
* @errortype
@@ -1005,6 +1018,33 @@ errlHndl_t i2cCheckForErrors ( TARGETING::Target * i_target,
break;
}
+
+ else if ( nackFound )
+ {
+ TRACFCOMP( g_trac_i2c,
+ ERR_MRK"i2cCheckForErrors() - NACK found (only error)" );
+
+ /*@
+ * @errortype
+ * @reasoncode I2C_NACK_ONLY_FOUND
+ * @severity ERRL_SEV_UNRECOVERABLE
+ * @moduleid I2C_CHECK_FOR_ERRORS
+ * @userdata1 Status Register Value
+ * @userdata2 Interrupt Register Value
+ * @devdesc Error was found in I2C status register. Check
+ * userdata1 to determine what the error was.
+ */
+ err = new ERRORLOG::ErrlEntry( ERRORLOG::ERRL_SEV_UNRECOVERABLE,
+ I2C_CHECK_FOR_ERRORS,
+ I2C_NACK_ONLY_FOUND,
+ i_statusVal.value,
+ intRegVal );
+
+ // @todo RTC:69113 - Add target and I2C traces to the errorlog.
+
+ break;
+ }
+
} while( 0 );
TRACDCOMP( g_trac_i2c,
@@ -1189,7 +1229,7 @@ errlHndl_t i2cSendSlaveStop ( TARGETING::Target * i_target,
TRACUCOMP(g_trac_i2c,"i2cSendSlaveStop(): "
"mode[0x%lx]: 0x%016llx",
- masterAddrs[engine].mode, mode.value );
+ masterAddrs[i_args.engine].mode, mode.value );
err = deviceWrite( i_target,
&mode.value,
@@ -1207,7 +1247,7 @@ errlHndl_t i2cSendSlaveStop ( TARGETING::Target * i_target,
TRACUCOMP(g_trac_i2c,"i2cSendSlaveStop(): "
"cmd[0x%lx]: 0x%016llx",
- masterAddrs[engine].command, cmd.value );
+ masterAddrs[i_args.engine].command, cmd.value );
err = deviceWrite( i_target,
&cmd.value,
@@ -1269,7 +1309,7 @@ errlHndl_t i2cGetInterrupts ( TARGETING::Target * i_target,
TRACUCOMP(g_trac_i2c,"i2cGetInterrupts(): "
"interrupt[0x%lx]: 0x%016llx",
- masterAddrs[engine].interrupt, intreg.value );
+ masterAddrs[i_args.engine].interrupt, intreg.value );
// Return the data read
o_intRegValue = intreg.value;
@@ -1598,7 +1638,6 @@ errlHndl_t i2cSetBusVariables ( TARGETING::Target * i_target,
} while( 0 );
-
TRACUCOMP(g_trac_i2c,"i2cSetBusVariables(): e/p/dA=%d/%d/0x%x: "
"mode=%d: b_sp=%d, b_r_d=0x%x, to_i=%d, to_c = %d",
io_args.engine, io_args.port, io_args.devAddr,
diff --git a/src/usr/i2c/i2c.H b/src/usr/i2c/i2c.H
index e864df093..329877376 100755
--- a/src/usr/i2c/i2c.H
+++ b/src/usr/i2c/i2c.H
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2011,2013 */
+/* COPYRIGHT International Business Machines Corp. 2011,2014 */
/* */
/* p1 */
/* */
@@ -53,13 +53,13 @@ namespace I2C
/**
* @brief I2C Clock setting values
*
- * The clock divisors are found by using a 600Mhz local bus, using the
+ * The clock divisors are found by using a 500Mhz local bus, using the
* equation that was given in the I2C Master Spec.
*
*/
#define I2C_MAX_BUS_SPEED 400
-#define I2C_CLOCK_DIVISOR_100KHZ 1499 // 0x5DB
-#define I2C_CLOCK_DIVISOR_400KHZ 374 // 0x176
+#define I2C_CLOCK_DIVISOR_100KHZ 1250 // 0x4E2
+#define I2C_CLOCK_DIVISOR_400KHZ 312 // 0x138
/**
* @brief I2C Clock delay polling values
diff --git a/src/usr/i2c/test/eepromddtest.H b/src/usr/i2c/test/eepromddtest.H
index 4cd4fad37..fdf55dd8d 100755
--- a/src/usr/i2c/test/eepromddtest.H
+++ b/src/usr/i2c/test/eepromddtest.H
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2011,2013 */
+/* COPYRIGHT International Business Machines Corp. 2011,2014 */
/* */
/* p1 */
/* */
@@ -76,24 +76,28 @@ class EEPROMTest: public CxxTest::TestSuite
} testData[] =
{
-
// MVPD of processor - chip 0
- // Write:
- { 0x0000, VPD_PRIMARY, 0xfedcba9876543210, 8, false },
- // Read:
- { 0x0000, VPD_PRIMARY, 0xfedcba9876543210, 8, true },
+ // Read - Only
+ { 0x0000, VPD_PRIMARY, 0x000f17ba00000000, 4, true },
// SBE Primary of processor - chip 2
- // Write:
- { 0x0100, SBE_PRIMARY, 0xaabb000000000000, 2, false },
+ // Write: over 128-byte page boundary:
+ { 0x017F, SBE_PRIMARY, 0xaabb000000000000, 2, false },
+ // Read:
+ { 0x017F, SBE_PRIMARY, 0xaabb000000000000, 2, true },
+
+ // SBE Backup of processor - chip 3
+ // Write: over 256-byte page boundary:
+ { 0x01FD, SBE_BACKUP, 0x1122334400000000, 4, false },
// Read:
- { 0x0100, SBE_PRIMARY, 0xaabb000000000000, 2, true },
+ { 0x01FD, SBE_BACKUP, 0x1122334400000000, 4, true },
// SBE Backup of processor - chip 3
- // Write:
- { 0x00F0, SBE_BACKUP, 0x1122334400000000, 4, false },
+ // Write: inside 128 page boundary:
+ { 0x005B, SBE_BACKUP, 0xbad5adcabf0b7000, 7, false },
// Read:
- { 0x00F0, SBE_BACKUP, 0x1122334400000000, 4, true },
+ { 0x005B, SBE_BACKUP, 0xbad5adcabf0b7000, 7, true },
+
};
const uint32_t NUM_CMDS = sizeof(testData)/sizeof(testData[0]);
@@ -157,7 +161,7 @@ class EEPROMTest: public CxxTest::TestSuite
{
uint64_t data;
- // if a read, initialize data, else, set data to write
+ // if a read, clear data; else, set data to write
if( testData[i].rnw )
{
data = 0x0ull;
@@ -214,12 +218,12 @@ class EEPROMTest: public CxxTest::TestSuite
/**
* @brief EEPROM Read/Write Large Test
- * This test will read and write 1KB of data to SBE Backup
+ * This test will read and write 603 bytes of data to SBE Backup
* VPD. It will attempt to restore the original data at
* the end of the test.
*
- * Note: 1st 1K of SBE EEPROM data is currently blank, so this
- * test will read and write to that address space
+ * Note: 1st 768 bytes of SBE EEPROM data is currently blank, so
+ * this test will read and write below that address space
*/
void testEEPROMReadWriteLarge ( void )
{
@@ -228,12 +232,15 @@ class EEPROMTest: public CxxTest::TestSuite
int num_ops = 0;
int cmds = 0;
- // Create 1KB buffers
- size_t testBufLen = 1024;
+ // Create 603-byte buffers
+ size_t testBufLen = 603;
uint8_t testBuffer[testBufLen];
uint8_t new_data[testBufLen];
uint8_t original_data[testBufLen];
+ // Use small offset to force more complicated page-boundary testing
+ uint8_t offset = 0x11;
+
TRACFCOMP( g_trac_eeprom,
"testEEPROMReadWriteLarge - Start" );
@@ -255,7 +262,7 @@ class EEPROMTest: public CxxTest::TestSuite
TargetHandleList fullList;
fullList.push_back( testTarget );
- // 5 operations of 1K data per target (details below)
+ // 5 operations per target (details below)
const uint32_t NUM_CMDS = 5;
// Number of total operations
@@ -297,10 +304,9 @@ class EEPROMTest: public CxxTest::TestSuite
}
- // Valid Buffer, so memcpy the first 1KB
+ // Valid Buffer, so memcpy the first 603 bytes
memcpy( new_data, tmp_ptr, testBufLen );
-
/************************************************************/
/* Loop through targets and perform operations */
/************************************************************/
@@ -318,11 +324,9 @@ class EEPROMTest: public CxxTest::TestSuite
// Before starting, clear original data buffer
memset(original_data, 0x0, testBufLen);
-
for (uint8_t j = 1; j <= NUM_CMDS; j++)
{
-
- // Details: 5 operations of 1K data per target
+ // Details: 5 operations per target
// 1) Read Original Data and Save It
// 2) Write New Data
// 3) Read New Data and Compare
@@ -356,7 +360,8 @@ class EEPROMTest: public CxxTest::TestSuite
fullList[0],
testBuffer,
testBufLen,
- DEVICE_EEPROM_ADDRESS(SBE_BACKUP,0x0));
+ DEVICE_EEPROM_ADDRESS(SBE_BACKUP,
+ offset));
if( err )
{
@@ -550,7 +555,6 @@ class EEPROMTest: public CxxTest::TestSuite
// Set max length and offset
dataSize = 0xFFFFFFFFFFFFFFFF;
offset = 0xFFFFFFFFFFFFFFFF;
-
num_ops++;
err = deviceOp( DeviceFW::WRITE,
testTarget,
@@ -578,7 +582,7 @@ class EEPROMTest: public CxxTest::TestSuite
} while( 0 );
TRACFCOMP( g_trac_eeprom,
- "testEEPROMInvalidChip - End: %d/%d fails",
+ "testEEPROMOverflow - End: %d/%d fails",
fails, num_ops );
}
diff --git a/src/usr/i2c/test/i2ctest.H b/src/usr/i2c/test/i2ctest.H
index 0224d8dd8..46e5efd59 100755
--- a/src/usr/i2c/test/i2ctest.H
+++ b/src/usr/i2c/test/i2ctest.H
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2011,2013 */
+/* COPYRIGHT International Business Machines Corp. 2011,2014 */
/* */
/* p1 */
/* */
@@ -68,7 +68,6 @@ class I2CTest: public CxxTest::TestSuite
*/
void testI2CDirect ( void )
{
-
errlHndl_t err = NULL;
int cmds = 0;
int fails = 0;
@@ -115,58 +114,58 @@ class I2CTest: public CxxTest::TestSuite
// Read/Write SBE Primary: Murano-0, port-0
// Safe to write to first 0x300: 0x0-0x2FF
- { 0x00, 0x00, 0xAC, 0x0000ababcdcdefef,
- 8, false, TARGETING::TYPE_PROC }, // Write data to 0x0000
+ { 0x00, 0x00, 0xAC, 0x0020ababcdcdefef,
+ 8, false, TARGETING::TYPE_PROC }, // Write data to 0x0020
- { 0x00, 0x00, 0xAC, 0x0000000000000000,
+ { 0x00, 0x00, 0xAC, 0x0020000000000000,
2, false, TARGETING::TYPE_PROC }, // Write addr for read
{ 0x00, 0x00, 0xAc, 0xababcdcdefef0000,
6, true, TARGETING::TYPE_PROC }, // Read data back
- { 0x00, 0x00, 0xAC, 0x0003000000000000,
+ { 0x00, 0x00, 0xAC, 0x0023000000000000,
2, false, TARGETING::TYPE_PROC }, // Write addr for read
{ 0x00, 0x00, 0xAC, 0xcdefef0000000000,
3, true, TARGETING::TYPE_PROC }, // Read data back
- { 0x00, 0x00, 0xAC, 0x0005ee1200000000,
- 4, false, TARGETING::TYPE_PROC }, // Write data to 0x0005
+ { 0x00, 0x00, 0xAC, 0x0025831200000000,
+ 4, false, TARGETING::TYPE_PROC }, // Write data to 0x0025
- { 0x00, 0x00, 0xAC, 0x0005000000000000,
+ { 0x00, 0x00, 0xAC, 0x0024000000000000,
2, false, TARGETING::TYPE_PROC }, // Write addr for read
- { 0x00, 0x00, 0xAC, 0xee12000000000000,
- 2, true, TARGETING::TYPE_PROC }, // Read data back
+ { 0x00, 0x00, 0xAC, 0xef83120000000000,
+ 3, true, TARGETING::TYPE_PROC }, // Read data back
// Read/Write SBE Backup: Murano-0, port-0
// Safe to write to first 0x300: 0x0-0x2FF
- { 0x00, 0x00, 0xAE, 0x0000ababcdcdefef,
- 8, false, TARGETING::TYPE_PROC }, // Write data to 0x0000
+ { 0x00, 0x00, 0xAE, 0x0030ababcdcdefef,
+ 8, false, TARGETING::TYPE_PROC }, // Write data to 0x0030
- { 0x00, 0x00, 0xAE, 0x0000000000000000,
+ { 0x00, 0x00, 0xAE, 0x0030000000000000,
2, false, TARGETING::TYPE_PROC }, // Write addr for read
{ 0x00, 0x00, 0xAE, 0xababcdcdefef0000,
6, true, TARGETING::TYPE_PROC }, // Read data back
- { 0x00, 0x00, 0xAE, 0x0003000000000000,
+ { 0x00, 0x00, 0xAE, 0x0033000000000000,
2, false, TARGETING::TYPE_PROC }, // Write addr for read
{ 0x00, 0x00, 0xAE, 0xcdefef0000000000,
3, true, TARGETING::TYPE_PROC }, // Read data back
- { 0x00, 0x00, 0xAE, 0x0005ee1200000000,
- 4, false, TARGETING::TYPE_PROC }, // Write data to 0x0005
+ { 0x00, 0x00, 0xAE, 0x0035971200000000,
+ 4, false, TARGETING::TYPE_PROC }, // Write data to 0x0035
- { 0x00, 0x00, 0xAE, 0x0005000000000000,
+ { 0x00, 0x00, 0xAE, 0x0034000000000000,
2, false, TARGETING::TYPE_PROC }, // Write addr for read
- { 0x00, 0x00, 0xAE, 0xee12000000000000,
- 2, true, TARGETING::TYPE_PROC }, // Read data back
+ { 0x00, 0x00, 0xAE, 0xef97120000000000,
+ 3, true, TARGETING::TYPE_PROC }, // Read data back
// MEMBUF TESTS
@@ -310,6 +309,13 @@ class I2CTest: public CxxTest::TestSuite
continue;
}
+ // If a write op, wait 5ms for EEPROM to write data
+ // to its internal memory
+ if (testData[i].rnw == false)
+ {
+ nanosleep(0,5 * NS_PER_MSEC); // 5 msec
+ }
+
// compare data for the read, but ignore case where
// data = I2C_TEST_IGNORE_DATA_COMPARE
if( ( testData[i].rnw ) &&
@@ -346,7 +352,6 @@ class I2CTest: public CxxTest::TestSuite
*/
void testI2COffset ( void )
{
-
errlHndl_t err = NULL;
int cmds = 0;
int fails = 0;
@@ -492,7 +497,6 @@ class I2CTest: public CxxTest::TestSuite
// Before starting, clear original data buffer
original_data = 0x0ull;
-
for (uint8_t j = 1; j <= 5; j++)
{
@@ -535,6 +539,14 @@ class I2CTest: public CxxTest::TestSuite
continue;
}
+
+ // If a write op, wait 5ms for EEPROM to write data
+ // to its internal memory
+ if ( (j%2) == 0 )
+ {
+ nanosleep(0,5 * NS_PER_MSEC); // 5 msec
+ }
+
// Handle loop-specific results
// For Loop 1: save original data
diff --git a/src/usr/targeting/common/genHwsvMrwXml.pl b/src/usr/targeting/common/genHwsvMrwXml.pl
index 09ed90a66..7bd8bdca7 100755
--- a/src/usr/targeting/common/genHwsvMrwXml.pl
+++ b/src/usr/targeting/common/genHwsvMrwXml.pl
@@ -3238,6 +3238,7 @@ sub addEeproms
print " <field><id>byteAddrOffset</id><value>0x02</value></field>\n";
print " <field><id>maxMemorySizeKB</id><value>0x40</value></field>\n";
print " <field><id>writePageSize</id><value>0x80</value></field>\n";
+ print " <field><id>writeCycleTime</id><value>0x05</value></field>\n";
print " </default>\n";
print " </attribute>\n";
}
diff --git a/src/usr/targeting/common/xmltohb/attribute_types.xml b/src/usr/targeting/common/xmltohb/attribute_types.xml
index ed4be7400..2741fd408 100644
--- a/src/usr/targeting/common/xmltohb/attribute_types.xml
+++ b/src/usr/targeting/common/xmltohb/attribute_types.xml
@@ -1078,6 +1078,14 @@
<type>uint64_t</type>
<default>0x0</default>
</field>
+ <field>
+ <name>writeCycleTime</name>
+ <description>The amount of time in milliseconds a device requires
+ on the completion of a write command to update its
+ internal memory.</description>
+ <type>uint64_t</type>
+ <default>0x0</default>
+ </field>
</complexType>
<persistency>non-volatile</persistency>
<readable/>
@@ -1139,6 +1147,14 @@
<type>uint64_t</type>
<default>0x0</default>
</field>
+ <field>
+ <name>writeCycleTime</name>
+ <description>The amount of time in milliseconds a device requires
+ on the completion of a write command to update its
+ internal memory.</description>
+ <type>uint64_t</type>
+ <default>0x0</default>
+ </field>
</complexType>
<persistency>non-volatile</persistency>
<readable/>
@@ -1200,6 +1216,14 @@
<type>uint64_t</type>
<default>0x0</default>
</field>
+ <field>
+ <name>writeCycleTime</name>
+ <description>The amount of time in milliseconds a device requires
+ on the completion of a write command to update its
+ internal memory.</description>
+ <type>uint64_t</type>
+ <default>0x0</default>
+ </field>
</complexType>
<persistency>non-volatile</persistency>
<readable/>
@@ -1261,6 +1285,14 @@
<type>uint64_t</type>
<default>0x0</default>
</field>
+ <field>
+ <name>writeCycleTime</name>
+ <description>The amount of time in milliseconds a device requires
+ on the completion of a write command to update its
+ internal memory.</description>
+ <type>uint64_t</type>
+ <default>0x0</default>
+ </field>
</complexType>
<persistency>non-volatile</persistency>
<readable/>
diff --git a/src/usr/targeting/common/xmltohb/simics_MURANO.system.xml b/src/usr/targeting/common/xmltohb/simics_MURANO.system.xml
index 528dfc8a9..ceb8b7c2a 100644
--- a/src/usr/targeting/common/xmltohb/simics_MURANO.system.xml
+++ b/src/usr/targeting/common/xmltohb/simics_MURANO.system.xml
@@ -5,7 +5,7 @@
<!-- -->
<!-- IBM CONFIDENTIAL -->
<!-- -->
-<!-- COPYRIGHT International Business Machines Corp. 2011,2013 -->
+<!-- COPYRIGHT International Business Machines Corp. 2011,2014 -->
<!-- -->
<!-- p1 -->
<!-- -->
@@ -536,6 +536,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -548,6 +549,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -560,6 +562,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -572,6 +575,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -1351,6 +1355,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -1363,6 +1368,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -1375,6 +1381,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -1387,6 +1394,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -2168,6 +2176,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -2180,6 +2189,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -2192,6 +2202,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -2204,6 +2215,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -2985,6 +2997,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -2997,6 +3010,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -3009,6 +3023,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -3021,6 +3036,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -3601,6 +3617,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -3714,6 +3731,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -3827,6 +3845,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -3940,6 +3959,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -4052,6 +4072,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -4165,6 +4186,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -4278,6 +4300,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -4391,6 +4414,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -4503,6 +4527,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -4616,6 +4641,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -4729,6 +4755,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -4842,6 +4869,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -4954,6 +4982,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -5067,6 +5096,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -5180,6 +5210,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -5293,6 +5324,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
diff --git a/src/usr/targeting/common/xmltohb/simics_VENICE.system.xml b/src/usr/targeting/common/xmltohb/simics_VENICE.system.xml
index 1fd97bc16..73bd11630 100644
--- a/src/usr/targeting/common/xmltohb/simics_VENICE.system.xml
+++ b/src/usr/targeting/common/xmltohb/simics_VENICE.system.xml
@@ -5,7 +5,7 @@
<!-- -->
<!-- IBM CONFIDENTIAL -->
<!-- -->
-<!-- COPYRIGHT International Business Machines Corp. 2011,2013 -->
+<!-- COPYRIGHT International Business Machines Corp. 2011,2014 -->
<!-- -->
<!-- p1 -->
<!-- -->
@@ -528,6 +528,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -540,6 +541,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -552,6 +554,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -564,6 +567,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -1706,6 +1710,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -1718,6 +1723,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -1730,6 +1736,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -1742,6 +1749,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -2884,6 +2892,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -2896,6 +2905,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -2908,6 +2918,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -2920,6 +2931,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -4062,6 +4074,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -4074,6 +4087,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -4086,6 +4100,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -4098,6 +4113,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -5239,6 +5255,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -5251,6 +5268,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -5263,6 +5281,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -5275,6 +5294,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -6385,6 +6405,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -6397,6 +6418,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -6409,6 +6431,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -6421,6 +6444,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -7529,6 +7553,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -7541,6 +7566,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -7553,6 +7579,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -7565,6 +7592,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -8673,6 +8701,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -8685,6 +8714,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -8697,6 +8727,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute>
@@ -8709,6 +8740,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x40</value></field>
<field><id>writePageSize</id><value>0x80</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -9616,6 +9648,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -9729,6 +9762,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -9842,6 +9876,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -9955,6 +9990,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -10068,6 +10104,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -10181,6 +10218,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -10294,6 +10332,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -10407,6 +10446,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -10520,6 +10560,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -10633,6 +10674,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -10746,6 +10788,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -10859,6 +10902,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -10972,6 +11016,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -11085,6 +11130,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -11198,6 +11244,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -11311,6 +11358,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -11424,6 +11472,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -11537,6 +11586,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -11650,6 +11700,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -11763,6 +11814,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -11876,6 +11928,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -11989,6 +12042,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -12102,6 +12156,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -12215,6 +12270,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -12328,6 +12384,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -12441,6 +12498,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -12554,6 +12612,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -12667,6 +12726,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -12780,6 +12840,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -12893,6 +12954,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -13006,6 +13068,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -13119,6 +13182,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
<attribute><id>EI_BUS_TX_MSBSWAP</id>
@@ -13232,6 +13296,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -13342,6 +13407,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -13452,6 +13518,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -13562,6 +13629,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -13672,6 +13740,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -13782,6 +13851,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -13892,6 +13962,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -14002,6 +14073,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -14112,6 +14184,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -14222,6 +14295,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -14332,6 +14406,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -14442,6 +14517,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -14552,6 +14628,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -14662,6 +14739,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -14772,6 +14850,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -14882,6 +14961,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -14992,6 +15072,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -15102,6 +15183,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -15212,7 +15294,8 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
- </default>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
+ </default>
</attribute>
</targetInstance>
@@ -15322,6 +15405,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -15432,6 +15516,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -15542,6 +15627,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -15652,6 +15738,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -15762,6 +15849,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -15872,6 +15960,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -15982,6 +16071,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -16092,6 +16182,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -16202,6 +16293,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -16312,6 +16404,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -16422,6 +16515,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -16532,6 +16626,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
@@ -16642,6 +16737,7 @@
<field><id>byteAddrOffset</id><value>0x02</value></field>
<field><id>maxMemorySizeKB</id><value>0x04</value></field>
<field><id>writePageSize</id><value>0x20</value></field>
+ <field><id>writeCycleTime</id><value>0x05</value></field>
</default>
</attribute>
</targetInstance>
OpenPOWER on IntegriCloud