Re: [PATCH 1/3] RFC: AHCI: libahci is missing DMA
On 04-12-13 13:47, Sergei Shtylyov wrote: Hello. On 04-12-2013 16:10, oli...@schinagl.nl wrote: From: Oliver Schinagl The Allwinner sunxi platforms have patched in the following to enable DMA. This patch enables DMA controllers for the SUNXI Architecture. Signed-off-by: Olliver Schinagl --- drivers/ata/ahci.h| 6 ++ drivers/ata/libahci.c | 8 2 files changed, 14 insertions(+) diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h index 2289efdf..2bf2423 100644 --- a/drivers/ata/ahci.h +++ b/drivers/ata/ahci.h [...] @@ -209,6 +210,11 @@ enum { PORT_DEVSLP_DSP= (1 << 1), /* DevSlp present */ PORT_DEVSLP_ADSE= (1 << 0), /* Aggressive DevSlp enable */ +/* PORT_DMA bits */ +PORT_DMA_SETUP_OFFSET= 8, /* dma setup offset */ +PORT_DMA_SETUP_MASK= (0xff << PORT_DMA_SETUP_OFFSET),/* dma mask */ +PORT_DMA_SETUP_INIT= (0x44 << 0), Why not shift it right by PORT_DMA_SETUP_OFFSET if you do it in the next file anyway? Verbosity and clarity I suppose, try to reduce the number of magic values. I don't know what the preferred way is as we know so little about the IP. [...] diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c index c482f8c..d697a74 100644 --- a/drivers/ata/libahci.c +++ b/drivers/ata/libahci.c @@ -570,6 +570,14 @@ void ahci_start_engine(struct ata_port *ap) void __iomem *port_mmio = ahci_port_base(ap); u32 tmp; +#ifdef CONFIG_ARCH_SUNXI +/* Setup DMA before DMA start */ +tmp = readl(port_mmio + PORT_DMA); +tmp &= ~PORT_DMA_SETUP_MASK; +tmp |= PORT_DMA_SETUP_INIT << PORT_DMA_SETUP_OFFSET; +writel(tmp, port_mmio + PORT_DMA); +#endif + I don't think #ifdef is appropriate here. It's not, but I was hoping Smarter devs then me would point me the right way ;) Oliver WBR, Sergei -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 1/3] RFC: AHCI: libahci is missing DMA
Hello. On 04-12-2013 16:10, oli...@schinagl.nl wrote: From: Oliver Schinagl The Allwinner sunxi platforms have patched in the following to enable DMA. This patch enables DMA controllers for the SUNXI Architecture. Signed-off-by: Olliver Schinagl --- drivers/ata/ahci.h| 6 ++ drivers/ata/libahci.c | 8 2 files changed, 14 insertions(+) diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h index 2289efdf..2bf2423 100644 --- a/drivers/ata/ahci.h +++ b/drivers/ata/ahci.h [...] @@ -209,6 +210,11 @@ enum { PORT_DEVSLP_DSP = (1 << 1), /* DevSlp present */ PORT_DEVSLP_ADSE= (1 << 0), /* Aggressive DevSlp enable */ + /* PORT_DMA bits */ + PORT_DMA_SETUP_OFFSET = 8, /* dma setup offset */ + PORT_DMA_SETUP_MASK = (0xff << PORT_DMA_SETUP_OFFSET),/* dma mask */ + PORT_DMA_SETUP_INIT = (0x44 << 0), Why not shift it right by PORT_DMA_SETUP_OFFSET if you do it in the next file anyway? [...] diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c index c482f8c..d697a74 100644 --- a/drivers/ata/libahci.c +++ b/drivers/ata/libahci.c @@ -570,6 +570,14 @@ void ahci_start_engine(struct ata_port *ap) void __iomem *port_mmio = ahci_port_base(ap); u32 tmp; +#ifdef CONFIG_ARCH_SUNXI + /* Setup DMA before DMA start */ + tmp = readl(port_mmio + PORT_DMA); + tmp &= ~PORT_DMA_SETUP_MASK; + tmp |= PORT_DMA_SETUP_INIT << PORT_DMA_SETUP_OFFSET; + writel(tmp, port_mmio + PORT_DMA); +#endif + I don't think #ifdef is appropriate here. WBR, Sergei -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 1/3] RFC: AHCI: libahci is missing DMA
Hey Tejun Heo, On 04-12-13 13:32, Tejun Heo wrote: On Wed, Dec 04, 2013 at 01:10:53PM +0100, oli...@schinagl.nl wrote: From: Oliver Schinagl The Allwinner sunxi platforms have patched in the following to enable DMA. This patch enables DMA controllers for the SUNXI Architecture. Signed-off-by: Olliver Schinagl --- drivers/ata/ahci.h| 6 ++ drivers/ata/libahci.c | 8 2 files changed, 14 insertions(+) diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h index 2289efdf..2bf2423 100644 --- a/drivers/ata/ahci.h +++ b/drivers/ata/ahci.h @@ -138,6 +138,7 @@ enum { PORT_SCR_NTF= 0x3c, /* SATA phy register: SNotification */ PORT_FBS= 0x40, /* FIS-based Switching */ PORT_DEVSLP = 0x44, /* device sleep */ + PORT_DMA= 0x70, /* direct memory access */ /* PORT_IRQ_{STAT,MASK} bits */ PORT_IRQ_COLD_PRES = (1 << 31), /* cold presence detect */ @@ -209,6 +210,11 @@ enum { PORT_DEVSLP_DSP = (1 << 1), /* DevSlp present */ PORT_DEVSLP_ADSE= (1 << 0), /* Aggressive DevSlp enable */ + /* PORT_DMA bits */ + PORT_DMA_SETUP_OFFSET = 8, /* dma setup offset */ + PORT_DMA_SETUP_MASK = (0xff << PORT_DMA_SETUP_OFFSET),/* dma mask */ + PORT_DMA_SETUP_INIT = (0x44 << 0), Ummm... this doesn't belong to ahci proper, right? I have no idea why Allwinner added that and what it really does. We have no documentation, only code drops. I had high hopes someone around here knows what it could mean and where it does belong. + /* hpriv->flags bits */ #define AHCI_HFLAGS(flags) .private_data = (void *)(flags) diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c index c482f8c..d697a74 100644 --- a/drivers/ata/libahci.c +++ b/drivers/ata/libahci.c @@ -570,6 +570,14 @@ void ahci_start_engine(struct ata_port *ap) void __iomem *port_mmio = ahci_port_base(ap); u32 tmp; +#ifdef CONFIG_ARCH_SUNXI + /* Setup DMA before DMA start */ + tmp = readl(port_mmio + PORT_DMA); + tmp &= ~PORT_DMA_SETUP_MASK; + tmp |= PORT_DMA_SETUP_INIT << PORT_DMA_SETUP_OFFSET; + writel(tmp, port_mmio + PORT_DMA); +#endif If this is something platform device specific, wouldn't overriding ->port_start() which wraps around ahci_port_start() make more sense? Again, I don't know, this is where Allwinner had put it. We don't even know who's IP they use. I'm happy to start experimenting moving this around a bit and will take your clue to figure out what you mean and if it could work. Oliver Thanks. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 1/3] RFC: AHCI: libahci is missing DMA
On Wed, Dec 04, 2013 at 01:10:53PM +0100, oli...@schinagl.nl wrote: > From: Oliver Schinagl > > The Allwinner sunxi platforms have patched in the following to enable > DMA. This patch enables DMA controllers for the SUNXI Architecture. > > Signed-off-by: Olliver Schinagl > --- > drivers/ata/ahci.h| 6 ++ > drivers/ata/libahci.c | 8 > 2 files changed, 14 insertions(+) > > diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h > index 2289efdf..2bf2423 100644 > --- a/drivers/ata/ahci.h > +++ b/drivers/ata/ahci.h > @@ -138,6 +138,7 @@ enum { > PORT_SCR_NTF= 0x3c, /* SATA phy register: SNotification */ > PORT_FBS= 0x40, /* FIS-based Switching */ > PORT_DEVSLP = 0x44, /* device sleep */ > + PORT_DMA= 0x70, /* direct memory access */ > > /* PORT_IRQ_{STAT,MASK} bits */ > PORT_IRQ_COLD_PRES = (1 << 31), /* cold presence detect */ > @@ -209,6 +210,11 @@ enum { > PORT_DEVSLP_DSP = (1 << 1), /* DevSlp present */ > PORT_DEVSLP_ADSE= (1 << 0), /* Aggressive DevSlp enable */ > > + /* PORT_DMA bits */ > + PORT_DMA_SETUP_OFFSET = 8, /* dma setup offset */ > + PORT_DMA_SETUP_MASK = (0xff << PORT_DMA_SETUP_OFFSET),/* dma mask */ > + PORT_DMA_SETUP_INIT = (0x44 << 0), Ummm... this doesn't belong to ahci proper, right? > + > /* hpriv->flags bits */ > > #define AHCI_HFLAGS(flags) .private_data = (void *)(flags) > diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c > index c482f8c..d697a74 100644 > --- a/drivers/ata/libahci.c > +++ b/drivers/ata/libahci.c > @@ -570,6 +570,14 @@ void ahci_start_engine(struct ata_port *ap) > void __iomem *port_mmio = ahci_port_base(ap); > u32 tmp; > > +#ifdef CONFIG_ARCH_SUNXI > + /* Setup DMA before DMA start */ > + tmp = readl(port_mmio + PORT_DMA); > + tmp &= ~PORT_DMA_SETUP_MASK; > + tmp |= PORT_DMA_SETUP_INIT << PORT_DMA_SETUP_OFFSET; > + writel(tmp, port_mmio + PORT_DMA); > +#endif If this is something platform device specific, wouldn't overriding ->port_start() which wraps around ahci_port_start() make more sense? Thanks. -- tejun -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH 1/3] RFC: AHCI: libahci is missing DMA
From: Oliver Schinagl The Allwinner sunxi platforms have patched in the following to enable DMA. This patch enables DMA controllers for the SUNXI Architecture. Signed-off-by: Olliver Schinagl --- drivers/ata/ahci.h| 6 ++ drivers/ata/libahci.c | 8 2 files changed, 14 insertions(+) diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h index 2289efdf..2bf2423 100644 --- a/drivers/ata/ahci.h +++ b/drivers/ata/ahci.h @@ -138,6 +138,7 @@ enum { PORT_SCR_NTF= 0x3c, /* SATA phy register: SNotification */ PORT_FBS= 0x40, /* FIS-based Switching */ PORT_DEVSLP = 0x44, /* device sleep */ + PORT_DMA= 0x70, /* direct memory access */ /* PORT_IRQ_{STAT,MASK} bits */ PORT_IRQ_COLD_PRES = (1 << 31), /* cold presence detect */ @@ -209,6 +210,11 @@ enum { PORT_DEVSLP_DSP = (1 << 1), /* DevSlp present */ PORT_DEVSLP_ADSE= (1 << 0), /* Aggressive DevSlp enable */ + /* PORT_DMA bits */ + PORT_DMA_SETUP_OFFSET = 8, /* dma setup offset */ + PORT_DMA_SETUP_MASK = (0xff << PORT_DMA_SETUP_OFFSET),/* dma mask */ + PORT_DMA_SETUP_INIT = (0x44 << 0), + /* hpriv->flags bits */ #define AHCI_HFLAGS(flags) .private_data = (void *)(flags) diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c index c482f8c..d697a74 100644 --- a/drivers/ata/libahci.c +++ b/drivers/ata/libahci.c @@ -570,6 +570,14 @@ void ahci_start_engine(struct ata_port *ap) void __iomem *port_mmio = ahci_port_base(ap); u32 tmp; +#ifdef CONFIG_ARCH_SUNXI + /* Setup DMA before DMA start */ + tmp = readl(port_mmio + PORT_DMA); + tmp &= ~PORT_DMA_SETUP_MASK; + tmp |= PORT_DMA_SETUP_INIT << PORT_DMA_SETUP_OFFSET; + writel(tmp, port_mmio + PORT_DMA); +#endif + /* start DMA */ tmp = readl(port_mmio + PORT_CMD); tmp |= PORT_CMD_START; -- 1.8.3.2 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH 1/3] RFC: AHCI: libahci is missing DMA
From: Oliver Schinagl oli...@schinagl.nl The Allwinner sunxi platforms have patched in the following to enable DMA. This patch enables DMA controllers for the SUNXI Architecture. Signed-off-by: Olliver Schinagl oli...@schinagl.nl --- drivers/ata/ahci.h| 6 ++ drivers/ata/libahci.c | 8 2 files changed, 14 insertions(+) diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h index 2289efdf..2bf2423 100644 --- a/drivers/ata/ahci.h +++ b/drivers/ata/ahci.h @@ -138,6 +138,7 @@ enum { PORT_SCR_NTF= 0x3c, /* SATA phy register: SNotification */ PORT_FBS= 0x40, /* FIS-based Switching */ PORT_DEVSLP = 0x44, /* device sleep */ + PORT_DMA= 0x70, /* direct memory access */ /* PORT_IRQ_{STAT,MASK} bits */ PORT_IRQ_COLD_PRES = (1 31), /* cold presence detect */ @@ -209,6 +210,11 @@ enum { PORT_DEVSLP_DSP = (1 1), /* DevSlp present */ PORT_DEVSLP_ADSE= (1 0), /* Aggressive DevSlp enable */ + /* PORT_DMA bits */ + PORT_DMA_SETUP_OFFSET = 8, /* dma setup offset */ + PORT_DMA_SETUP_MASK = (0xff PORT_DMA_SETUP_OFFSET),/* dma mask */ + PORT_DMA_SETUP_INIT = (0x44 0), + /* hpriv-flags bits */ #define AHCI_HFLAGS(flags) .private_data = (void *)(flags) diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c index c482f8c..d697a74 100644 --- a/drivers/ata/libahci.c +++ b/drivers/ata/libahci.c @@ -570,6 +570,14 @@ void ahci_start_engine(struct ata_port *ap) void __iomem *port_mmio = ahci_port_base(ap); u32 tmp; +#ifdef CONFIG_ARCH_SUNXI + /* Setup DMA before DMA start */ + tmp = readl(port_mmio + PORT_DMA); + tmp = ~PORT_DMA_SETUP_MASK; + tmp |= PORT_DMA_SETUP_INIT PORT_DMA_SETUP_OFFSET; + writel(tmp, port_mmio + PORT_DMA); +#endif + /* start DMA */ tmp = readl(port_mmio + PORT_CMD); tmp |= PORT_CMD_START; -- 1.8.3.2 -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 1/3] RFC: AHCI: libahci is missing DMA
On Wed, Dec 04, 2013 at 01:10:53PM +0100, oli...@schinagl.nl wrote: From: Oliver Schinagl oli...@schinagl.nl The Allwinner sunxi platforms have patched in the following to enable DMA. This patch enables DMA controllers for the SUNXI Architecture. Signed-off-by: Olliver Schinagl oli...@schinagl.nl --- drivers/ata/ahci.h| 6 ++ drivers/ata/libahci.c | 8 2 files changed, 14 insertions(+) diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h index 2289efdf..2bf2423 100644 --- a/drivers/ata/ahci.h +++ b/drivers/ata/ahci.h @@ -138,6 +138,7 @@ enum { PORT_SCR_NTF= 0x3c, /* SATA phy register: SNotification */ PORT_FBS= 0x40, /* FIS-based Switching */ PORT_DEVSLP = 0x44, /* device sleep */ + PORT_DMA= 0x70, /* direct memory access */ /* PORT_IRQ_{STAT,MASK} bits */ PORT_IRQ_COLD_PRES = (1 31), /* cold presence detect */ @@ -209,6 +210,11 @@ enum { PORT_DEVSLP_DSP = (1 1), /* DevSlp present */ PORT_DEVSLP_ADSE= (1 0), /* Aggressive DevSlp enable */ + /* PORT_DMA bits */ + PORT_DMA_SETUP_OFFSET = 8, /* dma setup offset */ + PORT_DMA_SETUP_MASK = (0xff PORT_DMA_SETUP_OFFSET),/* dma mask */ + PORT_DMA_SETUP_INIT = (0x44 0), Ummm... this doesn't belong to ahci proper, right? + /* hpriv-flags bits */ #define AHCI_HFLAGS(flags) .private_data = (void *)(flags) diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c index c482f8c..d697a74 100644 --- a/drivers/ata/libahci.c +++ b/drivers/ata/libahci.c @@ -570,6 +570,14 @@ void ahci_start_engine(struct ata_port *ap) void __iomem *port_mmio = ahci_port_base(ap); u32 tmp; +#ifdef CONFIG_ARCH_SUNXI + /* Setup DMA before DMA start */ + tmp = readl(port_mmio + PORT_DMA); + tmp = ~PORT_DMA_SETUP_MASK; + tmp |= PORT_DMA_SETUP_INIT PORT_DMA_SETUP_OFFSET; + writel(tmp, port_mmio + PORT_DMA); +#endif If this is something platform device specific, wouldn't overriding -port_start() which wraps around ahci_port_start() make more sense? Thanks. -- tejun -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 1/3] RFC: AHCI: libahci is missing DMA
Hey Tejun Heo, On 04-12-13 13:32, Tejun Heo wrote: On Wed, Dec 04, 2013 at 01:10:53PM +0100, oli...@schinagl.nl wrote: From: Oliver Schinagl oli...@schinagl.nl The Allwinner sunxi platforms have patched in the following to enable DMA. This patch enables DMA controllers for the SUNXI Architecture. Signed-off-by: Olliver Schinagl oli...@schinagl.nl --- drivers/ata/ahci.h| 6 ++ drivers/ata/libahci.c | 8 2 files changed, 14 insertions(+) diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h index 2289efdf..2bf2423 100644 --- a/drivers/ata/ahci.h +++ b/drivers/ata/ahci.h @@ -138,6 +138,7 @@ enum { PORT_SCR_NTF= 0x3c, /* SATA phy register: SNotification */ PORT_FBS= 0x40, /* FIS-based Switching */ PORT_DEVSLP = 0x44, /* device sleep */ + PORT_DMA= 0x70, /* direct memory access */ /* PORT_IRQ_{STAT,MASK} bits */ PORT_IRQ_COLD_PRES = (1 31), /* cold presence detect */ @@ -209,6 +210,11 @@ enum { PORT_DEVSLP_DSP = (1 1), /* DevSlp present */ PORT_DEVSLP_ADSE= (1 0), /* Aggressive DevSlp enable */ + /* PORT_DMA bits */ + PORT_DMA_SETUP_OFFSET = 8, /* dma setup offset */ + PORT_DMA_SETUP_MASK = (0xff PORT_DMA_SETUP_OFFSET),/* dma mask */ + PORT_DMA_SETUP_INIT = (0x44 0), Ummm... this doesn't belong to ahci proper, right? I have no idea why Allwinner added that and what it really does. We have no documentation, only code drops. I had high hopes someone around here knows what it could mean and where it does belong. + /* hpriv-flags bits */ #define AHCI_HFLAGS(flags) .private_data = (void *)(flags) diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c index c482f8c..d697a74 100644 --- a/drivers/ata/libahci.c +++ b/drivers/ata/libahci.c @@ -570,6 +570,14 @@ void ahci_start_engine(struct ata_port *ap) void __iomem *port_mmio = ahci_port_base(ap); u32 tmp; +#ifdef CONFIG_ARCH_SUNXI + /* Setup DMA before DMA start */ + tmp = readl(port_mmio + PORT_DMA); + tmp = ~PORT_DMA_SETUP_MASK; + tmp |= PORT_DMA_SETUP_INIT PORT_DMA_SETUP_OFFSET; + writel(tmp, port_mmio + PORT_DMA); +#endif If this is something platform device specific, wouldn't overriding -port_start() which wraps around ahci_port_start() make more sense? Again, I don't know, this is where Allwinner had put it. We don't even know who's IP they use. I'm happy to start experimenting moving this around a bit and will take your clue to figure out what you mean and if it could work. Oliver Thanks. -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 1/3] RFC: AHCI: libahci is missing DMA
Hello. On 04-12-2013 16:10, oli...@schinagl.nl wrote: From: Oliver Schinagl oli...@schinagl.nl The Allwinner sunxi platforms have patched in the following to enable DMA. This patch enables DMA controllers for the SUNXI Architecture. Signed-off-by: Olliver Schinagl oli...@schinagl.nl --- drivers/ata/ahci.h| 6 ++ drivers/ata/libahci.c | 8 2 files changed, 14 insertions(+) diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h index 2289efdf..2bf2423 100644 --- a/drivers/ata/ahci.h +++ b/drivers/ata/ahci.h [...] @@ -209,6 +210,11 @@ enum { PORT_DEVSLP_DSP = (1 1), /* DevSlp present */ PORT_DEVSLP_ADSE= (1 0), /* Aggressive DevSlp enable */ + /* PORT_DMA bits */ + PORT_DMA_SETUP_OFFSET = 8, /* dma setup offset */ + PORT_DMA_SETUP_MASK = (0xff PORT_DMA_SETUP_OFFSET),/* dma mask */ + PORT_DMA_SETUP_INIT = (0x44 0), Why not shift it right by PORT_DMA_SETUP_OFFSET if you do it in the next file anyway? [...] diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c index c482f8c..d697a74 100644 --- a/drivers/ata/libahci.c +++ b/drivers/ata/libahci.c @@ -570,6 +570,14 @@ void ahci_start_engine(struct ata_port *ap) void __iomem *port_mmio = ahci_port_base(ap); u32 tmp; +#ifdef CONFIG_ARCH_SUNXI + /* Setup DMA before DMA start */ + tmp = readl(port_mmio + PORT_DMA); + tmp = ~PORT_DMA_SETUP_MASK; + tmp |= PORT_DMA_SETUP_INIT PORT_DMA_SETUP_OFFSET; + writel(tmp, port_mmio + PORT_DMA); +#endif + I don't think #ifdef is appropriate here. WBR, Sergei -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 1/3] RFC: AHCI: libahci is missing DMA
On 04-12-13 13:47, Sergei Shtylyov wrote: Hello. On 04-12-2013 16:10, oli...@schinagl.nl wrote: From: Oliver Schinagl oli...@schinagl.nl The Allwinner sunxi platforms have patched in the following to enable DMA. This patch enables DMA controllers for the SUNXI Architecture. Signed-off-by: Olliver Schinagl oli...@schinagl.nl --- drivers/ata/ahci.h| 6 ++ drivers/ata/libahci.c | 8 2 files changed, 14 insertions(+) diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h index 2289efdf..2bf2423 100644 --- a/drivers/ata/ahci.h +++ b/drivers/ata/ahci.h [...] @@ -209,6 +210,11 @@ enum { PORT_DEVSLP_DSP= (1 1), /* DevSlp present */ PORT_DEVSLP_ADSE= (1 0), /* Aggressive DevSlp enable */ +/* PORT_DMA bits */ +PORT_DMA_SETUP_OFFSET= 8, /* dma setup offset */ +PORT_DMA_SETUP_MASK= (0xff PORT_DMA_SETUP_OFFSET),/* dma mask */ +PORT_DMA_SETUP_INIT= (0x44 0), Why not shift it right by PORT_DMA_SETUP_OFFSET if you do it in the next file anyway? Verbosity and clarity I suppose, try to reduce the number of magic values. I don't know what the preferred way is as we know so little about the IP. [...] diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c index c482f8c..d697a74 100644 --- a/drivers/ata/libahci.c +++ b/drivers/ata/libahci.c @@ -570,6 +570,14 @@ void ahci_start_engine(struct ata_port *ap) void __iomem *port_mmio = ahci_port_base(ap); u32 tmp; +#ifdef CONFIG_ARCH_SUNXI +/* Setup DMA before DMA start */ +tmp = readl(port_mmio + PORT_DMA); +tmp = ~PORT_DMA_SETUP_MASK; +tmp |= PORT_DMA_SETUP_INIT PORT_DMA_SETUP_OFFSET; +writel(tmp, port_mmio + PORT_DMA); +#endif + I don't think #ifdef is appropriate here. It's not, but I was hoping Smarter devs then me would point me the right way ;) Oliver WBR, Sergei -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/