]> git.ipfire.org Git - people/ms/u-boot.git/blob - drivers/pxa_pcmcia.c
Fix mkimage -l bug with multifile images on 64bit platforms
[people/ms/u-boot.git] / drivers / pxa_pcmcia.c
1 #include <common.h>
2 #include <config.h>
3
4 #ifdef CONFIG_PXA_PCMCIA
5
6 #include <pcmcia.h>
7 #include <asm/arch/pxa-regs.h>
8 #include <asm/io.h>
9
10 static inline void msWait(unsigned msVal)
11 {
12 udelay(msVal*1000);
13 }
14
15 int pcmcia_on (void)
16 {
17 unsigned int reg_arr[] = {
18 0x48000028, CFG_MCMEM0_VAL,
19 0x4800002c, CFG_MCMEM1_VAL,
20 0x48000030, CFG_MCATT0_VAL,
21 0x48000034, CFG_MCATT1_VAL,
22 0x48000038, CFG_MCIO0_VAL,
23 0x4800003c, CFG_MCIO1_VAL,
24
25 0, 0
26 };
27 int i, rc;
28
29 #ifdef CONFIG_EXADRON1
30 int cardDetect;
31 volatile unsigned int *v_pBCRReg =
32 (volatile unsigned int *) 0x08000000;
33 #endif
34
35 debug ("%s\n", __FUNCTION__);
36
37 i = 0;
38 while (reg_arr[i])
39 *((volatile unsigned int *) reg_arr[i++]) |= reg_arr[i++];
40 udelay (1000);
41
42 debug ("%s: programmed mem controller \n", __FUNCTION__);
43
44 #ifdef CONFIG_EXADRON1
45
46 /*define useful BCR masks */
47 #define BCR_CF_INIT_VAL 0x00007230
48 #define BCR_CF_PWRON_BUSOFF_RESETOFF_VAL 0x00007231
49 #define BCR_CF_PWRON_BUSOFF_RESETON_VAL 0x00007233
50 #define BCR_CF_PWRON_BUSON_RESETON_VAL 0x00007213
51 #define BCR_CF_PWRON_BUSON_RESETOFF_VAL 0x00007211
52
53 /* we see from the GPIO bit if the card is present */
54 cardDetect = !(GPLR0 & GPIO_bit (14));
55
56 if (cardDetect) {
57 printf ("No PCMCIA card found!\n");
58 }
59
60 /* reset the card via the BCR line */
61 *v_pBCRReg = (unsigned) BCR_CF_INIT_VAL;
62 msWait (500);
63
64 *v_pBCRReg = (unsigned) BCR_CF_PWRON_BUSOFF_RESETOFF_VAL;
65 msWait (500);
66
67 *v_pBCRReg = (unsigned) BCR_CF_PWRON_BUSOFF_RESETON_VAL;
68 msWait (500);
69
70 *v_pBCRReg = (unsigned) BCR_CF_PWRON_BUSON_RESETON_VAL;
71 msWait (500);
72
73 *v_pBCRReg = (unsigned) BCR_CF_PWRON_BUSON_RESETOFF_VAL;
74 msWait (1500);
75
76 /* enable address bus */
77 GPCR1 = 0x01;
78 /* and the first CF slot */
79 MECR = 0x00000002;
80
81 #endif /* EXADRON 1 */
82
83 rc = check_ide_device (0); /* use just slot 0 */
84
85 return rc;
86 }
87
88 #if (CONFIG_COMMANDS & CFG_CMD_PCMCIA)
89 int pcmcia_off (void)
90 {
91 return 0;
92 }
93 #endif
94
95 #endif /* CONFIG_PXA_PCMCIA */