1 diff --git a/drivers/ata/sata_brcmstb.c b/drivers/ata/sata_brcmstb.c
2 index 7ba20e0..ca02cdf 100644
3 --- a/drivers/ata/sata_brcmstb.c
4 +++ b/drivers/ata/sata_brcmstb.c
8 #include <linux/version.h>
9 -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32)
10 #include <linux/pm_runtime.h>
15 @@ -127,7 +125,7 @@ enum {
16 K2_SATA_TF_LBAM_OFFSET = 0x10,
17 K2_SATA_TF_LBAH_OFFSET = 0x14,
18 K2_SATA_TF_DEVICE_OFFSET = 0x18,
19 - K2_SATA_TF_CMDSTAT_OFFSET = 0x1c,
20 + K2_SATA_TF_CMDSTAT_OFFSET = 0x1c,
21 K2_SATA_TF_CTL_OFFSET = 0x20,
24 @@ -142,7 +140,7 @@ enum {
26 K2_SATA_SICR1_OFFSET = 0x80,
27 K2_SATA_SICR2_OFFSET = 0x84,
28 - K2_SATA_SIMR_OFFSET = 0x88, /* SATA interrupt mask register */
29 + K2_SATA_SIMR_OFFSET = 0x88, /* SATA intr mask register */
30 K2_SATA_MDIO_OFFSET = 0x8c, /* SATA MDIO access register */
31 K2_SATA_SCQR_OFFSET = 0x94, /* SATA command queue depth */
32 K2_SATA_QAL_OFFSET = 0xa0, /* QDMA ring address lower */
33 @@ -330,6 +328,22 @@ static void brcm_EnableOOBWindowFix(void __iomem *mmio_base, int port)
34 mdio_write_reg(mmio_base, port, 0x0D, sval);
37 +static void brcm_Enable256AlignDetection(void __iomem *mmio_base, int port)
40 + void __iomem *port_mmio;
42 + port_mmio = PORT_BASE(mmio_base, port);
44 + tmp32 = readl(port_mmio + K2_SATA_SICR1_OFFSET);
45 + tmp32 |= 0x08000000;
46 + writel(tmp32, port_mmio + K2_SATA_SICR1_OFFSET);
48 + tmp32 = readl(port_mmio + K2_SATA_SICR2_OFFSET);
49 + tmp32 |= 0x00800000;
50 + writel(tmp32, port_mmio + K2_SATA_SICR2_OFFSET);
53 static void brcm_AnalogReset(void __iomem *mmio_base, int port)
56 @@ -385,6 +399,8 @@ static void brcm_InitSata_1_5Gb(void __iomem *mmio_base, int port)
57 brcm_SetPllTxRxCtrl(mmio_base, port);
58 brcm_EnableOOBWindowFix(mmio_base, port);
60 + brcm_Enable256AlignDetection(mmio_base, port);
63 #ifdef CONFIG_BRCM_SATA_75MHZ_PLL
64 /* use 75Mhz PLL clock */
65 @@ -446,6 +462,8 @@ static void brcm_InitSata2_3Gb(void __iomem *mmio_base, int port)
66 brcm_SetPllTxRxCtrl(mmio_base, port);
67 brcm_EnableOOBWindowFix(mmio_base, port);
69 + brcm_Enable256AlignDetection(mmio_base, port);
72 #ifdef CONFIG_BRCM_SATA_75MHZ_PLL
73 /* use 75Mhz PLL clock */
74 @@ -758,11 +776,7 @@ static void k2_bmdma_setup_mmio(struct ata_queued_cmd *qc)
75 void __iomem *mmio = (void __iomem *) ap->ioaddr.bmdma_addr;
76 /* load PRD table addr. */
77 mb(); /* make sure PRD table writes are visible to controller */
78 -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35)
79 writel(ap->bmdma_prd_dma, mmio + ATA_DMA_TABLE_OFS);
81 - writel(ap->prd_dma, mmio + ATA_DMA_TABLE_OFS);
84 /* specify data direction, triple-check start bit is clear */
85 dmactl = readb(mmio + ATA_DMA_CMD);
86 @@ -819,11 +833,7 @@ static void k2_bmdma_start_mmio(struct ata_queued_cmd *qc)
88 static int k2_sata_port_start(struct ata_port *ap)
90 -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35)
91 ata_bmdma_port_start(ap);
98 @@ -848,8 +858,7 @@ static irqreturn_t k2_sata_interrupt(int irq, void *dev_instance)
102 - ata_for_each_link(link, ap, EDGE)
104 + ata_for_each_link(link, ap, EDGE) {
108 @@ -887,11 +896,7 @@ static irqreturn_t k2_sata_interrupt(int irq, void *dev_instance)
109 if (handled & IRQ_HANDLED)
112 -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35)
113 return ata_bmdma_interrupt(irq, dev_instance);
115 - return ata_sff_interrupt(irq, dev_instance);
120 @@ -1044,10 +1049,7 @@ static void k2_sata_remove_one(struct pci_dev *pdev)
121 struct k2_host_priv *hp = host->private_data;
123 brcm_pm_unregister_cb("sata");
125 -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32)
126 pm_runtime_get_noresume(&pdev->dev);
130 ata_pci_remove_one(pdev);
131 @@ -1135,7 +1137,9 @@ static int k2_sata_resume(struct device *dev)
134 ata_for_each_link(link, ap, EDGE) {
135 + spin_unlock_irqrestore(&hp->lock, flags);
136 sata_std_hardreset(link, NULL, 1000);
137 + spin_lock_irqsave(&hp->lock, flags);
141 @@ -1144,7 +1148,6 @@ static int k2_sata_resume(struct device *dev)
145 -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32)
146 static int k2_sata_runtime_suspend(struct device *dev)
148 return k2_sata_suspend(dev);
149 @@ -1162,8 +1165,6 @@ static int k2_sata_runtime_idle(struct device *dev)
150 return 0; /* ignored by pm core */
156 * Driver initialization
158 @@ -1206,25 +1207,25 @@ static struct ata_port_operations k2_sata_ops = {
161 static const struct ata_port_info k2_port_info[] = {
164 - .flags = ATA_FLAG_SATA |
165 - K2_FLAG_NO_ATAPI_DMA,
167 - .mwdma_mask = 0x07,
168 - .udma_mask = ATA_UDMA7,
169 - .port_ops = &k2_sata_ops,
173 - .flags = ATA_FLAG_SATA |
174 - K2_FLAG_NO_ATAPI_DMA |
175 - K2_FLAG_BRCM_SATA2,
177 - .mwdma_mask = 0x07,
178 - .udma_mask = ATA_UDMA7,
179 - .port_ops = &k2_sata_ops,
183 + .flags = ATA_FLAG_SATA |
184 + K2_FLAG_NO_ATAPI_DMA,
186 + .mwdma_mask = 0x07,
187 + .udma_mask = ATA_UDMA7,
188 + .port_ops = &k2_sata_ops,
192 + .flags = ATA_FLAG_SATA |
193 + K2_FLAG_NO_ATAPI_DMA |
194 + K2_FLAG_BRCM_SATA2,
196 + .mwdma_mask = 0x07,
197 + .udma_mask = ATA_UDMA7,
198 + .port_ops = &k2_sata_ops,
202 static void k2_sata_setup_port(struct ata_ioports *port, void __iomem *base)
203 @@ -1250,8 +1251,8 @@ static int k2_sata_init_one(struct pci_dev *pdev,
204 const struct pci_device_id *ent)
206 static int printed_version;
207 - const struct ata_port_info *ppi[] =
208 - { &k2_port_info[ent->driver_data], NULL };
209 + const struct ata_port_info *ppi[] = {
210 + &k2_port_info[ent->driver_data], NULL };
211 struct ata_host *host;
212 void __iomem *mmio_base;
213 int n_ports, i, rc, bar_pos;
214 @@ -1358,13 +1359,10 @@ static int k2_sata_init_one(struct pci_dev *pdev,
216 brcm_pm_register_cb("sata", k2_sata_pm_cb, host);
218 -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32)
219 /* pci core incremented pm counter before calling probe,
220 * we are decrementing it to enable runtime pm */
221 pm_runtime_put_noidle(&pdev->dev);
228 @@ -1374,14 +1372,12 @@ static const struct pci_device_id k2_sata_pci_tbl[] = {
232 -static struct dev_pm_ops k2_sata_pm_ops = {
233 +static const struct dev_pm_ops k2_sata_pm_ops = {
234 .suspend_noirq = k2_sata_suspend,
235 .resume_noirq = k2_sata_resume,
236 -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 32)
237 .runtime_suspend = k2_sata_runtime_suspend,
238 .runtime_resume = k2_sata_runtime_resume,
239 .runtime_idle = k2_sata_runtime_idle,
243 static struct pci_driver k2_sata_pci_driver = {