Example #1
0
void onenand_loadpage (unsigned int block, unsigned int page)
{
	// Block Number
	onenand_writew(onenand_block_address(block),
			ONENAND_BASE + ONENAND_REG_START_ADDRESS1);

	// BufferRAM
	onenand_writew(onenand_bufferram_address(block),
			ONENAND_BASE + ONENAND_REG_START_ADDRESS2);

	// Page (Sector) Number Set: FPA, FSA
	onenand_writew(onenand_sector_address(page),
			ONENAND_BASE + ONENAND_REG_START_ADDRESS8);

	// BSA, BSC
	onenand_writew(onenand_buffer_address(),
			ONENAND_BASE + ONENAND_REG_START_BUFFER);

	// Interrupt clear
	onenand_writew(ONENAND_INT_CLEAR, ONENAND_BASE + ONENAND_REG_INTERRUPT);

	onenand_writew(ONENAND_CMD_READ, ONENAND_BASE + ONENAND_REG_COMMAND);

#if 1
	while (!(READ_INTERRUPT() & ONENAND_INT_READ))
		continue;
#else
	while (!(READ_INTERRUPT() & ONENAND_INT_MASTER))
		continue;
#endif
}
Example #2
0
//void ONENAND_WriteReg()
//
void ONENAND_ReadPage(
	void* base, unsigned int block, unsigned int page)
{
	int len;
	unsigned int* dest;
	unsigned int* src;

	// Block Number
	onenand_writel(onenand_block_address(block),
			ONENAND_MAP11_BASE + (ONENAND_REG_START_ADDRESS1<<1));

	// BufferRAM
	onenand_writel(onenand_bufferram_address(block),
			ONENAND_MAP11_BASE + (ONENAND_REG_START_ADDRESS2<<1));

	// Page (Sector) Number Set: FPA, FSA
	onenand_writel(onenand_sector_address(page),
			ONENAND_MAP11_BASE + (ONENAND_REG_START_ADDRESS8<<1));

	// BSA, BSC
	onenand_writel(onenand_buffer_address(),
			ONENAND_MAP11_BASE + (ONENAND_REG_START_BUFFER<<1));

	// Interrupt clear
	onenand_writel(ONENAND_INT_CLEAR,
			ONENAND_MAP11_BASE + (ONENAND_REG_INTERRUPT<<1));

	onenand_writel(ONENAND_CMD_READ,
			ONENAND_MAP11_BASE + (ONENAND_REG_COMMAND<<1));

#if 1
	while (!(READ_INTERRUPT() & ONENAND_INT_READ))
		continue;
#else
	while (!(READ_INTERRUPT() & ONENAND_INT_MASTER))
		continue;
#endif

	len = ONENAND_PAGE_SIZE >> 2;
	dest = (unsigned short *)(base);
	src = (unsigned short *)(ONENAND_MAP00_BASE + ONENAND_DATARAM);
	while (len-- > 0)
	{
		*dest++ = *src++;
	}
}