diff options
Diffstat (limited to 'drivers/iommu')
| -rw-r--r-- | drivers/iommu/amd_iommu.c | 14 | ||||
| -rw-r--r-- | drivers/iommu/amd_iommu_init.c | 40 | ||||
| -rw-r--r-- | drivers/iommu/amd_iommu_types.h | 11 | ||||
| -rw-r--r-- | drivers/iommu/dmar.c | 3 | 
4 files changed, 30 insertions, 38 deletions
diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c index b287ca33833..830183737b0 100644 --- a/drivers/iommu/amd_iommu.c +++ b/drivers/iommu/amd_iommu.c @@ -173,7 +173,7 @@ static inline u16 get_device_id(struct device *dev)  {  	struct pci_dev *pdev = to_pci_dev(dev); -	return calc_devid(pdev->bus->number, pdev->devfn); +	return PCI_DEVID(pdev->bus->number, pdev->devfn);  }  static struct iommu_dev_data *get_dev_data(struct device *dev) @@ -649,26 +649,26 @@ retry:  	case EVENT_TYPE_ILL_DEV:  		printk("ILLEGAL_DEV_TABLE_ENTRY device=%02x:%02x.%x "  		       "address=0x%016llx flags=0x%04x]\n", -		       PCI_BUS(devid), PCI_SLOT(devid), PCI_FUNC(devid), +		       PCI_BUS_NUM(devid), PCI_SLOT(devid), PCI_FUNC(devid),  		       address, flags);  		dump_dte_entry(devid);  		break;  	case EVENT_TYPE_IO_FAULT:  		printk("IO_PAGE_FAULT device=%02x:%02x.%x "  		       "domain=0x%04x address=0x%016llx flags=0x%04x]\n", -		       PCI_BUS(devid), PCI_SLOT(devid), PCI_FUNC(devid), +		       PCI_BUS_NUM(devid), PCI_SLOT(devid), PCI_FUNC(devid),  		       domid, address, flags);  		break;  	case EVENT_TYPE_DEV_TAB_ERR:  		printk("DEV_TAB_HARDWARE_ERROR device=%02x:%02x.%x "  		       "address=0x%016llx flags=0x%04x]\n", -		       PCI_BUS(devid), PCI_SLOT(devid), PCI_FUNC(devid), +		       PCI_BUS_NUM(devid), PCI_SLOT(devid), PCI_FUNC(devid),  		       address, flags);  		break;  	case EVENT_TYPE_PAGE_TAB_ERR:  		printk("PAGE_TAB_HARDWARE_ERROR device=%02x:%02x.%x "  		       "domain=0x%04x address=0x%016llx flags=0x%04x]\n", -		       PCI_BUS(devid), PCI_SLOT(devid), PCI_FUNC(devid), +		       PCI_BUS_NUM(devid), PCI_SLOT(devid), PCI_FUNC(devid),  		       domid, address, flags);  		break;  	case EVENT_TYPE_ILL_CMD: @@ -682,13 +682,13 @@ retry:  	case EVENT_TYPE_IOTLB_INV_TO:  		printk("IOTLB_INV_TIMEOUT device=%02x:%02x.%x "  		       "address=0x%016llx]\n", -		       PCI_BUS(devid), PCI_SLOT(devid), PCI_FUNC(devid), +		       PCI_BUS_NUM(devid), PCI_SLOT(devid), PCI_FUNC(devid),  		       address);  		break;  	case EVENT_TYPE_INV_DEV_REQ:  		printk("INVALID_DEVICE_REQUEST device=%02x:%02x.%x "  		       "address=0x%016llx flags=0x%04x]\n", -		       PCI_BUS(devid), PCI_SLOT(devid), PCI_FUNC(devid), +		       PCI_BUS_NUM(devid), PCI_SLOT(devid), PCI_FUNC(devid),  		       address, flags);  		break;  	default: diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c index e3c2d74b768..2f46881256a 100644 --- a/drivers/iommu/amd_iommu_init.c +++ b/drivers/iommu/amd_iommu_init.c @@ -406,7 +406,7 @@ static int __init find_last_devid_on_pci(int bus, int dev, int fn, int cap_ptr)  	u32 cap;  	cap = read_pci_config(bus, dev, fn, cap_ptr+MMIO_RANGE_OFFSET); -	update_last_devid(calc_devid(MMIO_GET_BUS(cap), MMIO_GET_LD(cap))); +	update_last_devid(PCI_DEVID(MMIO_GET_BUS(cap), MMIO_GET_LD(cap)));  	return 0;  } @@ -423,7 +423,7 @@ static int __init find_last_devid_from_ivhd(struct ivhd_header *h)  	p += sizeof(*h);  	end += h->length; -	find_last_devid_on_pci(PCI_BUS(h->devid), +	find_last_devid_on_pci(PCI_BUS_NUM(h->devid),  			PCI_SLOT(h->devid),  			PCI_FUNC(h->devid),  			h->cap_ptr); @@ -784,10 +784,10 @@ static int __init init_iommu_from_acpi(struct amd_iommu *iommu,  			DUMP_printk("  DEV_ALL\t\t\t first devid: %02x:%02x.%x"  				    " last device %02x:%02x.%x flags: %02x\n", -				    PCI_BUS(iommu->first_device), +				    PCI_BUS_NUM(iommu->first_device),  				    PCI_SLOT(iommu->first_device),  				    PCI_FUNC(iommu->first_device), -				    PCI_BUS(iommu->last_device), +				    PCI_BUS_NUM(iommu->last_device),  				    PCI_SLOT(iommu->last_device),  				    PCI_FUNC(iommu->last_device),  				    e->flags); @@ -801,7 +801,7 @@ static int __init init_iommu_from_acpi(struct amd_iommu *iommu,  			DUMP_printk("  DEV_SELECT\t\t\t devid: %02x:%02x.%x "  				    "flags: %02x\n", -				    PCI_BUS(e->devid), +				    PCI_BUS_NUM(e->devid),  				    PCI_SLOT(e->devid),  				    PCI_FUNC(e->devid),  				    e->flags); @@ -813,7 +813,7 @@ static int __init init_iommu_from_acpi(struct amd_iommu *iommu,  			DUMP_printk("  DEV_SELECT_RANGE_START\t "  				    "devid: %02x:%02x.%x flags: %02x\n", -				    PCI_BUS(e->devid), +				    PCI_BUS_NUM(e->devid),  				    PCI_SLOT(e->devid),  				    PCI_FUNC(e->devid),  				    e->flags); @@ -827,11 +827,11 @@ static int __init init_iommu_from_acpi(struct amd_iommu *iommu,  			DUMP_printk("  DEV_ALIAS\t\t\t devid: %02x:%02x.%x "  				    "flags: %02x devid_to: %02x:%02x.%x\n", -				    PCI_BUS(e->devid), +				    PCI_BUS_NUM(e->devid),  				    PCI_SLOT(e->devid),  				    PCI_FUNC(e->devid),  				    e->flags, -				    PCI_BUS(e->ext >> 8), +				    PCI_BUS_NUM(e->ext >> 8),  				    PCI_SLOT(e->ext >> 8),  				    PCI_FUNC(e->ext >> 8)); @@ -846,11 +846,11 @@ static int __init init_iommu_from_acpi(struct amd_iommu *iommu,  			DUMP_printk("  DEV_ALIAS_RANGE\t\t "  				    "devid: %02x:%02x.%x flags: %02x "  				    "devid_to: %02x:%02x.%x\n", -				    PCI_BUS(e->devid), +				    PCI_BUS_NUM(e->devid),  				    PCI_SLOT(e->devid),  				    PCI_FUNC(e->devid),  				    e->flags, -				    PCI_BUS(e->ext >> 8), +				    PCI_BUS_NUM(e->ext >> 8),  				    PCI_SLOT(e->ext >> 8),  				    PCI_FUNC(e->ext >> 8)); @@ -864,7 +864,7 @@ static int __init init_iommu_from_acpi(struct amd_iommu *iommu,  			DUMP_printk("  DEV_EXT_SELECT\t\t devid: %02x:%02x.%x "  				    "flags: %02x ext: %08x\n", -				    PCI_BUS(e->devid), +				    PCI_BUS_NUM(e->devid),  				    PCI_SLOT(e->devid),  				    PCI_FUNC(e->devid),  				    e->flags, e->ext); @@ -877,7 +877,7 @@ static int __init init_iommu_from_acpi(struct amd_iommu *iommu,  			DUMP_printk("  DEV_EXT_SELECT_RANGE\t devid: "  				    "%02x:%02x.%x flags: %02x ext: %08x\n", -				    PCI_BUS(e->devid), +				    PCI_BUS_NUM(e->devid),  				    PCI_SLOT(e->devid),  				    PCI_FUNC(e->devid),  				    e->flags, e->ext); @@ -890,7 +890,7 @@ static int __init init_iommu_from_acpi(struct amd_iommu *iommu,  		case IVHD_DEV_RANGE_END:  			DUMP_printk("  DEV_RANGE_END\t\t devid: %02x:%02x.%x\n", -				    PCI_BUS(e->devid), +				    PCI_BUS_NUM(e->devid),  				    PCI_SLOT(e->devid),  				    PCI_FUNC(e->devid)); @@ -924,7 +924,7 @@ static int __init init_iommu_from_acpi(struct amd_iommu *iommu,  			DUMP_printk("  DEV_SPECIAL(%s[%d])\t\tdevid: %02x:%02x.%x\n",  				    var, (int)handle, -				    PCI_BUS(devid), +				    PCI_BUS_NUM(devid),  				    PCI_SLOT(devid),  				    PCI_FUNC(devid)); @@ -1086,7 +1086,7 @@ static int __init init_iommu_all(struct acpi_table_header *table)  			DUMP_printk("device: %02x:%02x.%01x cap: %04x "  				    "seg: %d flags: %01x info %04x\n", -				    PCI_BUS(h->devid), PCI_SLOT(h->devid), +				    PCI_BUS_NUM(h->devid), PCI_SLOT(h->devid),  				    PCI_FUNC(h->devid), h->cap_ptr,  				    h->pci_seg, h->flags, h->info);  			DUMP_printk("       mmio-addr: %016llx\n", @@ -1116,7 +1116,7 @@ static int iommu_init_pci(struct amd_iommu *iommu)  	int cap_ptr = iommu->cap_ptr;  	u32 range, misc, low, high; -	iommu->dev = pci_get_bus_and_slot(PCI_BUS(iommu->devid), +	iommu->dev = pci_get_bus_and_slot(PCI_BUS_NUM(iommu->devid),  					  iommu->devid & 0xff);  	if (!iommu->dev)  		return -ENODEV; @@ -1128,9 +1128,9 @@ static int iommu_init_pci(struct amd_iommu *iommu)  	pci_read_config_dword(iommu->dev, cap_ptr + MMIO_MISC_OFFSET,  			      &misc); -	iommu->first_device = calc_devid(MMIO_GET_BUS(range), +	iommu->first_device = PCI_DEVID(MMIO_GET_BUS(range),  					 MMIO_GET_FD(range)); -	iommu->last_device = calc_devid(MMIO_GET_BUS(range), +	iommu->last_device = PCI_DEVID(MMIO_GET_BUS(range),  					MMIO_GET_LD(range));  	if (!(iommu->cap & (1 << IOMMU_CAP_IOTLB))) @@ -1388,8 +1388,8 @@ static int __init init_unity_map_range(struct ivmd_header *m)  	DUMP_printk("%s devid_start: %02x:%02x.%x devid_end: %02x:%02x.%x"  		    " range_start: %016llx range_end: %016llx flags: %x\n", s, -		    PCI_BUS(e->devid_start), PCI_SLOT(e->devid_start), -		    PCI_FUNC(e->devid_start), PCI_BUS(e->devid_end), +		    PCI_BUS_NUM(e->devid_start), PCI_SLOT(e->devid_start), +		    PCI_FUNC(e->devid_start), PCI_BUS_NUM(e->devid_end),  		    PCI_SLOT(e->devid_end), PCI_FUNC(e->devid_end),  		    e->address_start, e->address_end, m->flags); diff --git a/drivers/iommu/amd_iommu_types.h b/drivers/iommu/amd_iommu_types.h index e38ab438bb3..ec36cf63e0c 100644 --- a/drivers/iommu/amd_iommu_types.h +++ b/drivers/iommu/amd_iommu_types.h @@ -24,6 +24,7 @@  #include <linux/mutex.h>  #include <linux/list.h>  #include <linux/spinlock.h> +#include <linux/pci.h>  /*   * Maximum number of IOMMUs supported @@ -315,9 +316,6 @@  #define MAX_DOMAIN_ID 65536 -/* FIXME: move this macro to <linux/pci.h> */ -#define PCI_BUS(x) (((x) >> 8) & 0xff) -  /* Protection domain flags */  #define PD_DMA_OPS_MASK		(1UL << 0) /* domain used for dma_ops */  #define PD_DEFAULT_MASK		(1UL << 1) /* domain is a default dma_ops @@ -703,13 +701,6 @@ extern int amd_iommu_max_glx_val;   */  extern void iommu_flush_all_caches(struct amd_iommu *iommu); -/* takes bus and device/function and returns the device id - * FIXME: should that be in generic PCI code? */ -static inline u16 calc_devid(u8 bus, u8 devfn) -{ -	return (((u16)bus) << 8) | devfn; -} -  static inline int get_ioapic_devid(int id)  {  	struct devid_map *entry; diff --git a/drivers/iommu/dmar.c b/drivers/iommu/dmar.c index e5cdaf87822..b8008f679bc 100644 --- a/drivers/iommu/dmar.c +++ b/drivers/iommu/dmar.c @@ -129,7 +129,8 @@ int __init dmar_parse_dev_scope(void *start, void *end, int *cnt,  		if (scope->entry_type == ACPI_DMAR_SCOPE_TYPE_ENDPOINT ||  		    scope->entry_type == ACPI_DMAR_SCOPE_TYPE_BRIDGE)  			(*cnt)++; -		else if (scope->entry_type != ACPI_DMAR_SCOPE_TYPE_IOAPIC) { +		else if (scope->entry_type != ACPI_DMAR_SCOPE_TYPE_IOAPIC && +			scope->entry_type != ACPI_DMAR_SCOPE_TYPE_HPET) {  			pr_warn("Unsupported device scope\n");  		}  		start += scope->length;  |