From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D8C10C48BCF for ; Sat, 12 Jun 2021 10:56:50 +0000 (UTC) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E17AA6120E for ; Sat, 12 Jun 2021 10:56:49 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E17AA6120E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=outlook.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id BF04180563; Sat, 12 Jun 2021 12:56:43 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=outlook.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=outlook.com header.i=@outlook.com header.b="vDk71fxE"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 6CA3A80808; Sat, 12 Jun 2021 12:56:42 +0200 (CEST) Received: from APC01-HK2-obe.outbound.protection.outlook.com (mail-hk2apc01olkn0801.outbound.protection.outlook.com [IPv6:2a01:111:f400:febc::801]) (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 12EC580412 for ; Sat, 12 Jun 2021 12:56:38 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=outlook.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=tianrui-wei@outlook.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=C96WZ3/8sOFT1JA/AVDCDg0cZsv06pR7HKAJUMEoVnQx0JDcvFt2dMF0UEfomkMp18RHTOEGpesppaNOy9530xoTZ0IJi1nEi9K4b15Nrk7bXzYFE2oSjhSt3nTL9n2ATMyhdIPltmEqFQ14j07ZjYEdfsRNHWPmtLHTC8SPQy7FVYIq5Y/GQvZq+C0l621iKZmgf+9aAd9zsrjLwFOG8Y1BeTZyXMO1wmyY/7Hioe7PBApb0jrykzp6lwYUm1EXoK9LI/7nIXTA6Bvlf4d/DXmbOZOM2sKwFiGYaEB+MA8cbYeYJJyWYBqFx8xP3laMYJrZgDajzv/nxAlRuBN78Q== 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-SenderADCheck; bh=q8sV79qMTw07ECMfio95SWAAMHNcl+fc4sIkdQn8yYg=; b=Hd1e4Rd4+1o981mRDUbp46qMh1RY7WdviGs/H/DZAaqtz4LwdznhnhnK6R54NDMmwgYxDOd4v/7jv95BCpWV2WSOYaGQKLG3iNsU/W9WQHHOu6gRtSh8w3CjOwyO7+JJNAAOlfvHRCsFLtyIvuo0m8X2gv+RApKTGcBj25Pv8YHVyRKplEU9lt5q+g9tfFWyb/8AbdT6g3j/7Y8H5KDfhyd9ia3KaoIyg4Yc9LMWydAlsQewe+shK6Hywjswh+RS0rBA7MAfchxkMwZi07cqvC+i/KRBcB7dGDyubZNDBjwoMpnB3iaNwO10l4DKaE0FlB7oL5N7IZPjXnx6CBHwFQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=q8sV79qMTw07ECMfio95SWAAMHNcl+fc4sIkdQn8yYg=; b=vDk71fxE9DqzlPF9y8FOdzrcAf+5qFGsoBUVgRhw9KupZ14IMCq4A7i/svLVLfFtJ40IVFnH1f38EMb6rfirCaxxMQ1b21m5YO0e13F1c60CzzXKPNPaF9YPj8YffGP1E/P8c0/+R2uypbBpDTjeb6a9fOYMrWXPWvQ1+7n7e399RB/S61FRNGEV5QSfyg1fYpwIofyN28C7tVquH8Hs4ma/cdbscKsNmWmRI9L1WZvAStO0Tt9RI/3pAa0A6QW52KmTAOC4pgCxZGh2PE0Zn1IBHxKgnznhdjYnC5IVh79BDL8CU6EBCH1M2TOfP14SCZtSMfGZSkFZMzHzCkyy8Q== Received: from PS1PR0401CA0050.apcprd04.prod.outlook.com (2603:1096:803::18) by TY2PR03MB3742.apcprd03.prod.outlook.com (2603:1096:404:5e::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4242.13; Sat, 12 Jun 2021 10:56:34 +0000 Received: from PU1APC01FT020.eop-APC01.prod.protection.outlook.com (2603:1096:803:0:cafe::a7) by PS1PR0401CA0050.outlook.office365.com (2603:1096:803::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4219.21 via Frontend Transport; Sat, 12 Jun 2021 10:56:34 +0000 Received: from SY4PR01MB6798.ausprd01.prod.outlook.com (2a01:111:e400:7ebe::52) by PU1APC01FT020.mail.protection.outlook.com (2a01:111:e400:7ebe::217) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4219.21 via Frontend Transport; Sat, 12 Jun 2021 10:56:33 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:CB4AD2D02DF7889DD6588874EDB1978DD464BB91A747D4D4E2B93DBC97DDF1D3; UpperCasedChecksum:0B7C4F7B8C506E6520326ED17DC1F6E0BF084F4FCDCE97DF8749E3CE4D3CED98; SizeAsReceived:7536; Count:47 Received: from SY4PR01MB6798.ausprd01.prod.outlook.com ([fe80::5476:5394:7bb7:6941]) by SY4PR01MB6798.ausprd01.prod.outlook.com ([fe80::5476:5394:7bb7:6941%2]) with mapi id 15.20.4219.023; Sat, 12 Jun 2021 10:56:33 +0000 From: Tianrui Wei To: u-boot@lists.denx.de Cc: ycliang@andestech.com, rick@andestech.com, peng.fan@nxp.com, jh80.chung@samsung.com, jbalkind@ucsb.edu, seanga2@gmail.com, bmeng.cn@gmail.com Subject: [PATCH v6 2/2] mmc: openpiton: add piton_mmc driver Date: Sat, 12 Jun 2021 18:56:19 +0800 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210612105619.84533-1-tianrui-wei@outlook.com> References: <20210612105619.84533-1-tianrui-wei@outlook.com> Content-Transfer-Encoding: 8bit Content-Type: text/plain X-TMN: [DXIfiE9gAKotPaXkY5RTey40Sch6GgDO] X-ClientProxiedBy: HK2PR02CA0147.apcprd02.prod.outlook.com (2603:1096:202:16::31) To SY4PR01MB6798.ausprd01.prod.outlook.com (2603:10c6:10:137::12) X-Microsoft-Original-Message-ID: <20210612105619.84533-3-tianrui-wei@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from eva-virtual-machine.localdomain (180.160.51.170) by HK2PR02CA0147.apcprd02.prod.outlook.com (2603:1096:202:16::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4219.20 via Frontend Transport; Sat, 12 Jun 2021 10:56:31 +0000 X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 47 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: f80f9239-c56c-4af5-67a9-08d92d90bde7 X-MS-TrafficTypeDiagnostic: TY2PR03MB3742: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Psk3OLuBI6fdDBSZ//x/m8nqX1TWqLFb/7iqHyODkAMTS8UjnYuEapo/wCy7WHDUiVv+sor5U7f0ofvVBASyc5tA8H9K5EGzrGxhv+LmRViA0EtcAVsX4eO59fzkPnqddRts3ZdPJFQqESugP57ClRdAFvywxu7SQ88iJyO09XWRfvg+4HeqsuSTLXE39LI5RaQXrtk+f0/Clc8uyAA0rdKq5Few3R5ydPVGzxCPQYex0vCs3PbIpoh788dB8VycW9/BDl1+mqMxwi7Ox7/CqIrDw3d6mDJWtjabLYxI+Pu/n7IbrWn/Yj5ahbH5/d+XD+cUBrRXNlf11+elL8kX1cMejMhdZpq2pLme44x7LoZnt7b8lYclYOtJ89RmT4RvOsmXyzpD4q+jA6v+kjgq5A== X-MS-Exchange-AntiSpam-MessageData: xD5FrXFLxlLnpDlo8BlZ3A5PjKanJVUrK3Q5oY2mcoIz/TAnWo+mBrHtCgAAz6wmB5ny3NgxmiarEp0hWpExWS1a4OV/e/wn2DUEIloFSVPmBLq8uVM0zqKiPdETdvMV9evlsJScir4hhm6bWsUgGA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f80f9239-c56c-4af5-67a9-08d92d90bde7 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jun 2021 10:56:33.7013 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-AuthSource: PU1APC01FT020.eop-APC01.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY2PR03MB3742 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 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.2 at phobos.denx.de X-Virus-Status: Clean This commit adds support to piton_mmc driver for OpenPiton-riscv64 In particular, this driver - V6 . change type of address . move declarations ahead . loop style update Signed-off-by: Tianrui Wei Signed-off-by: Jonathan Balkind --- drivers/mmc/Kconfig | 9 +++ drivers/mmc/Makefile | 1 + drivers/mmc/piton_mmc.c | 169 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 179 insertions(+) create mode 100644 drivers/mmc/piton_mmc.c diff --git a/drivers/mmc/Kconfig b/drivers/mmc/Kconfig index 8901456967..525b115606 100644 --- a/drivers/mmc/Kconfig +++ b/drivers/mmc/Kconfig @@ -727,6 +727,15 @@ config MMC_SUNXI_HAS_MODE_SWITCH bool depends on MMC_SUNXI +config MMC_PITON + bool "MMC support for openpiton SoC" + depends on DM_MMC && BLK + help + This selects support for the SD host controller on + OpenPiton SoC. Note that this SD controller directly + exposes the contents of the SD card as memory mapped, + so there is no manual configuration required + config GENERIC_ATMEL_MCI bool "Atmel Multimedia Card Interface support" depends on DM_MMC && BLK && ARCH_AT91 diff --git a/drivers/mmc/Makefile b/drivers/mmc/Makefile index 89d6af3db3..cc08b41d0d 100644 --- a/drivers/mmc/Makefile +++ b/drivers/mmc/Makefile @@ -72,6 +72,7 @@ obj-$(CONFIG_MMC_SDHCI_XENON) += xenon_sdhci.o obj-$(CONFIG_MMC_SDHCI_ZYNQ) += zynq_sdhci.o obj-$(CONFIG_MMC_SUNXI) += sunxi_mmc.o +obj-$(CONFIG_MMC_PITON) += piton_mmc.o obj-$(CONFIG_MMC_UNIPHIER) += tmio-common.o uniphier-sd.o obj-$(CONFIG_RENESAS_SDHI) += tmio-common.o renesas-sdhi.o obj-$(CONFIG_MMC_BCM2835) += bcm2835_sdhost.o diff --git a/drivers/mmc/piton_mmc.c b/drivers/mmc/piton_mmc.c new file mode 100644 index 0000000000..de5197646a --- /dev/null +++ b/drivers/mmc/piton_mmc.c @@ -0,0 +1,169 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * (C) Copyright 2009 SAMSUNG Electronics + * Minkyu Kang + * Jaehoon Chung + * Portions Copyright 2011-2019 NVIDIA Corporation + * Portions Copyright 2021 Tianrui Wei + * This file is adapted from tegra_mmc.c + * Tianrui Wei + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct piton_mmc_plat { + struct mmc_config cfg; + struct mmc mmc; +}; + +struct piton_mmc_priv { + void __iomem *piton_mmc_base_addr; /* peripheral id */ +}; + +/* + * see mmc_read_blocks to see how it is used. + * start block is hidden at cmd->arg + * also, initialize the block size at init + */ +static int piton_mmc_send_cmd(struct udevice *dev, struct mmc_cmd *cmd, + struct mmc_data *data) +{ + /* check first if this is a pure command */ + if (!data) + return 0; + + struct piton_mmc_priv *priv = dev_get_priv(dev); + u32 *buff, *start_addr; + size_t byte_cnt, start_block; + + buff = (u32 *)data->dest; + start_block = cmd->cmdarg; + start_addr = priv->piton_mmc_base_addr + start_block; + + /* if there is a read */ + if (data->flags & MMC_DATA_READ) { + for (byte_cnt = data->blocks * data->blocksize; byte_cnt; + byte_cnt -= sizeof(u32)) { + *buff++ = readl(start_addr++); + } + } else { + return -ENOSYS; + } + + return 0; +} + +static int piton_mmc_ofdata_to_platdata(struct udevice *dev) +{ + struct piton_mmc_priv *priv = dev_get_priv(dev); + struct piton_mmc_plat *plat = dev_get_platdata(dev); + struct mmc_config *cfg; + struct mmc *mmc; + /* fill in device description */ + struct blk_desc *bdesc; + + priv->piton_mmc_base_addr = (void *)dev_read_addr(dev); + cfg = &plat->cfg; + cfg->name = "PITON MMC"; + cfg->host_caps = MMC_MODE_8BIT; + cfg->f_max = 100000; + cfg->f_min = 400000; + cfg->voltages = MMC_VDD_21_22; + + mmc = &plat->mmc; + mmc->read_bl_len = MMC_MAX_BLOCK_LEN; + mmc->capacity_user = 0x100000000; + mmc->capacity_user *= mmc->read_bl_len; + mmc->capacity_boot = 0; + mmc->capacity_rpmb = 0; + for (int i = 0; i < 4; i++) + mmc->capacity_gp[i] = 0; + mmc->capacity = 0x2000000000ULL; + mmc->has_init = 1; + + bdesc = mmc_get_blk_desc(mmc); + bdesc->lun = 0; + bdesc->hwpart = 0; + bdesc->type = 0; + bdesc->blksz = mmc->read_bl_len; + bdesc->log2blksz = LOG2(bdesc->blksz); + bdesc->lba = lldiv(mmc->capacity, mmc->read_bl_len); + + return 0; +} + +/* test if piton has the micro mmc card present + * always return 1, which means present + */ +static int piton_mmc_getcd(struct udevice *dev) +{ + /* + * always return 1 + */ + return 1; +} + +/* dummy function, piton_mmc don't need initialization + * in hw + */ +static const struct dm_mmc_ops piton_mmc_ops = { + .send_cmd = piton_mmc_send_cmd, + .get_cd = piton_mmc_getcd, +}; + +static int piton_mmc_probe(struct udevice *dev) +{ + struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev); + struct piton_mmc_plat *plat = dev_get_platdata(dev); + struct mmc_config *cfg = &plat->cfg; + + cfg->name = dev->name; + upriv->mmc = &plat->mmc; + upriv->mmc->has_init = 1; + upriv->mmc->capacity = 0x2000000000ULL; + upriv->mmc->read_bl_len = MMC_MAX_BLOCK_LEN; + return 0; +} + +static int piton_mmc_bind(struct udevice *dev) +{ + struct piton_mmc_plat *plat = dev_get_platdata(dev); + struct mmc_config *cfg = &plat->cfg; + + cfg->name = dev->name; + cfg->host_caps = MMC_MODE_HS_52MHz | MMC_MODE_HS | MMC_MODE_8BIT; + cfg->voltages = MMC_VDD_165_195 | MMC_VDD_32_33 | MMC_VDD_33_34; + cfg->f_min = 1000000; + cfg->f_max = 52000000; + cfg->b_max = U32_MAX; + + return mmc_bind(dev, &plat->mmc, cfg); +} + +static const struct udevice_id piton_mmc_ids[] = { + {.compatible = "openpiton,piton-mmc"}, + {/* sentinel */} +}; + +U_BOOT_DRIVER(piton_mmc_drv) = { + .name = "piton_mmc", + .id = UCLASS_MMC, + .of_match = piton_mmc_ids, + .ofdata_to_platdata = piton_mmc_ofdata_to_platdata, + .bind = piton_mmc_bind, + .probe = piton_mmc_probe, + .ops = &piton_mmc_ops, + .platdata_auto_alloc_size = sizeof(struct piton_mmc_plat), + .priv_auto_alloc_size = sizeof(struct piton_mmc_priv), +}; -- 2.32.0