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=-17.6 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A, SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 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 444EDC48BE8 for ; Sun, 13 Jun 2021 22:08:42 +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 E828B610A1 for ; Sun, 13 Jun 2021 22:08:40 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E828B610A1 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=samsung.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 C88DC80A22; Mon, 14 Jun 2021 00:08:37 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=samsung.com header.i=@samsung.com header.b="GxTsdHvl"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id C381D80412; Mon, 14 Jun 2021 00:08:35 +0200 (CEST) Received: from mailout1.samsung.com (mailout1.samsung.com [203.254.224.24]) (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 7057780412 for ; Mon, 14 Jun 2021 00:08:23 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=jh80.chung@samsung.com Received: from epcas1p1.samsung.com (unknown [182.195.41.45]) by mailout1.samsung.com (KnoxPortal) with ESMTP id 20210613220816epoutp0162a302b651dcd7c2bd1e93c3156fdae5~IQ7HB3QEE3255832558epoutp01H for ; Sun, 13 Jun 2021 22:08:16 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.samsung.com 20210613220816epoutp0162a302b651dcd7c2bd1e93c3156fdae5~IQ7HB3QEE3255832558epoutp01H DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1623622096; bh=SQAmEqwZRA4USPG/xXT2KkyxokNSQLm8OyjRZ55qRAs=; h=Subject:To:Cc:From:Date:In-Reply-To:References:From; b=GxTsdHvltbcOSGBS8U+5+MVj8DWj/YS6Ayxq0wrYbpfMMZZASGcm6NZyHwGpcKASD UtH+zBI0S4qivLvy3VFYU30ZjkEMaBPfVo7EcaYNIoB6ARpbJgco4jBBvex8l600ac uHgYatQ+5aneRmedXFa8euAcg/i0tw1J0TrMyIww= Received: from epsnrtp2.localdomain (unknown [182.195.42.163]) by epcas1p2.samsung.com (KnoxPortal) with ESMTP id 20210613220816epcas1p21393f7a4d5b18b709c3130ec5c3d65f3~IQ7G3g2fI2241822418epcas1p24; Sun, 13 Jun 2021 22:08:16 +0000 (GMT) Received: from epsmges1p3.samsung.com (unknown [182.195.40.155]) by epsnrtp2.localdomain (Postfix) with ESMTP id 4G37xp1LgDz4x9Q0; Sun, 13 Jun 2021 22:08:14 +0000 (GMT) Received: from epcas1p3.samsung.com ( [182.195.41.47]) by epsmges1p3.samsung.com (Symantec Messaging Gateway) with SMTP id F7.F7.09824.EC186C06; Mon, 14 Jun 2021 07:08:14 +0900 (KST) Received: from epsmtrp1.samsung.com (unknown [182.195.40.13]) by epcas1p4.samsung.com (KnoxPortal) with ESMTPA id 20210613220813epcas1p4bde4f14e53f96ec5fb3e45f79b8512b4~IQ7EZcps10574105741epcas1p4D; Sun, 13 Jun 2021 22:08:13 +0000 (GMT) Received: from epsmgms1p1new.samsung.com (unknown [182.195.42.41]) by epsmtrp1.samsung.com (KnoxPortal) with ESMTP id 20210613220813epsmtrp12c2980332a8a7c2da4f1333735c0dc69~IQ7EYNfuD2527425274epsmtrp1S; Sun, 13 Jun 2021 22:08:13 +0000 (GMT) X-AuditID: b6c32a37-061ff70000002660-16-60c681cea448 Received: from epsmtip2.samsung.com ( [182.195.34.31]) by epsmgms1p1new.samsung.com (Symantec Messaging Gateway) with SMTP id 8E.76.08637.DC186C06; Mon, 14 Jun 2021 07:08:13 +0900 (KST) Received: from [10.113.113.235] (unknown [10.113.113.235]) by epsmtip2.samsung.com (KnoxPortal) with ESMTPA id 20210613220813epsmtip2c9788ed83f6a049b70aa0655457bce9c~IQ7EHaYbh2144421444epsmtip2d; Sun, 13 Jun 2021 22:08:13 +0000 (GMT) Subject: Re: [RESEND PATCH v6 2/2] mmc: openpiton: add piton_mmc driver To: Tianrui Wei , u-boot@lists.denx.de Cc: ycliang@andestech.com, rick@andestech.com, peng.fan@nxp.com, jbalkind@ucsb.edu, seanga2@gmail.com, bmeng.cn@gmail.com From: Jaehoon Chung Message-ID: Date: Mon, 14 Jun 2021 07:09:07 +0900 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US Content-Transfer-Encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrAJsWRmVeSWpSXmKPExsWy7bCmvu65xmMJBv172Cym9sRbHH5xncXi x6ovrBZvX5xltNh6bwKTxcTmLjaLt3s72S0eH3rN5MDhsef0LGaPnbPusnucvbOD0WPjux1M Hptfv2D2uL3mO1MAW1S2TUZqYkpqkUJqXnJ+SmZeuq2Sd3C8c7ypmYGhrqGlhbmSQl5ibqqt kotPgK5bZg7QQUoKZYk5pUChgMTiYiV9O5ui/NKSVIWM/OISW6XUgpScAssCveLE3OLSvHS9 5PxcK0MDAyNToMKE7IxLa9cyFvRaVVzotmlgnKrXxcjJISFgIvGg6QVjFyMXh5DADkaJ39d3 MUM4nxglzu35yA5SJSTwjVHi1EEumI6Fvy+wQBTtZZQ4+XMpVPt7RokFq1cxdTFycAgLuEu0 TK8EaRARsJc49PATI4jNLFAt8WTaGSYQm01AR2L7t+NgNq+AncS2zc9ZQWwWAVWJnT3tYItF BSIk3nyewAJRIyhxcuYTMJtTIFbi2/+zbBAzxSVuPZnPBGHLS2x/OwfsAwmBuRwS7QeOMkJc 7SJx+91CKFtY4tXxLewQtpTEy/42KLtaYlfzGajmDkaJW9uamCASxhL7l04Ge4xZQFNi/S59 iLCixM7fc6Ee45N497WHFaREQoBXoqNNCKJEReLS65dMMKvuPvnPCmF7SBxZeoRxAqPiLCSv zULyziwk78xCWLyAkWUVo1hqQXFuemqxYYExclxvYgQnVS3zHYzT3n7QO8TIxMF4iFGCg1lJ hPdZ1+EEId6UxMqq1KL8+KLSnNTiQ4ymwMCeyCwlmpwPTOt5JfGGpkbGxsYWJoZmpoaGSuK8 O9kOJQgJpCeWpGanphakFsH0MXFwSjUwrV7N7i65r/5PrejL2U+/8s2Sqmb7+M/GmK/AKcxx 9lFh+WNGP1Ya7Lhg82b2v4n3928vKBUxiRVM/FG2yi4v+3GO6Bm1g0paWzs7bOdWZ11kerz6 OX/mHunW3QcVHaPOVKy28tiRuVr6//fjCgxTpQtXdc345fPEp5TZ5cFK76exSVeVkyeULfhY 1rlgTqRxiCTzjjNsvN6yWlnubD1yy37/Nfj85PRjn48/jrVdMS6qufgnNVbuYUDc911byrmU 2+ZsNN22eGNVPsO6o16i96epVmxebXm40u+GL7dNRtO7rLU9ufwCk8RuhjHx/dhmfG/mrp9b ZdJvvz6g2vN0xfvZnNvnXD+l/HH2/++HKpRYijMSDbWYi4oTAZEU4SkzBAAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrDLMWRmVeSWpSXmKPExsWy7bCSvO7ZxmMJBq/OSVhM7Ym3OPziOovF j1VfWC3evjjLaLH13gQmi4nNXWwWb/d2sls8PvSayYHDY8/pWcweO2fdZfc4e2cHo8fGdzuY PDa/fsHscXvNd6YAtigum5TUnMyy1CJ9uwSujEtr1zIW9FpVXOi2aWCcqtfFyMkhIWAisfD3 BZYuRi4OIYHdjBKbHz5ngUhISXx+OpWti5EDyBaWOHy4GCQsJPCWUeLgdTmQsLCAu0TL9EqQ sIiAvcShh58YQcLMAtUS75tEISY+YpSYPrGfEaSGTUBHYvu340wgNq+AncS2zc9ZQWwWAVWJ nT3t7CC9ogIREvemQZUISpyc+QTsGE6BWIlv/8+ygdjMAuoSf+ZdYoawxSVuPZnPBGHLS2x/ O4d5AqPQLCTts5C0zELSMgtJywJGllWMkqkFxbnpucWGBYZ5qeV6xYm5xaV56XrJ+bmbGMER pKW5g3H7qg96hxiZOBgPMUpwMCuJ8D7rOpwgxJuSWFmVWpQfX1Sak1p8iFGag0VJnPdC18l4 IYH0xJLU7NTUgtQimCwTB6dUA9MOm8Q4n52/Ao/dmCBVLfr7ynz9n9NEOw4vrZ28LkjGXFz3 S08N7w5f5glqjdtrxOY8j/z2ZtXNph/vlZx49zrHrp2TVLS0WX4lA8OflxOaUhx6xTp/hM5g LrmVlMw0516p0nTGhNMV+SJssQlfzZ6s2WrT9POQ0tfJEXanPO18yu0eOq7fKLjx6qYlNXer 9t2YfnpK/cYVZ8okFl9fHrzUj8HWJSTk//IV8nvmLVVUmPLoZUPQzOuzv81+yDVz+b81AXdF 4i59M8p+0no/bqniguDvXpU8bqfuq/+dJOfwd9OMj3FXbhsbWIS2xyy+8LuHjSntdV3fv3jW xQllq3Ib7Oev6L6xzW2xpePqhW1aSizFGYmGWsxFxYkAvqclzQ8DAAA= X-CMS-MailID: 20210613220813epcas1p4bde4f14e53f96ec5fb3e45f79b8512b4 X-Msg-Generator: CA Content-Type: text/plain; charset="utf-8" X-Sendblock-Type: SVC_REQ_APPROVE CMS-TYPE: 101P DLP-Filter: Pass X-CFilter-Loop: Reflected X-CMS-RootMailID: 20210612171721epcas1p1a46ad483afab3625ecec3dea5e3e1bcc References: <20210612171650.7247-1-tianrui-wei@outlook.com> 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 Dear Tianrui, On 6/13/21 2:16 AM, Tianrui Wei wrote: > 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..096d6a930c 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 Fix indentation. > + > 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 Ditto. > 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..32671d1a89 > --- /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) Ditto. > +{ > + /* 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; Is is right to return -ENOSYS? MMC_DATA_WRITE doesn't support? > + } > + > + 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; f_max is 100K? I don't think so. > + 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; Use macro. It's not readable. What's 0x2000000000ULL? > + mmc->has_init = 1; Right? has_init will be set in mmc.c. Why it's set to 1 in driver? > + > + 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 the micro sd card is 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; Ditto. > + upriv->mmc->capacity = 0x2000000000ULL; Ditto. > + upriv->mmc->read_bl_len = MMC_MAX_BLOCK_LEN; readl_blk_len will be set in mmc.c. Your driver doesn't use mmc.c? Why do you set to some values in your driver? > + 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; Use a readable value instead of U32_MAX. CONFIG_SYS_MMC_MAX_BLK_COUNT or other. Best Regards, Jaehoon Chung > + > + 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), > +}; >