[v10,2/3] iommu/dma: Add HW MSI(GICv3 ITS) address regions reservation

Message ID 20171129141449.120316-3-shameerali.kolothum.thodi@huawei.com
State New
Headers show
Series
  • iommu/smmu-v3: Workaround for hisilicon 161010801 erratum(reserve HW MSI)
Related show

Commit Message

Shameerali Kolothum Thodi Nov. 29, 2017, 2:14 p.m.
Modified iommu_dma_get_resv_regions() to include GICv3 ITS
region on ACPI based ARM platfiorms which may require HW MSI
reservations.

Signed-off-by: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com>

---
 drivers/iommu/dma-iommu.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

-- 
1.9.1


--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Robin Murphy Dec. 11, 2017, 2:54 p.m. | #1
On 29/11/17 14:14, Shameer Kolothum wrote:
> Modified iommu_dma_get_resv_regions() to include GICv3 ITS

> region on ACPI based ARM platfiorms which may require HW MSI

> reservations.


Assuming this builds correctly for all the various combinations of 
CONFIG_ACPI and CONFIG_ACPI_IORT,

Reviewed-by: Robin Murphy <robin.murphy@arm.com>


> Signed-off-by: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com>

> ---

>   drivers/iommu/dma-iommu.c | 8 +++++++-

>   1 file changed, 7 insertions(+), 1 deletion(-)

> 

> diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c

> index 25914d3..f05f3cf 100644

> --- a/drivers/iommu/dma-iommu.c

> +++ b/drivers/iommu/dma-iommu.c

> @@ -19,6 +19,7 @@

>    * along with this program.  If not, see <http://www.gnu.org/licenses/>.

>    */

>   

> +#include <linux/acpi_iort.h>

>   #include <linux/device.h>

>   #include <linux/dma-iommu.h>

>   #include <linux/gfp.h>

> @@ -167,13 +168,18 @@ void iommu_put_dma_cookie(struct iommu_domain *domain)

>    *

>    * IOMMU drivers can use this to implement their .get_resv_regions callback

>    * for general non-IOMMU-specific reservations. Currently, this covers host

> - * bridge windows for PCI devices.

> + * bridge windows for PCI devices and GICv3 ITS region reservation on ACPI

> + * based ARM platforms that may require HW MSI reservation.

>    */

>   void iommu_dma_get_resv_regions(struct device *dev, struct list_head *list)

>   {

>   	struct pci_host_bridge *bridge;

>   	struct resource_entry *window;

>   

> +	if (!is_of_node(dev->iommu_fwspec->iommu_fwnode) &&

> +		iort_iommu_msi_get_resv_regions(dev, list) < 0)

> +		return;

> +

>   	if (!dev_is_pci(dev))

>   		return;

>   

> 

--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c
index 25914d3..f05f3cf 100644
--- a/drivers/iommu/dma-iommu.c
+++ b/drivers/iommu/dma-iommu.c
@@ -19,6 +19,7 @@ 
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <linux/acpi_iort.h>
 #include <linux/device.h>
 #include <linux/dma-iommu.h>
 #include <linux/gfp.h>
@@ -167,13 +168,18 @@  void iommu_put_dma_cookie(struct iommu_domain *domain)
  *
  * IOMMU drivers can use this to implement their .get_resv_regions callback
  * for general non-IOMMU-specific reservations. Currently, this covers host
- * bridge windows for PCI devices.
+ * bridge windows for PCI devices and GICv3 ITS region reservation on ACPI
+ * based ARM platforms that may require HW MSI reservation.
  */
 void iommu_dma_get_resv_regions(struct device *dev, struct list_head *list)
 {
 	struct pci_host_bridge *bridge;
 	struct resource_entry *window;
 
+	if (!is_of_node(dev->iommu_fwspec->iommu_fwnode) &&
+		iort_iommu_msi_get_resv_regions(dev, list) < 0)
+		return;
+
 	if (!dev_is_pci(dev))
 		return;