]>
Commit | Line | Data |
---|---|---|
071d897c SR |
1 | /* |
2 | * (C) Copyright 2001-2003 | |
2076d0a1 SR |
3 | * Stefan Roese, DENX Software Engineering, sr@denx.de. |
4 | * | |
2f6eb917 | 5 | * (C) Copyright 2005-2009 |
2076d0a1 | 6 | * Matthias Fuchs, esd gmbh germany, matthias.fuchs@esd-electronics.com |
071d897c | 7 | * |
1a459660 | 8 | * SPDX-License-Identifier: GPL-2.0+ |
071d897c SR |
9 | */ |
10 | ||
11 | #include <common.h> | |
12 | #include <asm/processor.h> | |
2f6eb917 | 13 | #include <asm/io.h> |
071d897c | 14 | #include <command.h> |
071d897c SR |
15 | #include <malloc.h> |
16 | ||
d87080b7 | 17 | DECLARE_GLOBAL_DATA_PTR; |
071d897c | 18 | |
4510a7b7 SR |
19 | extern void lxt971_no_sleep(void); |
20 | ||
c837dcb1 | 21 | int board_early_init_f (void) |
071d897c SR |
22 | { |
23 | /* | |
24 | * IRQ 0-15 405GP internally generated; active high; level sensitive | |
25 | * IRQ 16 405GP internally generated; active low; level sensitive | |
26 | * IRQ 17-24 RESERVED | |
27 | * IRQ 25 (EXT IRQ 0) CAN0; active low; level sensitive | |
28 | * IRQ 26 (EXT IRQ 1) SER0 ; active low; level sensitive | |
29 | * IRQ 27 (EXT IRQ 2) SER1; active low; level sensitive | |
30 | * IRQ 28 (EXT IRQ 3) FPGA 0; active low; level sensitive | |
31 | * IRQ 29 (EXT IRQ 4) FPGA 1; active low; level sensitive | |
32 | * IRQ 30 (EXT IRQ 5) PCI INTA; active low; level sensitive | |
33 | * IRQ 31 (EXT IRQ 6) COMPACT FLASH; active high; level sensitive | |
34 | */ | |
952e7760 SR |
35 | mtdcr(UIC0SR, 0xFFFFFFFF); /* clear all ints */ |
36 | mtdcr(UIC0ER, 0x00000000); /* disable all ints */ | |
37 | mtdcr(UIC0CR, 0x00000000); /* set all to be non-critical*/ | |
38 | mtdcr(UIC0PR, 0xFFFFFF81); /* set int polarities */ | |
39 | mtdcr(UIC0TR, 0x10000000); /* set int trigger levels */ | |
40 | mtdcr(UIC0VCR, 0x00000001); /* set vect base=0, INT0 highest priority */ | |
41 | mtdcr(UIC0SR, 0xFFFFFFFF); /* clear all ints */ | |
071d897c SR |
42 | |
43 | /* | |
c553b5f4 MF |
44 | * EBC Configuration Register: |
45 | * set ready timeout to 512 ebc-clks -> ca. 15 us | |
071d897c | 46 | */ |
d1c3b275 | 47 | mtebc (EBC0_CFG, 0xa8400000); |
071d897c | 48 | |
4510a7b7 | 49 | /* |
2076d0a1 | 50 | * Setup GPIO pins |
4510a7b7 | 51 | */ |
d1c3b275 | 52 | mtdcr(CPC0_CR0, mfdcr(CPC0_CR0) | ((CONFIG_SYS_FPGA_INIT | |
f50fe4bd SR |
53 | CONFIG_SYS_FPGA_DONE | |
54 | CONFIG_SYS_XEREADY | | |
55 | CONFIG_SYS_NONMONARCH | | |
6d0f6bcf | 56 | CONFIG_SYS_REV1_2) << 5)); |
2076d0a1 | 57 | |
f50fe4bd | 58 | if (!(in_be32((void *)GPIO0_IR) & CONFIG_SYS_REV1_2)) { |
2076d0a1 | 59 | /* rev 1.2 boards */ |
d1c3b275 | 60 | mtdcr(CPC0_CR0, mfdcr(CPC0_CR0) | ((CONFIG_SYS_INTA_FAKE | |
6d0f6bcf | 61 | CONFIG_SYS_SELF_RST) << 5)); |
2076d0a1 SR |
62 | } |
63 | ||
f50fe4bd | 64 | out_be32((void *)GPIO0_OR, CONFIG_SYS_VPEN); |
c553b5f4 | 65 | /* setup for output */ |
f50fe4bd SR |
66 | out_be32((void *)GPIO0_TCR, CONFIG_SYS_FPGA_PRG | CONFIG_SYS_FPGA_CLK | |
67 | CONFIG_SYS_FPGA_DATA | CONFIG_SYS_XEREADY | CONFIG_SYS_VPEN); | |
2076d0a1 | 68 | |
c553b5f4 MF |
69 | /* |
70 | * - check if rev1_2 is low, then: | |
71 | * - set/reset CONFIG_SYS_INTA_FAKE/CONFIG_SYS_SELF_RST | |
72 | * in TCR to assert INTA# or SELFRST# | |
4510a7b7 | 73 | */ |
071d897c SR |
74 | return 0; |
75 | } | |
76 | ||
071d897c SR |
77 | int misc_init_r (void) |
78 | { | |
4510a7b7 SR |
79 | /* adjust flash start and offset */ |
80 | gd->bd->bi_flashstart = 0 - gd->bd->bi_flashsize; | |
81 | gd->bd->bi_flashoffset = 0; | |
82 | ||
c553b5f4 | 83 | /* deassert EREADY# */ |
f50fe4bd SR |
84 | out_be32((void *)GPIO0_OR, |
85 | in_be32((void *)GPIO0_OR) | CONFIG_SYS_XEREADY); | |
071d897c SR |
86 | return (0); |
87 | } | |
88 | ||
2076d0a1 SR |
89 | ushort pmc405_pci_subsys_deviceid(void) |
90 | { | |
91 | ulong val; | |
f50fe4bd SR |
92 | |
93 | val = in_be32((void *)GPIO0_IR); | |
6d0f6bcf | 94 | if (!(val & CONFIG_SYS_REV1_2)) { /* low=rev1.2 */ |
c553b5f4 MF |
95 | /* check monarch# signal */ |
96 | if (val & CONFIG_SYS_NONMONARCH) | |
6d0f6bcf | 97 | return CONFIG_SYS_PCI_SUBSYS_DEVICEID_NONMONARCH; |
6d0f6bcf | 98 | return CONFIG_SYS_PCI_SUBSYS_DEVICEID_MONARCH; |
2076d0a1 | 99 | } |
6d0f6bcf | 100 | return CONFIG_SYS_PCI_SUBSYS_DEVICEID_NONMONARCH; |
2076d0a1 | 101 | } |
071d897c SR |
102 | |
103 | /* | |
c553b5f4 | 104 | * Check Board Identity |
071d897c | 105 | */ |
071d897c SR |
106 | int checkboard (void) |
107 | { | |
2076d0a1 | 108 | ulong val; |
77ddac94 | 109 | char str[64]; |
cdb74977 | 110 | int i = getenv_f("serial#", str, sizeof(str)); |
071d897c SR |
111 | |
112 | puts ("Board: "); | |
113 | ||
c553b5f4 | 114 | if (i == -1) |
ef9e8685 | 115 | puts ("### No HW ID - assuming PMC405"); |
c553b5f4 | 116 | else |
071d897c | 117 | puts(str); |
071d897c | 118 | |
f50fe4bd | 119 | val = in_be32((void *)GPIO0_IR); |
6d0f6bcf | 120 | if (!(val & CONFIG_SYS_REV1_2)) { /* low=rev1.2 */ |
2076d0a1 | 121 | puts(" rev1.2 ("); |
c553b5f4 | 122 | if (val & CONFIG_SYS_NONMONARCH) /* monarch# signal */ |
2076d0a1 | 123 | puts("non-"); |
2076d0a1 | 124 | puts("monarch)"); |
c553b5f4 | 125 | } else |
2076d0a1 | 126 | puts(" <=rev1.1"); |
071d897c | 127 | |
2076d0a1 | 128 | putc ('\n'); |
4510a7b7 | 129 | |
071d897c SR |
130 | return 0; |
131 | } | |
132 | ||
2076d0a1 | 133 | void reset_phy(void) |
071d897c | 134 | { |
2076d0a1 | 135 | #ifdef CONFIG_LXT971_NO_SLEEP |
071d897c | 136 | |
2076d0a1 SR |
137 | /* |
138 | * Disable sleep mode in LXT971 | |
139 | */ | |
140 | lxt971_no_sleep(); | |
141 | #endif | |
071d897c | 142 | } |