ArmPkg/ArmDmaLib: Fixed the calculation of the Base Address of the Buffer
The former calculation 'ALIGN_VALUE(*DeviceAddress - BASE_4KB - 1,BASE_4KB)' did not return the lowest aligned address. Example: *DeviceAddress = 0xB000C001; *DeviceAddress - BASE_4KB - 1 = 0xB000B000; Aligned value = 0xB000B000 + ((0x1000 - 0xB000B000)) & 0xFFF) = 0xB000B000 ... while we where expected 0xB000C000. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Olivier Martin <olivier.martin@arm.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14618 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
		
				
					committed by
					
						 oliviermartin
						oliviermartin
					
				
			
			
				
	
			
			
			
						parent
						
							b75d7605b4
						
					
				
				
					commit
					db06c2d723
				
			| @@ -131,7 +131,7 @@ DmaMap ( | |||||||
|  |  | ||||||
|     if ((Operation == MapOperationBusMasterRead) || (Operation == MapOperationBusMasterCommonBuffer)) { |     if ((Operation == MapOperationBusMasterRead) || (Operation == MapOperationBusMasterCommonBuffer)) { | ||||||
|       // In case the buffer is used for instance to send command to a PCI controller, we must ensure the memory is uncached |       // In case the buffer is used for instance to send command to a PCI controller, we must ensure the memory is uncached | ||||||
|       Status = gDS->SetMemorySpaceAttributes (ALIGN_VALUE(*DeviceAddress - BASE_4KB - 1,BASE_4KB), ALIGN_VALUE(*NumberOfBytes,BASE_4KB), EFI_MEMORY_WC); |       Status = gDS->SetMemorySpaceAttributes (*DeviceAddress & ~(BASE_4KB - 1), ALIGN_VALUE (*NumberOfBytes, BASE_4KB), EFI_MEMORY_WC); | ||||||
|       ASSERT_EFI_ERROR (Status); |       ASSERT_EFI_ERROR (Status); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user