From patchwork Fri Nov 24 10:22:35 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: 10073921 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 8192560383 for ; Fri, 24 Nov 2017 10:23:13 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 716EB2A38C for ; Fri, 24 Nov 2017 10:23:13 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6646C2A391; Fri, 24 Nov 2017 10:23:13 +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 4F9D22A38C for ; Fri, 24 Nov 2017 10:23:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753292AbdKXKXL (ORCPT ); Fri, 24 Nov 2017 05:23:11 -0500 Received: from mail-by2nam03on0073.outbound.protection.outlook.com ([104.47.42.73]:35424 "EHLO NAM03-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753247AbdKXKXJ (ORCPT ); Fri, 24 Nov 2017 05:23:09 -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=++F1DE2XlVAfQady35vAp/boc5IwGeEPwk81eBMzMok=; b=SYDPvyNDCVnF1mqvyf4ojlkiIcQFNDbpLYj7d+F3TCZi7cSSB5orc4gxEZLTUk4EmykfjAwxvpyyNhYJPk2+aTpuyDse6KU4iJyvmUdK88b5a7KVrVet06SsLBJcNrfnWLAQMFoqwpj/B/KuupxJO7JHF5nx2v4di7P8CXtjGNg= 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_P256) id 15.20.260.4; Fri, 24 Nov 2017 10:23:05 +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 v4] mmc: sdhci-acpi: Add support for ACPI HID of AMD Controller with HS400 Date: Fri, 24 Nov 2017 15:52:35 +0530 Message-Id: <1511518955-29641-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: BM1PR01CA0102.INDPRD01.PROD.OUTLOOK.COM (10.174.208.18) To DM5PR1201MB2488.namprd12.prod.outlook.com (10.172.87.138) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(48565401081)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(2017052603258); SRVR:DM5PR1201MB2488; X-Microsoft-Exchange-Diagnostics: 1; DM5PR1201MB2488; 3:Ydq4hSsDpXOPqyCjHDMARqtyE6S0e65t+NkTQWV6z8Ln5E6+cQhznEi+Lk+Rm9Yx07EWhZ3ZU8ml/kfblJIIR4rvFkojwn1bAfpBJuNEWRyDajmwZOhv6sSV6iNyLpDWKb2OIg0xD4Z31N1gbKIoWDVcOwe2OayTCPx1GP1mkBZ6rKtWwgd4pEfADibeL+DXguyK1xud3QxYuTfcOHe4PRbN1u0UvtYbcPjNVolILbilsXjslEB6QxVICrnH7Acx; 25:USXH6AwXCtjLuqdSFOcjG9lmmpILpT6BcmLe37+qBaXS1N6rLK8dlXyTh87bp5OMldFh4AfM3f2Q6cwSBU7GYxB8VE2pvhuXdD59UaV5MkhfUbOMJNki5aV9MxcfOQ1pJAX3MMAgN7bgZIkokdMbsltU2oMQFxS2Wb2O13kEjzXtiJZ9/SjrWiFDE85lN+lt3gV9pzC8xtFoZhBohN/NkoMRMyrX/m5Gq4pfTSPTPuMIGAJMNRX/KPEukgrPic/YwZHBup6LGYJwVpdFgV4MaRxcG1EBHZ+mXQztasweGKuHPUgvuE8tuXoPFCSAkh2NXYTZsiOaFOOibvYpxTuuYw==; 31:I3ZSwdj/yoUBv+uQPxC6mihL9Dq/S2W7BZVrNZYKaF10kiK2fjV/eUTIOpy4hk++fMT9VFL05suyiOgZF6JrkSW9OvVTrHAR7geEKck0zVUQ7stsyhxw3XrTWcIP50s0Rl5SCz7eHnQ3owGjV1GdDMAcZ+Sp4BOq9W8wSVGXjUbchdIXJ93NJltE2qGdj1YQ9tN6sww98Ws7Zmc0fU/Xw+3yYNTxx/VECnzjdWsqM2o= X-MS-TrafficTypeDiagnostic: DM5PR1201MB2488: X-MS-Office365-Filtering-Correlation-Id: b7de2ed5-bd82-4a17-60e6-08d533255b16 X-Microsoft-Exchange-Diagnostics: 1; DM5PR1201MB2488; 20:mFLKVFuasnKtmk/A1j0o80ZLG2u9EhhIw3HP6W7TlFfjYtCJHt1/sE9wVHNu9GW8DWEBbCImHHQJ4QMDD+cbnonz4hsn0FzPvA6y++mVwZDqHolImkaQ6lrZKkAoxJd4rHpsoc0IBI6be88ZZMUvqB9Z8wESptQtDV8rgVPXFB/g91JvN6ErNybBs5uiQe+qBXoPE4cLttTfF8LJbMOzECUhN5RXamgmJr5LQ4sbt4EyLrKguKHqPz62iRuTPrxgRyzQnUXXVQDEJSc3P6SNqkSvuFWCXpI7IkGEVp5haYY0qLXCtv/VFA9NS/yw1R1h+dnfKVK9+nbdorF6gOTrzEypZ7ghuy1qQGDGYC1uTU3FIaSnBEtBZAuRxS3IDSz4C/aRC7b3Puu84zovSYJa1vhEiRUKn4I9S71RFNPNrwuxIzCHsWGgMwsTzUtAfB/GBZRaGHASteJdLmpSrDb6M7CTSxkU3cR6WnufSbehf/LqBYsMF3MfasNmMdY2U3Fz; 4:XsiqO+8vDBsr0xnxh1ZIzr1ZJqoX8grpCIJYfNE2Jmg32Suv6Q6/AstOTMeYWR89oN4aRnRIzR/93+7XsF1+vD8lLt0+eSzNbTpOBtYR0Gpj2DDqY5a45KpM1FuPmDdfy7IU1QGrp/mR2+PjPLn2GFf2MqMVEJ5jEek2d6B6n0jzNZ1jkqx/1Gy+j+PuclpH7nppeRmGYQUfJOrda5pZpQoZeBCpZ6kaW+nhBh9aPVz4Gx0Re1Pq4xl6ySf1lx/EmewHJ+kpTIpW3rIBYuqssVWZCYsHqUTjqdFjE3jF7Xzg7UJQSrQ/BsXqFeebRea+ X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040450)(2401047)(5005006)(8121501046)(3002001)(93006095)(93001095)(3231022)(10201501046)(6055026)(6041248)(20161123560025)(20161123558100)(20161123562025)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123555025)(6072148)(201708071742011); SRVR:DM5PR1201MB2488; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:DM5PR1201MB2488; X-Forefront-PRVS: 05015EB482 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(39860400002)(376002)(366004)(346002)(199003)(189002)(81166006)(97736004)(6486002)(3846002)(6116002)(81156014)(101416001)(72206003)(8676002)(53936002)(6306002)(16526018)(2906002)(36756003)(51416003)(53416004)(305945005)(52116002)(7736002)(50986999)(47776003)(106356001)(16586007)(66066001)(50466002)(48376002)(316002)(189998001)(5660300001)(86362001)(25786009)(8936002)(68736007)(6666003)(575784001)(4326008)(50226002)(105586002)(478600001)(7696005)(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) Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Nehal-bakulchandra.Shah@amd.com; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM5PR1201MB2488; 23:LS+M/4o47kvMVg76w0qDbuQxVg/ieaUJsMA6njg?= =?us-ascii?Q?4OwdfbKXU3cQFx9ht1l4W5F9wja+HeAo3jxHFcglEEnT31FQtXbSoihjYASc?= =?us-ascii?Q?tbncLYrRUKEqfovoEz1rBpS3WhMbo50CzDNNFyJcSr8U/afULqAon0Hdm/ul?= =?us-ascii?Q?f+p2/bvBaHUGjT25zxYRY8hNaah2BHGonMecj48ndEEq+0k8an/Runzb7hvF?= =?us-ascii?Q?VpsYa5jNv76nsBSoBGUJas0jMuzSFkZgmOw707PVnHgIXF6BNO1unCVz5d7f?= =?us-ascii?Q?oTRHAjUqxtyKfz0Cc+xTw7Zu1BS9MOcwUcst4c7eirUJz8VmqLUgehNvlru8?= =?us-ascii?Q?AotLGvdKlUgmxFCDMI0LwloYTpbY36Kt16vaqIxmLDGaqVjqQjxQD+JsfE32?= =?us-ascii?Q?wJ1g5LicftWcAj2qSTk4U8kLLo8ZZkXL45J/jgzELwNgBVK/oPSTjT7gUGgv?= =?us-ascii?Q?1zwtSX2sDE87Q45tfMG9UMfpa4z0WWnVAJp+BJCpm4IUlycL2DohhaBXINUZ?= =?us-ascii?Q?OYhX2BwVhhrNQ6mHrpPgoWr/q3AJYQ6OhgQkMYzlWxFWBSRImpRjurGBbrZi?= =?us-ascii?Q?qb1+fyrufPthta7oHhxYuK4re9ndQw+LgIFMDiiBOmzViERO4O9bLTcnV/B3?= =?us-ascii?Q?1uv75K+MRfkVHKYOcQccdRvl/6C9n6vmbj5M2MgDOihI6OeQA7Zov0mZNuTk?= =?us-ascii?Q?QqDaWBbFSHqsGqg1uHQ1WpY/vDjffeOW8kYBcsCejCxgUnzlV3GDx92I0PSY?= =?us-ascii?Q?0ACZKSA1rBWgK1UY97qA+TqubGQ0aBa0jQzS9oT5qsPZsB7cJmhIfKIUvkO6?= =?us-ascii?Q?N7EnvJ6fO9ZRRuIjODexmH2gyVXZZZeuUhg8HXV9vDfQDHCztb4hTeghl87j?= =?us-ascii?Q?dMSynlEUXJqL3YnsHHatYzLGaDosBKmt0E6AwSM2PV1MD13hF1qKZWVFsgsq?= =?us-ascii?Q?p1yHCxe+MHhm9UzpyCFpvPLIVcbdidhgXkuNoFKuxFt6Uv0U+3a9iwQgLTm9?= =?us-ascii?Q?S3jToE9GZmoDgwNkADIVZ5rf9ARlyc1ihXaYPt2eF1UWnSb2cqUz08cEx3Gx?= =?us-ascii?Q?GyJ1EBAqlx/v0MuJVzLyDo6Mh+z8ykBjkmlAqSecLQerJPVVWvR5uDi31eD/?= =?us-ascii?Q?cOU/fklzzWSI=3D?= X-Microsoft-Exchange-Diagnostics: 1; DM5PR1201MB2488; 6:popc8cZqU9NS5PLeRUj8E57k+QeyKFv63fTkv2R6TDw0Rz8G0UYe6Au84aG1NTCEgqA+LE8K2A+tWZtFSacJ+uGyUoukeg4PJw1D8ukPdoiD9RRJAHcUdekDu0G3tjYNrB4Uv45QNw2EKXcHpPnsHoxIQ+3gISv41XSYJiF2pEd+JfyzM52Qgdkw7XwJBAkY3gi9vDjmoLnOUTnc5sqNhfjE825klGey/d3GCYpvZDozBaQTyIz2N4AcIg0ZgTImKjJE1GDZim7RHCoebesTTTLt0bhiUhhTxcl/pWkleAu4T04NOejtUXMiwEOav67zTkIxgHSFStxAwnZNqeUL3IRr0SYRa9OIofDcjYcUgLk=; 5:0iNTA6HUJqZJyENrwl7lV9vwFnyZktw8L6h/RC7LEzRn05a7M5fAYoI2QY6z+l9KE5KtvBlbNsxhfF6gwh9L8R5mrVS6ZChyJZgZNZ+SS61IDCgxhmd+ii5kMl2vK/LDpNguFZ7vnP+y7Jgpey11MMESpeiJzO+Ur9FId5+ReEk=; 24:3yo9nxAcOTDRc1BTDhavRAjQltGgTEGmhUpY4l77WbYVs1VK+F4FuoYhv4lmtiXMAdsWodvuKRVe45WK7/W2+JE2Xoy6Ior7ziwpkuGfPZI=; 7:0Nn9t8WdfvzUMtwQt7MtbYGw85FN7vwjtoMD2d0SI+ypobJEO7EtPmM47lydbbX3t70JuiKBrIY5Sby1V06hRtTJFWRi3l1yGRYfWLNjvpvLC2Bc4AT8PNbQm+Ta/rZIRB89FyT4Cz1E9YzDUwI3QX9ixJG7vrPFCU++ZAbZBEj4Xr9O9BaU4F0S0kYvI54KezTc81r87VYRtJZnC/i5mHqKH1q+wJdRwRbFhL7avbv9Be3hydBLSY2LR23RAW4E SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DM5PR1201MB2488; 20:smOLsXFM+gQ4g6897ZwIJudphK8j5ddPdp2pGdRggVLMncmpp1znf9HM/0xbKfCEwevHhUVCzQ4EyBWUAQdFFUoV0eAZpKiSgIAj2gmWMYiUTMZWeBjs4M7d8YWJXZgrau1yRk7cAx6Gbuqj84hvuXu4D3TW1c1a3gcYp9Ffcyp77CHDMJ+1XFHCV9KRX7h3NIXjXNEmzfGYqnDCY/FWpRnjYoLdKL/3tMEjIsitro9f+loooPgwOs6z5ZpzJaPH X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Nov 2017 10:23:05.4199 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: b7de2ed5-bd82-4a17-60e6-08d533255b16 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. HS400 and HS200 mode requires hardware work around also. This patch adds the quirks for the same. Signed-off-by: Nehal-bakulchandra Shah Acked-by: Adrian Hunter --- 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 Changes since v3:(https://patchwork.kernel.org/patch/10052811/) ->Minor alignment changes suggested by Adrain drivers/mmc/host/sdhci-acpi.c | 78 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/drivers/mmc/host/sdhci-acpi.c b/drivers/mmc/host/sdhci-acpi.c index ac678e9..0b968e6 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_RESET_DLL_REGISTER 0x908 enum { SDHCI_ACPI_SD_CD = BIT(0), @@ -370,6 +372,80 @@ static const struct sdhci_acpi_slot sdhci_acpi_slot_qcom_sd = { .caps = MMC_CAP_NONREMOVABLE, }; +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_RESET_DLL_REGISTER); + usleep_range(10, 20); + sdhci_writel(host, 0x40033210, SDHCI_AMD_RESET_DLL_REGISTER); +} + +/* + * For AMD Platform it is required to disable the tuning + * bit first and controller is required to bring to HS Mode from HS200 + * mode.Later enable tuning bit to bring 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 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, +}; + +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 = 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 const struct sdhci_acpi_slot sdhci_acpi_slot_amd_emmc = { + .chip = &sdhci_acpi_chip_amd, + .caps = MMC_CAP_8_BIT_DATA | MMC_CAP_NONREMOVABLE, + .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 +469,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 +486,7 @@ static const struct acpi_device_id sdhci_acpi_ids[] = { { "PNP0D40" }, { "QCOM8051" }, { "QCOM8052" }, + { "AMDI0040" }, { }, }; MODULE_DEVICE_TABLE(acpi, sdhci_acpi_ids);