26 Jan
2023
26 Jan
'23
5:35 p.m.
On 26/01/2023 03:14, Wesley Cheng wrote:
+}
+static int q6usb_dai_dev_probe(struct platform_device *pdev) +{
...
- data->priv.domain = iommu_domain_alloc(pdev->dev.bus);
- if (!data->priv.domain) {
dev_err(&pdev->dev, "failed to allocate iommu domain\n");
return -ENODEV;
- }
- /* attach to external processor iommu */
- ret = iommu_attach_device(data->priv.domain, &pdev->dev);
- if (ret) {
dev_err(&pdev->dev, "failed to attach device ret = %d\n", ret);
goto free_domain;
- }
Why are we doing this manually here? device core should take care of attaching iommu to the device instance.
...
+detach_device:
- iommu_detach_device(data->priv.domain, &pdev->dev);
+free_domain:
- iommu_domain_free(data->priv.domain);
- return ret;
+}
+static int q6usb_dai_dev_remove(struct platform_device *pdev) +{
- struct q6usb_port_data *data = platform_get_drvdata(pdev);
- iommu_detach_device(data->priv.domain, &pdev->dev);
- iommu_domain_free(data->priv.domain);