IB/hfi1: Add flag for platform config scratch register read
authorJakub Byczkowski <jakub.byczkowski@intel.com>
Sun, 13 Aug 2017 15:08:34 +0000 (08:08 -0700)
committerDoug Ledford <dledford@redhat.com>
Tue, 22 Aug 2017 18:22:37 +0000 (14:22 -0400)
Add flag in pport data structure to determine when platform config was
read from scratch registers. Change conditions in parse_platform_config
and get_platform_config_field to use the new flag.

Reviewed-by: Easwar Hariharan <easwar.hariharan@intel.com>
Reviewed-by: Ira Weiny <ira.weiny@intel.com>
Signed-off-by: Jakub Byczkowski <jakub.byczkowski@intel.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/hw/hfi1/firmware.c
drivers/infiniband/hw/hfi1/hfi.h
drivers/infiniband/hw/hfi1/platform.c

index 885714b93557856b41a70d6c762294f3c68d4c37..fb095e69a55479812d92db01259a28dd981eab45 100644 (file)
@@ -1789,6 +1789,7 @@ static int check_meta_version(struct hfi1_devdata *dd, u32 *system_table)
 int parse_platform_config(struct hfi1_devdata *dd)
 {
        struct platform_config_cache *pcfgcache = &dd->pcfg_cache;
+       struct hfi1_pportdata *ppd = dd->pport;
        u32 *ptr = NULL;
        u32 header1 = 0, header2 = 0, magic_num = 0, crc = 0, file_length = 0;
        u32 record_idx = 0, table_type = 0, table_length_dwords = 0;
@@ -1800,7 +1801,7 @@ int parse_platform_config(struct hfi1_devdata *dd)
         * scratch register bitmap, thus there is no platform config to parse.
         * Skip parsing in these situations.
         */
-       if (is_integrated(dd) && !platform_config_load)
+       if (ppd->config_from_scratch)
                return 0;
 
        if (!dd->platform_config.data) {
@@ -2089,13 +2090,14 @@ int get_platform_config_field(struct hfi1_devdata *dd,
        int ret = 0, wlen = 0, seek = 0;
        u32 field_len_bits = 0, field_start_bits = 0, *src_ptr = NULL;
        struct platform_config_cache *pcfgcache = &dd->pcfg_cache;
+       struct hfi1_pportdata *ppd = dd->pport;
 
        if (data)
                memset(data, 0, len);
        else
                return -EINVAL;
 
-       if (is_integrated(dd) && !platform_config_load) {
+       if (ppd->config_from_scratch) {
                /*
                 * Use saved configuration from ppd for integrated platforms
                 */
index dff3d3f02b2d6ebb863e95ca87352c4e304842c9..181feca3cb6ffb71c2e03ac6bc985967616c6efe 100644 (file)
@@ -677,6 +677,9 @@ struct hfi1_pportdata {
        u8  default_atten;
        u8  max_power_class;
 
+       /* did we read platform config from scratch registers? */
+       bool config_from_scratch;
+
        /* GUIDs for this interface, in host order, guids[0] is a port guid */
        u64 guids[HFI1_GUIDS_PER_PORT];
 
index 5c38a24484ab26257bbadf44512a3e462099737b..ab221b05d5539104cdac40ceb9f9bbd5ef0c0101 100644 (file)
@@ -138,6 +138,8 @@ static void save_platform_config_fields(struct hfi1_devdata *dd)
 
        ppd->max_power_class = (temp_scratch & QSFP_MAX_POWER_SMASK) >>
                                QSFP_MAX_POWER_SHIFT;
+
+       ppd->config_from_scratch = true;
 }
 
 void get_platform_config(struct hfi1_devdata *dd)