From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752009AbcIGFNh (ORCPT ); Wed, 7 Sep 2016 01:13:37 -0400 Received: from mail-co1nam03on0062.outbound.protection.outlook.com ([104.47.40.62]:2176 "EHLO NAM03-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751080AbcIGFNe (ORCPT ); Wed, 7 Sep 2016 01:13:34 -0400 Authentication-Results: spf=pass (sender IP is 149.199.60.100) smtp.mailfrom=xilinx.com; ni.com; dkim=none (message not signed) header.d=none;ni.com; dmarc=bestguesspass action=none header.from=xilinx.com; Subject: Re: [PATCH 2/2] sdhci-of-arasan: Set controller to test mode when fails-without-test-cd is present To: Zach Brown , Michal Simek 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> <20160906185107.GA5124@zach-desktop> CC: , , , , , , , , From: Michal Simek Message-ID: Date: Wed, 7 Sep 2016 07:13:17 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 MIME-Version: 1.0 In-Reply-To: <20160906185107.GA5124@zach-desktop> Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: 7bit X-RCIS-Action: ALLOW X-TM-AS-Product-Ver: IMSS-7.1.0.1224-8.0.0.1202-22558.005 X-TM-AS-User-Approved-Sender: Yes;Yes X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:149.199.60.100;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(7916002)(2980300002)(438002)(189002)(24454002)(199003)(33646002)(50466002)(36386004)(9786002)(36756003)(31696002)(19300405004)(86362001)(31686004)(575784001)(19580405001)(19580395003)(50986999)(64126003)(8936002)(54356999)(76176999)(87936001)(230700001)(65826007)(23746002)(189998001)(8676002)(7846002)(2906002)(4001350100001)(356003)(15975445007)(83506001)(63266004)(93886004)(65806001)(586003)(2950100001)(77096005)(305945005)(4001450100002)(626004)(5660300001)(81156014)(4326007)(65956001)(47776003)(230783001)(5001770100001)(106466001)(92566002)(81166006)(107986001)(562404015)(5001870100001);DIR:OUT;SFP:1101;SCL:1;SRVR:DM2PR0201MB1054;H:xsj-pvapsmtpgw02;FPR:;SPF:Pass;PTR:unknown-60-100.xilinx.com,xapps1.xilinx.com;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;SN1NAM02FT037;1:j5tp6ASTwm3sZQ01nKsKLJh8i+KPoaOcumi24hfBqIyj7ixgRXYCOZu+MnIzJzcXkVqDH4oSSLN8VaFfQVCrCmnR+B7fi7TTgyWZY46qbxmJHOBfsTX2ryJUNtiYgSFS2ASeCv1HOQAmadR623hsaELoc02thRQWJe1kn2n4905wBhgHYEs4yEXILTsvtq5YXAq6ISz/U9LPJCYDL7MhERTVRfGOKYuOnCZoL/qg38siwwyLWIGQ5rNRm3R597VsNIKr8jAvMAqbJ5OdG+FcM9hJt1KZm1vS3lSexDwSnUrkEQ3BrrXQs78haDzip0kp8m3b/Rn/JUQkM9e8CKcUOGMcZojJyM44xYmKcaqz8mUZyRwsn94xkKnB5peQQbQwCq//a+U8GgBwk9aXiuQlK3Cdx7h/SZdWpXa+svVUesuaUCPpIJHPRLlemnqrQ0ceG4EaoGipGfhGLPvFVhRN8mW7rKKVCyMyTXAzwtq8fkRb6+inGBxsWFzt4ScsJ18sCuccgFglSNxerLUQAqUXytvH+wqk+jAYaR4OYc/dXtRLx8e+vvBRY0GVqDOlBcBICc8aScQ+azRyTUk9feKm2QUClE6SNGU6sDG4uO2SuGg= X-MS-Office365-Filtering-Correlation-Id: 597efe59-345a-4b9d-87bd-08d3d6ddb461 X-Microsoft-Exchange-Diagnostics: 1;DM2PR0201MB1054;2:jEnIayb5lR87uxjFuseBZMpocqcTvkStYJbrw/6fcSkDh1rMi1gEr9pMRvX5yj21ndV8MjGfTh3B8vDotmXpZl1Dk1hVWEwjf2Jd9yZ8DaesQF2H6PXaCeMGPXRNKvzy1MrV/9HUWVOtN5ovXoxWHiIRcr0vPm6+bR+VMRYN0Uyjey+A4puafR99Wwitm63T;3:18bavPDRp+WaGcViHMR0gDhMhNDKYp1mmnia3WIk+ge5jFk+uwWwhLnWRYC/0xr+ddW3nGgU8pnjKtHSh9I/jcPCeysVk7cnlYp0+PUypWD+puLRqZxBIF5mNwHHAPd9eAC8gAwNUIIdwpBPRwej1GRY0d1TtxOj9OJP1EBl8FydKSPoPxa7ykGew5Wl7k3fOl+1hHfqZB+3oy3xfU49Dea2lWHybOYNuw86wqBEwIep5ORXDcsCZW4v0B4S37qBMje3k6F1uk2373vW7fnADQ==;25:IeEJ+M8R4EsjlXNEm/fq6IaLk7cZKzQiUnsihivyEhQ+39e/WOMh8ucMnxW48IY9Jsb9qeVauGjAd1Ut6r0KCZJy6rDvYirHJDxd1CovCYM2+IbfowRZvKWPhUKm5b9WZaOJ7ym5NokUvVTE3YwY2UZiFIAP4xpxujTlaAbEzobgnwrrdrUWvahuCvy8KtGPX/QVvdh1g0vnTyY1yr8tf61RxfhonTTlTjI+2TIGDb4Pgy0DgBybfHhCWe/ouba3u6uNj8ia2tavbKBjZXN2aYQwr39/CjRQzE6bVNRTm4BN2xP8wclfXk5T+eS62yZl1XZ18Q7gDX/0m9Qc4EXHWvaUiV3oE1COjHJLiKSPf3mX0H6PvOrqfK8RqQRCCmyBTyS5vX/MmfFYv313iS305sX05ECGGIytS6Z93ElGI3o= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(8251501002);SRVR:DM2PR0201MB1054; X-Microsoft-Exchange-Diagnostics: 1;DM2PR0201MB1054;31:ubXTdVT72XsuJQKTPiviRAADSIsnZw2Up02HQxoZSlvLke6BnUaSQfgyoXDuS7b/KfRbR8e4f7BWhHUIRsR1Tx4Lmxh+ml4f07bB7A8kFd2Xf+9njPhUqjyhFfsVYTBEO9r+GzAQtQ269dh0GY2T+Y3rGyPfKSIyEVhadLZS1VWg09YcBj0xcu/1l833zuPQdpoc2eRMxiwXGeQ3tBkrowVEh86ErQsNyC8gEGKbgLE=;20:EqAZCiV/sMoP7oUvAo/BrJGQv5qBiynvkLk5ac+p/DMm5ILl+7YT2LJuz8OJwKnExDUoY1ihlf5Qor6bYjSAamWWx16l9M8SYbKUe0clHnzneUCCrHtEoWogEtPukDwqRUNHq2G36ZZZFBOcuYaaAQoJRDjCf3dKT3aXQ8RZAtydibu5FNjRKRtLeXuouEc8o+O3zwPNh87vofTyroKsPvHozrjom8WntOQPV/hLJkAp/s0M0vY5MG/ti81u41oB/CE80+1ESq9EROP+2jYjjwcDpddnVUCXqfG850GDmdqRCvy8K4awbl8ard0Hqv0Vo+VyLoGREHnZmYi60nMolURlCOUiBBj6tMV2tkG/hHjxjaDvEQv6LCVA6NmgBpgDgNNT4SSMOuRiKMWz6ay3xB2ZDnOIWhl9gBMvamtWx1cuarZmh4O1uaGlNQe/YbM3axXnfHhi1z31T/LFmQz5RA2k2pl1gDRt0E6toO73vztkCth/t2REcdGX8Vnvc9CM 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)(13018025)(13024025)(13015025)(13023025)(13017025)(5005006)(8121501046)(3002001)(10201501046)(6055026);SRVR:DM2PR0201MB1054;BCL:0;PCL:0;RULEID:;SRVR:DM2PR0201MB1054; X-Microsoft-Exchange-Diagnostics: 1;DM2PR0201MB1054;4:B61ClEhwnhrLzYa5OSaNt1u6lRNcKAy8a7As6f2iKfBs/gdzS/8ApxsaI7LpxKDtKPaxM2IWIz2/+BRzPCjScK4vGAluoeg6JiU85/f8wtr6oEVAxs6B3BTdsbCQ3DkivJ4TndycyJtnOJcVlGWLimfaQZDUiG82pOxRrkBOQtfMrieSaWUidae+eRFoeIRi+UY+qSegwcf0+bBo8t1ppokoNT1C4Spp775gyP7vNJj8ixd/hbVW09aeRtTMgZtVjFWwntBz26DfWd61BRYpnhjfpEAyfvBiidmDFKZh2vzhMqh9wavUVFe9hLPBvhFobflKyEudTNbnQ3yZz3bj3QVEQA+A823WyDnurXwxb00EfKFgoW6n4LqKVu04aZD02Xj1iqBjio0AxPD1EYxPl0HpoDBxF7V6KbZqVZnVWF9FrcForP7NYjDxiVFtXrZZKwqKTlSYAW7YV6M2RWZZQWGF9I92vsBroh/jdFc7fHEr9s/716ATiOSXxfAic10EMSvcXIBzbXPCSyP4411HSVuS4PiT7fuB8+MMJgAlovKakpS1Dk8S+YtWBHhSFo/uRPWr+gzMCRXEHKFdWLrlAHVUbyHRPRUU8N8ikDpyHm8= X-Forefront-PRVS: 0058ABBBC7 X-Microsoft-Exchange-Diagnostics: =?Windows-1252?Q?1;DM2PR0201MB1054;23:esaPnyhJcx/+5NS0+wR30OZffxBqmV/J0Sz?= =?Windows-1252?Q?OkbEo0vtfGqV+1bwF27b7TYQuuOJrU8fPFEcpytLcM9QSWDHZlzm0BUW?= =?Windows-1252?Q?7vbIFfoWN2zbHRmOznQcVSh4ovO3+PwvuG1qtA7Rjg6rlY4OwFmulCth?= =?Windows-1252?Q?eI/zj35EFf1kjris5Ln4aMY7BXGgS0mWxpHzjTeN7l2BSk0SP5esIziJ?= =?Windows-1252?Q?DKvV16qOqnYGaSwaE14DuMJwc59B54FuDEo181A/RgB9P5J0IBDucN3g?= =?Windows-1252?Q?4heLjYuUimhxMvVtU3ZFDHGMHTPd2NNNGdKs136VZdA86rC72HTWD+Q3?= =?Windows-1252?Q?REwe8g5BwXMz+k1L8f8hqYk1W4q6qmhhnSOtvgyZ9s9RaSeOl4gvveDi?= =?Windows-1252?Q?T3L6zD0PSXdoIq4aiJ+vivk/Oa7UAO+/tamrDYzBXImbJ8oq84hLeWyt?= =?Windows-1252?Q?hWF63CDpmQveImk3syj4FZb6NjCkv2cTqwI9AZKE2LbRRR6hn094hpo9?= =?Windows-1252?Q?6jnyvASkOiO5YomrKw9h+ZQrzrEIWipIxG0pMkl6LFR838HN7Fykg/e9?= =?Windows-1252?Q?turgJUB3twxznAlay9VSdcVZ4VR4Lbnd5hYPIHnDK6wV7aMn98w8Ll/u?= =?Windows-1252?Q?+Fzwj90NygePvIXsPkIw37zSk9dk6IIXW0FbHfmAm71LVUXn1U93CvHL?= =?Windows-1252?Q?fr0/86vcXLYYCdRkzp4knM4E7X7mrToB+bqQLVS2iK9AWeWhNPq2DMK9?= =?Windows-1252?Q?Ce8Er0eQfxPvoWzCS/Jy1T203aWUm7fXW/GdW3C1hME4tZU5EC0Tgep6?= =?Windows-1252?Q?8uXtO4UGs1w6EpoDs2YzfQIgfhwZFhPolWGBS2+ESdqJwaGN9YqXeDPt?= =?Windows-1252?Q?4RJez9Pg/xx6s5waFyI+uZoLAgxj7TYrJjL6Rh9OspaEudKSL8LzwBP9?= =?Windows-1252?Q?CRzw20b0ecYHgp2opVCI5Vui9cYkyQ7eIL+Qaz5B3KG3+4q2NlOOFFl/?= =?Windows-1252?Q?kDykX2mdHW9PpN+nR3ngEwj/S/C45vmCHyjwsEyzlVEhwBP79sv4B12T?= =?Windows-1252?Q?Jqe542gouqQ5f7bdXOY7V2jgBQrCnpWbo82B9G7bQ3L6PgvEVe9duq9i?= =?Windows-1252?Q?u0Hi3PHOwroH3WMJ1aVKjZk4mYMmTA4o7/fCsSMP1AAkFWFGnN0mxDtK?= =?Windows-1252?Q?wHncskuX+cT2fy7FMQCBYQH9NlGUmtiTMoi1bhgufnN3eb0kAa4r8OzO?= =?Windows-1252?Q?PMBlXAa/IRR90GlU/x/896Ms3G4ngBDDeoXKopGn62B57nFesBncUEmq?= =?Windows-1252?Q?m7Gs0H/ug6reHDTkNKvjQ/WsK9PFmthPm6Jy/weAdu7TWhSQfU2MlFIC?= =?Windows-1252?Q?GphC5ymFkfstE7POZ1fjo8L+tYI9hsuwlROxxX0Q+S5Ls/R0GMeKtvU7?= =?Windows-1252?Q?MvyZzgGVdv7M0vnt06uuqo1aHmlAfjB+nh2SAwpgHelTvVSVmpYojfSs?= =?Windows-1252?Q?z5+2GW3ibxl/xZBvlp+z0ARyAUyln7zIBHlZnxQ2G85T7WWZv5A=3D?= =?Windows-1252?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1;DM2PR0201MB1054;6:5mBAaceuGRAc8+Y6FAhiO7VAu7pDO4IGLWTFPMJwlfs9oSrX4YSvFC6BBURYv9bSgHz1PpnIUIS4sUMIUWpAK9bhkQt/FNkVtfgwY/RAUISKTabtJlYuzjQDzQh1NTK+F/fLz3jzYB/BC6+IzvyGnOtGGaTBHGxddrU7vE+IlTZFUEo5DWjXkjhscQ8iO6XFp6r9MgkZP/2uIKcsv3fSNVzaB7dr/o/7kUd05H/pZz9ezaKlE9RLqQ1jgIeALcThZuicccqeP/9B+i0bvdbMolDM4AlNfzqIGgXCTH0ZX8tA3dI0NWMrO6k/o7yM7YfE6jMgNPtpGcKOEuDuUXMjjQ==;5:AR0DvPJGl/O/0Zrqb7qFEA9U12qfRk368RI1WBehYKgdrKf89ytJoLb3Ds6JkV5utv6aMRE5cNaXANaSgb5tWbgaXISURu43zKltiUPUxhYhHs3bTWxUT9N/+g1pDQCRMYbDod6rcif1t96hStdQ2g==;24:J2kauFHfMEYtVkXBjUJe/hIpuz0Fy51HlUjsObAl72hfRiGeeXVBpymeYjYBi3N2WwD4zbFsEzyDPpCtK2c6g9Ko9Q/6ATBisim+Thy2TVs=;7:jMlCeHU3oIUXrWbX1eG72fQSnidfrs1NAy+l7qNlIhQGebRT18c/C3FnAHcabvrZ/4Q65fDRXiXBPF2yVMfyVhUZ1lbF0hcn7oysgOMX3WD4vIhQ6W0FYeZ5WbtAL/mV49ac1iyq7a2BhRMPPMlN/XGzHaIF7s16ceYJ5HBm5ufMqmOI5Fe79+vcyga8Es3M+TSiGwQ4sdCU9Tj5GJpgZpFK19JzUV4nZVijdiNCA+MCW8Ch/ln3cogrizog70Gw SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Sep 2016 05:13:28.7560 (UTC) X-MS-Exchange-CrossTenant-Id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=657af505-d5df-48d0-8300-c31994686c5c;Ip=[149.199.60.100];Helo=[xsj-pvapsmtpgw02] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM2PR0201MB1054 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 6.9.2016 20:51, Zach Brown wrote: > 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? sdhci.h is here for a long time and IIRC using BIT macro is recommended way. >>> + >> >> 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? Origin format is #defineMACRO_NAMEMACRO_VALUE What you have above is not following this style. You should turn on tab highlighting in your editor. Thanks, Michal