@@ -3757,6 +3757,21 @@ static void show_registers_bpmbl(uint64_t bpmbl)
37573757 printf ("\tBoot Partition Memory Buffer Base Address (BMBBA): %" PRIx64 "\n" , bpmbl );
37583758}
37593759
3760+ static void show_registers_cmbmsc (uint64_t cmbmsc )
3761+ {
3762+ printf ("\tController Base Address (CBA) : %lx\n" ,
3763+ (cmbmsc & 0xfffffffffffff000 ) >> 12 );
3764+ printf ("\tController Memory Space Enable (CMSE): %lx\n" ,
3765+ (cmbmsc & 0x0000000000000002 ) >> 1 );
3766+ printf ("\tCapabilities Registers Enabled (CRE) : CMBLOC and " \
3767+ "CMBSZ registers are%senabled\n\n" , (cmbmsc & 0x0000000000000001 ) ? " " : " NOT " );
3768+ }
3769+
3770+ static void show_registers_cmbsts (__u32 cmbsts )
3771+ {
3772+ printf ("\tController Base Address Invalid (CBAI): %x\n\n" , (cmbsts & 0x00000001 ));
3773+ }
3774+
37603775static void show_registers_pmrcap (__u32 pmrcap )
37613776{
37623777 printf ("\tPersistent Memory Region Timeout (PMRTO): %x\n" , (pmrcap & 0x00ff0000 ) >> 16 );
@@ -3823,6 +3838,12 @@ static void show_registers_pmrswtp(__u32 pmrswtp)
38233838 nvme_register_pmr_pmrszu_to_string (pmrswtp & 0x0000000f ));
38243839}
38253840
3841+ static void show_registers_pmrmsc (uint64_t pmrmsc )
3842+ {
3843+ printf ("\tController Base Address (CBA) : %lx\n" , (pmrmsc & 0xfffffffffffff000 ) >> 12 );
3844+ printf ("\tController Memory Space Enable (CMSE : %lx\n\n" , (pmrmsc & 0x0000000000000001 ) >> 1 );
3845+ }
3846+
38263847static inline uint32_t mmio_read32 (void * addr )
38273848{
38283849 __le32 * p = addr ;
@@ -3840,9 +3861,9 @@ static inline __u64 mmio_read64(void *addr)
38403861
38413862void json_ctrl_registers (void * bar )
38423863{
3843- uint64_t cap , asq , acq , bpmbl ;
3864+ uint64_t cap , asq , acq , bpmbl , cmbmsc , pmrmsc ;
38443865 uint32_t vs , intms , intmc , cc , csts , nssr , aqa , cmbsz , cmbloc ,
3845- bpinfo , bprsel , pmrcap , pmrctl , pmrsts , pmrebs , pmrswtp ;
3866+ bpinfo , bprsel , cmbsts , pmrcap , pmrctl , pmrsts , pmrebs , pmrswtp ;
38463867 struct json_object * root ;
38473868
38483869 cap = mmio_read64 (bar + NVME_REG_CAP );
@@ -3860,11 +3881,14 @@ void json_ctrl_registers(void *bar)
38603881 bpinfo = mmio_read32 (bar + NVME_REG_BPINFO );
38613882 bprsel = mmio_read32 (bar + NVME_REG_BPRSEL );
38623883 bpmbl = mmio_read64 (bar + NVME_REG_BPMBL );
3884+ cmbmsc = mmio_read64 (bar + NVME_REG_CMBMSC );
3885+ cmbsts = mmio_read32 (bar + NVME_REG_CMBSTS );
38633886 pmrcap = mmio_read32 (bar + NVME_REG_PMRCAP );
38643887 pmrctl = mmio_read32 (bar + NVME_REG_PMRCTL );
38653888 pmrsts = mmio_read32 (bar + NVME_REG_PMRSTS );
38663889 pmrebs = mmio_read32 (bar + NVME_REG_PMREBS );
38673890 pmrswtp = mmio_read32 (bar + NVME_REG_PMRSWTP );
3891+ pmrmsc = mmio_read64 (bar + NVME_REG_PMRMSC );
38683892
38693893 root = json_create_object ();
38703894 json_object_add_value_uint (root , "cap" , cap );
@@ -3882,21 +3906,24 @@ void json_ctrl_registers(void *bar)
38823906 json_object_add_value_int (root , "bpinfo" , bpinfo );
38833907 json_object_add_value_int (root , "bprsel" , bprsel );
38843908 json_object_add_value_uint (root , "bpmbl" , bpmbl );
3909+ json_object_add_value_uint (root , "cmbmsc" , cmbmsc );
3910+ json_object_add_value_int (root , "cmbsts" , cmbsts );
38853911 json_object_add_value_int (root , "pmrcap" , pmrcap );
38863912 json_object_add_value_int (root , "pmrctl" , pmrctl );
38873913 json_object_add_value_int (root , "pmrsts" , pmrsts );
38883914 json_object_add_value_int (root , "pmrebs" , pmrebs );
38893915 json_object_add_value_int (root , "pmrswtp" , pmrswtp );
3916+ json_object_add_value_uint (root , "pmrmsc" , pmrmsc );
38903917 json_print_object (root , NULL );
38913918 printf ("\n" );
38923919 json_free_object (root );
38933920}
38943921
38953922void show_ctrl_registers (void * bar , unsigned int mode , bool fabrics )
38963923{
3897- uint64_t cap , asq , acq , bpmbl ;
3924+ uint64_t cap , asq , acq , bpmbl , cmbmsc , pmrmsc ;
38983925 uint32_t vs , intms , intmc , cc , csts , nssr , aqa , cmbsz , cmbloc , bpinfo ,
3899- bprsel , pmrcap , pmrctl , pmrsts , pmrebs , pmrswtp ;
3926+ bprsel , cmbsts , pmrcap , pmrctl , pmrsts , pmrebs , pmrswtp ;
39003927
39013928 int human = mode & HUMAN ;
39023929
@@ -3915,11 +3942,14 @@ void show_ctrl_registers(void *bar, unsigned int mode, bool fabrics)
39153942 bpinfo = mmio_read32 (bar + NVME_REG_BPINFO );
39163943 bprsel = mmio_read32 (bar + NVME_REG_BPRSEL );
39173944 bpmbl = mmio_read64 (bar + NVME_REG_BPMBL );
3945+ cmbmsc = mmio_read64 (bar + NVME_REG_CMBMSC );
3946+ cmbsts = mmio_read32 (bar + NVME_REG_CMBSTS );
39183947 pmrcap = mmio_read32 (bar + NVME_REG_PMRCAP );
39193948 pmrctl = mmio_read32 (bar + NVME_REG_PMRCTL );
39203949 pmrsts = mmio_read32 (bar + NVME_REG_PMRSTS );
39213950 pmrebs = mmio_read32 (bar + NVME_REG_PMREBS );
39223951 pmrswtp = mmio_read32 (bar + NVME_REG_PMRSWTP );
3952+ pmrmsc = mmio_read64 (bar + NVME_REG_PMRMSC );
39233953
39243954 if (human ) {
39253955 if (cap != 0xffffffff ) {
@@ -3976,6 +4006,12 @@ void show_ctrl_registers(void *bar, unsigned int mode, bool fabrics)
39764006 printf ("bpmbl : %" PRIx64 "\n" , bpmbl );
39774007 show_registers_bpmbl (bpmbl );
39784008
4009+ printf ("cmbmsc : %" PRIx64 "\n" , cmbmsc );
4010+ show_registers_cmbmsc (cmbmsc );
4011+
4012+ printf ("cmbsts : %x\n" , cmbsts );
4013+ show_registers_cmbsts (cmbsts );
4014+
39794015 printf ("pmrcap : %x\n" , pmrcap );
39804016 show_registers_pmrcap (pmrcap );
39814017
@@ -3990,6 +4026,9 @@ void show_ctrl_registers(void *bar, unsigned int mode, bool fabrics)
39904026
39914027 printf ("pmrswtp : %x\n" , pmrswtp );
39924028 show_registers_pmrswtp (pmrswtp );
4029+
4030+ printf ("pmrmsc : %" PRIx64 "\n" , pmrmsc );
4031+ show_registers_pmrmsc (pmrmsc );
39934032 }
39944033 } else {
39954034 if (cap != 0xffffffff )
@@ -4013,6 +4052,14 @@ void show_ctrl_registers(void *bar, unsigned int mode, bool fabrics)
40134052 printf ("bpinfo : %x\n" , bpinfo );
40144053 printf ("bprsel : %x\n" , bprsel );
40154054 printf ("bpmbl : %" PRIx64 "\n" , bpmbl );
4055+ printf ("cmbmsc : %" PRIx64 "\n" , cmbmsc );
4056+ printf ("cmbsts : %x\n" , cmbsts );
4057+ printf ("pmrcap : %x\n" , pmrcap );
4058+ printf ("pmrctl : %x\n" , pmrctl );
4059+ printf ("pmrsts : %x\n" , pmrsts );
4060+ printf ("pmrebs : %x\n" , pmrebs );
4061+ printf ("pmrswtp : %x\n" , pmrswtp );
4062+ printf ("pmrmsc : %" PRIx64 "\n" , pmrmsc );
40164063 }
40174064 }
40184065}
0 commit comments