diff options
| author | Yu Chien Peter Lin <[email protected]> | 2022-10-14 08:32:42 +0800 |
|---|---|---|
| committer | Anup Patel <[email protected]> | 2022-10-23 10:21:21 +0530 |
| commit | dcdaf3027489cadd513767eda6dcaa0c1ecd2d29 (patch) | |
| tree | be58d2b9242725c70f1ebd1377f20c40c36947a7 /lib/utils | |
| parent | 60b78fee9225155ac6e9d4733bf3dc0f7a8a9933 (diff) | |
lib: sbi: Add sbi_domain_root_add_memrange() API
This patch generalizes the logic to add a memory range with desired
alignment and flags of consecutive regions to the root domain.
Signed-off-by: Yu Chien Peter Lin <[email protected]>
Reviewed-by: Anup Patel <[email protected]>
Diffstat (limited to 'lib/utils')
| -rw-r--r-- | lib/utils/timer/aclint_mtimer.c | 50 |
1 files changed, 14 insertions, 36 deletions
diff --git a/lib/utils/timer/aclint_mtimer.c b/lib/utils/timer/aclint_mtimer.c index a957b1ca..3f00c218 100644 --- a/lib/utils/timer/aclint_mtimer.c +++ b/lib/utils/timer/aclint_mtimer.c @@ -142,34 +142,6 @@ int aclint_mtimer_warm_init(void) return 0; } -static int aclint_mtimer_add_regions(unsigned long addr, unsigned long size) -{ -#define MTIMER_ADD_REGION_ALIGN 0x1000 - int rc; - unsigned long pos, end, rsize; - struct sbi_domain_memregion reg; - - pos = addr; - end = addr + size; - while (pos < end) { - rsize = pos & (MTIMER_ADD_REGION_ALIGN - 1); - if (rsize) - rsize = 1UL << sbi_ffs(pos); - else - rsize = ((end - pos) < MTIMER_ADD_REGION_ALIGN) ? - (end - pos) : MTIMER_ADD_REGION_ALIGN; - - sbi_domain_memregion_init(pos, rsize, - SBI_DOMAIN_MEMREGION_MMIO, ®); - rc = sbi_domain_root_add_memregion(®); - if (rc) - return rc; - pos += rsize; - } - - return 0; -} - int aclint_mtimer_cold_init(struct aclint_mtimer_data *mt, struct aclint_mtimer_data *reference) { @@ -208,23 +180,29 @@ int aclint_mtimer_cold_init(struct aclint_mtimer_data *mt, /* Add MTIMER regions to the root domain */ if (mt->mtime_addr == (mt->mtimecmp_addr + mt->mtimecmp_size)) { - rc = aclint_mtimer_add_regions(mt->mtimecmp_addr, - mt->mtime_size + mt->mtimecmp_size); + rc = sbi_domain_root_add_memrange(mt->mtimecmp_addr, + mt->mtime_size + mt->mtimecmp_size, + MTIMER_REGION_ALIGN, + SBI_DOMAIN_MEMREGION_MMIO); if (rc) return rc; } else if (mt->mtimecmp_addr == (mt->mtime_addr + mt->mtime_size)) { - rc = aclint_mtimer_add_regions(mt->mtime_addr, - mt->mtime_size + mt->mtimecmp_size); + rc = sbi_domain_root_add_memrange(mt->mtime_addr, + mt->mtime_size + mt->mtimecmp_size, + MTIMER_REGION_ALIGN, + SBI_DOMAIN_MEMREGION_MMIO); if (rc) return rc; } else { - rc = aclint_mtimer_add_regions(mt->mtime_addr, - mt->mtime_size); + rc = sbi_domain_root_add_memrange(mt->mtime_addr, + mt->mtime_size, MTIMER_REGION_ALIGN, + SBI_DOMAIN_MEMREGION_MMIO); if (rc) return rc; - rc = aclint_mtimer_add_regions(mt->mtimecmp_addr, - mt->mtimecmp_size); + rc = sbi_domain_root_add_memrange(mt->mtimecmp_addr, + mt->mtimecmp_size, MTIMER_REGION_ALIGN, + SBI_DOMAIN_MEMREGION_MMIO); if (rc) return rc; } |
