diff options
author | Wolfram Sang <wsa+renesas@sang-engineering.com> | 2018-08-06 06:40:05 -0400 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2018-08-06 13:25:01 -0400 |
commit | e207610fffbc339d14c663a6966454b8e9b2deff (patch) | |
tree | 352fa5c957143ee3c9398f8851827491a6574cf9 /drivers/ata | |
parent | eac7e072d7e99fad1b6e817c608b03c48205241e (diff) |
ata: sata_rcar: really mask all interrupts on Gen2 and later
Since R-Car Gen2, a new bit has been introduced to the interrupt mask
register. Update the code to handle it properly as well.
Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Reviewed-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'drivers/ata')
-rw-r--r-- | drivers/ata/sata_rcar.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/drivers/ata/sata_rcar.c b/drivers/ata/sata_rcar.c index 3b8ed10bfb8f..1ad168f76ef3 100644 --- a/drivers/ata/sata_rcar.c +++ b/drivers/ata/sata_rcar.c | |||
@@ -109,6 +109,8 @@ | |||
109 | #define SATAINTMASK_ERRMSK BIT(2) | 109 | #define SATAINTMASK_ERRMSK BIT(2) |
110 | #define SATAINTMASK_ERRCRTMSK BIT(1) | 110 | #define SATAINTMASK_ERRCRTMSK BIT(1) |
111 | #define SATAINTMASK_ATAMSK BIT(0) | 111 | #define SATAINTMASK_ATAMSK BIT(0) |
112 | #define SATAINTMASK_ALL_GEN1 0x7ff | ||
113 | #define SATAINTMASK_ALL_GEN2 0xfff | ||
112 | 114 | ||
113 | #define SATA_RCAR_INT_MASK (SATAINTMASK_SERRMSK | \ | 115 | #define SATA_RCAR_INT_MASK (SATAINTMASK_SERRMSK | \ |
114 | SATAINTMASK_ATAMSK) | 116 | SATAINTMASK_ATAMSK) |
@@ -152,6 +154,7 @@ enum sata_rcar_type { | |||
152 | 154 | ||
153 | struct sata_rcar_priv { | 155 | struct sata_rcar_priv { |
154 | void __iomem *base; | 156 | void __iomem *base; |
157 | u32 sataint_mask; | ||
155 | enum sata_rcar_type type; | 158 | enum sata_rcar_type type; |
156 | }; | 159 | }; |
157 | 160 | ||
@@ -225,7 +228,7 @@ static void sata_rcar_freeze(struct ata_port *ap) | |||
225 | struct sata_rcar_priv *priv = ap->host->private_data; | 228 | struct sata_rcar_priv *priv = ap->host->private_data; |
226 | 229 | ||
227 | /* mask */ | 230 | /* mask */ |
228 | iowrite32(0x7ff, priv->base + SATAINTMASK_REG); | 231 | iowrite32(priv->sataint_mask, priv->base + SATAINTMASK_REG); |
229 | 232 | ||
230 | ata_sff_freeze(ap); | 233 | ata_sff_freeze(ap); |
231 | } | 234 | } |
@@ -241,7 +244,7 @@ static void sata_rcar_thaw(struct ata_port *ap) | |||
241 | ata_sff_thaw(ap); | 244 | ata_sff_thaw(ap); |
242 | 245 | ||
243 | /* unmask */ | 246 | /* unmask */ |
244 | iowrite32(0x7ff & ~SATA_RCAR_INT_MASK, base + SATAINTMASK_REG); | 247 | iowrite32(priv->sataint_mask & ~SATA_RCAR_INT_MASK, base + SATAINTMASK_REG); |
245 | } | 248 | } |
246 | 249 | ||
247 | static void sata_rcar_ioread16_rep(void __iomem *reg, void *buffer, int count) | 250 | static void sata_rcar_ioread16_rep(void __iomem *reg, void *buffer, int count) |
@@ -735,7 +738,7 @@ static irqreturn_t sata_rcar_interrupt(int irq, void *dev_instance) | |||
735 | if (!sataintstat) | 738 | if (!sataintstat) |
736 | goto done; | 739 | goto done; |
737 | /* ack */ | 740 | /* ack */ |
738 | iowrite32(~sataintstat & 0x7ff, base + SATAINTSTAT_REG); | 741 | iowrite32(~sataintstat & priv->sataint_mask, base + SATAINTSTAT_REG); |
739 | 742 | ||
740 | ap = host->ports[0]; | 743 | ap = host->ports[0]; |
741 | 744 | ||
@@ -808,7 +811,7 @@ static void sata_rcar_init_module(struct sata_rcar_priv *priv) | |||
808 | 811 | ||
809 | /* ack and mask */ | 812 | /* ack and mask */ |
810 | iowrite32(0, base + SATAINTSTAT_REG); | 813 | iowrite32(0, base + SATAINTSTAT_REG); |
811 | iowrite32(0x7ff, base + SATAINTMASK_REG); | 814 | iowrite32(priv->sataint_mask, base + SATAINTMASK_REG); |
812 | 815 | ||
813 | /* enable interrupts */ | 816 | /* enable interrupts */ |
814 | iowrite32(ATAPI_INT_ENABLE_SATAINT, base + ATAPI_INT_ENABLE_REG); | 817 | iowrite32(ATAPI_INT_ENABLE_SATAINT, base + ATAPI_INT_ENABLE_REG); |
@@ -818,9 +821,12 @@ static void sata_rcar_init_controller(struct ata_host *host) | |||
818 | { | 821 | { |
819 | struct sata_rcar_priv *priv = host->private_data; | 822 | struct sata_rcar_priv *priv = host->private_data; |
820 | 823 | ||
824 | priv->sataint_mask = SATAINTMASK_ALL_GEN2; | ||
825 | |||
821 | /* reset and setup phy */ | 826 | /* reset and setup phy */ |
822 | switch (priv->type) { | 827 | switch (priv->type) { |
823 | case RCAR_GEN1_SATA: | 828 | case RCAR_GEN1_SATA: |
829 | priv->sataint_mask = SATAINTMASK_ALL_GEN1; | ||
824 | sata_rcar_gen1_phy_init(priv); | 830 | sata_rcar_gen1_phy_init(priv); |
825 | break; | 831 | break; |
826 | case RCAR_GEN2_SATA: | 832 | case RCAR_GEN2_SATA: |
@@ -948,7 +954,7 @@ static int sata_rcar_remove(struct platform_device *pdev) | |||
948 | iowrite32(0, base + ATAPI_INT_ENABLE_REG); | 954 | iowrite32(0, base + ATAPI_INT_ENABLE_REG); |
949 | /* ack and mask */ | 955 | /* ack and mask */ |
950 | iowrite32(0, base + SATAINTSTAT_REG); | 956 | iowrite32(0, base + SATAINTSTAT_REG); |
951 | iowrite32(0x7ff, base + SATAINTMASK_REG); | 957 | iowrite32(priv->sataint_mask, base + SATAINTMASK_REG); |
952 | 958 | ||
953 | pm_runtime_put(&pdev->dev); | 959 | pm_runtime_put(&pdev->dev); |
954 | pm_runtime_disable(&pdev->dev); | 960 | pm_runtime_disable(&pdev->dev); |
@@ -969,7 +975,7 @@ static int sata_rcar_suspend(struct device *dev) | |||
969 | /* disable interrupts */ | 975 | /* disable interrupts */ |
970 | iowrite32(0, base + ATAPI_INT_ENABLE_REG); | 976 | iowrite32(0, base + ATAPI_INT_ENABLE_REG); |
971 | /* mask */ | 977 | /* mask */ |
972 | iowrite32(0x7ff, base + SATAINTMASK_REG); | 978 | iowrite32(priv->sataint_mask, base + SATAINTMASK_REG); |
973 | 979 | ||
974 | pm_runtime_put(dev); | 980 | pm_runtime_put(dev); |
975 | } | 981 | } |
@@ -994,7 +1000,7 @@ static int sata_rcar_resume(struct device *dev) | |||
994 | } else { | 1000 | } else { |
995 | /* ack and mask */ | 1001 | /* ack and mask */ |
996 | iowrite32(0, base + SATAINTSTAT_REG); | 1002 | iowrite32(0, base + SATAINTSTAT_REG); |
997 | iowrite32(0x7ff, base + SATAINTMASK_REG); | 1003 | iowrite32(priv->sataint_mask, base + SATAINTMASK_REG); |
998 | 1004 | ||
999 | /* enable interrupts */ | 1005 | /* enable interrupts */ |
1000 | iowrite32(ATAPI_INT_ENABLE_SATAINT, | 1006 | iowrite32(ATAPI_INT_ENABLE_SATAINT, |