Beispiel #1
0
/*
 * Returns JEDEC ID from SPI flash
 */
static ulong read_id(void){
	unsigned int flashid = 0;

	ar7240_reg_wr_nf(AR7240_SPI_FS, 1);
	ar7240_reg_wr_nf(AR7240_SPI_WRITE, AR7240_SPI_CS_DIS);

	ar7240_spi_bit_banger(0x9F);

	ar7240_spi_delay_8();
	ar7240_spi_delay_8();
	ar7240_spi_delay_8();
	ar7240_spi_delay_8();

	flashid = ar7240_reg_rd(AR7240_SPI_RD_STATUS);

	/*
	 * We have 3 bytes:
	 * - manufacture ID (1b)
	 * - product ID (2b)
	 */
	flashid = flashid >> 8;

	ar7240_spi_done();

	return((ulong)flashid);
}
int
write_buff(flash_info_t *info, uchar *source, ulong addr, ulong len)
{
	int total = 0, len_this_lp, bytes_this_page;
	ulong dst;
	uchar *src;

	printf("write addr: %x\n", addr);
	addr = addr - CFG_FLASH_BASE;

	while (total < len) {
		src = source + total;
		dst = addr + total;
		bytes_this_page =
		    AR7240_SPI_PAGE_SIZE - (addr % AR7240_SPI_PAGE_SIZE);
		len_this_lp =
		    ((len - total) >
		     bytes_this_page) ? bytes_this_page : (len - total);
		ar7240_spi_write_page(dst, src, len_this_lp);
		total += len_this_lp;
	}

	ar7240_spi_done();

	return 0;
}
Beispiel #3
0
int flash_erase(flash_info_t *info, int s_first, int s_last){
	int i, j, sector_size = info->size / info->sector_count;

	printf("Erasing: ");

	j = 0;

	for(i = s_first; i <= s_last; i++){
		ar7240_spi_sector_erase(i * sector_size);

		if(j == 39){
			puts("\n         ");
			j = 0;
		}
		puts("#");
		led_toggle();
		j++;
	}

	ar7240_spi_done();
	all_led_off();
	printf("\n\n");

	return(0);
}
int flash_erase(flash_info_t *info, int s_first, int s_last) {
	int i, j, sector_size = info->size / info->sector_count;

	//printf("First sector:\t%d\nLast sector:\t%d\nSector size:\t%d bytes\n", s_first, s_last, sector_size);
	printf("Erasing: ");

	j = 0;

	for (i = s_first; i <= s_last; i++) {
		ar7240_spi_sector_erase(i * sector_size);

		if (j == 39) {
			puts("\n         ");
			j = 0;
		}
		puts("#");
		ar7240_led_toggle();
		j++;
	}

	ar7240_spi_done();
	ar7240_all_led_off();
	printf("\n\n");

	return 0;
}
Beispiel #5
0
int flash_erase_4k(int start, int end) {
	int i = 0;
	int base = 0x9F000000;
	
	start = ALIGN(start - base);
	end = ALIGN(end - base);

	printf("Erasing: %08X-%08X\n", start, end);

	while (start <= end) {
		ar7240_spi_erase_4k(start);
		start += SECTOR_ERASE_SIZE;
		
		if((i + 1) % 40 == 0){
			printf("\n");
		}
		printf("#");
		led_toggle();
		i++;
	}
	
	ar7240_spi_done();
	all_led_off();
	printf("\n\n");
	return(0);
} 
static void
read_id(void)
{
	u32 rd = 0x777777;

	ar7240_reg_wr_nf(AR7240_SPI_WRITE, AR7240_SPI_CS_DIS);
	ar7240_spi_bit_banger(0x9f);
	ar7240_spi_delay_8();
	ar7240_spi_delay_8();
	ar7240_spi_delay_8();
	ar7240_spi_done();
	/* rd = ar7240_reg_rd(AR7240_SPI_RD_STATUS); */
	rd = ar7240_reg_rd(AR7240_SPI_READ);
	printf("id read %#x\n", rd);
}
int
flash_erase(flash_info_t *info, int s_first, int s_last)
{
	int i, sector_size = info->size / info->sector_count;

	printf("\nFirst %#x last %#x sector size %#x\n",
	       s_first, s_last, sector_size);

	for (i = s_first; i <= s_last; i++) {
		printf("\b\b\b\b%4d", i);
		ar7240_spi_sector_erase(i * sector_size);
	}
	ar7240_spi_done();
	printf("\n");

	return 0;
}
int
flash_erase(flash_info_t *info, int s_first, int s_last)
{
	int i, sector_size = info->size / info->sector_count;

#ifdef FLASH_DEBUG
	printf("\nFirst %#x last %#x sector size %#x\n",
	       s_first, s_last, sector_size);
#endif

	for (i = s_first; i <= s_last; i++) {
#ifdef FLASH_DEBUG
		printf("\b\b\b\b%4d", i);
#else
		puts(".");
#endif
		ar7240_spi_sector_erase(i * sector_size);
	}
	ar7240_spi_done();
	printf("\n");

	return 0;
}
int
write_buff(flash_info_t *info, uchar *source, ulong addr, ulong len)
{
	int total = 0, len_this_lp, bytes_this_page, counter = 0;
	ulong dst;
	uchar *src;

#ifdef FLASH_DEBUG
	printf("write addr: %x\n", addr);
#endif
	addr = addr - CFG_FLASH_BASE;

	while (total < len) {
		src = source + total;
		dst = addr + total;
		bytes_this_page =
		    AR7240_SPI_PAGE_SIZE - (addr & (AR7240_SPI_PAGE_SIZE-1));
		len_this_lp =
		    ((len - total) >
		     bytes_this_page) ? bytes_this_page : (len - total);
		ar7240_spi_write_page(dst, src, len_this_lp);
		total += len_this_lp;
		if(counter>=255)
		{
			puts(".");
			counter = 0;
		}
		else
		{
			counter++;
		}
	}

	ar7240_spi_done();

	return 0;
}