powerpc/pseries: Stop using eeh_ops->init()
authorOliver O'Halloran <oohall@gmail.com>
Fri, 18 Sep 2020 09:30:44 +0000 (19:30 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Tue, 6 Oct 2020 12:22:24 +0000 (23:22 +1100)
Fold pseries_eeh_init() into eeh_pseries_init() rather than having
eeh_init() call it via eeh_ops->init(). It's simpler and it'll let us
delete eeh_ops.init.

Signed-off-by: Oliver O'Halloran <oohall@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20200918093050.37344-3-oohall@gmail.com
arch/powerpc/platforms/pseries/eeh_pseries.c

index df32b8c..a3ed6a0 100644 (file)
@@ -237,88 +237,6 @@ static unsigned char slot_errbuf[RTAS_ERROR_LOG_MAX];
 static DEFINE_SPINLOCK(slot_errbuf_lock);
 static int eeh_error_buf_size;
 
-/**
- * pseries_eeh_init - EEH platform dependent initialization
- *
- * EEH platform dependent initialization on pseries.
- */
-static int pseries_eeh_init(void)
-{
-       struct pci_controller *phb;
-       struct pci_dn *pdn;
-       int addr, config_addr;
-
-       /* figure out EEH RTAS function call tokens */
-       ibm_set_eeh_option              = rtas_token("ibm,set-eeh-option");
-       ibm_set_slot_reset              = rtas_token("ibm,set-slot-reset");
-       ibm_read_slot_reset_state2      = rtas_token("ibm,read-slot-reset-state2");
-       ibm_read_slot_reset_state       = rtas_token("ibm,read-slot-reset-state");
-       ibm_slot_error_detail           = rtas_token("ibm,slot-error-detail");
-       ibm_get_config_addr_info2       = rtas_token("ibm,get-config-addr-info2");
-       ibm_get_config_addr_info        = rtas_token("ibm,get-config-addr-info");
-       ibm_configure_pe                = rtas_token("ibm,configure-pe");
-
-       /*
-        * ibm,configure-pe and ibm,configure-bridge have the same semantics,
-        * however ibm,configure-pe can be faster.  If we can't find
-        * ibm,configure-pe then fall back to using ibm,configure-bridge.
-        */
-       if (ibm_configure_pe == RTAS_UNKNOWN_SERVICE)
-               ibm_configure_pe        = rtas_token("ibm,configure-bridge");
-
-       /*
-        * Necessary sanity check. We needn't check "get-config-addr-info"
-        * and its variant since the old firmware probably support address
-        * of domain/bus/slot/function for EEH RTAS operations.
-        */
-       if (ibm_set_eeh_option == RTAS_UNKNOWN_SERVICE          ||
-           ibm_set_slot_reset == RTAS_UNKNOWN_SERVICE          ||
-           (ibm_read_slot_reset_state2 == RTAS_UNKNOWN_SERVICE &&
-            ibm_read_slot_reset_state == RTAS_UNKNOWN_SERVICE) ||
-           ibm_slot_error_detail == RTAS_UNKNOWN_SERVICE       ||
-           ibm_configure_pe == RTAS_UNKNOWN_SERVICE) {
-               pr_info("EEH functionality not supported\n");
-               return -EINVAL;
-       }
-
-       /* Initialize error log lock and size */
-       spin_lock_init(&slot_errbuf_lock);
-       eeh_error_buf_size = rtas_token("rtas-error-log-max");
-       if (eeh_error_buf_size == RTAS_UNKNOWN_SERVICE) {
-               pr_info("%s: unknown EEH error log size\n",
-                       __func__);
-               eeh_error_buf_size = 1024;
-       } else if (eeh_error_buf_size > RTAS_ERROR_LOG_MAX) {
-               pr_info("%s: EEH error log size %d exceeds the maximal %d\n",
-                       __func__, eeh_error_buf_size, RTAS_ERROR_LOG_MAX);
-               eeh_error_buf_size = RTAS_ERROR_LOG_MAX;
-       }
-
-       /* Set EEH probe mode */
-       eeh_add_flag(EEH_PROBE_MODE_DEVTREE | EEH_ENABLE_IO_FOR_LOG);
-
-       /* Set EEH machine dependent code */
-       ppc_md.pcibios_bus_add_device = pseries_pcibios_bus_add_device;
-
-       if (is_kdump_kernel() || reset_devices) {
-               pr_info("Issue PHB reset ...\n");
-               list_for_each_entry(phb, &hose_list, list_node) {
-                       pdn = list_first_entry(&PCI_DN(phb->dn)->child_list, struct pci_dn, list);
-                       addr = (pdn->busno << 16) | (pdn->devfn << 8);
-                       config_addr = pseries_eeh_get_config_addr(phb, addr);
-                       /* invalid PE config addr */
-                       if (config_addr == 0)
-                               continue;
-
-                       pseries_eeh_phb_reset(phb, config_addr, EEH_RESET_FUNDAMENTAL);
-                       pseries_eeh_phb_reset(phb, config_addr, EEH_RESET_DEACTIVATE);
-                       pseries_eeh_phb_configure_bridge(phb, config_addr);
-               }
-       }
-
-       return 0;
-}
-
 static int pseries_eeh_cap_start(struct pci_dn *pdn)
 {
        u32 status;
@@ -963,7 +881,6 @@ static int pseries_notify_resume(struct eeh_dev *edev)
 
 static struct eeh_ops pseries_eeh_ops = {
        .name                   = "pseries",
-       .init                   = pseries_eeh_init,
        .probe                  = pseries_eeh_probe,
        .set_option             = pseries_eeh_set_option,
        .get_state              = pseries_eeh_get_state,
@@ -988,7 +905,77 @@ static struct eeh_ops pseries_eeh_ops = {
  */
 static int __init eeh_pseries_init(void)
 {
-       int ret;
+       struct pci_controller *phb;
+       struct pci_dn *pdn;
+       int ret, addr, config_addr;
+
+       /* figure out EEH RTAS function call tokens */
+       ibm_set_eeh_option              = rtas_token("ibm,set-eeh-option");
+       ibm_set_slot_reset              = rtas_token("ibm,set-slot-reset");
+       ibm_read_slot_reset_state2      = rtas_token("ibm,read-slot-reset-state2");
+       ibm_read_slot_reset_state       = rtas_token("ibm,read-slot-reset-state");
+       ibm_slot_error_detail           = rtas_token("ibm,slot-error-detail");
+       ibm_get_config_addr_info2       = rtas_token("ibm,get-config-addr-info2");
+       ibm_get_config_addr_info        = rtas_token("ibm,get-config-addr-info");
+       ibm_configure_pe                = rtas_token("ibm,configure-pe");
+
+       /*
+        * ibm,configure-pe and ibm,configure-bridge have the same semantics,
+        * however ibm,configure-pe can be faster.  If we can't find
+        * ibm,configure-pe then fall back to using ibm,configure-bridge.
+        */
+       if (ibm_configure_pe == RTAS_UNKNOWN_SERVICE)
+               ibm_configure_pe        = rtas_token("ibm,configure-bridge");
+
+       /*
+        * Necessary sanity check. We needn't check "get-config-addr-info"
+        * and its variant since the old firmware probably support address
+        * of domain/bus/slot/function for EEH RTAS operations.
+        */
+       if (ibm_set_eeh_option == RTAS_UNKNOWN_SERVICE          ||
+           ibm_set_slot_reset == RTAS_UNKNOWN_SERVICE          ||
+           (ibm_read_slot_reset_state2 == RTAS_UNKNOWN_SERVICE &&
+            ibm_read_slot_reset_state == RTAS_UNKNOWN_SERVICE) ||
+           ibm_slot_error_detail == RTAS_UNKNOWN_SERVICE       ||
+           ibm_configure_pe == RTAS_UNKNOWN_SERVICE) {
+               pr_info("EEH functionality not supported\n");
+               return -EINVAL;
+       }
+
+       /* Initialize error log lock and size */
+       spin_lock_init(&slot_errbuf_lock);
+       eeh_error_buf_size = rtas_token("rtas-error-log-max");
+       if (eeh_error_buf_size == RTAS_UNKNOWN_SERVICE) {
+               pr_info("%s: unknown EEH error log size\n",
+                       __func__);
+               eeh_error_buf_size = 1024;
+       } else if (eeh_error_buf_size > RTAS_ERROR_LOG_MAX) {
+               pr_info("%s: EEH error log size %d exceeds the maximal %d\n",
+                       __func__, eeh_error_buf_size, RTAS_ERROR_LOG_MAX);
+               eeh_error_buf_size = RTAS_ERROR_LOG_MAX;
+       }
+
+       /* Set EEH probe mode */
+       eeh_add_flag(EEH_PROBE_MODE_DEVTREE | EEH_ENABLE_IO_FOR_LOG);
+
+       /* Set EEH machine dependent code */
+       ppc_md.pcibios_bus_add_device = pseries_pcibios_bus_add_device;
+
+       if (is_kdump_kernel() || reset_devices) {
+               pr_info("Issue PHB reset ...\n");
+               list_for_each_entry(phb, &hose_list, list_node) {
+                       pdn = list_first_entry(&PCI_DN(phb->dn)->child_list, struct pci_dn, list);
+                       addr = (pdn->busno << 16) | (pdn->devfn << 8);
+                       config_addr = pseries_eeh_get_config_addr(phb, addr);
+                       /* invalid PE config addr */
+                       if (config_addr == 0)
+                               continue;
+
+                       pseries_eeh_phb_reset(phb, config_addr, EEH_RESET_FUNDAMENTAL);
+                       pseries_eeh_phb_reset(phb, config_addr, EEH_RESET_DEACTIVATE);
+                       pseries_eeh_phb_configure_bridge(phb, config_addr);
+               }
+       }
 
        ret = eeh_init(&pseries_eeh_ops);
        if (!ret)