200I PRO 使用两片ddr5导致reboot复位卡死临时修复方案
收藏回复举报
200I PRO 使用两片ddr5导致reboot复位卡死临时修复方案
发表于2025-12-12 10:22:15
0 查看

1 问题背景

使用两片ddr5后,执行“reboot”软件重启命令导致系统卡死

打印日志如下:

[  109.086664][    T1] [ascend] [ERROR] [devdrv] [hal_kernel_send_ipc_to_lp_async 1541] <systemd-shutdow:1,1> ipc message send failed, ret = -19.

[  109.173896][ T1794] [ascend] [ERROR] [ascend_lpm] [devdrv_get_freq_from_lp 356] <kworker/0:4:1794:1794> dev(0) devdrv_get_msg_from_lp failed, ret = -19.

[  109.187538][ T1794] [ascend] [drv_memory] [error] [memory_get_ddr_freq_info_from_lp 34] <kworker/0:4:1794> Failed to get freq and bandwidth. (dev_id=0; ret=-19)

[  109.201876][ T1794] [ascend] [drv_memory] [error] [memory_get_ddr_frequency_info 235] <kworker/0:4:1794> Get device freq failed. (ret=-19; dev_id=0; sub_cmd=6)

[  109.216128][ T1794] [ascend] [drv_memory] [error] [update_ddr_max_bandwidth 52] <kworker/0:4:1794> Failed to get freq and bandwidth. (dev_id=0; ret=-19)

[  109.229769][ T1794] [ascend] [drv_memory] [error] [calculate_ddr_bw_util_rate 164] <kworker/0:4:1794> Failed to update max bandwidth. (ret=-19; dev_id=0)

[  109.243498][ T1794] [ascend] [drv_memory] [error] [get_ddr_bw_util_rate 256] <kworker/0:4:1794> Failed to calculate bandwidth utilization rate. (ret=-19; dev_id=0)

[  109.258096][ T1794] [ascend] [drv_memory] [error] [memory_get_ddr_bw_util_rate 295] <kworker/0:4:1794> Failed to get bw util rate failed. (ret=-19; dev_id=0)

[  109.272169][ T1794] [ascend] [drv_memory] [error] [memory_get_ddr_bw_util_scan 64] <kworker/0:4:1794> Failed get ddr bw util rate. (dev_id=0; ret=-19)

[  109.285653][    T1] reboot: Restarting system

NOTICE:  itrusteed system reset

NOTI▒

====================================

              HI, BSBC!

====================================

key point log : 00000044 0006f27f; 00000000 00000000

select area: c11cb55b

hboot start ea000002.

DC

L6

ci

is

cr

nr

vs

41

as

as

as

co

FT

1s

cs

eb

[0.965] [BOOT_TRACE]HBOOT1_b

current[3], last[99]

DC mode

reset reason:1 pad info:10180

Master entry

HccsPmuInit: boardid 214, pmu addr[0x1d]:0x3; ldo38: 0x3

current[4], last[99]

[1.078] [BOOT_TRACE] HCCS Start

HCCS init start

HCCS init ok

Cpu reset ok

l2buf init ok

current[6], last[99]

Dfx init l2 xloader done

check dataLen 0xffffffff is invalid

check dataLen 0xffffffff is invalid

flash cfg is invalid, use default cfg

DC SavePgInfoToSram start!

cpuAg = 0xffff

AI core freq is 550MHz

: BoardId is 214, PG Info bitmap: 0xff 0x00 0xff 0x00 0x7f 0x03 0x00 0x00

aic:0x0 aiv:0x0 l3d:0x0 cpu:0x0 cluster:0x0

Get PG Info ok

current[7], last[99]

AICORE PG 0xff

Clear Aic isolation bits 0xff

AI Vector PG 0x7f

Clear Aiv isolation bits 0x7f

Aisystem disreset ok

current[8], last[99]

Hboot1_a point:[14] 01  02  03  04  06  07  16  05  19  09  11  12  13  15  00  00  00  00  00  00

sys info:1,0x1,0x10180

board id:214

Atf reboot point(0)

efuse0:0x0 efuse1:0x1800 aic:0x0 aiv:0x0 l3d:0x0 cluster:0x0

AB Report val:0x80

memory repiar status: 0x1fff, 0xf3ffff

compatibility file not exist

Boot ddr image start(1157)

current[10], last[99]

ddr init state(0x0)

LPR52 config ok

LPR52 atcm clean(ddr 0x110c0014)...

ok

1st A, Master area boot

80

non-sec boot!

image vef success!

compatible file not exit, flag = 0x0

LP R52 ATCM(0xea00001e)

Dreset LPR5BOoT_

                RuCr] td1 ],il sta99]

                                     spmt rd Muste[0a0ea b0o4c:0x93]

spmi wr:[0x09:0x084c:0x93]

spmi rd succ:[0x09:0x084c:0x93]

Upgrade_flag 0x110c0014

boardId 0xd6

Swap 0x2

ddrSelfRefreshErrFlag = 0x1.

2 修复方案

2.1 源码编译和生效参见,需要编译和生效HBOOT1_b.bin

https://support.huawei.com/enterprise/zh/doc/EDOC1100445968/6eb62f81?idPath=23710424|251366513|254884019|261408772|263024819

2.2 修改

修改LowPowerR52AtcmInitForDdr函数,去除热复位的判断,默认为冷启动

1.png

void LowPowerR52AtcmInitForDdr(void)

{

#ifndef BIOS_GTEST

    UINT32 val;

    UINT32 addr;

    UINT32 offset;

    register UINT32 value1 asm("r0");

    register UINT32 value2 asm("r1");

    value1 = 0; // 四字节0

    value2 = 0; // 四字节0

    val = readl(SC_POR_REG5);

    PRINT_INFO("LPR52 atcm clean(all 0x%x)...\n", val);

    for (offset = 0; offset < ATCM_MAX_SIZE; offset += DATA_LEN_8BYTES) {

        addr = LP_R52_ATCM_BASE_ADDR + offset;

        __asm__ volatile ("strd %0, %1, [%2]"::"r" (value1), "r" (value2), "r"(addr));

    }

    val |= LPR52_ATCM_CLEAN_MASK;

    writel(val, SC_POR_REG5);

    PRINT_INFO("ok\n");

#endif

}

2.3 修改完成后重新编译生效HBOOT1_b.bin即可

我要发帖子