From patchwork Wed Apr 13 17:13:40 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Philippe REYNES X-Patchwork-Id: 1616869 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=softathome1.onmicrosoft.com header.i=@softathome1.onmicrosoft.com header.a=rsa-sha256 header.s=selector1-softathome1-onmicrosoft-com header.b=dD/VSJt6; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4Kdq2b31Bkz9sGP for ; Thu, 14 Apr 2022 03:14:31 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 1AF6E83E57; Wed, 13 Apr 2022 19:13:58 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=softathome.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=softathome1.onmicrosoft.com header.i=@softathome1.onmicrosoft.com header.b="dD/VSJt6"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id A307483E40; Wed, 13 Apr 2022 19:13:51 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,SPF_HELO_PASS,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from FRA01-PR2-obe.outbound.protection.outlook.com (mail-pr2fra01on0627.outbound.protection.outlook.com [IPv6:2a01:111:f400:7e18::627]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 932DA83E44 for ; Wed, 13 Apr 2022 19:13:46 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=softathome.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=philippe.reynes@softathome.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=OEUx5110fppRG9XAfaWfR0rx5LHLCmpk9Vu2Hj3pkyv9WgsVoMNKFTWPhEyjtejDc9fEbJeAQGZ0R17pBqWHAus/X7lFy9Jihd2NRQUvLP685c+2Xw+pqv42bLRLdy91lKZAWdGT5gwbvc/7+QP9PtV66hCh+1QcL4c7VixGBCu68D7+BoqDUg8PqbPV5Qc8ie/JvQOMTV4drd8sw2EWUoX4KcQiKtzmuEqh9ycvQv9kuWnMiLrpIZCOgOzZM4ewidFI/WuzXYXhoHZ326g34S68t+I5d5EkZrgGepVxno3BZ/+Rlu/nI9PCWpCtWb+h6SYGDhrt0+4KIHiKiBCaBA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=6rLcEJPyi7E2YmYe1MOjc8ZTN3XOYO1Q3ks/QXW2sCA=; b=ZXivLVCVPOE2s/DkCAh/PZ2q3NjaVOnkzPDorsLRS1JqmoiEv/q7ebVhsFAokAh/CvCGaUsW+WmrSFSe0JsdwUACzYnWecG1mlLHjixxZdfkjHaoHzlrKejcmacwdSQ2i4anF1oxEWdE2xP/wMuusvXYAsDYjJHrm/TjbrEorFRO654429YWN6kpU/dzoO1VYPPKEs4yFTaHcSZ9tsfCDcOE4Anft2mdNaj3WULrZ6NE3TfhdrTY4ti5zuM7V3+VFPOpsVAcqjqKGof1rOaqWJad6p/r1oakMEJpSl1LX9ehKbVfYmq9eR70CodvcQEOFJE5/uyXF/hevDp1UJj0cA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 149.6.166.170) smtp.rcpttodomain=lists.denx.de smtp.mailfrom=softathome.com; dmarc=bestguesspass action=none header.from=softathome.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=softathome1.onmicrosoft.com; s=selector1-softathome1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6rLcEJPyi7E2YmYe1MOjc8ZTN3XOYO1Q3ks/QXW2sCA=; b=dD/VSJt6bFSRpkEF1SgeZGPJN2+aVncpYDfIXLvYM7c6pZK8OIpiUCAXJUUH1zWTh33ZfEc8Rdh8dYZJF04f4X/XXXAZ7DOr9EJnsZ/889RAdCgkVZqVGNIIljNC43RmwrrBpi75UwHIB9lPQxIW4p85bGdZULVKQVfb75eIZLDEAjvHWQs2tgniJuu6Zat4YiwTsFSkZDP/x2JRa2re1U4W+oJ4SzOkSNgtd1Y48z0orglHzVn+9Y+6UkY5dsbkBwAoBV5AkmScEl8QWlXiCao1JbytyM4dpDe5rlxDTqobQb4mY1HyhODafXEwChDP/3N2iHYNnamgYrUVxpVctQ== Received: from MR2P264CA0028.FRAP264.PROD.OUTLOOK.COM (2603:10a6:500::16) by PR0P264MB2156.FRAP264.PROD.OUTLOOK.COM (2603:10a6:102:16d::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5144.29; Wed, 13 Apr 2022 17:13:45 +0000 Received: from MR2FRA01FT009.eop-fra01.prod.protection.outlook.com (2603:10a6:500:0:cafe::78) by MR2P264CA0028.outlook.office365.com (2603:10a6:500::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5164.20 via Frontend Transport; Wed, 13 Apr 2022 17:13:45 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 149.6.166.170) smtp.mailfrom=softathome.com; dkim=none (message not signed) header.d=none;dmarc=bestguesspass action=none header.from=softathome.com; Received-SPF: Pass (protection.outlook.com: domain of softathome.com designates 149.6.166.170 as permitted sender) receiver=protection.outlook.com; client-ip=149.6.166.170; helo=proxy.softathome.com; Received: from proxy.softathome.com (149.6.166.170) by MR2FRA01FT009.mail.protection.outlook.com (10.152.50.175) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5164.19 via Frontend Transport; Wed, 13 Apr 2022 17:13:44 +0000 Received: from sah1lpt571.softathome.com (unknown [192.168.75.67]) by proxy.softathome.com (Postfix) with ESMTPSA id 80F4520061; Wed, 13 Apr 2022 19:13:44 +0200 (CEST) From: Philippe Reynes To: peng.fan@nxp.com, jh80.chung@samsung.com Cc: u-boot@lists.denx.de, Philippe Reynes Subject: [PATCH 1/4] drivers: mmc: bcm63158_sdhci: initial support Date: Wed, 13 Apr 2022 19:13:40 +0200 Message-Id: <20220413171343.178153-2-philippe.reynes@softathome.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220413171343.178153-1-philippe.reynes@softathome.com> References: <20220413171343.178153-1-philippe.reynes@softathome.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ea4c841b-2f6d-496f-532c-08da1d70f74b X-MS-TrafficTypeDiagnostic: PR0P264MB2156:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: g95NeS/RKHH5e6SQV5Db9T4J3DBpzYzdmdkUcMLJjsKK+8/UWUNdtnIhIY9IQHKobut+meHXHI32L+fUDwlmMCK28AvMo/r89tCP1fp/80n7HMQ7l0WGYCFQhIAfxo3YX+nmzqPErqUktq8yXZtRRA91xTbE5uopP4Lk45XHYJVdN8QeR2akYKcWD3RcKnkIghYHVi45Lbc3wbWDRnElufT43H/dv66ZVMIMhgKiPqXMhpHBf1u5Dh1ieZDQmoS/l3ew7/LZAIby/VYBSUDgf+WshnBJ6hrggFVQpR7SRo56gY7+DnqxIMPPt+ZleTFKJk7ors0x9fdgVxYWM0jgZxJ45C378wFajOUt3twidngnwDQyanAO/TspVRMQZ4Y7AK0tOI/c9fDsmNlWSxT9bi4arHfrSDFZZu8rSefyJrmZDKVVMpv5eF677C0kgCfzkq+8QeL6Yp7xywVKXskue2Ad01gEWlvxqnh+YUqmEY07ZhuujyvcA/1IeZb5hzWxVGn/t7/uR9lVApcHeNQY3YZ025wiFdzsgT1xIqjOy6cU1tN1SeIBMUd3pMSc9i0JzX8NWnOdIcmicqoSlO6zxj00yIT1lFTMnrHrS4LyLOCnCvvipPrgCaCRE9ktLiifcVOAHd9F3j69gla04TIJX9RlRhQZx59l5tUMQPaqTQAsca/r1rOXEbCT+kkzvkYGZOU7ij84FftY+ncW99pJMQ== X-Forefront-Antispam-Report: CIP:149.6.166.170; CTRY:FR; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:proxy.softathome.com; PTR:InfoDomainNonexistent; CAT:NONE; SFS:(13230001)(4636009)(46966006)(36840700001)(40470700004)(70206006)(40460700003)(36860700001)(1076003)(86362001)(186003)(6266002)(7696005)(36756003)(81166007)(356005)(508600001)(426003)(82960400001)(2906002)(26005)(82310400005)(8936002)(2616005)(70586007)(336012)(107886003)(44832011)(47076005)(316002)(6966003)(5660300002)(8676002)(6666004)(4326008)(83380400001)(36900700001); DIR:OUT; SFP:1101; X-OriginatorOrg: softathome.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Apr 2022 17:13:44.8016 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ea4c841b-2f6d-496f-532c-08da1d70f74b X-MS-Exchange-CrossTenant-Id: aa10e044-e405-4c10-8353-36b4d0cce511 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=aa10e044-e405-4c10-8353-36b4d0cce511; Ip=[149.6.166.170]; Helo=[proxy.softathome.com] X-MS-Exchange-CrossTenant-AuthSource: MR2FRA01FT009.eop-fra01.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR0P264MB2156 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.5 at phobos.denx.de X-Virus-Status: Clean Adds a driver to support shdci on bcm63158. Signed-off-by: Philippe Reynes --- drivers/mmc/Kconfig | 12 +++ drivers/mmc/Makefile | 1 + drivers/mmc/bcm63158_sdhci.c | 153 +++++++++++++++++++++++++++++++++++ 3 files changed, 166 insertions(+) create mode 100644 drivers/mmc/bcm63158_sdhci.c diff --git a/drivers/mmc/Kconfig b/drivers/mmc/Kconfig index f04cc44e19..a08e8245cf 100644 --- a/drivers/mmc/Kconfig +++ b/drivers/mmc/Kconfig @@ -520,6 +520,18 @@ config MMC_SDHCI_BCM2835 If unsure, say N. +config MMC_SDHCI_BCM63158 + bool "SDHCI support for the BCM63158 SD/MMC Controller" + depends on ARCH_BCM63158 + depends on MMC_SDHCI + help + This selects the BCM63158 SD/MMC controller. + + If you have a BCM63158 platform with SD or MMC devices, + say Y here. + + If unsure, say N. + config MMC_SDHCI_BCMSTB tristate "SDHCI support for the BCMSTB SD/MMC Controller" depends on MMC_SDHCI diff --git a/drivers/mmc/Makefile b/drivers/mmc/Makefile index 17ebc04203..5cebd55549 100644 --- a/drivers/mmc/Makefile +++ b/drivers/mmc/Makefile @@ -55,6 +55,7 @@ obj-$(CONFIG_MMC_SDHCI) += sdhci.o obj-$(CONFIG_MMC_SDHCI_ASPEED) += aspeed_sdhci.o obj-$(CONFIG_MMC_SDHCI_ATMEL) += atmel_sdhci.o obj-$(CONFIG_MMC_SDHCI_BCM2835) += bcm2835_sdhci.o +obj-$(CONFIG_MMC_SDHCI_BCM63158) += bcm63158_sdhci.o obj-$(CONFIG_MMC_SDHCI_BCMSTB) += bcmstb_sdhci.o obj-$(CONFIG_MMC_SDHCI_CADENCE) += sdhci-cadence.o obj-$(CONFIG_MMC_SDHCI_AM654) += am654_sdhci.o diff --git a/drivers/mmc/bcm63158_sdhci.c b/drivers/mmc/bcm63158_sdhci.c new file mode 100644 index 0000000000..42295d113d --- /dev/null +++ b/drivers/mmc/bcm63158_sdhci.c @@ -0,0 +1,153 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright (C) 2022 Philippe Reynes + * + * based on: + * drivers/mmc/bcmstb_sdhci.c + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* 400KHz is max freq for card ID etc. Use that as min */ +#define MIN_FREQ 400000 + +#define BCM63158_MMC_BOOT_MAIN_CTL_REG 0x0 +#define BCM63158_MMC_BOOT_STATUS_REG 0x4 +#define BCM63158_MMC_BOOT_MODE_MASK 1 + +struct sdhci_bcm63158_plat { + struct mmc_config cfg; + struct mmc mmc; +}; + +static int sdhci_bcm63158_bind(struct udevice *dev) +{ + struct sdhci_bcm63158_plat *plat = dev_get_plat(dev); + + return sdhci_bind(dev, &plat->mmc, &plat->cfg); +} + +static int sdhci_bcm63158_set_normal_mode(void *boot_regs) +{ + void *boot_main_ctl_reg = boot_regs + BCM63158_MMC_BOOT_MAIN_CTL_REG; + void *boot_status_reg = boot_regs + BCM63158_MMC_BOOT_STATUS_REG; + u32 status; + int i, max_retry = 10; + int ret = -1; + + status = readl(boot_status_reg); + if ((status & BCM63158_MMC_BOOT_MODE_MASK) == 0) { + ret = 0; + goto out; + } + + clrbits_32(boot_main_ctl_reg, BCM63158_MMC_BOOT_MODE_MASK); + + for (i = 0; i < max_retry; i++) { + status = readl(boot_status_reg); + if ((status & BCM63158_MMC_BOOT_MODE_MASK) == 0) { + ret = 0; + goto out; + } + + mdelay(10); + } + + log_err("%s: can't set mode normal\n", __func__); + + out: + return ret; +} + +static int sdhci_bcm63158_probe(struct udevice *dev) +{ + struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev); + struct sdhci_bcm63158_plat *plat = dev_get_plat(dev); + struct sdhci_host *host = dev_get_priv(dev); + struct resource res; + void *boot_regs; + int ret; + + host->name = dev->name; + + /* Get sdhci controller base address */ + ret = dev_read_resource_byname(dev, "sdhci-base", &res); + if (ret) { + dev_err(dev, "can't get regs sdhci-base address(ret = %d)!\n", ret); + return ret; + } + + host->quirks |= SDHCI_QUIRK_WAIT_SEND_CMD; + host->ioaddr = devm_ioremap(dev, res.start, resource_size(&res)); + if (IS_ERR(host->ioaddr)) + return PTR_ERR(host->ioaddr); + + /* Get sdhci boot controller base address */ + ret = dev_read_resource_byname(dev, "sdhci-boot", &res); + if (ret) { + dev_err(dev, "can't get regs sdhci-boot address(ret = %d)!\n", ret); + return ret; + } + + boot_regs = devm_ioremap(dev, res.start, resource_size(&res)); + if (IS_ERR(boot_regs)) + return PTR_ERR(boot_regs); + + /* Set normal mode instead of boot mode */ + ret = sdhci_bcm63158_set_normal_mode(boot_regs); + if (ret) + return ret; + + ret = mmc_of_parse(dev, &plat->cfg); + if (ret) + return ret; + + /* + * see commit: + * 425d83346d7 ("mmc: bcm: fix uninitialized pointer deref on probe") + * + * Since commit + * 3d296365e4e8 ("mmc: sdhci: Add support for sdhci-caps-mask") + * the function sdhci_setup_cfg() xpects a valid sdhci_host mmc field. + */ + host->mmc = &plat->mmc; + host->mmc->dev = dev; + + /* Use default max frequency from caps register */ + ret = sdhci_setup_cfg(&plat->cfg, host, + 0, + MIN_FREQ); + if (ret) + return ret; + + upriv->mmc = &plat->mmc; + host->mmc = &plat->mmc; + host->mmc->priv = host; + + return sdhci_probe(dev); +} + +static const struct udevice_id sdhci_bcm63158_match[] = { + { .compatible = "brcm,bcm63158-sdhci" }, + { } +}; + +U_BOOT_DRIVER(sdhci_bcm63158) = { + .name = "sdhci-bcm63158", + .id = UCLASS_MMC, + .of_match = sdhci_bcm63158_match, + .ops = &sdhci_ops, + .bind = sdhci_bcm63158_bind, + .probe = sdhci_bcm63158_probe, + .priv_auto = sizeof(struct sdhci_host), + .plat_auto = sizeof(struct sdhci_bcm63158_plat), +};