@@ -7778,6 +7778,57 @@ int qed_dbg_igu_fifo_size(struct qed_dev *cdev)
7778
7778
return qed_dbg_feature_size (cdev , DBG_FEATURE_IGU_FIFO );
7779
7779
}
7780
7780
7781
+ int qed_dbg_nvm_image_length (struct qed_hwfn * p_hwfn ,
7782
+ enum qed_nvm_images image_id , u32 * length )
7783
+ {
7784
+ struct qed_nvm_image_att image_att ;
7785
+ int rc ;
7786
+
7787
+ * length = 0 ;
7788
+ rc = qed_mcp_get_nvm_image_att (p_hwfn , image_id , & image_att );
7789
+ if (rc )
7790
+ return rc ;
7791
+
7792
+ * length = image_att .length ;
7793
+
7794
+ return rc ;
7795
+ }
7796
+
7797
+ int qed_dbg_nvm_image (struct qed_dev * cdev , void * buffer ,
7798
+ u32 * num_dumped_bytes , enum qed_nvm_images image_id )
7799
+ {
7800
+ struct qed_hwfn * p_hwfn =
7801
+ & cdev -> hwfns [cdev -> dbg_params .engine_for_debug ];
7802
+ u32 len_rounded , i ;
7803
+ __be32 val ;
7804
+ int rc ;
7805
+
7806
+ * num_dumped_bytes = 0 ;
7807
+ rc = qed_dbg_nvm_image_length (p_hwfn , image_id , & len_rounded );
7808
+ if (rc )
7809
+ return rc ;
7810
+
7811
+ DP_NOTICE (p_hwfn -> cdev ,
7812
+ "Collecting a debug feature [\"nvram image %d\"]\n" ,
7813
+ image_id );
7814
+
7815
+ len_rounded = roundup (len_rounded , sizeof (u32 ));
7816
+ rc = qed_mcp_get_nvm_image (p_hwfn , image_id , buffer , len_rounded );
7817
+ if (rc )
7818
+ return rc ;
7819
+
7820
+ /* QED_NVM_IMAGE_NVM_META image is not swapped like other images */
7821
+ if (image_id != QED_NVM_IMAGE_NVM_META )
7822
+ for (i = 0 ; i < len_rounded ; i += 4 ) {
7823
+ val = cpu_to_be32 (* (u32 * )(buffer + i ));
7824
+ * (u32 * )(buffer + i ) = val ;
7825
+ }
7826
+
7827
+ * num_dumped_bytes = len_rounded ;
7828
+
7829
+ return rc ;
7830
+ }
7831
+
7781
7832
int qed_dbg_protection_override (struct qed_dev * cdev , void * buffer ,
7782
7833
u32 * num_dumped_bytes )
7783
7834
{
@@ -7831,6 +7882,9 @@ enum debug_print_features {
7831
7882
IGU_FIFO = 6 ,
7832
7883
PHY = 7 ,
7833
7884
FW_ASSERTS = 8 ,
7885
+ NVM_CFG1 = 9 ,
7886
+ DEFAULT_CFG = 10 ,
7887
+ NVM_META = 11 ,
7834
7888
};
7835
7889
7836
7890
static u32 qed_calc_regdump_header (enum debug_print_features feature ,
@@ -7965,13 +8019,61 @@ int qed_dbg_all_data(struct qed_dev *cdev, void *buffer)
7965
8019
DP_ERR (cdev , "qed_dbg_mcp_trace failed. rc = %d\n" , rc );
7966
8020
}
7967
8021
8022
+ /* nvm cfg1 */
8023
+ rc = qed_dbg_nvm_image (cdev ,
8024
+ (u8 * )buffer + offset + REGDUMP_HEADER_SIZE ,
8025
+ & feature_size , QED_NVM_IMAGE_NVM_CFG1 );
8026
+ if (!rc ) {
8027
+ * (u32 * )((u8 * )buffer + offset ) =
8028
+ qed_calc_regdump_header (NVM_CFG1 , cur_engine ,
8029
+ feature_size , omit_engine );
8030
+ offset += (feature_size + REGDUMP_HEADER_SIZE );
8031
+ } else if (rc != - ENOENT ) {
8032
+ DP_ERR (cdev ,
8033
+ "qed_dbg_nvm_image failed for image %d (%s), rc = %d\n" ,
8034
+ QED_NVM_IMAGE_NVM_CFG1 , "QED_NVM_IMAGE_NVM_CFG1" , rc );
8035
+ }
8036
+
8037
+ /* nvm default */
8038
+ rc = qed_dbg_nvm_image (cdev ,
8039
+ (u8 * )buffer + offset + REGDUMP_HEADER_SIZE ,
8040
+ & feature_size , QED_NVM_IMAGE_DEFAULT_CFG );
8041
+ if (!rc ) {
8042
+ * (u32 * )((u8 * )buffer + offset ) =
8043
+ qed_calc_regdump_header (DEFAULT_CFG , cur_engine ,
8044
+ feature_size , omit_engine );
8045
+ offset += (feature_size + REGDUMP_HEADER_SIZE );
8046
+ } else if (rc != - ENOENT ) {
8047
+ DP_ERR (cdev ,
8048
+ "qed_dbg_nvm_image failed for image %d (%s), rc = %d\n" ,
8049
+ QED_NVM_IMAGE_DEFAULT_CFG , "QED_NVM_IMAGE_DEFAULT_CFG" ,
8050
+ rc );
8051
+ }
8052
+
8053
+ /* nvm meta */
8054
+ rc = qed_dbg_nvm_image (cdev ,
8055
+ (u8 * )buffer + offset + REGDUMP_HEADER_SIZE ,
8056
+ & feature_size , QED_NVM_IMAGE_NVM_META );
8057
+ if (!rc ) {
8058
+ * (u32 * )((u8 * )buffer + offset ) =
8059
+ qed_calc_regdump_header (NVM_META , cur_engine ,
8060
+ feature_size , omit_engine );
8061
+ offset += (feature_size + REGDUMP_HEADER_SIZE );
8062
+ } else if (rc != - ENOENT ) {
8063
+ DP_ERR (cdev ,
8064
+ "qed_dbg_nvm_image failed for image %d (%s), rc = %d\n" ,
8065
+ QED_NVM_IMAGE_NVM_META , "QED_NVM_IMAGE_NVM_META" , rc );
8066
+ }
8067
+
7968
8068
return 0 ;
7969
8069
}
7970
8070
7971
8071
int qed_dbg_all_data_size (struct qed_dev * cdev )
7972
8072
{
8073
+ struct qed_hwfn * p_hwfn =
8074
+ & cdev -> hwfns [cdev -> dbg_params .engine_for_debug ];
8075
+ u32 regs_len = 0 , image_len = 0 ;
7973
8076
u8 cur_engine , org_engine ;
7974
- u32 regs_len = 0 ;
7975
8077
7976
8078
org_engine = qed_get_debug_engine (cdev );
7977
8079
for (cur_engine = 0 ; cur_engine < cdev -> num_hwfns ; cur_engine ++ ) {
@@ -7993,6 +8095,15 @@ int qed_dbg_all_data_size(struct qed_dev *cdev)
7993
8095
7994
8096
/* Engine common */
7995
8097
regs_len += REGDUMP_HEADER_SIZE + qed_dbg_mcp_trace_size (cdev );
8098
+ qed_dbg_nvm_image_length (p_hwfn , QED_NVM_IMAGE_NVM_CFG1 , & image_len );
8099
+ if (image_len )
8100
+ regs_len += REGDUMP_HEADER_SIZE + image_len ;
8101
+ qed_dbg_nvm_image_length (p_hwfn , QED_NVM_IMAGE_DEFAULT_CFG , & image_len );
8102
+ if (image_len )
8103
+ regs_len += REGDUMP_HEADER_SIZE + image_len ;
8104
+ qed_dbg_nvm_image_length (p_hwfn , QED_NVM_IMAGE_NVM_META , & image_len );
8105
+ if (image_len )
8106
+ regs_len += REGDUMP_HEADER_SIZE + image_len ;
7996
8107
7997
8108
return regs_len ;
7998
8109
}
0 commit comments