File tree Expand file tree Collapse file tree 1 file changed +13
-4
lines changed
drivers/platform/x86/intel Expand file tree Collapse file tree 1 file changed +13
-4
lines changed Original file line number Diff line number Diff line change @@ -666,28 +666,37 @@ static int tpmi_create_devices(struct intel_tpmi_info *tpmi_info)
666
666
}
667
667
668
668
#define TPMI_INFO_BUS_INFO_OFFSET 0x08
669
+ #define TPMI_INFO_MAJOR_VERSION 0x00
669
670
670
671
static int tpmi_process_info (struct intel_tpmi_info * tpmi_info ,
671
672
struct intel_tpmi_pm_feature * pfs )
672
673
{
673
674
struct tpmi_info_header header ;
674
675
void __iomem * info_mem ;
676
+ u64 feature_header ;
677
+ int ret = 0 ;
675
678
676
- info_mem = ioremap (pfs -> vsec_offset + TPMI_INFO_BUS_INFO_OFFSET ,
677
- pfs -> pfs_header .entry_size * sizeof (u32 ) - TPMI_INFO_BUS_INFO_OFFSET );
679
+ info_mem = ioremap (pfs -> vsec_offset , pfs -> pfs_header .entry_size * sizeof (u32 ));
678
680
if (!info_mem )
679
681
return - ENOMEM ;
680
682
681
- memcpy_fromio (& header , info_mem , sizeof (header ));
683
+ feature_header = readq (info_mem );
684
+ if (TPMI_MAJOR_VERSION (feature_header ) != TPMI_INFO_MAJOR_VERSION ) {
685
+ ret = - ENODEV ;
686
+ goto error_info_header ;
687
+ }
688
+
689
+ memcpy_fromio (& header , info_mem + TPMI_INFO_BUS_INFO_OFFSET , sizeof (header ));
682
690
683
691
tpmi_info -> plat_info .package_id = header .pkg ;
684
692
tpmi_info -> plat_info .bus_number = header .bus ;
685
693
tpmi_info -> plat_info .device_number = header .dev ;
686
694
tpmi_info -> plat_info .function_number = header .fn ;
687
695
696
+ error_info_header :
688
697
iounmap (info_mem );
689
698
690
- return 0 ;
699
+ return ret ;
691
700
}
692
701
693
702
static int tpmi_fetch_pfs_header (struct intel_tpmi_pm_feature * pfs , u64 start , int size )
You can’t perform that action at this time.
0 commit comments