Merge tag 'mmc-v6.9' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 13 Mar 2024 17:59:28 +0000 (10:59 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 13 Mar 2024 17:59:28 +0000 (10:59 -0700)
Pull MMC updates from Ulf Hansson:
 "MMC core:
   - Drop the use of BLK_BOUNCE_HIGH
   - Fix partition switch for GP3
   - Remove usage of the deprecated ida_simple API

  MMC host:
   - cqhci: Update bouncing email-addresses in MAINTAINERS
   - davinci_mmc: Use sg_miter for PIO
   - dw_mmc-hi3798cv200: Convert the DT bindings to YAML
   - dw_mmc-hi3798mv200: Add driver for the new dw_mmc variant
   - fsl-imx-esdhc: A couple of corrections/updates to the DT bindings
   - meson-mx-sdhc: Drop use of the ->card_hw_reset() callback
   - moxart-mmc: Use sg_miter for PIO
   - moxart-mmc: Fix accounting for DMA transfers
   - mvsdio: Use sg_miter for PIO
   - mxcmmc: Use sg_miter for PIO
   - omap: Use sg_miter for PIO
   - renesas,sdhi: Add support for R-Car V4M variant
   - sdhci-esdhc-mcf: Use sg_miter for swapping
   - sdhci-of-dwcmshc: Add support for Sophgo CV1800B and SG2002 variants
   - sh_mmcif: Use sg_miter for PIO
   - tmio: Avoid concurrent runs of mmc_request_done()"

* tag 'mmc-v6.9' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc: (44 commits)
  mmc: core: make mmc_host_class constant
  mmc: core: Fix switch on gp3 partition
  mmc: tmio: comment the ERR_PTR usage in this driver
  mmc: mmc_spi: Don't mention DMA direction
  mmc: dw_mmc: Remove unused of_gpio.h
  mmc: dw_mmc: add support for hi3798mv200
  dt-bindings: mmc: hisilicon,hi3798cv200-dw-mshc: add Hi3798MV200 binding
  dt-bindings: mmc: dw-mshc-hi3798cv200: convert to YAML
  mmc: dw_mmc-hi3798cv200: remove MODULE_ALIAS()
  mmc: core: Use a struct device* as in-param to mmc_of_parse_clk_phase()
  mmc: wmt-sdmmc: remove an incorrect release_mem_region() call in the .remove function
  mmc: tmio: avoid concurrent runs of mmc_request_done()
  dt-bindings: mmc: fsl-imx-mmc: Document the required clocks
  mmc: sh_mmcif: Advance sg_miter before reading blocks
  mmc: sh_mmcif: sg_miter must not be atomic
  mmc: sdhci-esdhc-mcf: Flag the sg_miter as atomic
  dt-bindings: mmc: fsl-imx-esdhc: add default and 100mhz state
  mmc: core: constify the struct device_type usage
  mmc: sdhci-of-dwcmshc: Add support for Sophgo CV1800B and SG2002
  dt-bindings: mmc: sdhci-of-dwcmhsc: Add Sophgo CV1800B and SG2002 support
  ...

1  2 
MAINTAINERS
drivers/mmc/core/queue.c

diff --cc MAINTAINERS
Simple merge
index 2ae60d208cdf1ee2243aa99a340bd5be06d8bbc3,316415588a77ce60b84fb26bb8ab63f11283d35e..241cdc2b2a2a3befddcf2e5a7ac3922879985cdf
@@@ -343,53 -341,38 +343,50 @@@ static const struct blk_mq_ops mmc_mq_o
        .timeout        = mmc_mq_timed_out,
  };
  
 -static void mmc_setup_queue(struct mmc_queue *mq, struct mmc_card *card)
 +static struct gendisk *mmc_alloc_disk(struct mmc_queue *mq,
 +              struct mmc_card *card)
  {
        struct mmc_host *host = card->host;
 -      unsigned block_size = 512;
 +      struct queue_limits lim = { };
 +      struct gendisk *disk;
  
 -      blk_queue_flag_set(QUEUE_FLAG_NONROT, mq->queue);
 -      blk_queue_flag_clear(QUEUE_FLAG_ADD_RANDOM, mq->queue);
        if (mmc_can_erase(card))
 -              mmc_queue_setup_discard(mq->queue, card);
 -
 -      blk_queue_max_hw_sectors(mq->queue,
 -              min(host->max_blk_count, host->max_req_size / 512));
 -      if (host->can_dma_map_merge)
 -              WARN(!blk_queue_can_use_dma_map_merging(mq->queue,
 -                                                      mmc_dev(host)),
 -                   "merging was advertised but not possible");
 -      blk_queue_max_segments(mq->queue, mmc_get_max_segments(host));
 -
 -      if (mmc_card_mmc(card) && card->ext_csd.data_sector_size) {
 -              block_size = card->ext_csd.data_sector_size;
 -              WARN_ON(block_size != 512 && block_size != 4096);
 -      }
 +              mmc_queue_setup_discard(card, &lim);
 +
-       if (!mmc_dev(host)->dma_mask || !*mmc_dev(host)->dma_mask)
-               lim.bounce = BLK_BOUNCE_HIGH;
 +      lim.max_hw_sectors = min(host->max_blk_count, host->max_req_size / 512);
 +
 +      if (mmc_card_mmc(card) && card->ext_csd.data_sector_size)
 +              lim.logical_block_size = card->ext_csd.data_sector_size;
 +      else
 +              lim.logical_block_size = 512;
 +
 +      WARN_ON_ONCE(lim.logical_block_size != 512 &&
 +                   lim.logical_block_size != 4096);
  
 -      blk_queue_logical_block_size(mq->queue, block_size);
        /*
 -       * After blk_queue_can_use_dma_map_merging() was called with succeed,
 -       * since it calls blk_queue_virt_boundary(), the mmc should not call
 -       * both blk_queue_max_segment_size().
 +       * Setting a virt_boundary implicity sets a max_segment_size, so try
 +       * to set the hardware one here.
         */
 -      if (!host->can_dma_map_merge)
 -              blk_queue_max_segment_size(mq->queue,
 -                      round_down(host->max_seg_size, block_size));
 +      if (host->can_dma_map_merge) {
 +              lim.virt_boundary_mask = dma_get_merge_boundary(mmc_dev(host));
 +              lim.max_segments = MMC_DMA_MAP_MERGE_SEGMENTS;
 +      } else {
 +              lim.max_segment_size =
 +                      round_down(host->max_seg_size, lim.logical_block_size);
 +              lim.max_segments = host->max_segs;
 +      }
 +
 +      disk = blk_mq_alloc_disk(&mq->tag_set, &lim, mq);
 +      if (IS_ERR(disk))
 +              return disk;
 +      mq->queue = disk->queue;
 +
 +      if (mmc_host_is_spi(host) && host->use_spi_crc)
 +              blk_queue_flag_set(QUEUE_FLAG_STABLE_WRITES, mq->queue);
 +      blk_queue_rq_timeout(mq->queue, 60 * HZ);
 +
 +      blk_queue_flag_set(QUEUE_FLAG_NONROT, mq->queue);
 +      blk_queue_flag_clear(QUEUE_FLAG_ADD_RANDOM, mq->queue);
  
        dma_set_max_seg_size(mmc_dev(host), queue_max_segment_size(mq->queue));