WAN pc300too.c: Fix PC300-X.21 detection
pc300too driver works around a bug in PCI9050 bridge. Unfortunately it was doing that too late. Signed-off-by: Krzysztof Hałasa <khc@pm.waw.pl>
This commit is contained in:
@@ -319,27 +319,6 @@ static int __devinit pc300_pci_init_one(struct pci_dev *pdev,
|
|||||||
}
|
}
|
||||||
pci_set_drvdata(pdev, card);
|
pci_set_drvdata(pdev, card);
|
||||||
|
|
||||||
if (pdev->device == PCI_DEVICE_ID_PC300_TE_1 ||
|
|
||||||
pdev->device == PCI_DEVICE_ID_PC300_TE_2)
|
|
||||||
card->type = PC300_TE; /* not fully supported */
|
|
||||||
else if (card->init_ctrl_value & PC300_CTYPE_MASK)
|
|
||||||
card->type = PC300_X21;
|
|
||||||
else
|
|
||||||
card->type = PC300_RSV;
|
|
||||||
|
|
||||||
if (pdev->device == PCI_DEVICE_ID_PC300_RX_1 ||
|
|
||||||
pdev->device == PCI_DEVICE_ID_PC300_TE_1)
|
|
||||||
card->n_ports = 1;
|
|
||||||
else
|
|
||||||
card->n_ports = 2;
|
|
||||||
|
|
||||||
for (i = 0; i < card->n_ports; i++)
|
|
||||||
if (!(card->ports[i].netdev = alloc_hdlcdev(&card->ports[i]))) {
|
|
||||||
printk(KERN_ERR "pc300: unable to allocate memory\n");
|
|
||||||
pc300_pci_remove_one(pdev);
|
|
||||||
return -ENOMEM;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pci_resource_len(pdev, 0) != PC300_PLX_SIZE ||
|
if (pci_resource_len(pdev, 0) != PC300_PLX_SIZE ||
|
||||||
pci_resource_len(pdev, 2) != PC300_SCA_SIZE ||
|
pci_resource_len(pdev, 2) != PC300_SCA_SIZE ||
|
||||||
pci_resource_len(pdev, 3) < 16384) {
|
pci_resource_len(pdev, 3) < 16384) {
|
||||||
@@ -369,6 +348,27 @@ static int __devinit pc300_pci_init_one(struct pci_dev *pdev,
|
|||||||
card->init_ctrl_value = readl(&((plx9050 __iomem *)card->scabase)->init_ctrl);
|
card->init_ctrl_value = readl(&((plx9050 __iomem *)card->scabase)->init_ctrl);
|
||||||
pci_write_config_dword(pdev, PCI_BASE_ADDRESS_0, plxphys);
|
pci_write_config_dword(pdev, PCI_BASE_ADDRESS_0, plxphys);
|
||||||
|
|
||||||
|
if (pdev->device == PCI_DEVICE_ID_PC300_TE_1 ||
|
||||||
|
pdev->device == PCI_DEVICE_ID_PC300_TE_2)
|
||||||
|
card->type = PC300_TE; /* not fully supported */
|
||||||
|
else if (card->init_ctrl_value & PC300_CTYPE_MASK)
|
||||||
|
card->type = PC300_X21;
|
||||||
|
else
|
||||||
|
card->type = PC300_RSV;
|
||||||
|
|
||||||
|
if (pdev->device == PCI_DEVICE_ID_PC300_RX_1 ||
|
||||||
|
pdev->device == PCI_DEVICE_ID_PC300_TE_1)
|
||||||
|
card->n_ports = 1;
|
||||||
|
else
|
||||||
|
card->n_ports = 2;
|
||||||
|
|
||||||
|
for (i = 0; i < card->n_ports; i++)
|
||||||
|
if (!(card->ports[i].netdev = alloc_hdlcdev(&card->ports[i]))) {
|
||||||
|
printk(KERN_ERR "pc300: unable to allocate memory\n");
|
||||||
|
pc300_pci_remove_one(pdev);
|
||||||
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
/* Reset PLX */
|
/* Reset PLX */
|
||||||
p = &card->plxbase->init_ctrl;
|
p = &card->plxbase->init_ctrl;
|
||||||
writel(card->init_ctrl_value | 0x40000000, p);
|
writel(card->init_ctrl_value | 0x40000000, p);
|
||||||
|
Reference in New Issue
Block a user