flash_asm.S 873 Bytes
/*
 * -*- mode:c -*-
 *
 * (C) Copyright 2000
 * Marius Groeger <mgroeger@sysgo.de>
 * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
 *
 * void ull_write(unsigned long long volatile *address,
 *                unsigned long long volatile *data)
 * r3 = address
 * r4 = data
 *
 * void ull_read(unsigned long long volatile *address,
 *                unsigned long long volatile *data)
 * r3 = address
 * r4 = data
 *
 * Uses the floating point unit to read and write 64 bit wide
 * data (unsigned long long) on the 60x bus. This is necessary
 * because all 4 flash chips use the /WE line from byte lane 0
 *
 * IMPORTANT: data should always be 8-aligned, otherwise an exception will
 * occur.
 */

#include <ppc_asm.tmpl>
#include <ppc_defs.h>

	.globl	ull_write
ull_write:
	lfd		0,0(r4)
	stfd	0,0(r3)
	blr

	.globl	ull_read
ull_read:
	lfd		0, 0(r3)
	stfd	0, 0(r4)
	blr