1 问题背景
冷启动后,使用npu-smi info命令会显示“Critical”,使用npu-smi info -t health -i 0 -c 0命令会回显有报错

2 修复方案
给Ascend-lp-source源码打补丁,然后使用修改后的源码重新构建出固件并升级修复
2.1 固件的编译和生效参见
https://support.huawei.com/enterprise/zh/doc/EDOC1100445968/96f94ea0?idPath=23710424|251366513|254884019|261408772|263024819

2.2 打patch补丁
patch -p1 -i fix_pg_for_aicore_8_9.patch

3 patch源码(fix_pg_for_aicore_8_9.patch)
diff --git a/drivers/firmware/lp/lpr52/driver/tsensor/tsensor.c b/drivers/firmware/lp/lpr52/driver/tsensor/tsensor.c
index 4b10414..5ad0cd2 100755
--- a/drivers/firmware/lp/lpr52/driver/tsensor/tsensor.c
+++ b/drivers/firmware/lp/lpr52/driver/tsensor/tsensor.c
@@ -318,6 +318,7 @@ void TsensorInit(void)
int32_t ret;
uint32_t initStatus = 0;
uint32_t errStatus = 0;
+ uint32_t aiCorePg = READ_PG(PG_AICORE);
#if defined(PLATFORM_FPGA) || defined(PLATFORM_EMU)
return;
@@ -329,6 +330,7 @@ void TsensorInit(void)
/* clear ddr temperature space */
CleanTempShareMem();
uint32_t partialGood = TsensorGetPartialGoodStatus();
+ partialGood |= (~aiCorePg) & ALL_AICORE_MASK; // ALL_AICORE_MASK=0x3FFU 只判断前面十个,最后partialGood=0x20300,位8和位9为1
WRITEL(partialGood, TsensorRuntimeAddr(INDEX_PG));
#ifdef AS610V2V3
1 问题背景
冷启动后,使用npu-smi info命令会显示“Critical”,使用npu-smi info -t health -i 0 -c 0命令会回显有报错
2 修复方案
给Ascend-lp-source源码打补丁,然后使用修改后的源码重新构建出固件并升级修复
2.1 固件的编译和生效参见
https://support.huawei.com/enterprise/zh/doc/EDOC1100445968/96f94ea0?idPath=23710424|251366513|254884019|261408772|263024819
2.2 打patch补丁
patch -p1 -i fix_pg_for_aicore_8_9.patch
3 patch源码(fix_pg_for_aicore_8_9.patch)
diff --git a/drivers/firmware/lp/lpr52/driver/tsensor/tsensor.c b/drivers/firmware/lp/lpr52/driver/tsensor/tsensor.c
index 4b10414..5ad0cd2 100755
--- a/drivers/firmware/lp/lpr52/driver/tsensor/tsensor.c
+++ b/drivers/firmware/lp/lpr52/driver/tsensor/tsensor.c
@@ -318,6 +318,7 @@ void TsensorInit(void)
int32_t ret;
uint32_t initStatus = 0;
uint32_t errStatus = 0;
+ uint32_t aiCorePg = READ_PG(PG_AICORE);
#if defined(PLATFORM_FPGA) || defined(PLATFORM_EMU)
return;
@@ -329,6 +330,7 @@ void TsensorInit(void)
/* clear ddr temperature space */
CleanTempShareMem();
uint32_t partialGood = TsensorGetPartialGoodStatus();
+ partialGood |= (~aiCorePg) & ALL_AICORE_MASK; // ALL_AICORE_MASK=0x3FFU 只判断前面十个,最后partialGood=0x20300,位8和位9为1
WRITEL(partialGood, TsensorRuntimeAddr(INDEX_PG));
#ifdef AS610V2V3