[PATCH v2] mmc: dw_mmc: Add desc_num field for clarity

Shawn Lin posted 1 patch 1 week, 3 days ago
drivers/mmc/host/dw_mmc.c | 16 ++++++++--------
drivers/mmc/host/dw_mmc.h |  4 ++--
2 files changed, 10 insertions(+), 10 deletions(-)
[PATCH v2] mmc: dw_mmc: Add desc_num field for clarity
Posted by Shawn Lin 1 week, 3 days ago
From: Shawn Lin <shawn.lin@rock-chips.com>

The ring_size field in struct dw_mci is misleadingly named.
Despite its name, it does not represent the size of the descriptor
ring buffer in bytes, but rather the number of descriptors allocated
within the fixed-size ring buffer.

The actual ring buffer size is fixed at PAGE_SIZE (or DESC_RING_BUF_SZ,
which equals PAGE_SIZE). Within this buffer, we allocate either
struct idmac_desc or struct idmac_desc_64addr descriptors, and
ring_size stores the count of these descriptors.

This naming has caused confusion, as it's also used to set
mmc->max_segs (the maximum number of scatter-gather segments),
which logically corresponds to the number of descriptors, not a
size in bytes.

No functional change is introduced by this naming-only patch.

Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>
---

Changes v2:
- remove ring_size

 drivers/mmc/host/dw_mmc.c | 16 ++++++++--------
 drivers/mmc/host/dw_mmc.h |  4 ++--
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
index 3b4157f34d11..d734d010444d 100644
--- a/drivers/mmc/host/dw_mmc.c
+++ b/drivers/mmc/host/dw_mmc.c
@@ -490,12 +490,12 @@ static int dw_mci_idmac_init(struct dw_mci *host)
 
 	if (host->dma_64bit_address == 1) {
 		struct idmac_desc_64addr *p;
-		/* Number of descriptors in the ring buffer */
-		host->ring_size =
+
+		host->desc_num =
 			DESC_RING_BUF_SZ / sizeof(struct idmac_desc_64addr);
 
 		/* Forward link the descriptor list */
-		for (i = 0, p = host->sg_cpu; i < host->ring_size - 1;
+		for (i = 0, p = host->sg_cpu; i < host->desc_num - 1;
 								i++, p++) {
 			p->des6 = (host->sg_dma +
 					(sizeof(struct idmac_desc_64addr) *
@@ -518,13 +518,13 @@ static int dw_mci_idmac_init(struct dw_mci *host)
 
 	} else {
 		struct idmac_desc *p;
-		/* Number of descriptors in the ring buffer */
-		host->ring_size =
+
+		host->desc_num =
 			DESC_RING_BUF_SZ / sizeof(struct idmac_desc);
 
 		/* Forward link the descriptor list */
 		for (i = 0, p = host->sg_cpu;
-		     i < host->ring_size - 1;
+		     i < host->desc_num - 1;
 		     i++, p++) {
 			p->des3 = cpu_to_le32(host->sg_dma +
 					(sizeof(struct idmac_desc) * (i + 1)));
@@ -2857,10 +2857,10 @@ static int dw_mci_init_host(struct dw_mci *host)
 
 	/* Useful defaults if platform data is unset. */
 	if (host->use_dma == TRANS_MODE_IDMAC) {
-		mmc->max_segs = host->ring_size;
+		mmc->max_segs = host->desc_num;
 		mmc->max_blk_size = 65535;
 		mmc->max_seg_size = 0x1000;
-		mmc->max_req_size = mmc->max_seg_size * host->ring_size;
+		mmc->max_req_size = mmc->max_seg_size * host->desc_num;
 		mmc->max_blk_count = mmc->max_req_size / 512;
 	} else if (host->use_dma == TRANS_MODE_EDMAC) {
 		mmc->max_segs = 64;
diff --git a/drivers/mmc/host/dw_mmc.h b/drivers/mmc/host/dw_mmc.h
index 2ce8585e2c1e..9ffcd3946cff 100644
--- a/drivers/mmc/host/dw_mmc.h
+++ b/drivers/mmc/host/dw_mmc.h
@@ -79,7 +79,7 @@ struct dw_mci_dma_slave {
  * @dma_ops: Pointer to DMA callbacks.
  * @cmd_status: Snapshot of SR taken upon completion of the current
  *	command. Only valid when EVENT_CMD_COMPLETE is pending.
- * @ring_size: Buffer size for idma descriptors.
+ * @desc_num: Number of idmac descriptors available.
  * @dms: structure of slave-dma private data.
  * @phy_regs: physical address of controller's register map
  * @data_status: Snapshot of SR taken upon completion of the current
@@ -186,7 +186,7 @@ struct dw_mci {
 	void			*sg_cpu;
 	const struct dw_mci_dma_ops	*dma_ops;
 	/* For idmac */
-	unsigned int		ring_size;
+	unsigned short		desc_num;
 
 	/* For edmac */
 	struct dw_mci_dma_slave *dms;
-- 
2.25.1
Re: [PATCH v2] mmc: dw_mmc: Add desc_num field for clarity
Posted by Ulf Hansson 1 week, 2 days ago
On Fri, May 29, 2026 at 3:18 AM Shawn Lin <shawn.lin@linux.dev> wrote:
>
> From: Shawn Lin <shawn.lin@rock-chips.com>
>
> The ring_size field in struct dw_mci is misleadingly named.
> Despite its name, it does not represent the size of the descriptor
> ring buffer in bytes, but rather the number of descriptors allocated
> within the fixed-size ring buffer.
>
> The actual ring buffer size is fixed at PAGE_SIZE (or DESC_RING_BUF_SZ,
> which equals PAGE_SIZE). Within this buffer, we allocate either
> struct idmac_desc or struct idmac_desc_64addr descriptors, and
> ring_size stores the count of these descriptors.
>
> This naming has caused confusion, as it's also used to set
> mmc->max_segs (the maximum number of scatter-gather segments),
> which logically corresponds to the number of descriptors, not a
> size in bytes.
>
> No functional change is introduced by this naming-only patch.
>
> Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>

Applied for next, thanks!

Kind regards
Uffe


> ---
>
> Changes v2:
> - remove ring_size
>
>  drivers/mmc/host/dw_mmc.c | 16 ++++++++--------
>  drivers/mmc/host/dw_mmc.h |  4 ++--
>  2 files changed, 10 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
> index 3b4157f34d11..d734d010444d 100644
> --- a/drivers/mmc/host/dw_mmc.c
> +++ b/drivers/mmc/host/dw_mmc.c
> @@ -490,12 +490,12 @@ static int dw_mci_idmac_init(struct dw_mci *host)
>
>         if (host->dma_64bit_address == 1) {
>                 struct idmac_desc_64addr *p;
> -               /* Number of descriptors in the ring buffer */
> -               host->ring_size =
> +
> +               host->desc_num =
>                         DESC_RING_BUF_SZ / sizeof(struct idmac_desc_64addr);
>
>                 /* Forward link the descriptor list */
> -               for (i = 0, p = host->sg_cpu; i < host->ring_size - 1;
> +               for (i = 0, p = host->sg_cpu; i < host->desc_num - 1;
>                                                                 i++, p++) {
>                         p->des6 = (host->sg_dma +
>                                         (sizeof(struct idmac_desc_64addr) *
> @@ -518,13 +518,13 @@ static int dw_mci_idmac_init(struct dw_mci *host)
>
>         } else {
>                 struct idmac_desc *p;
> -               /* Number of descriptors in the ring buffer */
> -               host->ring_size =
> +
> +               host->desc_num =
>                         DESC_RING_BUF_SZ / sizeof(struct idmac_desc);
>
>                 /* Forward link the descriptor list */
>                 for (i = 0, p = host->sg_cpu;
> -                    i < host->ring_size - 1;
> +                    i < host->desc_num - 1;
>                      i++, p++) {
>                         p->des3 = cpu_to_le32(host->sg_dma +
>                                         (sizeof(struct idmac_desc) * (i + 1)));
> @@ -2857,10 +2857,10 @@ static int dw_mci_init_host(struct dw_mci *host)
>
>         /* Useful defaults if platform data is unset. */
>         if (host->use_dma == TRANS_MODE_IDMAC) {
> -               mmc->max_segs = host->ring_size;
> +               mmc->max_segs = host->desc_num;
>                 mmc->max_blk_size = 65535;
>                 mmc->max_seg_size = 0x1000;
> -               mmc->max_req_size = mmc->max_seg_size * host->ring_size;
> +               mmc->max_req_size = mmc->max_seg_size * host->desc_num;
>                 mmc->max_blk_count = mmc->max_req_size / 512;
>         } else if (host->use_dma == TRANS_MODE_EDMAC) {
>                 mmc->max_segs = 64;
> diff --git a/drivers/mmc/host/dw_mmc.h b/drivers/mmc/host/dw_mmc.h
> index 2ce8585e2c1e..9ffcd3946cff 100644
> --- a/drivers/mmc/host/dw_mmc.h
> +++ b/drivers/mmc/host/dw_mmc.h
> @@ -79,7 +79,7 @@ struct dw_mci_dma_slave {
>   * @dma_ops: Pointer to DMA callbacks.
>   * @cmd_status: Snapshot of SR taken upon completion of the current
>   *     command. Only valid when EVENT_CMD_COMPLETE is pending.
> - * @ring_size: Buffer size for idma descriptors.
> + * @desc_num: Number of idmac descriptors available.
>   * @dms: structure of slave-dma private data.
>   * @phy_regs: physical address of controller's register map
>   * @data_status: Snapshot of SR taken upon completion of the current
> @@ -186,7 +186,7 @@ struct dw_mci {
>         void                    *sg_cpu;
>         const struct dw_mci_dma_ops     *dma_ops;
>         /* For idmac */
> -       unsigned int            ring_size;
> +       unsigned short          desc_num;
>
>         /* For edmac */
>         struct dw_mci_dma_slave *dms;
> --
> 2.25.1
>