diff options
author | Adam Muhle <armuhle@us.ibm.com> | 2012-08-17 13:51:12 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2012-09-07 10:28:52 -0500 |
commit | e859413ac33a2fb410c83cc8af4bf755181791e9 (patch) | |
tree | 85eeb14553a459f99bdaa3bfb61b8323d8de08da /src/usr/pnor/pnordd.C | |
parent | e11fc0f4d161de3c24452ec3de9f023d60742181 (diff) | |
download | talos-hostboot-e859413ac33a2fb410c83cc8af4bf755181791e9.tar.gz talos-hostboot-e859413ac33a2fb410c83cc8af4bf755181791e9.zip |
Re-enable PNORDD fake-pnor test cases
Setup fake-pnor related test cases to malloc memory and
treat as fake-pnor. This allows testing fake-pnor without
requiring a reserved chunk of L3 to use as fake-pnor space.
Change-Id: I24d7176b8ae7ff57839b1f5349be86d7d239ee58
RTC: 44938
Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/1557
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Tested-by: Jenkins Server
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/pnor/pnordd.C')
-rw-r--r-- | src/usr/pnor/pnordd.C | 151 |
1 files changed, 99 insertions, 52 deletions
diff --git a/src/usr/pnor/pnordd.C b/src/usr/pnor/pnordd.C index cf9b12134..62982163a 100644 --- a/src/usr/pnor/pnordd.C +++ b/src/usr/pnor/pnordd.C @@ -1,26 +1,25 @@ -/* IBM_PROLOG_BEGIN_TAG - * This is an automatically generated prolog. - * - * $Source: src/usr/pnor/pnordd.C $ - * - * IBM CONFIDENTIAL - * - * COPYRIGHT International Business Machines Corp. 2011-2012 - * - * p1 - * - * Object Code Only (OCO) source materials - * Licensed Internal Code Source Materials - * IBM HostBoot Licensed Internal Code - * - * The source code for this program is not published or other- - * wise divested of its trade secrets, irrespective of what has - * been deposited with the U.S. Copyright Office. - * - * Origin: 30 - * - * IBM_PROLOG_END_TAG - */ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/pnor/pnordd.C $ */ +/* */ +/* IBM CONFIDENTIAL */ +/* */ +/* COPYRIGHT International Business Machines Corp. 2011,2012 */ +/* */ +/* p1 */ +/* */ +/* Object Code Only (OCO) source materials */ +/* Licensed Internal Code Source Materials */ +/* IBM HostBoot Licensed Internal Code */ +/* */ +/* The source code for this program is not published or otherwise */ +/* divested of its trade secrets, irrespective of what has been */ +/* deposited with the U.S. Copyright Office. */ +/* */ +/* Origin: 30 */ +/* */ +/* IBM_PROLOG_END_TAG */ /** * @file pnordd.C * @@ -47,11 +46,6 @@ // Uncomment this to enable smart writing //#define SMART_WRITE -// These are used to cheat and use a chunk of our cache as a PNOR -// iv_mode == MODEL_MEMCPY,MODEL_LPC_MEM -void write_fake_pnor( uint64_t i_pnorAddr, void* i_buffer, size_t i_size ); -void read_fake_pnor( uint64_t i_pnorAddr, void* o_buffer, size_t i_size ); -void erase_fake_pnor( uint64_t i_pnorAddr, size_t i_size ); extern trace_desc_t* g_trac_pnor; @@ -338,10 +332,22 @@ errlHndl_t PnorDD::writeFlash(void* i_buffer, ********************/ mutex_t PnorDD::cv_mutex = MUTEX_INITIALIZER; uint64_t PnorDD::iv_vpoMode = 0; + +// +// @note fake pnor is moved up and shrunk by 1/2 meg to make room for +// the SLW image, it must be at a 1 M boundary. +// See build_winkle_images for more info. +// +#define FAKE_PNOR_START 4*MEGABYTE+512*KILOBYTE +#define FAKE_PNOR_END 8*MEGABYTE +#define FAKE_PNOR_SIZE 3*MEGABYTE+512*KILOBYTE + /** * @brief Constructor */ -PnorDD::PnorDD( PnorMode_t i_mode ) +PnorDD::PnorDD( PnorMode_t i_mode, + uint64_t i_fakeStart, + uint64_t i_fakeSize ) : iv_mode(i_mode) { iv_erasesize_bytes = ERASESIZE_BYTES_DEFAULT; @@ -375,6 +381,14 @@ PnorDD::PnorDD( PnorMode_t i_mode ) } } + if( (MODEL_MEMCPY == iv_mode) || + (MODEL_LPC_MEM == iv_mode) ) + { + //Only use input fake values if they are != zero + iv_fakeStart = (i_fakeStart != 0) ? i_fakeStart : FAKE_PNOR_START; + iv_fakeSize = (i_fakeSize != 0) ? i_fakeSize : FAKE_PNOR_SIZE; + } + if( (MODEL_REAL_CMD == iv_mode) || (MODEL_REAL_MMIO == iv_mode) ) { @@ -1413,40 +1427,73 @@ errlHndl_t PnorDD::eraseFlash(uint32_t i_address) /* This code is used in the MODEL_MEMCPY and MODEL_LPC_MEM modes */ - -// -// @note fake pnor is moved up and shrunk by 1/2 meg to make room for -// the SLW image, it must be at a 1 M boundary. -// See build_winkle_images for more info. -// -#define FAKE_PNOR_START 4*MEGABYTE+512*KILOBYTE -#define FAKE_PNOR_END 8*MEGABYTE -#define FAKE_PNOR_SIZE 3*MEGABYTE+512*KILOBYTE - - -void write_fake_pnor( uint64_t i_pnorAddr, void* i_buffer, size_t i_size ) +/** + * @brief Write to fake PNOR + */ +void PnorDD::write_fake_pnor( uint64_t i_pnorAddr, + void* i_buffer, + size_t i_size ) { //create a pointer to the offset start. - char * destPtr = (char *)(FAKE_PNOR_START+i_pnorAddr); + char * destPtr = (char *)(iv_fakeStart+i_pnorAddr); - //copy data from memory into the buffer. - memcpy(destPtr, i_buffer, i_size); + if( (i_pnorAddr+i_size) > iv_fakeSize ) + { + TRACFCOMP(g_trac_pnor, + "PnorDD write_fake_pnor> Write goes past end of fake-PNOR, skipping write. i_pnorAddr=0x%X, i_size=0x%X", + i_pnorAddr, i_size ); + } + else + { + //copy data from memory into the buffer. + memcpy(destPtr, i_buffer, i_size); + } } -void read_fake_pnor( uint64_t i_pnorAddr, void* o_buffer, size_t i_size ) + +/** + * @brief Read from fake PNOR + */ +void PnorDD::read_fake_pnor( uint64_t i_pnorAddr, + void* o_buffer, + size_t i_size ) { //create a pointer to the offset start. - char * srcPtr = (char *)(FAKE_PNOR_START+i_pnorAddr); + char * srcPtr = (char *)(iv_fakeStart+i_pnorAddr); + + if( (i_pnorAddr+i_size) > iv_fakeSize ) + { + TRACFCOMP(g_trac_pnor, + "PnorDD read_fake_pnor> Read goes past end of fake-PNOR, skipping read. i_pnorAddr=0x%X, i_size=0x%X", + i_pnorAddr, i_size ); + } + else + { + //copy data from memory into the buffer. + memcpy(o_buffer, srcPtr, i_size); + } - //copy data from memory into the buffer. - memcpy(o_buffer, srcPtr, i_size); } -void erase_fake_pnor( uint64_t i_pnorAddr, size_t i_size ) + +/** + * @brief Erase chunk of fake PNOR + */ +void PnorDD::erase_fake_pnor( uint64_t i_pnorAddr, + size_t i_size ) { //create a pointer to the offset start. - char * srcPtr = (char *)(FAKE_PNOR_START+i_pnorAddr); + char * srcPtr = (char *)(iv_fakeStart+i_pnorAddr); - //copy data from memory into the buffer. - memset( srcPtr, 0, i_size ); + if( (i_pnorAddr+i_size) > iv_fakeSize ) + { + TRACFCOMP(g_trac_pnor, + "PnorDD erase_fake_pnor> Erase goes past end of fake-PNOR, skipping erase. i_pnorAddr=0x%X, i_size=0x%X", + i_pnorAddr, i_size ); + } + else + { + //Zero out memory + memset( srcPtr, 0, i_size ); + } } |