Commit 01ec3bb6 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull MMC host fixes from Ulf Hansson:

 - davinci_mmc: Prevent transmitted data size from exceeding sgm's
   length

 - sdhci: Fix max_seg_size for 64KiB PAGE_SIZE

* tag 'mmc-v6.10-rc4-2' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc:
  mmc: davinci_mmc: Prevent transmitted data size from exceeding sgm's length
  mmc: sdhci: Fix max_seg_size for 64KiB PAGE_SIZE
parents e091caf9 16198eef
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -224,6 +224,9 @@ static void davinci_fifo_data_trans(struct mmc_davinci_host *host,
	}
	p = sgm->addr;

	if (n > sgm->length)
		n = sgm->length;

	/* NOTE:  we never transfer more than rw_threshold bytes
	 * to/from the fifo here; there's no I/O overlap.
	 * This also assumes that access width( i.e. ACCWD) is 4 bytes
+15 −0
Original line number Diff line number Diff line
@@ -4727,6 +4727,21 @@ int sdhci_setup_host(struct sdhci_host *host)
		if (host->quirks & SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC) {
			host->max_adma = 65532; /* 32-bit alignment */
			mmc->max_seg_size = 65535;
			/*
			 * sdhci_adma_table_pre() expects to define 1 DMA
			 * descriptor per segment, so the maximum segment size
			 * is set accordingly. SDHCI allows up to 64KiB per DMA
			 * descriptor (16-bit field), but some controllers do
			 * not support "zero means 65536" reducing the maximum
			 * for them to 65535. That is a problem if PAGE_SIZE is
			 * 64KiB because the block layer does not support
			 * max_seg_size < PAGE_SIZE, however
			 * sdhci_adma_table_pre() has a workaround to handle
			 * that case, and split the descriptor. Refer also
			 * comment in sdhci_adma_table_pre().
			 */
			if (mmc->max_seg_size < PAGE_SIZE)
				mmc->max_seg_size = PAGE_SIZE;
		} else {
			mmc->max_seg_size = 65536;
		}