#include <asm/sections.h>
 #include <asm/io.h>
 #include <asm/setup_arch.h>
+#include <asm/sev.h>
 
 static struct resource system_rom_resource = {
        .name   = "System ROM",
 
 void __init probe_roms(void)
 {
-       const unsigned char *rom;
        unsigned long start, length, upper;
+       const unsigned char *rom;
        unsigned char c;
        int i;
 
+       /*
+        * The ROM memory range is not part of the e820 table and is therefore not
+        * pre-validated by BIOS. The kernel page table maps the ROM region as encrypted
+        * memory, and SNP requires encrypted memory to be validated before access.
+        * Do that here.
+        */
+       snp_prep_memory(video_rom_resource.start,
+                       ((system_rom_resource.end + 1) - video_rom_resource.start),
+                       SNP_PAGE_STATE_PRIVATE);
+
        /* video rom */
        upper = adapter_rom_resources[0].start;
        for (start = video_rom_resource.start; start < upper; start += 2048) {