Re: [PATCH v2] mmc: dw_mmc: Add desc_num field for clarity
From: Ulf Hansson
Date: Fri May 29 2026 - 11:29:21 EST
On Fri, May 29, 2026 at 3:18 AM Shawn Lin <shawn.lin@xxxxxxxxx> wrote:
>
> From: Shawn Lin <shawn.lin@xxxxxxxxxxxxxx>
>
> 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@xxxxxxxxxxxxxx>
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
>