@@ -2129,6 +2129,24 @@ static u16 bnxt_agg_ring_id_to_grp_idx(struct bnxt *bp, u16 ring_id)
2129
2129
return INVALID_HW_RING_ID ;
2130
2130
}
2131
2131
2132
+ #define BNXT_EVENT_THERMAL_CURRENT_TEMP (data2 ) \
2133
+ ((data2) & \
2134
+ ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA2_CURRENT_TEMP_MASK)
2135
+
2136
+ #define BNXT_EVENT_THERMAL_THRESHOLD_TEMP (data2 ) \
2137
+ (((data2) & \
2138
+ ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA2_THRESHOLD_TEMP_MASK) >>\
2139
+ ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA2_THRESHOLD_TEMP_SFT)
2140
+
2141
+ #define EVENT_DATA1_THERMAL_THRESHOLD_TYPE (data1 ) \
2142
+ ((data1) & \
2143
+ ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA1_THRESHOLD_TYPE_MASK)
2144
+
2145
+ #define EVENT_DATA1_THERMAL_THRESHOLD_DIR_INCREASING (data1 ) \
2146
+ (((data1) & \
2147
+ ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA1_TRANSITION_DIR) ==\
2148
+ ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA1_TRANSITION_DIR_INCREASING)
2149
+
2132
2150
static void bnxt_event_error_report (struct bnxt * bp , u32 data1 , u32 data2 )
2133
2151
{
2134
2152
u32 err_type = BNXT_EVENT_ERROR_REPORT_TYPE (data1 );
@@ -2144,6 +2162,40 @@ static void bnxt_event_error_report(struct bnxt *bp, u32 data1, u32 data2)
2144
2162
case ASYNC_EVENT_CMPL_ERROR_REPORT_BASE_EVENT_DATA1_ERROR_TYPE_DOORBELL_DROP_THRESHOLD :
2145
2163
netdev_warn (bp -> dev , "One or more MMIO doorbells dropped by the device!\n" );
2146
2164
break ;
2165
+ case ASYNC_EVENT_CMPL_ERROR_REPORT_BASE_EVENT_DATA1_ERROR_TYPE_THERMAL_THRESHOLD : {
2166
+ u32 type = EVENT_DATA1_THERMAL_THRESHOLD_TYPE (data1 );
2167
+ char * threshold_type ;
2168
+ char * dir_str ;
2169
+
2170
+ switch (type ) {
2171
+ case ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA1_THRESHOLD_TYPE_WARN :
2172
+ threshold_type = "warning" ;
2173
+ break ;
2174
+ case ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA1_THRESHOLD_TYPE_CRITICAL :
2175
+ threshold_type = "critical" ;
2176
+ break ;
2177
+ case ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA1_THRESHOLD_TYPE_FATAL :
2178
+ threshold_type = "fatal" ;
2179
+ break ;
2180
+ case ASYNC_EVENT_CMPL_ERROR_REPORT_THERMAL_EVENT_DATA1_THRESHOLD_TYPE_SHUTDOWN :
2181
+ threshold_type = "shutdown" ;
2182
+ break ;
2183
+ default :
2184
+ netdev_err (bp -> dev , "Unknown Thermal threshold type event\n" );
2185
+ return ;
2186
+ }
2187
+ if (EVENT_DATA1_THERMAL_THRESHOLD_DIR_INCREASING (data1 ))
2188
+ dir_str = "above" ;
2189
+ else
2190
+ dir_str = "below" ;
2191
+ netdev_warn (bp -> dev , "Chip temperature has gone %s the %s thermal threshold!\n" ,
2192
+ dir_str , threshold_type );
2193
+ netdev_warn (bp -> dev , "Temperature (In Celsius), Current: %lu, threshold: %lu\n" ,
2194
+ BNXT_EVENT_THERMAL_CURRENT_TEMP (data2 ),
2195
+ BNXT_EVENT_THERMAL_THRESHOLD_TEMP (data2 ));
2196
+ bnxt_hwmon_notify_event (bp , type );
2197
+ break ;
2198
+ }
2147
2199
default :
2148
2200
netdev_err (bp -> dev , "FW reported unknown error type %u\n" ,
2149
2201
err_type );
0 commit comments