flash_asm.S
873 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/*
* -*- 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