On 4/19/21 2:43 AM, Philippe Mathieu-Daudé wrote:
Not really RFC, simply that I'v to add the technical description,
but I'd like to know if there could be a possibility to not accept
this device (because I missed something) before keeping working on
it. So far it is only used in hobbyist boards.
Cc: Peter Xu<pet...@redhat.com>
Cc: Paolo Bonzini<pbonz...@redhat.com>
---
include/hw/misc/aliased_region.h | 87 ++++++++++++++++++++
hw/misc/aliased_region.c | 132 +++++++++++++++++++++++++++++++
MAINTAINERS | 6 ++
hw/misc/Kconfig | 3 +
hw/misc/meson.build | 1 +
5 files changed, 229 insertions(+)
create mode 100644 include/hw/misc/aliased_region.h
create mode 100644 hw/misc/aliased_region.c
Looks reasonable to me.
+ subregion_bits = 64 - clz64(s->span_size - 1);
+ s->mem.count = s->region_size >> subregion_bits;
+ assert(s->mem.count > 1);
+ subregion_size = 1ULL << subregion_bits;
So... subregion_size = pow2floor(s->span_size)?
Why use a floor-ish computation here and pow2ceil later in aliased_mr_realize?
Why use either floor or ceil as opposed to asserting that the size is in fact
a power of 2? Why must the region be a power of 2, as opposed to e.g. a
multiple of page_size? Or just the most basic requirement that region_size be
a multiple of span_size?
r~