Commit 45de4540 authored by Ben Collins's avatar Ben Collins

Merge http://linux.bkbits.net/linux-2.5

into debian.org:/usr/src/kernel/ieee1394-2.6
parents 196c4ebd 72c19e18
...@@ -620,6 +620,39 @@ static void ohci_initialize(struct ti_ohci *ohci) ...@@ -620,6 +620,39 @@ static void ohci_initialize(struct ti_ohci *ohci)
if (status & 0x20) if (status & 0x20)
set_phy_reg(ohci, 8, status & ~1); set_phy_reg(ohci, 8, status & ~1);
} }
/* Serial EEPROM Sanity check. */
if ((ohci->max_packet_size < 512) ||
(ohci->max_packet_size > 4096)) {
/* Serial EEPROM contents are suspect, set a sane max packet
* size and print the raw contents for bug reports if verbose
* debug is enabled. */
#ifdef CONFIG_IEEE1394_VERBOSEDEBUG
int i;
#endif
PRINT(KERN_DEBUG, "Serial EEPROM has suspicious values, "
"attempting to setting max_packet_size to 512 bytes");
reg_write(ohci, OHCI1394_BusOptions,
(reg_read(ohci, OHCI1394_BusOptions) & 0xf007) | 0x8002);
ohci->max_packet_size = 512;
#ifdef CONFIG_IEEE1394_VERBOSEDEBUG
PRINT(KERN_DEBUG, " EEPROM Present: %d",
(reg_read(ohci, OHCI1394_Version) >> 24) & 0x1);
reg_write(ohci, OHCI1394_GUID_ROM, 0x80000000);
for (i = 0;
((i < 1000) &&
(reg_read(ohci, OHCI1394_GUID_ROM) & 0x80000000)); i++)
udelay(10);
for (i = 0; i < 0x20; i++) {
reg_write(ohci, OHCI1394_GUID_ROM, 0x02000000);
PRINT(KERN_DEBUG, " EEPROM %02x: %02x", i,
(reg_read(ohci, OHCI1394_GUID_ROM) >> 16) & 0xff);
}
#endif
}
} }
/* /*
......
...@@ -1460,7 +1460,7 @@ static void remove_card(struct pci_dev *dev) ...@@ -1460,7 +1460,7 @@ static void remove_card(struct pci_dev *dev)
reg_write(lynx, PCI_INT_ENABLE, 0); reg_write(lynx, PCI_INT_ENABLE, 0);
free_irq(lynx->dev->irq, lynx); free_irq(lynx->dev->irq, lynx);
/* Disable IRM Contender */ /* Disable IRM Contender and LCtrl */
if (lynx->phyic.reg_1394a) if (lynx->phyic.reg_1394a)
set_phy_reg(lynx, 4, ~0xc0 & get_phy_reg(lynx, 4)); set_phy_reg(lynx, 4, ~0xc0 & get_phy_reg(lynx, 4));
...@@ -1788,12 +1788,12 @@ static int __devinit add_card(struct pci_dev *dev, ...@@ -1788,12 +1788,12 @@ static int __devinit add_card(struct pci_dev *dev,
reg_set_bits(lynx, GPIO_CTRL_A, 0x1); reg_set_bits(lynx, GPIO_CTRL_A, 0x1);
reg_write(lynx, GPIO_DATA_BASE + 0x3c, 0x1); reg_write(lynx, GPIO_DATA_BASE + 0x3c, 0x1);
} else { } else {
/* set the contender bit in the extended PHY register /* set the contender and LCtrl bit in the extended PHY register
* set. (Should check that bis 0,1,2 (=0xE0) is set * set. (Should check that bis 0,1,2 (=0xE0) is set
* in register 2?) * in register 2?)
*/ */
i = get_phy_reg(lynx, 4); i = get_phy_reg(lynx, 4);
if (i != -1) set_phy_reg(lynx, 4, i | 0x40); if (i != -1) set_phy_reg(lynx, 4, i | 0xc0);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment