/* * Copyright 2021 NXP * * SPDX-License-Identifier: BSD-3-Clause * */ #include #include #include #include #include "fspi.h" #include /* * The macros are defined to be used as test vector for testing fspi. */ #define SIZE_BUFFER 0x250 /* * You may choose fspi_swap based on core endianness and flexspi IP/AHB * buffer endianness set in MCR. */ #define fspi_swap32(A) (A) void fspi_test(uint32_t fspi_test_addr, uint32_t size, int extra) { uint32_t buffer[SIZE_BUFFER]; uint32_t count = 1; uint32_t failed, i; NOTICE("-------------------------- %d----------------------------------\n", count++); INFO("Sector Erase size: 0x%08x, size: %d\n", F_SECTOR_ERASE_SZ, size); /* Test Sector Erase */ xspi_sector_erase(fspi_test_addr - fspi_test_addr % F_SECTOR_ERASE_SZ, F_SECTOR_ERASE_SZ); /* Test Erased data using IP read */ xspi_ip_read((fspi_test_addr), buffer, size * 4); failed = 0; for (i = 0; i < size; i++) if (fspi_swap32(0xffffffff) != buffer[i]) { failed = 1; break; } if (failed == 0) { NOTICE("[%d]: Success Erase: data in buffer[%d] 0x%08x\n", __LINE__, i-3, buffer[i-3]); } else { ERROR("Erase: Failed -->xxx with buffer[%d]=0x%08x\n", i, buffer[i]); } for (i = 0; i < SIZE_BUFFER; i++) buffer[i] = 0x12345678; /* Write data from buffer to flash */ xspi_write(fspi_test_addr, (void *)buffer, (size * 4 + extra)); /* Check written data using IP read */ xspi_ip_read(fspi_test_addr, buffer, (size * 4 + extra)); failed = 0; for (i = 0; i < size; i++) if (fspi_swap32(0x12345678) != buffer[i]) { failed = 1; break; } if (failed == 0) { NOTICE("[%d]: Success IpWrite with IP READ in buffer[%d] 0x%08x\n", __LINE__, i-3, buffer[i-3]); } else { ERROR("Write: Failed -->xxxx with IP READ in buffer[%d]=0x%08x\n", i, buffer[i]); return; } /* xspi_read may use AHB read */ xspi_read((fspi_test_addr), buffer, (size * 4 + extra)); failed = 0; for (i = 0; i < size; i++) if (fspi_swap32(0x12345678) != buffer[i]) { failed = 1; break; } if (failed == 0) { NOTICE("[%d]: Success IpWrite with AHB OR IP READ on buffer[%d] 0x%08x\n", __LINE__, i-3, buffer[i-3]); } else { ERROR("Write: Failed -->xxxx with AHB READ on buffer[%d]=0x%08x\n", i, buffer[i]); return; } }