• Clément Léger's avatar
    riscv: add ISA extensions validation callback · 625034ab
    Clément Léger authored
    Since a few extensions (Zicbom/Zicboz) already needs validation and
    future ones will need it as well (Zc*) add a validate() callback to
    struct riscv_isa_ext_data. This require to rework the way extensions are
    parsed and split it in two phases. First phase is isa string or isa
    extension list parsing and consists in enabling all the extensions in a
    temporary bitmask (source isa) without any validation. The second step
    "resolves" the final isa bitmap, handling potential missing dependencies.
    The mechanism is quite simple and simply validate each extension
    described in the source bitmap before enabling it in the resolved isa
    bitmap. validate() callbacks can return either 0 for success,
    -EPROBEDEFER if extension needs to be validated again at next loop. A
    previous ISA bitmap is kept to avoid looping multiple times if an
    extension dependencies are never satisfied until we reach a stable
    state. In order to avoid any potential infinite looping, allow looping
    a maximum of the number of extension we handle. Zicboz and Zicbom
    extensions are modified to use this validation mechanism.
    Signed-off-by: default avatarClément Léger <cleger@rivosinc.com>
    Reviewed-by: default avatarConor Dooley <conor.dooley@microchip.com>
    Link: https://lore.kernel.org/r/20240619113529.676940-8-cleger@rivosinc.comSigned-off-by: default avatarPalmer Dabbelt <palmer@rivosinc.com>
    625034ab
cpufeature.c 26.5 KB