summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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