]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - glsdk/glsdk-u-boot.git/blob - board/esd/cpci750/ide.c
Merge remote-tracking branch 'u-boot-imx/master'
[glsdk/glsdk-u-boot.git] / board / esd / cpci750 / ide.c
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 */
27 #include <common.h>
28 #if defined(CONFIG_CMD_IDE)
29 #include <ata.h>
30 #include <ide.h>
31 #include <pci.h>
33 int cpci_hd_type;
35 int ata_device(int dev)
36 {
37         int retval;
39         retval = (dev & 1) << 4;
40         if (cpci_hd_type == 2)
41                 retval ^= 1 << 4;
42         return retval;
43 }
46 int ide_preinit (void)
47 {
48         int status;
49         pci_dev_t devbusfn;
50         int l;
52         status = 1;
53         cpci_hd_type = 0;
54         if (CPCI750_SLAVE_TEST != 0)
55                 return status;
56         for (l = 0; l < CONFIG_SYS_IDE_MAXBUS; l++) {
57                 ide_bus_offset[l] = -ATA_STATUS;
58         }
59         devbusfn = pci_find_device (0x1103, 0x0004, 0);
60         if (devbusfn != -1) {
61                 cpci_hd_type = 1;
62         } else {
63                 devbusfn = pci_find_device (0x1095, 0x3114, 0);
64                 if (devbusfn != -1) {
65                         cpci_hd_type = 2;
66                 }
67         }
68         if (devbusfn != -1) {
69                 ulong *ide_bus_offset_ptr;
71                 status = 0;
73                 ide_bus_offset_ptr = &ide_bus_offset[0];
74                 pci_read_config_dword (devbusfn, PCI_BASE_ADDRESS_0,
75                                        (u32 *)ide_bus_offset_ptr);
76                 ide_bus_offset[0] &= 0xfffffffe;
77                 ide_bus_offset[0] += CONFIG_SYS_PCI0_IO_SPACE;
78                 ide_bus_offset_ptr = &ide_bus_offset[1];
79                 pci_read_config_dword (devbusfn, PCI_BASE_ADDRESS_2,
80                                        (u32 *)ide_bus_offset_ptr);
81                 ide_bus_offset[1] &= 0xfffffffe;
82                 ide_bus_offset[1] += CONFIG_SYS_PCI0_IO_SPACE;
83         }
84         return status;
85 }
87 void ide_set_reset (int flag) {
88         return;
89 }
91 #endif /* of CONFIG_CMDS_IDE */