public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH 1/2] mmc: Use proper IS_ENABLED macro to check block support
@ 2019-01-07 21:13 Ezequiel Garcia
  2019-01-07 21:13 ` [U-Boot] [PATCH 2/2] mmc: jz_mmc: Compile-out write support if disabled Ezequiel Garcia
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Ezequiel Garcia @ 2019-01-07 21:13 UTC (permalink / raw)
  To: u-boot

Use CONFIG_IS_ENABLED(BLK) instead of CONFIG_BLK,
in order to fix the following build issues when
CONFIG_SPL_MMC_WRITE is selected:

drivers/mmc/mmc_write.c:69:7: error: conflicting types for 'mmc_berase'
 ulong mmc_berase(struct udevice *dev, lbaint_t start, lbaint_t blkcnt)
       ^~~~~~~~~~
In file included from drivers/mmc/mmc_write.c:15:0:
drivers/mmc/mmc_private.h:39:7: note: previous declaration of 'mmc_berase' was here
 ulong mmc_berase(struct blk_desc *block_dev, lbaint_t start, lbaint_t blkcnt);
       ^~~~~~~~~~
drivers/mmc/mmc_write.c:187:7: error: conflicting types for 'mmc_bwrite'
 ulong mmc_bwrite(struct udevice *dev, lbaint_t start, lbaint_t blkcnt,
       ^~~~~~~~~~
In file included from drivers/mmc/mmc_write.c:15:0:
drivers/mmc/mmc_private.h:37:7: note: previous declaration of 'mmc_bwrite' was here
 ulong mmc_bwrite(struct blk_desc *block_dev, lbaint_t start, lbaint_t blkcnt,
       ^~~~~~~~~~

Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
---
 drivers/mmc/mmc_write.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/mmc/mmc_write.c b/drivers/mmc/mmc_write.c
index b8acc33c76d0..c8c83c9188ec 100644
--- a/drivers/mmc/mmc_write.c
+++ b/drivers/mmc/mmc_write.c
@@ -65,13 +65,13 @@ err_out:
 	return err;
 }
 
-#ifdef CONFIG_BLK
+#if CONFIG_IS_ENABLED(BLK)
 ulong mmc_berase(struct udevice *dev, lbaint_t start, lbaint_t blkcnt)
 #else
 ulong mmc_berase(struct blk_desc *block_dev, lbaint_t start, lbaint_t blkcnt)
 #endif
 {
-#ifdef CONFIG_BLK
+#if CONFIG_IS_ENABLED(BLK)
 	struct blk_desc *block_dev = dev_get_uclass_platdata(dev);
 #endif
 	int dev_num = block_dev->devnum;
@@ -183,7 +183,7 @@ static ulong mmc_write_blocks(struct mmc *mmc, lbaint_t start,
 	return blkcnt;
 }
 
-#ifdef CONFIG_BLK
+#if CONFIG_IS_ENABLED(BLK)
 ulong mmc_bwrite(struct udevice *dev, lbaint_t start, lbaint_t blkcnt,
 		 const void *src)
 #else
@@ -191,7 +191,7 @@ ulong mmc_bwrite(struct blk_desc *block_dev, lbaint_t start, lbaint_t blkcnt,
 		 const void *src)
 #endif
 {
-#ifdef CONFIG_BLK
+#if CONFIG_IS_ENABLED(BLK)
 	struct blk_desc *block_dev = dev_get_uclass_platdata(dev);
 #endif
 	int dev_num = block_dev->devnum;
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [U-Boot] [PATCH 2/2] mmc: jz_mmc: Compile-out write support if disabled
  2019-01-07 21:13 [U-Boot] [PATCH 1/2] mmc: Use proper IS_ENABLED macro to check block support Ezequiel Garcia
@ 2019-01-07 21:13 ` Ezequiel Garcia
  2019-01-08 16:16   ` Daniel Schwierzeck
  2019-01-12 16:52   ` Daniel Schwierzeck
  2019-01-08 16:14 ` [U-Boot] [PATCH 1/2] mmc: Use proper IS_ENABLED macro to check block support Daniel Schwierzeck
  2019-01-12 16:51 ` Daniel Schwierzeck
  2 siblings, 2 replies; 6+ messages in thread
From: Ezequiel Garcia @ 2019-01-07 21:13 UTC (permalink / raw)
  To: u-boot

Do not build write support, unless it's enabled.

In the SPL case, this change will typically remove
precious bytes (as write support is most often
not needed in SPL).

This is important on this platform, where the maximum
SPL size is 14 KiB.

With gcc v7.3, this change saves 144 bytes producing:

size spl/u-boot-spl
   text	   data	    bss	    dec	    hex	filename
   9240	    752	    712	  10704	   29d0	spl/u-boot-spl

To make the code easier to compile-out and more
readable, a pair of read_data/write_data helpers are created.

Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
---
 drivers/mmc/jz_mmc.c | 105 +++++++++++++++++++++++++------------------
 1 file changed, 61 insertions(+), 44 deletions(-)

diff --git a/drivers/mmc/jz_mmc.c b/drivers/mmc/jz_mmc.c
index 3132c3e191ac..cb2a7c3eb5e1 100644
--- a/drivers/mmc/jz_mmc.c
+++ b/drivers/mmc/jz_mmc.c
@@ -134,6 +134,60 @@ static int jz_mmc_clock_rate(void)
 	return 24000000;
 }
 
+#if CONFIG_IS_ENABLED(MMC_WRITE)
+static inline void jz_mmc_write_data(struct jz_mmc_priv *priv, struct mmc_data *data)
+{
+	int sz = DIV_ROUND_UP(data->blocks * data->blocksize, 4);
+	const void *buf = data->src;
+
+	while (sz--) {
+		u32 val = get_unaligned_le32(buf);
+
+		wait_for_bit_le32(priv->regs + MSC_IREG,
+				  MSC_IREG_TXFIFO_WR_REQ,
+				  true, 10000, false);
+		writel(val, priv->regs + MSC_TXFIFO);
+		buf += 4;
+	}
+}
+#else
+static void jz_mmc_write_data(struct jz_mmc_priv *priv, struct mmc_data *data)
+{}
+#endif
+
+static inline int jz_mmc_read_data(struct jz_mmc_priv *priv, struct mmc_data *data)
+{
+	int sz = data->blocks * data->blocksize;
+	void *buf = data->dest;
+	u32 stat, val;
+
+	do {
+		stat = readl(priv->regs + MSC_STAT);
+
+		if (stat & MSC_STAT_TIME_OUT_READ)
+			return -ETIMEDOUT;
+		if (stat & MSC_STAT_CRC_READ_ERROR)
+			return -EINVAL;
+		if (stat & MSC_STAT_DATA_FIFO_EMPTY) {
+			udelay(10);
+			continue;
+		}
+		do {
+			val = readl(priv->regs + MSC_RXFIFO);
+			if (sz == 1)
+				*(u8 *)buf = (u8)val;
+			else if (sz == 2)
+				put_unaligned_le16(val, buf);
+			else if (sz >= 4)
+				put_unaligned_le32(val, buf);
+			buf += 4;
+			sz -= 4;
+			stat = readl(priv->regs + MSC_STAT);
+		} while (!(stat & MSC_STAT_DATA_FIFO_EMPTY));
+	} while (!(stat & MSC_STAT_DATA_TRAN_DONE));
+	return 0;
+}
+
 static int jz_mmc_send_cmd(struct mmc *mmc, struct jz_mmc_priv *priv,
 			   struct mmc_cmd *cmd, struct mmc_data *data)
 {
@@ -249,51 +303,14 @@ static int jz_mmc_send_cmd(struct mmc *mmc, struct jz_mmc_priv *priv,
 			cmd->response[0] |= readw(priv->regs + MSC_RES) & 0xff;
 		}
 	}
-
-	if (data && (data->flags & MMC_DATA_WRITE)) {
-		/* write the data */
-		int sz = DIV_ROUND_UP(data->blocks * data->blocksize, 4);
-		const void *buf = data->src;
-
-		while (sz--) {
-			u32 val = get_unaligned_le32(buf);
-
-			wait_for_bit_le32(priv->regs + MSC_IREG,
-					  MSC_IREG_TXFIFO_WR_REQ,
-					  true, 10000, false);
-			writel(val, priv->regs + MSC_TXFIFO);
-			buf += 4;
+	if (data) {
+		if (data->flags & MMC_DATA_WRITE)
+			jz_mmc_write_data(priv, data);
+		else if (data->flags & MMC_DATA_READ) {
+			ret = jz_mmc_read_data(priv, data);
+			if (ret)
+				return ret;
 		}
-	} else if (data && (data->flags & MMC_DATA_READ)) {
-		/* read the data */
-		int sz = data->blocks * data->blocksize;
-		void *buf = data->dest;
-
-		do {
-			stat = readl(priv->regs + MSC_STAT);
-
-			if (stat & MSC_STAT_TIME_OUT_READ)
-				return -ETIMEDOUT;
-			if (stat & MSC_STAT_CRC_READ_ERROR)
-				return -EINVAL;
-			if (stat & MSC_STAT_DATA_FIFO_EMPTY) {
-				udelay(10);
-				continue;
-			}
-			do {
-				u32 val = readl(priv->regs + MSC_RXFIFO);
-
-				if (sz == 1)
-					*(u8 *)buf = (u8)val;
-				else if (sz == 2)
-					put_unaligned_le16(val, buf);
-				else if (sz >= 4)
-					put_unaligned_le32(val, buf);
-				buf += 4;
-				sz -= 4;
-				stat = readl(priv->regs + MSC_STAT);
-			} while (!(stat & MSC_STAT_DATA_FIFO_EMPTY));
-		} while (!(stat & MSC_STAT_DATA_TRAN_DONE));
 	}
 
 	return 0;
-- 
2.20.1

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [U-Boot] [PATCH 1/2] mmc: Use proper IS_ENABLED macro to check block support
  2019-01-07 21:13 [U-Boot] [PATCH 1/2] mmc: Use proper IS_ENABLED macro to check block support Ezequiel Garcia
  2019-01-07 21:13 ` [U-Boot] [PATCH 2/2] mmc: jz_mmc: Compile-out write support if disabled Ezequiel Garcia
@ 2019-01-08 16:14 ` Daniel Schwierzeck
  2019-01-12 16:51 ` Daniel Schwierzeck
  2 siblings, 0 replies; 6+ messages in thread
From: Daniel Schwierzeck @ 2019-01-08 16:14 UTC (permalink / raw)
  To: u-boot



Am 07.01.19 um 22:13 schrieb Ezequiel Garcia:
> Use CONFIG_IS_ENABLED(BLK) instead of CONFIG_BLK,
> in order to fix the following build issues when
> CONFIG_SPL_MMC_WRITE is selected:
> 
> drivers/mmc/mmc_write.c:69:7: error: conflicting types for 'mmc_berase'
>  ulong mmc_berase(struct udevice *dev, lbaint_t start, lbaint_t blkcnt)
>        ^~~~~~~~~~
> In file included from drivers/mmc/mmc_write.c:15:0:
> drivers/mmc/mmc_private.h:39:7: note: previous declaration of 'mmc_berase' was here
>  ulong mmc_berase(struct blk_desc *block_dev, lbaint_t start, lbaint_t blkcnt);
>        ^~~~~~~~~~
> drivers/mmc/mmc_write.c:187:7: error: conflicting types for 'mmc_bwrite'
>  ulong mmc_bwrite(struct udevice *dev, lbaint_t start, lbaint_t blkcnt,
>        ^~~~~~~~~~
> In file included from drivers/mmc/mmc_write.c:15:0:
> drivers/mmc/mmc_private.h:37:7: note: previous declaration of 'mmc_bwrite' was here
>  ulong mmc_bwrite(struct blk_desc *block_dev, lbaint_t start, lbaint_t blkcnt,
>        ^~~~~~~~~~
> 
> Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
> ---
>  drivers/mmc/mmc_write.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 

Reviewed-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>

-- 
- Daniel

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [U-Boot] [PATCH 2/2] mmc: jz_mmc: Compile-out write support if disabled
  2019-01-07 21:13 ` [U-Boot] [PATCH 2/2] mmc: jz_mmc: Compile-out write support if disabled Ezequiel Garcia
@ 2019-01-08 16:16   ` Daniel Schwierzeck
  2019-01-12 16:52   ` Daniel Schwierzeck
  1 sibling, 0 replies; 6+ messages in thread
From: Daniel Schwierzeck @ 2019-01-08 16:16 UTC (permalink / raw)
  To: u-boot



Am 07.01.19 um 22:13 schrieb Ezequiel Garcia:
> Do not build write support, unless it's enabled.
> 
> In the SPL case, this change will typically remove
> precious bytes (as write support is most often
> not needed in SPL).
> 
> This is important on this platform, where the maximum
> SPL size is 14 KiB.
> 
> With gcc v7.3, this change saves 144 bytes producing:
> 
> size spl/u-boot-spl
>    text	   data	    bss	    dec	    hex	filename
>    9240	    752	    712	  10704	   29d0	spl/u-boot-spl
> 
> To make the code easier to compile-out and more
> readable, a pair of read_data/write_data helpers are created.
> 
> Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
> ---
>  drivers/mmc/jz_mmc.c | 105 +++++++++++++++++++++++++------------------
>  1 file changed, 61 insertions(+), 44 deletions(-)
> 

Reviewed-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>

-- 
- Daniel

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [U-Boot] [PATCH 1/2] mmc: Use proper IS_ENABLED macro to check block support
  2019-01-07 21:13 [U-Boot] [PATCH 1/2] mmc: Use proper IS_ENABLED macro to check block support Ezequiel Garcia
  2019-01-07 21:13 ` [U-Boot] [PATCH 2/2] mmc: jz_mmc: Compile-out write support if disabled Ezequiel Garcia
  2019-01-08 16:14 ` [U-Boot] [PATCH 1/2] mmc: Use proper IS_ENABLED macro to check block support Daniel Schwierzeck
@ 2019-01-12 16:51 ` Daniel Schwierzeck
  2 siblings, 0 replies; 6+ messages in thread
From: Daniel Schwierzeck @ 2019-01-12 16:51 UTC (permalink / raw)
  To: u-boot



Am 07.01.19 um 22:13 schrieb Ezequiel Garcia:
> Use CONFIG_IS_ENABLED(BLK) instead of CONFIG_BLK,
> in order to fix the following build issues when
> CONFIG_SPL_MMC_WRITE is selected:
> 
> drivers/mmc/mmc_write.c:69:7: error: conflicting types for 'mmc_berase'
>  ulong mmc_berase(struct udevice *dev, lbaint_t start, lbaint_t blkcnt)
>        ^~~~~~~~~~
> In file included from drivers/mmc/mmc_write.c:15:0:
> drivers/mmc/mmc_private.h:39:7: note: previous declaration of 'mmc_berase' was here
>  ulong mmc_berase(struct blk_desc *block_dev, lbaint_t start, lbaint_t blkcnt);
>        ^~~~~~~~~~
> drivers/mmc/mmc_write.c:187:7: error: conflicting types for 'mmc_bwrite'
>  ulong mmc_bwrite(struct udevice *dev, lbaint_t start, lbaint_t blkcnt,
>        ^~~~~~~~~~
> In file included from drivers/mmc/mmc_write.c:15:0:
> drivers/mmc/mmc_private.h:37:7: note: previous declaration of 'mmc_bwrite' was here
>  ulong mmc_bwrite(struct blk_desc *block_dev, lbaint_t start, lbaint_t blkcnt,
>        ^~~~~~~~~~
> 
> Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
> ---
>  drivers/mmc/mmc_write.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 

applied to u-boot-mips/next, thanks.

-- 
- Daniel

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [U-Boot] [PATCH 2/2] mmc: jz_mmc: Compile-out write support if disabled
  2019-01-07 21:13 ` [U-Boot] [PATCH 2/2] mmc: jz_mmc: Compile-out write support if disabled Ezequiel Garcia
  2019-01-08 16:16   ` Daniel Schwierzeck
@ 2019-01-12 16:52   ` Daniel Schwierzeck
  1 sibling, 0 replies; 6+ messages in thread
From: Daniel Schwierzeck @ 2019-01-12 16:52 UTC (permalink / raw)
  To: u-boot



Am 07.01.19 um 22:13 schrieb Ezequiel Garcia:
> Do not build write support, unless it's enabled.
> 
> In the SPL case, this change will typically remove
> precious bytes (as write support is most often
> not needed in SPL).
> 
> This is important on this platform, where the maximum
> SPL size is 14 KiB.
> 
> With gcc v7.3, this change saves 144 bytes producing:
> 
> size spl/u-boot-spl
>    text	   data	    bss	    dec	    hex	filename
>    9240	    752	    712	  10704	   29d0	spl/u-boot-spl
> 
> To make the code easier to compile-out and more
> readable, a pair of read_data/write_data helpers are created.
> 
> Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
> ---
>  drivers/mmc/jz_mmc.c | 105 +++++++++++++++++++++++++------------------
>  1 file changed, 61 insertions(+), 44 deletions(-)
> 

applied to u-boot-mips/next, thanks.

-- 
- Daniel

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2019-01-12 16:52 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-01-07 21:13 [U-Boot] [PATCH 1/2] mmc: Use proper IS_ENABLED macro to check block support Ezequiel Garcia
2019-01-07 21:13 ` [U-Boot] [PATCH 2/2] mmc: jz_mmc: Compile-out write support if disabled Ezequiel Garcia
2019-01-08 16:16   ` Daniel Schwierzeck
2019-01-12 16:52   ` Daniel Schwierzeck
2019-01-08 16:14 ` [U-Boot] [PATCH 1/2] mmc: Use proper IS_ENABLED macro to check block support Daniel Schwierzeck
2019-01-12 16:51 ` Daniel Schwierzeck

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox