[PATCH v5 00/38] mmc: dw_mmc: Enable eMMC on E850-96 board

Minkyu Kang promsoft at gmail.com
Tue Aug 20 03:44:49 CEST 2024


Hi,


2024년 8월 14일 (수) 10:15, Sam Protsenko <semen.protsenko at linaro.org>님이 작성:

> Hi Minkyu,
>
> What do you think about this series? It's been pending for a while
> now, so may I ask you to take care of it?
>
> Thanks!
>
> On Wed, Aug 7, 2024 at 10:14 PM Sam Protsenko
> <semen.protsenko at linaro.org> wrote:
> >
> > Bring 64-bit support to dw_mmc core and Exynos dw_mmc drivers, and
> > enable it on E850-96 board. Additionally do some related cleanups and
> > device tree updates.
> >
> > 64-bit version of DesignWare MMC can be often found on modern ARM64
> > chips. It's different from its older 32-bit version (which is already
> > implemented in U-Boot): some new registers were added, existing
> > register addresses are changed, DMA descriptor table is different, etc.
> > Next Exynos chips are known to have 64-bit DW MMC block:
> >
> >   - Exynos3475
> >   - Exynos5433
> >   - Exynos7420
> >   - Exynos7570
> >   - Exynos7580
> >   - Exynos7870
> >   - Exynos7872
> >   - Exynos7880
> >   - Exynos7885
> >   - Exynos7890
> >   - Exynos850 (Exynos3830)
> >
> > Exynos DW MMC driver was updated too: ARM64 Exynos chips implement their
> > clock drivers using CCF framework, pinmux configuration is done at
> > startup in DM capable pinctrl drivers, device tree properties were
> > changed w.r.t. their upstream (Linux kernel) counterparts. CLKSEL
> > register address is also different on 64-bit Exynos platforms.
> >
> > The patch series was tested on E850-96 board by running mainline Linux
> > kernel with Debian rootfs from eMMC ("boot" partition) with these
> > commands:
> >
> > 8<-------------------------------------------------------------------->8
> > env set fdtaddr 0x8a000000
> > env set bootaddr 0x94000000
> > env set boot_kerneladdr 0x94000800
> > part start mmc 0 boot boot_start
> > part size mmc 0 boot boot_size
> > mmc read $bootaddr $boot_start $boot_size
> > abootimg addr $bootaddr
> > abootimg get dtb --index=0 dtb_start dtb_size
> > cp.b $dtb_start $fdtaddr $dtb_size
> > fdt addr $fdtaddr 0x100000
> > cp.b $boot_kerneladdr $loadaddr 2aaaa00
> > env set bootargs console=ttySAC0,115200n8 printk.devkmsg=on \
> >                  root=/dev/mmcblk0p12 rootwait rw
> > booti $loadaddr - $fdtaddr
> > 8<-------------------------------------------------------------------->8
> >
> > For E850-96 eMMC to function properly in DDR mode, the pending patch [1]
> > has to be applied. Otherwise it won't be possible for exynos_dw_mmc
> > driver to change CIU clock rate from 200 MHz up to 400 MHz, and MMC will
> > fall back to SDR mode, which makes eMMC throughput twice as slower. With
> > patch [1] applied, 'mmc info' reports this:
> >
> >     Bus Speed: 52000000
> >     Mode: MMC DDR52 (52MHz)
> >
> > and 'clk dump' shows CIU clock rate to be ~400 MHz (after first mmc
> > operation, e.g. 'part start' or 'mmc read'):
> >
> >     399750000    gout_mmc_embd_sdclkin
> >
> > Which makes sense, because dw_mmc requests to set CCLKIN = 52 MHz (with
> > DDR/8-bit mode), and exynos_dw_mmc tries to set CIU clock rate to:
> >
> >     SDCLKIN = 2 * ciu_div * CCLKIN = 2 * 4 * 52 MHz = 416 MHz,
> >
> > and the closest possible value the clock driver can set is 399.75 MHz,
> > which works just fine.
> >
> > For Exynos4 and Exynos5 (ARM32) boards, this patch series was only build
> > tested (manually and with buildman). The build is clean (no errors or
> > warnings), but I don't have any Exynos4/Exynos5 boards at my disposal,
> > so I can't actually verify MMC operation there.
> >
> > Changes in v5:
> >   - Added missing bus-width property to sdhci2 node (SD card) in
> >     exynos4412-odroid.dts (patch 14/38)
> >
> > Changes in v4:
> >   - Rebased all patches on top of the most recent master; patches that
> >     were affected by recent changes: 08/38, 13/38, 37/38
> >
> > Changes in v3:
> >   - Rebased all patches on top of the most recent master, which in turn
> >     dropped next patches:
> >     - [PATCH v2 1/40] mmc: dw_mmc: Remove common.h
> >     - [PATCH v2 33/40] mmc: exynos_dw_mmc: Remove common.h
> >
> > Changes in v2:
> >   - Rebased on top of the most recent U-Boot/master
> >   - Added pending R-b tags from the mailing list
> >   - Addressed the comment from Quentin about CONFIG_IS_ENABLED() not
> >     playing nice in SPL case:
> >     1. Dropped [PATCH 35/42]
> >        ("mmc: exynos_dw_mmc: Use CONFIG_IS_ENABLED() to check config
> >         options")
> >     2. Dropped [PATCH 14/42]
> >        ("mmc: dw_mmc: Use CONFIG_IS_ENABLED() to check config options")
> >     3. Got rid of all other CONFIG_IS_ENABLED() changes (used #ifdef for
> >        now)
> >   - Addressed the comment from Quentin about incorrect logic for divider
> >     update in [PATCH 06/40]
> >   - Guarded exynos_dwmmc_of_to_plat() with #ifded CONFIG_DM_MMC in
> >     [PATCH 22/40]
> >   - Added list of Exynos chips implementing 64-bit IDMAC descriptor (in
> >     [PATCH 00/40])
> >
> > [1] https://lists.denx.de/pipermail/u-boot/2024-March/547719.html
> >
> > Sam Protsenko (38):
> >   mmc: dw_mmc: Remove unused version field from struct dwmci_host
> >   mmc: dw_mmc: Move struct idmac to dw_mmc.c
> >   mmc: dw_mmc: Extract waiting for data busy into a separate routine
> >   mmc: dw_mmc: Extract FIFO init into a separate routine
> >   mmc: dw_mmc: Extract divider update to a separate function
> >   mmc: dw_mmc: Extract FIFO data transfer into a separate routine
> >   mmc: dw_mmc: Extract DMA transfer handling code into a separate
> >     routine
> >   mmc: dw_mmc: Extract setting the DMA descriptor into a separate
> >     routine
> >   mmc: dw_mmc: Improve 32-bit IDMAC descriptor namings
> >   mmc: dw_mmc: Add support for 64-bit IDMAC
> >   mmc: dw_mmc: Replace fifoth_val property with fifo-depth
> >   mmc: dw_mmc: Fix kernel-doc comments in dwmmc.h
> >   mmc: dw_mmc: Improve coding style
> >   arm: dts: exynos: Add upstream DW MMC properties to all Exynos dts
> >   dt-bindings: exynos: Update bindings doc for DW MMC controller
> >   arm: exynos: Add header guard for dwmmc.h
> >   mmc: exynos_dw_mmc: Fix obtaining the base address of controller
> >   mmc: exynos_dw_mmc: Fix getting private data in
> >     exynos_dwmci_board_init()
> >   mmc: exynos_dw_mmc: Don't call pinmux functions on ARM64 chips
> >   mmc: exynos_dw_mmc: Obtain and use CIU clock via CCF API
> >   mmc: exynos_dw_mmc: Use .of_to_plat for device tree parsing
> >   mmc: exynos_dw_mmc: Convert to use livetree API
> >   mmc: exynos_dw_mmc: Read upstream SDR timing properties
> >   mmc: exynos_dw_mmc: Abstract CLKSEL register
> >   mmc: exynos_dw_mmc: Refactor fixed CIU clock divider
> >   mmc: exynos_dw_mmc: Read common bus-width property
> >   mmc: exynos_dw_mmc: Read common clock-frequency property
> >   mmc: exynos_dw_mmc: Move quirks from struct dwmci_host to chip data
> >   mmc: exynos_dw_mmc: Read and use DDR timing when available
> >   mmc: exynos_dw_mmc: Set requested freq in get_mmc_clk() callback
> >   mmc: exynos_dw_mmc: Add support for ARM64 Exynos chips
> >   mmc: exynos_dw_mmc: Pull all init code into probe function
> >   mmc: exynos_dw_mmc: Don't call dwmci_setup_cfg() after add_dwmci()
> >   mmc: exynos_dw_mmc: Use dev->name as driver's displayed name
> >   mmc: exynos_dw_mmc: Improve coding style
> >   arm: dts: exynos: Remove outdated DW MMC properties in all Exynos dts
> >   configs: e850-96: Enable MMC
> >   doc: samsung: Mention enabled eMMC in E850-96 board doc
> >
> >  arch/arm/dts/exynos4210-origen.dts         |   3 +-
> >  arch/arm/dts/exynos4210-trats.dts          |   6 +-
> >  arch/arm/dts/exynos4210-universal_c210.dts |   6 +-
> >  arch/arm/dts/exynos4412-odroid.dts         |  15 +-
> >  arch/arm/dts/exynos4412-trats2.dts         |  20 +-
> >  arch/arm/dts/exynos5250-arndale.dts        |  10 +-
> >  arch/arm/dts/exynos5250-smdk5250.dts       |  13 +-
> >  arch/arm/dts/exynos5250-snow.dts           |  13 +-
> >  arch/arm/dts/exynos5250-spring.dts         |   7 +-
> >  arch/arm/dts/exynos5420-smdk5420.dts       |  13 +-
> >  arch/arm/dts/exynos5422-odroidxu3.dts      |   4 +-
> >  arch/arm/dts/exynos54xx.dtsi               |  13 +-
> >  arch/arm/mach-exynos/include/mach/dwmmc.h  |  40 +-
> >  configs/e850-96_defconfig                  |  10 +-
> >  doc/board/samsung/e850-96.rst              |   5 +-
> >  doc/device-tree-bindings/exynos/dwmmc.txt  |  46 +-
> >  drivers/mmc/ca_dw_mmc.c                    |   2 +-
> >  drivers/mmc/dw_mmc.c                       | 547 +++++++++++++--------
> >  drivers/mmc/exynos_dw_mmc.c                | 357 +++++++++-----
> >  drivers/mmc/ftsdc010_mci.h                 |   1 -
> >  drivers/mmc/hi6220_dw_mmc.c                |   7 +-
> >  drivers/mmc/nexell_dw_mmc.c                |   5 +-
> >  drivers/mmc/rockchip_dw_mmc.c              |   5 +-
> >  drivers/mmc/s5p_sdhci.c                    |   2 +-
> >  drivers/mmc/snps_dw_mmc.c                  |   6 +-
> >  drivers/mmc/socfpga_dw_mmc.c               |   4 +-
> >  include/dwmmc.h                            | 242 +++++----
> >  27 files changed, 869 insertions(+), 533 deletions(-)
> >
> > --
> > 2.39.2
> >


applied to u-boot-samsung.

Thanks.
Minkyu Kang.


More information about the U-Boot mailing list