]> git.pld-linux.org Git - packages/kernel.git/blame - linux-2.6-sata-promise-pata-ports.patch
- blah, not needed on HEAD
[packages/kernel.git] / linux-2.6-sata-promise-pata-ports.patch
CommitLineData
d63719e5 1diff -urN linux-2.6.16.16/drivers/scsi/libata-core.c mod/drivers/scsi/libata-core.c
2--- linux-2.6.16.16/drivers/scsi/libata-core.c 2006-05-11 03:56:24.000000000 +0200
3+++ mod/drivers/scsi/libata-core.c 2006-05-20 03:14:57.165778500 +0200
4@@ -4431,6 +4431,7 @@
5 ap->mwdma_mask = ent->mwdma_mask;
6 ap->udma_mask = ent->udma_mask;
7 ap->flags |= ent->host_flags;
8+ ap->flags |= ent->port_flags[port_no]; /* pata fix */
9 ap->ops = ent->port_ops;
10 ap->cbl = ATA_CBL_NONE;
11 ap->active_tag = ATA_TAG_POISON;
12diff -urN linux-2.6.16.16/drivers/scsi/sata_promise.c mod/drivers/scsi/sata_promise.c
13--- linux-2.6.16.16/drivers/scsi/sata_promise.c 2006-05-11 03:56:24.000000000 +0200
14+++ mod/drivers/scsi/sata_promise.c 2006-05-20 03:29:36.708746500 +0200
15@@ -165,7 +165,7 @@
16 /* board_2037x */
17 {
18 .sht = &pdc_ata_sht,
19- .host_flags = PDC_COMMON_FLAGS | ATA_FLAG_SATA,
20+ .host_flags = PDC_COMMON_FLAGS /* | ATA_FLAG_SATA */, /* pata fix */
21 .pio_mask = 0x1f, /* pio0-4 */
22 .mwdma_mask = 0x07, /* mwdma0-2 */
23 .udma_mask = 0x7f, /* udma0-6 ; FIXME */
24@@ -322,15 +322,34 @@
25
26 static void pdc_sata_phy_reset(struct ata_port *ap)
27 {
28- pdc_reset_port(ap);
29- sata_phy_reset(ap);
30+/* pdc_reset_port(ap); */ /* pata fix */
31+/* sata_phy_reset(ap); */ /* pata fix */
32+ /* if no sata flag, test for pata drive */ /* pata fix */
33+ if (ap->flags & ATA_FLAG_SATA) /* pata fix */
34+ { /* pata fix */
35+ pdc_reset_port(ap); /* pata fix */
36+ sata_phy_reset(ap); /* pata fix */
37+ } /* pata fix */
38+ else /* pata fix */
39+ pdc_pata_phy_reset(ap); /* pata fix */
40 }
41
42 static void pdc_pata_phy_reset(struct ata_port *ap)
43 {
44 /* FIXME: add cable detect. Don't assume 40-pin cable */
45- ap->cbl = ATA_CBL_PATA40;
46- ap->udma_mask &= ATA_UDMA_MASK_40C;
47+/* ap->cbl = ATA_CBL_PATA40; */ /* pata fix */
48+/* ap->udma_mask &= ATA_UDMA_MASK_40C; */ /* pata fix */
49+ /* add cable detection code for pata drives */ /* pata fix */
50+ u8 tmp; /* pata fix */
51+ void *mmio = (void *) ap->ioaddr.cmd_addr + PDC_CTLSTAT + 0x03; /* pata fix */
52+ tmp = readb(mmio); /* pata fix */
53+ if (tmp & 0x01) /* pata fix */
54+ { /* pata fix */
55+ ap->cbl = ATA_CBL_PATA40; /* pata fix */
56+ ap->udma_mask &= ATA_UDMA_MASK_40C; /* pata fix */
57+ } /* pata fix */
58+ else /* pata fix */
59+ ap->cbl = ATA_CBL_PATA80; /* pata fix */
60
61 pdc_reset_port(ap);
62 ata_port_probe(ap);
63@@ -646,6 +665,7 @@
64 unsigned int board_idx = (unsigned int) ent->driver_data;
65 int pci_dev_busy = 0;
66 int rc;
67+ u8 tmp; /* pata fix */
68
69 if (!printed_version++)
70 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
71@@ -705,6 +725,9 @@
72 probe_ent->port[0].scr_addr = base + 0x400;
73 probe_ent->port[1].scr_addr = base + 0x500;
74
75+ probe_ent->port_flags[0] = ATA_FLAG_SATA; /* pata fix */
76+ probe_ent->port_flags[1] = ATA_FLAG_SATA; /* pata fix */
77+
78 /* notice 4-port boards */
79 switch (board_idx) {
80 case board_20319:
81@@ -715,9 +738,25 @@
82
83 probe_ent->port[2].scr_addr = base + 0x600;
84 probe_ent->port[3].scr_addr = base + 0x700;
85+
86+ probe_ent->port_flags[2] = ATA_FLAG_SATA; /* pata fix */
87+ probe_ent->port_flags[3] = ATA_FLAG_SATA; /* pata fix */
88 break;
89 case board_2037x:
90- probe_ent->n_ports = 2;
91+/* probe_ent->n_ports = 2; */ /* pata fix */
92+/* Some boards have also PATA port */ /* pata fix */
93+
94+ tmp = readb(mmio_base + PDC_FLASH_CTL+1); /* pata fix */
95+ if (!(tmp & 0x80)) /* pata fix */
96+ { /* pata fix */
97+ probe_ent->n_ports = 3; /* pata fix */
98+ pdc_ata_setup_port(&probe_ent->port[2], base + 0x300); /* pata fix */
99+ probe_ent->port_flags[2] = ATA_FLAG_SLAVE_POSS; /* pata fix */
100+ printk(KERN_INFO DRV_NAME " PATA port found\n"); /* pata fix */
101+ } /* pata fix */
102+ else /* pata fix */
103+ probe_ent->n_ports = 2; /* pata fix */
104+
105 break;
106 case board_20771:
107 probe_ent->n_ports = 2;
108@@ -730,6 +769,9 @@
109
110 probe_ent->port[2].scr_addr = base + 0x600;
111 probe_ent->port[3].scr_addr = base + 0x700;
112+
113+ probe_ent->port_flags[2] = ATA_FLAG_SATA; /* pata fix */
114+ probe_ent->port_flags[3] = ATA_FLAG_SATA; /* pata fix */
115 break;
116 default:
117 BUG();
118diff -urN linux-2.6.16.16/include/linux/libata.h mod/include/linux/libata.h
119--- linux-2.6.16.16/include/linux/libata.h 2006-05-11 03:56:24.000000000 +0200
120+++ mod/include/linux/libata.h 2006-05-20 03:31:46.216840250 +0200
121@@ -237,6 +237,7 @@
122 unsigned long irq;
123 unsigned int irq_flags;
124 unsigned long host_flags;
125+ unsigned long port_flags[ATA_MAX_PORTS]; /* pata fix */
126 void __iomem *mmio_base;
127 void *private_data;
128 };
This page took 0.04078 seconds and 4 git commands to generate.