2222/* permissions and limitations under the License. */
2323/* */
2424/* IBM_PROLOG_END_TAG */
25- // $Id: mss_draminit_training_advanced.C,v 1.69 2016/04/21 11:05:04 sasethur Exp $
25+ // $Id: mss_draminit_training_advanced.C,v 1.71 2016/07/20 14:10:54 lwmulkey Exp $
2626/* File is created by SARAVANAN SETHURAMAN on Thur 29 Sept 2011. */
2727
2828//------------------------------------------------------------------------------
110110// 1.67 |dcadiga |04-APR-16| Code Review Updates
111111// 1.68 |preeragh |20-APR-16| Compatible for fw840 only
112112// 1.69 |preeragh |20-APR-16| Compatible for fw860 onwards (not reverse compatible)
113+ // 1.70 |sglancy |19-JUL-16| Save and Restore bug fix
114+ // 1.71 |lwmulkey |20-JUL-16| Code Review Updates
113115// This procedure Schmoo's DRV_IMP, SLEW, VREF (DDR, CEN), RCV_IMP based on attribute from effective config procedure
114116// DQ & DQS Driver impedance, Slew rate, WR_Vref shmoo would call only write_eye shmoo for margin calculation
115117// DQ & DQS VREF (rd_vref), RCV_IMP shmoo would call rd_eye for margin calculation
@@ -153,7 +155,77 @@ enum shmoo_param
153155
154156extern "C"
155157{
158+ fapi ::ReturnCode mcb_SaveAndRestore (const fapi ::Target & i_target_mba ,uint64_t i_content_array [ ],uint8_t i_mode )
159+ {
160+
161+ ReturnCode rc ;
162+ uint32_t rc_num ;
163+ uint8_t l_index = 0 ;
164+ uint8_t l_index1 = 0 ;
165+ uint64_t l_value = 0 ;
166+ uint64_t l_val_u64 = 0 ;
167+ ecmdDataBufferBase l_mcbem1ab (64 );
168+ uint64_t l_register_array [6 ] = {0x030106e0 ,0x0301040d ,0x0301040e ,0x03010449 ,0x03010416 ,0x03010434 };
169+ uint64_t l_mbs_reg [2 ] = {0x0201144a ,0x0201148a };
170+ //populate the array{0x030106d0,0x030106d2,0x030106d1,0x030106d3,0x0301040d,0x0301040e,0x03010449,0x0201144a,0x0201148a};
171+
172+
173+ Target l_target_centaur ;
174+ rc = fapiGetParentChip (i_target_mba , l_target_centaur ); if (rc ) return rc ;
175+ if (rc )
176+ {
177+ FAPI_DBG ("%s:Error in getting parent chip!" ,i_target_mba .toEcmdString ()); return rc ;
178+ }
179+
180+ if (i_mode == 0 )
181+ {
182+ FAPI_INF ("%s: Saving Register contents" ,i_target_mba .toEcmdString ());
183+ for (l_index = 0 ;l_index < 6 ;l_index ++ )
184+ {
185+ l_value = l_register_array [l_index ];
186+ rc = fapiGetScom (i_target_mba ,l_value ,l_mcbem1ab ); if (rc ) return rc ;
187+ i_content_array [l_index ] = l_mcbem1ab .getDoubleWord (0 );
188+ }
189+
190+ for (l_index = 6 ;l_index < 8 ;l_index ++ )
191+ {
192+
193+ l_value = l_mbs_reg [l_index1 ];
194+ rc = fapiGetScom (l_target_centaur ,l_value ,l_mcbem1ab ); if (rc ) return rc ;
195+ i_content_array [l_index ] = l_mcbem1ab .getDoubleWord (0 );
196+ l_index1 ++ ;
197+ }
198+ }
199+
200+ else if (i_mode == 1 )
201+ {
202+ FAPI_INF ("%s: Restoring Register contents" ,i_target_mba .toEcmdString ());
203+ for (l_index = 0 ;l_index < 6 ;l_index ++ )
204+ {
205+ l_val_u64 = i_content_array [l_index ];
206+ l_value = l_register_array [l_index ];
207+ rc_num = l_mcbem1ab .setDoubleWord (0 ,l_val_u64 );if (rc_num ){FAPI_ERR ( "Error in function mcb_SaveAndRestore:" );rc .setEcmdError (rc_num );return rc ;}
208+ rc = fapiPutScom (i_target_mba ,l_value ,l_mcbem1ab ); if (rc ) return rc ;
209+ }
210+
211+ l_index1 = 0 ;
212+ for (l_index = 6 ;l_index < 8 ;l_index ++ )
213+ {
214+ l_val_u64 = i_content_array [l_index ];
215+ l_value = l_mbs_reg [l_index1 ];
216+ rc_num = l_mcbem1ab .setDoubleWord (0 ,l_val_u64 );if (rc_num ){FAPI_ERR ( "Error in function mcb_SaveAndRestore:" );rc .setEcmdError (rc_num );return rc ;}
217+ rc = fapiPutScom (l_target_centaur ,l_value ,l_mcbem1ab ); if (rc ) return rc ;
218+ l_index1 ++ ;
219+ }
220+ }
221+ else
222+ {
223+ FAPI_INF ("%s: Invalid value of MODE" ,i_target_mba .toEcmdString ());
224+ }
225+ return rc ;
156226
227+
228+ }
157229 using namespace fapi ;
158230
159231 fapi ::ReturnCode mss_draminit_training_advanced_cloned (const fapi ::Target & i_target_mba );
@@ -214,6 +286,11 @@ extern "C"
214286 {
215287 // const fapi::Target is centaur.mba
216288 fapi ::ReturnCode rc ;
289+ uint8_t i_mode = 0 ;
290+ uint64_t i_content_array [8 ];
291+ rc = mcb_SaveAndRestore (i_target_mba ,i_content_array ,i_mode );
292+ if (rc ) return rc ;
293+
217294 //FAPI_INF(" pattern bit is %d and test_type_bit is %d");
218295 rc = mss_draminit_training_advanced_cloned (i_target_mba );
219296 if (rc )
@@ -232,6 +309,8 @@ extern "C"
232309 FAPI_ERR ("Unmask Function is Failed rc = 0x%08X (creator = %d)" , uint32_t (rc ), rc .getCreator ());
233310 return rc ;
234311 }
312+ rc = mcb_SaveAndRestore (i_target_mba ,i_content_array ,1 );
313+
235314 return rc ;
236315 }
237316
0 commit comments