From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754285AbcHWWxc (ORCPT ); Tue, 23 Aug 2016 18:53:32 -0400 Received: from mail-bl2nam02on0101.outbound.protection.outlook.com ([104.47.38.101]:36924 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751550AbcHWWx3 (ORCPT ); Tue, 23 Aug 2016 18:53:29 -0400 X-Greylist: delayed 2916 seconds by postgrey-1.27 at vger.kernel.org; Tue, 23 Aug 2016 18:53:29 EDT Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=zach.brown@ni.com; Date: Tue, 23 Aug 2016 17:19:22 -0500 From: Zach Brown To: Frank Rowand CC: , , , , , , Subject: Re: [PATCH] sdhci: Add quirk and device tree parameter to force SD test mode Message-ID: <20160823221922.GC20351@zach-desktop> References: <1471906531-28668-1-git-send-email-zach.brown@ni.com> <57BBB8F1.9070401@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: <57BBB8F1.9070401@gmail.com> User-Agent: Mutt/1.5.24 (2015-08-30) X-Originating-IP: [130.164.62.11] X-ClientProxiedBy: MWHPR07CA0019.namprd07.prod.outlook.com (10.172.94.29) To BN3PR0401MB1444.namprd04.prod.outlook.com (10.161.210.22) X-MS-Office365-Filtering-Correlation-Id: 110867a6-696a-434a-40d3-08d3cba38deb X-Microsoft-Exchange-Diagnostics: 1;BN3PR0401MB1444;2:p2/wDgoh0qItA5m/DGhyNDaX1rzHLMLy0PYf5/H5T19v5nT7PlqPEkRK1S+EpKZo5rqaMtLgWV6QX8lxlQcGe7hC/h6gpF5NG8eGMoMWoMTyhk7v4bVQasZ/3B5xoQhwl0eG6I7Ba353ygwVaKVMUALIM0CUa1XPJ4viCOJ1c5i5zX/QPUB86MQx9ACiL0YB;3:hZjTwV5wSejqYZpxnAr12aHDwhOIrFwOO2i1OFzbM3ZvkJ31JlMNGcEXq+wOEvA4hYyGOVd0XPX4aB92WwM5ouyAjnbv/kJfDxL8fgvV2mJVLCmRMyVqWE0dm1ej/+TQ X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BN3PR0401MB1444; X-Microsoft-Exchange-Diagnostics: 1;BN3PR0401MB1444;25:2chBlerDiFUp81RKtFHjAzD5KcnT9kzC3ijIoSi0PA8TEsCIs/5XNHGeZwads3lr7zLhSu7vy/Y3ekoKvNEwdGIITpxUotehOnxYAPGiphqG33sYTvJZ94p8ijFVXFr0JWkKYXQzyAtpLnvtVujQ6w/nVaCfZ1wPX6hiq2Hg+tHuc6RQzeqh1odGVsbiX6cX4OI6hmtPqrd50xeOSqIRFmmhrW99FUMBPd3emnXttuuWY1dAzxU0Jq3LFBp5SrJCeauEMIK8Obu29hS4GYjRdndk9KVtlIq78/XzMgmDf7RkyRmMEbh5VHCxSZeooNAIkgpkbRCIbT7NbSo2ECbiCGsaFP2WaWtHHE44KzHr/PJne/MyRv0oLxOOymXZm/tSdlwDpzWVncbOYFQzjQ63Myx7CTn4qY5kMBZuzkW1V5EUNbPBj2f5wbfENlf4kHRXMgV+n1WKrb7hmP73MoV8Ib1W9xdcmlGrsE9LBzE+g0x9AIfv8rotYOaOKZ+x0OaOPuAV8BDPrdGC88QikEo4MqzCnD4Md04JITNrOqg1qN9s5s951/8o62bNNEXE8VrCnnGPFkheT3Cr5ONbBMH3A8X7ewxMLSGunK8IjauhE7awJ4Y7b+/Uuep5r8WJsixmTsvtYu57JIDhTfrgXuN2nocDjWb88UNYGLAjsiySQb8kA10VhibnfDJ84cecOqLW7HWAl3i0hwFBQPKtvVzgsRflTwBDJo78f+Nbdr0t7nQ= X-Microsoft-Exchange-Diagnostics: 1;BN3PR0401MB1444;31:HS2jUB+JYUEsbWZdg22YABYcanfLHhOGEybsyM2xqGu7icjblwbdbNKdTASBDeRZEgow8p9a7XbddMkPK3oOgThxDc71eUujkANvmMLej/jMfJPC1IPcEAKwIYoTZEgHWNV+woMLU5Ed+fLEUUUnrJLpEBRVkeMWhVCnbRvQ9NCjVgD5fQz8KD4yQYYq5bDtmjYTdRjCOcniOr50v6SkCepTg0+wCUfAs+9fyh7QO8g=;20:4431nkm+uGEIOdxAjM/WVcy44riQWdjR1nnO98yHmucRqWZxUZSe8dRiNZgjKkpVzdJWOdtvLOaZeTner9Lki5Qz2ZZ8AiH0+038H7tbWe3DkSN7z1+3+0yFwiL8OBvxjCeL0Il+K44VOMwKTfLVBbbljWb6+ZOFdisqwuB56t00elBk/DVOFdyCrbyJ6+2BNf2p+2JFaTNMvwQMjkq7bO3zh74dApOwqAP3cVf94Hb0JNjTZPq+UXOm6xBjlflBhkE0E+97t4ZZ3uQe3k+K8ET6y0/oLNPVP/ByrDi45ZJrMrySErqBcqweYxMjHnhkfqZLPi5boX5TgjA7wLxxdXMMda+qWtNdh1QYJe/i9A5e6wGlFlntI44jpszC0z2Pyq8aWQQPGLX9CAK8JNmGVPh8aqKY22X/HWOHTQavjLsc7dJj9IW++K6/b7AeO3JP9ewZOF5pLUWIPXPMGxTcEZU51+Yxg0rFvSkuEPOjZfTEzItXnSBvNc5ih7zuC6Zn/A8z2PGmmopnTJ1//noJBuVjNT9kf90sO7JsbwOOTVN4KJvtWJtqsieyDG5vHpaBPbz/SDkoB5EPQ8hdNWpNDBK63Y119FvCLw2wEjnemRI= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(145744241990776); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040176)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046);SRVR:BN3PR0401MB1444;BCL:0;PCL:0;RULEID:;SRVR:BN3PR0401MB1444; X-Microsoft-Exchange-Diagnostics: 1;BN3PR0401MB1444;4:pI3o2k0/KF92iy/WSNM4UE/07IiWZNUb6QaD3tDUJbXL5K5AyOBXFPiw+5IGc8txlZXFURjnjzK8kHbK72y9XFgJtrZ3ePsqW82gb0v67nk/UpkOtWlmomNhVY2IGpKiIe8oZufN1vddc8y9s3gCVEhiKImKy0OQRzpyCQh0QUwgCOwjJHmbSx5HpDgfm9pckKmsAQnF7vsWnygQ+tDZkZelHbrMtLuM4hcavvIqJG9H+xoBVwSJ0WVzCFxi5K+uBTEoyWe1x04QTXCw8mqRh1xdBOEgddNB/9ul2SkCAeFVUIE+S8aTPKyV5Fz5LEYc1dcB7MNmcdtA3iVrPEDEYlzmgqtiwGpZ9WN/h8PqWU8bxQQPNXeA+wrHNeV5KZ3RPOk19WFnK/CKBMos79YNkbMzD5PDMSlMty3ZsQ9XwvQF0+slcFZV3XoydLozlSod X-Forefront-PRVS: 004395A01C X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(7916002)(199003)(189002)(24454002)(97756001)(42186005)(7846002)(33656002)(66066001)(9686002)(305945005)(7736002)(81166006)(81156014)(8676002)(50466002)(68736007)(33716001)(586003)(46406003)(83506001)(92566002)(2906002)(19580405001)(4326007)(1076002)(101416001)(6116002)(3846002)(5660300001)(76176999)(50986999)(54356999)(77096005)(23726003)(4001350100001)(47776003)(86362001)(189998001)(110136002)(2950100001)(97736004)(105586002)(106356001)(19580395003)(18370500001)(107986001);DIR:OUT;SFP:1102;SCL:1;SRVR:BN3PR0401MB1444;H:zach-desktop;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BN3PR0401MB1444;23:oQphv0jaINRUrdpNQlxjYJJQ0jX0wbR7HCaP+Z+?= =?us-ascii?Q?fjoH3vo0Qhv/EYMwnvXjy85ibaW6p7Jb5r7S/EnqZ5sbqzkuYLXK4Sh9lUhb?= =?us-ascii?Q?lpVM2fWi8cq5znQVuYvGkAUNuEE9QFIOVwSgbaHY13pzSCStBeypvwem0SKo?= =?us-ascii?Q?AAVfVbQQOdeGFjw+N7D3VD1thxNjPllUibECsWaj8VcN93JJ7eP6BSAIN0+c?= =?us-ascii?Q?dBdbzUKpICPFt8s2rKT+cm6xBNTiF31t2+s92wpSTedmtX1LNMStLv+18wzc?= =?us-ascii?Q?PampfTLAso0bB09ZugS581uUMpVV42ztQPpN3HJrmW5zFX3UfS41sLNWYXfo?= =?us-ascii?Q?acyVxeUTCcdG/1HXjLY2TQ3s7/M0V2+u5K4c14r/ehkX8nNTmyBgx647+2kx?= =?us-ascii?Q?WSY7v3W1AYe1POBxIWid6l7M/NDbwquQmkx/Amvdq+7Ollh/VKdKFzPySrI8?= =?us-ascii?Q?1rCtHuizEuSp+mpa1a8QMNLwW/8GAFthff1vImXVVrugxDdKFa7AsB3i1i0Q?= =?us-ascii?Q?rFwBlsx40noFOJUc3zlZuGSUSQ8BO3T4LDQ7wPaxVNvRp2NzI5tbiPqLEziO?= =?us-ascii?Q?Bi99E9y7DaxT82UK8D8YLL78k7bE0aj+C/a6aLpSHQ73cPVWRwE1aRNdeurr?= =?us-ascii?Q?066fo7lsE8lWTJYEmOTbiAzA1kaC5pjVuCly2J5v1kgyhV7SiGSmJvKp6TNj?= =?us-ascii?Q?MrpZ0an3IkUjUYjxzThSHdWCw6uka+SQIh3Pi9SCPa8XBR/MDi8l9GcjD1Dn?= =?us-ascii?Q?VKMPTJSuRDtcuVXh/ptuPhszsWrWJCy/bfCmdxK5wt/h1CItElWBCRBZelti?= =?us-ascii?Q?GeV1M/O2SZaxBcbfS/5/c2Z+aiXZbTowQYvaCDmSpQERyYSC0UpwdGIYalf6?= =?us-ascii?Q?I5Zwqt2nERCypQpxdeOv4GCzqZFLi0FIIUGkFdG18qK2qf2XOeOtFqNkD74O?= =?us-ascii?Q?9JbDm6KrEI/JaIqz/JDBvios/7GR2QhdShmM6lodpWMtBR82h/wa14wU8y/Y?= =?us-ascii?Q?UR/SZ0uUdR3H2xR3wzVGawCwWYGXouTFw1y6FMk1Bl4pBvJ8FFvIh42z0m/6?= =?us-ascii?Q?AqlgEAJmAsLySIOMcnSYbdC3CkMLR0F3ujzz6JpuKuRXwNxLao/Lhcf8XzhA?= =?us-ascii?Q?2rOa6HWiTHjOIOt8SaDAKZk48GkchKRMRUVQvkaY8p+3MirTzxHHn4jzdWsQ?= =?us-ascii?Q?ytdoKpS6fiEVltiY=3D?= X-Microsoft-Exchange-Diagnostics: 1;BN3PR0401MB1444;6:BNmxVzLt3XmmbCswQG5LWw+FgbqT1JTMZ7X2yqoVCZnqccH4k/sbd4h860TvPMr/vGfC1jj61CEf3XUlWcBbfC7C+3OIZsHla33r/VLoG7NjvlfuNXqbbAxwZ0N0Mh0ArRCDPEN1gTgzc5A4QUGHkHna/hDjEHMVQkepV3tscBVDkNo2Ki7qtNL1uIVQX0GcH/1RL8m/z7IvK7Purfgdmagrdhkg54rVguCPTlibycl9LhNdqHRqlGii0CzGfi61cUXj8njWcoTBtuUlBmhMC2CRDCk8CW98RC6qEDabPps=;5:VYEVRcwF+XkvSbVlKGkV2Zo0kp7iOMIW+tdNhEACtYqkPwHHRvbJrus3911Q7qfz8KXifcBKg4LOVPGlrErQ1xQ91wOXOceEn6YOCsm/l/veceJjARmkJRGbyS3Gg+hNluDoEMoomq6oSuDNUwujBw==;24:gFjA3/c8zFzHHAXgT4IrGmIrGUFEN3q0m1t+W49mtzlEqUTbWcPBWJ8Q3qtHbwfanyt/3uqmA8a7WuR8NZ3AFIo9sqLtCdOFtYRsEUe2dWY=;7:UxJpeq243an9bPOL7296nF85+/Ywog5RSJkGHAAdii+OaFCWl39pyz0rMELfGPd9KTzI+xxkwO0pR619YU5yB2roFoB5uv34zhKibcoyNHIvVzYToDnC21H7mRO7kEQrkVajpn88JhxGFHMHE/OKf5j78QYHbtHS/Fx/TSH/vMwnOWL05GeM8mIoJ7IkVAHmRj1EBkVvAjHCi7Hgj9+dam25DNzbrmii9XUDfqvS7U8FhnBIAij/Adr/OwPtgqYt SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: ni.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Aug 2016 22:19:29.6693 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN3PR0401MB1444 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Aug 22, 2016 at 07:46:09PM -0700, Frank Rowand wrote: > On 08/22/16 15:55, Zach Brown wrote: > > 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. > > > > 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. > > Do not create a property that tells the driver what to do. > > Instead create a property that says that the hardware is broken in a certain way. > The driver can then choose to take the appropriate action based on the way that > the hardware is broken. > > I understand the point you have raised. In the next version I will change the language of the property to reflect this. > > > > *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 */ > > >