From patchwork Fri Feb 10 16:47:14 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Herring X-Patchwork-Id: 93796 Delivered-To: patch@linaro.org Received: by 10.140.20.99 with SMTP id 90csp590509qgi; Fri, 10 Feb 2017 08:48:22 -0800 (PST) X-Received: by 10.98.27.8 with SMTP id b8mr6611363pfb.82.1486745302441; Fri, 10 Feb 2017 08:48:22 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 33si2133340ply.217.2017.02.10.08.48.22; Fri, 10 Feb 2017 08:48:22 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of devicetree-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of devicetree-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=devicetree-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753414AbdBJQsI (ORCPT + 7 others); Fri, 10 Feb 2017 11:48:08 -0500 Received: from mail-ot0-f196.google.com ([74.125.82.196]:33473 "EHLO mail-ot0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751504AbdBJQsE (ORCPT ); Fri, 10 Feb 2017 11:48:04 -0500 Received: by mail-ot0-f196.google.com with SMTP id f9so4382582otd.0; Fri, 10 Feb 2017 08:47:21 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=mUl3LiAd0RCbx5Y7DKdJdZpDnUN/xHqVJsXH8VWllfw=; b=g1FoSDKMlBEdfndFaMJUT4AY//kx97oSjI0HZaNFb0JKjCxYbZkAdbY4LL/iLXydaG V9e8y0yKnUfwx4OWQOouAiIfXe4Hw6uP3QbAiJsVCET7GMLDsthFt3ybi9vDXGpgqHNE PUl3SdCs2zn9CYs6qTwZFcNVcROJ7OpLMjTycKwZHtsCYX4dqN46h35ijs9bAROD2M7F +cSrg7EnPkenTef27ZAl5ai1PFjGX127BPpVdcR3WZZpBOgsmkDYKzgeFtpe+fn/pypE CyOXp1C4R0cLSbzYCAwH/ghgUIOMc1eqGT5BCtT3hpX3fd4cZEvGunzKaMJk2g7Y+BPh 3MDA== X-Gm-Message-State: AMke39kQCA+KduBRVmFdEdMirKMS1R9Sxy5x1RacqqgXrKrCIazOMOKTlyFbkVV8fUUgOQ== X-Received: by 10.157.44.253 with SMTP id e58mr4977186otd.172.1486745240487; Fri, 10 Feb 2017 08:47:20 -0800 (PST) Received: from rob-hp-laptop.herring.priv (66-90-148-125.dyn.grandenetworks.net. [66.90.148.125]) by smtp.googlemail.com with ESMTPSA id r41sm1141714otc.40.2017.02.10.08.47.19 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 10 Feb 2017 08:47:19 -0800 (PST) From: Rob Herring To: David Gibson Cc: devicetree@vger.kernel.org, devicetree-compiler@vger.kernel.org Subject: [PATCH v2 1/4] checks: Add Warning for stricter property name character checking Date: Fri, 10 Feb 2017 10:47:14 -0600 Message-Id: <20170210164717.1234-2-robh@kernel.org> X-Mailer: git-send-email 2.10.1 In-Reply-To: <20170210164717.1234-1-robh@kernel.org> References: <20170210164717.1234-1-robh@kernel.org> Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org While '?', '.', '+', '*', and '_' are considered valid characters their use is discouraged in recommended practices. '#' is also only recommended to be used at the beginning of property names. Testing this found one typo error with '.' used instead of ','. The rest of the warnings were all from underscores. Signed-off-by: Rob Herring --- v2: - Disable check by default checks.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) -- 2.10.1 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/checks.c b/checks.c index 3d18e45374c8..22ef4748d7be 100644 --- a/checks.c +++ b/checks.c @@ -239,6 +239,7 @@ ERROR(duplicate_property_names, check_duplicate_property_names, NULL); #define UPPERCASE "ABCDEFGHIJKLMNOPQRSTUVWXYZ" #define DIGITS "0123456789" #define PROPNODECHARS LOWERCASE UPPERCASE DIGITS ",._+*#?-" +#define PROPNODECHARSSTRICT LOWERCASE UPPERCASE DIGITS ",-" static void check_node_name_chars(struct check *c, struct dt_info *dti, struct node *node) @@ -299,6 +300,38 @@ static void check_property_name_chars(struct check *c, struct dt_info *dti, } ERROR(property_name_chars, check_property_name_chars, PROPNODECHARS); +static void check_property_name_chars_strict(struct check *c, + struct dt_info *dti, + struct node *node) +{ + struct property *prop; + + for_each_property(node, prop) { + const char *name = prop->name; + int n = strspn(name, c->data); + + if (n == strlen(prop->name)) + continue; + + /* Certain names are whitelisted */ + if (strcmp(name, "device_type") == 0) + continue; + + /* + * # is only allowed at the beginning of property names not counting + * the vendor prefix. + */ + if (name[n] == '#' && ((n == 0) || (name[n-1] == ','))) { + name += n + 1; + n = strspn(name, c->data); + } + if (n < strlen(name)) + FAIL(c, "Character '%c' not recommended in property name \"%s\", node %s", + name[n], prop->name, node->fullpath); + } +} +CHECK(property_name_chars_strict, check_property_name_chars_strict, PROPNODECHARSSTRICT); + #define DESCLABEL_FMT "%s%s%s%s%s" #define DESCLABEL_ARGS(node,prop,mark) \ ((mark) ? "value of " : ""), \ @@ -703,6 +736,8 @@ static struct check *check_table[] = { &address_cells_is_cell, &size_cells_is_cell, &interrupt_cells_is_cell, &device_type_is_string, &model_is_string, &status_is_string, + &property_name_chars_strict, + &addr_size_cells, ®_format, &ranges_format, &unit_address_vs_reg, From patchwork Fri Feb 10 16:47:15 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Herring X-Patchwork-Id: 93795 Delivered-To: patch@linaro.org Received: by 10.140.20.99 with SMTP id 90csp590437qgi; Fri, 10 Feb 2017 08:48:10 -0800 (PST) X-Received: by 10.99.117.8 with SMTP id q8mr11962033pgc.9.1486745290593; Fri, 10 Feb 2017 08:48:10 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e7si2151760pfg.86.2017.02.10.08.48.10; Fri, 10 Feb 2017 08:48:10 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of devicetree-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of devicetree-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=devicetree-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753498AbdBJQsJ (ORCPT + 7 others); Fri, 10 Feb 2017 11:48:09 -0500 Received: from mail-ot0-f193.google.com ([74.125.82.193]:36762 "EHLO mail-ot0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751690AbdBJQsE (ORCPT ); Fri, 10 Feb 2017 11:48:04 -0500 Received: by mail-ot0-f193.google.com with SMTP id 36so4377904otx.3; Fri, 10 Feb 2017 08:47:21 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=K3oKxQApiytzOWRZuV7wWHXHMeMGbqm0gfRcjZn/6YA=; b=n/v62Xs4L2iuLIMRkHr7e9pViv8JpN6cFB1zYgZ8gS64jwqt7ESEPP0CAEfyVgxzEx KKpq9kHTc4EPWPAqAPHK8i9IEWhud+NzW6CUS3LfY4lgoARN5sQCHCYj9vq5fLr9jiEV wvJf8+4Z/Bxkr90teNrCFpafuHdzsPQ0vRo7ngfhBRGL17fz+bhgMhCCsrI0Nq4drvq2 uc+Vpbuq+Dx59G6LG4c+6Uw8USGOLa2C21Ucn6r8lbvU4T5MqgrfLADr2O1P1Iyojzzv y2tOeIIFCEaEUd8YBWb1fKQUq3YZr+RLE2Mw5oT+Nk194ZZfVDgzyxBrKZIZDNtSDoDk IVUw== X-Gm-Message-State: AMke39lMD8mv+i1KC6eaPE5QUFxVL3SAON7oc4W3Ymk+vSYOGkGiwqCPyQ8hFwtwFuRVEA== X-Received: by 10.157.56.70 with SMTP id r6mr4958835otd.154.1486745241341; Fri, 10 Feb 2017 08:47:21 -0800 (PST) Received: from rob-hp-laptop.herring.priv (66-90-148-125.dyn.grandenetworks.net. [66.90.148.125]) by smtp.googlemail.com with ESMTPSA id r41sm1141714otc.40.2017.02.10.08.47.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 10 Feb 2017 08:47:20 -0800 (PST) From: Rob Herring To: David Gibson Cc: devicetree@vger.kernel.org, devicetree-compiler@vger.kernel.org Subject: [PATCH v2 2/4] checks: Add Warning for stricter node name character checking Date: Fri, 10 Feb 2017 10:47:15 -0600 Message-Id: <20170210164717.1234-3-robh@kernel.org> X-Mailer: git-send-email 2.10.1 In-Reply-To: <20170210164717.1234-1-robh@kernel.org> References: <20170210164717.1234-1-robh@kernel.org> Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org While '#', '?', '.', '+', '*', and '_' are considered valid characters, their use is discouraged in recommended practices. Testing this found a few cases of '.'. The majority of the warnings were all from underscores. Signed-off-by: Rob Herring --- v2: - Disable check by default checks.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) -- 2.10.1 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/checks.c b/checks.c index 22ef4748d7be..67237ffe594e 100644 --- a/checks.c +++ b/checks.c @@ -252,6 +252,17 @@ static void check_node_name_chars(struct check *c, struct dt_info *dti, } ERROR(node_name_chars, check_node_name_chars, PROPNODECHARS "@"); +static void check_node_name_chars_strict(struct check *c, struct dt_info *dti, + struct node *node) +{ + int n = strspn(node->name, c->data); + + if (n < node->basenamelen) + FAIL(c, "Character '%c' not recommended in node %s", + node->name[n], node->fullpath); +} +CHECK(node_name_chars_strict, check_node_name_chars_strict, PROPNODECHARSSTRICT); + static void check_node_name_format(struct check *c, struct dt_info *dti, struct node *node) { @@ -737,6 +748,7 @@ static struct check *check_table[] = { &device_type_is_string, &model_is_string, &status_is_string, &property_name_chars_strict, + &node_name_chars_strict, &addr_size_cells, ®_format, &ranges_format, From patchwork Fri Feb 10 16:47:16 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Herring X-Patchwork-Id: 93797 Delivered-To: patch@linaro.org Received: by 10.140.20.99 with SMTP id 90csp590756qgi; Fri, 10 Feb 2017 08:48:54 -0800 (PST) X-Received: by 10.84.254.66 with SMTP id a2mr6035262pln.57.1486745334023; Fri, 10 Feb 2017 08:48:54 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l187si2137519pfl.162.2017.02.10.08.48.53; Fri, 10 Feb 2017 08:48:54 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of devicetree-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of devicetree-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=devicetree-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753443AbdBJQsG (ORCPT + 7 others); Fri, 10 Feb 2017 11:48:06 -0500 Received: from mail-ot0-f196.google.com ([74.125.82.196]:33481 "EHLO mail-ot0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752171AbdBJQsE (ORCPT ); Fri, 10 Feb 2017 11:48:04 -0500 Received: by mail-ot0-f196.google.com with SMTP id f9so4382658otd.0; Fri, 10 Feb 2017 08:47:22 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=e/fIcmKGToVxMY4fbUwpeBxnG4lWgmP/NjitnenpaxU=; b=n/jDqqDunLFDs392NUujEUsqHFmNL/f35bAQadK/VIM+9mD3X7GfvcCfjj5xiRptca rNXbdDxipMqibkggBQSI+SsIf4dXg/3+DIRXvs0O3jHQWshjQr/OgkeVMxWRXc0h4iKr mh6AeaUqttP85yzto28tfMEnltxpFl4tS6F05Rs7SE4ZZwuxRA/1EAQMxWhMyfta6E3E EeR5okLAHfJrpWRC+TxaKkj3r3+MVykAYJ/22WPxTKTFO/0x/sxXf2n4QuG3481JNw+n Zezrt5i04OKW7V2lOfDIhB5r9D1BPvLibA/qAeNZEcWFXblECVW1eEpmxI8EIHNsi1zM dKXA== X-Gm-Message-State: AMke39ljW596hvRKOmHsIzI+sP34evUyHggY7/4rWTTwVKmvy0j9/tmWx+2V4eQusK9NgA== X-Received: by 10.157.7.53 with SMTP id 50mr4883630ote.91.1486745242331; Fri, 10 Feb 2017 08:47:22 -0800 (PST) Received: from rob-hp-laptop.herring.priv (66-90-148-125.dyn.grandenetworks.net. [66.90.148.125]) by smtp.googlemail.com with ESMTPSA id r41sm1141714otc.40.2017.02.10.08.47.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 10 Feb 2017 08:47:21 -0800 (PST) From: Rob Herring To: David Gibson Cc: devicetree@vger.kernel.org, devicetree-compiler@vger.kernel.org Subject: [PATCH v2 3/4] checks: Warn on node name unit-addresses with '0x' or leading 0s Date: Fri, 10 Feb 2017 10:47:16 -0600 Message-Id: <20170210164717.1234-4-robh@kernel.org> X-Mailer: git-send-email 2.10.1 In-Reply-To: <20170210164717.1234-1-robh@kernel.org> References: <20170210164717.1234-1-robh@kernel.org> Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org Node name unit-addresses should never begin with 0x or leading 0s regardless of whether they have a bus specific address (i.e. one with commas) or not. Add warnings to check for these cases. Signed-off-by: Rob Herring --- v2: - Split into separate check from unit_address_vs_reg checks.c | 21 +++++++++++++++++++++ tests/run_tests.sh | 2 ++ tests/unit-addr-leading-0s.dts | 10 ++++++++++ tests/unit-addr-leading-0x.dts | 10 ++++++++++ 4 files changed, 43 insertions(+) create mode 100644 tests/unit-addr-leading-0s.dts create mode 100644 tests/unit-addr-leading-0x.dts -- 2.10.1 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/checks.c b/checks.c index 67237ffe594e..16d17d20caec 100644 --- a/checks.c +++ b/checks.c @@ -296,6 +296,26 @@ static void check_unit_address_vs_reg(struct check *c, struct dt_info *dti, } WARNING(unit_address_vs_reg, check_unit_address_vs_reg, NULL); +static void check_unit_address_format(struct check *c, struct dt_info *dti, + struct node *node) +{ + const char *unitname = get_unitname(node); + + if (!unitname[0]) + return; + + if (!strncmp(unitname, "0x", 2)) { + FAIL(c, "Node %s unit name should not have leading \"0x\"", + node->fullpath); + /* skip over 0x for next test */ + unitname += 2; + } + if (unitname[0] == '0' && isxdigit(unitname[1])) + FAIL(c, "Node %s unit name should not have leading 0s", + node->fullpath); +} +WARNING(unit_address_format, check_unit_address_format, NULL, &node_name_format); + static void check_property_name_chars(struct check *c, struct dt_info *dti, struct node *node) { @@ -753,6 +773,7 @@ static struct check *check_table[] = { &addr_size_cells, ®_format, &ranges_format, &unit_address_vs_reg, + &unit_address_format, &avoid_default_addr_size, &obsolete_chosen_interrupt_controller, diff --git a/tests/run_tests.sh b/tests/run_tests.sh index ed489dbdd269..0f5c3db79b80 100755 --- a/tests/run_tests.sh +++ b/tests/run_tests.sh @@ -540,6 +540,8 @@ dtc_tests () { check_tests obsolete-chosen-interrupt-controller.dts obsolete_chosen_interrupt_controller check_tests reg-without-unit-addr.dts unit_address_vs_reg check_tests unit-addr-without-reg.dts unit_address_vs_reg + check_tests unit-addr-leading-0x.dts unit_address_format + check_tests unit-addr-leading-0s.dts unit_address_format run_sh_test dtc-checkfails.sh node_name_chars -- -I dtb -O dtb bad_node_char.dtb run_sh_test dtc-checkfails.sh node_name_format -- -I dtb -O dtb bad_node_format.dtb run_sh_test dtc-checkfails.sh prop_name_chars -- -I dtb -O dtb bad_prop_char.dtb diff --git a/tests/unit-addr-leading-0s.dts b/tests/unit-addr-leading-0s.dts new file mode 100644 index 000000000000..7c8e2cebbc84 --- /dev/null +++ b/tests/unit-addr-leading-0s.dts @@ -0,0 +1,10 @@ +/dts-v1/; + +/ { + #address-cells = <1>; + #size-cells = <1>; + + node@001 { + reg = <1 0>; + }; +}; diff --git a/tests/unit-addr-leading-0x.dts b/tests/unit-addr-leading-0x.dts new file mode 100644 index 000000000000..7ed7254e8dc2 --- /dev/null +++ b/tests/unit-addr-leading-0x.dts @@ -0,0 +1,10 @@ +/dts-v1/; + +/ { + #address-cells = <1>; + #size-cells = <1>; + + node@0x1 { + reg = <1 0>; + }; +}; From patchwork Fri Feb 10 16:47:17 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Herring X-Patchwork-Id: 93798 Delivered-To: patch@linaro.org Received: by 10.140.20.99 with SMTP id 90csp590762qgi; Fri, 10 Feb 2017 08:48:55 -0800 (PST) X-Received: by 10.98.111.194 with SMTP id k185mr11262415pfc.83.1486745334945; Fri, 10 Feb 2017 08:48:54 -0800 (PST) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l187si2137519pfl.162.2017.02.10.08.48.54; Fri, 10 Feb 2017 08:48:54 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of devicetree-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of devicetree-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=devicetree-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752024AbdBJQsj (ORCPT + 7 others); Fri, 10 Feb 2017 11:48:39 -0500 Received: from mail-oi0-f67.google.com ([209.85.218.67]:36541 "EHLO mail-oi0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752502AbdBJQsE (ORCPT ); Fri, 10 Feb 2017 11:48:04 -0500 Received: by mail-oi0-f67.google.com with SMTP id u143so2905122oif.3; Fri, 10 Feb 2017 08:47:23 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=HI+UB9kv0c39XyWTeE1QpPs++0v2QJDrZ0DQ/XVNPso=; b=VVG/eUwNtHbcL1zODzhUsA9js/uqpVMp2pto3+UlfahgQlBm1JJHMiEzRH918a5aq5 5+uolskoNOKaNNaHS0N6rF0gbhoF7l39kZidAKFebxbKs94cNdM/ZqMm8QHwyvJ8BCgZ uhzm1a2eb5A1apsCjQlk+Xuon1wtpbI9PnslrFsauWFO2ygvnHv4BJyMihSiyFFcaBSl /X0Rbjt7DHj18uYxWsb+IRiKg9ggIJjtiLHdVbGF73GUzPj1QDtRRkrPJQWM9cYELdMp zZdr5En3/fKxIzC5BtO15UZnEzqEl6oaRZAZzypvb3PFh+xK5DSQ47QLkwThT9YWkb65 M/tA== X-Gm-Message-State: AMke39k34kpzWUJkiSUkNvzgiOpT6xoYq3xP3pzDFm+S13hAyOyzR2GcCJYhswk1pzwfTg== X-Received: by 10.202.179.9 with SMTP id c9mr4529718oif.152.1486745243248; Fri, 10 Feb 2017 08:47:23 -0800 (PST) Received: from rob-hp-laptop.herring.priv (66-90-148-125.dyn.grandenetworks.net. [66.90.148.125]) by smtp.googlemail.com with ESMTPSA id r41sm1141714otc.40.2017.02.10.08.47.22 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 10 Feb 2017 08:47:22 -0800 (PST) From: Rob Herring To: David Gibson Cc: devicetree@vger.kernel.org, devicetree-compiler@vger.kernel.org Subject: [PATCH v2 4/4] checks: Add bus checks for PCI buses Date: Fri, 10 Feb 2017 10:47:17 -0600 Message-Id: <20170210164717.1234-5-robh@kernel.org> X-Mailer: git-send-email 2.10.1 In-Reply-To: <20170210164717.1234-1-robh@kernel.org> References: <20170210164717.1234-1-robh@kernel.org> Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org Add PCI bridge and device node checks. We identify PCI bridges with 'device_type = "pci"' as only PCI bridges should set that property. For bridges, check that ranges is present and #address-cells and For devices, the primary check is the reg property and the unit address. Device unit addresses are in the form DD or DD,F where DD is the device 0-0x1f and F is the function 0-7. Signed-off-by: Rob Herring --- v2: - Remove bus_type functions. Combine test for bus_type and bridge check into single check. - Add a check that PCI bridge node name is pci or pcie. checks.c | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dtc.h | 7 ++++++ 2 files changed, 90 insertions(+) -- 2.10.1 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/checks.c b/checks.c index 16d17d20caec..9ebb148f947a 100644 --- a/checks.c +++ b/checks.c @@ -702,6 +702,86 @@ static void check_ranges_format(struct check *c, struct dt_info *dti, } WARNING(ranges_format, check_ranges_format, NULL, &addr_size_cells); +static const struct bus_type pci_bus = { + .type = PCI_BUS_TYPE, +}; + +static void check_pci_bridge(struct check *c, struct dt_info *dti, struct node *node) +{ + struct property *prop; + + prop = get_property(node, "device_type"); + if (!prop || strcmp(prop->val.val, "pci")) + return; + + node->bus = &pci_bus; + + if (strncmp(node->name, "pci", node->basenamelen) && + strncmp(node->name, "pcie", node->basenamelen)) + FAIL(c, "Node %s node name is not \"pci\" or \"pcie\"", + node->fullpath); + + prop = get_property(node, "ranges"); + if (!prop) + FAIL(c, "Node %s missing ranges for PCI bridge (or not a bridge)", + node->fullpath); + + if (node_addr_cells(node) != 3) + FAIL(c, "Node %s incorrect #address-cells for PCI bridge", + node->fullpath); + if (node_size_cells(node) != 2) + FAIL(c, "Node %s incorrect #size-cells for PCI bridge", + node->fullpath); +} +WARNING(pci_bridge, check_pci_bridge, NULL, + &device_type_is_string, &addr_size_cells); + +static void check_pci_device(struct check *c, struct dt_info *dti, struct node *node) +{ + struct property *prop; + const char *unitname = get_unitname(node); + char unit_addr[5]; + unsigned int dev, func, reg; + + if (!node->parent || !node->parent->bus || + (node->parent->bus->type != PCI_BUS_TYPE)) + return; + + prop = get_property(node, "reg"); + if (!prop) + return; + + reg = fdt32_to_cpu(*((cell_t *)prop->val.val)); + + dev = (reg & 0xf800) >> 11; + func = (reg & 0x700) >> 8; + + if (reg & 0xff000000) + FAIL(c, "Node %s PCI reg address is not configuration space", + node->fullpath); + + if (dev > 0x1f) + FAIL(c, "Node %s PCI device number out of range", + node->fullpath); + if (func > 7) + FAIL(c, "Node %s PCI function number out of range", + node->fullpath); + + if (func == 0) { + snprintf(unit_addr, sizeof(unit_addr), "%x", dev); + if (!strcmp(unitname, unit_addr)) + return; + } + + snprintf(unit_addr, sizeof(unit_addr), "%x,%x", dev, func); + if (!strcmp(unitname, unit_addr)) + return; + + FAIL(c, "Node %s PCI unit address format error, expected \"%s\"", + node->fullpath, unit_addr); +} +WARNING(pci_device, check_pci_device, NULL, ®_format); + /* * Style checks */ @@ -775,6 +855,9 @@ static struct check *check_table[] = { &unit_address_vs_reg, &unit_address_format, + &pci_bridge, + &pci_device, + &avoid_default_addr_size, &obsolete_chosen_interrupt_controller, diff --git a/dtc.h b/dtc.h index c6f125c68ba8..c538ef4afafb 100644 --- a/dtc.h +++ b/dtc.h @@ -136,6 +136,12 @@ struct label { struct label *next; }; +#define PCI_BUS_TYPE 1 + +struct bus_type { + int type; +}; + struct property { bool deleted; char *name; @@ -162,6 +168,7 @@ struct node { int addr_cells, size_cells; struct label *labels; + const struct bus_type *bus; }; #define for_each_label_withdel(l0, l) \