Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff -Nur orig/drivers/ata/ata_piix.c patch/drivers/ata/ata_piix.c
- --- orig/drivers/ata/ata_piix.c 2016-12-10 18:09:59.000000000 +0000
- +++ patch/drivers/ata/ata_piix.c 2016-12-14 01:05:40.795554265 +0000
- @@ -495,6 +495,7 @@
- { 0x266F, 0x1025, 0x0066 }, /* ICH6 on ACER Aspire 1694WLMi */
- { 0x2653, 0x1043, 0x82D8 }, /* ICH6M on Asus Eee 701 */
- { 0x27df, 0x104d, 0x900e }, /* ICH7 on Sony TZ-90 */
- + { 0x27DF, 0x8086, 0x27df }, /* ICH7 on Intel SS4200 */
- /* end marker */
- { 0, }
- };
- diff -Nur orig/drivers/pci/quirks.c patch/drivers/pci/quirks.c
- --- orig/drivers/pci/quirks.c 2016-12-10 18:09:59.000000000 +0000
- +++ patch/drivers/pci/quirks.c 2016-12-14 01:11:56.324180457 +0000
- @@ -3678,6 +3678,63 @@
- return -ENOTTY;
- }
- +
- +// enable IDE feature of SS5200 NAS
- +static int quirk_ss4200_ide_enable(struct pci_dev *dev) {
- + u32 rcba;
- + void __iomem *rcba_base;
- + u32 val0, val1;
- + printk(KERN_INFO "ss4200_ide - enable\n");
- +
- + // This is only going to be valid on an intel device!
- + // function disable register control base address
- + pci_read_config_dword(dev, 0xF0, &rcba);
- + if (rcba==0) {
- + printk(KERN_ALERT "ss4200_ide - unexpected RCBA=0\n");
- + return -1;
- + }
- +
- + rcba_base = ioremap_nocache(rcba & 0xFFFFC000, 0x4000); // 16 alignment
- + if (rcba_base == NULL) {
- + printk(KERN_ALERT "ss4200_ide - unexpected RCBA_BASE=null\n");
- + return -1;
- + }
- +
- + // read the Function Disable register, dword mode only
- + val0 = readl(rcba_base + 0x3418);
- + val1 = val0 & 0xFFFFFFFD; // enable the PATA device
- + printk(KERN_INFO "ss4200_ide - function disable register %x -> %x\n",val0,val1);
- + writel(val1, rcba_base + 0x3418);
- + iounmap(rcba_base);
- + return 0;
- +}
- +
- +
- +static void quirk_ss4200_ide_suspend(struct pci_dev *dev) {
- + printk(KERN_INFO "ss4200_ide - suspend\n");
- +}
- +
- +static void quirk_ss4200_ide_resume_early(struct pci_dev *dev) {
- + printk(KERN_INFO "ss4200_ide - resume early\n");
- + quirk_ss4200_ide_enable(dev);
- +}
- +
- +static void quirk_ss4200_ide_resume(struct pci_dev *dev) {
- + printk(KERN_INFO "ss4200_ide - resume\n");
- + quirk_ss4200_ide_enable(dev);
- +}
- +
- +static void quirk_ss4200_ide(struct pci_dev *dev) {
- + printk(KERN_INFO "ss4200_ide - start\n");
- + quirk_ss4200_ide_enable(dev);
- +}
- +
- +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH7_0, quirk_ss4200_ide);
- +DECLARE_PCI_FIXUP_SUSPEND(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH7_0, quirk_ss4200_ide_suspend);
- +DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH7_0, quirk_ss4200_ide_resume);
- +DECLARE_PCI_FIXUP_RESUME_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH7_0, quirk_ss4200_ide_resume_early);
- +
- +
- static void quirk_dma_func0_alias(struct pci_dev *dev)
- {
- if (PCI_FUNC(dev->devfn) != 0)
Advertisement
Add Comment
Please, Sign In to add comment