From patchwork Thu Aug 15 10:55:32 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aisheng Dong X-Patchwork-Id: 2845080 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 954F19F239 for ; Thu, 15 Aug 2013 11:00:08 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id DBC94203DC for ; Thu, 15 Aug 2013 11:00:03 +0000 (UTC) Received: from casper.infradead.org (casper.infradead.org [85.118.1.10]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 1208A203AF for ; Thu, 15 Aug 2013 10:59:59 +0000 (UTC) Received: from merlin.infradead.org ([2001:4978:20e::2]) by casper.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1V9vGw-0006lf-EO; Thu, 15 Aug 2013 10:59:18 +0000 Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1V9vGi-0004ug-Gj; Thu, 15 Aug 2013 10:59:04 +0000 Received: from co9ehsobe004.messaging.microsoft.com ([207.46.163.27] helo=co9outboundpool.messaging.microsoft.com) by merlin.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1V9vGH-0004qd-Cl for linux-arm-kernel@lists.infradead.org; Thu, 15 Aug 2013 10:58:41 +0000 Received: from mail42-co9-R.bigfish.com (10.236.132.239) by CO9EHSOBE041.bigfish.com (10.236.130.104) with Microsoft SMTP Server id 14.1.225.22; Thu, 15 Aug 2013 10:58:14 +0000 Received: from mail42-co9 (localhost [127.0.0.1]) by mail42-co9-R.bigfish.com (Postfix) with ESMTP id 12455C800D8; Thu, 15 Aug 2013 10:58:14 +0000 (UTC) X-Forefront-Antispam-Report: CIP:70.37.183.190; KIP:(null); UIP:(null); IPV:NLI; H:mail.freescale.net; RD:none; EFVD:NLI X-SpamScore: 3 X-BigFish: VS3(zzzz1f42h208ch1ee6h1de0h1fdah2073h1202h1e76h1d1ah1d2ah1fc6h1082kzz1de098h8275bh1de097hz2dh2a8h668h839hd24he5bhf0ah1288h12a5h12a9h12bdh12e5h137ah139eh13b6h1441h1504h1537h162dh1631h1758h1898h18e1h1946h19b5h1ad9h1b0ah1b2fh1fb3h1d0ch1d2eh1d3fh1dfeh1dffh1e23h1fe8h1ff5h1155h) Received: from mail42-co9 (localhost.localdomain [127.0.0.1]) by mail42-co9 (MessageSwitch) id 1376564290993949_12890; Thu, 15 Aug 2013 10:58:10 +0000 (UTC) Received: from CO9EHSMHS026.bigfish.com (unknown [10.236.132.254]) by mail42-co9.bigfish.com (Postfix) with ESMTP id ED474CC004C; Thu, 15 Aug 2013 10:58:10 +0000 (UTC) Received: from mail.freescale.net (70.37.183.190) by CO9EHSMHS026.bigfish.com (10.236.130.36) with Microsoft SMTP Server (TLS) id 14.16.227.3; Thu, 15 Aug 2013 10:58:10 +0000 Received: from az84smr01.freescale.net (10.64.34.197) by 039-SN1MMR1-004.039d.mgd.msft.net (10.84.1.14) with Microsoft SMTP Server (TLS) id 14.3.136.1; Thu, 15 Aug 2013 10:58:09 +0000 Received: from shlinux2.ap.freescale.net (shlinux2.ap.freescale.net [10.192.224.44]) by az84smr01.freescale.net (8.14.3/8.14.0) with ESMTP id r7FAw009002450; Thu, 15 Aug 2013 03:58:07 -0700 From: Dong Aisheng To: , Subject: [PATCH 2/3] of: add update device node status via cmdline feature Date: Thu, 15 Aug 2013 18:55:32 +0800 Message-ID: <1376564133-11286-3-git-send-email-b29396@freescale.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1376564133-11286-1-git-send-email-b29396@freescale.com> References: <1376564133-11286-1-git-send-email-b29396@freescale.com> MIME-Version: 1.0 X-OriginatorOrg: freescale.com X-FOPE-CONNECTOR: Id%0$Dn%*$RO%0$TLS%0$FQDN%$TlsDn% X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20130815_065837_843529_5B839959 X-CRM114-Status: GOOD ( 17.67 ) X-Spam-Score: -4.2 (----) Cc: grant.likely@linaro.org, rob@landley.net, rob.herring@calxeda.com, linux-arm-kernel@lists.infradead.org X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-7.0 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Some boards may have a lot of pin conflicts between different devices, only one of them can be enabled to run at one time. Instead of changing dts manually or adding a lot dts files according to different device availability, we provide feature to dynamically update the device node status via command line, then those devices involved with pin conflict can be enabled or disabled dynamically. Signed-off-by: Dong Aisheng --- Documentation/kernel-parameters.txt | 9 +++++ drivers/of/fdt.c | 69 +++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 0 deletions(-) diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index 15356ac..65f3be2 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt @@ -128,6 +128,7 @@ In addition, the following text indicates that the option: BUGS= Relates to possible processor bugs on the said processor. KNL Is a kernel start-up parameter. BOOT Is a boot loader parameter. + FDT Is a flattened device tree paramter. Parameters denoted with BOOT are actually interpreted by the boot loader, and have no meaning to the kernel directly. @@ -895,6 +896,14 @@ bytes respectively. Such letter suffixes can also be entirely omitted. General fault injection mechanism. Format: ,,, See also Documentation/fault-injection/. + fdt.enable= + fdt.disable= + [KNL,FDT] + update device tree node status before populating devices + Format: fdt.=[,] + enable := update the device node to a enabled state + disable := update the device node to a disabled state + := node path or node full name in device tree floppy= [HW] See Documentation/blockdev/floppy.txt. diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c index 6bb7cf2..423624b 100644 --- a/drivers/of/fdt.c +++ b/drivers/of/fdt.c @@ -25,6 +25,11 @@ #include +static char *enable; +module_param(enable, charp, 0444); +static char *disable; +module_param(disable, charp, 0444); + char *of_fdt_get_string(struct boot_param_header *blob, u32 offset) { return ((char *)blob) + @@ -713,4 +718,68 @@ void __init unflatten_device_tree(void) of_alias_scan(early_init_dt_alloc_memory_arch); } +/* + * The format for the command line is as follows: + * + * fdt.=[,] + * enable := update the device node to a enabled state + * disable := update the device node to a disabled state + * := node path or node full name in device tree + * + * e.g: + * fdt.enable=/soc/aips-bus@02100000/i2c@021a8000,/soc/aips-bus@02100000/weim@021b8000 + * fdt.disable=/soc/aips-bus@02100000/weim@021b8000 + */ +static int __init __of_flat_parse_param(char *s, bool enable) +{ + char path[256], *p; + + if (!s) + return 0; + + p = s; + while (*s != '\0') { + p = strchr(s, ','); + if (p != NULL) { + BUG_ON((p - s) >= 256); + strncpy(path, s, p - s); + path[p - s] = '\0'; + if (enable) + of_node_status_enable_by_path(path); + else + of_node_status_disable_by_path(path); + /* search for next node */ + s = p + 1; + } else { + /* last node */ + if (enable) + of_node_status_enable_by_path(s); + else + of_node_status_disable_by_path(s); + break; + } + } + + return 0; +} + +static inline void __init of_flat_parse_param(void) +{ + __of_flat_parse_param(enable, 1); + __of_flat_parse_param(disable, 0); +} + +/* + * handle device node status update + */ +static int __init of_flat_late_init(void) +{ + of_flat_parse_param(); + + return 0; +} + +/* we use postcore_init to run before mach code populate platform devices */ +postcore_initcall(of_flat_late_init); + #endif /* CONFIG_OF_EARLY_FLATTREE */