From patchwork Sat May 16 10:53:21 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?=C3=81lvaro_Fern=C3=A1ndez_Rojas?= X-Patchwork-Id: 473015 X-Patchwork-Delegate: zajec5@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from arrakis.dune.hu (arrakis.dune.hu [78.24.191.176]) (using TLSv1.1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 95464140D17 for ; Sat, 16 May 2015 20:56:13 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=MYSGzUwc; dkim-atps=neutral Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id 3E0A628BF02; Sat, 16 May 2015 12:52:47 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on arrakis.dune.hu X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=BAYES_00,FREEMAIL_FROM, T_DKIM_INVALID autolearn=unavailable version=3.3.2 Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id 3D20828BE63 for ; Sat, 16 May 2015 12:52:09 +0200 (CEST) X-policyd-weight: using cached result; rate: -8.5 Received: from mail-wi0-f173.google.com (mail-wi0-f173.google.com [209.85.212.173]) by arrakis.dune.hu (Postfix) with ESMTPS for ; Sat, 16 May 2015 12:52:08 +0200 (CEST) Received: by wizk4 with SMTP id k4so20838608wiz.1 for ; Sat, 16 May 2015 03:53:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-type:content-transfer-encoding; bh=ffO3CMvQNP975ZP55GRTeuqud9tW9Kjijee9woqgTs4=; b=MYSGzUwcJEVAoXke759s4xdWSEnFNW/3kIpcxabobFFLrY9yKl2AtnigayDaovvqi7 to1ERzn+Qog1YZJ402fqElBfThXgH/zyYO/IYDPFJJseNHgngNBd756ZIpoy6DvbJPzs Kcs/cnisVnJmMsexuMd7qLs65R1NsvDQ5jMXqilrgJ699roFq1lZN8R/VBaa74+x9q6R qUGp3VB/tOnkDVcjUfvAi+7CJaBw5Rxa9z+OuihuYLkVEMvTrsFZPeCuOcW55FhHqTWR iR99jhhQSAf5TBUoygXtx4NK8yVjdIHvAPjk6KVoZjCzk4+I8bgDPJpODwAegt12heAQ mW7g== X-Received: by 10.194.176.165 with SMTP id cj5mr17468861wjc.72.1431773607177; Sat, 16 May 2015 03:53:27 -0700 (PDT) Received: from skynet.lan (55.Red-83-42-204.dynamicIP.rima-tde.net. [83.42.204.55]) by mx.google.com with ESMTPSA id y7sm6786785wjw.16.2015.05.16.03.53.26 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sat, 16 May 2015 03:53:26 -0700 (PDT) From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= To: openwrt-devel@lists.openwrt.org, zajec5@gmail.com Date: Sat, 16 May 2015 12:53:21 +0200 Message-Id: <1431773604-11788-4-git-send-email-noltari@gmail.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1431773604-11788-1-git-send-email-noltari@gmail.com> References: <1431773604-11788-1-git-send-email-noltari@gmail.com> MIME-Version: 1.0 Subject: [OpenWrt-Devel] [PATCH 3/6] bcm53xx: bcm_nand: add support for overriding partition probe through device tree X-BeenThere: openwrt-devel@lists.openwrt.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: OpenWrt Development List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: openwrt-devel-bounces@lists.openwrt.org Sender: "openwrt-devel" Signed-off-by: Álvaro Fernández Rojas --- .../patches-3.18/420-mtd-bcm5301x_nand.patch | 47 ++++++++++++++++++++-- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/target/linux/bcm53xx/patches-3.18/420-mtd-bcm5301x_nand.patch b/target/linux/bcm53xx/patches-3.18/420-mtd-bcm5301x_nand.patch index 199f1e5..aa631e0 100644 --- a/target/linux/bcm53xx/patches-3.18/420-mtd-bcm5301x_nand.patch +++ b/target/linux/bcm53xx/patches-3.18/420-mtd-bcm5301x_nand.patch @@ -22,7 +22,7 @@ nand-objs := nand_base.o nand_bbt.o nand_timings.o --- /dev/null +++ b/drivers/mtd/nand/bcm_nand.c -@@ -0,0 +1,1583 @@ +@@ -0,0 +1,1622 @@ +/* + * Nortstar NAND controller driver + * @@ -1516,15 +1516,52 @@ + return 0; +} + -+static const char * const part_probes[] = { "ofpart", "bcm47xxpart", NULL }; ++static const char * const part_probe_types_def[] = { "ofpart", "bcm47xxpart", NULL }; ++ ++static const char * const *of_get_probes(struct device_node *dp) ++{ ++ const char *cp; ++ int cplen; ++ unsigned int l; ++ unsigned int count; ++ const char **res; ++ ++ cp = of_get_property(dp, "linux,part-probe", &cplen); ++ if (cp == NULL) ++ return part_probe_types_def; ++ ++ count = 0; ++ for (l = 0; l != cplen; l++) ++ if (cp[l] == 0) ++ count++; ++ ++ res = kzalloc((count + 1)*sizeof(*res), GFP_KERNEL); ++ count = 0; ++ while (cplen > 0) { ++ res[count] = cp; ++ l = strlen(cp) + 1; ++ cp += l; ++ cplen -= l; ++ count++; ++ } ++ return res; ++} ++ ++static void of_free_probes(const char * const *probes) ++{ ++ if (probes != part_probe_types_def) ++ kfree(probes); ++} + +/* + * Top-level init function + */ +static int bcmnand_probe(struct bcma_device *core) +{ ++ const char * const *part_probe_types; + struct mtd_part_parser_data parser_data; + struct device *dev = &core->dev; ++ struct device_node *dp = dev->of_node; + struct bcmnand_ctrl *ctrl; + int res, i, irq; + @@ -1561,8 +1598,10 @@ + if (res) + return res; + -+ parser_data.of_node = dev->of_node; -+ res = mtd_device_parse_register(&ctrl->mtd, part_probes, &parser_data, NULL, 0); ++ parser_data.of_node = dp; ++ part_probe_types = of_get_probes(dp); ++ res = mtd_device_parse_register(&ctrl->mtd, part_probe_types, &parser_data, NULL, 0); ++ of_free_probes(part_probe_types); + if (res) { + dev_err(dev, "Failed to register MTD device: %d\n", res); + return res;