From patchwork Fri Nov 10 10:41:28 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nehal-bakulchandra Shah X-Patchwork-Id: 10052811 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 0FA0E60365 for ; Fri, 10 Nov 2017 10:42:28 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 09DA629838 for ; Fri, 10 Nov 2017 10:42:28 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id F27A32994E; Fri, 10 Nov 2017 10:42:27 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0E07529838 for ; Fri, 10 Nov 2017 10:42:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752711AbdKJKm0 (ORCPT ); Fri, 10 Nov 2017 05:42:26 -0500 Received: from mail-bl2nam02on0062.outbound.protection.outlook.com ([104.47.38.62]:51200 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752419AbdKJKmY (ORCPT ); Fri, 10 Nov 2017 05:42:24 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector1-amd-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=nT9kSaNSyyqjOZ7N9kNGmhEQR/um9kxJAiiQfZ95lPI=; b=wAyA6YpUPlW7ET0c/Mf4IFpy8FbU/B2JLFpp+ZuNWsoA920BVM7jxAwPj+2AXKRlhmdeN3bHbUNRimWJkFt0BSbyW1ttA36FDKuTLiwJurLcXHdVtfCjR37u2H2n1xhXjd3aj7W1ab5Z9tMuGTGFwuL6OuPnWtL9HPb5+wBOi1g= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Nehal-bakulchandra.Shah@amd.com; Received: from andbang2.amd.com (202.56.249.162) by DM5PR1201MB2488.namprd12.prod.outlook.com (10.172.87.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.20.218.12; Fri, 10 Nov 2017 10:42:19 +0000 From: Shah Nehal-Bakulchandra To: ulf.hansson@linaro.org, adrian.hunter@intel.com Cc: linux-mmc@vger.kernel.org, Shyam-sundar.S-k@amd.com, Sandeep.Singh@amd.com, Nitesh-kumar.Agrawal@amd.com, Shah Nehal-Bakulchandra Subject: [PATCH v3] mmc: sdhci-acpi: Add support for ACPI HID of AMD Controller with HS400 Date: Fri, 10 Nov 2017 16:11:28 +0530 Message-Id: <1510310488-13413-1-git-send-email-Nehal-Bakulchandra.Shah@amd.com> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 X-Originating-IP: [202.56.249.162] X-ClientProxiedBy: PN1PR01CA0099.INDPRD01.PROD.OUTLOOK.COM (10.174.144.15) To DM5PR1201MB2488.namprd12.prod.outlook.com (10.172.87.138) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 457d4e37-afdb-4591-7cdb-08d52827b966 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(48565401081)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(2017052603258); SRVR:DM5PR1201MB2488; X-Microsoft-Exchange-Diagnostics: 1; DM5PR1201MB2488; 3:jYyfsk1KvkiGZtTcwAnQZAuZwsh8+QaXrmzeTm/sNSsX4JdyyxHs38UbnCgnpThrRd6w1PqlYyJhHPMhNW792NUaVLgVm7L/dmoSxq0a7dIfF3UeIo2Pu3+OR8hrTFWmdPq3KLtW6DH3fojzLGc93DS1MLy378UZHmD4DM3KXr4DQpWPj5/VBfqjZR7HXakamBpxvMeveIUuh68V9Q/YG+ha2ncOGfeDqqSD69+n4BEHmomnS3N+DBvKyy19tJS8; 25:tX286zYfCmErndCUJVSzPyBd1qfEkWeKm5YKiBT408DbJp6VPx07KfNEG/h2oLXIHbHEhLeu4MnuO07FLYW2M4OkT1+EG+pDrbeK5dUYYQThh2Y09fpvB3fwH5R3blAnCumxPNZ0jgP2nftbC5CiuhGWQFKKZYSMiluHB6lzPboYmtT+0IGPSi3fBpE/cGVSFIYAAyqljx0Jvlbs2pSd/NHQx+Dxxl/W86x86UHHbnmyhjZLtm4m92pon/Rh1atgSMDVe0ovN5N33Xiy/0CWhFwl90Wuw7uIwB6SVP6mXwgtQcb3ogHEsDBCFCpvULYWoxEkHZKxWdHIK0xf6Hrsfw==; 31:R4avwqEArzar0+bvMU25ESKQDUBi0Vn18UMBo5/Df5tIm9GHJLLH7pFWWX+T3zNYpOqemi/NgK4JGC6CzIR/9QVFmY6z6cZtz4a8LPffCLX6WiICByo/kPeqvye+v6riyqKCy5yRoufz7DgCMDbko8OGv98tKDleBcn5B61XjO31+Wv6MvKS5Y7Tiutx63wCghPXz5PrK1nrSFFgaVbBId/bZB5+uw4/R3bU+U28mUw= X-MS-TrafficTypeDiagnostic: DM5PR1201MB2488: X-Microsoft-Exchange-Diagnostics: 1; DM5PR1201MB2488; 20:ThoeYelsF/hqRp6MYlthvVyXtpxy7qf78qQjFCP0gk83KaQ1tLoG0F+QRSvCpf2eVtWIb/KEpYBf5C/SozuvvY9JBpm9cnYXtYUtJzsYrbXvbKZY0OQl7SCdmMGDdeZ7o+glaByKt4UV8TVcEJsqwi5EoCvuzVOeqAlQttvl4GBRjDkcG9mz9laQ8LAUWU/BdTgRD1lWKaDF2IXBypf9SIUp6EhYssgBIzg3ZwCNc9NuiA3y1ReAK0zTq6e/BlZ0DgGEmm28zXgXYHuqs1fpMnjQwCw8gP0Dwfin55ycvEPPhkdf8OAyaBDVswnZAxG2rVbyQJh5Rp5omm3UclsVnFrXCG2J4WgpTI2ehyiv1kOR3qgU1YLjqG3PVq4dvCo9YCjh9WLeGydS7dnyQmWUngwxWCdbWBYMlWaUisGgZv3I6OarzdmJjcInTk7upwTrySVONH2BYoTsgjuancVYs+IsLGQsi8e1gkiebVVPnapEnoFDS0vf+Ta2yx/VHKxx; 4:eRH4aJOLtDUbmn9VtoVE418F300ZjHukC1vsvtVOSHi8sG06dw5E0Vxa/QUc3o78W4nyQ66yMaeixO8exfDgSvv7XJBlviPdZc8+e5DLju9JhZsJUS5HveG9bAlKcszXLuTib0NlrfhlubS8IoiOhKjgxshCwzfJW3R/gyTXy6pYNZ1KsROiy8/6INRNACCR6TjjU4IEHmwroufUGvmEIrjnRBQVZen3lF2XoD3eszaIU6io7RVjG8EDAqNjZz+fm12iSoKD3WHxiy1d36xpRCmhH3hT6Pgh/269F+hp1Vh+3LqjwWRxIsv1+ESfpOvz X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(8121501046)(5005006)(10201501046)(93006095)(93001095)(3231021)(100000703101)(100105400095)(3002001)(6055026)(6041248)(20161123564025)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123555025)(20161123558100)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:DM5PR1201MB2488; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:DM5PR1201MB2488; X-Forefront-PRVS: 0487C0DB7E X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(346002)(39860400002)(376002)(199003)(189002)(68736007)(25786009)(5660300001)(5003940100001)(36756003)(6306002)(106356001)(50226002)(2906002)(6116002)(6666003)(4326008)(3846002)(53936002)(50986999)(316002)(8676002)(66066001)(47776003)(16586007)(81156014)(81166006)(105586002)(575784001)(6486002)(7736002)(189998001)(86362001)(53416004)(16526018)(305945005)(50466002)(97736004)(101416001)(478600001)(48376002)(72206003)(8936002)(217873001); DIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR1201MB2488; H:andbang2.amd.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM5PR1201MB2488; 23:nYRezXxd/b9JP4Hjt2QooOSKdZKRrbWbuc+pvgX?= =?us-ascii?Q?fvjN/ZQgDHJx4/fEP5jYRgMA26vbhHsm3YZ8bap6WISZsAYvEEAy7i/51r2/?= =?us-ascii?Q?9jJMLcv5ww/ew9l9LAJXzw6XWHow9EXzuT3uAgO/NwHaxhuRhE11Wtg6rHHM?= =?us-ascii?Q?kS3C9Zo/FEF7DXAy7vo69atAs0FHuRGPxQjRzAzmcM2/AAA/Fn7J/9jyeTfW?= =?us-ascii?Q?qn3VXALmQaxY0Kdkb5Cp8NT6sqmoAPb9yIM2deI34ymG8kvMOAtI8p3F8mc3?= =?us-ascii?Q?zxovbigkmXWz/0wjXwnZHOBwaxMuWtpYOHzqu/VQmJMNflttRh5L3XE6KPnu?= =?us-ascii?Q?CkGo+iR5CsQAA3UuNjmQV3d9SXse24dfyYWHqPx4jZexcpsRVoswFJgjw4K+?= =?us-ascii?Q?UOnCJIidgxJWQFnL/Oy9iZCP94FCHfb1gvKHv8miKoI3ZzcRFiwjEO2teoJd?= =?us-ascii?Q?rNny/dC2aCSPitblxyh9mN5f4uQ4F+vE/faiTAxzIiHeybkDg39jZtPFiHL3?= =?us-ascii?Q?EBsO1iQeGMGScV54fRlVawB/F2yXjo5MmupWdc8mjy/A/s8135prTBVIyd9K?= =?us-ascii?Q?ov1mh8FVxTcfanbQcWMRu/X8sFe/QeK8ug1BqPfhD31CosiRtyW3/tSqvEaJ?= =?us-ascii?Q?RXKXLZ91IUUqx9URmeryov5fsYw+fYQNnw0TK1294LhbgtUdlfg8JQRV7wgF?= =?us-ascii?Q?teOABMCB6Lxo5UIhSHzQlzA14xa7hzptwDwfNl4SitLwLYjJPSroQGiS9/px?= =?us-ascii?Q?Zjy3zXsw1//W2giWjfggiUfmpVNcLfctgqImJMaMFMEEe7+ZSZCTTdEJRrTt?= =?us-ascii?Q?SqTQ1nfeLhKYL0Ywa0cGgnnkooQ9rS0RLVkpgL4VvNDx5q2Sd+YMSlMnW4lP?= =?us-ascii?Q?sEWahTn3LtQBz6ZDMFxZhhSpEg6KZtTRc5otmtFtGOQR9wi5fHetynBVMsA9?= =?us-ascii?Q?6ZmUXRvQTIcUBdB95+W1Dk8UCML2r/8Lip0AI6tVnzk+uxxClC4od0k/M0kd?= =?us-ascii?Q?KgkyWHoKHMVQoxrGbO8x0EWUJw+tp25QtwRc1avlh0eHKX++WjJO5NhRcHYu?= =?us-ascii?Q?82NoeVCGfhydh12sONMKuZyqCSwu5?= X-Microsoft-Exchange-Diagnostics: 1; DM5PR1201MB2488; 6:lvJDeUnL8jYP/6Cd9WglnbM/fvoSWxLgiF5ZYw6dZx/e27SorTA15uyKmAii8Mt6+3HEgZbvNyGGr+RIfSAqlMvPSsCXqZ/R5pdLCqfsJeIbFdekpxxNntv8o+jl7yXbuVNVhnp/u1S6XtL71NSMrcOkjVd00fdC6T31avyaEHJbmRMXhy7zTlF/9Qep4jfjS4NZnBpnLb6bD+AsLVb4T06QkhY14/odXPW1sb/TS+5n/mUwJJ7hOF9atl2pr53vcRkJiJX2MHQmPhbvVp1+MhDfX1vh6t+PaQi1ty9UcT5NEcbLLLD+HW8R3UaYZHaAUA03Ewm7m5AqsppSJ/PnLZokLqCySBimWrNwD3Dno5s=; 5:Vcb8spm9zFQZivnU2SebUOFSNAFAJ8m7aVuCIYzpMxSnnnsZajpVwKD7e+O+nNuCefIAPI9yFvwzZUXMMriz39pMsHR4X9wXLDlxCC/FYhUvcdmt2eCSzf1WvOySbjijWjjvf0Fe3Siv6SvYBCz+q9RewSCO5SllQlzo5bv8SKE=; 24:zcIxOBhBbOGOgmBpfD/xVVOpK4axNmk9YW1JaQvcUToMU+g4ZzyLm/EK9rixJ4bjbHX7apz7hOECsTI4CjvZXe6jz9oMFJhDNRcTQGiZ4YI=; 7:xaf7TQ56+YtdUpcCdrONUi9aJX78umnluBT5lJkyJWn5g2S+BpfrW9C2JfFRRnSqs1TyAeml/h7+7qM0CSaV3Cxsru8o2i7/lKryImX1Gd1GWczRKLQmRsAgYBKCtlnDGetMps44kdD0I2u+dAvqzm/y9eNRCavNIYNbQhoCZ5aX7iTl7hWFRWTxaY1mDSz2xm5FLkEizpRKjZXeSSitYaS6CldWy+Tiy4xgillVJaxB7h7LrSWJ8QFfVbmd8QH0 SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DM5PR1201MB2488; 20:LniYAuWne2rAi0aVefsuAntzZqcopQqfciH7mUkh/faqVxeFTZF6fD34f/iukfkHvHiIg+SFqnSWAMDBVmiyomu0Fu47ZLIeWh8gTjDjYAhbFGTZFoXdNoMZuka1HgLm24ChwJK+ZzkctNjSlFZ9vYkxR5PBNSkSPebXFNk8kZSOsZo8HZ4izr02x+DEDXJBVTMvd5Tam92zk+oOfM/uG1wIiKtHFwdc9GVD+XWhlFlXhc/dlM3D58SAr6sqx8yh X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Nov 2017 10:42:19.6036 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 457d4e37-afdb-4591-7cdb-08d52827b966 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR1201MB2488 Sender: linux-mmc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-mmc@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Shah Nehal-Bakulchandra This patch supports HS400 for AMD upcoming emmc 5.0 controller.The HS400 and HS200 mode requires hardware work around also. This patch adds the quirks for the same. Signed-off-by: Nehal-bakulchandra Shah --- Changes since v1:(https://patchwork.kernel.org/patch/9813945/) *Reworked on review comments received which has the following: -> Created amd probe slot function. -> Reduce mmc core dependency changes -> Fix some alignment problems. Changes since v2:(https://patchwork.kernel.org/patch/10001487/) -> Implemented set_ios method as suggested by Adrian. -> completely removed mmc core dependencies in the patch. -> moved AMD DLL register definitions to sdhci-acpi.c drivers/mmc/host/sdhci-acpi.c | 80 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/drivers/mmc/host/sdhci-acpi.c b/drivers/mmc/host/sdhci-acpi.c index ac678e9..f171fee 100644 --- a/drivers/mmc/host/sdhci-acpi.c +++ b/drivers/mmc/host/sdhci-acpi.c @@ -49,6 +49,8 @@ #endif #include "sdhci.h" +/* AMD sdhci reset dll register.*/ +#define SDHCI_AMD_REST_DLL_REGISTER 0x908 enum { SDHCI_ACPI_SD_CD = BIT(0), @@ -89,6 +91,43 @@ static inline bool sdhci_acpi_flag(struct sdhci_acpi_host *c, unsigned int flag) return c->slot && (c->slot->flags & flag); } +static int amd_select_drive_strength(struct mmc_card *card, + unsigned int max_dtr, int host_drv, + int card_drv, int *drv_type) +{ + return MMC_SET_DRIVER_TYPE_A; +} + +static void sdhci_acpi_amd_hs400_dll(struct sdhci_host *host) +{ + /*AMD Platform requires dll setting*/ + sdhci_writel(host, 0x40003210, SDHCI_AMD_REST_DLL_REGISTER); + usleep_range(10, 20); + sdhci_writel(host, 0x40033210, SDHCI_AMD_REST_DLL_REGISTER); +} + +/* + * For AMD Platform it is required to disable the tuning + * bit first controller to bring to HS Mode from HS200 + * mode, later enable to tune to HS400 mode. + */ + +static void amd_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) +{ + struct sdhci_host *host = mmc_priv(mmc); + unsigned int old_timing = host->timing; + + sdhci_set_ios(mmc, ios); + if (old_timing == MMC_TIMING_MMC_HS200 && + ios->timing == MMC_TIMING_MMC_HS) + sdhci_writew(host, 0x9, SDHCI_HOST_CONTROL2); + if (old_timing != MMC_TIMING_MMC_HS400 && + ios->timing == MMC_TIMING_MMC_HS400){ + sdhci_writew(host, 0x80, SDHCI_HOST_CONTROL2); + sdhci_acpi_amd_hs400_dll(host); + } +} + static void sdhci_acpi_int_hw_reset(struct sdhci_host *host) { u8 reg; @@ -123,6 +162,17 @@ static const struct sdhci_acpi_chip sdhci_acpi_chip_int = { .ops = &sdhci_acpi_ops_int, }; +static const struct sdhci_ops sdhci_acpi_ops_amd = { + .set_clock = sdhci_set_clock, + .set_bus_width = sdhci_set_bus_width, + .reset = sdhci_reset, + .set_uhs_signaling = sdhci_set_uhs_signaling, +}; + +static const struct sdhci_acpi_chip sdhci_acpi_chip_amd = { + .ops = &sdhci_acpi_ops_amd, +}; + #ifdef CONFIG_X86 static bool sdhci_acpi_byt(void) @@ -269,6 +319,26 @@ static int bxt_get_cd(struct mmc_host *mmc) return ret; } +static int sdhci_acpi_emmc_amd_probe_slot(struct platform_device *pdev, + const char *hid, const char *uid) +{ + struct sdhci_acpi_host *c = platform_get_drvdata(pdev); + struct sdhci_host *host; + + host = c->host; + sdhci_read_caps(host); + if (host->caps1 & SDHCI_SUPPORT_DDR50) + host->mmc->caps = MMC_CAP_1_8V_DDR; + + if ((host->caps1 & SDHCI_SUPPORT_SDR104) && + (host->mmc->caps & MMC_CAP_1_8V_DDR)) + host->mmc->caps2 = MMC_CAP2_HS400_1_8V; + + host->mmc_host_ops.select_drive_strength = amd_select_drive_strength; + host->mmc_host_ops.set_ios = amd_set_ios; + return 0; +} + static int sdhci_acpi_emmc_probe_slot(struct platform_device *pdev, const char *hid, const char *uid) { @@ -370,6 +440,14 @@ static const struct sdhci_acpi_slot sdhci_acpi_slot_qcom_sd = { .caps = MMC_CAP_NONREMOVABLE, }; +static const struct sdhci_acpi_slot sdhci_acpi_slot_amd_emmc = { + .chip = &sdhci_acpi_chip_amd, + .caps = MMC_CAP_8_BIT_DATA | MMC_CAP_NONREMOVABLE | MMC_CAP_HW_RESET, + .quirks = SDHCI_QUIRK_32BIT_DMA_ADDR | SDHCI_QUIRK_32BIT_DMA_SIZE | + SDHCI_QUIRK_32BIT_ADMA_SIZE, + .probe_slot = sdhci_acpi_emmc_amd_probe_slot, +}; + struct sdhci_acpi_uid_slot { const char *hid; const char *uid; @@ -393,6 +471,7 @@ static const struct sdhci_acpi_uid_slot sdhci_acpi_uids[] = { { "PNP0D40" }, { "QCOM8051", NULL, &sdhci_acpi_slot_qcom_sd_3v }, { "QCOM8052", NULL, &sdhci_acpi_slot_qcom_sd }, + { "AMDI0040", NULL, &sdhci_acpi_slot_amd_emmc}, { }, }; @@ -409,6 +488,7 @@ static const struct acpi_device_id sdhci_acpi_ids[] = { { "PNP0D40" }, { "QCOM8051" }, { "QCOM8052" }, + { "AMDI0040" }, { }, }; MODULE_DEVICE_TABLE(acpi, sdhci_acpi_ids);