;============================================================================ ;## ;## This file is part of the coreboot project. ;## ;## Copyright (C) 2018, The Linux Foundation. All rights reserved. ;## ;## This program is free software; you can redistribute it and/or modify ;## it under the terms of the GNU General Public License version 2 and ;## only version 2 as published by the Free Software Foundation. ;## ;## This program is distributed in the hope that it will be useful, ;## but WITHOUT ANY WARRANTY; without even the implied warranty of ;## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;## GNU General Public License for more details. ;## ;============================================================================ ; Name: ; debug_cb_common.cmm ; ; Description: ; Debug coreboot Environment ;============================================================================ ;============================================================================ ; CMM script variables ;============================================================================ LOCAL &BBStage // Bootblock Stage stop? LOCAL &VERStage // Verify Stage stop? LOCAL &ROMStage // Rom Stage stop? LOCAL &QCLStage // QCL Stage stop? LOCAL &RAMStage // Ram Stage stop? LOCAL &BL31Stage // BL31 Stage stop? LOCAL &DCStage // Depthcharge Stage stop? LOCAL &KernelSyms // Load Kernel Symbols? LOCAL &RAMLoad // T32 Load Code? ;============================================================================ ;--------------------------------------------------- ; Entry point ;--------------------------------------------------- ENTRY &TargetPkg &srcpath &xblsrcpath &ImageName // Parse for RAMLoad first if (STR.CP("&ImageName","RAM,*")) ( &RAMLoad=TRUE() &ImageName=STR.CUT("&ImageName",4) ) else &RAMLoad=FALSE() // Parse &ImageName the easy way if (STR.CP("&ImageName","*ALL*")) ( &BBStage=TRUE() &VERStage=TRUE() &ROMStage=TRUE() &QCLStage=TRUE() &RAMStage=TRUE() ;&BL31Stage=TRUE() &DCStage=TRUE() &KernelSyms=STRING.CP("&ImageName", "*KERNEL*") ) else ( &BBStage=STRING.CP("&ImageName","*BB*") &VERStage=STRING.CP("&ImageName","*VER*") &ROMStage=STRING.CP("&ImageName","*ROM*") &QCLStage=STRING.CP("&ImageName","*QCL*") &RAMStage=STRING.CP("&ImageName","*RAM*") &BL31Stage=STRING.CP("&ImageName","*BL31*") &DCStage=STRING.CP("&ImageName","*DC*") &KernelSyms=STRING.CP("&ImageName", "*KERNEL*") ) PRINT %String "Debug Script: debug_cb_common.cmm" PRINT %String "Images to debug: &ImageName" PRINT %String "Loading Kernel Symbols: &KernelSyms" PRINT %String "RAMLoad Requested: &RAMLoad" PRINT %String "BootBlock Entry Addr: &BBEntryAddr" PRINT %String "VerStage Entry Addr: &VEREntryAddr" PRINT %String "RomStage Entry Addr: &ROMEntryAddr" PRINT %String "QCLStage Entry Addr: &QCLEntryAddr" PRINT %String "RamStage Entry Addr: &RAMEntryAddr" PRINT %String "BL31 Entry Addr: &BL31EntryAddr" PRINT %String "DepthCharge Entry Addr: &DCEntryAddr" PRINT %String "Kernel Entry Addr: &KernelEntryAddr" PRINT %String "PreRamCbfsCache: &PreRamCbfsCache" PRINT %String "PreRamConsoleAddr: &PreRamConsoleAddr" PRINT %String "VBoot2Work: &VBoot2Work" PRINT %String "Stack: &Stack" PRINT %String "Ttb: &Ttb" PRINT %String "Timestamp &Timestamp" PRINT %String "RamConsoleAddr &RamConsoleAddr" PRINT %String "CbmemTop &CbmemTop" PRINT %String "PostRamCbfsCache &PostRamCbfsCache" // HW at BB entry, first stop: bootblock //////////////////////////////////////// if &BBStage ( &imgpath="build\cbfs\fallback\bootblock.elf" if (&RAMLoad) d.load.elf &imgpath /strippart "coreboot" /sourcepath &srcpath else d.load.elf &imgpath /strippart "coreboot" /sourcepath &srcpath /nocode ;uncomment b.s if not simulating (CONFIG_SOC_SIMULATE) ;b.s run_romstage /o ;d.set &PreRamConsoleAddr++0x8000 0 d.dump &PreRamConsoleAddr /spotlight print %String "Now the control is in BootBlock, press enter after debugging to go to next stage" print %String "Press enter to go to next stage" enter ) go &VEREntryAddr wait !run() if &VERStage ( &imgpath="build\cbfs\fallback\verstage.elf" if (&RAMLoad) d.load.elf &imgpath /strippart "coreboot" /sourcepath &srcpath /noclear else d.load.elf &imgpath /strippart "coreboot" /sourcepath &srcpath /nocode /noclear print %String "Now the control is in VERStage, press enter after debugging to go to next stage" print %String "Press enter to go to next stage" enter ) go &ROMEntryAddr wait !run() if &ROMStage ( &imgpath="build\cbfs\fallback\romstage.elf" if (&RAMLoad) d.load.elf &imgpath /strippart "coreboot" /sourcepath &srcpath else d.load.elf &imgpath /strippart "coreboot" /sourcepath &srcpath /nocode print %String "Now the control is in ROMStage, press enter after debugging to go to next stage" print %String "Press enter to go to next stage" enter ) ; go &QCLEntryAddr ; wait !run() ; ; if &QCLStage ; ( ; &imgpath="3rdparty\blobs\soc\qualcomm\sdm845\QcLib.elf" ; if (&RAMLoad) ; d.load.elf &imgpath /strippart "coreboot" /sourcepath &srcpath /noclear ; else ; d.load.elf &imgpath /strippart "coreboot" /sourcepath &srcpath /nocode /noclear ; ; print %String "Now the control is in QCLStage, press enter after debugging to go to next stage" ; print %String "Press enter to go to next stage" ; enter ; ) go &RAMEntryAddr wait !run() if &RAMStage ( &imgpath="build\cbfs\fallback\ramstage.elf" if (&RAMLoad) d.load.elf &imgpath /strippart "coreboot" /sourcepath &srcpath else d.load.elf &imgpath /strippart "coreboot" /sourcepath &srcpath /nocode print %String "Now the control is in RAMStage, press enter after debugging to go to next stage" print %String "Press enter to go to next stage" enter ) ; BL31 disabled for now ; Next block of code commented out ; go &BL31EntryAddr ; wait !run() ; ; if &BL31Stage ; ( ; &imgpath="build\bl31.elf" ; if (&RAMLoad) ; d.load.elf &imgpath /strippart "coreboot" /sourcepath &srcpath ; else ; d.load.elf &imgpath /strippart "coreboot" /sourcepath &srcpath /nocode ; y.spath.srd 3rdparty/arm-trusted-firmware ; print %String "Now the control is in BL31, press enter after debugging to go to next stage" ; print %String "Press enter to go to next stage" ; enter ; ) ; End of commented out code block: bl31 go &DCEntryAddr wait !run() if &DCStage ( &imgpath="payloads\external\depthcharge\depthcharge\build\depthcharge.elf" symbol.sourcepath.setbasedir &srcpath\payloads if (&RAMLoad) d.load.elf &imgpath /strippart "payloads" /sourcepath &srcpath else d.load.elf &imgpath /strippart "payloads" /sourcepath &srcpath /nocode b.d /all b.set main b.set halt b.set &KernelEntryAddr ; kernel entry point y.spath.srd + payloads/external/depthcharge/depthcharge y.spath.srd + 3rdparty\vboot_reference d.dump &RamConsoleAddr /spotlight &CBTablePtr=Register(X0) Data.SAVE.Binary CBTablePtr.bin &CBTablePtr++0x400 print %String "Now the control is in Depthcharge, press enter after debugging to run free" ;print %String "Use this command to load kernel symbols: d.load.elf vmlinux /nocode /strippart kernel" print %String "Press enter when done debugging Depthcharge" enter ) ; go &KernelEntryAddr ; wait !run() ; ; if &KernelSyms ; ( ; print %String "Kernel Symbols are being loaded, this requires two files in coreboot root tree:" ; print %String "vmlinux needs to be copied from ChromiumOS build tree" ; print %String "msm-4.4 needs to be symbolic link to kernel source tree" ; d.load.elf vmlinux /strippart "msm-4.4" /nocode ; y.spath.srd msm-4.4 ; print %String "This script now concludes at kernel entry point" ; ) enddo