linux-dm800se_2.6.18.bb: add patch to swap sata ports on dm800se
[openembedded.git] / recipes / linux / linux-dm800se-2.6.18 / linux-2.6.18-swap-sata-ports.patch
1 --- linux-2.6.18-org/drivers/ata/sata_svw.c     2010-10-18 22:40:58.000000000 +0200
2 +++ linux-2.6.18/drivers/ata/sata_svw.c 2010-12-01 16:59:17.072938908 +0100
3 @@ -253,7 +253,7 @@
4         K2_SATA_GLOBAL_MASK             = 0x1018,
5  };
6  
7 -#define PORT_BASE(x, y)                ((x) + (K2_SATA_PORT_OFFSET * (unsigned)(y)))
8 +#define PORT_BASE(x, y)                ((x) + (K2_SATA_PORT_OFFSET * (unsigned)(y?0:1)))
9  #define PORT_MMIO(x)           PORT_BASE((void __iomem *) \
10                                         ((x)->host->mmio_base), \
11                                         (x)->port_no)
12 @@ -277,7 +277,7 @@
13         int reg)
14  {
15         void __iomem *mdio = mmio_base + K2_SATA_MDIO_OFFSET;
16 -       volatile unsigned int pSel = 1 << port;
17 +       volatile unsigned int pSel = 1 << (port?0:1);
18         uint32_t cmd  = WRITE_CMD;
19         
20         if( reg > 0x13 )
21 @@ -299,7 +299,7 @@
22         int reg, uint16_t val )
23  {
24         void __iomem *mdio = mmio_base + K2_SATA_MDIO_OFFSET;
25 -       volatile unsigned int pSel = 1 << port;
26 +       volatile unsigned int pSel = 1 << (port?0:1);
27         uint32_t cmd  = WRITE_CMD;
28         
29         if( reg > 0x13 )
30 @@ -589,8 +589,8 @@
31          unsigned int first=1;
32  
33  retry_brcm_initsata2:
34 -        for (port=0; port < num_ports; port++) 
35 -       writel(1, (void *)(mmio_base + port*K2_SATA_PORT_OFFSET + K2_SATA_SCR_CONTROL_OFFSET));
36 +        for (port=0; port < num_ports; port++)
37 +                writel(1, PORT_BASE(mmio_base, port)+K2_SATA_SCR_CONTROL_OFFSET);
38  
39          for (port=0; port < num_ports; port++) {
40                  /*
41 @@ -615,9 +615,9 @@
42  
43                  for (port=0; port < num_ports; port++)
44                  {
45 -                        unsigned int status = readl((void *)(mmio_base + port*K2_SATA_PORT_OFFSET + K2_SATA_SCR_STATUS_OFFSET));
46 -                        if( (status & 0xf) >= 0x5 && (status & 0xf0) == 0 && (status & 0xf00) == 0 ) 
47 -                       new_speed_mask |= 1<<port;
48 +                        unsigned int status = readl(PORT_BASE(mmio_base, port) + K2_SATA_SCR_STATUS_OFFSET);
49 +                        if( (status & 0xf) >= 0x5 && (status & 0xf0) == 0 && (status & 0xf00) == 0 )
50 +                                new_speed_mask |= 1<<port;
51                  }
52                  first = 0;
53                  if(new_speed_mask)
54 @@ -676,7 +676,7 @@
55                         */
56                         for (port = 0; port < probe_ent->n_ports; port++) {
57                                 // Put PHY in reset
58 -                               port_base = PORT_BASE(mmio_base, 0);
59 +                               port_base = PORT_BASE(mmio_base, port);
60                                 reg = readl(port_base+K2_SATA_SCR_CONTROL_OFFSET);
61                                 writel((reg & ~0xf) | 1, port_base+K2_SATA_SCR_CONTROL_OFFSET);
62  
63 @@ -2284,7 +2284,7 @@
64         /* All ports are on the same function. Multi-function device is no
65          * longer available. This should not be seen in any system. */
66         for (i = 0; i < ent->driver_data; i++)
67 -               k2_sata_setup_port(&probe_ent->port[i], base + i * K2_SATA_PORT_OFFSET);
68 +               k2_sata_setup_port(&probe_ent->port[i], PORT_BASE(base, i));
69  
70         pci_set_master(pdev);
71