|
@@ -50,7 +50,7 @@
|
|
|
#include "ehca_tools.h"
|
|
|
#include "hcp_if.h"
|
|
|
|
|
|
-#define HCAD_VERSION "0025"
|
|
|
+#define HCAD_VERSION "0026"
|
|
|
|
|
|
MODULE_LICENSE("Dual BSD/GPL");
|
|
|
MODULE_AUTHOR("Christoph Raisch <raisch@de.ibm.com>");
|
|
@@ -60,7 +60,6 @@ MODULE_VERSION(HCAD_VERSION);
|
|
|
static int ehca_open_aqp1 = 0;
|
|
|
static int ehca_hw_level = 0;
|
|
|
static int ehca_poll_all_eqs = 1;
|
|
|
-static int ehca_mr_largepage = 1;
|
|
|
|
|
|
int ehca_debug_level = 0;
|
|
|
int ehca_nr_ports = 2;
|
|
@@ -70,45 +69,40 @@ int ehca_static_rate = -1;
|
|
|
int ehca_scaling_code = 0;
|
|
|
int ehca_lock_hcalls = -1;
|
|
|
|
|
|
-module_param_named(open_aqp1, ehca_open_aqp1, int, S_IRUGO);
|
|
|
-module_param_named(debug_level, ehca_debug_level, int, S_IRUGO);
|
|
|
-module_param_named(hw_level, ehca_hw_level, int, S_IRUGO);
|
|
|
-module_param_named(nr_ports, ehca_nr_ports, int, S_IRUGO);
|
|
|
-module_param_named(use_hp_mr, ehca_use_hp_mr, int, S_IRUGO);
|
|
|
-module_param_named(port_act_time, ehca_port_act_time, int, S_IRUGO);
|
|
|
-module_param_named(poll_all_eqs, ehca_poll_all_eqs, int, S_IRUGO);
|
|
|
-module_param_named(static_rate, ehca_static_rate, int, S_IRUGO);
|
|
|
-module_param_named(scaling_code, ehca_scaling_code, int, S_IRUGO);
|
|
|
-module_param_named(mr_largepage, ehca_mr_largepage, int, S_IRUGO);
|
|
|
+module_param_named(open_aqp1, ehca_open_aqp1, bool, S_IRUGO);
|
|
|
+module_param_named(debug_level, ehca_debug_level, int, S_IRUGO);
|
|
|
+module_param_named(hw_level, ehca_hw_level, int, S_IRUGO);
|
|
|
+module_param_named(nr_ports, ehca_nr_ports, int, S_IRUGO);
|
|
|
+module_param_named(use_hp_mr, ehca_use_hp_mr, bool, S_IRUGO);
|
|
|
+module_param_named(port_act_time, ehca_port_act_time, int, S_IRUGO);
|
|
|
+module_param_named(poll_all_eqs, ehca_poll_all_eqs, bool, S_IRUGO);
|
|
|
+module_param_named(static_rate, ehca_static_rate, int, S_IRUGO);
|
|
|
+module_param_named(scaling_code, ehca_scaling_code, bool, S_IRUGO);
|
|
|
module_param_named(lock_hcalls, ehca_lock_hcalls, bool, S_IRUGO);
|
|
|
|
|
|
MODULE_PARM_DESC(open_aqp1,
|
|
|
- "AQP1 on startup (0: no (default), 1: yes)");
|
|
|
+ "Open AQP1 on startup (default: no)");
|
|
|
MODULE_PARM_DESC(debug_level,
|
|
|
- "debug level"
|
|
|
- " (0: no debug traces (default), 1: with debug traces)");
|
|
|
+ "Amount of debug output (0: none (default), 1: traces, "
|
|
|
+ "2: some dumps, 3: lots)");
|
|
|
MODULE_PARM_DESC(hw_level,
|
|
|
- "hardware level"
|
|
|
- " (0: autosensing (default), 1: v. 0.20, 2: v. 0.21)");
|
|
|
+ "Hardware level (0: autosensing (default), "
|
|
|
+ "0x10..0x14: eHCA, 0x20..0x23: eHCA2)");
|
|
|
MODULE_PARM_DESC(nr_ports,
|
|
|
"number of connected ports (-1: autodetect, 1: port one only, "
|
|
|
"2: two ports (default)");
|
|
|
MODULE_PARM_DESC(use_hp_mr,
|
|
|
- "high performance MRs (0: no (default), 1: yes)");
|
|
|
+ "Use high performance MRs (default: no)");
|
|
|
MODULE_PARM_DESC(port_act_time,
|
|
|
- "time to wait for port activation (default: 30 sec)");
|
|
|
+ "Time to wait for port activation (default: 30 sec)");
|
|
|
MODULE_PARM_DESC(poll_all_eqs,
|
|
|
- "polls all event queues periodically"
|
|
|
- " (0: no, 1: yes (default))");
|
|
|
+ "Poll all event queues periodically (default: yes)");
|
|
|
MODULE_PARM_DESC(static_rate,
|
|
|
- "set permanent static rate (default: disabled)");
|
|
|
+ "Set permanent static rate (default: no static rate)");
|
|
|
MODULE_PARM_DESC(scaling_code,
|
|
|
- "set scaling code (0: disabled/default, 1: enabled)");
|
|
|
-MODULE_PARM_DESC(mr_largepage,
|
|
|
- "use large page for MR (0: use PAGE_SIZE (default), "
|
|
|
- "1: use large page depending on MR size");
|
|
|
+ "Enable scaling code (default: no)");
|
|
|
MODULE_PARM_DESC(lock_hcalls,
|
|
|
- "serialize all hCalls made by the driver "
|
|
|
+ "Serialize all hCalls made by the driver "
|
|
|
"(default: autodetect)");
|
|
|
|
|
|
DEFINE_RWLOCK(ehca_qp_idr_lock);
|
|
@@ -275,6 +269,7 @@ static int ehca_sense_attributes(struct ehca_shca *shca)
|
|
|
u64 h_ret;
|
|
|
struct hipz_query_hca *rblock;
|
|
|
struct hipz_query_port *port;
|
|
|
+ const char *loc_code;
|
|
|
|
|
|
static const u32 pgsize_map[] = {
|
|
|
HCA_CAP_MR_PGSIZE_4K, 0x1000,
|
|
@@ -283,6 +278,12 @@ static int ehca_sense_attributes(struct ehca_shca *shca)
|
|
|
HCA_CAP_MR_PGSIZE_16M, 0x1000000,
|
|
|
};
|
|
|
|
|
|
+ ehca_gen_dbg("Probing adapter %s...",
|
|
|
+ shca->ofdev->node->full_name);
|
|
|
+ loc_code = of_get_property(shca->ofdev->node, "ibm,loc-code", NULL);
|
|
|
+ if (loc_code)
|
|
|
+ ehca_gen_dbg(" ... location lode=%s", loc_code);
|
|
|
+
|
|
|
rblock = ehca_alloc_fw_ctrlblock(GFP_KERNEL);
|
|
|
if (!rblock) {
|
|
|
ehca_gen_err("Cannot allocate rblock memory.");
|
|
@@ -350,11 +351,9 @@ static int ehca_sense_attributes(struct ehca_shca *shca)
|
|
|
|
|
|
/* translate supported MR page sizes; always support 4K */
|
|
|
shca->hca_cap_mr_pgsize = EHCA_PAGESIZE;
|
|
|
- if (ehca_mr_largepage) { /* support extra sizes only if enabled */
|
|
|
- for (i = 0; i < ARRAY_SIZE(pgsize_map); i += 2)
|
|
|
- if (rblock->memory_page_size_supported & pgsize_map[i])
|
|
|
- shca->hca_cap_mr_pgsize |= pgsize_map[i + 1];
|
|
|
- }
|
|
|
+ for (i = 0; i < ARRAY_SIZE(pgsize_map); i += 2)
|
|
|
+ if (rblock->memory_page_size_supported & pgsize_map[i])
|
|
|
+ shca->hca_cap_mr_pgsize |= pgsize_map[i + 1];
|
|
|
|
|
|
/* query max MTU from first port -- it's the same for all ports */
|
|
|
port = (struct hipz_query_port *)rblock;
|
|
@@ -567,8 +566,7 @@ static int ehca_destroy_aqp1(struct ehca_sport *sport)
|
|
|
|
|
|
static ssize_t ehca_show_debug_level(struct device_driver *ddp, char *buf)
|
|
|
{
|
|
|
- return snprintf(buf, PAGE_SIZE, "%d\n",
|
|
|
- ehca_debug_level);
|
|
|
+ return snprintf(buf, PAGE_SIZE, "%d\n", ehca_debug_level);
|
|
|
}
|
|
|
|
|
|
static ssize_t ehca_store_debug_level(struct device_driver *ddp,
|
|
@@ -657,14 +655,6 @@ static ssize_t ehca_show_adapter_handle(struct device *dev,
|
|
|
}
|
|
|
static DEVICE_ATTR(adapter_handle, S_IRUGO, ehca_show_adapter_handle, NULL);
|
|
|
|
|
|
-static ssize_t ehca_show_mr_largepage(struct device *dev,
|
|
|
- struct device_attribute *attr,
|
|
|
- char *buf)
|
|
|
-{
|
|
|
- return sprintf(buf, "%d\n", ehca_mr_largepage);
|
|
|
-}
|
|
|
-static DEVICE_ATTR(mr_largepage, S_IRUGO, ehca_show_mr_largepage, NULL);
|
|
|
-
|
|
|
static struct attribute *ehca_dev_attrs[] = {
|
|
|
&dev_attr_adapter_handle.attr,
|
|
|
&dev_attr_num_ports.attr,
|
|
@@ -681,7 +671,6 @@ static struct attribute *ehca_dev_attrs[] = {
|
|
|
&dev_attr_cur_mw.attr,
|
|
|
&dev_attr_max_pd.attr,
|
|
|
&dev_attr_max_ah.attr,
|
|
|
- &dev_attr_mr_largepage.attr,
|
|
|
NULL
|
|
|
};
|
|
|
|