OSFP CPLD升级失败

1970-01-01 14:40:54.257195 general_hardware WARNING: init.lua(782): service[bmc.kepler.firmware_mgmt] request timeout: remote service[bmc.kepler.hwproxy], path[/bmc/kepler/Chip/Cpld/Cpld_1_010102], interface[bmc.kepler.Chip.BlockIO], method[Write], used time[37s]

1970-01-01 14:40:54.257585 general_hardware NOTICE: process.lua(89): [cpld]/dev/shm/upgrade/3618688891/cpld.vme update success!

1970-01-01 14:40:54.270649 general_hardware ERROR: utils.lua(236): copy file open src file failed

1970-01-01 14:40:54.273346 general_hardware NOTICE: fw_info_collector.lua(43): insert fw info[3618688891] successfully, component_id: 255, component_id_ex: 4294967295, uid: 00000009040302YAMQ, related_item: nil

1970-01-01 14:40:54.273662 general_hardware NOTICE: valid.lua(258): [cpld]set system_id = 1 ValidatingCpldFlag = 1

1970-01-01 14:40:54.275046 general_hardware NOTICE: fw_info_collector.lua(25): clean fw info[3618688891] successfully

1970-01-01 14:40:54.277479 firmware_mgmt NOTICE: info_mgmt.lua(220): info_key(1_EXUCpld_3618688891) upgrade set_stage: PROCESS → COMMON_FINISH, 95

1970-01-01 14:40:54.300849 firmware_mgmt NOTICE: task_instance.lua(369): wait_msg_result stage=COMMON_FINISH, timeout=7200S, loop=371

1970-01-01 14:40:54.301183 firmware_mgmt NOTICE: action.lua(108): public finish action start

1970-01-01 14:40:54.330752 firmware_mgmt NOTICE: [worker](9): start action in worker

1970-01-01 14:40:54.362234 firmware_mgmt NOTICE: task_mgmt.lua(445): Update task[Id: 3618688891, StartTime: 1970-01-01T14:40:03+00:00, Progress: 95, State: Running] successfully

1970-01-01 14:40:54.389590 firmware_mgmt ERROR: [worker](12): execute finish action script failed!, ret:127

1970-01-01 14:40:55.328425 firmware_mgmt NOTICE: action.lua(114): public finish action end

1970-01-01 14:40:55.328989 firmware_mgmt NOTICE: info_mgmt.lua(220): info_key(1_EXUCpld_3618688891) upgrade set_stage: COMMON_FINISH → DIFF_FINISH, 95

1970-01-01 14:40:55.434199 general_hardware NOTICE: upgrade_subject.lua(158): [on_upgrade_finish] start upgrade EXUCpld

1970-01-01 14:40:55.434568 general_hardware NOTICE: signal.lua(308): [cpld]Start the system[1] EXUCpld upgrade finish phase

1970-01-01 14:40:55.530076 firmware_mgmt NOTICE: task_mgmt.lua(445): Update task[Id: 3618688891, StartTime: 1970-01-01T14:40:03+00:00, Progress: 99, State: Running] successfully

1970-01-01 14:40:55.532933 general_hardware NOTICE: fructl_handler.lua(62): get_host_type: get host type Singlehost

1970-01-01 14:40:55.535581 general_hardware NOTICE: fructl_handler.lua(81): get_power_state: system[1] get power power ON

1970-01-01 14:40:55.536934 general_hardware NOTICE: comm_method.lua(24): power state = ON

1970-01-01 14:40:55.537227 general_hardware NOTICE: signal.lua(235): upgrade_single_host system_id[1] firmware_type[EXUCpld] power_state[ON]

1970-01-01 14:40:55.538236 general_hardware NOTICE: valid.lua(253): [cpld]get system_id = 1 ValidatingCpldFlag = true

1970-01-01 14:40:55.538589 general_hardware NOTICE: fw_cfgs.lua(71): check fw uid(00000009040302YAMQ) id(255) id_ex(4294967295) exist success

1970-01-01 14:40:55.538953 general_hardware NOTICE: signal.lua(47): cpld fw matched, system_id = 1, fw.uid = 00000009040302YAMQ, fw.csr.Name = EXU_FPGA

1970-01-01 14:40:55.541680 general_hardware NOTICE: fructl_handler.lua(62): get_host_type: get host type Singlehost

1970-01-01 14:40:55.543572 general_hardware NOTICE: signal.lua(68): [CPLD]get customize ActiveCondition from db, value = PowerOff

1970-01-01 14:40:55.543873 general_hardware NOTICE: signal.lua(86): [CPLD]Register Active Action start active_condition = PowerOff active_mode = ResetAC

1970-01-01 14:40:55.544264 general_hardware ERROR: fw_info_collector.lua(60): get_register_info_from_fw_info_list [3618688891] not init

1970-01-01 14:40:55.544497 general_hardware ERROR: fw_info_collector.lua(105): get_hpm_version [3618688891] failed, hpm_version is empty

1970-01-01 14:40:55.544763 general_hardware NOTICE: signal.lua(103): [CPLD]Register Active Action, TargetVersion: , ComponentID: , SubComponentID: , TargetUIDs: , Targets:

1970-01-01 14:40:55.548719 firmware_mgmt NOTICE: active_info.lua(338): register_active_action register req FirmwareId = CPLD, ComponentID = , SubComponentID = , TargetUIDs = , StagedVersion =

1970-01-01 14:40:55.549559 firmware_mgmt NOTICE: active_info.lua(367): register: FirmwareId = CPLD FirmwareType = CPLD ActiveCondition = PowerOff ActiveMode = ResetAC ActiveStatus = Idle SystemId = nil, ToBeActivatedFirmwareIds =

1970-01-01 14:40:55.560998 firmware_mgmt NOTICE: active_info.lua(135): Insert FirmwareActive info [FirmwareId:CPLD] to table [t_fw_active_objs]

1970-01-01 14:40:55.567018 firmware_mgmt ERROR: control.lua(418): Upgrade EXUCpld finish failed, ret=-1

1970-01-01 14:40:55.567462 firmware_mgmt NOTICE: info_mgmt.lua(337): info_key(1_EXUCpld_3618688891) upgrade failed, set_stage: DIFF_FINISH → COMPLETED

1970-01-01 14:40:55.580484 firmware_mgmt NOTICE: tasks_scheduling.lua(170): upgrade queue is empty, exit the tasks processor

1970-01-01 14:40:55.580850 firmware_mgmt NOTICE: tasks_scheduling.lua(202): stop tasks processor

1970-01-01 14:40:55.582233 firmware_mgmt NOTICE: active_fructl.lua(96): get host type is Singlehost

1970-01-01 14:40:55.582615 firmware_mgmt NOTICE: active_single_host_fructrl.lua(73): active_single_host_fructrl fructrl get power status

1970-01-01 14:40:55.585029 firmware_mgmt NOTICE: state_active_ready.lua(50): simple upgraded, current active mode is:nil, wait restart seconds:360000

1970-01-01 14:40:55.588813 firmware_mgmt NOTICE: init.lua(41): update status to FS_IDLE.

1970-01-01 14:40:55.590809 firmware_mgmt NOTICE: init.lua(81): Upgrading_Flag is false

1970-01-01 14:40:55.621324 firmware_mgmt ERROR: task_instance.lua(375): info_key(1_EXUCpld_3618688891) Upgrade fail, timeout=600, stage=CLEAR

1970-01-01 14:40:55.621780 firmware_mgmt NOTICE: task_instance.lua(857): Upgrade 1_EXUCpld_3618688891 completely, pre_version=0.00.00

1970-01-01 14:40:55.622179 firmware_mgmt NOTICE: task_instance.lua(863): firmware(info key:1_EXUCpld_3618688891) do upgrade ret:-1, pre_version:0.00.00

1970-01-01 14:40:55.652739 firmware_mgmt NOTICE: task_mgmt.lua(174): task[Id: 3618688891, StartTime: 1970-01-01T14:40:03+00:00, Progress: 99, State: Exception] will be destroyed after 10 minutes

1970-01-01 14:40:55.653302 firmware_mgmt NOTICE: task_mgmt.lua(445): Update task[Id: 3618688891, StartTime: 1970-01-01T14:40:03+00:00, Progress: 99, State: Exception] successfully

1970-01-01 14:40:55.654842 general_hardware NOTICE: upgrade_subject.lua(165): [on_upgrade_finish] end upgrade EXUCpld

1970-01-01 14:41:03.860453 general_hardware NOTICE: fpga_self_test.lua(108): fpga self test result is false

1970-01-01 14:41:10.623728 firmware_mgmt NOTICE: task_service.lua(31): destroy_task_by_id: 3618688891

1970-01-01 14:41:10.642814 firmware_mgmt NOTICE: task_mgmt.lua(463): Destroy task[Id: 3618688891, StartTime: 1970-01-01T14:40:03+00:00, Progress: 99, State: Exception] successfully

1970-01-01 14:41:10.643208 firmware_mgmt NOTICE: task_id_mgmt.lua(40): delete serial task id(3618688891) successfully

1970-01-01 14:41:10.643453 firmware_mgmt NOTICE: task_id_mgmt.lua(42): del serial task id(3618688891) successfully

1970-01-01 14:41:10.643777 firmware_mgmt NOTICE: task_instance.lua(152): destroy task info(id:3618688891) successfully

答案内容由AI生成,仅供参考:
根据提供的知识库内容,CPLD升级失败通常由以下几种已知原因引起。您提到的“OSFP”在上下文中未明确出现,但若是指特定板卡或模块的CPLD升级,以下分析仍具有参考价值。请结合您的实际日志比对。

:magnifying_glass_tilted_left: 常见失败原因及定位方向

  1. 硬件链路不通(最常见)

    • 现象:升级进度到95%后失败,返回错误码 -1,且日志中可能看到 ioctl(CPLD_CMD_LOAD_CPLD) failed
    • 根因:JTAG或I2C物理连接断开,或对应芯片不可访问。
    • 参考:在话题3237中,630版本升级失败的根本原因是硬件链路不通,而330版本未报错是因为软件未检测该错误,升级实际未生效。
      :white_check_mark: 建议:检查CPLD与BMC之间的硬件连接(JTAG/LocalBus/I2C),更换硬件后问题已解决。
  2. CPLD固件版本与系统环境不匹配

    • 现象:升级流程正常完成,但AC下电再上电后版本未更新。
    • 根因:升级包中的CPLD版本与当前系统版本一致(未真正更新),或升级包内文件异常(如缺少valid文件)。
    • 参考:在话题5995中,升级后版本未更新,最终确认是CPLD版本中时钟配置有问题
      :white_check_mark: 建议:比较升级前后的CPLD版本号;若一致,检查升级包内svf/vme文件和valid文件是否完整。
  3. general_hardware组件版本过低

    • 现象:在紫光CPLD级联场景下,升级到95%时失败,日志出现 block_write fail
    • 根因general_hardware版本低于1.100.51,不支持紫光CPLD级联升级。
    • 参考:在文档5中,升级riser卡CPLD失败,升级general_hardware组件后问题解决。
      :white_check_mark: 建议:确认general_hardware组件版本,升级至1.100.51以上并重新出包。
  4. 代码分支走错(JTAG vs I2C)

    • 现象:升级日志显示走JTAG流程,但实际期望走I2C升级,导致 obj_fw.update_chip.Write 为nil,block写失败。
    • 根因:升级包配置错误,未指定 UpdateLink=1(I2C链路)。
    • 参考:在文档10中,BCU的CPLD采用I2C升级失败,原因是升级包走JTAG分支,缺少I2C相关属性。
      :white_check_mark: 建议:检查升级包的 update.cfg 文件,确保 UpdateLink=1 以使用I2C升级。
  5. I2C写入失败导致CPLD挂死

    • 现象:长时间跑I2C升级偶现失败,最终CPLD挂死。
    • 根因:擦除flash后写入失败,transfer_upgrade_file返回错误。
    • 参考:在文档9中,通过增加flash写入重试可规避。
      :white_check_mark: 建议:升级代码中增加写入重试机制;检查I2C总线时钟频率及上拉电阻是否稳定。
  6. 升级生效机制不完整

    • 现象:升级流程显示成功,但系统下电后CPLD版本未变化。
    • 根因:CPLD固件需要完整的AC掉电再上电周期(Power Cycle)才能生效,仅“整机下电”可能无法触发。
    • 参考:在文档4中,BCU CPLD升级后需同时选择“重启BMC”和“整机下电”才能正确生效。
      :white_check_mark: 建议:升级完成后确保执行完整的AC掉电再上电(而非仅下电),或同时勾选“重启BMC + 整机下电”。

:pushpin: 排查步骤速查

步骤 检查项 参考日志关键词
1 硬件链路是否正常 ioctl failed: 21response error
2 general_hardware版本 cpld fw matched 后出现 block_write fail
3 升级包内svf/valid文件完整性 __extract_file: lchown failed
4 CPLD版本号是否与环境一致 升级前后 get fw version 对比
5 升级代码走的是JTAG还是I2C分支 load_cpld_single vs load_cpld_multi_supplier_mode
6 有效文件是否写入 日志中是否包含 init_valid_filevalid.svf 处理

:light_bulb: 下一步建议

由于您未提供具体日志或图片,建议您:

  • 检查 app.log 中与 cpld upgrade 相关的 ERRORWARNING 行。
  • 确认升级包的来源与目标硬件的CPLD类型(JTAG/I2C接口)是否一致。
  • 如果升级后版本未更新,请检查是否执行了完整的AC掉电再上电。

如有更详细的错误日志或截图,我可以进一步帮助定位。

升级失败的原因是14208行,与14203行无关。

升级的finish阶段,general_hardware组件的signal.lua文件中会调用UpdateServiceUpdateServiceFinishReply函数,向firmware_mgmt返回该阶段的返回值。此时firmware_mgmt收到的返回值为-1,导致升级失败。

但是参考你当前提供的日志和社区主干的代码逻辑又对不上。UpdateServiceUpdateServiceFinishReply函数发送返回值时入参是g_upgrade_ret,这个入参是process阶段赋值的。你前面升级的process阶段是成功的,理论上这个变量的值会赋值成0,finish阶段不该失败。

建议检查一下本地的代码是否在这块的逻辑和主干代码有差异。如果无差异,则增加打印g_upgrade_ret的值,检查问题