From patchwork Fri Sep 15 05:40:49 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oliver O'Halloran X-Patchwork-Id: 814064 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3xtknJ4w1fz9sPr for ; Fri, 15 Sep 2017 15:42:28 +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="RpqA//My"; dkim-atps=neutral Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 3xtknH66x1zDrXS for ; Fri, 15 Sep 2017 15:42:27 +1000 (AEST) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="RpqA//My"; dkim-atps=neutral X-Original-To: skiboot@lists.ozlabs.org Delivered-To: skiboot@lists.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:400e:c00::241; helo=mail-pf0-x241.google.com; envelope-from=oohall@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="RpqA//My"; dkim-atps=neutral Received: from mail-pf0-x241.google.com (mail-pf0-x241.google.com [IPv6:2607:f8b0:400e:c00::241]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 3xtkm45dlyzDrXS for ; Fri, 15 Sep 2017 15:41:24 +1000 (AEST) Received: by mail-pf0-x241.google.com with SMTP id q76so758600pfq.5 for ; Thu, 14 Sep 2017 22:41:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=pUYeQe4rSTTUUCSsqYeFUxkSis1bgAwL0/zy0eTI+fQ=; b=RpqA//MyghWlkqmhq5vkkZaCurmVFkqB+26fNApQh2JKpszyrCuKU2cnZyW2Yw0sh1 9YZqQ/uxqDIBJGnvhpoO7EH8e4T8EdxXG19CoJbbUZbmcRPW3wHUJIItg4VeqAKoFosS 3V67I9dqcexinfXISqRsyLdC7vv8yIIh8YRgMyvN05LzJj+BoJLC1BRZK0R9Pwj/mbuU iWQlkBtucskc8P+pCsGi9/paygWNVRRGcRJQ0ylJfQ5/0Y7P6/BjBKyWQNr5ggTjnRKG LRZzqsS1y1vWQzi4tDMqF5T9SOubxDA6qlje+Tg3PAAmJjiIBUHApinJBnHEcglSKWjH Wqng== 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=pUYeQe4rSTTUUCSsqYeFUxkSis1bgAwL0/zy0eTI+fQ=; b=nzPXSeZ5ElMYUm9HfzmH+rf8m5GOTa7gy5wqnahMkE1q431iRYd9fsyTLd7gAU024Y tOAeqF1jHCTP55CreQlAdCJXIAkFKPyv/ovQ+ya8Le2zQZPTAJ2B5HSQ93TN1aRld8aa RoBPuajA7irJrl5jr6bniTZwGCIrK/yxyeVVbHw508fSjqYYjWjzWeh/qPu20F/6Wow7 UP3PkQpylw6DISiWBaLY0LtwqBaXblFrr6paBvlph7pbJjGSo0/ELFHIFQLYkWSn/GQO 3xKbAuTNHzLdq3A2665pZzRt8z59fIcgAFsYi9RLFvB4Bbjx56vpLx5JSQVIQE0gWMiq IJyw== X-Gm-Message-State: AHPjjUiEpzBUeb0FIy00byJ2X3uK4tZR6sGNmvgLFwuoRre574S524ZW BUaedZcxZM3sCIcO X-Google-Smtp-Source: ADKCNb6LTX9pbPTj09MseUa3hvSNImeagInXHO9nRKEWzer1izaEWWis3jvAYza4s5NGq8gbaE65IQ== X-Received: by 10.101.69.194 with SMTP id m2mr22952908pgr.20.1505454082606; Thu, 14 Sep 2017 22:41:22 -0700 (PDT) Received: from flat-canetoad.ozlabs.ibm.com ([122.99.82.10]) by smtp.gmail.com with ESMTPSA id z8sm280581pgc.93.2017.09.14.22.41.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 14 Sep 2017 22:41:22 -0700 (PDT) From: Oliver O'Halloran To: skiboot@lists.ozlabs.org Date: Fri, 15 Sep 2017 15:40:49 +1000 Message-Id: <20170915054059.32109-4-oohall@gmail.com> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20170915054059.32109-1-oohall@gmail.com> References: <20170915054059.32109-1-oohall@gmail.com> Subject: [Skiboot] [PATCH 04/14] astbmc: Add methods for handing DT based slots X-BeenThere: skiboot@lists.ozlabs.org X-Mailman-Version: 2.1.24 Precedence: list List-Id: Mailing list for skiboot development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: skiboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Skiboot" Signed-off-by: Oliver O'Halloran --- platforms/astbmc/astbmc.h | 1 + platforms/astbmc/slots.c | 48 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/platforms/astbmc/astbmc.h b/platforms/astbmc/astbmc.h index d538f97538dc..88eb43f1f111 100644 --- a/platforms/astbmc/astbmc.h +++ b/platforms/astbmc/astbmc.h @@ -54,5 +54,6 @@ extern void check_all_slot_table(void); extern void slot_table_init(const struct slot_table_entry *top_table); extern void slot_table_get_slot_info(struct phb *phb, struct pci_device * pd); +void dt_slot_get_slot_info(struct phb *phb, struct pci_device *pd); #endif /* __ASTBMC_H */ diff --git a/platforms/astbmc/slots.c b/platforms/astbmc/slots.c index 5de51209ed59..a5bd50ee8212 100644 --- a/platforms/astbmc/slots.c +++ b/platforms/astbmc/slots.c @@ -124,6 +124,54 @@ void slot_table_get_slot_info(struct phb *phb, struct pci_device *pd) slot->data = (void *)ent; } +static void dt_slot_add_properties(struct pci_slot *slot, + struct dt_node *np) +{ + struct dt_node *slot_np = slot->data; + const char *label = NULL; + + if (slot_np) + label = dt_prop_get_def(slot_np, "ibm,slot-label", NULL); + + pci_slot_add_loc(slot, np, label); +} + +void dt_slot_get_slot_info(struct phb *phb, struct pci_device *pd) +{ + struct dt_node *slot_np; + struct pci_slot *slot; + const char *name = NULL; + bool pluggable = false; + + if (!pd || pd->slot) + return; + + slot_np = map_pci_dev_to_slot(phb, pd); + if (slot_np) { + pluggable = dt_has_node_property(slot_np, + "ibm,pluggable", NULL); + name = dt_prop_get_def(slot_np, "ibm,slot-label", NULL); + } + + if (!slot_np || !name) { + slot = pcie_slot_create_dynamic(phb, pd); + if (slot) { + slot->ops.add_properties = dt_slot_add_properties; + slot->pluggable = true; + slot->data = (void *)slot_np; + } + + return; + } + + slot = pcie_slot_create(phb, pd); + assert(slot); + + slot->ops.add_properties = dt_slot_add_properties; + slot->pluggable = pluggable; + slot->data = (void *)slot_np; +} + static int __pci_find_dev_by_location(struct phb *phb, struct pci_device *pd, void *userdata) {