arm64: Detect if in a realm and set RIPAS RAM
Detect that the VM is a realm guest by the presence of the RSI interface. This is done after PSCI has been initialised so that we can check the SMCCC conduit before making any RSI calls. If in a realm then all memory needs to be marked as RIPAS RAM initially, the loader may or may not have done this for us. To be sure iterate over all RAM and mark it as such. Any failure is fatal as that implies the RAM regions passed to Linux are incorrect - which would mean failing later when attempting to access non-existent RAM. Signed-off-by:Suzuki K Poulose <suzuki.poulose@arm.com> Co-developed-by:
Steven Price <steven.price@arm.com> Signed-off-by:
Steven Price <steven.price@arm.com> --- Changes since v5: * Replace BUG_ON() with a panic() call that provides a message with the memory range that couldn't be set to RIPAS_RAM. * Move the call to arm64_rsi_init() later so that it is after PSCI, this means we can use arm_smccc_1_1_get_conduit() to check if it is safe to make RSI calls. Changes since v4: * Minor tidy ups. Changes since v3: * Provide safe/unsafe versions for converting memory to protected, using the safer version only for the early boot. * Use the new psci_early_test_conduit() function to avoid calling an SMC if EL3 is not present (or not configured to handle an SMC). Changes since v2: * Use DECLARE_STATIC_KEY_FALSE rather than "extern struct static_key_false". * Rename set_memory_range() to rsi_set_memory_range(). * Downgrade some BUG()s to WARN()s and handle the condition by propagating up the stack. Comment the remaining case that ends in a BUG() to explain why. * Rely on the return from rsi_request_version() rather than checking the version the RMM claims to support. * Rename the generic sounding arm64_setup_memory() to arm64_rsi_setup_memory() and move the call site to setup_arch().
Loading
Please register or sign in to comment