aboutsummaryrefslogtreecommitdiffstats
path: root/arch/cris/include/arch-v32
diff options
context:
space:
mode:
authorJesper Nilsson <jesper.nilsson@axis.com>2010-08-04 05:03:57 -0400
committerJesper Nilsson <jesper.nilsson@axis.com>2010-08-04 07:02:37 -0400
commit0c07d3abc8d76120317c108062cc7aa81fbd96d6 (patch)
tree3ba62b6532bd8388651405847cce91cf3112b300 /arch/cris/include/arch-v32
parent6f09963caf5ff7cb4b8de600caee3ff016e97139 (diff)
CRIS: Better handling of pinmux settings
Depending on eth, eth_mido and geth fields in wr_hwprot, don't set corresponding pins on gpio port b to gpio mode. This avoids re-resetting the ethernet PHY should this already have been done. Signed-off-by: Jesper Nilsson <jesper.nilsson@axis.com>
Diffstat (limited to 'arch/cris/include/arch-v32')
-rw-r--r--arch/cris/include/arch-v32/mach-a3/mach/startup.inc28
1 files changed, 26 insertions, 2 deletions
diff --git a/arch/cris/include/arch-v32/mach-a3/mach/startup.inc b/arch/cris/include/arch-v32/mach-a3/mach/startup.inc
index 2f23e5e16f4a..2d52bcc96ed5 100644
--- a/arch/cris/include/arch-v32/mach-a3/mach/startup.inc
+++ b/arch/cris/include/arch-v32/mach-a3/mach/startup.inc
@@ -1,9 +1,19 @@
1#ifndef STARTUP_INC_INCLUDED
2#define STARTUP_INC_INCLUDED
3
1#include <hwregs/asm/reg_map_asm.h> 4#include <hwregs/asm/reg_map_asm.h>
2#include <hwregs/asm/gio_defs_asm.h> 5#include <hwregs/asm/gio_defs_asm.h>
3#include <hwregs/asm/pio_defs_asm.h> 6#include <hwregs/asm/pio_defs_asm.h>
4#include <hwregs/asm/clkgen_defs_asm.h> 7#include <hwregs/asm/clkgen_defs_asm.h>
5#include <hwregs/asm/pinmux_defs_asm.h> 8#include <hwregs/asm/pinmux_defs_asm.h>
6 9
10 .macro GIO_SET_P BITS, OUTREG
11 bmi 1f ; btstq: bit -> N flag
12 nop
13 or.d \BITS, \OUTREG
141:
15 .endm
16
7 .macro GIO_INIT 17 .macro GIO_INIT
8 move.d CONFIG_ETRAX_DEF_GIO_PA_OUT, $r0 18 move.d CONFIG_ETRAX_DEF_GIO_PA_OUT, $r0
9 move.d REG_ADDR(gio, regi_gio, rw_pa_dout), $r1 19 move.d REG_ADDR(gio, regi_gio, rw_pa_dout), $r1
@@ -32,10 +42,23 @@
32 move.d 0xFFFFFFFF, $r0 42 move.d 0xFFFFFFFF, $r0
33 move.d REG_ADDR(pinmux, regi_pinmux, rw_gio_pa), $r1 43 move.d REG_ADDR(pinmux, regi_pinmux, rw_gio_pa), $r1
34 move.d $r0, [$r1] 44 move.d $r0, [$r1]
35 move.d REG_ADDR(pinmux, regi_pinmux, rw_gio_pb), $r1
36 move.d $r0, [$r1]
37 move.d REG_ADDR(pinmux, regi_pinmux, rw_gio_pc), $r1 45 move.d REG_ADDR(pinmux, regi_pinmux, rw_gio_pc), $r1
38 move.d $r0, [$r1] 46 move.d $r0, [$r1]
47
48 ;; If eth_mdio, eth, geth bits are set in hwprot, don't
49 ;; set them to gpio, as this means they have been configured
50 ;; earlier and shouldn't be changed.
51 move.d 0xFC000000, $r2 ; pins 25..0 are eth_mdio, eth, geth
52 move.d REG_ADDR(pinmux, regi_pinmux, rw_hwprot), $r1
53 move.d [$r1], $r0
54 btstq REG_BIT(pinmux, rw_hwprot, eth), $r0
55 GIO_SET_P 0x00FFFF00, $r2 ;; pins 8..23 are eth
56 btstq REG_BIT(pinmux, rw_hwprot, eth_mdio), $r0
57 GIO_SET_P 0x03000000, $r2 ;; pins 24..25 are eth_mdio
58 btstq REG_BIT(pinmux, rw_hwprot, geth), $r0
59 GIO_SET_P 0x000000FF, $r2 ;; pins 0..7 are geth
60 move.d REG_ADDR(pinmux, regi_pinmux, rw_gio_pb), $r1
61 move.d $r2, [$r1]
39 .endm 62 .endm
40 63
41 .macro START_CLOCKS 64 .macro START_CLOCKS
@@ -58,3 +81,4 @@
58 move.d CONFIG_ETRAX_PIO_CE2_CFG, $r1 81 move.d CONFIG_ETRAX_PIO_CE2_CFG, $r1
59 move.d $r1, [$r0] 82 move.d $r1, [$r0]
60 .endm 83 .endm
84#endif