Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions cmds/app.c
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,10 @@ static int cmd_appLoad(handler_t handler, size_t size, const char *name, char *i
prog->start = entry->start;
prog->end = entry->end;

if ((res = hal_getProgData(prog, imaps, imapSz, dmaps, dmapSz)) < 0) {
return res;
}

return EOK;
}

Expand Down
64 changes: 34 additions & 30 deletions cmds/mpu.c
Original file line number Diff line number Diff line change
Expand Up @@ -82,54 +82,58 @@ static void mpu_regionPrint(const char *name, u32 rbar, u32 rasr)

static void cmd_mpuInfo(void)
{
lib_printf("prints the use of MPU regions, usage: mpu [all]");
lib_printf("prints the use of MPU regions, usage: mpu [prog name]");
}


static int cmd_mpu(int argc, char *argv[])
{
const char *name;
unsigned int i, regCnt;
const mpu_region_t *region;
const mpu_common_t *const mpu_common = mpu_getCommon();
unsigned int i;
const syspage_prog_t *prog = syspage_progsGet();
const syspage_prog_t *firstProg = prog;
const unsigned int regMax = mpu_getMaxRegionsCount();

if (argc == 1) {
regCnt = mpu_common->regCnt;
}
else if (argc == 2) {
if (hal_strcmp(argv[1], "all") != 0) {
log_error("\n%s: Wrong arguments", argv[0]);
return CMD_EXIT_FAILURE;
}

regCnt = mpu_common->regMax;
}
else {
log_error("\n%s: Wrong argument count", argv[0]);
if (prog == NULL) {
log_error("\nNo programs in syspage!");
return CMD_EXIT_FAILURE;
}

if (mpu_common->regMax != sizeof(((hal_syspage_t *)0)->mpu.table) / sizeof(((hal_syspage_t *)0)->mpu.table[0])) {
log_error("\n%s: MPU hal is not initialized or unsupported type was detected", argv[0]);
if (argc > 2) {
log_error("\n%s: Wrong argument count", argv[0]);
return CMD_EXIT_FAILURE;
}

lib_printf(CONSOLE_BOLD "\n%-9s %-7s %-4s %-11s %-11s %-3s %-3s %-9s %-4s %-2s %-2s %-2s\n" CONSOLE_NORMAL,
"MAP NAME", "REGION", "SUB", "START", "END", "EN", "XN", "PERM P/U", "TEX", "S", "C", "B");
do {
name = (prog->argv[0] == 'X') ? prog->argv + 1 : prog->argv;
if ((argc == 2) && (hal_strcmp(name, argv[1]) != 0)) {
prog = prog->next;
continue;
}
lib_printf("\n%-16s 0x%08x%4s 0x%08x", name, prog->start, "", prog->end);
lib_printf(CONSOLE_BOLD "\n%-9s %-7s %-4s %-11s %-11s %-3s %-3s %-9s %-4s %-2s %-2s %-2s\n" CONSOLE_NORMAL,
"MAP NAME", "REGION", "SUB", "START", "END", "EN", "XN", "PERM P/U", "TEX", "S", "C", "B");
for (i = 0; i < prog->hal.mpu.allocCnt; i++) {
name = syspage_mapName(prog->hal.mpu.map[i]);
if (name == NULL) {
name = "<none>";
}
mpu_regionPrint(name, prog->hal.mpu.table[i].rbar, prog->hal.mpu.table[i].rasr);
}

for (i = 0; i < regCnt; i++) {
region = &mpu_common->region[i];
name = syspage_mapName(mpu_common->mapId[i]);
lib_printf("Configured %d of %d MPU regions.\n", prog->hal.mpu.allocCnt, regMax);

if (name == NULL) {
name = "<none>";
if (argc == 2) {
return CMD_EXIT_SUCCESS;
}

mpu_regionPrint(name, region->rbar, region->rasr);
}
prog = prog->next;
} while (prog != firstProg);

lib_printf("\nConfigured %d of %d MPU regions based on %d map definitions.\n",
mpu_common->regCnt, mpu_common->regMax, mpu_common->mapCnt);
if (argc == 2) {
log_error("\nProgram %s not found in syspage!", argv[1]);
return CMD_EXIT_FAILURE;
}

return CMD_EXIT_SUCCESS;
}
Expand Down
2 changes: 1 addition & 1 deletion hal/aarch64/zynqmp/hal.c
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ void hal_kernelEntryPoint(addr_t addr)
}


int hal_memoryAddMap(addr_t start, addr_t end, u32 attr, u32 mapId)
int hal_getProgData(syspage_prog_t *prog, const char *imaps, size_t imapSz, const char *dmaps, size_t dmapSz)
{
return 0;
}
Expand Down
2 changes: 1 addition & 1 deletion hal/armv7a/imx6ull/hal.c
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ void hal_kernelEntryPoint(addr_t addr)
}


int hal_memoryAddMap(addr_t start, addr_t end, u32 attr, u32 mapId)
int hal_getProgData(syspage_prog_t *prog, const char *imaps, size_t imapSz, const char *dmaps, size_t dmapSz)
{
return 0;
}
Expand Down
2 changes: 1 addition & 1 deletion hal/armv7a/zynq7000/hal.c
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ void hal_kernelEntryPoint(addr_t addr)
}


int hal_memoryAddMap(addr_t start, addr_t end, u32 attr, u32 mapId)
int hal_getProgData(syspage_prog_t *prog, const char *imaps, size_t imapSz, const char *dmaps, size_t dmapSz)
{
return 0;
}
Expand Down
5 changes: 3 additions & 2 deletions hal/armv7m/imxrt/hal.c
Original file line number Diff line number Diff line change
Expand Up @@ -124,12 +124,13 @@ void hal_kernelGetEntryPointOffset(addr_t *off, int *indirect)
void hal_kernelEntryPoint(addr_t addr)
{
hal_common.entry = addr;
mpu_kernelEntryPoint(addr);
}


int hal_memoryAddMap(addr_t start, addr_t end, u32 attr, u32 mapId)
int hal_getProgData(syspage_prog_t *prog, const char *imaps, size_t imapSz, const char *dmaps, size_t dmapSz)
{
return mpu_regionAlloc(start, end, attr, mapId, 1);
return mpu_getHalProgData(prog, imaps, imapSz, dmaps, dmapSz);
}


Expand Down
Loading
Loading