Re: [PATCH] Samsung S3C24xx SD/MMC driver
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
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
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
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/