diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2006-11-11 06:24:53 (GMT) |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2006-12-04 05:08:25 (GMT) |
commit | 4c75a6f441cdd1c69a6c173bc7944e12c2ba6f84 (patch) | |
tree | 260e01e5cbd46d335a3d44b60c34dee51e053774 /arch/powerpc/sysdev/dcr-low.S | |
parent | 69108cf00679716bcab58acb3135390654c5bb99 (diff) | |
download | linux-4c75a6f441cdd1c69a6c173bc7944e12c2ba6f84.tar.xz |
[POWERPC] Generic DCR infrastructure
This patch adds new dcr_map/dcr_read/dcr_write accessors for DCRs that
can be used by drivers to transparently address either native DCRs or
memory mapped DCRs. The implementation for memory mapped DCRs is done
after the binding being currently worked on for SLOF and the Axon
chipset. This patch enables it for the cell native platform
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc/sysdev/dcr-low.S')
-rw-r--r-- | arch/powerpc/sysdev/dcr-low.S | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/arch/powerpc/sysdev/dcr-low.S b/arch/powerpc/sysdev/dcr-low.S new file mode 100644 index 0000000..2078f39 --- /dev/null +++ b/arch/powerpc/sysdev/dcr-low.S @@ -0,0 +1,39 @@ +/* + * "Indirect" DCR access + * + * Copyright (c) 2004 Eugene Surovegin <ebs@ebshome.net> + * + * 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. + */ + +#include <asm/ppc_asm.h> +#include <asm/processor.h> + +#define DCR_ACCESS_PROLOG(table) \ + rlwinm r3,r3,4,18,27; \ + lis r5,table@h; \ + ori r5,r5,table@l; \ + add r3,r3,r5; \ + mtctr r3; \ + bctr + +_GLOBAL(__mfdcr) + DCR_ACCESS_PROLOG(__mfdcr_table) + +_GLOBAL(__mtdcr) + DCR_ACCESS_PROLOG(__mtdcr_table) + +__mfdcr_table: + mfdcr r3,0; blr +__mtdcr_table: + mtdcr 0,r4; blr + +dcr = 1 + .rept 1023 + mfdcr r3,dcr; blr + mtdcr dcr,r4; blr + dcr = dcr + 1 + .endr |