[coreboot] Reset and hang with AGESA on Fam14/SB800 and errors in `agesawrapper_amdinitpost`

Paul Menzel paulepanter at users.sourceforge.net
Tue Apr 9 10:35:01 CEST 2013


Dear coreboot folks,


I am adding Fam14 to the subject line as, for the ASRock E350M1 and the
issue below, AGESA is used for the processor/northbridge Family 14 and
CIMx for the southbridge SB800.


Am Sonntag, den 07.04.2013, 02:48 +0200 schrieb Paul Menzel:

> using an ASRock E350M1 with coreboot built from
> 
>         commit 120d4bd8e644fc26f367022f3338264150a7ac4a
>         Author: Paul Menzel <paulepanter at users.sourceforge.net>
>         Date:   Sat Apr 6 21:03:22 2013 +0200
> 
>             Revert "cbfstool: Replace C++ code with C code"
> 
>             This reverts commit
>         aa3f7ba36ebe3a933aa664f826382f60b31e86f1.
> 
>         commit 161ccc76ea0f8941a34c5bed323cc9ba1fe0221d
>         Author: Ronald G. Minnich <rminnich at gmail.com>
>         Date:   Fri Apr 5 13:35:29 2013 -0700
> 
>             exynos5250: add a chip.h file for the display register settings
> 
>             Reviewed-on: http://review.coreboot.org/3031
> 
> and a GRUB payload
> 
>         $ build/cbfstool build/coreboot.rom print
>         coreboot.rom: 4096 kB, bootblocksize 1008, romsize 4194304, offset 0x0
>         alignment: 64 bytes
> 
>         Name                           Offset     Type         Size
>         cmos_layout.bin                0x0        cmos_layout  1776
>         pci1002,9802.rom               0x740      optionrom    65536
>         fallback/romstage              0x10780    stage        347052
>         fallback/coreboot_ram          0x65380    stage        205910
>         fallback/payload               0x97840    payload      197874
>         (empty)                        0xc7d80    null         3374616
> 
> it worked the first time after restarting the system (serial cable *not*
> connected) and therefore testing the newly written image. Then shutting
> it down and turning it on again it reset in several boot attempts after
> loading the GRUB payload(?) *with* the serial cable connected (PSU
> turned off each time for one or two seconds) until it finally
> successfully started again.
> 
>         […]
>         Loading Linux 3.7.5+ ...
>         error: disk `mduuid/fb7f3dc5d183cab6121231201a2207b9' not found.
>         Loading initial ramdisk ...

This is right before GRUB calls `initrd  /initrd.img-3.7.5+`. Note that
the drive is currently not available. No idea if that is causing the
reset.

>         coreboot-4.0-3984-g120d4bd Sat Apr  6 21:20:24 CEST 2013 starting...
>         BSP Family_Model: 00500f10 
>         cpu_init_detectedx = 00000000 
>         agesawrapper_amdinitmmio passed.
>         agesawrapper_amdinitreset passed.
>         agesawrapper_amdinitearly passed.
>         agesawrapper_amdinitpost 
>         EventLog:	EventClass = 2, EventInfo = 8040100.
>         	Param1 = a00a, Param2 = 0.
>         	Param3 = 0, Param4 = 0.
>         
>         EventLog:	EventClass = 2, EventInfo = 8040100.
>         	Param1 = a00a, Param2 = 0.
>         	Param3 = 0, Param4 = 0.
>         
>         EventLog:	EventClass = 2, EventInfo = 8040100.
>         	Param1 = a00a, Param2 = 0.
>         	Param3 = 0, Param4 = 0.
>         
>         EventLog:	EventClass = 2, EventInfo = 8040100.
>         	Param1 = a00a, Param2 = 0.
>         	Param3 = 0, Param4 = 0.
>         
>         EventLog:	EventClass = 2, EventInfo = 8040100.
>         	Param1 = a00a, Param2 = 0.
>         	Param3 = 0, Param4 = 0.
>         
>         EventLog:	EventClass = 2, EventInfo = 8040100.
>         	Param1 = a00a, Param2 = 0.
>         	Param3 = 0, Param4 = 0.
>         
>         EventLog:	EventClass = 2, EventInfo = 8040100.
>         	Param1 = a00a, Param2 = 0.
>         	Param3 = 0, Param4 = 0.
>         
>         EventLog:	EventClass = 2, EventInfo = 8040100.
>         	Param1 = a00a, Param2 = 0.
>         	Param3 = 0, Param4 = 0.
>         
>         EventLog:	EventClass = 2, EventInfo = 8040100.
>         	Param1 = a00a, Param2 = 0.
>         	Param3 = 0, Param4 = 0.
>         
>         EventLog:	EventClass = 2, EventInfo = 8040100.
>         	Param1 = a00a, Param2 = 0.
>         	Param3 = 0, Param4 = 0.
>         
>         EventLog:	EventClass = 2, EventInfo = 8040100.
>         	Param1 = a00a, Param2 = 0.
>         	Param3 = 0, Param4 = 0.
>         
>         EventLog:	EventClass = 2, EventInfo = 8040100.
>         	Param1 = a00a, Param2 = 0.
>         	Param3 = 0, Param4 = 0.
>         
>         EventLog:	EventClass = 2, EventInfo = 8040100.
>         	Param1 = a00a, Param2 = 0.
>         	Param3 = 0, Param4 = 0.
>         
>         EventLog:	EventClass = 2, EventInfo = 8040100.
>         	Param1 = a00a, Param2 = 0.
>         	Param3 = 0, Param4 = 0.
>         
>         EventLog:	EventClass = 2, EventInfo = 8040100.
>         	Param1 = a00a, Param2 = 0.
>         	Param3 = 0, Param4 = 0.

It is nice when we can just search for error codes. (I wish this would
have been the first thing I tried.)

                $ git grep 8040100
                src/vendorcode/amd/agesa/f10/AGESA.h:#define CPU_ERROR_HEAP_BUFFER_HANDLE_IS_NOT_PRESENT     0x08040100
                src/vendorcode/amd/agesa/f10/Legacy/agesa.inc:CPU_ERROR_HEAP_BUFFER_HANDLE_IS_NOT_PRESENT     EQU   008040100h
                src/vendorcode/amd/agesa/f12/AGESA.h:#define CPU_ERROR_HEAP_BUFFER_HANDLE_IS_NOT_PRESENT     0x08040100
                src/vendorcode/amd/agesa/f12/Legacy/agesa.inc:CPU_ERROR_HEAP_BUFFER_HANDLE_IS_NOT_PRESENT     EQU   008040100h
                src/vendorcode/amd/agesa/f14/AGESA.h:#define CPU_ERROR_HEAP_BUFFER_HANDLE_IS_NOT_PRESENT     0x08040100
                src/vendorcode/amd/agesa/f14/Legacy/agesa.inc:CPU_ERROR_HEAP_BUFFER_HANDLE_IS_NOT_PRESENT     EQU   008040100h
                src/vendorcode/amd/agesa/f15/AGESA.h:#define CPU_ERROR_HEAP_BUFFER_HANDLE_IS_NOT_PRESENT     0x08040100
                src/vendorcode/amd/agesa/f15/Legacy/agesa.inc:CPU_ERROR_HEAP_BUFFER_HANDLE_IS_NOT_PRESENT     EQU   008040100h
                src/vendorcode/amd/agesa/f15tn/AGESA.h:#define CPU_ERROR_HEAP_BUFFER_HANDLE_IS_NOT_PRESENT     0x08040100ul
                src/vendorcode/amd/agesa/f15tn/Legacy/agesa.inc:CPU_ERROR_HEAP_BUFFER_HANDLE_IS_NOT_PRESENT     EQU   008040100h
                $ nl src/vendorcode/amd/agesa/f14/AGESA.h | grep -B 20 -A 14 CPU_ERROR_HEAP_BUFFER_HANDLE_IS_NOT_PRESENT
                  1615	/*----------------------------------------------------------------------------
                  1616	 *
                  1617	 *                    CPU RELATED DEFINITIONS
                  1618	 *
                  1619	 *----------------------------------------------------------------------------
                  1620	 */
                       
                  1621	// CPU Event definitions.
                       
                  1622	// Defines used to filter CPU events based on functional blocks
                  1623	#define CPU_EVENT_PM_EVENT_MASK                         0xFF00FF00
                  1624	#define CPU_EVENT_PM_EVENT_CLASS                        0x08000400
                       
                  1625	//================================================================
                  1626	// CPU General events
                  1627	//    Heap allocation                     (AppFunction =      01h)
                  1628	#define CPU_ERROR_HEAP_BUFFER_IS_NOT_PRESENT            0x08000100
                  1629	#define CPU_ERROR_HEAP_IS_ALREADY_INITIALIZED           0x08010100
                  1630	#define CPU_ERROR_HEAP_IS_FULL                          0x08020100
                  1631	#define CPU_ERROR_HEAP_BUFFER_HANDLE_IS_ALREADY_USED    0x08030100
                  1632	#define CPU_ERROR_HEAP_BUFFER_HANDLE_IS_NOT_PRESENT     0x08040100
                  1633	//    BrandId                             (AppFunction =      02h)
                  1634	#define CPU_ERROR_BRANDID_HEAP_NOT_AVAILABLE            0x08000200
                  1635	//    Micro code patch                    (AppFunction =      03h)
                  1636	#define CPU_ERROR_MICRO_CODE_PATCH_IS_NOT_LOADED        0x08000300
                  1637	//    Power management                    (AppFunction =      04h)
                  1638	#define CPU_EVENT_PM_PSTATE_OVERCURRENT                 0x08000400
                  1639	#define CPU_EVENT_PM_ALL_PSTATE_OVERCURRENT             0x08010400
                  1640	#define CPU_ERROR_PSTATE_HEAP_NOT_AVAILABLE             0x08020400
                  1641	#define CPU_ERROR_PM_NB_PSTATE_MISMATCH                 0x08030400
                  1642	//    BIST                                (AppFunction =      05h)
                  1643	#define CPU_EVENT_BIST_ERROR                            0x08000500
                       
                  1644	//=================================================================
                  1645	// CPU Feature events

So in this case, we have `CPU_ERROR_HEAP_BUFFER_HANDLE_IS_NOT_PRESENT`.

        $ git grep CPU_ERROR_HEAP_BUFFER_HANDLE_IS_NOT_PRESENT src/vendorcode/amd/agesa/f14/
        src/vendorcode/amd/agesa/f14/AGESA.h:#define CPU_ERROR_HEAP_BUFFER_HANDLE_IS_NOT_PRESENT     0x08040100
        src/vendorcode/amd/agesa/f14/Legacy/agesa.inc:CPU_ERROR_HEAP_BUFFER_HANDLE_IS_NOT_PRESENT     EQU   008040100h
        src/vendorcode/amd/agesa/f14/Proc/CPU/heapManager.c:                 CPU_ERROR_HEAP_BUFFER_HANDLE_IS_NOT_PRESENT,
        src/vendorcode/amd/agesa/f14/Proc/CPU/heapManager.c:                   CPU_ERROR_HEAP_BUFFER_HANDLE_IS_NOT_PRESENT,

Looking at

        /*---------------------------------------------------------------------------------------*/
        /**
         * Deallocates a previously allocated buffer in the heap
        […]
         */
        AGESA_STATUS
        HeapDeallocateBuffer (
          IN       UINT32 BufferHandle,
          IN       AMD_CONFIG_PARAMS *StdHeader
          )
        {
        […]
            // If we are still unable to locate the buffer handle, return AGESA_BOUNDS_CHK
            if ((BaseAddress != NULL) && (HeapManager->Signature == HEAP_SIGNATURE_VALID)) {
              PutEventLog (AGESA_BOUNDS_CHK,
                         CPU_ERROR_HEAP_BUFFER_HANDLE_IS_NOT_PRESENT,
                         BufferHandle, 0, 0, 0, StdHeader);
            } else {
              ASSERT (FALSE);
            }
            return AGESA_BOUNDS_CHK;
          }
        }

        /*---------------------------------------------------------------------------------------*/
        /**
         * Locates a previously allocated buffer on the heap.
        […]
         */
        AGESA_STATUS
        HeapLocateBuffer (
          IN OUT   LOCATE_HEAP_PTR *LocateHeap,
          IN       AMD_CONFIG_PARAMS *StdHeader
          )
        {
        […]
            // If we are still unable to deallocate the buffer handle, return AGESA_BOUNDS_CHK
            LocateHeap->BufferPtr = NULL;
            LocateHeap->BufferSize = 0;
            if ((BaseAddress != NULL) && (HeapManager->Signature == HEAP_SIGNATURE_VALID)) {
              PutEventLog (AGESA_BOUNDS_CHK,
                           CPU_ERROR_HEAP_BUFFER_HANDLE_IS_NOT_PRESENT,
                           LocateHeap->BufferHandle, 0, 0, 0, StdHeader);
            } else {
              ASSERT (FALSE);
            }
            return AGESA_BOUNDS_CHK;
          }
        }

So this seems not the cause for the hang. Another indication is that it
is not the last event log.

>         EventLog:	EventClass = 7, EventInfo = 4011c00.
>         	Param1 = 0, Param2 = 0.
>         	Param3 = 0, Param4 = 0.
>         error level: 7

Here I am stuck now. Searching for 4011c00, did not return anything.
Could you somebody please give me a hint.

>         agesawrapper_amdinitenv 
> 
> I think I had already seen this some weeks ago, but did not have time
> yet to report this issue.

I am getting this quite often now. Turning power off and back on to
restart the machine sometimes works and sometimes does not. Repeating
that several times I am often lucky and the system is able to start
normally.


Thanks,

Paul
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part
URL: <http://www.coreboot.org/pipermail/coreboot/attachments/20130409/e09ba405/attachment.sig>


More information about the coreboot mailing list