{"id":831128,"url":"http://patchwork.ozlabs.org/api/1.2/patches/831128/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-pci/patch/20171027072612.26565-6-jeffy.chen@rock-chips.com/","project":{"id":28,"url":"http://patchwork.ozlabs.org/api/1.2/projects/28/?format=json","name":"Linux PCI development","link_name":"linux-pci","list_id":"linux-pci.vger.kernel.org","list_email":"linux-pci@vger.kernel.org","web_url":null,"scm_url":null,"webscm_url":null,"list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<20171027072612.26565-6-jeffy.chen@rock-chips.com>","list_archive_url":null,"date":"2017-10-27T07:26:10","name":"[RFC,v10,5/7] PCI: Make pci_platform_pm_ops's callbacks optional","commit_ref":null,"pull_url":null,"state":"not-applicable","archived":false,"hash":"e37c01c43e71a2c5fdcfc55ce3976f6abdccc698","submitter":{"id":67754,"url":"http://patchwork.ozlabs.org/api/1.2/people/67754/?format=json","name":"Jeffy Chen","email":"jeffy.chen@rock-chips.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/linux-pci/patch/20171027072612.26565-6-jeffy.chen@rock-chips.com/mbox/","series":[{"id":10523,"url":"http://patchwork.ozlabs.org/api/1.2/series/10523/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-pci/list/?series=10523","date":"2017-10-27T07:26:06","name":"PCI: rockchip: Move PCIe WAKE# handling into pci core","version":10,"mbox":"http://patchwork.ozlabs.org/series/10523/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/831128/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/831128/checks/","tags":{},"related":[],"headers":{"Return-Path":"<linux-pci-owner@vger.kernel.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":"ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=linux-pci-owner@vger.kernel.org;\n\treceiver=<UNKNOWN>)","Received":["from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3yNb700Cxsz9t34\n\tfor <incoming@patchwork.ozlabs.org>;\n\tFri, 27 Oct 2017 18:27:24 +1100 (AEDT)","(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1751530AbdJ0H1V (ORCPT <rfc822;incoming@patchwork.ozlabs.org>);\n\tFri, 27 Oct 2017 03:27:21 -0400","from regular1.263xmail.com ([211.150.99.136]:42223 \"EHLO\n\tregular1.263xmail.com\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1751072AbdJ0H1T (ORCPT\n\t<rfc822; linux-pci@vger.kernel.org>); Fri, 27 Oct 2017 03:27:19 -0400","from jeffy.chen?rock-chips.com (unknown [192.168.167.243])\n\tby regular1.263xmail.com (Postfix) with ESMTP id EE4DB5D;\n\tFri, 27 Oct 2017 15:27:16 +0800 (CST)","from localhost (localhost [127.0.0.1])\n\tby smtp.263.net (Postfix) with ESMTPA id 129A7399;\n\tFri, 27 Oct 2017 15:27:04 +0800 (CST)","from localhost (unknown [103.29.142.67])\n\tby smtp.263.net (Postfix) whith ESMTP id 27511MBL0F1;\n\tFri, 27 Oct 2017 15:27:14 +0800 (CST)"],"X-263anti-spam":"KSV:0;","X-MAIL-GRAY":"0","X-MAIL-DELIVERY":"1","X-KSVirus-check":"0","X-ABS-CHECKED":"4","X-RL-SENDER":"jeffy.chen@rock-chips.com","X-FST-TO":"linux-kernel@vger.kernel.org","X-SENDER-IP":"103.29.142.67","X-LOGIN-NAME":"jeffy.chen@rock-chips.com","X-UNIQUE-TAG":"<f18191cd199be1460ebc37e6f94d652c>","X-ATTACHMENT-NUM":"0","X-SENDER":"cjf@rock-chips.com","X-DNS-TYPE":"0","From":"Jeffy Chen <jeffy.chen@rock-chips.com>","To":"linux-kernel@vger.kernel.org, bhelgaas@google.com","Cc":"linux-pm@vger.kernel.org, tony@atomide.com,\n\tshawn.lin@rock-chips.com, briannorris@chromium.org,\n\trjw@rjwysocki.net, dianders@chromium.org,\n\tJeffy Chen <jeffy.chen@rock-chips.com>, linux-pci@vger.kernel.org","Subject":"[RFC PATCH v10 5/7] PCI: Make pci_platform_pm_ops's callbacks\n\toptional","Date":"Fri, 27 Oct 2017 15:26:10 +0800","Message-Id":"<20171027072612.26565-6-jeffy.chen@rock-chips.com>","X-Mailer":"git-send-email 2.11.0","In-Reply-To":"<20171027072612.26565-1-jeffy.chen@rock-chips.com>","References":"<20171027072612.26565-1-jeffy.chen@rock-chips.com>","Sender":"linux-pci-owner@vger.kernel.org","Precedence":"bulk","List-ID":"<linux-pci.vger.kernel.org>","X-Mailing-List":"linux-pci@vger.kernel.org"},"content":"Allow platforms not to provide some of the pci_platform_pm_ops's\ncallbacks.\n\nAlso change the return value from -ENOSYS to -ENODEV for:\nwarning: drivers/pci/pci.c,594: ENOSYS means 'invalid syscall nr' and nothing else\n\nSigned-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>\n---\n\nChanges in v10: None\nChanges in v9: None\nChanges in v8: None\nChanges in v7: None\nChanges in v6: None\nChanges in v5: None\nChanges in v3: None\nChanges in v2: None\n\n drivers/pci/pci.c | 38 +++++++++++++++++++++++++-------------\n drivers/pci/pci.h |  5 +----\n 2 files changed, 26 insertions(+), 17 deletions(-)","diff":"diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c\nindex f0d68066c726..e120b00a9017 100644\n--- a/drivers/pci/pci.c\n+++ b/drivers/pci/pci.c\n@@ -572,46 +572,58 @@ static void pci_restore_bars(struct pci_dev *dev)\n \n static const struct pci_platform_pm_ops *pci_platform_pm;\n \n-int pci_set_platform_pm(const struct pci_platform_pm_ops *ops)\n+void pci_set_platform_pm(const struct pci_platform_pm_ops *ops)\n {\n-\tif (!ops->is_manageable || !ops->set_state  || !ops->get_state ||\n-\t    !ops->choose_state  || !ops->set_wakeup || !ops->need_resume)\n-\t\treturn -EINVAL;\n \tpci_platform_pm = ops;\n-\treturn 0;\n }\n \n static inline bool platform_pci_power_manageable(struct pci_dev *dev)\n {\n-\treturn pci_platform_pm ? pci_platform_pm->is_manageable(dev) : false;\n+\tif (pci_platform_pm && pci_platform_pm->is_manageable)\n+\t\treturn pci_platform_pm->is_manageable(dev);\n+\n+\treturn false;\n }\n \n static inline int platform_pci_set_power_state(struct pci_dev *dev,\n \t\t\t\t\t       pci_power_t t)\n {\n-\treturn pci_platform_pm ? pci_platform_pm->set_state(dev, t) : -ENOSYS;\n+\tif (pci_platform_pm && pci_platform_pm->set_state)\n+\t\treturn pci_platform_pm->set_state(dev, t);\n+\n+\treturn -ENODEV;\n }\n \n static inline pci_power_t platform_pci_get_power_state(struct pci_dev *dev)\n {\n-\treturn pci_platform_pm ? pci_platform_pm->get_state(dev) : PCI_UNKNOWN;\n+\tif (pci_platform_pm && pci_platform_pm->get_state)\n+\t\treturn pci_platform_pm->get_state(dev);\n+\n+\treturn PCI_UNKNOWN;\n }\n \n static inline pci_power_t platform_pci_choose_state(struct pci_dev *dev)\n {\n-\treturn pci_platform_pm ?\n-\t\t\tpci_platform_pm->choose_state(dev) : PCI_POWER_ERROR;\n+\tif (pci_platform_pm && pci_platform_pm->choose_state)\n+\t\treturn pci_platform_pm->choose_state(dev);\n+\n+\treturn PCI_POWER_ERROR;\n }\n \n static inline int platform_pci_set_wakeup(struct pci_dev *dev, bool enable)\n {\n-\treturn pci_platform_pm ?\n-\t\t\tpci_platform_pm->set_wakeup(dev, enable) : -ENODEV;\n+\tif (pci_platform_pm && pci_platform_pm->set_wakeup)\n+\t\treturn pci_platform_pm->set_wakeup(dev, enable);\n+\n+\treturn -ENODEV;\n }\n \n static inline bool platform_pci_need_resume(struct pci_dev *dev)\n {\n-\treturn pci_platform_pm ? pci_platform_pm->need_resume(dev) : false;\n+\tif (pci_platform_pm && pci_platform_pm->need_resume)\n+\t\treturn pci_platform_pm->need_resume(dev);\n+\n+\treturn false;\n }\n \n /**\ndiff --git a/drivers/pci/pci.h b/drivers/pci/pci.h\nindex e816a13e6259..048668271014 100644\n--- a/drivers/pci/pci.h\n+++ b/drivers/pci/pci.h\n@@ -52,9 +52,6 @@ int pci_probe_reset_function(struct pci_dev *dev);\n  * @need_resume: returns 'true' if the given device (which is currently\n  *\t\tsuspended) needs to be resumed to be configured for system\n  *\t\twakeup.\n- *\n- * If given platform is generally capable of power managing PCI devices, all of\n- * these callbacks are mandatory.\n  */\n struct pci_platform_pm_ops {\n \tbool (*is_manageable)(struct pci_dev *dev);\n@@ -65,7 +62,7 @@ struct pci_platform_pm_ops {\n \tbool (*need_resume)(struct pci_dev *dev);\n };\n \n-int pci_set_platform_pm(const struct pci_platform_pm_ops *ops);\n+void pci_set_platform_pm(const struct pci_platform_pm_ops *ops);\n void pci_update_current_state(struct pci_dev *dev, pci_power_t state);\n void pci_power_up(struct pci_dev *dev);\n void pci_disable_enabled_device(struct pci_dev *dev);\n","prefixes":["RFC","v10","5/7"]}