А как фирмварь может это сделать?
Ring 0, плоская память (некоторые, правда, прячут таблицу страниц, замапив по её адресам нули) ...
Никто не мешает писать что угодно в железо, другой вопрос, что собственные драйвера фирмвари поведут себя неизвестным образом.
Поэтому, у меня, например, запрещёна прямая посекторная запись на системный EFI раздел с которого стартанул модуль - хз как и что они там кэшируют ...
Тоже самое со всеми USB клавами, мышами, флешками и пр ...
Но всё это работает только пока есть boot сервисы - выход в OS подразумевает их удаление и остаётся только самый минимум (доступ к переменным и ребут). Тут уже только чистое железо и загрузчик.
Писать в компорты никто не запрещает ... GDT подменяю на свою, сохранив в начале все селекторы фирмвари, IDT тоже патчу напрямую - и это всё работает практически везде на x64.
Стоит только иметь в виду, что вставные внешние компорты могут быть запрещены на PCI, фирмварь парится их разрешением только если включен CSM.
Плюс, фирмварь может сама ходить в реальный (в VESA биос, например). Поэтому все селекторы при уходе в код фирмвари должны быть валидны ... иначе оно молча помрёт на чём-ньть, когда туда полезет чтобы поставить графический режим (например). В общем, тьма подводных камней вполне себе присутствует ...