Re: [PATCH 1/3] RFC: AHCI: libahci is missing DMA

2013-12-04 Thread Oliver Schinagl


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

2013-12-04 Thread Sergei Shtylyov

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

2013-12-04 Thread Oliver Schinagl

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

2013-12-04 Thread Tejun Heo
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

2013-12-04 Thread oliver
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

2013-12-04 Thread oliver
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

2013-12-04 Thread Tejun Heo
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

2013-12-04 Thread Oliver Schinagl

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

2013-12-04 Thread Sergei Shtylyov

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

2013-12-04 Thread Oliver Schinagl


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/