* [PATCH 0/9] Enable dw-mmc multi-card support
@ 2017-10-06 19:21 Liming Sun
2017-10-06 19:21 ` [PATCH 3/9] Revert "mmc: dw_mmc: use the 'slot' instead of 'cur_slot'" Liming Sun
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Liming Sun @ 2017-10-06 19:21 UTC (permalink / raw)
To: linux-arm-kernel
This series of commits enables the multi-card support for the dw-mmc
controller. It includes two parts as below.
The first part (patches 1-7) reverts the series of recent commits that
removed the multi-card support with comments saying there was no such
use case in the real world. Actually this feature is being used in
Mellanox Bluefield SoC and has been requested by customers.
The second part (patches 8-9) fixes the DesignWare multi-card support
according to the dw-mmc databook (synnopsys: DesignWare Cores Mobile
Storage Host Databook, 2.70a). It has changes to set the card number
into the CMD register to multiplex requests to different cards when
working in SD_MMC_CEATA mode, set the CTYPE / CLKENA / CDTHRCTL
registers properly according to the spec, and parse the per-card
configuration to match the Linux Documentation
(bindings/mmc/synopsys-dw-mshc.txt).
Liming Sun (9):
Revert "Documentation: dw-mshc: deprecate num-slots"
Revert "mmc: dw_mmc: remove the unnecessary slot variable"
Revert "mmc: dw_mmc: use the 'slot' instead of 'cur_slot'"
Revert "mmc: dw_mmc: remove the 'id' arguments about functions
relevant to slot"
Revert "mmc: dw_mmc: change the array of slots"
Revert "mmc: dw_mmc: remove the loop about finding slots"
Revert "mmc: dw_mmc: deprecated the "num-slots" property"
mmc: dw_mmc: Support two SD_MMC_CE-ATA cards
mmc: dw_mmc: Parse slot-specific configuration
.../devicetree/bindings/mmc/synopsys-dw-mshc.txt | 16 +-
drivers/mmc/host/dw_mmc-exynos.c | 4 +-
drivers/mmc/host/dw_mmc.c | 277 ++++++++++++++++-----
drivers/mmc/host/dw_mmc.h | 17 +-
4 files changed, 236 insertions(+), 78 deletions(-)
--
1.8.3.1
^ permalink raw reply [flat|nested] 9+ messages in thread* [PATCH 3/9] Revert "mmc: dw_mmc: use the 'slot' instead of 'cur_slot'" 2017-10-06 19:21 [PATCH 0/9] Enable dw-mmc multi-card support Liming Sun @ 2017-10-06 19:21 ` Liming Sun 2017-10-16 14:35 ` [PATCH 0/9] Enable dw-mmc multi-card support Liming Sun 2017-10-17 1:36 ` Shawn Lin 2 siblings, 0 replies; 9+ messages in thread From: Liming Sun @ 2017-10-06 19:21 UTC (permalink / raw) To: linux-arm-kernel This reverts commit 42f989c002f235557e3a03feac3b2f16b17d53f6. The Mellanox BlueField SoC requires multiple slot dw-mmc support. Signed-off-by: Liming Sun <lsun@mellanox.com> --- drivers/mmc/host/dw_mmc-exynos.c | 4 ++-- drivers/mmc/host/dw_mmc.c | 33 +++++++++++++++++---------------- drivers/mmc/host/dw_mmc.h | 3 +++ 3 files changed, 22 insertions(+), 18 deletions(-) diff --git a/drivers/mmc/host/dw_mmc-exynos.c b/drivers/mmc/host/dw_mmc-exynos.c index 3502679..25691cc 100644 --- a/drivers/mmc/host/dw_mmc-exynos.c +++ b/drivers/mmc/host/dw_mmc-exynos.c @@ -157,8 +157,8 @@ static void dw_mci_exynos_set_clksel_timing(struct dw_mci *host, u32 timing) * HOLD register should be bypassed in case there is no phase shift * applied on CMD/DATA that is sent to the card. */ - if (!SDMMC_CLKSEL_GET_DRV_WD3(clksel) && host->slot) - set_bit(DW_MMC_CARD_NO_USE_HOLD, &host->slot->flags); + if (!SDMMC_CLKSEL_GET_DRV_WD3(clksel) && host->cur_slot) + set_bit(DW_MMC_CARD_NO_USE_HOLD, &host->cur_slot->flags); } #ifdef CONFIG_PM diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c index c9f81db..62c0791 100644 --- a/drivers/mmc/host/dw_mmc.c +++ b/drivers/mmc/host/dw_mmc.c @@ -392,7 +392,7 @@ static u32 dw_mci_prep_stop_abort(struct dw_mci *host, struct mmc_command *cmd) cmdr = stop->opcode | SDMMC_CMD_STOP | SDMMC_CMD_RESP_CRC | SDMMC_CMD_RESP_EXP; - if (!test_bit(DW_MMC_CARD_NO_USE_HOLD, &host->slot->flags)) + if (!test_bit(DW_MMC_CARD_NO_USE_HOLD, &host->cur_slot->flags)) cmdr |= SDMMC_CMD_USE_HOLD_REG; return cmdr; @@ -499,7 +499,7 @@ static void dw_mci_dmac_complete_dma(void *arg) if ((host->use_dma == TRANS_MODE_EDMAC) && data && (data->flags & MMC_DATA_READ)) /* Invalidate cache after read */ - dma_sync_sg_for_cpu(mmc_dev(host->slot->mmc), + dma_sync_sg_for_cpu(mmc_dev(host->cur_slot->mmc), data->sg, data->sg_len, DMA_FROM_DEVICE); @@ -839,7 +839,7 @@ static int dw_mci_edmac_start_dma(struct dw_mci *host, /* Flush cache before write */ if (host->data->flags & MMC_DATA_WRITE) - dma_sync_sg_for_device(mmc_dev(host->slot->mmc), sgl, + dma_sync_sg_for_device(mmc_dev(host->cur_slot->mmc), sgl, sg_elems, DMA_TO_DEVICE); dma_async_issue_pending(host->dms->ch); @@ -1301,6 +1301,7 @@ static void __dw_mci_start_request(struct dw_mci *host, mrq = slot->mrq; + host->cur_slot = slot; host->mrq = mrq; host->pending_events = 0; @@ -1781,7 +1782,7 @@ static bool dw_mci_reset(struct dw_mci *host) ciu_out: /* After a CTRL reset we need to have CIU set clock registers */ - mci_send_cmd(host->slot, SDMMC_CMD_UPD_CLK, 0); + mci_send_cmd(host->cur_slot, SDMMC_CMD_UPD_CLK, 0); return ret; } @@ -1808,11 +1809,11 @@ static void dw_mci_request_end(struct dw_mci *host, struct mmc_request *mrq) __acquires(&host->lock) { struct dw_mci_slot *slot; - struct mmc_host *prev_mmc = host->slot->mmc; + struct mmc_host *prev_mmc = host->cur_slot->mmc; WARN_ON(host->cmd || host->data); - host->slot->mrq = NULL; + host->cur_slot->mrq = NULL; host->mrq = NULL; if (!list_empty(&host->queue)) { slot = list_entry(host->queue.next, @@ -1962,7 +1963,7 @@ static void dw_mci_tasklet_func(unsigned long priv) err = dw_mci_command_complete(host, cmd); if (cmd == mrq->sbc && !err) { prev_state = state = STATE_SENDING_CMD; - __dw_mci_start_request(host, host->slot, + __dw_mci_start_request(host, host->cur_slot, mrq->cmd); goto unlock; } @@ -3308,9 +3309,9 @@ int dw_mci_runtime_suspend(struct device *dev) clk_disable_unprepare(host->ciu_clk); - if (host->slot && - (mmc_can_gpio_cd(host->slot->mmc) || - !mmc_card_is_removable(host->slot->mmc))) + if (host->cur_slot && + (mmc_can_gpio_cd(host->cur_slot->mmc) || + !mmc_card_is_removable(host->cur_slot->mmc))) clk_disable_unprepare(host->biu_clk); return 0; @@ -3323,9 +3324,9 @@ int dw_mci_runtime_resume(struct device *dev) struct dw_mci *host = dev_get_drvdata(dev); struct dw_mci_slot *slot = host->slot; - if (host->slot && - (mmc_can_gpio_cd(host->slot->mmc) || - !mmc_card_is_removable(host->slot->mmc))) { + if (host->cur_slot && + (mmc_can_gpio_cd(host->cur_slot->mmc) || + !mmc_card_is_removable(host->cur_slot->mmc))) { ret = clk_prepare_enable(host->biu_clk); if (ret) return ret; @@ -3373,9 +3374,9 @@ int dw_mci_runtime_resume(struct device *dev) return 0; err: - if (host->slot && - (mmc_can_gpio_cd(host->slot->mmc) || - !mmc_card_is_removable(host->slot->mmc))) + if (host->cur_slot && + (mmc_can_gpio_cd(host->cur_slot->mmc) || + !mmc_card_is_removable(host->cur_slot->mmc))) clk_disable_unprepare(host->biu_clk); return ret; diff --git a/drivers/mmc/host/dw_mmc.h b/drivers/mmc/host/dw_mmc.h index 34474ad..20a956e 100644 --- a/drivers/mmc/host/dw_mmc.h +++ b/drivers/mmc/host/dw_mmc.h @@ -133,6 +133,7 @@ struct dw_mci_dma_slave { * ======= * * @lock is a softirq-safe spinlock protecting @queue as well as + * @cur_slot, @mrq and @state. These must always be updated * at the same time while holding @lock. * * @irq_lock is an irq-safe spinlock protecting the INTMASK register @@ -168,6 +169,7 @@ struct dw_mci { struct scatterlist *sg; struct sg_mapping_iter sg_miter; + struct dw_mci_slot *cur_slot; struct mmc_request *mrq; struct mmc_command *cmd; struct mmc_data *data; @@ -203,6 +205,7 @@ struct dw_mci { u32 bus_hz; u32 current_speed; + u32 num_slots; u32 fifoth_val; u16 verid; struct device *dev; -- 1.8.3.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 0/9] Enable dw-mmc multi-card support 2017-10-06 19:21 [PATCH 0/9] Enable dw-mmc multi-card support Liming Sun 2017-10-06 19:21 ` [PATCH 3/9] Revert "mmc: dw_mmc: use the 'slot' instead of 'cur_slot'" Liming Sun @ 2017-10-16 14:35 ` Liming Sun 2017-10-17 1:36 ` Shawn Lin 2 siblings, 0 replies; 9+ messages in thread From: Liming Sun @ 2017-10-16 14:35 UTC (permalink / raw) To: linux-arm-kernel So far I saw one comment (an ACK) on PATCH 1/9. There seems no comments on other patches yet. Ulf, (or other maintainers), any comments or suggestions how to move forward for this patch series? Thanks, Liming -----Original Message----- From: linux-kernel-owner@vger.kernel.org [mailto:linux-kernel-owner at vger.kernel.org] On Behalf Of Liming Sun Sent: Friday, October 6, 2017 3:21 PM To: Ulf Hansson <ulf.hansson@linaro.org>; Rob Herring <robh+dt@kernel.org>; Mark Rutland <mark.rutland@arm.com>; Jaehoon Chung <jh80.chung@samsung.com>; Kukjin Kim <kgene@kernel.org>; Krzysztof Kozlowski <krzk@kernel.org> Cc: Liming Sun <lsun@mellanox.com>; linux-mmc at vger.kernel.org; devicetree at vger.kernel.org; linux-kernel at vger.kernel.org; linux-arm-kernel at lists.infradead.org; linux-samsung-soc at vger.kernel.org Subject: [PATCH 0/9] Enable dw-mmc multi-card support This series of commits enables the multi-card support for the dw-mmc controller. It includes two parts as below. The first part (patches 1-7) reverts the series of recent commits that removed the multi-card support with comments saying there was no such use case in the real world. Actually this feature is being used in Mellanox Bluefield SoC and has been requested by customers. The second part (patches 8-9) fixes the DesignWare multi-card support according to the dw-mmc databook (synnopsys: DesignWare Cores Mobile Storage Host Databook, 2.70a). It has changes to set the card number into the CMD register to multiplex requests to different cards when working in SD_MMC_CEATA mode, set the CTYPE / CLKENA / CDTHRCTL registers properly according to the spec, and parse the per-card configuration to match the Linux Documentation (bindings/mmc/synopsys-dw-mshc.txt). Liming Sun (9): Revert "Documentation: dw-mshc: deprecate num-slots" Revert "mmc: dw_mmc: remove the unnecessary slot variable" Revert "mmc: dw_mmc: use the 'slot' instead of 'cur_slot'" Revert "mmc: dw_mmc: remove the 'id' arguments about functions relevant to slot" Revert "mmc: dw_mmc: change the array of slots" Revert "mmc: dw_mmc: remove the loop about finding slots" Revert "mmc: dw_mmc: deprecated the "num-slots" property" mmc: dw_mmc: Support two SD_MMC_CE-ATA cards mmc: dw_mmc: Parse slot-specific configuration .../devicetree/bindings/mmc/synopsys-dw-mshc.txt | 16 +- drivers/mmc/host/dw_mmc-exynos.c | 4 +- drivers/mmc/host/dw_mmc.c | 277 ++++++++++++++++----- drivers/mmc/host/dw_mmc.h | 17 +- 4 files changed, 236 insertions(+), 78 deletions(-) -- 1.8.3.1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 0/9] Enable dw-mmc multi-card support 2017-10-06 19:21 [PATCH 0/9] Enable dw-mmc multi-card support Liming Sun 2017-10-06 19:21 ` [PATCH 3/9] Revert "mmc: dw_mmc: use the 'slot' instead of 'cur_slot'" Liming Sun 2017-10-16 14:35 ` [PATCH 0/9] Enable dw-mmc multi-card support Liming Sun @ 2017-10-17 1:36 ` Shawn Lin 2017-10-17 15:52 ` Liming Sun 2 siblings, 1 reply; 9+ messages in thread From: Shawn Lin @ 2017-10-17 1:36 UTC (permalink / raw) To: linux-arm-kernel On 2017/10/7 3:21, Liming Sun wrote: > This series of commits enables the multi-card support for the dw-mmc > controller. It includes two parts as below. > > The first part (patches 1-7) reverts the series of recent commits that > removed the multi-card support with comments saying there was no such > use case in the real world. Actually this feature is being used in > Mellanox Bluefield SoC and has been requested by customers. Hrm.... it's so unlucky that your patchset comes a little late. As your patch 8 and 9 said, you need them to fix problem for multi-card support, so definitely there was no such use case, and even the code was buggy to support it right? That makes the code hard to read and maintain, so we decide to remove it. > > The second part (patches 8-9) fixes the DesignWare multi-card support > according to the dw-mmc databook (synnopsys: DesignWare Cores Mobile > Storage Host Databook, 2.70a). It has changes to set the card number > into the CMD register to multiplex requests to different cards when > working in SD_MMC_CEATA mode, set the CTYPE / CLKENA / CDTHRCTL > registers properly according to the spec, and parse the per-card > configuration to match the Linux Documentation > (bindings/mmc/synopsys-dw-mshc.txt). Havn'e check the databook for details yet, but I think it's ok to re-introduce multi-slot support if a real user benefits from it. But you need a new patch to silent the log "num-slots property not found, assuming 1 slot is available" as we removed all the num-slots from DT at that time. > > Liming Sun (9): > Revert "Documentation: dw-mshc: deprecate num-slots" > Revert "mmc: dw_mmc: remove the unnecessary slot variable" > Revert "mmc: dw_mmc: use the 'slot' instead of 'cur_slot'" > Revert "mmc: dw_mmc: remove the 'id' arguments about functions > relevant to slot" > Revert "mmc: dw_mmc: change the array of slots" > Revert "mmc: dw_mmc: remove the loop about finding slots" > Revert "mmc: dw_mmc: deprecated the "num-slots" property" > mmc: dw_mmc: Support two SD_MMC_CE-ATA cards > mmc: dw_mmc: Parse slot-specific configuration > > .../devicetree/bindings/mmc/synopsys-dw-mshc.txt | 16 +- > drivers/mmc/host/dw_mmc-exynos.c | 4 +- > drivers/mmc/host/dw_mmc.c | 277 ++++++++++++++++----- > drivers/mmc/host/dw_mmc.h | 17 +- > 4 files changed, 236 insertions(+), 78 deletions(-) > ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 0/9] Enable dw-mmc multi-card support 2017-10-17 1:36 ` Shawn Lin @ 2017-10-17 15:52 ` Liming Sun 2017-10-20 14:06 ` Jaehoon Chung 0 siblings, 1 reply; 9+ messages in thread From: Liming Sun @ 2017-10-17 15:52 UTC (permalink / raw) To: linux-arm-kernel >> Hrm.... it's so unlucky that your patchset comes a little late. As your patch 8 and 9 said, you need them to fix problem for multi-card support, so definitely there was no such use case, and even the code was buggy to support it right? That makes the code hard to read and maintain, so we decide to remove it. Thanks for the feedback. Yes, earlier the multi-card support was buggy indeed. We spent some time to debug it and got it working. >> Havn'e check the databook for details yet, but I think it's ok to re-introduce multi-slot support if a real user benefits from it. But you need a new patch to silent the log "num-slots property not found, assuming 1 slot is available" as we removed all the num-slots from DT at that time. The " num-slots property not found..." log message has already been removed by 8a629d26f back in 2016. Looks like we're good on this one. In dw_mci_probe (), it has code to check pdata->num_slots. If 0, the host->num_slots will be set to 1. So the logic of setting default num_slots seems already there. But correct me if I am wrong. Thanks, Liming -----Original Message----- From: Shawn Lin [mailto:shawn.lin at rock-chips.com] Sent: Monday, October 16, 2017 9:36 PM To: Liming Sun <lsun@mellanox.com>; Jaehoon Chung <jh80.chung@samsung.com> Cc: Ulf Hansson <ulf.hansson@linaro.org>; Rob Herring <robh+dt@kernel.org>; Mark Rutland <mark.rutland@arm.com>; Kukjin Kim <kgene@kernel.org>; Krzysztof Kozlowski <krzk@kernel.org>; shawn.lin at rock-chips.com; linux-mmc at vger.kernel.org; devicetree at vger.kernel.org; linux-kernel at vger.kernel.org; linux-arm-kernel at lists.infradead.org; linux-samsung-soc at vger.kernel.org Subject: Re: [PATCH 0/9] Enable dw-mmc multi-card support On 2017/10/7 3:21, Liming Sun wrote: > This series of commits enables the multi-card support for the dw-mmc > controller. It includes two parts as below. > > The first part (patches 1-7) reverts the series of recent commits that > removed the multi-card support with comments saying there was no such > use case in the real world. Actually this feature is being used in > Mellanox Bluefield SoC and has been requested by customers. Hrm.... it's so unlucky that your patchset comes a little late. As your patch 8 and 9 said, you need them to fix problem for multi-card support, so definitely there was no such use case, and even the code was buggy to support it right? That makes the code hard to read and maintain, so we decide to remove it. > > The second part (patches 8-9) fixes the DesignWare multi-card support > according to the dw-mmc databook (synnopsys: DesignWare Cores Mobile > Storage Host Databook, 2.70a). It has changes to set the card number > into the CMD register to multiplex requests to different cards when > working in SD_MMC_CEATA mode, set the CTYPE / CLKENA / CDTHRCTL > registers properly according to the spec, and parse the per-card > configuration to match the Linux Documentation > (bindings/mmc/synopsys-dw-mshc.txt). Havn'e check the databook for details yet, but I think it's ok to re-introduce multi-slot support if a real user benefits from it. But you need a new patch to silent the log "num-slots property not found, assuming 1 slot is available" as we removed all the num-slots from DT at that time. > > Liming Sun (9): > Revert "Documentation: dw-mshc: deprecate num-slots" > Revert "mmc: dw_mmc: remove the unnecessary slot variable" > Revert "mmc: dw_mmc: use the 'slot' instead of 'cur_slot'" > Revert "mmc: dw_mmc: remove the 'id' arguments about functions > relevant to slot" > Revert "mmc: dw_mmc: change the array of slots" > Revert "mmc: dw_mmc: remove the loop about finding slots" > Revert "mmc: dw_mmc: deprecated the "num-slots" property" > mmc: dw_mmc: Support two SD_MMC_CE-ATA cards > mmc: dw_mmc: Parse slot-specific configuration > > .../devicetree/bindings/mmc/synopsys-dw-mshc.txt | 16 +- > drivers/mmc/host/dw_mmc-exynos.c | 4 +- > drivers/mmc/host/dw_mmc.c | 277 ++++++++++++++++----- > drivers/mmc/host/dw_mmc.h | 17 +- > 4 files changed, 236 insertions(+), 78 deletions(-) > ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 0/9] Enable dw-mmc multi-card support 2017-10-17 15:52 ` Liming Sun @ 2017-10-20 14:06 ` Jaehoon Chung 2017-10-20 15:07 ` Liming Sun 0 siblings, 1 reply; 9+ messages in thread From: Jaehoon Chung @ 2017-10-20 14:06 UTC (permalink / raw) To: linux-arm-kernel Sorry for late this.. On 10/18/2017 12:52 AM, Liming Sun wrote: >>> Hrm.... it's so unlucky that your patchset comes a little late. As your patch 8 and 9 said, you need them to fix problem for multi-card support, so definitely there was no such use case, and even the code was buggy to support it right? That makes the code hard to read and maintain, so we decide to remove it. > > Thanks for the feedback. Yes, earlier the multi-card support was buggy indeed. We spent some time to debug it and got it working. > >>> Havn'e check the databook for details yet, but I think it's ok to re-introduce multi-slot support if a real user benefits from it. But you need a new patch to silent the log "num-slots property not found, assuming 1 slot is available" as we removed all the num-slots from DT at that time. > > The " num-slots property not found..." log message has already been removed by 8a629d26f back in 2016. Looks like we're good on this one. In dw_mci_probe (), it has code to check pdata->num_slots. If 0, the host->num_slots will be set to 1. So the logic of setting default num_slots seems already there. But correct me if I am wrong. > > Thanks, > Liming > > -----Original Message----- > From: Shawn Lin [mailto:shawn.lin at rock-chips.com] > Sent: Monday, October 16, 2017 9:36 PM > To: Liming Sun <lsun@mellanox.com>; Jaehoon Chung <jh80.chung@samsung.com> > Cc: Ulf Hansson <ulf.hansson@linaro.org>; Rob Herring <robh+dt@kernel.org>; Mark Rutland <mark.rutland@arm.com>; Kukjin Kim <kgene@kernel.org>; Krzysztof Kozlowski <krzk@kernel.org>; shawn.lin at rock-chips.com; linux-mmc at vger.kernel.org; devicetree at vger.kernel.org; linux-kernel at vger.kernel.org; linux-arm-kernel at lists.infradead.org; linux-samsung-soc at vger.kernel.org > Subject: Re: [PATCH 0/9] Enable dw-mmc multi-card support > > > On 2017/10/7 3:21, Liming Sun wrote: >> This series of commits enables the multi-card support for the dw-mmc >> controller. It includes two parts as below. >> >> The first part (patches 1-7) reverts the series of recent commits that >> removed the multi-card support with comments saying there was no such >> use case in the real world. Actually this feature is being used in >> Mellanox Bluefield SoC and has been requested by customers. > > Hrm.... it's so unlucky that your patchset comes a little late. As your patch 8 and 9 said, you need them to fix problem for multi-card support, so definitely there was no such use case, and even the code was buggy to support it right? That makes the code hard to read and maintain, so we decide to remove it. Hmm.. Well, if i missed your reply for my removing patch, it's my fault..but i didn't see any reply.. At that time, we didn't see any usage and also now... Are there any patches for using multi slot? e,g) device-tree file or your own driver If there are big benefits to revert them, i don't want to back them..during almost 6 years, never use it.. > >> >> The second part (patches 8-9) fixes the DesignWare multi-card support >> according to the dw-mmc databook (synnopsys: DesignWare Cores Mobile >> Storage Host Databook, 2.70a). It has changes to set the card number >> into the CMD register to multiplex requests to different cards when >> working in SD_MMC_CEATA mode, set the CTYPE / CLKENA / CDTHRCTL >> registers properly according to the spec, and parse the per-card >> configuration to match the Linux Documentation >> (bindings/mmc/synopsys-dw-mshc.txt). the second part seems that it's only support since v2.70a..? > > Havn'e check the databook for details yet, but I think it's ok to re-introduce multi-slot support if a real user benefits from it. But you need a new patch to silent the log "num-slots property not found, assuming 1 slot is available" as we removed all the num-slots from DT at that time. > > >> >> Liming Sun (9): >> Revert "Documentation: dw-mshc: deprecate num-slots" >> Revert "mmc: dw_mmc: remove the unnecessary slot variable" >> Revert "mmc: dw_mmc: use the 'slot' instead of 'cur_slot'" >> Revert "mmc: dw_mmc: remove the 'id' arguments about functions >> relevant to slot" >> Revert "mmc: dw_mmc: change the array of slots" >> Revert "mmc: dw_mmc: remove the loop about finding slots" >> Revert "mmc: dw_mmc: deprecated the "num-slots" property" >> mmc: dw_mmc: Support two SD_MMC_CE-ATA cards >> mmc: dw_mmc: Parse slot-specific configuration >> >> .../devicetree/bindings/mmc/synopsys-dw-mshc.txt | 16 +- >> drivers/mmc/host/dw_mmc-exynos.c | 4 +- >> drivers/mmc/host/dw_mmc.c | 277 ++++++++++++++++----- >> drivers/mmc/host/dw_mmc.h | 17 +- >> 4 files changed, 236 insertions(+), 78 deletions(-) >> > > > > ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 0/9] Enable dw-mmc multi-card support 2017-10-20 14:06 ` Jaehoon Chung @ 2017-10-20 15:07 ` Liming Sun 2017-10-25 16:47 ` Ulf Hansson 0 siblings, 1 reply; 9+ messages in thread From: Liming Sun @ 2017-10-20 15:07 UTC (permalink / raw) To: linux-arm-kernel Thanks Jaehoon. Please also see my response inline. - Liming > -----Original Message----- > From: Jaehoon Chung [mailto:jh80.chung at samsung.com] > Sent: Friday, October 20, 2017 10:06 AM > To: Liming Sun <lsun@mellanox.com>; Shawn Lin <shawn.lin@rock- > chips.com> > Cc: Ulf Hansson <ulf.hansson@linaro.org>; Rob Herring > <robh+dt@kernel.org>; Mark Rutland <mark.rutland@arm.com>; Kukjin Kim > <kgene@kernel.org>; Krzysztof Kozlowski <krzk@kernel.org>; linux- > mmc at vger.kernel.org; devicetree at vger.kernel.org; linux- > kernel at vger.kernel.org; linux-arm-kernel at lists.infradead.org; linux- > samsung-soc at vger.kernel.org; Chris Metcalf <cmetcalf@mellanox.com> > Subject: Re: [PATCH 0/9] Enable dw-mmc multi-card support > > Sorry for late this.. > > On 10/18/2017 12:52 AM, Liming Sun wrote: > >>> Hrm.... it's so unlucky that your patchset comes a little late. As your patch > 8 and 9 said, you need them to fix problem for multi-card support, so > definitely there was no such use case, and even the code was buggy to > support it right? That makes the code hard to read and maintain, so we > decide to remove it. > > > > Thanks for the feedback. Yes, earlier the multi-card support was buggy > indeed. We spent some time to debug it and got it working. > > > >>> Havn'e check the databook for details yet, but I think it's ok to re- > introduce multi-slot support if a real user benefits from it. But you need a > new patch to silent the log "num-slots property not found, assuming 1 slot is > available" as we removed all the num-slots from DT at that time. > > > > The " num-slots property not found..." log message has already been > removed by 8a629d26f back in 2016. Looks like we're good on this one. In > dw_mci_probe (), it has code to check pdata->num_slots. If 0, the host- > >num_slots will be set to 1. So the logic of setting default num_slots seems > already there. But correct me if I am wrong. > > > > Thanks, > > Liming > > > > -----Original Message----- > > From: Shawn Lin [mailto:shawn.lin at rock-chips.com] > > Sent: Monday, October 16, 2017 9:36 PM > > To: Liming Sun <lsun@mellanox.com>; Jaehoon Chung > > <jh80.chung@samsung.com> > > Cc: Ulf Hansson <ulf.hansson@linaro.org>; Rob Herring > > <robh+dt@kernel.org>; Mark Rutland <mark.rutland@arm.com>; Kukjin > Kim > > <kgene@kernel.org>; Krzysztof Kozlowski <krzk@kernel.org>; > > shawn.lin at rock-chips.com; linux-mmc at vger.kernel.org; > > devicetree at vger.kernel.org; linux-kernel at vger.kernel.org; > > linux-arm-kernel at lists.infradead.org; > > linux-samsung-soc at vger.kernel.org > > Subject: Re: [PATCH 0/9] Enable dw-mmc multi-card support > > > > > > On 2017/10/7 3:21, Liming Sun wrote: > >> This series of commits enables the multi-card support for the dw-mmc > >> controller. It includes two parts as below. > >> > >> The first part (patches 1-7) reverts the series of recent commits > >> that removed the multi-card support with comments saying there was no > >> such use case in the real world. Actually this feature is being used > >> in Mellanox Bluefield SoC and has been requested by customers. > > > > Hrm.... it's so unlucky that your patchset comes a little late. As your patch 8 > and 9 said, you need them to fix problem for multi-card support, so definitely > there was no such use case, and even the code was buggy to support it right? > That makes the code hard to read and maintain, so we decide to remove it. > > Hmm.. > Well, if i missed your reply for my removing patch, it's my fault..but i didn't > see any reply.. > At that time, we didn't see any usage and also now... [Liming] It is definitely not anybody's fault. My apology that I should have made it very clear. This is a new SoC which uses two eMMC cards. This feature has been requested by customer. We made it working with patches, then realized that the support for the 2nd card was removed recently from upstream kernel. To avoid reinventing the wheel, a better approach appears to bring back the changes. > > Are there any patches for using multi slot? > e,g) device-tree file or your own driver [Liming] Patch 9/8 and 9/9 are the changes to fix the multi-slot support. We follow the original "Documentation/devicetree/bindings/mmc/synopsys-dw-mshc.txt" for device configuration. There is no device-tree patches since there is no changes to any of the documentation syntax. Just in case you might be interested, below is the ACPI table we used to include the two slots. It's defined according to synopsys-dw-mshc.txt and seems working. Device (MMC0) { Name (_HID, "PRP0001") Name (_UID, Zero) Name (_CCA, 1) Name (_CRS, ResourceTemplate() { Memory32Fixed(ReadWrite, 0x6008000, 0x400) Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive) { 64 } }) // Common configuration Name(_DSD, Package() { ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), Package() { Package () { "compatible", Package () {"snps,dw-mshc"}}, Package () { "fifo-depth", 0x100 }, Package () { "clock-frequency", 24000000 }, Package () { "cap-mmc-highspeed", 1 }, Package () { "card-detect-delay", 200 }, Package () { "num-slots", 2 } } }) // Slot-0 Device (SLT0) { Name(_DSD, Package() { ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), Package() { Package () { "reg", 0 }, // physical slot number Package () { "bus-width", 8 } // bus width (8-bit) } }) } // Slot-1 Device (SLT1) { Name(_DSD, Package() { ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), Package() { Package () { "reg", 1 }, // physical slot number Package () { "bus-width", 4 } // bus width (4-bit) } }) } } > > If there are big benefits to revert them, i don't want to back them..during > almost 6 years, never use it.. [Liming] Yeah, I could imagine it. Earlier the multi-slot didn't work well at all. We debug it on HW emulation to figure it out. The changes are not big though. We have customers asking for it. It'll be very helpful to re-enable the multi-card support. > > > > >> > >> The second part (patches 8-9) fixes the DesignWare multi-card support > >> according to the dw-mmc databook (synnopsys: DesignWare Cores > Mobile > >> Storage Host Databook, 2.70a). It has changes to set the card number > >> into the CMD register to multiplex requests to different cards when > >> working in SD_MMC_CEATA mode, set the CTYPE / CLKENA / CDTHRCTL > >> registers properly according to the spec, and parse the per-card > >> configuration to match the Linux Documentation > >> (bindings/mmc/synopsys-dw-mshc.txt). > > the second part seems that it's only support since v2.70a..? [Liming] This one is the spec I used as reference for all the changes and testing. I didn't go through previous versions due to the limitation of testing environment I have. As you mentioned, there is no multi-card usage earlier and this SoC is probably the first product to use it in real-world. So adding a version check seems safe (so it won't unnecessarily break anything just in case) . Any suggestions? > > > > > Havn'e check the databook for details yet, but I think it's ok to re-introduce > multi-slot support if a real user benefits from it. But you need a new patch to > silent the log "num-slots property not found, assuming 1 slot is available" as > we removed all the num-slots from DT at that time. > > > > > >> > >> Liming Sun (9): > >> Revert "Documentation: dw-mshc: deprecate num-slots" > >> Revert "mmc: dw_mmc: remove the unnecessary slot variable" > >> Revert "mmc: dw_mmc: use the 'slot' instead of 'cur_slot'" > >> Revert "mmc: dw_mmc: remove the 'id' arguments about functions > >> relevant to slot" > >> Revert "mmc: dw_mmc: change the array of slots" > >> Revert "mmc: dw_mmc: remove the loop about finding slots" > >> Revert "mmc: dw_mmc: deprecated the "num-slots" property" > >> mmc: dw_mmc: Support two SD_MMC_CE-ATA cards > >> mmc: dw_mmc: Parse slot-specific configuration > >> > >> .../devicetree/bindings/mmc/synopsys-dw-mshc.txt | 16 +- > >> drivers/mmc/host/dw_mmc-exynos.c | 4 +- > >> drivers/mmc/host/dw_mmc.c | 277 ++++++++++++++++---- > - > >> drivers/mmc/host/dw_mmc.h | 17 +- > >> 4 files changed, 236 insertions(+), 78 deletions(-) > >> > > > > > > > > ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 0/9] Enable dw-mmc multi-card support 2017-10-20 15:07 ` Liming Sun @ 2017-10-25 16:47 ` Ulf Hansson 2017-10-25 16:50 ` Ulf Hansson 0 siblings, 1 reply; 9+ messages in thread From: Ulf Hansson @ 2017-10-25 16:47 UTC (permalink / raw) To: linux-arm-kernel Hi Liming, Sorry for jumping into the discussion like this. [...] >> >> This series of commits enables the multi-card support for the dw-mmc >> >> controller. It includes two parts as below. >> >> >> >> The first part (patches 1-7) reverts the series of recent commits >> >> that removed the multi-card support with comments saying there was no >> >> such use case in the real world. Actually this feature is being used >> >> in Mellanox Bluefield SoC and has been requested by customers. >> > >> > Hrm.... it's so unlucky that your patchset comes a little late. As your patch 8 >> and 9 said, you need them to fix problem for multi-card support, so definitely >> there was no such use case, and even the code was buggy to support it right? >> That makes the code hard to read and maintain, so we decide to remove it. Unfortunate patch 8 and 9 does *not* solve the fundamental problem with multiple slots. You can't solve it without involving the mmc core, as explained in earlier discussions [1]. >> >> Hmm.. >> Well, if i missed your reply for my removing patch, it's my fault..but i didn't >> see any reply.. >> At that time, we didn't see any usage and also now... > > [Liming] It is definitely not anybody's fault. My apology that I should have made it very clear. > This is a new SoC which uses two eMMC cards. This feature has been requested by customer. > We made it working with patches, then realized that the support for the 2nd card was removed recently from upstream kernel. > To avoid reinventing the wheel, a better approach appears to bring back the changes. > >> Having multiple slots of eMMC:s, attached to one single mmc controller, is really a terrible idea, even if one could get it to somewhat work. To deal with multiple slots from the mmc core point of view, we would need to introduce a kind of "bus slot lock", which needs to be taken whenever the core access any of the registered two mmc hosts. However, that then means that the upper block device layers can no longer perform proper I/O scheduling of requests to the eMMC cards. In other words, requests on one eMMC device can then starve requests reaching the other eMMC device. It all falls apart. Perhaps that is a limitation you think is okay to live with, but I am really not so sure it's worth adding "multiple slot" support. [...] Kind regards Uffe ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 0/9] Enable dw-mmc multi-card support 2017-10-25 16:47 ` Ulf Hansson @ 2017-10-25 16:50 ` Ulf Hansson 0 siblings, 0 replies; 9+ messages in thread From: Ulf Hansson @ 2017-10-25 16:50 UTC (permalink / raw) To: linux-arm-kernel [...] > Unfortunate patch 8 and 9 does *not* solve the fundamental problem > with multiple slots. You can't solve it without involving the mmc > core, as explained in earlier discussions [1]. > This link got lost, so here it is: [1] https://www.spinics.net/lists/linux-mmc/msg46549.html [...] Kind regards Uffe ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2017-10-25 16:50 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2017-10-06 19:21 [PATCH 0/9] Enable dw-mmc multi-card support Liming Sun 2017-10-06 19:21 ` [PATCH 3/9] Revert "mmc: dw_mmc: use the 'slot' instead of 'cur_slot'" Liming Sun 2017-10-16 14:35 ` [PATCH 0/9] Enable dw-mmc multi-card support Liming Sun 2017-10-17 1:36 ` Shawn Lin 2017-10-17 15:52 ` Liming Sun 2017-10-20 14:06 ` Jaehoon Chung 2017-10-20 15:07 ` Liming Sun 2017-10-25 16:47 ` Ulf Hansson 2017-10-25 16:50 ` Ulf Hansson
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).