mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-24 04:34:08 +08:00
08dbd0f8ef
Based on 1 normalized pattern(s): this program is free software you can redistribute it and or modify it under the terms of the gnu general public license version 2 and only version 2 as published by the free software foundation this program is distributed in the hope that it will be useful but without any warranty without even the implied warranty of merchantability or fitness for a particular purpose see the gnu general public license for more details you should have received a copy of the gnu general public license along with this program if not write to the free software foundation inc 51 franklin street fifth floor boston ma 02110 1301 usa extracted by the scancode license scanner the SPDX license identifier GPL-2.0-only has been chosen to replace the boilerplate/reference in 94 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Allison Randal <allison@lohutok.net> Reviewed-by: Richard Fontana <rfontana@redhat.com> Reviewed-by: Alexios Zavras <alexios.zavras@intel.com> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190529141334.043630402@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
90 lines
2.7 KiB
C
90 lines
2.7 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/* Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved.
|
|
*/
|
|
|
|
#ifndef MSM_IOMMU_H
|
|
#define MSM_IOMMU_H
|
|
|
|
#include <linux/interrupt.h>
|
|
#include <linux/iommu.h>
|
|
#include <linux/clk.h>
|
|
|
|
/* Sharability attributes of MSM IOMMU mappings */
|
|
#define MSM_IOMMU_ATTR_NON_SH 0x0
|
|
#define MSM_IOMMU_ATTR_SH 0x4
|
|
|
|
/* Cacheability attributes of MSM IOMMU mappings */
|
|
#define MSM_IOMMU_ATTR_NONCACHED 0x0
|
|
#define MSM_IOMMU_ATTR_CACHED_WB_WA 0x1
|
|
#define MSM_IOMMU_ATTR_CACHED_WB_NWA 0x2
|
|
#define MSM_IOMMU_ATTR_CACHED_WT 0x3
|
|
|
|
/* Mask for the cache policy attribute */
|
|
#define MSM_IOMMU_CP_MASK 0x03
|
|
|
|
/* Maximum number of Machine IDs that we are allowing to be mapped to the same
|
|
* context bank. The number of MIDs mapped to the same CB does not affect
|
|
* performance, but there is a practical limit on how many distinct MIDs may
|
|
* be present. These mappings are typically determined at design time and are
|
|
* not expected to change at run time.
|
|
*/
|
|
#define MAX_NUM_MIDS 32
|
|
|
|
/* Maximum number of context banks that can be present in IOMMU */
|
|
#define IOMMU_MAX_CBS 128
|
|
|
|
/**
|
|
* struct msm_iommu_dev - a single IOMMU hardware instance
|
|
* ncb Number of context banks present on this IOMMU HW instance
|
|
* dev: IOMMU device
|
|
* irq: Interrupt number
|
|
* clk: The bus clock for this IOMMU hardware instance
|
|
* pclk: The clock for the IOMMU bus interconnect
|
|
* dev_node: list head in qcom_iommu_device_list
|
|
* dom_node: list head for domain
|
|
* ctx_list: list of 'struct msm_iommu_ctx_dev'
|
|
* context_map: Bitmap to track allocated context banks
|
|
*/
|
|
struct msm_iommu_dev {
|
|
void __iomem *base;
|
|
int ncb;
|
|
struct device *dev;
|
|
int irq;
|
|
struct clk *clk;
|
|
struct clk *pclk;
|
|
struct list_head dev_node;
|
|
struct list_head dom_node;
|
|
struct list_head ctx_list;
|
|
DECLARE_BITMAP(context_map, IOMMU_MAX_CBS);
|
|
|
|
struct iommu_device iommu;
|
|
};
|
|
|
|
/**
|
|
* struct msm_iommu_ctx_dev - an IOMMU context bank instance
|
|
* of_node node ptr of client device
|
|
* num Index of this context bank within the hardware
|
|
* mids List of Machine IDs that are to be mapped into this context
|
|
* bank, terminated by -1. The MID is a set of signals on the
|
|
* AXI bus that identifies the function associated with a specific
|
|
* memory request. (See ARM spec).
|
|
* num_mids Total number of mids
|
|
* node list head in ctx_list
|
|
*/
|
|
struct msm_iommu_ctx_dev {
|
|
struct device_node *of_node;
|
|
int num;
|
|
int mids[MAX_NUM_MIDS];
|
|
int num_mids;
|
|
struct list_head list;
|
|
};
|
|
|
|
/*
|
|
* Interrupt handler for the IOMMU context fault interrupt. Hooking the
|
|
* interrupt is not supported in the API yet, but this will print an error
|
|
* message and dump useful IOMMU registers.
|
|
*/
|
|
irqreturn_t msm_iommu_fault_handler(int irq, void *dev_id);
|
|
|
|
#endif
|