ArmPlatformPkg/NorFlashDxe: Fixed CFI NOR Flash driver
CFI Flash differentiates DeviceBaseAddress with BlockAddress in its protocol. The DeviceBaseAddress was not considered in the previous version of this driver. This version also fixes some bugs in the implementation of the CFI protocol. This new version also uses the Boot Mode Hob to reinitialized the FVB when Boot Mode is equal to BOOT_WITH_DEFAULT_SETTINGS. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13064 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
/** @file NorFlashBlockIoDxe.c
|
||||
|
||||
Copyright (c) 2011, ARM Ltd. All rights reserved.<BR>
|
||||
Copyright (c) 2011-2012, ARM Ltd. All rights reserved.<BR>
|
||||
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
@@ -16,47 +17,6 @@
|
||||
|
||||
#include "NorFlashDxe.h"
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
NorFlashBlkIoInitialize (
|
||||
IN NOR_FLASH_INSTANCE* Instance
|
||||
)
|
||||
{
|
||||
UINT32 Reply;
|
||||
EFI_STATUS Status = EFI_SUCCESS;
|
||||
|
||||
DEBUG((DEBUG_BLKIO,"NorFlashBlkIoInitialize()\n"));
|
||||
|
||||
//
|
||||
// Verify that there is a physical hardware device where we expect it to be.
|
||||
//
|
||||
|
||||
// Read a specific CFI query that returns back "QRY"
|
||||
// This ensures that there is really a device present there
|
||||
SEND_NOR_COMMAND (Instance->BaseAddress, 0, P30_CMD_READ_CFI_QUERY);
|
||||
|
||||
// Read CFI 'QRY' data
|
||||
Status = NorFlashReadCfiData (Instance->BaseAddress, P30_CFI_ADDR_QUERY_UNIQUE_QRY, 3, &Reply);
|
||||
if (EFI_ERROR(Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
if (Reply != CFI_QRY) {
|
||||
DEBUG((EFI_D_ERROR, "NorFlashBlkIoInitialize: CFI QRY=0x%x (expected 0x595251)\n", Reply));
|
||||
return EFI_DEVICE_ERROR;
|
||||
}
|
||||
|
||||
// Reset the device
|
||||
Status = NorFlashBlockIoReset (&Instance->BlockIoProtocol, FALSE);
|
||||
if (EFI_ERROR(Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
Instance->Initialized = TRUE;
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// BlockIO Protocol function EFI_BLOCK_IO_PROTOCOL.Reset
|
||||
//
|
||||
@@ -73,7 +33,7 @@ NorFlashBlockIoReset (
|
||||
|
||||
DEBUG ((DEBUG_BLKIO, "NorFlashBlockIoReset(MediaId=0x%x)\n", This->Media->MediaId));
|
||||
|
||||
return NorFlashReset(Instance);
|
||||
return NorFlashReset (Instance);
|
||||
}
|
||||
|
||||
//
|
||||
@@ -101,7 +61,7 @@ NorFlashBlockIoReadBlocks (
|
||||
} else if( This->Media->MediaId != MediaId ) {
|
||||
Status = EFI_MEDIA_CHANGED;
|
||||
} else {
|
||||
Status = NorFlashReadBlocks(Instance,Lba,BufferSizeInBytes,Buffer);
|
||||
Status = NorFlashReadBlocks (Instance,Lba,BufferSizeInBytes,Buffer);
|
||||
}
|
||||
|
||||
return Status;
|
||||
@@ -134,7 +94,7 @@ NorFlashBlockIoWriteBlocks (
|
||||
} else if( This->Media->ReadOnly ) {
|
||||
Status = EFI_WRITE_PROTECTED;
|
||||
} else {
|
||||
Status = NorFlashWriteBlocks(Instance,Lba,BufferSizeInBytes,Buffer);
|
||||
Status = NorFlashWriteBlocks (Instance,Lba,BufferSizeInBytes,Buffer);
|
||||
}
|
||||
|
||||
return Status;
|
||||
|
Reference in New Issue
Block a user