| #include <common.h> |
| #include <config.h> |
| |
| #include <pcmcia.h> |
| #include <asm/arch/pxa-regs.h> |
| #include <asm/io.h> |
| |
| static inline void msWait(unsigned msVal) |
| { |
| udelay(msVal*1000); |
| } |
| |
| int pcmcia_on (void) |
| { |
| unsigned int reg_arr[] = { |
| 0x48000028, CONFIG_SYS_MCMEM0_VAL, |
| 0x4800002c, CONFIG_SYS_MCMEM1_VAL, |
| 0x48000030, CONFIG_SYS_MCATT0_VAL, |
| 0x48000034, CONFIG_SYS_MCATT1_VAL, |
| 0x48000038, CONFIG_SYS_MCIO0_VAL, |
| 0x4800003c, CONFIG_SYS_MCIO1_VAL, |
| |
| 0, 0 |
| }; |
| int i, rc; |
| |
| #ifdef CONFIG_EXADRON1 |
| int cardDetect; |
| volatile unsigned int *v_pBCRReg = |
| (volatile unsigned int *) 0x08000000; |
| #endif |
| |
| debug ("%s\n", __FUNCTION__); |
| |
| i = 0; |
| while (reg_arr[i]) { |
| (*(volatile unsigned int *) reg_arr[i]) |= reg_arr[i + 1]; |
| i += 2; |
| } |
| udelay (1000); |
| |
| debug ("%s: programmed mem controller \n", __FUNCTION__); |
| |
| #ifdef CONFIG_EXADRON1 |
| |
| /*define useful BCR masks */ |
| #define BCR_CF_INIT_VAL 0x00007230 |
| #define BCR_CF_PWRON_BUSOFF_RESETOFF_VAL 0x00007231 |
| #define BCR_CF_PWRON_BUSOFF_RESETON_VAL 0x00007233 |
| #define BCR_CF_PWRON_BUSON_RESETON_VAL 0x00007213 |
| #define BCR_CF_PWRON_BUSON_RESETOFF_VAL 0x00007211 |
| |
| /* we see from the GPIO bit if the card is present */ |
| cardDetect = !(GPLR0 & GPIO_bit (14)); |
| |
| if (cardDetect) { |
| printf ("No PCMCIA card found!\n"); |
| } |
| |
| /* reset the card via the BCR line */ |
| *v_pBCRReg = (unsigned) BCR_CF_INIT_VAL; |
| msWait (500); |
| |
| *v_pBCRReg = (unsigned) BCR_CF_PWRON_BUSOFF_RESETOFF_VAL; |
| msWait (500); |
| |
| *v_pBCRReg = (unsigned) BCR_CF_PWRON_BUSOFF_RESETON_VAL; |
| msWait (500); |
| |
| *v_pBCRReg = (unsigned) BCR_CF_PWRON_BUSON_RESETON_VAL; |
| msWait (500); |
| |
| *v_pBCRReg = (unsigned) BCR_CF_PWRON_BUSON_RESETOFF_VAL; |
| msWait (1500); |
| |
| /* enable address bus */ |
| GPCR1 = 0x01; |
| /* and the first CF slot */ |
| MECR = 0x00000002; |
| |
| #endif /* EXADRON 1 */ |
| |
| rc = check_ide_device (0); /* use just slot 0 */ |
| |
| return rc; |
| } |
| |
| #if defined(CONFIG_CMD_PCMCIA) |
| int pcmcia_off (void) |
| { |
| return 0; |
| } |
| #endif |