Дерево устройств OrangePi Zero2


  clocks   |   soc@03000000   |   aliases   |   chosen   |   firmware   |   cpus   |   opp_l_table   |   psci   |   n_brom   |   s_brom   |   sram_ctrl   |   sram_a1   |   sram_a2   |   prcm   |   s_cpuscfg   |   ion   |   dram   |   memory@40000000   |   interrupt-controller@03020000   |   interrupt-controller@0   |   intc-nmi@07010320   |   sunxi-sid@03006000   |   sunxi-sid-ng@03006000   |   sunxi-chipid@03006200   |   timer_arch   |   pmu   |   dramfreq   |   uboot   |   iommu@030f0000   |   gpu@0x01800000   |   box_start_os0   |   __symbols__   |     Все узлы

Узел: iommu@030f0000 - комментарии

Узел устройства IOMMU

IOMMU может предоставлять следующие сервисы:

  • Переназначить адресное пространство, чтобы устройства могли получать доступ к диапазонам физической памяти, к которым они в противном случае не смогли бы получить доступ.
    Пример: 32-битный DMA на 64-битные физические адреса
  • Реализвать сборку разброса на уровне детализации страницы, чтобы устройству не приходилось этого делать.
  • Обеспечить защиту системы от "мошеннического" прямого доступа к памяти путем принудительного выполнения всех доступов через IOMMU и отказа при обнаружении доступа к несопоставленным адресным областям.
  • Обеспечить изоляцию адресного пространства между несколькими контекстами.

    Узлы устройств, совместимые с этой привязкой, представляют собой оборудование с некоторыми из вышеперечисленных возможностей.

    Модули IOMMU могут быть с одним или несколькими ведущими. Устройства IOMMU с одним ведущим устройством обычно имеют фиксированную связь с ведущим устройством, тогда как устройства IOMMU с несколькими ведущими могут транслировать доступы от более чем одного ведущего устройства.

    Узел дерева устройств родительской шины устройства IOMMU должен содержать допустимое свойство dma-range, которое описывает, как физическое адресное пространство IOMMU отображается в память. Пустое свойство dma-range означает, что имеется отображение 1:1 из IOMMU в память.

    Свойство #iommu-cells - количество ячеек в спецификаторе IOMMU, необходимое для кодирования адреса.
    Значение спецификатора IOMMU определяется привязкой дерева устройств конкретный IOMMU.
    Ниже приведены несколько примеров типичных вариантов использования:

  • #iommu-cells = 0 - Одиночные ведущие устройства IOMMU не настраиваются, поэтому в спецификаторе не требуется кодировать дополнительную информацию. Это также может относиться к нескольким ведущим устройствам IOMMU, которые не позволяют настраивать ассоциацию мастеров. Обратите внимание, что модуль IOMMU может быть сконструирован с несколькими мастерами, но при этом предоставлять только один мастер в данной конфигурации. В таких случаях количество ячеек обычно равно 1, как и в следующем случае.
  • #iommu-cells = 1 - Возможно, потребуется настроить несколько главных устройств IOMMU, чтобы включить трансляцию для данного главного устройства. В таких случаях единственная адресная ячейка соответствует идентификатору ведущего устройства. В некоторых случаях для представления одного главного идентификатора может потребоваться более одной ячейки.
  • #iommu-cells = 4 - Некоторые устройства IOMMU позволяют настраивать окно DMA для ведущих. Первая ячейка адреса может содержать, например, идентификатор главного устройства, а вторая ячейка может содержать начало окна DMA для данного устройства. Длина окна DMA определяется третьей и четвертой ячейками.

    Обратите внимание, что это всего лишь примеры, и в реальных сценариях использования могут использоваться разные определения для представления своих индивидуальных потребностей. Всегда обращайтесь к конкретной привязке IOMMU, чтобы узнать точное значение ячеек, составляющих спецификатор.