Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752832AbcD2DAO (ORCPT ); Thu, 28 Apr 2016 23:00:14 -0400 Received: from lucky1.263xmail.com ([211.157.147.135]:52259 "EHLO lucky1.263xmail.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751932AbcD2DAK (ORCPT ); Thu, 28 Apr 2016 23:00:10 -0400 X-Greylist: delayed 837 seconds by postgrey-1.27 at vger.kernel.org; Thu, 28 Apr 2016 23:00:09 EDT X-263anti-spam: KSV:0; X-MAIL-GRAY: 1 X-MAIL-DELIVERY: 0 X-ABS-CHECKED: 4 X-ADDR-CHECKED: 0 X-KSVirus-check: 0 X-RL-SENDER: shawn.lin@rock-chips.com X-FST-TO: adrian.hunter@intel.com X-SENDER-IP: 58.22.7.114 X-LOGIN-NAME: shawn.lin@rock-chips.com X-UNIQUE-TAG: <22dfdf728bb6069dfeb1501e830b3edd> X-ATTACHMENT-NUM: 0 X-DNS-TYPE: 0 From: Shawn Lin To: Adrian Hunter , Ulf Hansson Cc: Jaehoon Chung , Michal Simek , soren.brinkmann@xilinx.com, Rob Herring , linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org, Doug Anderson , Heiko Stuebner , linux-rockchip@lists.infradead.org, devicetree@vger.kernel.org, Shawn Lin Subject: [PATCH v2 0/6] Add enhanced strobe support for emmc version 5.1 or later Date: Fri, 29 Apr 2016 10:42:31 +0800 Message-Id: <1461897751-28810-1-git-send-email-shawn.lin@rock-chips.com> X-Mailer: git-send-email 1.8.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3518 Lines: 78 Hello Ulf and Adrian, This patch is going to support enhanced strobe function for emmc version 5.1+ introduced by JEDEC recently. Enchanced strobe is a optional function, so we add a new cap* for drivers to decide whether to use it. When introduing hs400 mode, JEDEC asks controllers to use data strobe line to latch the data from emmc devives. But for cmd-reponse, not mentioned yet. Since emmc version 5.1 published, JEDEC adds enhanced strobe function to deal with cmd-response the same way as data-read. This feature is optional. >From the spec(section 6.6.2.3), the standard scenario to select HS400 enhanced strobe mode illustrated like this: (1) set HS_TIMIMG (Highspeed) (2) Host change freq to <= 52Mhz (3) set the bus width to Enhanced strobe and DDR8Bit(CMD6), EXT_CSD[183] = 0x86 instead of 0x80 (4) set HS_TIMING to 0x3 (HS400) (5) Host change freq to <= 200Mhz (6) Host select HS400 enhanced strobe complete I can't find a upstreamed controller claimed to support it, as well as the mmc stack. But my "arasan,sdhci-5.1" actually supports this function. So I decide to work for this part. By looking into the SDHCI spec, I find there isn't any registers to enable the enhanced strobe function. But from my "arasan,sdhci-5.1" databook, it describes a register called VENDOR_REGISTER(0x78) to trigger this mode. So I guess other sdhci variant drivers may also need s vendor specific register to deal with it. If we are sure that our controller supports enhanced strobe mode, just add mmc-hs400-enhanced-strobe in DT. Once emmc devices claims to support this mode, we enable it automatically. Of course, other sdhci*/non-sdhci drivers should implement/overwrite the prepare_enhanced_strobe by themselves. I believe all of the platforms which need to support this mode should do some basic preparation for their controllers. Currently I just limit the callback within ths scope of arasan,sdhci-5.1, but I prone to believe arasan will use VENDOR_REGISTER to tirgger this mode from now on because I do believe vendor will consider the registers' compatibility. With this patchset applied, we can successfully run in HS400 enhanced strobe mode on RK3399 platform with Samsung eMMC KLMBG2JENB-B041(v5.1, 16GB). mmc1: new HS400 Enhanced strobe MMC card at address 0001 mmcblk0: mmc1:0001 AJNB4R 14.6 GiB mmcblk0boot0: mmc1:0001 AJNB4R partition 1 4.00 MiB mmcblk0boot1: mmc1:0001 AJNB4R partition 2 4.00 MiB mmcblk0rpmb: mmc1:0001 AJNB4R partition 3 4.00 MiB Changes in v2: - switch to HS400ES from Highspeed mode directly Shawn Lin (6): Documentation: mmc: add mmc-hs400-enhanced-strobe mmc: core: add mmc-hs400-enhanced-strobe support mmc: core: implement enhanced strobe support mmc: debugfs: add HS400 enhanced strobe description mmc: sdhci: implement enhanced strobe callback mmc: sdhci-of-arasan: overwrite enhanced strobe callback Documentation/devicetree/bindings/mmc/mmc.txt | 1 + drivers/mmc/core/bus.c | 3 +- drivers/mmc/core/debugfs.c | 4 +- drivers/mmc/core/host.c | 2 + drivers/mmc/core/mmc.c | 77 ++++++++++++++++++++++++--- drivers/mmc/host/sdhci-of-arasan.c | 22 ++++++++ drivers/mmc/host/sdhci.c | 11 ++++ include/linux/mmc/card.h | 1 + include/linux/mmc/host.h | 18 +++++++ include/linux/mmc/mmc.h | 3 ++ 10 files changed, 134 insertions(+), 8 deletions(-) -- 2.3.7