mirror of
				https://source.denx.de/u-boot/u-boot.git
				synced 2025-11-03 18:01:41 +01:00 
			
		
		
		
	Notes: - Board-dependend code for RPXLITE and RPXCLASSIC-based boards placed to the drivers/rpx_pmcia.c file to avoid duplication. Same for TQM8xx-based boards (drivers/tqm8xx_pmcia.c). - drivers/i82365.c has been split into two parts located at board/atc/ti113x.c and board/cpc45/pd67290.c (ATC and CPC45 are the only boards using CONFIG_82365). - Changes were tested for clean build and *very* *few* boards.
		
			
				
	
	
		
			96 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#include <common.h>
 | 
						|
#include <config.h>
 | 
						|
 | 
						|
#ifdef CONFIG_PXA_PCMCIA
 | 
						|
 | 
						|
#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, CFG_MCMEM0_VAL,
 | 
						|
		0x4800002c, CFG_MCMEM1_VAL,
 | 
						|
		0x48000030, CFG_MCATT0_VAL,
 | 
						|
		0x48000034, CFG_MCATT1_VAL,
 | 
						|
		0x48000038, CFG_MCIO0_VAL,
 | 
						|
		0x4800003c, CFG_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++];
 | 
						|
	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 (CONFIG_COMMANDS & CFG_CMD_PCMCIA)
 | 
						|
int pcmcia_off (void)
 | 
						|
{
 | 
						|
	return 0;
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#endif /* CONFIG_PXA_PCMCIA */
 |