[ARMLLB]: Add support for ATAG_REVISION.

[ARMLLB]: Fix support of ATAG_MEM: there can be multiple tags, one per DRAM bank.
[ARMLLB]: Fix the default case not to "return": it should "Break" instead.
[ARMLLB]: Only apply the RAMDisk hack on Beagle for now.

svn path=/trunk/; revision=49735
This commit is contained in:
Sir Richard 2010-11-23 16:42:00 +00:00
parent 589fe32c63
commit b9c9c55b77

View file

@ -9,10 +9,11 @@
#include "precomp.h" #include "precomp.h"
ULONG LlbEnvHwPageSize; ULONG LlbEnvHwPageSize;
ULONG LlbEnvHwMemStart; ULONG LlbEnvHwMemStart = 0;
ULONG LlbEnvHwMemSize; ULONG LlbEnvHwMemSize = 0;
ULONG LlbEnvRamDiskStart; ULONG LlbEnvRamDiskStart = 0;
ULONG LlbEnvRamDiskSize; ULONG LlbEnvRamDiskSize = 0;
ULONG LlbEnvHwRevision;
CHAR LlbEnvCmdLine[256]; CHAR LlbEnvCmdLine[256];
CHAR LlbValueData[32]; CHAR LlbValueData[32];
@ -35,11 +36,17 @@ LlbEnvParseArguments(IN PATAG Arguments)
LlbEnvHwPageSize = Atag->u.Core.PageSize; LlbEnvHwPageSize = Atag->u.Core.PageSize;
break; break;
case ATAG_REVISION:
/* Save page size */
LlbEnvHwRevision = Atag->u.Revision.Rev;
break;
case ATAG_MEM: case ATAG_MEM:
/* Save RAM start and size */ /* Save RAM start and size */
LlbEnvHwMemStart = Atag->u.Mem.Start; if (!LlbEnvHwMemStart) LlbEnvHwMemStart = Atag->u.Mem.Start;
LlbEnvHwMemSize = Atag->u.Mem.Size; LlbEnvHwMemSize += Atag->u.Mem.Size;
break; break;
case ATAG_INITRD2: case ATAG_INITRD2:
@ -48,6 +55,7 @@ LlbEnvParseArguments(IN PATAG Arguments)
LlbEnvRamDiskStart = Atag->u.InitRd2.Start; LlbEnvRamDiskStart = Atag->u.InitRd2.Start;
LlbEnvRamDiskSize = Atag->u.InitRd2.Size; LlbEnvRamDiskSize = Atag->u.InitRd2.Size;
#ifdef _BEAGLE_
/* Make sure it's 16MB-aligned */ /* Make sure it's 16MB-aligned */
LlbEnvRamDiskSize = (LlbEnvRamDiskSize + (16 * 1024 * 1024) - 1) LlbEnvRamDiskSize = (LlbEnvRamDiskSize + (16 * 1024 * 1024) - 1)
&~ ((16 * 1024 * 1024) - 1); &~ ((16 * 1024 * 1024) - 1);
@ -55,6 +63,7 @@ LlbEnvParseArguments(IN PATAG Arguments)
/* The RAMDISK actually starts 16MB later */ /* The RAMDISK actually starts 16MB later */
LlbEnvRamDiskStart += 16 * 1024 * 1024; LlbEnvRamDiskStart += 16 * 1024 * 1024;
LlbEnvRamDiskSize -= 16 * 1024 * 1024; LlbEnvRamDiskSize -= 16 * 1024 * 1024;
#endif
break; break;
case ATAG_CMDLINE: case ATAG_CMDLINE:
@ -68,7 +77,7 @@ LlbEnvParseArguments(IN PATAG Arguments)
/* Nothing left to handle */ /* Nothing left to handle */
case ATAG_NONE: case ATAG_NONE:
default: default:
return; break;
} }
/* Next tag */ /* Next tag */
@ -76,8 +85,11 @@ LlbEnvParseArguments(IN PATAG Arguments)
} }
/* For debugging */ /* For debugging */
DbgPrint("[BOOTROM] PageSize: %dKB RAM: %dMB CMDLINE: %s\n", DbgPrint("[BOOTROM] Board Revision: %lx PageSize: %dKB RAM: %dMB CMDLINE: %s\n"
LlbEnvHwPageSize / 1024, LlbEnvHwMemSize / 1024 / 1024, LlbEnvCmdLine); "[RAMDISK] Base: %lx Size: %dMB\n",
LlbEnvHwRevision,
LlbEnvHwPageSize / 1024, LlbEnvHwMemSize / 1024 / 1024, LlbEnvCmdLine,
LlbEnvRamDiskStart, LlbEnvRamDiskSize / 1024 / 1024);
} }
VOID VOID