From patchwork Sat Nov 26 18:05:54 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 84270 Delivered-To: patch@linaro.org Received: by 10.140.20.101 with SMTP id 92csp541554qgi; Sat, 26 Nov 2016 10:08:28 -0800 (PST) X-Received: by 10.99.120.13 with SMTP id t13mr24421642pgc.17.1480183708046; Sat, 26 Nov 2016 10:08:28 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v3si20788081plb.121.2016.11.26.10.08.26; Sat, 26 Nov 2016 10:08:28 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@nifty.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753171AbcKZSIS (ORCPT + 25 others); Sat, 26 Nov 2016 13:08:18 -0500 Received: from conuserg-11.nifty.com ([210.131.2.78]:47893 "EHLO conuserg-11.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753107AbcKZSIK (ORCPT ); Sat, 26 Nov 2016 13:08:10 -0500 Received: from grover.sesame (FL1-111-169-71-157.osk.mesh.ad.jp [111.169.71.157]) (authenticated) by conuserg-11.nifty.com with ESMTP id uAQI6Uee018512; Sun, 27 Nov 2016 03:06:39 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-11.nifty.com uAQI6Uee018512 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1480183600; bh=Tlr6g7f72/MzokVk4EADr2FVn6fFOcxXZYeCUe2CiMI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=zpm57cGUR8xQ/odIlGIHPcPorJ3lzMcmpAj0+rPPh8E3K/EsCaGKWOWd4OnXWVy6j eRZ0PCPY/VS+rmEr4vds3KojhogDTFcS/kDOhFoDFU5kfif/LEnZZa+f/1YAkUqWmt pt3Jgxr4Nw7HAVOXQy3m1TU68t4dbi65YhJLCblEynz5xKPRQB2ZAuAsYczF2bTk1C CLSM1p6w3BcjdRhHVt4uCjo0FJCCMv/uNQ82Wyhni7BcYPOBWzhylkGwSl5s6DeW9z HqL/TVH+wkl0ewrA7LRwQYYgO4BaTiFrM8EZ4CSEFA9jAEdoy6fpFTRFAInwkY6yD1 CuMKTAG/r4Fng== X-Nifty-SrcIP: [111.169.71.157] From: Masahiro Yamada To: linux-mtd@lists.infradead.org Cc: Masahiro Yamada , linux-kernel@vger.kernel.org, Boris Brezillon , Marek Vasut , Brian Norris , Richard Weinberger , David Woodhouse , Cyrille Pitchen Subject: [PATCH 08/39] mtd: nand: denali: introduce capability flag Date: Sun, 27 Nov 2016 03:05:54 +0900 Message-Id: <1480183585-592-9-git-send-email-yamada.masahiro@socionext.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1480183585-592-1-git-send-email-yamada.masahiro@socionext.com> References: <1480183585-592-1-git-send-email-yamada.masahiro@socionext.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The Denali NAND controller IP has several customizable features. SoC vendors can choose desired functions when a delivery RTL is created. It means this IP has various variants. For example, the Intel version is equipped with 32bit DMA, whereas the IP for UniPhier SoC family with 64bit DMA. This driver was originally written for some Intel platforms with Intel specific things hard-coded. What is worse, the revision register of this IP does not work to distinguish such features. We need to do something to make the driver available for other SoCs. Let's introduce a caps member to the denali_nand_info structure to switch on/off various features. Also, add struct denali_dt_data to store the capability associated with compatible string. Refer to the Link tag for discussion where Boris suggested this approach instead of a new DT property for every feature. Signed-off-by: Masahiro Yamada Link: https://lkml.org/lkml/2016/3/29/142 --- drivers/mtd/nand/denali.h | 1 + drivers/mtd/nand/denali_dt.c | 18 +++++++++--------- 2 files changed, 10 insertions(+), 9 deletions(-) -- 2.7.4 diff --git a/drivers/mtd/nand/denali.h b/drivers/mtd/nand/denali.h index 8bec980..95ed32e 100644 --- a/drivers/mtd/nand/denali.h +++ b/drivers/mtd/nand/denali.h @@ -420,6 +420,7 @@ struct denali_nand_info { uint32_t devnum; /* represent how many nands connected */ uint32_t bbtskipbytes; uint32_t max_banks; + unsigned int caps; }; extern int denali_init(struct denali_nand_info *denali); diff --git a/drivers/mtd/nand/denali_dt.c b/drivers/mtd/nand/denali_dt.c index 5607fcd..293ddb8 100644 --- a/drivers/mtd/nand/denali_dt.c +++ b/drivers/mtd/nand/denali_dt.c @@ -29,6 +29,10 @@ struct denali_dt { struct clk *clk; }; +struct denali_dt_data { + unsigned int caps; +}; + static const struct of_device_id denali_nand_dt_ids[] = { { .compatible = "denali,denali-nand-dt" }, { /* sentinel */ } @@ -42,23 +46,19 @@ static int denali_dt_probe(struct platform_device *ofdev) { struct resource *denali_reg, *nand_data; struct denali_dt *dt; + const struct denali_dt_data *data; struct denali_nand_info *denali; int ret; - const struct of_device_id *of_id; - - of_id = of_match_device(denali_nand_dt_ids, &ofdev->dev); - if (of_id) { - ofdev->id_entry = of_id->data; - } else { - pr_err("Failed to find the right device id.\n"); - return -ENOMEM; - } dt = devm_kzalloc(&ofdev->dev, sizeof(*dt), GFP_KERNEL); if (!dt) return -ENOMEM; denali = &dt->denali; + data = of_device_get_match_data(&ofdev->dev); + if (data) + denali->caps = data->caps; + denali->platform = DT; denali->dev = &ofdev->dev; denali->irq = platform_get_irq(ofdev, 0);