From patchwork Fri Nov 16 22:10:57 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Herring X-Patchwork-Id: 151379 Delivered-To: patch@linaro.org Received: by 2002:a2e:299d:0:0:0:0:0 with SMTP id p29-v6csp958051ljp; Fri, 16 Nov 2018 14:11:08 -0800 (PST) X-Google-Smtp-Source: AJdET5fwdzmjHnHTzBQciRn3hKHcHE/pJcZ3ClDAjKoPwkFA5RcZ9HF3SOww5Upl4NezhOAYZHCJ X-Received: by 2002:a62:571b:: with SMTP id l27-v6mr13073800pfb.209.1542406268629; Fri, 16 Nov 2018 14:11:08 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1542406268; cv=none; d=google.com; s=arc-20160816; b=JD7ZX7mAghBe0Ba2JXTUy4ELU/u7VIr6VvDv237tSICMIVoCzJgi4q8FfDJ9Wlx6Nz bZdBnVuVGiyuUrZrBntNdj2KWn9BSDeKo3EcdkiLXGnF7Ax4iSDxxO9OIjQy0VVWVs95 bt3CH0QSLwIyGjJOY8hGGx8xrVkOY/yjOxqI4pnOjabxfTgNAjjqLvnq0OSeF8pX4rhr bsCKOyqiqEMsRJkctwC0l7VMWp2pHdk4KXrVIvwZ1fidcEu6O6eM+MG3ody2ily0aWfL 4DgKVwt7DS/A/q3yPz/SGsRX1USW0HplU5HJ3E9RLuemBPW9FBrRtNvUbn/vM82xntlJ xphA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=/ahPfAPBkVVHlKR+9OuAA9mtdstlQ5mUFYmT8zTXrUI=; b=efnVNf5USuH/D0I8CrTouTDbX22nPv5DS3ro8mJuvRtdM1WlGXDuf21mRM6NYuMKBo TgB/SCcYkOR+FCk7QAhx27ELGTc7q9M+HaYCjXFp+U+Wz2a2dUp5fwFD8ma/9vMr5rwJ LXLPn4nk1YotrNpG2M2AIl9DoEB0nK6SzofqsH9fs5fny034gX9RzeiV47SBwscyNlHr /byWErF5CQU8sUlBn490CMBQFn5wdPdXVPRjNHwFjaIstmia74LJdi458LFcuPpkPvoH Dh9U7m/upp6+JeJEYbacIADWmC9i2pBoBrHvlSNeSHEXCyGRqBTtdkOwzsGFi4jsxuwQ Te8A== ARC-Authentication-Results: i=1; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h16si31234342pgh.283.2018.11.16.14.11.08; Fri, 16 Nov 2018 14:11:08 -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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726035AbeKQIZR (ORCPT + 6 others); Sat, 17 Nov 2018 03:25:17 -0500 Received: from mail-oi1-f194.google.com ([209.85.167.194]:42141 "EHLO mail-oi1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725995AbeKQIZR (ORCPT ); Sat, 17 Nov 2018 03:25:17 -0500 Received: by mail-oi1-f194.google.com with SMTP id w13so8303740oiw.9; Fri, 16 Nov 2018 14:11:06 -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:mime-version :content-transfer-encoding; bh=/ahPfAPBkVVHlKR+9OuAA9mtdstlQ5mUFYmT8zTXrUI=; b=CelCnjHm7Z+WOvM46/5vqqrNIlNGxxVDYMAnP/BOQGSFHZT8Cm3HylP2litkp0RvtO EHBfF6R+dC+8+kS9K6rY5XBTqw8OyFvrnrK+SdIJuSaidzhkGafQdU4evB6vEYzDc1Rp XG9ODPx4VGN4ABJV2FPRwfUBLF+MC9o4z6qo7w6WRDSYgOyvKgg/HWovaom9Ud76gZEH d+w5+BlPzs+0yUj2/Ugwt1Q62f6sEDMZfnNsZRUOuPhWtfTgvjoH2pO7p5E5pOzJ3f7Z qAaMjHkzuDEbqyYHKoPpOify89S/5dULvNep1a7k0ZrvuDHu97jjov5CZu4QXufvFc7v L0dA== X-Gm-Message-State: AGRZ1gJuImZamI5cF5LPi+L5sNY1/McBkeUn6eZm6b4BP+TwecMaQWpc UCWYMFZ3x7R7/mX4mF6Oow== X-Received: by 2002:aca:fd91:: with SMTP id b139mr2056107oii.83.1542406266239; Fri, 16 Nov 2018 14:11:06 -0800 (PST) Received: from localhost.localdomain (mobile-166-173-57-127.mycingular.net. [166.173.57.127]) by smtp.googlemail.com with ESMTPSA id p204-v6sm12142631oib.25.2018.11.16.14.11.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 16 Nov 2018 14:11:05 -0800 (PST) From: Rob Herring To: Frank Rowand Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] of: Use device_type helpers to access the node type Date: Fri, 16 Nov 2018 16:10:57 -0600 Message-Id: <20181116221104.23024-1-robh@kernel.org> X-Mailer: git-send-email 2.19.1 MIME-Version: 1.0 Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org Remove directly accessing device_node.type pointer and use the accessors instead. This will eventually allow removing the type pointer. Cc: Frank Rowand Cc: devicetree@vger.kernel.org Signed-off-by: Rob Herring --- drivers/of/address.c | 4 ++-- drivers/of/base.c | 18 ++++++++++++------ drivers/of/device.c | 9 +++++---- 3 files changed, 19 insertions(+), 12 deletions(-) -- 2.19.1 diff --git a/drivers/of/address.c b/drivers/of/address.c index 7ddbf0a1ab86..ae48e121b6e7 100644 --- a/drivers/of/address.c +++ b/drivers/of/address.c @@ -110,8 +110,8 @@ static int of_bus_pci_match(struct device_node *np) * "vci" is for the /chaos bridge on 1st-gen PCI powermacs * "ht" is hypertransport */ - return !strcmp(np->type, "pci") || !strcmp(np->type, "pciex") || - !strcmp(np->type, "vci") || !strcmp(np->type, "ht"); + return of_node_is_type(np, "pci") || of_node_is_type(np, "pciex") || + of_node_is_type(np, "vci") || of_node_is_type(np, "ht"); } static void of_bus_pci_count_cells(struct device_node *np, diff --git a/drivers/of/base.c b/drivers/of/base.c index 09692c9b32a7..57c837140a8b 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c @@ -79,6 +79,13 @@ bool of_node_name_prefix(const struct device_node *np, const char *prefix) } EXPORT_SYMBOL(of_node_name_prefix); +static bool __of_node_is_type(const struct device_node *np, const char *type) +{ + const char *match = __of_get_property(np, "device_type", NULL); + + return np && match && type && !strcmp(match, type); +} + int of_n_addr_cells(struct device_node *np) { u32 cells; @@ -482,7 +489,7 @@ static int __of_device_is_compatible(const struct device_node *device, /* Matching type is better than matching name */ if (type && type[0]) { - if (!device->type || of_node_cmp(type, device->type)) + if (!__of_node_is_type(device, type)) return 0; score += 2; } @@ -775,7 +782,7 @@ struct device_node *of_get_next_cpu_node(struct device_node *prev) } for (; next; next = next->sibling) { if (!(of_node_name_eq(next, "cpu") || - (next->type && !of_node_cmp(next->type, "cpu")))) + __of_node_is_type(next, "cpu"))) continue; if (of_node_get(next)) break; @@ -983,8 +990,7 @@ struct device_node *of_find_node_by_type(struct device_node *from, raw_spin_lock_irqsave(&devtree_lock, flags); for_each_of_allnodes_from(from, np) - if (np->type && (of_node_cmp(np->type, type) == 0) - && of_node_get(np)) + if (__of_node_is_type(np, type) && of_node_get(np)) break; of_node_put(from); raw_spin_unlock_irqrestore(&devtree_lock, flags); @@ -2108,9 +2114,9 @@ struct device_node *of_find_next_cache_node(const struct device_node *np) /* OF on pmac has nodes instead of properties named "l2-cache" * beneath CPU nodes. */ - if (IS_ENABLED(CONFIG_PPC_PMAC) && !strcmp(np->type, "cpu")) + if (IS_ENABLED(CONFIG_PPC_PMAC) && of_node_is_type(np, "cpu")) for_each_child_of_node(np, child) - if (!strcmp(child->type, "cache")) + if (of_node_is_type(child, "cache")) return child; return NULL; diff --git a/drivers/of/device.c b/drivers/of/device.c index 5592437bb3d1..3717f2a20d0d 100644 --- a/drivers/of/device.c +++ b/drivers/of/device.c @@ -211,7 +211,7 @@ static ssize_t of_device_get_modalias(struct device *dev, char *str, ssize_t len /* Name & Type */ /* %p eats all alphanum characters, so %c must be used here */ csize = snprintf(str, len, "of:N%pOFn%c%s", dev->of_node, 'T', - dev->of_node->type); + of_node_get_device_type(dev->of_node)); tsize = csize; len -= csize; if (str) @@ -281,7 +281,7 @@ EXPORT_SYMBOL_GPL(of_device_modalias); */ void of_device_uevent(struct device *dev, struct kobj_uevent_env *env) { - const char *compat; + const char *compat, *type; struct alias_prop *app; struct property *p; int seen = 0; @@ -291,8 +291,9 @@ void of_device_uevent(struct device *dev, struct kobj_uevent_env *env) add_uevent_var(env, "OF_NAME=%pOFn", dev->of_node); add_uevent_var(env, "OF_FULLNAME=%pOF", dev->of_node); - if (dev->of_node->type && strcmp("", dev->of_node->type) != 0) - add_uevent_var(env, "OF_TYPE=%s", dev->of_node->type); + type = of_node_get_device_type(dev->of_node); + if (type) + add_uevent_var(env, "OF_TYPE=%s", type); /* Since the compatible field can contain pretty much anything * it's not really legal to split it out with commas. We split it