diff options
Diffstat (limited to 'drivers/ata/sata_uli.c')
-rw-r--r-- | drivers/ata/sata_uli.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/drivers/ata/sata_uli.c b/drivers/ata/sata_uli.c index f74e383de083..006f5e352658 100644 --- a/drivers/ata/sata_uli.c +++ b/drivers/ata/sata_uli.c | |||
@@ -125,7 +125,7 @@ static const struct ata_port_operations uli_ops = { | |||
125 | .port_start = ata_port_start, | 125 | .port_start = ata_port_start, |
126 | }; | 126 | }; |
127 | 127 | ||
128 | static struct ata_port_info uli_port_info = { | 128 | static const struct ata_port_info uli_port_info = { |
129 | .flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | | 129 | .flags = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | |
130 | ATA_FLAG_IGN_SIMPLEX, | 130 | ATA_FLAG_IGN_SIMPLEX, |
131 | .pio_mask = 0x1f, /* pio0-4 */ | 131 | .pio_mask = 0x1f, /* pio0-4 */ |
@@ -201,19 +201,33 @@ static int uli_init_one (struct pci_dev *pdev, const struct pci_device_id *ent) | |||
201 | n_ports = 2; | 201 | n_ports = 2; |
202 | if (board_idx == uli_5287) | 202 | if (board_idx == uli_5287) |
203 | n_ports = 4; | 203 | n_ports = 4; |
204 | rc = ata_pci_prepare_native_host(pdev, ppi, n_ports, &host); | 204 | |
205 | if (rc) | 205 | /* allocate the host */ |
206 | return rc; | 206 | host = ata_host_alloc_pinfo(&pdev->dev, ppi, n_ports); |
207 | if (!host) | ||
208 | return -ENOMEM; | ||
207 | 209 | ||
208 | hpriv = devm_kzalloc(&pdev->dev, sizeof(*hpriv), GFP_KERNEL); | 210 | hpriv = devm_kzalloc(&pdev->dev, sizeof(*hpriv), GFP_KERNEL); |
209 | if (!hpriv) | 211 | if (!hpriv) |
210 | return -ENOMEM; | 212 | return -ENOMEM; |
211 | host->private_data = hpriv; | 213 | host->private_data = hpriv; |
212 | 214 | ||
215 | /* the first two ports are standard SFF */ | ||
216 | rc = ata_pci_init_native_host(host); | ||
217 | if (rc) | ||
218 | return rc; | ||
219 | |||
220 | rc = ata_pci_init_bmdma(host); | ||
221 | if (rc) | ||
222 | return rc; | ||
223 | |||
213 | iomap = host->iomap; | 224 | iomap = host->iomap; |
214 | 225 | ||
215 | switch (board_idx) { | 226 | switch (board_idx) { |
216 | case uli_5287: | 227 | case uli_5287: |
228 | /* If there are four, the last two live right after | ||
229 | * the standard SFF ports. | ||
230 | */ | ||
217 | hpriv->scr_cfg_addr[0] = ULI5287_BASE; | 231 | hpriv->scr_cfg_addr[0] = ULI5287_BASE; |
218 | hpriv->scr_cfg_addr[1] = ULI5287_BASE + ULI5287_OFFS; | 232 | hpriv->scr_cfg_addr[1] = ULI5287_BASE + ULI5287_OFFS; |
219 | 233 | ||