1 /* 2 * Copyright 2021 NXP 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 * 6 */ 7 8 #include <stdint.h> 9 #include <stdio.h> 10 11 #include <common/debug.h> 12 #include <flash_info.h> 13 #include "fspi.h" 14 #include <fspi_api.h> 15 16 /* 17 * The macros are defined to be used as test vector for testing fspi. 18 */ 19 #define SIZE_BUFFER 0x250 20 21 /* 22 * You may choose fspi_swap based on core endianness and flexspi IP/AHB 23 * buffer endianness set in MCR. 24 */ 25 #define fspi_swap32(A) (A) 26 27 void fspi_test(uint32_t fspi_test_addr, uint32_t size, int extra) 28 { 29 uint32_t buffer[SIZE_BUFFER]; 30 uint32_t count = 1; 31 uint32_t failed, i; 32 33 NOTICE("-------------------------- %d----------------------------------\n", count++); 34 INFO("Sector Erase size: 0x%08x, size: %d\n", F_SECTOR_ERASE_SZ, size); 35 /* Test Sector Erase */ 36 xspi_sector_erase(fspi_test_addr - fspi_test_addr % F_SECTOR_ERASE_SZ, 37 F_SECTOR_ERASE_SZ); 38 39 /* Test Erased data using IP read */ 40 xspi_ip_read((fspi_test_addr), buffer, size * 4); 41 42 failed = 0; 43 for (i = 0; i < size; i++) 44 if (fspi_swap32(0xffffffff) != buffer[i]) { 45 failed = 1; 46 break; 47 } 48 49 if (failed == 0) { 50 NOTICE("[%d]: Success Erase: data in buffer[%d] 0x%08x\n", __LINE__, i-3, buffer[i-3]); 51 } else { 52 ERROR("Erase: Failed -->xxx with buffer[%d]=0x%08x\n", i, buffer[i]); 53 } 54 55 for (i = 0; i < SIZE_BUFFER; i++) 56 buffer[i] = 0x12345678; 57 58 /* Write data from buffer to flash */ 59 xspi_write(fspi_test_addr, (void *)buffer, (size * 4 + extra)); 60 /* Check written data using IP read */ 61 xspi_ip_read(fspi_test_addr, buffer, (size * 4 + extra)); 62 failed = 0; 63 for (i = 0; i < size; i++) 64 if (fspi_swap32(0x12345678) != buffer[i]) { 65 failed = 1; 66 break; 67 } 68 69 if (failed == 0) { 70 NOTICE("[%d]: Success IpWrite with IP READ in buffer[%d] 0x%08x\n", __LINE__, i-3, buffer[i-3]); 71 } else { 72 ERROR("Write: Failed -->xxxx with IP READ in buffer[%d]=0x%08x\n", i, buffer[i]); 73 return; 74 } 75 76 /* xspi_read may use AHB read */ 77 xspi_read((fspi_test_addr), buffer, (size * 4 + extra)); 78 failed = 0; 79 for (i = 0; i < size; i++) 80 if (fspi_swap32(0x12345678) != buffer[i]) { 81 failed = 1; 82 break; 83 } 84 85 if (failed == 0) { 86 NOTICE("[%d]: Success IpWrite with AHB OR IP READ on buffer[%d] 0x%08x\n", __LINE__, i-3, buffer[i-3]); 87 } else { 88 ERROR("Write: Failed -->xxxx with AHB READ on buffer[%d]=0x%08x\n", i, buffer[i]); 89 return; 90 } 91 } 92