diff -X linux-2.6.14-rc2/Documentation/dontdiff -Naur linux-2.6.14-rc2.orig/drivers/ieee1394/ohci1394.c linux-2.6.14-rc2/drivers/ieee1394/ohci1394.c --- linux-2.6.14-rc2.orig/drivers/ieee1394/ohci1394.c 2005-09-19 20:00:41.000000000 -0700 +++ linux-2.6.14-rc2/drivers/ieee1394/ohci1394.c 2005-10-15 12:55:08.000000000 -0700 @@ -169,6 +169,10 @@ module_param(phys_dma, int, 0644); MODULE_PARM_DESC(phys_dma, "Enable physical dma (default = 1)."); +static int toshiba __initdata = 0; +module_param(toshiba, bool, 0); +MODULE_PARM_DESC(toshiba, "Toshiba Legacy-Free BIOS workaround (default=0)."); + static void dma_trm_tasklet(unsigned long data); static void dma_trm_reset(struct dma_trm_ctx *d); @@ -3222,14 +3226,28 @@ struct hpsb_host *host; struct ti_ohci *ohci; /* shortcut to currently handled device */ unsigned long ohci_base; + u16 toshiba_data; if (version_printed++ == 0) PRINT_G(KERN_INFO, "%s", version); + if (toshiba) { + dev->current_state = 4; + pci_read_config_word(dev, PCI_CACHE_LINE_SIZE, &toshiba_data); + } + if (pci_enable_device(dev)) FAIL(-ENXIO, "Failed to enable OHCI hardware"); pci_set_master(dev); + if (toshiba) { + mdelay(10); + pci_write_config_word(dev, PCI_CACHE_LINE_SIZE, toshiba_data); + pci_write_config_word(dev, PCI_INTERRUPT_LINE, dev->irq); + pci_write_config_dword(dev, PCI_BASE_ADDRESS_0, pci_resource_start(dev, 0)); + pci_write_config_dword(dev, PCI_BASE_ADDRESS_1, pci_resource_start(dev, 1)); + } + host = hpsb_alloc_host(&ohci1394_driver, sizeof(struct ti_ohci), &dev->dev); if (!host) FAIL(-ENOMEM, "Failed to allocate host structure");