Added memory segment page size validation in TDF validation script

This commit is contained in:
Nav
2025-01-22 22:44:27 +00:00
parent c64e34ed05
commit 868649adf2
3 changed files with 34 additions and 3 deletions

View File

@@ -37,8 +37,12 @@ class ValidationService extends \Targets\TargetDescriptionFiles\Services\Validat
$failures[] = 'Program memory address space exceeds 1M bytes';
}
if ($tdf->getProgramMemorySegment() === null) {
$programMemorySegment = $tdf->getProgramMemorySegment();
if ($programMemorySegment === null) {
$failures[] = 'Missing "internal_program_memory" memory segment';
} elseif ($programMemorySegment->pageSize === null) {
$failures[] = 'Missing page size in program memory segment';
}
if (($gprSegment = $tdf->getGpRegistersMemorySegment()) === null) {

View File

@@ -50,8 +50,24 @@ class ValidationService extends \Targets\TargetDescriptionFiles\Services\Validat
$failures[] = 'Missing "programming_opcode_key" property';
}
if ($tdf->getProperty('wch_link_interface', 'programming_block_size') === null) {
$failures[] = 'Missing "programming_block_size" property';
$programmingBlockSize = $tdf->getPropertyValue('wch_link_interface', 'programming_block_size');
if (!is_numeric($programmingBlockSize)) {
$failures[] = 'Missing/invalid "programming_block_size" property';
} else {
if (
$mainProgramSegment !== null
&& ($mainProgramSegment->addressRange->startAddress % (int)$programmingBlockSize) !== 0
) {
$failures[] = 'Main program memory segment start address does not align with programming block size';
}
if (
$bootProgramSegment !== null
&& ($bootProgramSegment->addressRange->startAddress % (int)$programmingBlockSize) !== 0
) {
$failures[] = 'Boot program memory segment start address does not align with programming block size';
}
}
if ($tdf->getProperty('riscv_debug_module', 'trigger_count') === null) {

View File

@@ -357,6 +357,17 @@ class ValidationService
$failures[] = 'Invalid size (' . $segment->size() . ')';
}
if ($segment->pageSize !== null) {
if (($segment->addressRange->startAddress % $segment->pageSize) !== 0) {
$failures[] = 'Start address is not a multiple of the page size';
}
if ($segment->size() !== null && ($segment->size() % $segment->pageSize) !== 0) {
$failures[] = 'Size (' . $segment->size() . ') is not a multiple of the page size ('
. $segment->pageSize . ')';
}
}
if ($segment->executable === null) {
$failures[] = 'Missing executable';
}