// // Copyright (C) 2015-2016 Markus Hiienkari // // This file is part of Open Source Scan Converter project. // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // #include #include #include "system.h" #include "flash.h" #include "utils.h" extern alt_epcq_controller_dev epcq_controller_0; alt_epcq_controller_dev *epcq_controller_dev; int check_flash() { epcq_controller_dev = &epcq_controller_0; if ((epcq_controller_dev == NULL) || !(epcq_controller_dev->is_epcs && (epcq_controller_dev->page_size == PAGESIZE))) return -FLASH_DETECT_ERROR; printf("Flash size in bytes: %lu\nSector size: %lu (%lu pages)\nPage size: %lu\n", epcq_controller_dev->size_in_bytes, epcq_controller_dev->sector_size, epcq_controller_dev->sector_size/epcq_controller_dev->page_size, epcq_controller_dev->page_size); return 0; } int read_flash(alt_u32 offset, alt_u32 length, alt_u8 *dstbuf) { int retval, i; retval = alt_epcq_controller_read(&epcq_controller_dev->dev, offset, dstbuf, length); if (retval != 0) return -FLASH_READ_ERROR; for (i=0; idev, pagenum*PAGESIZE); if (retval != 0) { printf("Flash erase error, sector %u\nRetval %d\n", (unsigned)(pagenum/PAGES_PER_SECTOR), retval); return -FLASH_ERASE_ERROR; } } // Bit-reverse bytes for flash for (i=0; idev, (pagenum/PAGES_PER_SECTOR)*PAGES_PER_SECTOR*PAGESIZE, pagenum*PAGESIZE, pagedata, length); if (retval != 0) { printf("Flash write error, page %u\nRetval %d\n", (unsigned)pagenum, retval); return -FLASH_WRITE_ERROR; } return 0; } int verify_flash(alt_u32 offset, alt_u32 length, alt_u32 golden_crc, alt_u8 *tmpbuf) { alt_u32 crcval=0, i, bytes_to_read; int retval; for (i=0; i