diff options
author | Stefan Roese <sr@denx.de> | 2007-12-11 11:34:54 +0100 |
---|---|---|
committer | Stefan Roese <sr@denx.de> | 2007-12-11 11:34:54 +0100 |
commit | 9caeaadf508cd0e11ac5dfc56ab0f72e3b89a105 (patch) | |
tree | 1afcc9c20c04e19870ab5e2996104877695c54a3 /include/asm-mips/io.h | |
parent | 7cfc12a7dcfdb350e2ab76db4dafcc30f7e77c2b (diff) | |
parent | 41be969f4957115ed7b1fe8b890bfaee99d7a7a2 (diff) | |
download | u-boot-imx-9caeaadf508cd0e11ac5dfc56ab0f72e3b89a105.zip u-boot-imx-9caeaadf508cd0e11ac5dfc56ab0f72e3b89a105.tar.gz u-boot-imx-9caeaadf508cd0e11ac5dfc56ab0f72e3b89a105.tar.bz2 |
Merge commit 'u-boot/master' into for-1.3.1
Conflicts:
drivers/rtc/Makefile
Diffstat (limited to 'include/asm-mips/io.h')
-rw-r--r-- | include/asm-mips/io.h | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/include/asm-mips/io.h b/include/asm-mips/io.h index cd4d5dc..1e060f7 100644 --- a/include/asm-mips/io.h +++ b/include/asm-mips/io.h @@ -71,7 +71,21 @@ * instruction, so the lower 16 bits must be zero. Should be true on * on any sane architecture; generic code does not use this assumption. */ -extern unsigned long mips_io_port_base; +extern const unsigned long mips_io_port_base; + +/* + * Gcc will generate code to load the value of mips_io_port_base after each + * function call which may be fairly wasteful in some cases. So we don't + * play quite by the book. We tell gcc mips_io_port_base is a long variable + * which solves the code generation issue. Now we need to violate the + * aliasing rules a little to make initialization possible and finally we + * will need the barrier() to fight side effects of the aliasing chat. + * This trickery will eventually collapse under gcc's optimizer. Oh well. + */ +static inline void set_io_port_base(unsigned long base) +{ + * (unsigned long *) &mips_io_port_base = base; +} /* * Thanks to James van Artsdalen for a better timing-fix than |