Re: [PATCH] Samsung S3C24xx SD/MMC driver

2007-12-19 Thread Harald Welte
Hi Pierre,

thanks for your comments.

On Wed, Dec 19, 2007 at 05:54:33PM +0100, Pierre Ossman wrote:
> Well, my biggest beef with this driver is the excessive debug code. I
> did a cleanup in an older version of the driver, but it shouldn't be
> to difficult to do the same for this one. I've included my patch for
> reference.

ok, I'll re-work the patch according to your sample and re-submit.

The debugging was needed during development, and might still be needed
to debug some weird issues.

btw: OpenMoko is currently working on an ar6k wifi driver on top of the 
new mainline kernel SDIO support using the s3c_mci host controller
driver as basis.  So within not-too-distant-time we should also be able
to have SDIO working and tested on s3c_mci.

> > Index: linux-2.6/drivers/mmc/host/s3cmci.c
> > ===
> > --- /dev/null
> > +++ linux-2.6/drivers/mmc/host/s3cmci.c
> 
> > +#include 
> 
> This is always a warning sign. It should never be needed in a host driver.

ok, will see how to remove it.

> > +   *words = sg->length >> 2;
> > +   *pointer = page_address(sg_page(sg)) + sg->offset;
> > +
> 
> The length might not be a multiple of four. And it might also be
> completely unaligned. Make sure you can either handle such requests,
> or fail them with -EINVAL.

ok, will update before submitting the next version.
-- 
- Harald Welte <[EMAIL PROTECTED]>  http://openmoko.org/

Software for the world's first truly open Free Software mobile phone
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH] Samsung S3C24xx SD/MMC driver

2007-12-19 Thread Pierre Ossman
On Wed, 19 Dec 2007 15:22:13 +0100
Harald Welte <[EMAIL PROTECTED]> wrote:

> Hi!
> 
> This is a MMC/SD driver for the Samsung S3C24xx SD/MMC controller, originally
> developed years ago by Thomas Kleffel <[EMAIL PROTECTED]>.
> 
> Due to time constraints, he had no time to further maintain the driver
> and follow the mainline Linux changes in the SD/MMC stack.
> 
> With his authorization, I have taken over the task of making it
> compliant to the current mainline SD/MMC API and take care of the
> mainline kernel merge.
> 
> So please advise on whatever changes you deem neccessary and I'll try to
> do my best to incorporate them for a hopefully not-too-distant mainline
> merge.
> 
> After a potential kernel inclusion, we would co-maintain the driver.
> 
> Acked-by: Thomas Kleffel <[EMAIL PROTECTED]>
> Signed-off-by: Harald Welte <[EMAIL PROTECTED]>
> 
> ---

Well, my biggest beef with this driver is the excessive debug code. I did a 
cleanup in an older version of the driver, but it shouldn't be to difficult to 
do the same for this one. I've included my patch for reference.

> Index: linux-2.6/drivers/mmc/host/s3cmci.c
> ===
> --- /dev/null
> +++ linux-2.6/drivers/mmc/host/s3cmci.c

> +#include 

This is always a warning sign. It should never be needed in a host driver.


> +
> +static inline int get_data_buffer(struct s3cmci_host *host,
> +   u32 *words, u32 **pointer)
> +{
> + struct scatterlist *sg;
> +
> + if (host->pio_active == XFER_NONE)
> + return -EINVAL;
> +
> + if ((!host->mrq) || (!host->mrq->data))
> + return -EINVAL;
> +
> + if (host->pio_sgptr >= host->mrq->data->sg_len) {
> + dbg(host, dbg_debug, "no more buffers (%i/%i)\n",
> +   host->pio_sgptr, host->mrq->data->sg_len);
> + return -EBUSY;
> + }
> + sg = >mrq->data->sg[host->pio_sgptr];
> +
> + *words = sg->length >> 2;
> + *pointer = page_address(sg_page(sg)) + sg->offset;
> +

The length might not be a multiple of four. And it might also be completely 
unaligned. Make sure you can either handle such requests, or fail them with 
-EINVAL.

Rgds
-- 
 -- Pierre Ossman

  Linux kernel, MMC maintainerhttp://www.kernel.org
  PulseAudio, core developer  http://pulseaudio.org
  rdesktop, core developer  http://www.rdesktop.org
commit 4e47c91b7ca45940af384d3c9919a0eb160a2fb9
Author: Pierre Ossman <[EMAIL PROTECTED]>
Date:   Fri Jun 1 08:19:15 2007 +0200

s3mci: remove extra debug info

Remove excessive and unmaintained debug strings. This kind of debug
info should also be in the MMC layer, not drivers.

Signed-off-by: Pierre Ossman <[EMAIL PROTECTED]>

diff --git a/drivers/mmc/Makefile b/drivers/mmc/Makefile
index 7c2eb45..42fa90f 100644
--- a/drivers/mmc/Makefile
+++ b/drivers/mmc/Makefile
@@ -30,6 +30,5 @@ mmc_core-y := mmc.o mmc_sysfs.o
 mmc_core-$(CONFIG_BLOCK) += mmc_queue.o
 
 ifeq ($(CONFIG_MMC_DEBUG),y)
-obj-$(CONFIG_MMC)		+= mmc_debug.o
 EXTRA_CFLAGS += -DDEBUG
 endif
diff --git a/drivers/mmc/mmc_debug.c b/drivers/mmc/mmc_debug.c
deleted file mode 100644
index f13e223..000
--- a/drivers/mmc/mmc_debug.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- *  linux/drivers/mmc/mmc_debug.c
- *
- *  Copyright (C) 2003 maintech GmbH, Thomas Kleffel <[EMAIL PROTECTED]>
- *
- * This file contains debug helper functions for the MMC/SD stack
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- */
-
-#include 
-#include "mmc_debug.h"
-
-char *mmc_cmd2str(int cmd)
-{
-	switch(cmd) {
-		case  0: return "GO_IDLE_STATE";
-		case  1: return "ALL_SEND_OCR";
-		case  2: return "ALL_SEND_CID";
-		case  3: return "ALL_SEND_RELATIVE_ADD";
-		case  6: return "ACMD: SD_SET_BUSWIDTH";
-		case  7: return "SEL_DESEL_CARD";
-		case  9: return "SEND_CSD";
-		case 10: return "SEND_CID";
-		case 11: return "READ_UNTIL_STOP";
-		case 12: return "STOP_TRANSMISSION";
-		case 13: return "SEND_STATUS";
-		case 15: return "GO_INACTIVE_STATE";
-		case 16: return "SET_BLOCKLEN";
-		case 17: return "READ_SINGLE_BLOCK";
-		case 18: return "READ_MULTIPLE_BLOCK";
-		case 24: return "WRITE_SINGLE_BLOCK";
-		case 25: return "WRITE_MULTIPLE_BLOCK";
-		case 41: return "ACMD: SD_APP_OP_COND";
-		case 55: return "APP_CMD";
-		default: return "UNKNOWN";
-	}
-}
-EXPORT_SYMBOL(mmc_cmd2str);
-
-char *mmc_err2str(int err)
-{
-	switch(err) {
-		case MMC_ERR_NONE:	return "OK";
-		case MMC_ERR_TIMEOUT:	return "TIMEOUT";
-		case MMC_ERR_BADCRC: 	return "BADCRC";
-		case MMC_ERR_FIFO: 	return "FIFO";
-		case MMC_ERR_FAILED: 	return "FAILED";
-		case MMC_ERR_INVALID: 	return "INVALID";
-		case MMC_ERR_BUSY:	return "BUSY";
-		case MMC_ERR_DMA:	return "DMA";
-		case MMC_ERR_CANCELED:	return "CANCELED";
-		default: return 

Re: [PATCH] Samsung S3C24xx SD/MMC driver

2007-12-19 Thread Pierre Ossman
On Wed, 19 Dec 2007 15:22:13 +0100
Harald Welte [EMAIL PROTECTED] wrote:

 Hi!
 
 This is a MMC/SD driver for the Samsung S3C24xx SD/MMC controller, originally
 developed years ago by Thomas Kleffel [EMAIL PROTECTED].
 
 Due to time constraints, he had no time to further maintain the driver
 and follow the mainline Linux changes in the SD/MMC stack.
 
 With his authorization, I have taken over the task of making it
 compliant to the current mainline SD/MMC API and take care of the
 mainline kernel merge.
 
 So please advise on whatever changes you deem neccessary and I'll try to
 do my best to incorporate them for a hopefully not-too-distant mainline
 merge.
 
 After a potential kernel inclusion, we would co-maintain the driver.
 
 Acked-by: Thomas Kleffel [EMAIL PROTECTED]
 Signed-off-by: Harald Welte [EMAIL PROTECTED]
 
 ---

Well, my biggest beef with this driver is the excessive debug code. I did a 
cleanup in an older version of the driver, but it shouldn't be to difficult to 
do the same for this one. I've included my patch for reference.

 Index: linux-2.6/drivers/mmc/host/s3cmci.c
 ===
 --- /dev/null
 +++ linux-2.6/drivers/mmc/host/s3cmci.c

 +#include linux/mmc/mmc.h

This is always a warning sign. It should never be needed in a host driver.


 +
 +static inline int get_data_buffer(struct s3cmci_host *host,
 +   u32 *words, u32 **pointer)
 +{
 + struct scatterlist *sg;
 +
 + if (host-pio_active == XFER_NONE)
 + return -EINVAL;
 +
 + if ((!host-mrq) || (!host-mrq-data))
 + return -EINVAL;
 +
 + if (host-pio_sgptr = host-mrq-data-sg_len) {
 + dbg(host, dbg_debug, no more buffers (%i/%i)\n,
 +   host-pio_sgptr, host-mrq-data-sg_len);
 + return -EBUSY;
 + }
 + sg = host-mrq-data-sg[host-pio_sgptr];
 +
 + *words = sg-length  2;
 + *pointer = page_address(sg_page(sg)) + sg-offset;
 +

The length might not be a multiple of four. And it might also be completely 
unaligned. Make sure you can either handle such requests, or fail them with 
-EINVAL.

Rgds
-- 
 -- Pierre Ossman

  Linux kernel, MMC maintainerhttp://www.kernel.org
  PulseAudio, core developer  http://pulseaudio.org
  rdesktop, core developer  http://www.rdesktop.org
commit 4e47c91b7ca45940af384d3c9919a0eb160a2fb9
Author: Pierre Ossman [EMAIL PROTECTED]
Date:   Fri Jun 1 08:19:15 2007 +0200

s3mci: remove extra debug info

Remove excessive and unmaintained debug strings. This kind of debug
info should also be in the MMC layer, not drivers.

Signed-off-by: Pierre Ossman [EMAIL PROTECTED]

diff --git a/drivers/mmc/Makefile b/drivers/mmc/Makefile
index 7c2eb45..42fa90f 100644
--- a/drivers/mmc/Makefile
+++ b/drivers/mmc/Makefile
@@ -30,6 +30,5 @@ mmc_core-y := mmc.o mmc_sysfs.o
 mmc_core-$(CONFIG_BLOCK) += mmc_queue.o
 
 ifeq ($(CONFIG_MMC_DEBUG),y)
-obj-$(CONFIG_MMC)		+= mmc_debug.o
 EXTRA_CFLAGS += -DDEBUG
 endif
diff --git a/drivers/mmc/mmc_debug.c b/drivers/mmc/mmc_debug.c
deleted file mode 100644
index f13e223..000
--- a/drivers/mmc/mmc_debug.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- *  linux/drivers/mmc/mmc_debug.c
- *
- *  Copyright (C) 2003 maintech GmbH, Thomas Kleffel [EMAIL PROTECTED]
- *
- * This file contains debug helper functions for the MMC/SD stack
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- */
-
-#include linux/mmc/mmc.h
-#include mmc_debug.h
-
-char *mmc_cmd2str(int cmd)
-{
-	switch(cmd) {
-		case  0: return GO_IDLE_STATE;
-		case  1: return ALL_SEND_OCR;
-		case  2: return ALL_SEND_CID;
-		case  3: return ALL_SEND_RELATIVE_ADD;
-		case  6: return ACMD: SD_SET_BUSWIDTH;
-		case  7: return SEL_DESEL_CARD;
-		case  9: return SEND_CSD;
-		case 10: return SEND_CID;
-		case 11: return READ_UNTIL_STOP;
-		case 12: return STOP_TRANSMISSION;
-		case 13: return SEND_STATUS;
-		case 15: return GO_INACTIVE_STATE;
-		case 16: return SET_BLOCKLEN;
-		case 17: return READ_SINGLE_BLOCK;
-		case 18: return READ_MULTIPLE_BLOCK;
-		case 24: return WRITE_SINGLE_BLOCK;
-		case 25: return WRITE_MULTIPLE_BLOCK;
-		case 41: return ACMD: SD_APP_OP_COND;
-		case 55: return APP_CMD;
-		default: return UNKNOWN;
-	}
-}
-EXPORT_SYMBOL(mmc_cmd2str);
-
-char *mmc_err2str(int err)
-{
-	switch(err) {
-		case MMC_ERR_NONE:	return OK;
-		case MMC_ERR_TIMEOUT:	return TIMEOUT;
-		case MMC_ERR_BADCRC: 	return BADCRC;
-		case MMC_ERR_FIFO: 	return FIFO;
-		case MMC_ERR_FAILED: 	return FAILED;
-		case MMC_ERR_INVALID: 	return INVALID;
-		case MMC_ERR_BUSY:	return BUSY;
-		case MMC_ERR_DMA:	return DMA;
-		case MMC_ERR_CANCELED:	return CANCELED;
-		default: return UNKNOWN;
-	}
-}
-EXPORT_SYMBOL(mmc_err2str);
diff --git a/drivers/mmc/mmc_debug.h b/drivers/mmc/mmc_debug.h
deleted 

Re: [PATCH] Samsung S3C24xx SD/MMC driver

2007-12-19 Thread Harald Welte
Hi Pierre,

thanks for your comments.

On Wed, Dec 19, 2007 at 05:54:33PM +0100, Pierre Ossman wrote:
 Well, my biggest beef with this driver is the excessive debug code. I
 did a cleanup in an older version of the driver, but it shouldn't be
 to difficult to do the same for this one. I've included my patch for
 reference.

ok, I'll re-work the patch according to your sample and re-submit.

The debugging was needed during development, and might still be needed
to debug some weird issues.

btw: OpenMoko is currently working on an ar6k wifi driver on top of the 
new mainline kernel SDIO support using the s3c_mci host controller
driver as basis.  So within not-too-distant-time we should also be able
to have SDIO working and tested on s3c_mci.

  Index: linux-2.6/drivers/mmc/host/s3cmci.c
  ===
  --- /dev/null
  +++ linux-2.6/drivers/mmc/host/s3cmci.c
 
  +#include linux/mmc/mmc.h
 
 This is always a warning sign. It should never be needed in a host driver.

ok, will see how to remove it.

  +   *words = sg-length  2;
  +   *pointer = page_address(sg_page(sg)) + sg-offset;
  +
 
 The length might not be a multiple of four. And it might also be
 completely unaligned. Make sure you can either handle such requests,
 or fail them with -EINVAL.

ok, will update before submitting the next version.
-- 
- Harald Welte [EMAIL PROTECTED]  http://openmoko.org/

Software for the world's first truly open Free Software mobile phone
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/