vc/cavium/{bdk,include}: Clean up bdk_phys_to_ptr() calls

The bdk_phys_to_ptr() function converts a uint64_t address to a void *
pointer. Judging by the comments, the old implementation had a check
that would refuse to convert a null pointer, which required several
workarounds when trying to convert the address 0 to a pointer. This
isn't the case for coreboot though, which implements this function
as a simple (void *) cast, so we can remove the old workarounds.

Change-Id: I6537d1699e6726c1fb155d69a51e14da856232de
Signed-off-by: Jacob Garber <jgarber1@ualberta.ca>
Found-by: Coverity CID 1393962
Reviewed-on: https://review.coreboot.org/c/coreboot/+/34590
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Patrick Rudolph <siro@das-labor.org>
This commit is contained in:
Jacob Garber 2019-07-26 11:45:43 -06:00 committed by Patrick Georgi
parent 9f378d3b03
commit 4926e989ac
5 changed files with 8 additions and 19 deletions

View File

@ -60,7 +60,7 @@ int __bdk_dram_test_mem_address_bus(uint64_t area, uint64_t max_address, int bur
/* Clear our work area. Checking for aliases later could get false /* Clear our work area. Checking for aliases later could get false
positives if it matched stale data */ positives if it matched stale data */
void *ptr = (area) ? bdk_phys_to_ptr(area) : NULL; void *ptr = bdk_phys_to_ptr(area);
bdk_zero_memory(ptr, max_address - area); bdk_zero_memory(ptr, max_address - area);
__bdk_dram_flush_to_mem_range(area, max_address); __bdk_dram_flush_to_mem_range(area, max_address);

View File

@ -101,9 +101,7 @@ static uint64_t dram_test_thread_size;
void __bdk_dram_flush_to_mem(uint64_t address) void __bdk_dram_flush_to_mem(uint64_t address)
{ {
BDK_MB; BDK_MB;
/* The DRAM code doesn't use the normal bdk_phys_to_ptr() because of the char *ptr = bdk_phys_to_ptr(address);
NULL check in it. This greatly slows down the memory tests */
char *ptr = (void*)address;
BDK_CACHE_WBI_L2(ptr); BDK_CACHE_WBI_L2(ptr);
} }
@ -116,10 +114,8 @@ void __bdk_dram_flush_to_mem(uint64_t address)
*/ */
void __bdk_dram_flush_to_mem_range(uint64_t area, uint64_t max_address) void __bdk_dram_flush_to_mem_range(uint64_t area, uint64_t max_address)
{ {
/* The DRAM code doesn't use the normal bdk_phys_to_ptr() because of the char *ptr = bdk_phys_to_ptr(area);
NULL check in it. This greatly slows down the memory tests */ char *end = bdk_phys_to_ptr(max_address);
char *ptr = (void*)area;
char *end = (void*)max_address;
BDK_MB; BDK_MB;
while (ptr < end) while (ptr < end)
{ {

View File

@ -141,7 +141,7 @@ int bdk_l2c_unlock_mem_region(bdk_node_t node, uint64_t start, uint64_t len)
len += start & BDK_CACHE_LINE_MASK; len += start & BDK_CACHE_LINE_MASK;
start &= ~BDK_CACHE_LINE_MASK; start &= ~BDK_CACHE_LINE_MASK;
len = (len + BDK_CACHE_LINE_MASK) & ~BDK_CACHE_LINE_MASK; len = (len + BDK_CACHE_LINE_MASK) & ~BDK_CACHE_LINE_MASK;
void *ptr = (start) ? bdk_phys_to_ptr(start) : NULL; void *ptr = bdk_phys_to_ptr(start);
while (len > 0) while (len > 0)
{ {

View File

@ -79,10 +79,7 @@ static void bdk_dram_clear_mem(bdk_node_t node)
write to the cache line isn't good enough because partial LMC write to the cache line isn't good enough because partial LMC
writes may be enabled */ writes may be enabled */
ddr_print("N%d: Rewriting DRAM: start 0 length 0x%llx\n", node, skip); ddr_print("N%d: Rewriting DRAM: start 0 length 0x%llx\n", node, skip);
volatile uint64_t *ptr = bdk_phys_to_ptr(bdk_numa_get_address(node, 8)); volatile uint64_t *ptr = bdk_phys_to_ptr(bdk_numa_get_address(node, 0));
/* The above pointer got address 8 to avoid NULL pointer checking
in bdk_phys_to_ptr(). Correct it here */
ptr--;
uint64_t *end = bdk_phys_to_ptr(bdk_numa_get_address(node, skip)); uint64_t *end = bdk_phys_to_ptr(bdk_numa_get_address(node, skip));
while (ptr < end) while (ptr < end)
{ {

View File

@ -161,17 +161,13 @@ extern int __bdk_dram_retry_failure2(int burst, uint64_t address1, uint64_t dat
static inline void __bdk_dram_write64(uint64_t address, uint64_t data) static inline void __bdk_dram_write64(uint64_t address, uint64_t data)
{ {
/* The DRAM code doesn't use the normal bdk_phys_to_ptr() because of the volatile uint64_t *ptr = bdk_phys_to_ptr(address);
NULL check in it. This greatly slows down the memory tests */
volatile uint64_t *ptr = (void*)address;
*ptr = data; *ptr = data;
} }
static inline uint64_t __bdk_dram_read64(uint64_t address) static inline uint64_t __bdk_dram_read64(uint64_t address)
{ {
/* The DRAM code doesn't use the normal bdk_phys_to_ptr() because of the volatile uint64_t *ptr = bdk_phys_to_ptr(address);
NULL check in it. This greatly slows down the memory tests */
volatile uint64_t *ptr = (void*)address;
return *ptr; return *ptr;
} }