Setting tag linux-2.6-22-50
[linux-2.6.git] / linux-2.6-810-ich10.patch
1 commit cf2eac8c7bef33a306a4437d7e385d22beb71c86
2 Author: S.Çağlar Onur <caglar@cs.princeton.edu>
3 Date:   Tue Mar 16 21:52:02 2010 -0400
4
5     linux-2.6-810-ich10.patch
6
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:
19                         r->name = "PIIX/ICH";
20                         r->get = pirq_piix_get;
21                         r->set = pirq_piix_set;
22                         return 1;
23         }
24 +
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;
30 +               return 1;
31 +       }
32 +
33         return 0;
34  }
35  
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 */
48  
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 */
60  
61         PIIX_PATA_FLAGS         = ATA_FLAG_SLAVE_POSS,
62         PIIX_SATA_FLAGS         = ATA_FLAG_SATA | PIIX_FLAG_CHECKINTR,
63 @@ -129,6 +130,7 @@ enum {
64         ich6m_sata_ahci         = 8,
65         ich8_sata_ahci          = 9,
66         piix_pata_mwdma         = 10,   /* PIIX3 MWDMA only */
67 +       ich8_2port_sata         = 11,
68  
69         /* constants for mapping table */
70         P0                      = 0,  /* port 0 */
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 },
87  
88         { }     /* terminate list */
89  };
90 @@ -433,11 +447,24 @@ static const struct piix_map_db ich8_map_db = {
91         },
92  };
93  
94 +static const struct piix_map_db ich8_2port_map_db = {
95 +       .mask = 0x3,
96 +       .port_enable = 0x3,
97 +       .map = {
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 },
103 +       },
104 +};
105 +
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,
113  };
114  
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,
118         },
119 +
120 +       [ich8_2port_sata] =
121 +       {
122 +               .sht            = &piix_sht,
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,
128 +       },
129  };
130  
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,
138  
139         ATA_PCI_CTL_OFS         = 2,
140 +       
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),
148 +
149 +       ATA_SWDMA0              = (1 << 0),
150 +       ATA_SWDMA1              = ATA_SWDMA0 | (1 << 1),
151 +       ATA_SWDMA2              = ATA_SWDMA1 | (1 << 2),
152 +
153 +       ATA_SWDMA2_ONLY         = (1 << 2),
154 +
155 +       ATA_MWDMA0              = (1 << 0),
156 +       ATA_MWDMA1              = ATA_MWDMA0 | (1 << 1),
157 +       ATA_MWDMA2              = ATA_MWDMA1 | (1 << 2),
158 +
159 +       ATA_MWDMA12_ONLY        = (1 << 1) | (1 << 2),
160 +       ATA_MWDMA2_ONLY         = (1 << 2),
161 +
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