1 commit cf2eac8c7bef33a306a4437d7e385d22beb71c86
2 Author: S.Çağlar Onur <caglar@cs.princeton.edu>
3 Date: Tue Mar 16 21:52:02 2010 -0400
5 linux-2.6-810-ich10.patch
7 diff --git a/arch/i386/pci/irq.c b/arch/i386/pci/irq.c
8 index f2cb942..8e92187 100644
9 --- a/arch/i386/pci/irq.c
10 +++ b/arch/i386/pci/irq.c
11 @@ -549,11 +549,24 @@ static __init int intel_router_probe(struct irq_router *r, struct pci_dev *route
12 case PCI_DEVICE_ID_INTEL_ICH9_3:
13 case PCI_DEVICE_ID_INTEL_ICH9_4:
14 case PCI_DEVICE_ID_INTEL_ICH9_5:
15 + case PCI_DEVICE_ID_INTEL_ICH10_0:
16 + case PCI_DEVICE_ID_INTEL_ICH10_1:
17 + case PCI_DEVICE_ID_INTEL_ICH10_2:
18 + case PCI_DEVICE_ID_INTEL_ICH10_3:
20 r->get = pirq_piix_get;
21 r->set = pirq_piix_set;
25 + if ((device >= PCI_DEVICE_ID_INTEL_PCH_LPC_MIN) &&
26 + (device <= PCI_DEVICE_ID_INTEL_PCH_LPC_MAX)) {
27 + r->name = "PIIX/ICH";
28 + r->get = pirq_piix_get;
29 + r->set = pirq_piix_set;
36 diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
37 index e722f83..260f54c 100644
38 --- a/drivers/ata/ahci.c
39 +++ b/drivers/ata/ahci.c
40 @@ -392,6 +392,10 @@ static const struct pci_device_id ahci_pci_tbl[] = {
41 { PCI_VDEVICE(INTEL, 0x292f), board_ahci_pi }, /* ICH9M */
42 { PCI_VDEVICE(INTEL, 0x294d), board_ahci_pi }, /* ICH9 */
43 { PCI_VDEVICE(INTEL, 0x294e), board_ahci_pi }, /* ICH9M */
44 + { PCI_VDEVICE(INTEL, 0x3a05), board_ahci }, /* ICH10 */
45 + { PCI_VDEVICE(INTEL, 0x3a25), board_ahci }, /* ICH10 */
46 + { PCI_VDEVICE(INTEL, 0x3b25), board_ahci }, /* PCH RAID */
47 + { PCI_VDEVICE(INTEL, 0x3b2c), board_ahci }, /* PCH RAID */
49 /* JMicron 360/1/3/5/6, match class to avoid IDE function */
50 { PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
51 diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c
52 index 5a148bd..e305aac 100644
53 --- a/drivers/ata/ata_piix.c
54 +++ b/drivers/ata/ata_piix.c
55 @@ -104,6 +104,7 @@ enum {
56 PIIX_FLAG_SCR = (1 << 26), /* SCR available */
57 PIIX_FLAG_AHCI = (1 << 27), /* AHCI possible */
58 PIIX_FLAG_CHECKINTR = (1 << 28), /* make sure PCI INTx enabled */
59 + PIIX_FLAG_SIDPR = (1 << 29), /* SATA idx/data pair regs */
61 PIIX_PATA_FLAGS = ATA_FLAG_SLAVE_POSS,
62 PIIX_SATA_FLAGS = ATA_FLAG_SATA | PIIX_FLAG_CHECKINTR,
63 @@ -129,6 +130,7 @@ enum {
66 piix_pata_mwdma = 10, /* PIIX3 MWDMA only */
67 + ich8_2port_sata = 11,
69 /* constants for mapping table */
71 @@ -245,6 +247,18 @@ static const struct pci_device_id piix_pci_tbl[] = {
72 { 0x8086, 0x292d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci },
73 /* SATA Controller IDE (ICH9M) */
74 { 0x8086, 0x292e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci },
75 + /* SATA Controller IDE (ICH10) */
76 + { 0x8086, 0x3a00, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci },
77 + /* SATA Controller IDE (ICH10) */
78 + { 0x8086, 0x3a06, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
79 + /* SATA Controller IDE (ICH10) */
80 + { 0x8086, 0x3a20, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci },
81 + /* SATA Controller IDE (ICH10) */
82 + { 0x8086, 0x3a26, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
83 + /* SATA Controller IDE (PCH) */
84 + { 0x8086, 0x3b21, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata },
85 + /* SATA Controller IDE (PCH) */
86 + { 0x8086, 0x3b28, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata_ahci },
88 { } /* terminate list */
90 @@ -433,11 +447,24 @@ static const struct piix_map_db ich8_map_db = {
94 +static const struct piix_map_db ich8_2port_map_db = {
98 + /* PM PS SM SS MAP */
99 + { P0, NA, P1, NA }, /* 00b */
100 + { RV, RV, RV, RV }, /* 01b */
101 + { RV, RV, RV, RV }, /* 10b */
102 + { RV, RV, RV, RV },
106 static const struct piix_map_db *piix_map_db_table[] = {
107 [ich5_sata] = &ich5_map_db,
108 [ich6_sata] = &ich6_map_db,
109 [ich6_sata_ahci] = &ich6_map_db,
110 [ich6m_sata_ahci] = &ich6m_map_db,
111 + [ich8_2port_sata] = &ich8_2port_map_db,
112 [ich8_sata_ahci] = &ich8_map_db,
115 @@ -552,6 +579,16 @@ static struct ata_port_info piix_port_info[] = {
116 .mwdma_mask = 0x06, /* mwdma1-2 ?? CHECK 0 should be ok but slow */
117 .port_ops = &piix_pata_ops,
120 + [ich8_2port_sata] =
123 + .flags = PIIX_SATA_FLAGS | PIIX_FLAG_SIDPR,
124 + .pio_mask = ATA_PIO4,
125 + .mwdma_mask = ATA_MWDMA2,
126 + .udma_mask = ATA_UDMA6,
127 + .port_ops = &piix_sata_ops,
131 static struct pci_bits piix_enable_bits[] = {
132 diff --git a/include/linux/ata.h b/include/linux/ata.h
133 index 703febb..a420021 100644
134 --- a/include/linux/ata.h
135 +++ b/include/linux/ata.h
136 @@ -64,6 +64,28 @@ enum {
137 ATA_ID_PROD_LEN = 40,
141 + ATA_PIO0 = (1 << 0),
142 + ATA_PIO1 = ATA_PIO0 | (1 << 1),
143 + ATA_PIO2 = ATA_PIO1 | (1 << 2),
144 + ATA_PIO3 = ATA_PIO2 | (1 << 3),
145 + ATA_PIO4 = ATA_PIO3 | (1 << 4),
146 + ATA_PIO5 = ATA_PIO4 | (1 << 5),
147 + ATA_PIO6 = ATA_PIO5 | (1 << 6),
149 + ATA_SWDMA0 = (1 << 0),
150 + ATA_SWDMA1 = ATA_SWDMA0 | (1 << 1),
151 + ATA_SWDMA2 = ATA_SWDMA1 | (1 << 2),
153 + ATA_SWDMA2_ONLY = (1 << 2),
155 + ATA_MWDMA0 = (1 << 0),
156 + ATA_MWDMA1 = ATA_MWDMA0 | (1 << 1),
157 + ATA_MWDMA2 = ATA_MWDMA1 | (1 << 2),
159 + ATA_MWDMA12_ONLY = (1 << 1) | (1 << 2),
160 + ATA_MWDMA2_ONLY = (1 << 2),
162 ATA_UDMA0 = (1 << 0),
163 ATA_UDMA1 = ATA_UDMA0 | (1 << 1),
164 ATA_UDMA2 = ATA_UDMA1 | (1 << 2),
165 diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
166 index c6c9d48..5505b33 100644
167 --- a/include/linux/pci_ids.h
168 +++ b/include/linux/pci_ids.h
169 @@ -2301,6 +2301,15 @@
170 #define PCI_DEVICE_ID_INTEL_MCH_PC 0x3599
171 #define PCI_DEVICE_ID_INTEL_MCH_PC1 0x359a
172 #define PCI_DEVICE_ID_INTEL_E7525_MCH 0x359e
173 +#define PCI_DEVICE_ID_INTEL_ICH10_0 0x3a14
174 +#define PCI_DEVICE_ID_INTEL_ICH10_1 0x3a16
175 +#define PCI_DEVICE_ID_INTEL_ICH10_2 0x3a18
176 +#define PCI_DEVICE_ID_INTEL_ICH10_3 0x3a1a
177 +#define PCI_DEVICE_ID_INTEL_ICH10_4 0x3a30
178 +#define PCI_DEVICE_ID_INTEL_ICH10_5 0x3a60
179 +#define PCI_DEVICE_ID_INTEL_PCH_LPC_MIN 0x3b00
180 +#define PCI_DEVICE_ID_INTEL_PCH_LPC_MAX 0x3b1f
181 +#define PCI_DEVICE_ID_INTEL_PCH_SMBUS 0x3b30
182 #define PCI_DEVICE_ID_INTEL_82371SB_0 0x7000
183 #define PCI_DEVICE_ID_INTEL_82371SB_1 0x7010
184 #define PCI_DEVICE_ID_INTEL_82371SB_2 0x7020