这段代码是用于在 ARM SMMU(System MMU)驱动中,探测并初始化一个设备的函数。主要步骤如下:
检查设备是否有有效的 IOMMU 设备描述信息,并且使用的是 ARM SMMU 的操作接口。
检查设备是否已经被其他驱动程序占用,如果已经被占用则返回错误。
根据设备的 FWNODE 获取对应的 ARM SMMU 实例。
分配并初始化一个 arm_smmu_master 结构体,并将其与当前设备关联起来。
将新创建的 arm_smmu_master 插入到相应的 ARM SMMU 实例中。
从设备属性中读取 PASID 数量位数,并进行设置。PASID 是用于标识进程地址空间标签的机制,在 ARM SMMU 中需要先启用 PASID 才能使用 ATS(Address Translation Services)功能。
根据所支持的特性和设备属性,设置 stall_enabled 和 ssid_bits 等字段。
返回 ARM SMMU 实例的 iommu_device 结构体指针作为结果。如果在任何步骤出现错误,则释放分配的内存并返回相应错误码。
内容由零声教学AI助手提供,问题来源于学员提问