]> git.pld-linux.org Git - packages/kernel.git/blob - linux-2.6-sata-promise-pata-ports.patch
- WOL patch fixed and re-enabled
[packages/kernel.git] / linux-2.6-sata-promise-pata-ports.patch
1 diff -urN linux-2.6.16.16/drivers/scsi/libata-core.c mod/drivers/scsi/libata-core.c
2 --- linux-2.6.16.16/drivers/scsi/libata-core.c  2006-05-11 03:56:24.000000000 +0200
3 +++ mod/drivers/scsi/libata-core.c      2006-05-20 03:14:57.165778500 +0200
4 @@ -4431,6 +4431,7 @@
5         ap->mwdma_mask = ent->mwdma_mask;
6         ap->udma_mask = ent->udma_mask;
7         ap->flags |= ent->host_flags;
8 +       ap->flags |= ent->port_flags[port_no];  /* pata fix */
9         ap->ops = ent->port_ops;
10         ap->cbl = ATA_CBL_NONE;
11         ap->active_tag = ATA_TAG_POISON;
12 diff -urN linux-2.6.16.16/drivers/scsi/sata_promise.c mod/drivers/scsi/sata_promise.c
13 --- linux-2.6.16.16/drivers/scsi/sata_promise.c 2006-05-11 03:56:24.000000000 +0200
14 +++ mod/drivers/scsi/sata_promise.c     2006-05-20 03:29:36.708746500 +0200
15 @@ -165,7 +165,7 @@
16         /* board_2037x */
17         {
18                 .sht            = &pdc_ata_sht,
19 -               .host_flags     = PDC_COMMON_FLAGS | ATA_FLAG_SATA,
20 +               .host_flags     = PDC_COMMON_FLAGS /* | ATA_FLAG_SATA */,       /* pata fix */
21                 .pio_mask       = 0x1f, /* pio0-4 */
22                 .mwdma_mask     = 0x07, /* mwdma0-2 */
23                 .udma_mask      = 0x7f, /* udma0-6 ; FIXME */
24 @@ -322,15 +322,34 @@
25  
26  static void pdc_sata_phy_reset(struct ata_port *ap)
27  {
28 -       pdc_reset_port(ap);
29 -       sata_phy_reset(ap);
30 +/*     pdc_reset_port(ap); */  /* pata fix */
31 +/*     sata_phy_reset(ap); */  /* pata fix */
32 +       /* if no sata flag, test for pata drive */      /* pata fix */
33 +       if (ap->flags & ATA_FLAG_SATA)  /* pata fix */
34 +       {                               /* pata fix */
35 +               pdc_reset_port(ap);     /* pata fix */
36 +               sata_phy_reset(ap);     /* pata fix */
37 +       }                               /* pata fix */
38 +       else                            /* pata fix */
39 +               pdc_pata_phy_reset(ap); /* pata fix */
40  }
41  
42  static void pdc_pata_phy_reset(struct ata_port *ap)
43  {
44         /* FIXME: add cable detect.  Don't assume 40-pin cable */
45 -       ap->cbl = ATA_CBL_PATA40;
46 -       ap->udma_mask &= ATA_UDMA_MASK_40C;
47 +/*     ap->cbl = ATA_CBL_PATA40; */                    /* pata fix */
48 +/*     ap->udma_mask &= ATA_UDMA_MASK_40C; */          /* pata fix */
49 +       /* add cable detection code for pata drives */  /* pata fix */
50 +       u8 tmp;                                         /* pata fix */
51 +       void *mmio = (void *) ap->ioaddr.cmd_addr + PDC_CTLSTAT + 0x03; /* pata fix */
52 +       tmp = readb(mmio);                              /* pata fix */
53 +       if (tmp & 0x01)                                 /* pata fix */
54 +       {                                               /* pata fix */
55 +               ap->cbl = ATA_CBL_PATA40;               /* pata fix */
56 +               ap->udma_mask &= ATA_UDMA_MASK_40C;     /* pata fix */
57 +       }                                               /* pata fix */
58 +       else                                            /* pata fix */
59 +               ap->cbl = ATA_CBL_PATA80;               /* pata fix */
60  
61         pdc_reset_port(ap);
62         ata_port_probe(ap);
63 @@ -646,6 +665,7 @@
64         unsigned int board_idx = (unsigned int) ent->driver_data;
65         int pci_dev_busy = 0;
66         int rc;
67 +       u8 tmp;         /* pata fix */
68  
69         if (!printed_version++)
70                 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
71 @@ -705,6 +725,9 @@
72         probe_ent->port[0].scr_addr = base + 0x400;
73         probe_ent->port[1].scr_addr = base + 0x500;
74  
75 +       probe_ent->port_flags[0] = ATA_FLAG_SATA;       /* pata fix */
76 +       probe_ent->port_flags[1] = ATA_FLAG_SATA;       /* pata fix */
77 +       
78         /* notice 4-port boards */
79         switch (board_idx) {
80         case board_20319:
81 @@ -715,9 +738,25 @@
82  
83                 probe_ent->port[2].scr_addr = base + 0x600;
84                 probe_ent->port[3].scr_addr = base + 0x700;
85 +
86 +               probe_ent->port_flags[2] = ATA_FLAG_SATA;       /* pata fix */
87 +               probe_ent->port_flags[3] = ATA_FLAG_SATA;       /* pata fix */
88                 break;
89         case board_2037x:
90 -               probe_ent->n_ports = 2;
91 +/*             probe_ent->n_ports = 2; */                                      /* pata fix */
92 +/*             Some boards have also PATA port */                              /* pata fix */
93 +
94 +               tmp = readb(mmio_base + PDC_FLASH_CTL+1);                       /* pata fix */
95 +               if (!(tmp & 0x80))                                              /* pata fix */
96 +               {                                                               /* pata fix */
97 +                       probe_ent->n_ports = 3;                                 /* pata fix */
98 +                       pdc_ata_setup_port(&probe_ent->port[2], base + 0x300);  /* pata fix */
99 +                       probe_ent->port_flags[2] = ATA_FLAG_SLAVE_POSS;         /* pata fix */
100 +                       printk(KERN_INFO DRV_NAME " PATA port found\n");        /* pata fix */
101 +               }                                                               /* pata fix */
102 +               else                                                            /* pata fix */
103 +                       probe_ent->n_ports = 2;                                 /* pata fix */
104 +               
105                 break;
106         case board_20771:
107                 probe_ent->n_ports = 2;
108 @@ -730,6 +769,9 @@
109  
110                 probe_ent->port[2].scr_addr = base + 0x600;
111                 probe_ent->port[3].scr_addr = base + 0x700;
112 +
113 +               probe_ent->port_flags[2] = ATA_FLAG_SATA;       /* pata fix */
114 +               probe_ent->port_flags[3] = ATA_FLAG_SATA;       /* pata fix */
115                 break;
116         default:
117                 BUG();
118 diff -urN linux-2.6.16.16/include/linux/libata.h mod/include/linux/libata.h
119 --- linux-2.6.16.16/include/linux/libata.h      2006-05-11 03:56:24.000000000 +0200
120 +++ mod/include/linux/libata.h  2006-05-20 03:31:46.216840250 +0200
121 @@ -237,6 +237,7 @@
122         unsigned long           irq;
123         unsigned int            irq_flags;
124         unsigned long           host_flags;
125 +       unsigned long           port_flags[ATA_MAX_PORTS];      /* pata fix */
126         void __iomem            *mmio_base;
127         void                    *private_data;
128  };
This page took 0.053291 seconds and 3 git commands to generate.