w49f002u.c 1.63 KB
Newer Older
Andrew Ip's avatar
Andrew Ip committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
/*
 * w49f002u.c: driver for Winbond 49F002U flash models
 *
 *
 * Copyright 2000 Silicon Integrated System Corporation
 *
 *	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 2 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, write to the Free Software
 *	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 *
 * Reference:
 *	W49F002U data sheet
 *
25 26
 * ToDo: Consilidated to standard JEDEC code.
 *
27
 * $Id$
Andrew Ip's avatar
Andrew Ip committed
28 29
 */

Ronald G. Minnich's avatar
Ronald G. Minnich committed
30
#include <stdio.h>
Andrew Ip's avatar
Andrew Ip committed
31 32
#include "flash.h"
#include "jedec.h"
Ronald G. Minnich's avatar
Ronald G. Minnich committed
33
#include "w49f002u.h"
Andrew Ip's avatar
Andrew Ip committed
34

35
int write_49f002(struct flashchip *flash, unsigned char *buf)
Andrew Ip's avatar
Andrew Ip committed
36
{
37 38
	int i;
	int total_size = flash->total_size * 1024;
39 40
	volatile char *bios = flash->virt_addr;
	volatile char *dst = bios;
Andrew Ip's avatar
Andrew Ip committed
41

42
	erase_chip_jedec(flash);
43

44
	printf("Programming Page: ");
45 46 47
	for (i = 0; i < total_size; i++) {
		/* write to the sector */
		if ((i & 0xfff) == 0)
48
			printf("address: 0x%08lx", (unsigned long) i);
49 50 51 52 53 54 55 56 57
		*(bios + 0x5555) = 0xAA;
		*(bios + 0x2AAA) = 0x55;
		*(bios + 0x5555) = 0xA0;
		*dst++ = *buf++;

		/* wait for Toggle bit ready */
		toggle_ready_jedec(dst);

		if ((i & 0xfff) == 0)
58
			printf("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
59 60
	}
	printf("\n");
Ronald G. Minnich's avatar
Ronald G. Minnich committed
61

62
	return (0);
Andrew Ip's avatar
Andrew Ip committed
63
}