From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S941030AbcIFT1E (ORCPT ); Tue, 6 Sep 2016 15:27:04 -0400 Received: from mail-bl2nam02on0121.outbound.protection.outlook.com ([104.47.38.121]:42706 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S934551AbcIFT07 (ORCPT ); Tue, 6 Sep 2016 15:26:59 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=zach.brown@ni.com; Date: Tue, 6 Sep 2016 13:51:08 -0500 From: Zach Brown To: Michal Simek CC: , , , , , , , , Subject: Re: [PATCH 2/2] sdhci-of-arasan: Set controller to test mode when fails-without-test-cd is present Message-ID: <20160906185107.GA5124@zach-desktop> References: <1472512857-13063-1-git-send-email-zach.brown@ni.com> <1472512857-13063-2-git-send-email-zach.brown@ni.com> <13c1a30f-fb4f-a813-df0a-3ac9914cfa61@xilinx.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: <13c1a30f-fb4f-a813-df0a-3ac9914cfa61@xilinx.com> User-Agent: Mutt/1.5.24 (2015-08-30) X-Originating-IP: [130.164.62.11] X-ClientProxiedBy: BY2PR21CA0040.namprd21.prod.outlook.com (10.162.74.178) To BN6PR04MB0610.namprd04.prod.outlook.com (10.172.197.135) X-MS-Office365-Filtering-Correlation-Id: 38e35e6b-d4c8-49b9-8ebb-08d3d686c7f6 X-Microsoft-Exchange-Diagnostics: 1;BN6PR04MB0610;2:q73XpkTTxmCe6Qpxj/wL+hSnae7GhX56Yn26FKrY0jEkTRQACCRk4bACScR2BMoAz1LUIqgAwrHKFhpNnZcsf3cs3vtyUMhw55X9AT9YC/6Ni7AxUxYvkvUmkaywSq0dZ7t5oNuNO9FR5/LTSkhatAGzal9FBpuTL9+jUBtZZ9swHNloEgxGR3rIC0FKLSAD;3:IBU4gmpSW1wn5RpfIOH6jw4O44HcQHcs7jvcv/Td7wxSm/xfC4KTCTsnKW+M7E2XeF6dZsn1O39KQgqgpQ51SK72panSYCzADZ0j4uIq/fJNsoMujqIYalOZzDutL9Xt;25:IFrVrJjewrPM+/WVjnIth93/7Tu5h8ALTET8t1XPAJD2RUc5ZT2yv43gc0UpwDSn5obT53hpeVU0NhrivREyKba7fEPucO+2nlihP54OOoAFuRd4LzeIKLKaURWxpnHeeIXi6TohZEjqKwxs0tyoOpGF7oyXkNa6o3AqqRVZ++EHGNhSyYOk8pZ3XyZvKvICzT8nNgWl3axyMPMleny0ioa6AqtVjhPJsm6n2Ac4CYkPMZ3VZ843TTdIOvHK+Lzh1f16zoL2EfF5uLQ2LgP0NX+ViRlKq+dyIFEKr/UhQrtCe54boH6URJSHc8F8oHunxA6E3D6Zl2q3BvzYMNT4ZD2P2v4HRMlXV8haqJaMcDSi/Tl5XmSCHHrG1eQhzbU63t41ShoF07/wGOm29lmlNT0bLlJbg+QVF3ct3N4jT8w= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BN6PR04MB0610; X-Microsoft-Exchange-Diagnostics: 1;BN6PR04MB0610;31:39wJUPJ54sA0lkrlpQ7k5kEgUyWz7UrKhlPJhloyLM47IC1wl7aEfTcBPuH2/djJOBcvEboU2fPwku+5f4ShvEml8aQ4pKLaXCirIlSS11xqxZH0poQJj+jZrqen5xJL2lN3EDES77PSO4mbKKvHB2aOELPGhUHMkCbOCJaQ/wjra5nwDz+6iZR7SHg/eoLyNcSqor6/oQ3sk2nVijJ4g5Kbq1UdSV9G7aFGAc3OPGk=;20:z6GELmAo8itSA6wwCrV26oWDVPpJjiE5QTTdnYdEYoK8L4VO2NWAEr2IB0sNFWKuf1MuSi+wTWleRteosBQesGeOCaEyiSiZfVFK0f6qBUJREbzzmja3uj1H6hRydwrhX9uwP+YEB/h68Fkhd0YYL24q2UtCONVaspWGRt3m6NVFuaqReubLkblz5PHtP38S0pPZDcNp9rFttQFs1bnDoeakvr6uOhRnHN3on1Rs3HwtNIVR+XQL9gHHzu2/6X2vZhbRlE75uCzTP8oaDEJrVH6fCbtOdSH5aCIUtj/pSkTwZPzjOeiwltvGU8cOqlohO12eCZJauNxCp8e9rHE4m0dQmICs5dSIXeK1LaAqreyJSidsErMb7aB534IRXBHpQz+WJq1/w4UL9nGfP+rtA3LAcyafvlf3G+cdz8zgyhpB4BZCJ4LeFBUmff2GqJBHd+kHxg/oPBhd7MMo2TwyxHNbuz/Vc1MQwfUy6yqlZF92Nibqbod91XjJUJF8LNGq3he/f8KTC82bbhHAQjAGon6bkmc60Ul7Ob+eU2cq2MCSg1RFTbvU4cGNNM+4IlysG7SOj9utONOrzcFCsw3LXvJO6yZ4V5I8xjlBBALtcmw= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(192813158149592)(189271028609987)(145744241990776); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040176)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001);SRVR:BN6PR04MB0610;BCL:0;PCL:0;RULEID:;SRVR:BN6PR04MB0610; X-Microsoft-Exchange-Diagnostics: 1;BN6PR04MB0610;4:AtZf97OyD/AhFHOS5Yo1pMFJWymzwmYd5K8X/vxsvzuXTWVeUyoHtWOjJAXuydIeTSvOVW5rnSGFB7AYFgbHHuW9qHXEMT2aLqmPdoibojoJabguKPZnDEC23aEFdLyzdWxpSCgHHHY3rOGGdSXOTu3fRiNS9Y4oTGQBWS2tbyfqGWZgt7OuQTAOonNrAV4NJJtu0ybsbxKOT1O6wLGnrQ6jojWDcMQCIU9pnKj1CZpLmplkq90E1/yNIrq92zjpqaPkoVesHb8dwz/pRagnnPdeoRdwaMtV1AsrXZUrST40ttD1TZNynxHS4akWgBkycZusz1nQIJNNw/SkmMXuMp8D1HYrLfYAlPIPEYwOKvAY0c/BRdlMWDiV4nk0W8EuHeuk6D5f8P5Lx8KdVKEa07q9FKfsZY3GIsC4UdAN0xI0lHK/bYe52EkmSNZm69UoxCI4Hk4mJy+hwhNWTnq4qyJa1Cjm2XVGT9qQIwl1OCHI65ZFBlFQP0qWt3zo95Fl X-Forefront-PRVS: 0057EE387C X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(7916002)(189002)(24454002)(199003)(81156014)(101416001)(305945005)(33716001)(189998001)(15975445007)(7416002)(2906002)(68736007)(110136002)(2950100001)(19300405004)(7736002)(77096005)(97736004)(86362001)(4326007)(5660300001)(4001350100001)(46406003)(575784001)(7846002)(54356999)(92566002)(230783001)(42186005)(19580395003)(106356001)(33656002)(23726003)(47776003)(9686002)(1076002)(66066001)(19580405001)(81166006)(8676002)(8666005)(586003)(105586002)(50466002)(3846002)(97756001)(6116002)(83506001)(50986999)(76176999)(18370500001)(7059030)(2690400003)(107986001)(562404015);DIR:OUT;SFP:1102;SCL:1;SRVR:BN6PR04MB0610;H:zach-desktop;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BN6PR04MB0610;23:oE19ysLGatl5gXH8HVv7SvrZ0sSzAbhEfCn5ULkqC?= =?us-ascii?Q?yrWjodwmLMTGxW+KQamPqwgJJmDn9PWSpmh6rttXcS0r1b32TDiPzcdJbXDd?= =?us-ascii?Q?IjwA5NbgO8Zqfc00gU2IKTvdRYZPH77OMhbW50LEA5UHsSt9IGJmsQeiv1W+?= =?us-ascii?Q?E11GYWYLSfQ8lGa9icm3+Sae5kVVIrMOLS10megmw51Eg50s2O0VpbXZsv5I?= =?us-ascii?Q?bYG6sKvMmDKVjKBSlmG4QbROUFsGrUOgyJ9Nljc0hfgj7PipdlQ6F7UV7ZEy?= =?us-ascii?Q?TrGtrH4ZqBBkSgXYnGiEfp0cuVFd+zzibN3fr+CLEa9PUDgh5hOnX6VhjJwt?= =?us-ascii?Q?DrWfFe8sjCqytzYln6SbeKRdGyWvLGXOycC0297RhonQ/ccyi3ZbTcBNV/av?= =?us-ascii?Q?8MUbxUuyBzxdYkzx3sZhzoRDhEhFBiYM/MIZyvbE2bYoDiReggLD9LUCTEkx?= =?us-ascii?Q?W47HncFCjgsDQpkCGVKTcTkG80etNsYdZaP+3MLhrx5fA3fxkEkAtoqj3Vf2?= =?us-ascii?Q?j3gETSxMKjR13LJkZhO7TDI9/EJbcEf8O2tQwXyFgY5Mr4kKbgS2lYPGaaNV?= =?us-ascii?Q?7z46AFEsHawf4TAiMC2K8XPqftSMrpsmV8wv7ZEyxnl4om0DVyjxPA5Tflou?= =?us-ascii?Q?L6jenwe3qu2XJroN5ERPGRVON/oQVnJ2e/itVO93xxCnb5vka4HZiUXaocvR?= =?us-ascii?Q?ABLvEFNQGEYvsiazPdZ2frrlrmX3rcODfkRYLbd0Vjv4WS19Svpl38bl768B?= =?us-ascii?Q?mk5kWu/KhREDORUshjXKXA29Q+XHGBktMj499WdCAGnb6De4R9eHLlhVLOrg?= =?us-ascii?Q?dUBQJ8eHL9V+nDPdzMloHmWt1WuD1bEIpcjr/YIFQIlTIdp6YPl0w4o6ktWg?= =?us-ascii?Q?cxSc73cF67NlGnl3G6k71hd5eJFNu8mzolIeWW01yqzaGPEhrgtSS/1vihlw?= =?us-ascii?Q?OLNYI/1sd94Ak8qb0XXhn86HI/zZUJ0rgcK7DkJQgeVTsEWUtMUNmiuunWgt?= =?us-ascii?Q?u5UkvkVSUBCLtICPe3B35uzUjT7xL1wn73UM3QuEskDMOV9hE1itFns33N2l?= =?us-ascii?Q?6uycD+Bs2j5rPB0vyKDQ6qiOoOZoqnO4t+E8Xw0dZZkK8AeQ0v9ronW8dMbP?= =?us-ascii?Q?g8bXjSd4E4id12n3QuxceYvTMwV5w/t5qVphDuJ+OLn1aLBJBB0ixc8Jimbm?= =?us-ascii?Q?5zDL+a97XFbD3Wy0trpvady+4IaCrJ1TdEQGjgLZNpJG6GylzJCwE6yAK0pm?= =?us-ascii?Q?ZuB+vANPSV2RDjr5Gei2eVTbBzZvQW04VY9s7MfqaeZlD98oKNaU5LC7JGEY?= =?us-ascii?Q?F93NFcJeOiiDcGaW81KqnPS6A3pyzWo32mxQLtpNCtoHsFq6nZ1rhd1mnSvS?= =?us-ascii?Q?ShD8ErlgU60x8r81sJPApkmSOc7maKMDpHLv0g2nOf1NF5E?= X-Microsoft-Exchange-Diagnostics: 1;BN6PR04MB0610;6:ICfPoPD8rrJPUXmEA92znpBcZ1VLmn0MDOVVFnSGkheMi5Rmn3XfsUjgm6tfnUdW4+PxPoLNWYqoLSDO6nOPxP9+LOow579NYoq3Oug/cslG3d7Dylaz3Sk7Mcl+dDG34gWrcdG0JPwhJGozjxpbfMzQJ30ZQzIfnWu4bQJPI5+LsgI0lSXoqf0EcOTtm/uAart890QSlCjDNKiYMUe3Xj3gebmjx4Qy4eN0srD+HOen1q4iODQ2WPVaf65/EiDV0948OXW283bkWcBdxzPZeSBpHX7h0i0qM8Fs5VNjQVY=;5:UdVhdiKtJFL/7UaPbzHt1rMQ/L1MvZ+pfanZL+WATKr3pYsrbN5+icR9OdjQRzDETKBrA+wmb54J3WZAPdsl0AOoifIm8L2p1J/sfYcw+dXR4jckjNpocDe0jAP1fzEhLqP/SdNF3Q/yS8BBMn7yiQ==;24:DZsYDX+VgQfeaQLH44IpJapKHU8zDQp7ZVu19A4UbSmvrrKvADh+BdOmi9kg2LBN9e5x60cyT7cjflhhpWPP++NCuoNB55tEZ+KmEssxnwA=;7:263OwAIcLWOt3cRvpOjgotuCYvQ9cAPnRlyZVJNBtLQ2b1m5bw2oAuAZueiAKUD6+wSJ+AaJSYpViySAsZxDy4l/qNOM59GlDPyDvrOBRLho1c/3JiT2Om92ECrM4WeplosoPjtyvTisteGz9wmVrNqSQgK1becttoM9YQ6Wp1wRI28RUgfYAPqgX6qU1bYEObJ1zm/Lx3lWYkV3U0/RoMHbfiK99rXBqtnLGm93UZYEjPlFl76Hw/lhVqrp6beU SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: ni.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Sep 2016 18:51:14.5056 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR04MB0610 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Aug 30, 2016 at 07:47:17AM +0200, Michal Simek wrote: > On 30.8.2016 01:20, Zach Brown wrote: > > The sdhci controller on xilinx zynq devices will not function unless > > the CD bit is provided. http://www.xilinx.com/support/answers/61064.html > > In cases where it is impossible to provide the CD bit in hardware, > > setting the controller to test mode and then setting inserted to true > > will get the controller to function without the CD bit. > > > > When the device has the property fails-without-test-cd the driver > > changes the controller to test mode and sets test inserted to true to > > make the controller function. > > > > Signed-off-by: Zach Brown > > --- > > drivers/mmc/host/sdhci-of-arasan.c | 34 +++++++++++++++++++++++++++++++++- > > drivers/mmc/host/sdhci.h | 2 ++ > > 2 files changed, 35 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/mmc/host/sdhci-of-arasan.c b/drivers/mmc/host/sdhci-of-arasan.c > > index e0f193f..c3e5145 100644 > > --- a/drivers/mmc/host/sdhci-of-arasan.c > > +++ b/drivers/mmc/host/sdhci-of-arasan.c > > @@ -26,6 +26,7 @@ > > #include > > #include > > #include "sdhci-pltfm.h" > > +#include > > > > #define SDHCI_ARASAN_CLK_CTRL_OFFSET 0x2c > > #define SDHCI_ARASAN_VENDOR_REGISTER 0x78 > > @@ -92,6 +93,12 @@ struct sdhci_arasan_data { > > > > struct regmap *soc_ctl_base; > > const struct sdhci_arasan_soc_ctl_map *soc_ctl_map; > > + > > + unsigned int arasan_quirks; /* Arasan deviations from spec */ > > + > > +/* Controller does not have CD wired and will not function normally without */ > > +#define SDHCI_ARASAN_QUIRK_FAILS_WITHOUT_TEST_CD (1<<0) > > Bit macro instead? > Setting bits with notations like (1<<0) is the style which is used for quirks in sdhci.h Is there a reason it should be different here? > > + > > remove this line. > > > }; > > > > static const struct sdhci_arasan_soc_ctl_map rk3399_soc_ctl_map = { > > @@ -203,12 +210,32 @@ static void sdhci_arasan_hs400_enhanced_strobe(struct mmc_host *mmc, > > writel(vendor, host->ioaddr + SDHCI_ARASAN_VENDOR_REGISTER); > > } > > > > +void sdhci_arasan_reset(struct sdhci_host *host, u8 mask) > > +{ > > + u8 ctrl; > > + struct sdhci_pltfm_host *pltfm_host; > > + struct sdhci_arasan_data *sdhci_arasan; > > + > > + sdhci_reset(host, mask); > > + > > + pltfm_host = sdhci_priv(host); > > + sdhci_arasan = sdhci_pltfm_priv(pltfm_host); > > + > > + if (sdhci_arasan->arasan_quirks & > > + SDHCI_ARASAN_QUIRK_FAILS_WITHOUT_TEST_CD) { > > + ctrl = sdhci_readb(host, SDHCI_HOST_CONTROL); > > + ctrl |= SDHCI_CTRL_CDTEST_INS | > > + SDHCI_CTRL_CDTEST_EN; > > + sdhci_writeb(host, ctrl, SDHCI_HOST_CONTROL); > > + } > > +} > > + > > static struct sdhci_ops sdhci_arasan_ops = { > > .set_clock = sdhci_arasan_set_clock, > > .get_max_clock = sdhci_pltfm_clk_get_max_clock, > > .get_timeout_clock = sdhci_arasan_get_timeout_clock, > > .set_bus_width = sdhci_set_bus_width, > > - .reset = sdhci_reset, > > + .reset = sdhci_arasan_reset, > > .set_uhs_signaling = sdhci_set_uhs_signaling, > > }; > > > > @@ -516,6 +543,11 @@ static int sdhci_arasan_probe(struct platform_device *pdev) > > } > > > > sdhci_get_of_property(pdev); > > + > > + if (of_get_property(pdev->dev.of_node, "fails-without-test-cd", NULL)) > > + sdhci_arasan->arasan_quirks |= > > + SDHCI_ARASAN_QUIRK_FAILS_WITHOUT_TEST_CD; > > + > > pltfm_host->clk = clk_xin; > > > > sdhci_arasan_update_baseclkfreq(host); > > diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h > > index 0411c9f..8d92d6e9 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_CDTEST_INS 0x40 > > +#define SDHCI_CTRL_CDTEST_EN 0x80 > > You should follow coding style above. I don't understand the issue you're raising. Could you elaborate? > > Thanks, > Michal >