r3923 - developers/sameo/patches/ar6k-atheros-2.0/2.6.24

sameo at sita.openmoko.org sameo at sita.openmoko.org
Tue Jan 22 17:31:49 CET 2008


Author: sameo
Date: 2008-01-22 17:31:48 +0100 (Tue, 22 Jan 2008)
New Revision: 3923

Modified:
   developers/sameo/patches/ar6k-atheros-2.0/2.6.24/atheros_2_0_hcd.patch
Log:
ar6k-atheros-2.0: Forgot the HCD patch.


Modified: developers/sameo/patches/ar6k-atheros-2.0/2.6.24/atheros_2_0_hcd.patch
===================================================================
--- developers/sameo/patches/ar6k-atheros-2.0/2.6.24/atheros_2_0_hcd.patch	2008-01-22 16:30:52 UTC (rev 3922)
+++ developers/sameo/patches/ar6k-atheros-2.0/2.6.24/atheros_2_0_hcd.patch	2008-01-22 16:31:48 UTC (rev 3923)
@@ -2,14 +2,14 @@
  drivers/sdio/hcd/Kconfig               |   14 
  drivers/sdio/hcd/Makefile              |    1 
  drivers/sdio/hcd/s3c24xx/Makefile      |    2 
- drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.c | 1491 +++++++++++++++++++++++++++++++++
- drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.h |   66 +
- 5 files changed, 1574 insertions(+)
+ drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.c | 1510 +++++++++++++++++++++++++++++++++
+ drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.h |   67 +
+ 5 files changed, 1594 insertions(+)
 
-Index: linux-2.6-openmoko/drivers/sdio/hcd/Kconfig
+Index: linux-2.6.24-rc8-omoko/drivers/sdio/hcd/Kconfig
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6-openmoko/drivers/sdio/hcd/Kconfig	2008-01-14 13:03:12.000000000 +0100
++++ linux-2.6.24-rc8-omoko/drivers/sdio/hcd/Kconfig	2008-01-22 17:29:21.000000000 +0100
 @@ -0,0 +1,14 @@
 +config SDIO_S3C24XX
 +	tristate "Samsung s3c24xx host controller"
@@ -25,24 +25,24 @@
 +	help
 +	  good luck.
 +
-Index: linux-2.6-openmoko/drivers/sdio/hcd/Makefile
+Index: linux-2.6.24-rc8-omoko/drivers/sdio/hcd/Makefile
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6-openmoko/drivers/sdio/hcd/Makefile	2008-01-14 13:03:12.000000000 +0100
++++ linux-2.6.24-rc8-omoko/drivers/sdio/hcd/Makefile	2008-01-22 17:29:21.000000000 +0100
 @@ -0,0 +1 @@
 +obj-$(CONFIG_PLAT_S3C24XX)	 	+= s3c24xx/
-Index: linux-2.6-openmoko/drivers/sdio/hcd/s3c24xx/Makefile
+Index: linux-2.6.24-rc8-omoko/drivers/sdio/hcd/s3c24xx/Makefile
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6-openmoko/drivers/sdio/hcd/s3c24xx/Makefile	2008-01-14 13:03:12.000000000 +0100
++++ linux-2.6.24-rc8-omoko/drivers/sdio/hcd/s3c24xx/Makefile	2008-01-22 17:29:21.000000000 +0100
 @@ -0,0 +1,2 @@
 +obj-$(CONFIG_PLAT_S3C24XX) += sdio_s3c24xx_hcd.o
 +sdio_s3c24xx_hcd-objs := s3c24xx_hcd.o
-Index: linux-2.6-openmoko/drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.c
+Index: linux-2.6.24-rc8-omoko/drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6-openmoko/drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.c	2008-01-14 13:03:12.000000000 +0100
-@@ -0,0 +1,1491 @@
++++ linux-2.6.24-rc8-omoko/drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.c	2008-01-22 17:29:21.000000000 +0100
+@@ -0,0 +1,1510 @@
 +/*
 + * s3c24xx_hcd.c - Samsung S3C MCI driver, Atheros SDIO API compatible.
 + *
@@ -608,14 +608,10 @@
 +	PSDREQUEST req;
 +	struct s3c24xx_hcd_context * context =
 +		container_of(work, struct s3c24xx_hcd_context, io_work);
-+	unsigned long flags;
 +
-+//	spin_lock_irqsave(&context->lock, flags);
-+
 +	req = GET_CURRENT_REQUEST(&context->hcd);
 +	if (req == NULL) {
 +		DBG_PRINT(SDDBG_ERROR, ("%s(): No current request\n", __FUNCTION__));
-+//		enable_irq(context->io_irq);
 +		return;
 +	}
 +
@@ -660,12 +656,12 @@
 +		if (context->complete == S3C24XX_HCD_DATA_READ ||
 +		    context->complete == S3C24XX_HCD_DATA_WRITE) {
 +			if (context->dma_en) {
++				dma_sync_single(NULL, context->io_buffer_dma,
++						req->BlockCount * req->BlockLen, DMA_BIDIRECTIONAL);
 +
 +				s3c2410_dma_ctrl(context->dma_channel, S3C2410_DMAOP_START);
 +
-+//				spin_unlock_irqrestore(&context->lock, flags);
 +				wait_for_completion(&context->dma_complete);
-+//				spin_lock_irqsave(&context->lock, flags);
 +
 +				s3c24xx_hcd_dma_complete(context);
 +			} else {
@@ -675,16 +671,12 @@
 +	}
 +
 + out:
-+//	spin_unlock_irqrestore(&context->lock, flags);
-+
 +	s3c24xx_hcd_clear_sta(context);
 +	s3c24xx_hcd_clear_imask(context);
 +
 +	writel(0, context->base + S3C2410_SDICMDARG);
 +	writel(0, context->base + S3C2410_SDICMDCON);
 +
-+//	spin_unlock_irqrestore(&context->lock, flags);
-+
 +	SDIO_HandleHcdEvent(&context->hcd, EVENT_HCD_TRANSFER_DONE);
 +}
 +
@@ -792,9 +784,17 @@
 +			imask &= ~S3C2410_SDIIMSK_SDIOIRQ;
 +			writel(imask, context->base + S3C2440_SDIIMSK);
 +			SDIO_HandleHcdEvent(&context->hcd, EVENT_HCD_SDIO_IRQ_PENDING);
++
++			dsta = readl(context->base + S3C2410_SDIDSTA);
++			if (dsta & S3C2410_SDIDSTA_SDIOIRQDETECT) {
++				writel(S3C2410_SDIDSTA_SDIOIRQDETECT, context->base + S3C2410_SDIDSTA);
++				SDIO_HandleHcdEvent(&context->hcd, EVENT_HCD_SDIO_IRQ_PENDING);
++			}
++
++
++		} else {
++			context->int_pending = 1;
 +		}
-+
-+		writel(S3C2410_SDIDSTA_SDIOIRQDETECT, context->base + S3C2410_SDIDSTA);
 +	}
 +
 +	req = GET_CURRENT_REQUEST(&context->hcd);
@@ -832,8 +832,8 @@
 +	}
 +
 +	if (cmdsta & S3C2410_SDICMDSTAT_RSPFIN ||
-+		(IS_SDREQ_WRITE_DATA(req->Flags) && (fsta &  S3C2410_SDIFSTA_TFDET)) ||
-+		(!IS_SDREQ_WRITE_DATA(req->Flags) && (fsta &  S3C2410_SDIFSTA_RFDET))) {
++	    (IS_SDREQ_WRITE_DATA(req->Flags) && (fsta &  S3C2410_SDIFSTA_TFDET)) ||
++	    (!IS_SDREQ_WRITE_DATA(req->Flags) && (fsta &  S3C2410_SDIFSTA_RFDET))) {
 +
 +		writel(S3C2410_SDICMDSTAT_RSPFIN, context->base + S3C2410_SDICMDSTAT);
 +
@@ -884,6 +884,16 @@
 +		writel(S3C2410_SDIDSTA_SBITERR, context->base + S3C2410_SDIDSTA);
 +	}
 +
++#if 0
++	dsta = readl(context->base + S3C2410_SDIDSTA);
++	if (dsta & S3C2410_SDIDSTA_SDIOIRQDETECT) {
++		printk("IRQ pending\n");
++	} else {
++		printk("No IRQ pending\n");
++	}
++
++#endif
++
 +	spin_unlock_irqrestore(&context->lock, flags);
 +	return IRQ_HANDLED;
 +}
@@ -949,6 +959,11 @@
 +		DBG_PRINT(SDDBG_TRACE, ("config SDIO_REARM_INT\n"));
 +		spin_lock_irqsave(&context->lock,flags);
 +
++		if (context->int_pending) {
++			context->int_pending = 0;
++			SDIO_HandleHcdEvent(&context->hcd, EVENT_HCD_SDIO_IRQ_PENDING);
++		}
++
 +		context->int_sdio = 1;
 +		imsk = readl(context->base + S3C2440_SDIIMSK);
 +		imsk |= S3C2410_SDIIMSK_SDIOIRQ;
@@ -996,8 +1011,6 @@
 +	struct s3c24xx_hcd_context * context =
 +		(struct s3c24xx_hcd_context *)hcd->pContext;
 +
-+//	dump_request(context);
-+
 +	req = GET_CURRENT_REQUEST(hcd);
 +	DBG_ASSERT(req != NULL);
 +
@@ -1013,7 +1026,6 @@
 +
 +	/* Enabling irqs */
 +	imask = S3C2410_SDIIMSK_READWAIT;
-+//	imask = S3C2410_SDIIMSK_READWAIT | S3C2410_SDIIMSK_SDIOIRQ;
 +
 +	cmdcon = readl(context->base + S3C2410_SDICMDCON);
 +
@@ -1067,11 +1079,14 @@
 +
 +		req->DataRemaining = req->BlockCount * req->BlockLen;
 +
++
++
 +		/* Set data size, and start the transfer */
++		dcon |= S3C2410_SDIDCON_IRQPERIOD;
 +		if (!(req->DataRemaining % 4)) {
 +			context->data_size = 4;
 +			dcon |= S3C2440_SDIDCON_DS_WORD;
-+			dcon |= (1 << 24);
++//			dcon |= (1 << 24);
 +		} else if (!(req->DataRemaining % 2)) {
 +			context->data_size = 2;
 +			dcon |= S3C2440_SDIDCON_DS_HALFWORD;
@@ -1081,12 +1096,15 @@
 +		}
 +
 +#ifdef CONFIG_SDIO_S3C24XX_DMA
-+		context->dma_en = 1;
-+#else
-+		context->dma_en = 0;
-+		context->data_size = 1;
-+		dcon |= S3C2440_SDIDCON_DS_BYTE;
++		if (req->DataRemaining > 16) {
++			context->dma_en = 1;
++		} else
 +#endif
++		{
++			context->dma_en = 0;
++			context->data_size = 1;
++			dcon |= S3C2440_SDIDCON_DS_BYTE;
++		}
 +
 +		if (context->dma_en) {
 +			dcon |= S3C2410_SDIDCON_DMAEN;
@@ -1369,6 +1387,7 @@
 +	hcd_context.dma_en = 0;
 +
 +	hcd_context.int_sdio = 0;
++	hcd_context.int_pending = 0;
 +
 +	spin_lock_init(&hcd_context.lock);
 +
@@ -1534,11 +1553,11 @@
 +
 +module_init(s3c24xx_hcd_init);
 +module_exit(s3c24xx_hcd_exit);
-Index: linux-2.6-openmoko/drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.h
+Index: linux-2.6.24-rc8-omoko/drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.h
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6-openmoko/drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.h	2008-01-14 13:03:12.000000000 +0100
-@@ -0,0 +1,66 @@
++++ linux-2.6.24-rc8-omoko/drivers/sdio/hcd/s3c24xx/s3c24xx_hcd.h	2008-01-22 17:29:21.000000000 +0100
+@@ -0,0 +1,67 @@
 +#ifndef __SDIO_S3C24XX_HCD_H___
 +#define __SDIO_S3C24XX_HCD_H___
 +
@@ -1587,6 +1606,7 @@
 +
 +	UINT32		  	  int_mask;
 +	UINT32		  	  int_sdio;            /* Do we have SDIO interrupt on ? */
++	UINT32		  	  int_pending;
 +
 +	UINT32		  	  complete;
 +





More information about the commitlog mailing list