From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753632AbcHXBkp (ORCPT ); Tue, 23 Aug 2016 21:40:45 -0400 Received: from mail-sn1nam02on0135.outbound.protection.outlook.com ([104.47.36.135]:55987 "EHLO NAM02-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752864AbcHXBkm (ORCPT ); Tue, 23 Aug 2016 21:40:42 -0400 X-Greylist: delayed 11994 seconds by postgrey-1.27 at vger.kernel.org; Tue, 23 Aug 2016 21:40:42 EDT Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=zach.brown@ni.com; Date: Tue, 23 Aug 2016 17:04:43 -0500 From: Zach Brown To: Haibo Chen CC: "adrian.hunter@intel.com" , "ulf.hansson@linaro.org" , "mark.rutland@arm.com" , "robh+dt@kernel.org" , "linux-mmc@vger.kernel.org" , "devicetree@vger.kernel.org" , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH] sdhci: Add quirk and device tree parameter to force SD test mode Message-ID: <20160823220442.GA20351@zach-desktop> References: <1471906531-28668-1-git-send-email-zach.brown@ni.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.24 (2015-08-30) X-Originating-IP: [130.164.62.11] X-ClientProxiedBy: SN1PR15CA0009.namprd15.prod.outlook.com (10.163.200.19) To CY1PR0401MB1452.namprd04.prod.outlook.com (10.161.212.24) X-MS-Office365-Filtering-Correlation-Id: 3ab692ff-48e4-4e52-92f0-08d3cba180ef X-Microsoft-Exchange-Diagnostics: 1;CY1PR0401MB1452;2:s7NofzcQT8XHPXv5zGShb+Vayus6xrUMJShWOl4zhH7EEcBgprGsg/PyLNZSjcGPENt7cW8EUsmpavxaj0neJi2xSTjOpNxBqMk8LGv4FukumZrmFYDOWRTg9p8PeoFSZfbWGVoC0QU9Cx8PxCHsvGNTRbKrGHTQrNc8TeuDVEcYzJJwbI36PFD0XjRT3vsQ;3:U77ObHg0/KEjc4+/lphF7fyZjM6lbnCJt2V0nDeqoTXESGzlTI4rKx7iQPKVTiDRC1dwaOFaQPxBtrbUZz+MiwpEQYlFV48i2fkq9forc+Vy8vmkuKJy8EMJxdWnbqE1 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR0401MB1452; X-Microsoft-Exchange-Diagnostics: 1;CY1PR0401MB1452;25:6KvNY/Z+Ywf5rMojsRiit3HJx74dze0hBbBcJvz2y8o3QVFiSZ608HJS14PeIR74K/PKLbrw+/uReACzn7Tu+F5dml0kWO/V0C2ZoSqTskaxhEGLVlrULZpaG5cN7AABI4DgJKdHSvUyl+vhr2OzLBox3uxQEVy/NX0w5Jy5BYo4tvyGoso0M7QkQWUag8BBqA4LitUL5v7ypZ/ey950BYYj0IC/1JrNNNjOZ0M5yTXuLE7lzB80elW/owtIlnPS4isCt4wjxjjOYRriz80bZ+JkyMOZuTvSZJl6xApnPA9S5FrbNhaFwwYRkUj2g3D6Gk3YuT+CIfKbs/KAGITW2qedky2caoDhvDIGof4A0Q8QUxCPWnxP2Tlfn8l06uIZGIuQXnaMaLdK8cNgsYNRUl++nCGA1wiJqYryXp1AhAEaPowWUISrMxwTFjQWnqFVVLUkIjeZxyGOE5K3raY95HigfHQ/i6g+q+wzkoEf5B9jWbK3i3wtczmhn+PBCCxbAnsAon66X0MpGjCWhFMrF+GvlXcjHHZGeuF2Z/m4efQzSdM1Dg6q4EBzyagcHYLDfZvDq8+9m+Ekdgu0C8Ct9PTA5ljjijpGDsMLO8pDJKnDVN/J+XoPStCtbPwQIFpq2Wo7WhiDAdvMi3phIT9Ilkct/FQiLhuRnRaUUClKRGPfarwkeVrDlRBizWG8CZaWHyRki/HkMfnaT0gvJxSd/v0gk7mGh7kss7zwDvhBunxpsVNplM+CDjeW1xw3ckEhKePBh1+gq8iBOHNQKVVy05ipvANWwQznvDcCBFCkIxsgBafAlyVebugizVkGHVMz X-Microsoft-Exchange-Diagnostics: 1;CY1PR0401MB1452;31:y1C8qlUg8wdxqCegBz3veTldvsg456KswukL3CS/2CjoonDBPFRZwgqzFs/VvXPTJN+DpYGYPo74n7bzClyjf+2qB5DYiDDAZDTOPU3qWLUj1hnDJxGUcC6sn0rm9w6NvlI+0LR+RWFa2JtGkI+1vXTplslExpaq2pyw5bvrcE1nLun+6vmh2yxXHrUFvSvLLs749YzwxBc0Eay6pppzUZWZL8xIg1qm6Qzh7UMFdNI=;20:z7tdFVnlrL3jDp49mneeHNz+baziYXYP2RM7VXRypn8wFpoVHBPrOcOE++qdhOW3zM6YEDFq4c0kQCROHLTbuB0zrkju+juF/Kcqw2Xq6aM+a2dk4vPFnTUxNXQF71b6SdiyhL2t4lhmj8rVlMAL3KwvBOx2ey6K/j1oZtkJlPOM4n+Jkq3YOJnBFt6VpPNX0DhUHLJIB/wFqiw2oHvu3o432kqiD9agNuteAqI59b3X9bDN6w3J3DD3Eh5sQgsHP8pXEo8V+kfRO6zmSH9ZjEwxlLCQNQ6rRTiMCCWlYlHT6VMrLiU6F0H9XtuKcrquj8mhGF21MuGDkRHqQD0QkRavJNUIQweOq6DYLKOVnn7VAffc0lu/mtqb8xdBgOeYte/lWiOQ1DoOeJDgEEALYcm7HTOD9WMqkqoJ15Iy8RCvrzjm0UeHJFauKz96oGWDSWrsZYCatjhAvsMiszlaV2zVIzdUG8wphPZvhfdU75fbPrTvqSE2nsuSZkLmAEr8F9TLpSnk6oo+32154jWG7D68BlcWMgGDsWSWhSmGblqFHvMGfc6H4hPPGRM7nxUCh2Kp8fmVohNN4f10JEkbS8KR6XN9UqyjGa7CxH+7Yts= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(180628864354917)(9452136761055)(192813158149592)(189271028609987)(228905959029699)(145744241990776); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040176)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046);SRVR:CY1PR0401MB1452;BCL:0;PCL:0;RULEID:;SRVR:CY1PR0401MB1452; X-Microsoft-Exchange-Diagnostics: 1;CY1PR0401MB1452;4:Y9TbyqWzw2DM/L5nSW8mljxhmSTeB91qF1pwxBg6jVn1Exk2zLpXrt3whzGrwBWLRBpiamRhFx4UXBLaF0hAAt69mxf2KlAVo6xOW1/SgTINGDSh4Dc+Gj43ggezkiiFAiQwR5gSdON5PUtjfneOAXtbvxdMl/0dK2rrpCok7hy/Jo5VUF1EW6rMNJ6QC1+SNlyyk4swmr7LJZYlVmKwlOmsSaN2rUTJSAU11UviHXbkM9snvXtRH+0NPGaLU3Tal8mzykUS37kwIytB2k/oGis6/xPBzljnQIkYJfYFNZKUnfaVsQnEcnz0UteJGK6D3LFhcECuPDys70IXAAFJsvCzH8HsTfkfWW2FrlMNSjZwdk2JXqWnhoXNldKCMytOlO8OQefbTcZFtPqxokH+8eFVuhJ8Ju6/Xj3Um10mJQ9fTRTfG7StEFJ1rwAOIMvrd54lwnohzlkaE4hpav/E6/gZP5iwZd0BTtWKXdDJIOm9ECCjtLiUwvuDIfXdzkeDmSLXXq3mloJDpy/DTFg67g1hxjnTbwAyWf6Jh56tkUZk7/3B9esVOwWa0lTjBL4ssK9jZqoQQOEvX1E+nm1QSsns0C+tKKihtJY/kU1Nt10= X-Forefront-PRVS: 004395A01C X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(7916002)(189002)(24454002)(377454003)(13464003)(199003)(92566002)(54356999)(101416001)(106356001)(2950100001)(76176999)(33656002)(50986999)(9686002)(15975445007)(7736002)(97736004)(7846002)(305945005)(47776003)(19300405004)(50466002)(8666005)(66066001)(5660300001)(3846002)(2906002)(81166006)(8676002)(4001350100001)(46406003)(83506001)(33716001)(68736007)(586003)(77096005)(97756001)(189998001)(42186005)(4326007)(81156014)(110136002)(23726003)(6116002)(19580405001)(105586002)(19580395003)(1076002)(86362001)(18370500001)(2690400003)(7059030)(107986001)(562404015)(422495003);DIR:OUT;SFP:1102;SCL:1;SRVR:CY1PR0401MB1452;H:zach-desktop;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CY1PR0401MB1452;23:Z03C4zaMp48MK1EsWpj4HVUi3vvX53uGwb9fbBS?= =?us-ascii?Q?VKl7pCIf8hHzF5+2esxyf30IWdwPLxgfXOOgHWKoiF/lGrfKRG1ovxkXDjFi?= =?us-ascii?Q?WhzGP2DST8n39oVQsMmm9TAlWf0ys4jAvKeMYd0grH4Xvr82uyVw1LdctZdG?= =?us-ascii?Q?JfL3E7JLE7U2VwItTe2WBpHwbCCU5ThguxRFTMi25E1znaGct+pThRt157ky?= =?us-ascii?Q?0ChYYYBqHrbHIGZ73FHQWVuExOUNu7PLOC+un97xSKfnhkLn96yDKWyfPgLx?= =?us-ascii?Q?e7ucnzwch37ES1IE85MLmsIajh8V6qvXG2oqCiQMZLEg5IGH4lE16rIUsP/X?= =?us-ascii?Q?HwYh3EvO0W2ke+o6DgzwfBdfmeIPlAu3WVgT5KsBAM0GkgBokP/27tC+Wo7p?= =?us-ascii?Q?h/VeEKqRtyS0JWa2CU3R0dXkWBiBJ8i4pUfAMB3mCbsfk5GVESqVUDitZyAF?= =?us-ascii?Q?jCkYasMOSluZhz0rWWzBQzgO6x8b5m27Te73WnPrjQw5gHKOoXMEJNgUgWec?= =?us-ascii?Q?00X22dAYjUcCgKvXW+jy6raoiDhwIEdA2eKDeeQ0Y1cGt9D6H7plKFT/TLwJ?= =?us-ascii?Q?RB0njr2OZbJD0iEF2Q07ZjA6iEFyY3JNeh4X2+Hgb/T/OOg0m/+Wc8HZY9um?= =?us-ascii?Q?UZK9bxc3zNkeQpo/g1NtPKSbgCBG1SufypGnSMgzmHs+/JX7WAS+yahNNWTq?= =?us-ascii?Q?S6G9GA+e194ttvN86iE7960FWBIcSCdoxZNe8481ELl15SQ6NNyNW8lLGZO0?= =?us-ascii?Q?8fpXwF69kF4aw3lSvXHLBW0LbseA54MolLj/jwdyhY+1v5YqwEg7dV0PQFqA?= =?us-ascii?Q?DB5qnFGS5xrpHwn3ggTPAUZAjYagnu0nGYzTUIon2Q33YSYE2t6p0WYsOnVu?= =?us-ascii?Q?8FJSOg7tVyHZSXPpW5iDfQxHv1alWRSYqexjPCXsY1tsZVKZzCZizPC9WBHK?= =?us-ascii?Q?NonP5Iu3/C5J99O3EPmRKSgDKYZhDxgO9nv7YfXXp15m78HyL86RnNqjjZ80?= =?us-ascii?Q?nhfKDLpIqmqscmWAemaz8WZ42lhDzNbOVIBZQqXpquge7Dny7a5R1KFlpKAq?= =?us-ascii?Q?l4yPHd2tdK+1kXL44HLPx6BOH1pt0dnSpcyZWXy1YLl+Rs2TufJGidbHprvR?= =?us-ascii?Q?FpzjIG7TCaso3WU7GmpKNCqWJoauzyLcAecSOMtJIf5yKZJlr9FvdbOs549L?= =?us-ascii?Q?/Mw0pqFgrml0uuXjqqjhiMSFmt9k8bRQNb8Glh2q+DpNOuHaR4Dc1biajrC6?= =?us-ascii?Q?elJZgckXAOkSSjm/kBOpn4u7LhL5JykQ55dIX3Mom7NojoXKrk+u5vt8GNLN?= =?us-ascii?Q?PVTQcCueUOexeMadqr6fct/N5Z4r99Dynpnc+cIP1l3qM92cPB/eAvj2YPwN?= =?us-ascii?Q?Sb5hTN4ZUsCrfWc8SbffnUIpNyS3e7rl3LPk3FgR71UWm5EdX?= X-Microsoft-Exchange-Diagnostics: 1;CY1PR0401MB1452;6:Gmgde6PHwBKApZeDrThzGNoVMRniD2SSMob4PXPLZG294u/YLOJ8Tx5Aj5UicCBHX32tGMOw7XQAzIbzbwLnmOgnV+nM5GU5QKq2F032PdYAKMY7ZCN/sCmHU1Yn95BPoXiKj6iiMfujJb/cnDwO7Yg1LGonHfA8ufVZrLlNBHzCJLivL6za7jNFT3caRo8Mx7SsjB+zaD7UCO7MiGvUjB78N+il+DFhx2SLlEuxCS2vOJmq3E7vxRMwPRZFiNSgvAJeSs2PASvnkohmKefRCoHUqr2ko/5ColO9GnOkVCw=;5:YiTizyFqEBlXgnJUwix7h1cO7O2NRuFRDmJANwWgYToGm7uRREgRC20GCv/wG6VLr3ObH2RMeQPP6uVxsjJ9pyCaZJ0vkv5efvWxM/3wu5eB0TQq5UxHnQ/vusxJvxkBfM/4Al1OfxoswKFNOCjWNg==;24:M/TDp9xlnFEXmqh18pAk1I07ySQrhbJNUuoKYK8dKxo9JXFHl4+XxSjUgpSrZnD6mplloZz1CIDHFNMxnLr5YjnAP9k1Q4yfh7S8X8+VBTE=;7:7EJ2pgTcNZj2kL5mNaq3K6NyseFQLQH4t3cHp6K99IB9tIbaqOimhj72aKxulb4FA5GhvipF5fNvsMRfyKnsKgK1KDNTMqohlf4yrM1v5VAC2K8IdhmXQc7NBAmQ44OWCh5OGW6U1225NyGvuY86i8nZi8OlJhxxkdsiOK8bIFROmCFLuYkBSvQgOR2/6OzYWoOdBbtUmq4u187bcw9ObhDkSgeJ8JfO91WCse81FaBr7FWB8N43pk/MFlceKrCP SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: ni.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Aug 2016 22:04:49.8155 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR0401MB1452 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Aug 23, 2016 at 01:34:20AM +0000, Haibo Chen wrote: > > -----Original Message----- > > From: linux-mmc-owner@vger.kernel.org [mailto:linux-mmc- > > owner@vger.kernel.org] On Behalf Of Zach Brown > > Sent: Tuesday, August 23, 2016 6:56 AM > > To: adrian.hunter@intel.com > > Cc: ulf.hansson@linaro.org; mark.rutland@arm.com; robh+dt@kernel.org; > > linux-mmc@vger.kernel.org; devicetree@vger.kernel.org; linux- > > kernel@vger.kernel.org > > Subject: [PATCH] sdhci: Add quirk and device tree parameter to force SD test > > mode > > > > From: Jaeden Amero > > > > On some devices, CD is broken so that we must force the SDHCI into test mode > > and set CD, so that it always detects an SD card as present. > > > > In order to get a device with broken CD working, we had previously always set > > the SDHCI into test mode. Unfortunately, this had the side effect of making all > > SD cards used with our Linux kernels undetectable and non-removable. > > Why not use the poll mode? You can set the flag MMC_CAP_NEEDS_POLL, then > the mmc core will detect the card every second. > We're using a Xilinx Zynq device. In an AR they state: "Signals card detect (CDn) and write protect (WPn) are required for the Zynq SD card interface to work." http://www.xilinx.com/support/answers/61064.html So polling won't work, since the interface itself won't work unless CDn is on. Test mode allows us to get the interface working with no CDn signal. > > > > By making this "SD test mode" setting optional via a quirk, we can avoid this > > side effect for devices other than the device with broken CD. > > Additionally, we add a device parameter to sdhci-pltfm to allow all SDHCI > > drivers to enable this quirk. > > > > Signed-off-by: Jaeden Amero > > Signed-off-by: Zach Brown > > --- > > Documentation/devicetree/bindings/mmc/mmc.txt | 2 ++ > > drivers/mmc/host/sdhci-pltfm.c | 4 ++++ > > drivers/mmc/host/sdhci.c | 9 +++++++++ > > drivers/mmc/host/sdhci.h | 4 ++++ > > 4 files changed, 19 insertions(+) > > > > diff --git a/Documentation/devicetree/bindings/mmc/mmc.txt > > b/Documentation/devicetree/bindings/mmc/mmc.txt > > index 22d1e1f..3a9be41 100644 > > --- a/Documentation/devicetree/bindings/mmc/mmc.txt > > +++ b/Documentation/devicetree/bindings/mmc/mmc.txt > > @@ -52,6 +52,8 @@ Optional properties: > > - no-sdio: controller is limited to send sdio cmd during initialization > > - no-sd: controller is limited to send sd cmd during initialization > > - no-mmc: controller is limited to send mmc cmd during initialization > > +- force-sd-cd-test-mode: card detection is broken on device, force cd > > +test > > + enable and cd test inserted so host will always detect a card. > > > > *NOTE* on CD and WP polarity. To use common for all SD/MMC host > > controllers line polarity properties, we have to fix the meaning of the "normal" > > and "inverted" > > diff --git a/drivers/mmc/host/sdhci-pltfm.c b/drivers/mmc/host/sdhci-pltfm.c > > index 1d17dcf..056d101 100644 > > --- a/drivers/mmc/host/sdhci-pltfm.c > > +++ b/drivers/mmc/host/sdhci-pltfm.c > > @@ -87,6 +87,10 @@ void sdhci_get_of_property(struct platform_device > > *pdev) > > if (of_get_property(np, "broken-cd", NULL)) > > host->quirks |= SDHCI_QUIRK_BROKEN_CARD_DETECTION; > > > > + if (of_get_property(np, "force-sd-cd-test-mode", NULL)) > > + host->quirks2 |= > > + SDHCI_QUIRK2_MUST_FORCE_SD_CD_TEST_MODE; > > + > > if (of_get_property(np, "no-1-8-v", NULL)) > > host->quirks2 |= SDHCI_QUIRK2_NO_1_8_V; > > > > diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index > > cd65d47..2f4c6f9 100644 > > --- a/drivers/mmc/host/sdhci.c > > +++ b/drivers/mmc/host/sdhci.c > > @@ -117,6 +117,15 @@ static inline bool sdhci_data_line_cmd(struct > > mmc_command *cmd) static void sdhci_set_card_detection(struct sdhci_host > > *host, bool enable) { > > u32 present; > > + u8 ctrl; > > + > > + if (host->quirks2 & SDHCI_QUIRK2_MUST_FORCE_SD_CD_TEST_MODE) > > { > > + /* Put the card in test mode, with card inserted */ > > + ctrl = sdhci_readl(host, SDHCI_HOST_CONTROL); > > + ctrl |= SDHCI_CTRL_CD_TEST_INSERTED | > > + SDHCI_CTRL_CD_TEST_ENABLE; > > + sdhci_writeb(host, ctrl, SDHCI_HOST_CONTROL); > > + } > > > > if ((host->quirks & SDHCI_QUIRK_BROKEN_CARD_DETECTION) || > > !mmc_card_is_removable(host->mmc)) > > diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h index > > 0411c9f..dd609b2 100644 > > --- a/drivers/mmc/host/sdhci.h > > +++ b/drivers/mmc/host/sdhci.h > > @@ -84,6 +84,8 @@ > > #define SDHCI_CTRL_ADMA32 0x10 > > #define SDHCI_CTRL_ADMA64 0x18 > > #define SDHCI_CTRL_8BITBUS 0x20 > > +#define SDHCI_CTRL_CD_TEST_INSERTED 0x40 > > +#define SDHCI_CTRL_CD_TEST_ENABLE 0x80 > > > > #define SDHCI_POWER_CONTROL 0x29 > > #define SDHCI_POWER_ON 0x01 > > @@ -422,6 +424,8 @@ struct sdhci_host { > > #define SDHCI_QUIRK2_ACMD23_BROKEN (1<<14) > > /* Broken Clock divider zero in controller */ > > #define SDHCI_QUIRK2_CLOCK_DIV_ZERO_BROKEN (1<<15) > > +/* Controller must support device with broken CD */ > > +#define SDHCI_QUIRK2_MUST_FORCE_SD_CD_TEST_MODE (1<<16) > > > > int irq; /* Device IRQ */ > > void __iomem *ioaddr; /* Mapped address */ > > -- > > 2.7.4 > > > > -- > > To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the > > body of a message to majordomo@vger.kernel.org More majordomo info at > > http://vger.kernel.org/majordomo-info.html