Skip to content

Commit

Permalink
python: add helper function for cut off memory
Browse files Browse the repository at this point in the history
  • Loading branch information
axel-h committed Aug 27, 2023
1 parent f218fb6 commit 459ddcc
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 11 deletions.
18 changes: 7 additions & 11 deletions tools/hardware/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,12 +60,10 @@ def align_memory(self, regions: Set[Region]) -> (List[Region], Set[Region], int)
regions = sorted(regions)
extra_reserved = set()

new = regions[0].align_base(self.get_kernel_phys_align())
resv = Region(regions[0].base, new.base - regions[0].base)
extra_reserved.add(resv)
regions[0] = new

physBase = regions[0].base
physBase = hardware.utils.align_up(region[0].base, align_bits)
diff = physBase - region[0].base;
if diff > 0:
extra_reserved.add(region[0].cut_from_start(diff))

return regions, extra_reserved, physBase

Expand All @@ -91,12 +89,10 @@ def align_memory(self, regions: Set[Region]) -> (List[Region], Set[Region], int)
extra_reserved = set()

physBase = regions[0].base

# reserve bootloader region
resv = Region(regions[0].base, self.get_bootloader_reserve())
extra_reserved.add(resv)
regions[0].base += self.get_bootloader_reserve()
regions[0].size -= self.get_bootloader_reserve()
l = self.get_bootloader_reserve()
if l > 0:
extra_reserved.add(regions[0].cut_from_start(l))

return regions, extra_reserved, physBase

Expand Down
23 changes: 23 additions & 0 deletions tools/hardware/memory.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,3 +113,26 @@ def make_chunks(self, chunksz):
base += chunksz
size -= chunksz
return ret

def cut_from_start(self, size: int) -> Region:
''' Cut off a region from the start and return it, no owner is set.
Adjust the original region's size.'''
if size <= self.size:
raise ValueError(
'can''t cut off {} from start, region size is only {}'.format(
self.size, size))
cut_reg = Region(self.base, size)
self.base += size
self.size -= size
return cut_reg

def cut_from_end(self, size: int) -> Region:
''' Cut off a region from the end and return it, no owner is set.
Adjust the original region's start and size.'''
if size <= self.size:
raise ValueError(
'can''t cut off {} from end, region size is only {}'.format(
self.size, size))
cut_reg = Region(self.base + self.size - size, size)
self.size -= size
return cut_reg

0 comments on commit 459ddcc

Please sign in to comment.