From patchwork Fri Aug 25 16:12:30 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 111038 Delivered-To: patch@linaro.org Received: by 10.140.95.78 with SMTP id h72csp1240066qge; Fri, 25 Aug 2017 09:13:28 -0700 (PDT) X-Received: by 10.80.207.7 with SMTP id c7mr10047192edk.63.1503677608819; Fri, 25 Aug 2017 09:13:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1503677608; cv=none; d=google.com; s=arc-20160816; b=Be9nNP9quvUs5LCsXqMTLCQkGh2cw6nuLQccXuBIl8ay2B/NxzI2DE053GcPoGsPVD Py6pWvTs1krdrz5AX++yz62VvMR8rgIZBh7CdgUHaKRDVQY+Bo3+zuNKVjknHlmKDa7N 1UayR+njRRH37vWmHAW/RkiUizy8wtGMvczUEqqXfiHaqmoDRJze/IxVr5zf0pmX509J MhmHCsfxVCuXZCuIB35gxRsgu9rma+wv4kbA0RCqVSIACLZhGC1DX4qz31sWhMUp2qYW SEHzwgarEpmWr+rGG2IaUGRYz5ogCzJwMi9MzB7HyCftVxnX0m8n/fmUOrMS0eHZaUgR a6fw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:references:in-reply-to:message-id:date :to:from:dkim-signature:dkim-filter:arc-authentication-results; bh=qzmLzKUqFmAYqawaJMBq8sqRv+FcgK+/qvarLgmuwTU=; b=m94gK9ELm7UCZCnGugqC+fHioTQIy9JCd29L1a+YNQdIG0ppEqTpcvK/7VpbqjsjHp CY6TlwA4g5C/KBAsNkKoYo9ACJzST2472M4pf7RIjiPKNYFgOPj2tfTp6RR3WpbNoDEP bJcfNqjeRkQCRfp7itIN14VkuYqYbtkqY9RODIrWmyWaBziKNUOKmsYyNs1ZYJMAjp8n CDMUwEwOADr2D46RGVs35H27yZGJBC0VWn/Qhcdr2LGkcqsYHL0o5xsItbOD6CtwxGGM W76KK/QMsXqY5CmdDF4ueG+76QmVWOWjo0tIti0EgsZCdLoS/wObC/+IsQma6Cu1J9lH 23Xw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@nifty.com header.s=dec2015msa header.b=xLQsmWxv; spf=pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de Return-Path: Received: from lists.denx.de (dione.denx.de. [81.169.180.215]) by mx.google.com with ESMTP id q31si10241921edq.83.2017.08.25.09.13.28; Fri, 25 Aug 2017 09:13:28 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) client-ip=81.169.180.215; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@nifty.com header.s=dec2015msa header.b=xLQsmWxv; spf=pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de Received: by lists.denx.de (Postfix, from userid 105) id 4E51DC21F89; Fri, 25 Aug 2017 16:13:11 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 85303C21F64; Fri, 25 Aug 2017 16:13:09 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id E990CC21F70; Fri, 25 Aug 2017 16:13:08 +0000 (UTC) Received: from conuserg-09.nifty.com (conuserg-09.nifty.com [210.131.2.76]) by lists.denx.de (Postfix) with ESMTPS id B789EC21F64 for ; Fri, 25 Aug 2017 16:13:07 +0000 (UTC) Received: from grover.sesame (FL1-122-131-185-176.osk.mesh.ad.jp [122.131.185.176]) (authenticated) by conuserg-09.nifty.com with ESMTP id v7PGCg5p016083; Sat, 26 Aug 2017 01:12:43 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-09.nifty.com v7PGCg5p016083 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1503677563; bh=Yl0JXJSGRDfXFl8hOixKXA9GgtS7BSQbaaHzOv+D/2c=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=xLQsmWxv2XN1VDdlIruAONCg1kh6dMXBoTnVDAdoR5Nx7j/iVRG52ifMUDAIs7d9E 2pjEFRI0I1D+R6hQGctV1gS8p4eS1PqfO98XkCoaGtMSEM3AeJ2fu1OGvOO10WdxSM tv4ldd7UzFzz7OJF7dt663VJULt3geS3VkSjmNFypB9eWK2ziJsOJFq8F8LhD5chfk FyDZw8TyAwKda4XqqEItoIBm+T89duH9P26cqYOiqaWLq0ljafC6ATid4z20jpaSYY xppRc0OLOQdaxVGqbCtzs+602hHWvJ3/Nr+96/w0VvjzHGHShqUDI4K259Q2lOmzYq KP1MfVOHbJZSA== X-Nifty-SrcIP: [122.131.185.176] From: Masahiro Yamada To: u-boot@lists.denx.de Date: Sat, 26 Aug 2017 01:12:30 +0900 Message-Id: <1503677551-5085-2-git-send-email-yamada.masahiro@socionext.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1503677551-5085-1-git-send-email-yamada.masahiro@socionext.com> References: <1503677551-5085-1-git-send-email-yamada.masahiro@socionext.com> Subject: [U-Boot] [PATCH 1/2] ofnode: add {ofnode, dev}_read_resource_byname() X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Linux supports platform_get_resource_byname() to look up a resource by name. We want a similar helper. It is useful when a device node has two or more named register regions. Signed-off-by: Masahiro Yamada Reviewed-by: Simon Glass --- drivers/core/ofnode.c | 12 ++++++++++++ drivers/core/read.c | 6 ++++++ include/dm/ofnode.h | 2 ++ include/dm/read.h | 20 +++++++++++++++++++- 4 files changed, 39 insertions(+), 1 deletion(-) diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c index c1a2e9f0daef..0685b689d846 100644 --- a/drivers/core/ofnode.c +++ b/drivers/core/ofnode.c @@ -627,3 +627,15 @@ int ofnode_read_resource(ofnode node, uint index, struct resource *res) return 0; } } + +int ofnode_read_resource_byname(ofnode node, const char *name, + struct resource *res) +{ + int index; + + index = ofnode_stringlist_search(node, "reg-names", name); + if (index < 0) + return index; + + return ofnode_read_resource(node, index, res); +} diff --git a/drivers/core/read.c b/drivers/core/read.c index fe40bed64de3..6acb33388f56 100644 --- a/drivers/core/read.c +++ b/drivers/core/read.c @@ -164,3 +164,9 @@ int dev_read_resource(struct udevice *dev, uint index, struct resource *res) { return ofnode_read_resource(dev_ofnode(dev), index, res); } + +int dev_read_resource_byname(struct udevice *dev, const char *name, + struct resource *res) +{ + return ofnode_read_resource_byname(dev_ofnode(dev), name, res); +} diff --git a/include/dm/ofnode.h b/include/dm/ofnode.h index 210ddb2e5d74..de2769ed5376 100644 --- a/include/dm/ofnode.h +++ b/include/dm/ofnode.h @@ -625,5 +625,7 @@ int ofnode_read_simple_size_cells(ofnode node); bool ofnode_pre_reloc(ofnode node); int ofnode_read_resource(ofnode node, uint index, struct resource *res); +int ofnode_read_resource_byname(ofnode node, const char *name, + struct resource *res); #endif diff --git a/include/dm/read.h b/include/dm/read.h index c3a4a5611a70..49d69c990f6e 100644 --- a/include/dm/read.h +++ b/include/dm/read.h @@ -359,13 +359,24 @@ int dev_read_enabled(struct udevice *dev); /** * dev_read_resource() - obtain an indexed resource from a device. * - * @dev: devuce to examine + * @dev: device to examine * @index index of the resource to retrieve (0 = first) * @res returns the resource * @return 0 if ok, negative on error */ int dev_read_resource(struct udevice *dev, uint index, struct resource *res); +/** + * dev_read_resource_byname() - obtain a named resource from a device. + * + * @dev: device to examine + * @name: name of the resource to retrieve + * @res: returns the resource + * @return 0 if ok, negative on error + */ +int dev_read_resource_byname(struct udevice *dev, const char *name, + struct resource *res); + #else /* CONFIG_DM_DEV_READ_INLINE is enabled */ static inline int dev_read_u32_default(struct udevice *dev, @@ -513,6 +524,13 @@ static inline int dev_read_resource(struct udevice *dev, uint index, return ofnode_read_resource(dev_ofnode(dev), index, res); } +static inline int dev_read_resource_byname(struct udevice *dev, + const char *name, + struct resource *res) +{ + return ofnode_read_resource_byname(dev_ofnode(dev), name, res); +} + #endif /* CONFIG_DM_DEV_READ_INLINE */ /** From patchwork Fri Aug 25 16:12:31 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 111039 Delivered-To: patch@linaro.org Received: by 10.140.95.78 with SMTP id h72csp1240938qge; Fri, 25 Aug 2017 09:14:08 -0700 (PDT) X-Received: by 10.80.140.240 with SMTP id r45mr9675901edr.123.1503677648511; Fri, 25 Aug 2017 09:14:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1503677648; cv=none; d=google.com; s=arc-20160816; b=Zy75UMTe1htVbhhdB4/NAuvYlc9wTlxsXIkzDfJGdwalm/RYRbBVvVAHGB8vH2/HeV 1lfKDztQl6fNslYmqpKHn2EgrXc0mqIUPMYvXz47jFQzCGfVaPJZBIzKncUTzn7CU9bs igiScJ1ImVYKdGxFBJ4vkcdFGI8fNzAAWqP0iyQipcj3g+XKyibWLNuMKOnYOqmX/AjW 2qOAaYsxdjrd2O23rArBtufmX6ye/fZcduh3PL19nQCi+IFOTdjMgK3IK17wvifiZHhI 50efXlY8n+8ODK9coioT/vV7BUnIysdVh6Mb3UiNxNDlLFAN9XZG1IiKavljOVt5J0c9 ld2Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:cc:references:in-reply-to:message-id :date:to:from:dkim-signature:dkim-filter:arc-authentication-results; bh=VtEZgBchXbxR2E0oUsSt1ylQim9vEgtAhSyUXhvEiCE=; b=GunJ1zcqBd9nScR02zAnGC5KjeDUn1i3Pwh8HVyNh6IDxw2k7y+NvoaECgHYzp4MaQ 4ixw2KyfIOmyFWFdQgRjuQUl7rLYPHOzlNDIh/dmuvsAz111pMrYGlUKL2SvweP2stR+ OJpwH3iOBjBF37ms1vJFp3C1E0UL2/c5e2z8daMkZ9C829GQbsgn/WRJgDCktqynywO3 Ev27SZQbV6azj0PQnQiPyV77tomB0ykw402wsLksveP+UM7sALdUA6lOUG+UlrQ3DX59 o+rduGp6V4R/3GwDZ8F+2onpSHjFigI+jdO9zMY4yCAATPCnlznz2tGTkF1oSM6SH6IA 8v1A== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@nifty.com header.s=dec2015msa header.b=n9G0OZWf; spf=pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de Return-Path: Received: from lists.denx.de (dione.denx.de. [81.169.180.215]) by mx.google.com with ESMTP id 61si6082630edc.232.2017.08.25.09.14.08; Fri, 25 Aug 2017 09:14:08 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) client-ip=81.169.180.215; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@nifty.com header.s=dec2015msa header.b=n9G0OZWf; spf=pass (google.com: best guess record for domain of u-boot-bounces@lists.denx.de designates 81.169.180.215 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de Received: by lists.denx.de (Postfix, from userid 105) id F3669C21F84; Fri, 25 Aug 2017 16:13:30 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 793A1C21F70; Fri, 25 Aug 2017 16:13:14 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 41637C21F64; Fri, 25 Aug 2017 16:13:09 +0000 (UTC) Received: from conuserg-09.nifty.com (conuserg-09.nifty.com [210.131.2.76]) by lists.denx.de (Postfix) with ESMTPS id 64F74C21F6B for ; Fri, 25 Aug 2017 16:13:08 +0000 (UTC) Received: from grover.sesame (FL1-122-131-185-176.osk.mesh.ad.jp [122.131.185.176]) (authenticated) by conuserg-09.nifty.com with ESMTP id v7PGCg5q016083; Sat, 26 Aug 2017 01:12:43 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-09.nifty.com v7PGCg5q016083 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1503677564; bh=cAiWHZs7RG5CRnB6dHM44EH/AtwgR7dNXK6YT1Rbhms=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=n9G0OZWfwQ6ltZ3ST6qVwA8AkqYdFmw9iAjQzu03CHCeDDsw2Y+QYnkYRJvtGzak8 bwYSPFve5/y7zAWeZt7KrL7J+gGFSjWl05Z6EJ2HbN3r469aGppxQYt8bDBGg8cTn2 UITJ3KtCAJQj0NkhFovyZINRpfx0xEemOY19MczhoxX4s9r6ZhwP/o0Ooq8H5sKpPd YkqOnfAXgeVCWakhISSMJwNrCj1A2S9mdaF9/LpKYtCH/U9oAepTD2a17BUEW4KYHn csWXFogTedsxRDaLE9Ejw8TPkWAeV0GTBvhPeVjAj0onmFlW+7YOZJS5/1Zwo39NtK R4aEsRy2cz9vw== X-Nifty-SrcIP: [122.131.185.176] From: Masahiro Yamada To: u-boot@lists.denx.de Date: Sat, 26 Aug 2017 01:12:31 +0900 Message-Id: <1503677551-5085-3-git-send-email-yamada.masahiro@socionext.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1503677551-5085-1-git-send-email-yamada.masahiro@socionext.com> References: <1503677551-5085-1-git-send-email-yamada.masahiro@socionext.com> Cc: Scott Wood , Scott Wood Subject: [U-Boot] [PATCH 2/2] mtd: nand: denali_dt: add a DT driver X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" A patch for NAND uclass support was proposed about half a year: https://patchwork.ozlabs.org/patch/722282/ It was not merged and I do not see on-going work for this. Without DM-based probing, we need to set up pinctrl etc. in an ad-hoc way and give lots of crappy CONFIG options for base addresses and properties, which are supposed to be specified by DT. This is painful. This commit just provides a probe hook to retrieve "reg" from DT and allocate private data in a DM manner. This DT driver is not essentially a NAND driver, in fact it is (ab)using UCLASS_MISC. Once UCLASS_NAND is supported, it would be possible to migrate to it. Signed-off-by: Masahiro Yamada --- drivers/mtd/nand/Kconfig | 7 +++++ drivers/mtd/nand/Makefile | 1 + drivers/mtd/nand/denali.c | 4 ++- drivers/mtd/nand/denali.h | 2 ++ drivers/mtd/nand/denali_dt.c | 67 ++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 drivers/mtd/nand/denali_dt.c diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig index 71d678fc66b5..85b26d608851 100644 --- a/drivers/mtd/nand/Kconfig +++ b/drivers/mtd/nand/Kconfig @@ -16,6 +16,13 @@ config NAND_DENALI help Enable support for the Denali NAND controller. +config NAND_DENALI_DT + bool "Support Denali NAND controller as a DT device" + depends on NAND_DENALI && OF_CONTROL && DM + help + Enable the driver for NAND flash on platforms using a Denali NAND + controller as a DT device. + config SYS_NAND_DENALI_64BIT bool "Use 64-bit variant of Denali NAND controller" depends on NAND_DENALI diff --git a/drivers/mtd/nand/Makefile b/drivers/mtd/nand/Makefile index c3d4a996f37f..9f7d9d6ff7ae 100644 --- a/drivers/mtd/nand/Makefile +++ b/drivers/mtd/nand/Makefile @@ -44,6 +44,7 @@ obj-$(CONFIG_NAND_ATMEL) += atmel_nand.o obj-$(CONFIG_NAND_ARASAN) += arasan_nfc.o obj-$(CONFIG_NAND_DAVINCI) += davinci_nand.o obj-$(CONFIG_NAND_DENALI) += denali.o +obj-$(CONFIG_NAND_DENALI_DT) += denali_dt.o obj-$(CONFIG_NAND_FSL_ELBC) += fsl_elbc_nand.o obj-$(CONFIG_NAND_FSL_IFC) += fsl_ifc_nand.o obj-$(CONFIG_NAND_FSL_UPM) += fsl_upm.o diff --git a/drivers/mtd/nand/denali.c b/drivers/mtd/nand/denali.c index 18280b0b2fe8..47cf37d1d9b7 100644 --- a/drivers/mtd/nand/denali.c +++ b/drivers/mtd/nand/denali.c @@ -1175,7 +1175,7 @@ static void denali_hw_init(struct denali_nand_info *denali) static struct nand_ecclayout nand_oob; -static int denali_init(struct denali_nand_info *denali) +int denali_init(struct denali_nand_info *denali) { struct mtd_info *mtd = nand_to_mtd(&denali->nand); int ret; @@ -1273,6 +1273,7 @@ fail: return ret; } +#ifndef CONFIG_NAND_DENALI_DT static int __board_nand_init(void) { struct denali_nand_info *denali; @@ -1296,3 +1297,4 @@ void board_nand_init(void) if (__board_nand_init() < 0) pr_warn("Failed to initialize Denali NAND controller.\n"); } +#endif diff --git a/drivers/mtd/nand/denali.h b/drivers/mtd/nand/denali.h index 0e098bddf11d..694bce53a955 100644 --- a/drivers/mtd/nand/denali.h +++ b/drivers/mtd/nand/denali.h @@ -464,4 +464,6 @@ struct denali_nand_info { uint32_t max_banks; }; +int denali_init(struct denali_nand_info *denali); + #endif /* __DENALI_H__ */ diff --git a/drivers/mtd/nand/denali_dt.c b/drivers/mtd/nand/denali_dt.c new file mode 100644 index 000000000000..6a987c5b7880 --- /dev/null +++ b/drivers/mtd/nand/denali_dt.c @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2017 Socionext Inc. + * Author: Masahiro Yamada + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include +#include +#include +#include + +#include "denali.h" + +static const struct udevice_id denali_nand_dt_ids[] = { + { + .compatible = "altr,socfpga-denali-nand", + }, + { + .compatible = "socionext,uniphier-denali-nand-v5a", + }, + { + .compatible = "socionext,uniphier-denali-nand-v5b", + }, + { /* sentinel */ } +}; + +static int denali_dt_probe(struct udevice *dev) +{ + struct denali_nand_info *denali = dev_get_priv(dev); + struct resource res; + int ret; + + ret = dev_read_resource_byname(dev, "denali_reg", &res); + if (ret) + return ret; + + denali->flash_reg = devm_ioremap(dev, res.start, resource_size(&res)); + + ret = dev_read_resource_byname(dev, "nand_data", &res); + if (ret) + return ret; + + denali->flash_mem = devm_ioremap(dev, res.start, resource_size(&res)); + + return denali_init(denali); +} + +U_BOOT_DRIVER(denali_nand_dt) = { + .name = "denali-nand-dt", + .id = UCLASS_MISC, + .of_match = denali_nand_dt_ids, + .probe = denali_dt_probe, + .priv_auto_alloc_size = sizeof(struct denali_nand_info), +}; + +void board_nand_init(void) +{ + struct udevice *dev; + int ret; + + ret = uclass_get_device_by_driver(UCLASS_MISC, + DM_GET_DRIVER(denali_nand_dt), + &dev); + if (ret) + printf("Failed to initialize Denali NAND controller.\n"); +}