AGESA_STATUS OemS3Save(AMD_S3SAVE_PARAMS *S3SaveParams) { AMD_S3_PARAMS *dataBlock = &S3SaveParams->S3DataBlock; u32 MTRRStorageSize = 0; uintptr_t pos, size; if (HIGH_ROMSTAGE_STACK_SIZE) cbmem_add(CBMEM_ID_ROMSTAGE_RAM_STACK, HIGH_ROMSTAGE_STACK_SIZE); /* To be consumed in AmdInitResume. */ get_s3nv_data(S3DataTypeNonVolatile, &pos, &size); if (size && dataBlock->NvStorageSize) spi_SaveS3info(pos, size, dataBlock->NvStorage, dataBlock->NvStorageSize); /* To be consumed in AmdS3LateRestore. */ char *heap = cbmem_add(CBMEM_ID_RESUME_SCRATCH, HIGH_MEMORY_SCRATCH); if (heap) { memset(heap, 0, HIGH_MEMORY_SCRATCH); memcpy(heap, dataBlock->VolatileStorage, dataBlock->VolatileStorageSize); } /* Collect MTRR setup. */ backup_mtrr(MTRRStorage, &MTRRStorageSize); /* To be consumed in restore_mtrr, CPU enumeration in ramstage. */ get_s3nv_data(S3DataTypeMTRR, &pos, &size); if (size && MTRRStorageSize) spi_SaveS3info(pos, size, MTRRStorage, MTRRStorageSize); return AGESA_SUCCESS; }
AGESA_STATUS OemS3Save(void *vS3SaveParams) { #if IS_ENABLED(CONFIG_CPU_AMD_PI_00660F01) AMD_RTB_PARAMS *S3SaveParams = (AMD_RTB_PARAMS *)vS3SaveParams; S3_DATA_BLOCK *dataBlock = &S3SaveParams->S3DataBlock; #else AMD_S3SAVE_PARAMS *S3SaveParams = (AMD_S3SAVE_PARAMS *)vS3SaveParams; AMD_S3_PARAMS *dataBlock = &S3SaveParams->S3DataBlock; #endif u8 MTRRStorage[S3_DATA_MTRR_SIZE]; u32 MTRRStorageSize = 0; u32 pos, size; if (HIGH_ROMSTAGE_STACK_SIZE) cbmem_add(CBMEM_ID_ROMSTAGE_RAM_STACK, HIGH_ROMSTAGE_STACK_SIZE); /* To be consumed in AmdInitResume. */ get_s3nv_data(S3DataTypeNonVolatile, &pos, &size); if (size && dataBlock->NvStorageSize) spi_SaveS3info(pos, size, dataBlock->NvStorage, dataBlock->NvStorageSize); /* To be consumed in AmdS3LateRestore. */ char *heap = cbmem_add(CBMEM_ID_RESUME_SCRATCH, HIGH_MEMORY_SCRATCH); if (heap) { memset(heap, 0, HIGH_MEMORY_SCRATCH); memcpy(heap, dataBlock->VolatileStorage, dataBlock->VolatileStorageSize); } /* Collect MTRR setup. */ backup_mtrr(MTRRStorage, &MTRRStorageSize); /* To be consumed in restore_mtrr, CPU enumeration in ramstage. */ get_s3nv_data(S3DataTypeMTRR, &pos, &size); if (size && MTRRStorageSize) spi_SaveS3info(pos, size, MTRRStorage, MTRRStorageSize); return AGESA_SUCCESS; }