diff options
Diffstat (limited to 'board')
| -rw-r--r-- | board/at91rm9200dk/at91rm9200dk.c | 89 | ||||
| -rw-r--r-- | board/at91rm9200dk/config.mk | 2 | ||||
| -rw-r--r-- | board/at91rm9200dk/flash.c | 560 | ||||
| -rw-r--r-- | board/kup4k/kup4k.c | 10 | 
4 files changed, 365 insertions, 296 deletions
| diff --git a/board/at91rm9200dk/at91rm9200dk.c b/board/at91rm9200dk/at91rm9200dk.c index 07def18fd..ffd9687bf 100644 --- a/board/at91rm9200dk/at91rm9200dk.c +++ b/board/at91rm9200dk/at91rm9200dk.c @@ -30,28 +30,35 @@   * Miscelaneous platform dependent initialisations   */ -int board_init(void) -  { -  DECLARE_GLOBAL_DATA_PTR; +int board_init (void) +{ +	DECLARE_GLOBAL_DATA_PTR; + +	/* Enable Ctrlc */ +	console_init_f (); + +	/* Correct IRDA resistor problem */ +	/* Set PA23_TXD in Output */ +	(AT91PS_PIO) AT91C_BASE_PIOA->PIO_OER = AT91C_PA23_TXD2; -    /* memory and cpu-speed are setup before relocation */ -    /* so we do _nothing_ here */ +	/* memory and cpu-speed are setup before relocation */ +	/* so we do _nothing_ here */ -    /* arch number of AT91RM9200DK-Board */ -    gd->bd->bi_arch_number = 251; -    /* adress of boot parameters */ -    gd->bd->bi_boot_params = PHYS_SDRAM + 0x100; +	/* arch number of AT91RM9200DK-Board */ +	gd->bd->bi_arch_number = 251; +	/* adress of boot parameters */ +	gd->bd->bi_boot_params = PHYS_SDRAM + 0x100; -    return 0; +	return 0;  } -int dram_init(void) +int dram_init (void)  { -  DECLARE_GLOBAL_DATA_PTR; +	DECLARE_GLOBAL_DATA_PTR; -  gd->bd->bi_dram[0].start = PHYS_SDRAM; -  gd->bd->bi_dram[0].size  = PHYS_SDRAM_SIZE; -  return 0; +	gd->bd->bi_dram[0].start = PHYS_SDRAM; +	gd->bd->bi_dram[0].size = PHYS_SDRAM_SIZE; +	return 0;  }  /* @@ -59,47 +66,47 @@ int dram_init(void)   * The NAND lives in the CS2* space   */  #if (CONFIG_COMMANDS & CFG_CMD_NAND) -extern void -nand_probe(ulong physadr); +extern void nand_probe (ulong physadr); -#define AT91_SMARTMEDIA_BASE 0x40000000  /* physical address to access memory on NCS3 */ -void -nand_init(void) +#define AT91_SMARTMEDIA_BASE 0x40000000	/* physical address to access memory on NCS3 */ +void nand_init (void)  {  	/* Setup Smart Media, fitst enable the address range of CS3 */ -        *AT91C_EBI_CSA |= AT91C_EBI_CS3A_SMC_SmartMedia; -        /* set the bus interface characteristics based on -           tDS Data Set up Time 30 - ns -           tDH Data Hold Time 20 - ns -           tALS ALE Set up Time 20 - ns -           16ns at 60 MHz ~= 3  */ +	*AT91C_EBI_CSA |= AT91C_EBI_CS3A_SMC_SmartMedia; +	/* set the bus interface characteristics based on +	   tDS Data Set up Time 30 - ns +	   tDH Data Hold Time 20 - ns +	   tALS ALE Set up Time 20 - ns +	   16ns at 60 MHz ~= 3  */  /*memory mapping structures */  #define SM_ID_RWH	(5 << 28)  #define SM_RWH		(1 << 28)  #define SM_RWS		(0 << 24)  #define SM_TDF		(1 << 8)  #define SM_NWS		(3) -        AT91C_BASE_SMC2->SMC2_CSR[3] = ( SM_RWH|SM_RWS | AT91C_SMC2_ACSS_STANDARD | -                                         AT91C_SMC2_DBW_8 | SM_TDF | -                                         AT91C_SMC2_WSEN | SM_NWS); +	AT91C_BASE_SMC2->SMC2_CSR[3] = (SM_RWH | SM_RWS | +		AT91C_SMC2_ACSS_STANDARD | AT91C_SMC2_DBW_8 | +		SM_TDF | AT91C_SMC2_WSEN | SM_NWS); -        /* enable the SMOE line PC0=SMCE, A21=CLE, A22=ALE */ -        *AT91C_PIOC_ASR = AT91C_PC0_BFCK | AT91C_PC1_BFRDY_SMOE | AT91C_PC3_BFBAA_SMWE; -        *AT91C_PIOC_PDR = AT91C_PC0_BFCK | AT91C_PC1_BFRDY_SMOE | AT91C_PC3_BFBAA_SMWE; +	/* enable the SMOE line PC0=SMCE, A21=CLE, A22=ALE */ +	*AT91C_PIOC_ASR = AT91C_PC0_BFCK | AT91C_PC1_BFRDY_SMOE | +		AT91C_PC3_BFBAA_SMWE; +	*AT91C_PIOC_PDR = AT91C_PC0_BFCK | AT91C_PC1_BFRDY_SMOE | +		AT91C_PC3_BFBAA_SMWE;  	/* Configure PC2 as input (signal READY of the SmartMedia) */ -        *AT91C_PIOC_PER = AT91C_PC2_BFAVD;  /* enable direct output enable */ -        *AT91C_PIOC_ODR = AT91C_PC2_BFAVD;  /* disable output */ +	*AT91C_PIOC_PER = AT91C_PC2_BFAVD;	/* enable direct output enable */ +	*AT91C_PIOC_ODR = AT91C_PC2_BFAVD;	/* disable output */  	/* Configure PB1 as input (signal Card Detect of the SmartMedia) */ -        *AT91C_PIOB_PER = AT91C_PIO_PB1;  /* enable direct output enable */ -        *AT91C_PIOB_ODR = AT91C_PIO_PB1;  /* disable output */ +	*AT91C_PIOB_PER = AT91C_PIO_PB1;	/* enable direct output enable */ +	*AT91C_PIOB_ODR = AT91C_PIO_PB1;	/* disable output */ -        if (*AT91C_PIOB_PDSR & AT91C_PIO_PB1) -          printf ("No "); -        printf ("SmartMedia card inserted\n"); +	if (*AT91C_PIOB_PDSR & AT91C_PIO_PB1) +		printf ("No "); +	printf ("SmartMedia card inserted\n"); -	printf("Probing at 0x%.8x\n", AT91_SMARTMEDIA_BASE); -	nand_probe(AT91_SMARTMEDIA_BASE); +	printf ("Probing at 0x%.8x\n", AT91_SMARTMEDIA_BASE); +	nand_probe (AT91_SMARTMEDIA_BASE);  }  #endif diff --git a/board/at91rm9200dk/config.mk b/board/at91rm9200dk/config.mk index a682451eb..009b4d794 100644 --- a/board/at91rm9200dk/config.mk +++ b/board/at91rm9200dk/config.mk @@ -1,2 +1,2 @@ -TEXT_BASE = 0x21fa0000 +TEXT_BASE = 0x21f00000 diff --git a/board/at91rm9200dk/flash.c b/board/at91rm9200dk/flash.c index 6497f11ca..4d4524f70 100644 --- a/board/at91rm9200dk/flash.c +++ b/board/at91rm9200dk/flash.c @@ -31,11 +31,40 @@  ulong myflush(void); +/* Flash Organization Structure */ +typedef struct OrgDef +{ +	unsigned int sector_number; +	unsigned int sector_size; +} OrgDef; + + +/* Flash Organizations */ +OrgDef OrgAT49BV16x4[] = +{ +	{ 8, 8*1024 }, /* 8 * 8kBytes sectors */ +	{ 2, 32*1024 }, /* 2 * 32kBytes sectors */	 +	{ 30, 64*1024 } /* 30 * 64kBytes sectors */	 +}; + +OrgDef OrgAT49BV16x4A[] = +{ +	{ 8, 8*1024 }, /* 8 * 8kBytes sectors */	 +	{ 31, 64*1024 } /* 31 * 64kBytes sectors */	 +}; + +  #define FLASH_BANK_SIZE 0x200000	/* 2 MB */  #define MAIN_SECT_SIZE  0x10000		/* 64 KB */  flash_info_t    flash_info[CFG_MAX_FLASH_BANKS]; +/* AT49BV1614A Codes */ +#define FLASH_CODE1		0xAA +#define FLASH_CODE2		0x55 +#define ID_IN_CODE		0x90 +#define ID_OUT_CODE		0xF0 +  #define CMD_READ_ARRAY		0x00F0  #define CMD_UNLOCK1		0x00AA @@ -48,6 +77,9 @@ flash_info_t    flash_info[CFG_MAX_FLASH_BANKS];  #define MEM_FLASH_ADDR1		(*(volatile u16 *)(CFG_FLASH_BASE + (0x00005555<<1)))  #define MEM_FLASH_ADDR2		(*(volatile u16 *)(CFG_FLASH_BASE + (0x00002AAA<<1))) +#define IDENT_FLASH_ADDR1	(*(volatile u16 *)(CFG_FLASH_BASE + (0x0000555<<1))) +#define IDENT_FLASH_ADDR2	(*(volatile u16 *)(CFG_FLASH_BASE + (0x0000AAA<<1))) +  #define BIT_ERASE_DONE		0x0080  #define BIT_RDY_MASK		0x0080  #define BIT_PROGRAM_ERROR	0x0020 @@ -59,339 +91,375 @@ flash_info_t    flash_info[CFG_MAX_FLASH_BANKS];  /*-----------------------------------------------------------------------   */ +void flash_identification (flash_info_t * info) +{ +	volatile u16 manuf_code, device_code, add_device_code; + +	IDENT_FLASH_ADDR1 = FLASH_CODE1; +	IDENT_FLASH_ADDR2 = FLASH_CODE2; +	IDENT_FLASH_ADDR1 = ID_IN_CODE; + +	manuf_code = *(volatile u16 *) CFG_FLASH_BASE; +	device_code = *(volatile u16 *) (CFG_FLASH_BASE + 2); +	add_device_code = *(volatile u16 *) (CFG_FLASH_BASE + (3 << 1)); + +	IDENT_FLASH_ADDR1 = FLASH_CODE1; +	IDENT_FLASH_ADDR2 = FLASH_CODE2; +	IDENT_FLASH_ADDR1 = ID_OUT_CODE; + +	/* Vendor type */ +	info->flash_id = ATM_MANUFACT & FLASH_VENDMASK; +	printf ("Atmel: "); -ulong flash_init(void) +	if ((device_code & FLASH_TYPEMASK) == (ATM_ID_BV1614 & FLASH_TYPEMASK)) { + +		if ((add_device_code & FLASH_TYPEMASK) == +			(ATM_ID_BV1614A & FLASH_TYPEMASK)) { +			info->flash_id |= ATM_ID_BV1614A & FLASH_TYPEMASK; +			printf ("AT49BV1614A (16Mbit)\n"); +		} + +	} else {				/* AT49BV1614 Flash */ +		info->flash_id |= ATM_ID_BV1614 & FLASH_TYPEMASK; +		printf ("AT49BV1614 (16Mbit)\n"); +	} +} + + +ulong flash_init (void)  { -    int i, j; -    ulong size = 0; +	int i, j, k; +	unsigned int flash_nb_blocks, sector; +	unsigned int start_address; +	OrgDef *pOrgDef; -    for (i = 0; i < CFG_MAX_FLASH_BANKS; i++) -    { -	ulong flashbase = 0; -	flash_info[i].flash_id = -	  (ATM_MANUFACT & FLASH_VENDMASK) | -	  (ATM_ID_BV1614 & FLASH_TYPEMASK); -	flash_info[i].size = FLASH_BANK_SIZE; -	flash_info[i].sector_count = CFG_MAX_FLASH_SECT; -	memset(flash_info[i].protect, 0, CFG_MAX_FLASH_SECT); -	if (i == 0) -	  flashbase = PHYS_FLASH_1; -	else -	  panic("configured to many flash banks!\n"); -	for (j = 0; j < flash_info[i].sector_count; j++) -	{ +	ulong size = 0; -	    if (j <= 9) -	    { -		/* 1st to 8th are 8 KB */ -		if (j <= 7) -		{ -		    flash_info[i].start[j] = flashbase + j*0x2000; +	for (i = 0; i < CFG_MAX_FLASH_BANKS; i++) { +		ulong flashbase = 0; + +		flash_identification (&flash_info[i]); + +		flash_info[i].size = FLASH_BANK_SIZE; + +		if ((flash_info[i].flash_id & FLASH_TYPEMASK) == +			(ATM_ID_BV1614 & FLASH_TYPEMASK)) { +			flash_info[i].sector_count = CFG_MAX_FLASH_SECT; +			memset (flash_info[i].protect, 0, CFG_MAX_FLASH_SECT); + +			pOrgDef = OrgAT49BV16x4; +			flash_nb_blocks = sizeof (OrgAT49BV16x4) / sizeof (OrgDef); +		} else {			/* AT49BV1614A Flash */ +			flash_info[i].sector_count = CFG_MAX_FLASH_SECT - 1; +			memset (flash_info[i].protect, 0, CFG_MAX_FLASH_SECT - 1); + +			pOrgDef = OrgAT49BV16x4A; +			flash_nb_blocks = sizeof (OrgAT49BV16x4A) / sizeof (OrgDef);  		} -		/* 9th and 10th are both 32 KB */ -		if ((j == 8) || (j == 9)) -		{ -			flash_info[i].start[j] = flashbase + 0x10000 + (j-8)*0x8000; +		if (i == 0) +			flashbase = PHYS_FLASH_1; +		else +			panic ("configured to many flash banks!\n"); + +		sector = 0; +		start_address = flashbase; + +		for (j = 0; j < flash_nb_blocks; j++) { +			for (k = 0; k < pOrgDef[j].sector_number; k++) { +				flash_info[i].start[sector++] = start_address; +				start_address += pOrgDef[j].sector_size; +			}  		} -	    } -	    else -	    { -		flash_info[i].start[j] = flashbase + (j-8)*MAIN_SECT_SIZE; -	    } + +		size += flash_info[i].size;  	} -	size += flash_info[i].size; -    } -    flash_protect(FLAG_PROTECT_SET, -		  CFG_FLASH_BASE, -		  CFG_ENV_ADDR - 1, -		  &flash_info[0]); +	/* Protect binary boot image */ +	flash_protect (FLAG_PROTECT_SET, +		       CFG_FLASH_BASE, +		       CFG_FLASH_BASE + CFG_BOOT_SIZE - 1, &flash_info[0]); + +	/* Protect environment variables */ +	flash_protect (FLAG_PROTECT_SET, +		       CFG_ENV_ADDR, +		       CFG_ENV_ADDR + CFG_ENV_SIZE - 1, &flash_info[0]); -    flash_protect(FLAG_PROTECT_SET, -		  CFG_ENV_ADDR, -		  CFG_ENV_ADDR + CFG_ENV_SIZE - 1, -		  &flash_info[0]); +	/* Protect U-Boot gzipped image */ +	flash_protect (FLAG_PROTECT_SET, +		       CFG_U_BOOT_BASE, +		       CFG_U_BOOT_BASE + CFG_U_BOOT_SIZE - 1, &flash_info[0]); -    return size; +	return size;  }  /*-----------------------------------------------------------------------   */ -void flash_print_info  (flash_info_t *info) +void flash_print_info (flash_info_t * info)  { -    int i; +	int i; -    switch (info->flash_id & FLASH_VENDMASK) -    { -    case (ATM_MANUFACT & FLASH_VENDMASK): -	printf("Atmel: "); -	break; -    default: -	printf("Unknown Vendor "); -	break; -    } +	switch (info->flash_id & FLASH_VENDMASK) { +	case (ATM_MANUFACT & FLASH_VENDMASK): +		printf ("Atmel: "); +		break; +	default: +		printf ("Unknown Vendor "); +		break; +	} -    switch (info->flash_id & FLASH_TYPEMASK) -    { -    case (ATM_ID_BV1614 & FLASH_TYPEMASK): -	printf("AT49BV1614 (16Mbit)\n"); -	break; -    default: -	printf("Unknown Chip Type\n"); -	goto Done; -	break; -    } +	switch (info->flash_id & FLASH_TYPEMASK) { +	case (ATM_ID_BV1614 & FLASH_TYPEMASK): +		printf ("AT49BV1614 (16Mbit)\n"); +		break; +	case (ATM_ID_BV1614A & FLASH_TYPEMASK): +		printf ("AT49BV1614A (16Mbit)\n"); +		break; +	default: +		printf ("Unknown Chip Type\n"); +		goto Done; +		break; +	} -    printf("  Size: %ld MB in %d Sectors\n", -	   info->size >> 20, info->sector_count); +	printf ("  Size: %ld MB in %d Sectors\n", +		info->size >> 20, info->sector_count); -    printf("  Sector Start Addresses:"); -    for (i = 0; i < info->sector_count; i++) -    { -	if ((i % 5) == 0) -	{ -	    printf ("\n   "); +	printf ("  Sector Start Addresses:"); +	for (i = 0; i < info->sector_count; i++) { +		if ((i % 5) == 0) { +			printf ("\n   "); +		} +		printf (" %08lX%s", info->start[i], +			info->protect[i] ? " (RO)" : "     ");  	} -	printf (" %08lX%s", info->start[i], -		info->protect[i] ? " (RO)" : "     "); -    } -    printf ("\n"); +	printf ("\n"); -Done: +  Done:  }  /*-----------------------------------------------------------------------   */ -int	flash_erase (flash_info_t *info, int s_first, int s_last) +int flash_erase (flash_info_t * info, int s_first, int s_last)  { -    ulong result; -    int iflag, cflag, prot, sect; -    int rc = ERR_OK; -    int chip1; +	ulong result; +	int iflag, cflag, prot, sect; +	int rc = ERR_OK; +	int chip1; -    /* first look for protection bits */ +	/* first look for protection bits */ -    if (info->flash_id == FLASH_UNKNOWN) -	return ERR_UNKNOWN_FLASH_TYPE; +	if (info->flash_id == FLASH_UNKNOWN) +		return ERR_UNKNOWN_FLASH_TYPE; -    if ((s_first < 0) || (s_first > s_last)) { -	return ERR_INVAL; -    } +	if ((s_first < 0) || (s_first > s_last)) { +		return ERR_INVAL; +	} -    if ((info->flash_id & FLASH_VENDMASK) != -	(ATM_MANUFACT & FLASH_VENDMASK)) { -	return ERR_UNKNOWN_FLASH_VENDOR; -    } +	if ((info->flash_id & FLASH_VENDMASK) != +		(ATM_MANUFACT & FLASH_VENDMASK)) { +		return ERR_UNKNOWN_FLASH_VENDOR; +	} -    prot = 0; -    for (sect=s_first; sect<=s_last; ++sect) { -	if (info->protect[sect]) { -	    prot++; +	prot = 0; +	for (sect = s_first; sect <= s_last; ++sect) { +		if (info->protect[sect]) { +			prot++; +		}  	} -    } -    if (prot) -	return ERR_PROTECTED; +	if (prot) +		return ERR_PROTECTED; -    /* -     * Disable interrupts which might cause a timeout -     * here. Remember that our exception vectors are -     * at address 0 in the flash, and we don't want a -     * (ticker) exception to happen while the flash -     * chip is in programming mode. -     */ -    cflag = icache_status(); -    icache_disable(); -    iflag = disable_interrupts(); +	/* +	 * Disable interrupts which might cause a timeout +	 * here. Remember that our exception vectors are +	 * at address 0 in the flash, and we don't want a +	 * (ticker) exception to happen while the flash +	 * chip is in programming mode. +	 */ +	cflag = icache_status (); +	icache_disable (); +	iflag = disable_interrupts (); -    /* Start erase on unprotected sectors */ -    for (sect = s_first; sect<=s_last && !ctrlc(); sect++) -    { -	printf("Erasing sector %2d ... ", sect); +	/* Start erase on unprotected sectors */ +	for (sect = s_first; sect <= s_last && !ctrlc (); sect++) { +		printf ("Erasing sector %2d ... ", sect); -	/* arm simple, non interrupt dependent timer */ -	reset_timer_masked(); +		/* arm simple, non interrupt dependent timer */ +		reset_timer_masked (); -	if (info->protect[sect] == 0) -	{	/* not protected */ -	    volatile u16 *addr = (volatile u16 *)(info->start[sect]); +		if (info->protect[sect] == 0) {	/* not protected */ +			volatile u16 *addr = (volatile u16 *) (info->start[sect]); -	    MEM_FLASH_ADDR1 = CMD_UNLOCK1; -	    MEM_FLASH_ADDR2 = CMD_UNLOCK2; -	    MEM_FLASH_ADDR1 = CMD_ERASE_SETUP; +			MEM_FLASH_ADDR1 = CMD_UNLOCK1; +			MEM_FLASH_ADDR2 = CMD_UNLOCK2; +			MEM_FLASH_ADDR1 = CMD_ERASE_SETUP; -	    MEM_FLASH_ADDR1 = CMD_UNLOCK1; -	    MEM_FLASH_ADDR2 = CMD_UNLOCK2; -	    *addr = CMD_ERASE_CONFIRM; +			MEM_FLASH_ADDR1 = CMD_UNLOCK1; +			MEM_FLASH_ADDR2 = CMD_UNLOCK2; +			*addr = CMD_ERASE_CONFIRM; -	    /* wait until flash is ready */ -	    chip1 = 0; +			/* wait until flash is ready */ +			chip1 = 0; -	    do -	    { -		result = *addr; +			do { +				result = *addr; -		/* check timeout */ -		if (get_timer_masked() > CFG_FLASH_ERASE_TOUT) -		{ -		    MEM_FLASH_ADDR1 = CMD_READ_ARRAY; -		    chip1 = TMO; -		    break; -		} +				/* check timeout */ +				if (get_timer_masked () > CFG_FLASH_ERASE_TOUT) { +					MEM_FLASH_ADDR1 = CMD_READ_ARRAY; +					chip1 = TMO; +					break; +				} -		if (!chip1 && (result & 0xFFFF) & BIT_ERASE_DONE) -			chip1 = READY; +				if (!chip1 && (result & 0xFFFF) & BIT_ERASE_DONE) +					chip1 = READY; -	    }  while (!chip1); +			} while (!chip1); -	    MEM_FLASH_ADDR1 = CMD_READ_ARRAY; +			MEM_FLASH_ADDR1 = CMD_READ_ARRAY; -	    if (chip1 == ERR) -	    { -		rc = ERR_PROG_ERROR; -		goto outahere; -	    } -	    if (chip1 == TMO) -	    { -		rc = ERR_TIMOUT; -		goto outahere; -	    } +			if (chip1 == ERR) { +				rc = ERR_PROG_ERROR; +				goto outahere; +			} +			if (chip1 == TMO) { +				rc = ERR_TIMOUT; +				goto outahere; +			} -	    printf("ok.\n"); -	} -	else /* it was protected */ -	{ -	    printf("protected!\n"); +			printf ("ok.\n"); +		} else {			/* it was protected */ +			printf ("protected!\n"); +		}  	} -    } -    if (ctrlc()) -      printf("User Interrupt!\n"); +	if (ctrlc ()) +		printf ("User Interrupt!\n");  outahere: -    /* allow flash to settle - wait 10 ms */ -    udelay_masked(10000); +	/* allow flash to settle - wait 10 ms */ +	udelay_masked (10000); -    if (iflag) -      enable_interrupts(); +	if (iflag) +		enable_interrupts (); -    if (cflag) -      icache_enable(); +	if (cflag) +		icache_enable (); -    return rc; +	return rc;  }  /*-----------------------------------------------------------------------   * Copy memory to flash   */ -volatile static int write_word (flash_info_t *info, ulong dest, ulong data) +volatile static int write_word (flash_info_t * info, ulong dest, +								ulong data)  { -    volatile u16 *addr = (volatile u16 *)dest; -    ulong result; -    int rc = ERR_OK; -    int cflag, iflag; -    int chip1; +	volatile u16 *addr = (volatile u16 *) dest; +	ulong result; +	int rc = ERR_OK; +	int cflag, iflag; +	int chip1; -    /* -     * Check if Flash is (sufficiently) erased -     */ -    result = *addr; -    if ((result & data) != data) -        return ERR_NOT_ERASED; +	/* +	 * Check if Flash is (sufficiently) erased +	 */ +	result = *addr; +	if ((result & data) != data) +		return ERR_NOT_ERASED; -    /* -     * Disable interrupts which might cause a timeout -     * here. Remember that our exception vectors are -     * at address 0 in the flash, and we don't want a -     * (ticker) exception to happen while the flash -     * chip is in programming mode. -     */ -    cflag = icache_status(); -    icache_disable(); -    iflag = disable_interrupts(); +	/* +	 * Disable interrupts which might cause a timeout +	 * here. Remember that our exception vectors are +	 * at address 0 in the flash, and we don't want a +	 * (ticker) exception to happen while the flash +	 * chip is in programming mode. +	 */ +	cflag = icache_status (); +	icache_disable (); +	iflag = disable_interrupts (); -    MEM_FLASH_ADDR1 = CMD_UNLOCK1; -    MEM_FLASH_ADDR2 = CMD_UNLOCK2; -    MEM_FLASH_ADDR1 = CMD_PROGRAM; -    *addr = data; +	MEM_FLASH_ADDR1 = CMD_UNLOCK1; +	MEM_FLASH_ADDR2 = CMD_UNLOCK2; +	MEM_FLASH_ADDR1 = CMD_PROGRAM; +	*addr = data; -    /* arm simple, non interrupt dependent timer */ -    reset_timer_masked(); +	/* arm simple, non interrupt dependent timer */ +	reset_timer_masked (); -    /* wait until flash is ready */ -    chip1 = 0; -    do -    { -	result = *addr; +	/* wait until flash is ready */ +	chip1 = 0; +	do { +		result = *addr; -	/* check timeout */ -	if (get_timer_masked() > CFG_FLASH_ERASE_TOUT) -	{ -	    chip1 = ERR | TMO; -	    break; -	} -	if (!chip1 && ((result & 0x80) == (data & 0x80))) -		chip1 = READY; +		/* check timeout */ +		if (get_timer_masked () > CFG_FLASH_ERASE_TOUT) { +			chip1 = ERR | TMO; +			break; +		} +		if (!chip1 && ((result & 0x80) == (data & 0x80))) +			chip1 = READY; -    }  while (!chip1); +	} while (!chip1); -    *addr = CMD_READ_ARRAY; +	*addr = CMD_READ_ARRAY; -    if (chip1 == ERR || *addr != data) -        rc = ERR_PROG_ERROR; +	if (chip1 == ERR || *addr != data) +		rc = ERR_PROG_ERROR; -    if (iflag) -      enable_interrupts(); +	if (iflag) +		enable_interrupts (); -    if (cflag) -      icache_enable(); +	if (cflag) +		icache_enable (); -    return rc; +	return rc;  }  /*-----------------------------------------------------------------------   * Copy memory to flash.   */ -int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt) +int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)  { -    ulong wp, data; -    int rc; +	ulong wp, data; +	int rc; -    if(addr & 1) { -      printf("unaligned destination not supported\n"); -      return ERR_ALIGN; -    }; +	if (addr & 1) { +		printf ("unaligned destination not supported\n"); +		return ERR_ALIGN; +	}; -    if((int)src & 1) { -      printf("unaligned source not supported\n"); -      return ERR_ALIGN; -    }; +	if ((int) src & 1) { +		printf ("unaligned source not supported\n"); +		return ERR_ALIGN; +	}; -    wp = addr; +	wp = addr; -    while (cnt >= 2) { -	data = *((volatile u16*)src); -	if ((rc = write_word(info, wp, data)) != 0) { -	    return (rc); +	while (cnt >= 2) { +		data = *((volatile u16 *) src); +		if ((rc = write_word (info, wp, data)) != 0) { +			return (rc); +		} +		src += 2; +		wp += 2; +		cnt -= 2;  	} -	src += 2; -	wp  += 2; -	cnt -= 2; -    } -    if(cnt == 1) { -      data =  (*((volatile u8*)src)) | (*((volatile u8*)(wp+1)) << 8); -	if ((rc = write_word(info, wp, data)) != 0) { -	    return (rc); -	} -	src += 1; -	wp  += 1; -	cnt -= 1; -    }; +	if (cnt == 1) { +		data = (*((volatile u8 *) src)) | (*((volatile u8 *) (wp + 1)) << +										   8); +		if ((rc = write_word (info, wp, data)) != 0) { +			return (rc); +		} +		src += 1; +		wp += 1; +		cnt -= 1; +	}; -    return ERR_OK; +	return ERR_OK;  } diff --git a/board/kup4k/kup4k.c b/board/kup4k/kup4k.c index b3ede17b3..7981df3b3 100644 --- a/board/kup4k/kup4k.c +++ b/board/kup4k/kup4k.c @@ -299,12 +299,6 @@ int misc_init_r (void)  void lcd_logo (bd_t * bd)  { - - -	volatile immap_t *immap = (immap_t *) CFG_IMMR; - - -  	FB_INFO_S1D13xxx fb_info;  	S1D_INDEX s1dReg;  	S1D_VALUE s1dValue; @@ -328,8 +322,8 @@ void lcd_logo (bd_t * bd)  			 /**/  /*----------------------------------------------------------------------------- */  			memctl = &immr->im_memctl; -/*    memctl->memc_or5 = 0xFFC007F0;    / * 4 MB  17 WS or externel TA */ -/*    memctl->memc_br5 = 0x80000801;    / * Start at 0x80000000 */ +/*	memctl->memc_or5 = 0xFFC007F0;    / * 4 MB  17 WS or externel TA */ +/*	memctl->memc_br5 = 0x80000801;    / * Start at 0x80000000 */  	memctl->memc_or5 = 0xFFC00708;	/* 4 MB  17 WS or externel TA */  	memctl->memc_br5 = 0x80080801;	/* Start at 0x80080000 */ |