static void nfc_nand_page_address(unsigned int page_address) { unsigned int page_count; writew(0x00, &nfc->flash_add); writew(NFC_ADDR, &nfc->nand_flash_config2); nfc_wait_ready(); /* code only for large page flash */ if (CONFIG_SYS_NAND_PAGE_SIZE > 512) { writew(0x00, &nfc->flash_add); writew(NFC_ADDR, &nfc->nand_flash_config2); nfc_wait_ready(); } page_count = CONFIG_SYS_NAND_SIZE / CONFIG_SYS_NAND_PAGE_SIZE; if (page_address <= page_count) { page_count--; /* transform 0x01000000 to 0x00ffffff */ do { writew(page_address & 0xff, &nfc->flash_add); writew(NFC_ADDR, &nfc->nand_flash_config2); nfc_wait_ready(); page_address = page_address >> 8; page_count = page_count >> 8; } while (page_count); }
/** * reset nand chip */ static int nfc_chip_reset(void) { int status; //ra_dbg("%s:\n", __func__); // reset nand flash ra_outl(NFC_CMD1, 0xff); ra_outl(NFC_ADDR, 0xfffffff); ra_outl(NFC_CONF, 0x0141 | (CFG_ADDR_CYCLE << 16)); status = nfc_wait_ready(0); //erase wait 5us if (status & NAND_STATUS_FAIL) { printf("%s: fail\n", __func__); return -1; } return 0; }
static void nfc_nand_command(unsigned short command) { writew(command, &nfc->flash_cmd); writew(NFC_CMD, &nfc->nand_flash_config2); nfc_wait_ready(); }
static void nfc_nand_address(unsigned short address) { writenfc(address, &nfc->flash_addr); writenfc(NFC_ADDR, &nfc->operation); nfc_wait_ready(); }
static void nfc_nand_command(unsigned short command) { writenfc(command, &nfc->flash_cmd); writenfc(NFC_CMD, &nfc->operation); nfc_wait_ready(); }