]>
Commit | Line | Data |
---|---|---|
3414f2ca GKH |
1 | From e4d866cdea24543ee16ce6d07d80c513e86ba983 Mon Sep 17 00:00:00 2001 |
2 | From: JosephChan@via.com.tw <JosephChan@via.com.tw> | |
3 | Date: Fri, 23 Jan 2009 15:37:39 +0800 | |
4 | Subject: libata: pata_via: support VX855, future chips whose IDE controller use 0x0571 | |
5 | ||
6 | From: JosephChan@via.com.tw <JosephChan@via.com.tw> | |
7 | ||
8 | commit e4d866cdea24543ee16ce6d07d80c513e86ba983 upstream. | |
9 | ||
10 | It supports VX855 and future chips whose IDE controller uses PCI ID 0x0571. | |
11 | ||
12 | Signed-off-by: Joseph Chan <josephchan@via.com.tw> | |
13 | Acked-by: Tejun Heo <tj@kernel.org> | |
14 | Signed-off-by: Jeff Garzik <jgarzik@redhat.com> | |
15 | Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> | |
16 | ||
17 | --- | |
18 | drivers/ata/pata_via.c | 22 +++++++++++++++++----- | |
19 | include/linux/pci_ids.h | 4 ++++ | |
20 | 2 files changed, 21 insertions(+), 5 deletions(-) | |
21 | ||
22 | --- a/drivers/ata/pata_via.c | |
23 | +++ b/drivers/ata/pata_via.c | |
24 | @@ -87,6 +87,10 @@ enum { | |
25 | VIA_SATA_PATA = 0x800, /* SATA/PATA combined configuration */ | |
26 | }; | |
27 | ||
28 | +enum { | |
29 | + VIA_IDFLAG_SINGLE = (1 << 0), /* single channel controller) */ | |
30 | +}; | |
31 | + | |
32 | /* | |
33 | * VIA SouthBridge chips. | |
34 | */ | |
35 | @@ -98,8 +102,12 @@ static const struct via_isa_bridge { | |
36 | u8 rev_max; | |
37 | u16 flags; | |
38 | } via_isa_bridges[] = { | |
39 | + { "vx855", PCI_DEVICE_ID_VIA_VX855, 0x00, 0x2f, | |
40 | + VIA_UDMA_133 | VIA_BAD_AST | VIA_SATA_PATA }, | |
41 | { "vx800", PCI_DEVICE_ID_VIA_VX800, 0x00, 0x2f, VIA_UDMA_133 | | |
42 | VIA_BAD_AST | VIA_SATA_PATA }, | |
43 | + { "vt8261", PCI_DEVICE_ID_VIA_8261, 0x00, 0x2f, | |
44 | + VIA_UDMA_133 | VIA_BAD_AST }, | |
45 | { "vt8237s", PCI_DEVICE_ID_VIA_8237S, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST }, | |
46 | { "vt8251", PCI_DEVICE_ID_VIA_8251, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST }, | |
47 | { "cx700", PCI_DEVICE_ID_VIA_CX700, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST | VIA_SATA_PATA }, | |
48 | @@ -123,6 +131,8 @@ static const struct via_isa_bridge { | |
49 | { "vt82c586", PCI_DEVICE_ID_VIA_82C586_0, 0x00, 0x0f, VIA_UDMA_NONE | VIA_SET_FIFO }, | |
50 | { "vt82c576", PCI_DEVICE_ID_VIA_82C576, 0x00, 0x2f, VIA_UDMA_NONE | VIA_SET_FIFO | VIA_NO_UNMASK }, | |
51 | { "vt82c576", PCI_DEVICE_ID_VIA_82C576, 0x00, 0x2f, VIA_UDMA_NONE | VIA_SET_FIFO | VIA_NO_UNMASK | VIA_BAD_ID }, | |
52 | + { "vtxxxx", PCI_DEVICE_ID_VIA_ANON, 0x00, 0x2f, | |
53 | + VIA_UDMA_133 | VIA_BAD_AST }, | |
54 | { NULL } | |
55 | }; | |
56 | ||
57 | @@ -461,6 +471,7 @@ static int via_init_one(struct pci_dev * | |
58 | static int printed_version; | |
59 | u8 enable; | |
60 | u32 timing; | |
61 | + unsigned long flags = id->driver_data; | |
62 | int rc; | |
63 | ||
64 | if (!printed_version++) | |
65 | @@ -470,9 +481,13 @@ static int via_init_one(struct pci_dev * | |
66 | if (rc) | |
67 | return rc; | |
68 | ||
69 | + if (flags & VIA_IDFLAG_SINGLE) | |
70 | + ppi[1] = &ata_dummy_port_info; | |
71 | + | |
72 | /* To find out how the IDE will behave and what features we | |
73 | actually have to look at the bridge not the IDE controller */ | |
74 | - for (config = via_isa_bridges; config->id; config++) | |
75 | + for (config = via_isa_bridges; config->id != PCI_DEVICE_ID_VIA_ANON; | |
76 | + config++) | |
77 | if ((isa = pci_get_device(PCI_VENDOR_ID_VIA + | |
78 | !!(config->flags & VIA_BAD_ID), | |
79 | config->id, NULL))) { | |
80 | @@ -483,10 +498,6 @@ static int via_init_one(struct pci_dev * | |
81 | pci_dev_put(isa); | |
82 | } | |
83 | ||
84 | - if (!config->id) { | |
85 | - printk(KERN_WARNING "via: Unknown VIA SouthBridge, disabling.\n"); | |
86 | - return -ENODEV; | |
87 | - } | |
88 | pci_dev_put(isa); | |
89 | ||
90 | if (!(config->flags & VIA_NO_ENABLES)) { | |
91 | @@ -588,6 +599,7 @@ static const struct pci_device_id via[] | |
92 | { PCI_VDEVICE(VIA, 0x1571), }, | |
93 | { PCI_VDEVICE(VIA, 0x3164), }, | |
94 | { PCI_VDEVICE(VIA, 0x5324), }, | |
95 | + { PCI_VDEVICE(VIA, 0xC409), VIA_IDFLAG_SINGLE }, | |
96 | ||
97 | { }, | |
98 | }; | |
99 | --- a/include/linux/pci_ids.h | |
100 | +++ b/include/linux/pci_ids.h | |
101 | @@ -1346,6 +1346,7 @@ | |
102 | #define PCI_DEVICE_ID_VIA_8783_0 0x3208 | |
103 | #define PCI_DEVICE_ID_VIA_8237 0x3227 | |
104 | #define PCI_DEVICE_ID_VIA_8251 0x3287 | |
105 | +#define PCI_DEVICE_ID_VIA_8261 0x3402 | |
106 | #define PCI_DEVICE_ID_VIA_8237A 0x3337 | |
107 | #define PCI_DEVICE_ID_VIA_8237S 0x3372 | |
108 | #define PCI_DEVICE_ID_VIA_SATA_EIDE 0x5324 | |
109 | @@ -1355,10 +1356,13 @@ | |
110 | #define PCI_DEVICE_ID_VIA_CX700 0x8324 | |
111 | #define PCI_DEVICE_ID_VIA_CX700_IDE 0x0581 | |
112 | #define PCI_DEVICE_ID_VIA_VX800 0x8353 | |
113 | +#define PCI_DEVICE_ID_VIA_VX855 0x8409 | |
114 | #define PCI_DEVICE_ID_VIA_8371_1 0x8391 | |
115 | #define PCI_DEVICE_ID_VIA_82C598_1 0x8598 | |
116 | #define PCI_DEVICE_ID_VIA_838X_1 0xB188 | |
117 | #define PCI_DEVICE_ID_VIA_83_87XX_1 0xB198 | |
118 | +#define PCI_DEVICE_ID_VIA_C409_IDE 0XC409 | |
119 | +#define PCI_DEVICE_ID_VIA_ANON 0xFFFF | |
120 | ||
121 | #define PCI_VENDOR_ID_SIEMENS 0x110A | |
122 | #define PCI_DEVICE_ID_SIEMENS_DSCC4 0x2102 |