1/* 2 * (C) Copyright 2000 3 * Wolfgang Denk, DENX Software Engineering, wd@denx.de. 4 * 5 * See file CREDITS for list of people who contributed to this 6 * project. 7 * 8 * This program is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU General Public License as 10 * published by the Free Software Foundation; either version 2 of 11 * the License, or (at your option) any later version. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with this program; if not, write to the Free Software 20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 21 * MA 02111-1307 USA 22 * 23 */ 24/* ide.c - ide support functions */ 25 26 27#include <common.h> 28#if defined(CONFIG_CMD_IDE) 29#include <ata.h> 30#include <ide.h> 31#include <pci.h> 32 33extern ulong ide_bus_offset[CONFIG_SYS_IDE_MAXBUS]; 34int cpci_hd_type; 35 36int ata_device(int dev) 37{ 38 int retval; 39 40 retval = (dev & 1) << 4; 41 if (cpci_hd_type == 2) 42 retval ^= 1 << 4; 43 return retval; 44} 45 46 47int ide_preinit (void) 48{ 49 int status; 50 pci_dev_t devbusfn; 51 int l; 52 53 status = 1; 54 cpci_hd_type = 0; 55 if (CPCI750_SLAVE_TEST != 0) 56 return status; 57 for (l = 0; l < CONFIG_SYS_IDE_MAXBUS; l++) { 58 ide_bus_offset[l] = -ATA_STATUS; 59 } 60 devbusfn = pci_find_device (0x1103, 0x0004, 0); 61 if (devbusfn != -1) { 62 cpci_hd_type = 1; 63 } else { 64 devbusfn = pci_find_device (0x1095, 0x3114, 0); 65 if (devbusfn != -1) { 66 cpci_hd_type = 2; 67 } 68 } 69 if (devbusfn != -1) { 70 ulong *ide_bus_offset_ptr; 71 72 status = 0; 73 74 ide_bus_offset_ptr = &ide_bus_offset[0]; 75 pci_read_config_dword (devbusfn, PCI_BASE_ADDRESS_0, 76 (u32 *)ide_bus_offset_ptr); 77 ide_bus_offset[0] &= 0xfffffffe; 78 ide_bus_offset[0] += CONFIG_SYS_PCI0_IO_SPACE; 79 ide_bus_offset_ptr = &ide_bus_offset[1]; 80 pci_read_config_dword (devbusfn, PCI_BASE_ADDRESS_2, 81 (u32 *)ide_bus_offset_ptr); 82 ide_bus_offset[1] &= 0xfffffffe; 83 ide_bus_offset[1] += CONFIG_SYS_PCI0_IO_SPACE; 84 } 85 return status; 86} 87 88void ide_set_reset (int flag) { 89 return; 90} 91 92#endif /* of CONFIG_CMDS_IDE */ 93