| /* |
| * 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 <command.h> |
| #include <asm/blackfin.h> |
| |
| void cf_outb(unsigned char val, volatile unsigned char *addr) |
| { |
| *(addr) = val; |
| SSYNC(); |
| } |
| |
| unsigned char cf_inb(volatile unsigned char *addr) |
| { |
| volatile unsigned char c; |
| |
| c = *(addr); |
| SSYNC(); |
| |
| return c; |
| } |
| |
| void cf_insw(unsigned short *sect_buf, unsigned short *addr, int words) |
| { |
| int i; |
| |
| for (i = 0; i < words; i++) |
| *(sect_buf + i) = *(addr); |
| SSYNC(); |
| } |
| |
| void cf_outsw(unsigned short *addr, unsigned short *sect_buf, int words) |
| { |
| int i; |
| |
| for (i = 0; i < words; i++) |
| *(addr) = *(sect_buf + i); |
| SSYNC(); |
| } |
| |
| void cf_ide_init(void) |
| { |
| #if defined(CONFIG_BFIN_TRUE_IDE) |
| /* Enable ATASEL when in True IDE mode */ |
| printf("Using CF True IDE Mode\n"); |
| cf_outb(0, (unsigned char *)CONFIG_CF_ATASEL_ENA); |
| udelay(1000); |
| #elif defined(CONFIG_BFIN_CF_IDE) |
| /* Disable ATASEL when we're in Common Memory Mode */ |
| printf("Using CF Common Memory Mode\n"); |
| cf_outb(0, (unsigned char *)CONFIG_CF_ATASEL_DIS); |
| udelay(1000); |
| #elif defined(CONFIG_BFIN_HDD_IDE) |
| printf("Using HDD IDE Mode\n"); |
| #endif |
| ide_init(); |
| } |