1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- /*
- * CF IDE addon card code
- *
- * Enter bugs at http://blackfin.uclinux.org/
- *
- * Copyright (c) 2005-2009 Analog Devices Inc.
- *
- * Licensed under the GPL-2 or later.
- */
- #include <common.h>
- #include <config.h>
- #include <asm/blackfin.h>
- void cf_outb(unsigned char val, volatile unsigned char *addr)
- {
- /* "ETHERNET" means the expansion memory banks */
- swap_to(ETHERNET);
- *addr = val;
- SSYNC();
- swap_to(FLASH);
- }
- unsigned char cf_inb(volatile unsigned char *addr)
- {
- unsigned char c;
- swap_to(ETHERNET);
- c = *addr;
- SSYNC();
- swap_to(FLASH);
- return c;
- }
- void cf_insw(unsigned short *sect_buf, unsigned short *addr, int words)
- {
- int i;
- swap_to(ETHERNET);
- for (i = 0; i < words; i++) {
- *(sect_buf + i) = *addr;
- SSYNC();
- }
- swap_to(FLASH);
- }
- void cf_outsw(unsigned short *addr, unsigned short *sect_buf, int words)
- {
- int i;
- swap_to(ETHERNET);
- for (i = 0; i < words; i++) {
- *addr = *(sect_buf + i);
- SSYNC();
- }
- swap_to(FLASH);
- }
- /* Definitions used in Compact Flash Boot support */
- #define FIO_EDGE_CF_BITS 0x0000
- #define FIO_POLAR_CF_BITS 0x0000
- #define FIO_EDGE_BITS 0x1E0
- #define FIO_POLAR_BITS 0x160
- /* Compact flash status bits in status register */
- #define CF_STAT_BITS 0x00000060
- void cf_ide_init(void)
- {
- int i, cf_stat;
- /* Check whether CF card is inserted */
- bfin_write_FIO_EDGE(FIO_EDGE_CF_BITS);
- bfin_write_FIO_POLAR(FIO_POLAR_CF_BITS);
- for (i = 0; i < 0x300; i++)
- asm volatile("nop;");
- cf_stat = bfin_read_FIO_FLAG_S() & CF_STAT_BITS;
- bfin_write_FIO_EDGE(FIO_EDGE_BITS);
- bfin_write_FIO_POLAR(FIO_POLAR_BITS);
- if (!cf_stat) {
- for (i = 0; i < 0x3000; i++)
- asm volatile("nop;");
- ide_init();
- }
- }
|