Skip to contentSkip to conversation

Update Samsung SDHCI

PATCH In review Ben Dooks 3 participants 16 messages Dec 2, 2008 – Dec 21, 2008

Subsystems (3)
lore
Share & tools
lore

Ben Dooks

author maintainer
#0 lore raw

cover Update Samsung SDHCI

This is an updated set of SDHCI patches to add support for the Samsung S3C64XX and S3C2443 SoC range.

The DMA check is still in there, it hasn't been triggered since getting the timeout clock wrong.

Signature · 3 lines
Ben ([email protected], http://www.fluff.org/)

  'a smiley only costs 4 bytes'
author maintainer
#1 lore raw

PATCH 1/8 SDHCI: Add timeout hooks

Some controllers do not provide clock information in their capabilities (in the Samsung case, it is because there are multiple clock sources available to the controller). Add hooks to allow the system to supply clock information.

drivers/mmc/host/sdhci.c +13 -5
Index: linux.git/drivers/mmc/host/sdhci.c
===================================================================
@@ -1606,18 +1606,26 @@ int sdhci_add_host(struct sdhci_host *ho
 
 	host->max_clk =
 		(caps & SDHCI_CLOCK_BASE_MASK) >> SDHCI_CLOCK_BASE_SHIFT;
+	host->max_clk *= 1000000;
 	if (host->max_clk == 0) {
-		printk(KERN_ERR "%s: Hardware doesn't specify base clock "
-			"frequency.\n", mmc_hostname(mmc));
+		if (host->ops->get_max_clock)
+			host->max_clk = host->ops->get_max_clock(host);
+		else
+			printk(KERN_ERR
+			       "%s: Hardware doesn't specify base clock "
+			       "frequency.\n", mmc_hostname(mmc));
 		return -ENODEV;
 	}
-	host->max_clk *= 1000000;
 
 	host->timeout_clk =
 		(caps & SDHCI_TIMEOUT_CLK_MASK) >> SDHCI_TIMEOUT_CLK_SHIFT;
 	if (host->timeout_clk == 0) {
-		printk(KERN_ERR "%s: Hardware doesn't specify timeout clock "
-			"frequency.\n", mmc_hostname(mmc));
+		if (host->ops->get_timeout_clock)
+			host->timeout_clk = host->ops->get_timeout_clock(host);
+		else
+			printk(KERN_ERR
+			       "%s: Hardware doesn't specify timeout clock "
+			       "frequency.\n", mmc_hostname(mmc));
 		return -ENODEV;
 	}
 	if (caps & SDHCI_TIMEOUT_CLK_UNIT)
drivers/mmc/host/sdhci.h +2 -0
Index: linux.git/drivers/mmc/host/sdhci.h
===================================================================
@@ -267,6 +267,8 @@ struct sdhci_host {
 
 struct sdhci_ops {
 	int		(*enable_dma)(struct sdhci_host *host);
+	unsigned int	(*get_max_clock)(struct sdhci_host *host);
+	unsigned int	(*get_timeout_clock)(struct sdhci_host *host);
 };
 
 
Signature · 3 lines
Ben ([email protected], http://www.fluff.org/)

  'a smiley only costs 4 bytes'
#2 lore raw

Re: [patch 1/8] SDHCI: Add timeout hooks

Quoted 48 lines · Ben Dooks

Some controllers do not provide clock information in their capabilities (in the Samsung case, it is because there are multiple clock sources available to the controller). Add hooks to allow the system to supply clock information.

Index: linux.git/drivers/mmc/host/sdhci.c
===================================================================

drivers/mmc/host/sdhci.c +13 -5
@@ -1606,18 +1606,26 @@ int sdhci_add_host(struct sdhci_host *ho
 
 	host->max_clk =
 		(caps & SDHCI_CLOCK_BASE_MASK) >> SDHCI_CLOCK_BASE_SHIFT;
+	host->max_clk *= 1000000;
 	if (host->max_clk == 0) {
-		printk(KERN_ERR "%s: Hardware doesn't specify base clock "
-			"frequency.\n", mmc_hostname(mmc));
+		if (host->ops->get_max_clock)
+			host->max_clk = host->ops->get_max_clock(host);
+		else
+			printk(KERN_ERR
+			       "%s: Hardware doesn't specify base clock "
+			       "frequency.\n", mmc_hostname(mmc));
 		return -ENODEV;
 	}
-	host->max_clk *= 1000000;
 
 	host->timeout_clk =
 		(caps & SDHCI_TIMEOUT_CLK_MASK) >> SDHCI_TIMEOUT_CLK_SHIFT;
 	if (host->timeout_clk == 0) {
-		printk(KERN_ERR "%s: Hardware doesn't specify timeout clock "
-			"frequency.\n", mmc_hostname(mmc));
+		if (host->ops->get_timeout_clock)
+			host->timeout_clk = host->ops->get_timeout_clock(host);
+		else
+			printk(KERN_ERR
+			       "%s: Hardware doesn't specify timeout clock "
+			       "frequency.\n", mmc_hostname(mmc));
 		return -ENODEV;
 	}
 	if (caps & SDHCI_TIMEOUT_CLK_UNIT)

Index: linux.git/drivers/mmc/host/sdhci.h
===================================================================

drivers/mmc/host/sdhci.h struct sdhci_host { · line 273

Quoted 7 lines
drivers/mmc/host/sdhci.h +2 -0
@@ -267,6 +267,8 @@ struct sdhci_host {
 
 struct sdhci_ops {
 	int		(*enable_dma)(struct sdhci_host *host);
+	unsigned int	(*get_max_clock)(struct sdhci_host *host);
+	unsigned int	(*get_timeout_clock)(struct sdhci_host *host);
 };
 
	Can we cache the multiple dereferences. Here host->ops can be
	saved to a local, instead of multiple dereference several time.
#3 lore raw

Re: [patch 1/8] SDHCI: Add timeout hooks

Quoted 4 lines · On Tue, 2 Dec 2008 22:16:50 +0530 [email protected] wrote:
	Can we cache the multiple dereferences. Here host->ops can be
	saved to a local, instead of multiple dereference several time.

The ops are used fairly rarely and so far not in any hot-paths, so there would not be much gain in doing that.

Rgds

Signature · 6 lines
     -- Pierre Ossman

  WARNING: This correspondence is being monitored by the
  Swedish government. Make sure your server uses encryption
  for SMTP traffic and consider using PGP for end-to-end
  encryption.
author maintainer
#4 lore raw

PATCH 2/8 SDHCI: Print ADMA status and pointer on debug

In reply to Ben Dooks

If using ADMA, then we should print the ADMA error and current pointer in sdhci_dumpregs() when any debug is requested.

drivers/mmc/host/sdhci.c +5 -0
@@ -73,6 +73,11 @@ static void sdhci_dumpregs(struct sdhci_
 		readl(host->ioaddr + SDHCI_CAPABILITIES),
 		readl(host->ioaddr + SDHCI_MAX_CURRENT));
 
+	if (host->flags & SDHCI_USE_ADMA)
+		printk(KERN_DEBUG DRIVER_NAME ": ADMA Err: 0x%08x | ADMA Ptr: 0x%08x\n",
+		       readl(host->ioaddr + SDHCI_ADMA_ERROR),
+		       readl(host->ioaddr + SDHCI_ADMA_ADDRESS));
+
 	printk(KERN_DEBUG DRIVER_NAME ": ===========================================\n");
 }
 
Signature · 3 lines
Ben ([email protected], http://www.fluff.org/)

  'a smiley only costs 4 bytes'
author maintainer
#5 lore raw

PATCH 3/8 SDHCI: Add set_ios hook

In reply to Ben Dooks

Add a set_ios hook which is called when the SDHCI driver is called to change parameters such as clock or card width.

drivers/mmc/host/sdhci.c +9 -4
Index: linux.git/drivers/mmc/host/sdhci.c
===================================================================
@@ -1038,6 +1038,9 @@ static void sdhci_set_ios(struct mmc_hos
 		sdhci_init(host);
 	}
 
+	if (host->ops->set_ios)
+		host->ops->set_ios(host, ios);
+
 	sdhci_set_clock(host, ios->clock);
 
 	if (ios->power_mode == MMC_POWER_OFF)
@@ -1615,11 +1618,12 @@ int sdhci_add_host(struct sdhci_host *ho
 	if (host->max_clk == 0) {
 		if (host->ops->get_max_clock)
 			host->max_clk = host->ops->get_max_clock(host);
-		else
+		else {
 			printk(KERN_ERR
 			       "%s: Hardware doesn't specify base clock "
 			       "frequency.\n", mmc_hostname(mmc));
-		return -ENODEV;
+			return -ENODEV;
+		}
 	}
 
 	host->timeout_clk =
@@ -1627,11 +1631,12 @@ int sdhci_add_host(struct sdhci_host *ho
 	if (host->timeout_clk == 0) {
 		if (host->ops->get_timeout_clock)
 			host->timeout_clk = host->ops->get_timeout_clock(host);
-		else
+		else {
 			printk(KERN_ERR
 			       "%s: Hardware doesn't specify timeout clock "
 			       "frequency.\n", mmc_hostname(mmc));
-		return -ENODEV;
+			return -ENODEV;
+		}
 	}
 	if (caps & SDHCI_TIMEOUT_CLK_UNIT)
 		host->timeout_clk *= 1000;
drivers/mmc/host/sdhci.h +3 -0
Index: linux.git/drivers/mmc/host/sdhci.h
===================================================================
@@ -269,6 +269,9 @@ struct sdhci_ops {
 	int		(*enable_dma)(struct sdhci_host *host);
 	unsigned int	(*get_max_clock)(struct sdhci_host *host);
 	unsigned int	(*get_timeout_clock)(struct sdhci_host *host);
+
+	void		(*set_ios)(struct sdhci_host *host,
+				   struct mmc_ios *ios);
 };
 
 
Signature · 3 lines
Ben ([email protected], http://www.fluff.org/)

  'a smiley only costs 4 bytes'
#6 lore raw

Re: [patch 3/8] SDHCI: Add set_ios hook

Quoted 6 lines · On Tue, 02 Dec 2008 15:40:21 +0000 Ben Dooks <[email protected]> wrote:

Add a set_ios hook which is called when the SDHCI driver is called to change parameters such as clock or card width.

NAK. As I explained earlier, this is a too broad hook and you haven't given a proper reason for examining the card structure (which is all that the set_ios callback does).

Signature · 6 lines
     -- Pierre Ossman

  WARNING: This correspondence is being monitored by the
  Swedish government. Make sure your server uses encryption
  for SMTP traffic and consider using PGP for end-to-end
  encryption.
author maintainer
#7 lore raw

PATCH 4/8 SDHCI: Add quirk for controller with no end-of-busy IRQ

In reply to Ben Dooks

The Samsung SDHCI controller block seems to fail to generate an INT_DATA_END after the transfer has completed and the bus busy state finished.

Changes in e809517f6fa5803a5a1cd56026f0e2190fc13d5c to use the new busy method are the cause of the behaviour change.

drivers/mmc/host/sdhci.c +4 -1
Index: linux.git/drivers/mmc/host/sdhci.c
===================================================================
@@ -1294,8 +1294,11 @@ static void sdhci_cmd_irq(struct sdhci_h
 		if (host->cmd->data)
 			DBG("Cannot wait for busy signal when also "
 				"doing a data transfer");
-		else
+		else if (!(host->quirks & SDHCI_QUIRK_NO_BUSY_IRQ))
 			return;
+
+		/* The controller does not support the end-of-busy IRQ,
+		 * fall through and take the SDHCI_INT_RESPONSE */
 	}
 
 	if (intmask & SDHCI_INT_RESPONSE)
drivers/mmc/host/sdhci.h +2 -0
Index: linux.git/drivers/mmc/host/sdhci.h
===================================================================
@@ -210,6 +210,8 @@ struct sdhci_host {
 #define SDHCI_QUIRK_BROKEN_SMALL_PIO			(1<<13)
 /* Controller supports high speed but doesn't have the caps bit set */
 #define SDHCI_QUIRK_FORCE_HIGHSPEED			(1<<14)
+/* Controller does not provide transfer-complete interrupt when not busy */
+#define SDHCI_QUIRK_NO_BUSY_IRQ			(1<<15)
 
 	int			irq;		/* Device IRQ */
 	void __iomem *		ioaddr;		/* Mapped address */
Signature · 3 lines
Ben ([email protected], http://www.fluff.org/)

  'a smiley only costs 4 bytes'
author maintainer
#8 lore raw

PATCH 5/8 SDHCI: Samsung SDHCI (HSMMC) driver

In reply to Ben Dooks

Add support for the 'HSMMC' block(s) in the Samsung SoC line. These are compatible with the SDHCI driver so add the necessary setup and driver binding for the platform devices.

drivers/mmc/host/Kconfig +12 -0
Index: linux.git/drivers/mmc/host/Kconfig
===================================================================
@@ -48,6 +48,18 @@ config MMC_SDHCI_PCI
 
 	  If unsure, say N.
 
+config MMC_SDHCI_S3C
+	tristate "SDHCI support on Samsung S3C SoC"
+	depends on MMC_SDHCI && (PLAT_S3C24XX || PLAT_S3C64XX)
+	help
+	  This selects the Secure Digital Host Controller Interface (SDHCI)
+	  often referrered to as the HSMMC block in some of the Samsung S3C
+	  range of SoC.
+
+	  If you have a controller with this interface, say Y or M here.
+
+	  If unsure, say N.
+
 config MMC_RICOH_MMC
 	tristate "Ricoh MMC Controller Disabler  (EXPERIMENTAL)"
 	depends on MMC_SDHCI_PCI
drivers/mmc/host/Makefile +1 -0
Index: linux.git/drivers/mmc/host/Makefile
===================================================================
@@ -11,6 +11,7 @@ obj-$(CONFIG_MMC_PXA)		+= pxamci.o
 obj-$(CONFIG_MMC_IMX)		+= imxmmc.o
 obj-$(CONFIG_MMC_SDHCI)		+= sdhci.o
 obj-$(CONFIG_MMC_SDHCI_PCI)	+= sdhci-pci.o
+obj-$(CONFIG_MMC_SDHCI_S3C)	+= sdhci-s3c.o
 obj-$(CONFIG_MMC_RICOH_MMC)	+= ricoh_mmc.o
 obj-$(CONFIG_MMC_WBSD)		+= wbsd.o
 obj-$(CONFIG_MMC_AU1X)		+= au1xmmc.o
drivers/mmc/host/sdhci-s3c.c new file +256 -0

256 lines not on this page · raw message

Signature · 3 lines
Ben ([email protected], http://www.fluff.org/)

  'a smiley only costs 4 bytes'
#9 lore raw

Re: [patch 5/8] SDHCI: Samsung SDHCI (HSMMC) driver

Quoted 13 lines · On Tue, 02 Dec 2008 15:40:23 +0000 Ben Dooks <[email protected]> wrote:

Index: linux.git/drivers/mmc/host/Kconfig
===================================================================

drivers/mmc/host/Kconfig +5 -0
@@ -48,6 +48,18 @@ config MMC_SDHCI_PCI
 
 	  If unsure, say N.
 
+config MMC_SDHCI_S3C
+	tristate "SDHCI support on Samsung S3C SoC"
+	depends on MMC_SDHCI && (PLAT_S3C24XX || PLAT_S3C64XX)
+	help
+	  This selects the Secure Digital Host Controller Interface (SDHCI)

drivers/mmc/host/Kconfig config MMC_SDHCI_PCI · line 65

Quoted 10 lines
drivers/mmc/host/Kconfig +7 -0
+	  often referrered to as the HSMMC block in some of the Samsung S3C
+	  range of SoC.
+
+	  If you have a controller with this interface, say Y or M here.
+
+	  If unsure, say N.
+
 config MMC_RICOH_MMC
 	tristate "Ricoh MMC Controller Disabler  (EXPERIMENTAL)"
 	depends on MMC_SDHCI_PCI

You should probably put it under MMC_RICOH_MMC as that will become a subentry under MMC_SDHCI_PCI.

drivers/mmc/host/Kconfig

Quoted 9 lines
drivers/mmc/host/Kconfig +9 -0
+static void sdhci_s3c_set_ios(struct sdhci_host *host,
+			      struct mmc_ios *ios)
+{
+	struct sdhci_s3c *ourhost = to_s3c(host);
+	struct s3c_sdhci_platdata *pdata = ourhost->pdata;
+
+	if (pdata->cfg_card)
+		pdata->cfg_card(ourhost->pdev, host->ioaddr, ios);
+}

I'm still waiting for a proper reason to allow this hook. Since you've added this, I assume you have at least one implementation of cfg_card. Care to include that so that I can see what it is you're trying to do?

Signature · 6 lines
     -- Pierre Ossman

  WARNING: This correspondence is being monitored by the
  Swedish government. Make sure your server uses encryption
  for SMTP traffic and consider using PGP for end-to-end
  encryption.
author maintainer
#10 lore raw

PATCH 6/8 SDHCI: Check DMA for overruns at end of transfer

In reply to Ben Dooks

At the end of a transfer, check that the DMA engine in the SDHCI controller actually did what it was meant to and didn't overrun the end of the buffer.

This seems to be triggered by a timeout during an CMD25 (multiple block write) to a card. The mmc_block module then issues a command to find out how much data was moved and this seems to end up triggering this DMA check. The result is the card's queue generates an OOPS as the stack has been trampled on due to the extra data transfered.

drivers/mmc/host/sdhci.c +19 -0
Index: linux.git/drivers/mmc/host/sdhci.c
===================================================================
@@ -736,6 +736,23 @@ static void sdhci_set_transfer_mode(stru
 	writew(mode, host->ioaddr + SDHCI_TRANSFER_MODE);
 }
 
+static void shdci_check_dma_overrun(struct sdhci_host *host, struct mmc_data *data)
+{
+	u32 dma_pos = readl(host->ioaddr + SDHCI_DMA_ADDRESS);
+	u32 dma_start = sg_dma_address(data->sg);
+	u32 dma_end = dma_start + data->sg->length;
+
+	/* Test whether we ended up moving more data than
+	 * was originally requested. */
+
+	if (dma_pos <= dma_end)
+		return;
+
+	printk(KERN_ERR "%s: dma overrun, dma %08x, req %08x..%08x\n",
+	       mmc_hostname(host->mmc), dma_pos,
+	       dma_start, dma_end);
+}
+
 static void sdhci_finish_data(struct sdhci_host *host)
 {
 	struct mmc_data *data;
@@ -749,6 +766,8 @@ static void sdhci_finish_data(struct sdh
 		if (host->flags & SDHCI_USE_ADMA)
 			sdhci_adma_table_post(host, data);
 		else {
+			shdci_check_dma_overrun(host, data);
+
 			dma_unmap_sg(mmc_dev(host->mmc), data->sg,
 				data->sg_len, (data->flags & MMC_DATA_READ) ?
 					DMA_FROM_DEVICE : DMA_TO_DEVICE);
Signature · 3 lines
Ben ([email protected], http://www.fluff.org/)

  'a smiley only costs 4 bytes'
#11 lore raw

Re: [patch 6/8] SDHCI: Check DMA for overruns at end of transfer

Quoted 10 lines · On Tue, 02 Dec 2008 15:40:24 +0000 Ben Dooks <[email protected]> wrote:

At the end of a transfer, check that the DMA engine in the SDHCI controller actually did what it was meant to and didn't overrun the end of the buffer.

This seems to be triggered by a timeout during an CMD25 (multiple block write) to a card. The mmc_block module then issues a command to find out how much data was moved and this seems to end up triggering this DMA check. The result is the card's queue generates an OOPS as the stack has been trampled on due to the extra data transfered.

Hmm... this is even stranger. CMD25 (write) will only read from main memory and should not be able to mess up the stack. And it shouldn't be the stack getting messed up anyway as that is not near the buffer memory.

I still consider this a critical bug since it seems to be provoked by hitting the timeout condition.

I'll queue up your patches (once the other things are fixed), but I will add a patch disabling DMA on this controller until this is properly understood and handled.

RGds

Signature · 6 lines
     -- Pierre Ossman

  WARNING: This correspondence is being monitored by the
  Swedish government. Make sure your server uses encryption
  for SMTP traffic and consider using PGP for end-to-end
  encryption.
author maintainer
#12 lore raw

PATCH 7/8 SDHCI: Add change_clock callback for glue drivers

In reply to Ben Dooks

Add a change_clock callback to allow drivers to update device specific clock selections and control registers when there is a change in clock.

Move the main part of sdhci_set_clock() to a new routine which can be called by the glue drivers to do the sdhci standard clock management.

Update the sdhci-s3c driver to use this to select the appropriate clock source when clocks change.

drivers/mmc/host/sdhci-pci.c +1 -0
Index: linux.git/drivers/mmc/host/sdhci-pci.c
===================================================================
@@ -391,6 +391,7 @@ static int sdhci_pci_enable_dma(struct s
 
 static struct sdhci_ops sdhci_pci_ops = {
 	.enable_dma	= sdhci_pci_enable_dma,
+	.change_clock	= sdhci_change_clock,
 };
 
 /*****************************************************************************\
drivers/mmc/host/sdhci-s3c.c +103 -1

143 lines not on this page · raw message

drivers/mmc/host/sdhci.c +10 -3
Index: linux.git/drivers/mmc/host/sdhci.c
===================================================================
@@ -907,13 +907,18 @@ static void sdhci_finish_command(struct 
 
 static void sdhci_set_clock(struct sdhci_host *host, unsigned int clock)
 {
+	if (clock == host->clock)
+		return;
+
+	host->ops->change_clock(host, clock);
+}
+
+void sdhci_change_clock(struct sdhci_host *host, unsigned int clock)
+{
 	int div;
 	u16 clk;
 	unsigned long timeout;
 
-	if (clock == host->clock)
-		return;
-
 	writew(0, host->ioaddr + SDHCI_CLOCK_CONTROL);
 
 	if (clock == 0)
@@ -950,6 +955,8 @@ out:
 	host->clock = clock;
 }
 
+EXPORT_SYMBOL_GPL(sdhci_set_clock);
+
 static void sdhci_set_power(struct sdhci_host *host, unsigned short power)
 {
 	u8 pwr;
drivers/mmc/host/sdhci.h +5 -0
Index: linux.git/drivers/mmc/host/sdhci.h
===================================================================
@@ -272,6 +272,9 @@ struct sdhci_ops {
 	unsigned int	(*get_max_clock)(struct sdhci_host *host);
 	unsigned int	(*get_timeout_clock)(struct sdhci_host *host);
 
+	void		(*change_clock)(struct sdhci_host *host,
+					unsigned int clock);
+
 	void		(*set_ios)(struct sdhci_host *host,
 				   struct mmc_ios *ios);
 };
@@ -281,6 +284,8 @@ extern struct sdhci_host *sdhci_alloc_ho
 	size_t priv_size);
 extern void sdhci_free_host(struct sdhci_host *host);
 
+extern void sdhci_change_clock(struct sdhci_host *host, unsigned int clock);
+
 static inline void *sdhci_priv(struct sdhci_host *host)
 {
 	return (void *)host->private;
Signature · 3 lines
Ben ([email protected], http://www.fluff.org/)

  'a smiley only costs 4 bytes'
#13 lore raw

Re: [patch 7/8] SDHCI: Add change_clock callback for glue drivers

Quoted 4 lines · On Tue, 02 Dec 2008 15:40:25 +0000 Ben Dooks <[email protected]> wrote:

Add a change_clock callback to allow drivers to update device specific clock selections and control registers when there is a change in clock.

Quoted 9 lines

Move the main part of sdhci_set_clock() to a new routine which can be called by the glue drivers to do the sdhci standard clock management.

Update the sdhci-s3c driver to use this to select the appropriate clock source when clocks change.

I'm still waiting for a proper description of things here.

Looking at the code, it looks like you have multiple clock sources and selecting the best one dynamically. That's probably a nice feature, but it should be possible to solve whilst still keeping calls going only from sdhci to sdhci-s3c.

E.g. we could add a caps field (to keep quirks just for bugs) which states "has multiple clock sources". Before the core changes the clock, it calls ops->select_clock(target_hz), which changes clock source and returns the new base frequency.

Rgds

Signature · 6 lines
     -- Pierre Ossman

  WARNING: This correspondence is being monitored by the
  Swedish government. Make sure your server uses encryption
  for SMTP traffic and consider using PGP for end-to-end
  encryption.
author maintainer
#14 lore raw

PATCH 8/8 SDHCI: Add maintainers entry for Samsung SoC

In reply to Ben Dooks

Add a maintainers entry for myself as the mainatiner of the Samsung SoC SDHCI glue layer

MAINTAINERS +7 -0
Index: linux.git/MAINTAINERS
===================================================================
@@ -3720,6 +3720,13 @@ L:	[email protected]
 L:	[email protected] (subscribers-only)
 S:	Maintained
 
+SDHCI SAMSUNG SoC DRIVER
+P:	Ben Dooks
+M:	[email protected]
+L:	[email protected]
+L:	[email protected] (subscribers-only)
+S:	Maintained
+
 SECURITY CONTACT
 P:	Security Officers
 M:	[email protected]
Signature · 3 lines
Ben ([email protected], http://www.fluff.org/)

  'a smiley only costs 4 bytes'
#15 lore raw

Re: [patch 8/8] SDHCI: Add maintainers entry for Samsung SoC

Quoted 5 lines · On Tue, 02 Dec 2008 15:40:26 +0000 Ben Dooks <[email protected]> wrote:

Add a maintainers entry for myself as the mainatiner of the Samsung SoC SDHCI glue layer

It's probably better if you give it a name so that is next to the main SDHCI entry ("SECURE DIGITAL HOST CONTROLLER INTERFACE (SDHCI) DRIVER").

Signature · 6 lines
     -- Pierre Ossman

  WARNING: This correspondence is being monitored by the
  Swedish government. Make sure your server uses encryption
  for SMTP traffic and consider using PGP for end-to-end
  encryption.