aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/amd_iommu_init.c
Commit message (Collapse)AuthorAge
* Merge branches 'amd-iommu/fixes' and 'dma-debug/fixes' into iommu/fixesJoerg Roedel2009-11-03
|\
| * x86/amd-iommu: Un__init function required on shutdownJoerg Roedel2009-10-28
| | | | | | | | | | | | | | | | | | The function iommu_feature_disable is required on system shutdown to disable the IOMMU but it is marked as __init. This may result in a panic if the memory is reused. This patch fixes this bug. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
| * x86/amd-iommu: Workaround for erratum 63Joerg Roedel2009-10-09
| | | | | | | | | | | | | | | | | | | | | | | | | | | | There is an erratum for IOMMU hardware which documents undefined behavior when forwarding SMI requests from peripherals and the DTE of that peripheral has a sysmgt value of 01b. This problem caused weird IO_PAGE_FAULTS in my case. This patch implements the suggested workaround for that erratum into the AMD IOMMU driver. The erratum is documented with number 63. Cc: stable@kernel.org Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
* | Merge branch 'amd-iommu/passthrough' into amd-iommu/2.6.32Joerg Roedel2009-09-03
|\ \ | | | | | | | | | | | | | | | Conflicts: arch/x86/kernel/amd_iommu.c arch/x86/kernel/amd_iommu_init.c
| * | x86/amd-iommu: Initialize passthrough mode when requestedJoerg Roedel2009-09-03
| |/ | | | | | | | | | | | | | | This patch enables the passthrough mode for AMD IOMMU by running the initialization function when iommu=pt is passed on the kernel command line. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
| |
| \
*-. \ Merge branches 'gart/fixes', 'amd-iommu/fixes+cleanups' and ↵Joerg Roedel2009-09-03
|\ \ \ | |_|/ |/| | | | | 'amd-iommu/fault-handling' into amd-iommu/2.6.32
| | * x86/amd-iommu: Add reset function for command buffersJoerg Roedel2009-09-03
| |/ |/| | | | | | | | | | | | | This patch factors parts of the command buffer initialization code into a seperate function which can be used to reset the command buffer later. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
| * x86/amd-iommu: Remove redundant 'IOMMU' stringJoerg Roedel2009-09-03
| | | | | | | | | | | | | | The 'IOMMU: ' prefix is not necessary because the DUMP_printk macro already prints its own prefix. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
| * x86/amd-iommu: replace "AMD IOMMU" by "AMD-Vi"Joerg Roedel2009-09-03
|/ | | | | | | This patch replaces the "AMD IOMMU" printk strings with the official name for the hardware: "AMD-Vi". Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
* amd-iommu: set evt_buf_size correctlyJoerg Roedel2009-07-02
| | | | | | | | The setting of this variable got lost during the suspend/resume implementation. But keeping this variable zero causes a divide-by-zero error in the interrupt handler. This patch fixes this. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
* amd-iommu: handle alias entries correctly in init codeJoerg Roedel2009-07-02
| | | | | | | | An alias entry in the ACPI table means that the device can send requests to the IOMMU with both device ids, its own and the alias. This is not handled properly in the ACPI init code. This patch fixes the issue. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
* amd-iommu: resume cleanupChris Wright2009-06-16
| | | | | | | | | | Now that enable_iommus() will call iommu_disable() for each iommu, the call to disable_iommus() during resume is redundant. Also, the order for an invalidation is to invalidate device table entries first, then domain translations. Signed-off-by: Chris Wright <chrisw@sous-sol.org> Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
* amd-iommu: set event buffer head and tail to 0 manuallyJoerg Roedel2009-06-15
| | | | | | | These registers may contain values from previous kernels. So reset them to known values before enable the event buffer again. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
* amd-iommu: disable cmd buffer and evt logging before reprogramming iommuChris Wright2009-06-15
| | | | | | | | | The IOMMU spec states that IOMMU behavior may be undefined when the IOMMU registers are rewritten while command or event buffer is enabled. Disable them in IOMMU disable path. Signed-off-by: Chris Wright <chrisw@sous-sol.org> Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
* amd-iommu: disable IOMMU hardware on shutdownJoerg Roedel2009-06-15
| | | | | | | When the IOMMU stays enabled the BIOS may not be able to finish the machine shutdown properly. So disable the hardware on shutdown. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
*---. Merge branches 'amd-iommu/fixes', 'amd-iommu/debug', ↵Joerg Roedel2009-05-28
|\ \ \ | | | | | | | | | | | | | | | | | | | | | | | | | | | | 'amd-iommu/suspend-resume' and 'amd-iommu/extended-allocator' into amd-iommu/2.6.31 Conflicts: arch/x86/kernel/amd_iommu.c arch/x86/kernel/amd_iommu_init.c
| | | * amd-iommu: remove amd_iommu_size kernel parameterJoerg Roedel2009-05-28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This parameter is not longer necessary when aperture increases dynamically. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
| | * | amd-iommu: implement suspend/resumeJoerg Roedel2009-05-28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch puts everything together and enables suspend/resume support in the AMD IOMMU driver. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
| | * | amd_iommu: un __init functions required for suspend/resumeJoerg Roedel2009-05-28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch makes sure that no function required for suspend/resume of AMD IOMMU driver is thrown away after boot. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
| | * | amd-iommu: add function to disable all iommusJoerg Roedel2009-05-28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This function is required for suspend/resume support with AMD IOMMU enabled. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
| | * | amd-iommu: remove support for msi-xJoerg Roedel2009-05-28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Current hardware uses msi instead of msi-x so this code it not necessary and can not be tested. The best thing is to drop this code. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
| | * | amd-iommu: drop pointless iommu-loop in msi setup codeJoerg Roedel2009-05-28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | It is not necessary to loop again over all IOMMUs in this code. So drop the loop. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
| | * | amd-iommu: consolidate hardware initialization to one functionJoerg Roedel2009-05-28
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch restructures the AMD IOMMU initialization code to initialize all hardware registers with one single function call. This is helpful for suspend/resume support. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
| | * | amd-iommu: introduce for_each_iommu* macrosJoerg Roedel2009-05-28
| | |/ | | | | | | | | | | | | | | | | | | | | | This patch introduces the for_each_iommu and for_each_iommu_safe macros to simplify the developers life when having to iterate over all AMD IOMMUs in the system. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
| * | amd-iommu: disable device isolation with CONFIG_IOMMU_STRESSJoerg Roedel2009-05-28
| | | | | | | | | | | | | | | | | | | | | With device isolation disabled we can test better for race conditions in dma_ops related code. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
| * | amd-iommu: print ivmd information to dmesg when requestedJoerg Roedel2009-05-28
| | | | | | | | | | | | | | | | | | | | | | | | Add information about device memory mapping requirements for the IOMMU as described in the IVRS ACPI table to the kernel log if amd_iommu_dump was specified on the kernel command line. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
| * | amd-iommu: print ivhd information to dmesg when requestedJoerg Roedel2009-05-28
| | | | | | | | | | | | | | | | | | | | | | | | Add information about devices belonging to an IOMMU as described in the IVRS ACPI table to the kernel log if amd_iommu_dump was specified on the kernel command line. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
| * | amd-iommu: add dump for iommus described in ivrs tableJoerg Roedel2009-05-28
| | | | | | | | | | | | | | | | | | | | | | | | Add information about IOMMU devices described in the IVRS ACPI table to the kernel log if amd_iommu_dump was specified on the kernel command line. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
| * | amd-iommu: add amd_iommu_dump parameterJoerg Roedel2009-05-28
| |/ | | | | | | | | | | | | | | This kernel parameter will be useful to get some AMD IOMMU related information in dmesg that is not necessary for the default user but may be helpful in debug situations. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
* | amd-iommu: make sure only ivmd entries are parsedJoerg Roedel2009-05-28
| | | | | | | | | | | | | | | | | | The bug never triggered. But it should be fixed to protect against broken ACPI tables in the future. [ Impact: protect against broken ivrs acpi table ] Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
* | amd-iommu: fix the handling of device aliases in the AMD IOMMU driver.Neil Turton2009-05-28
| | | | | | | | | | | | | | | | | | | | | | | | The devid parameter to set_dev_entry_from_acpi is the requester ID rather than the device ID since it is used to index the IOMMU device table. The handling of IVHD_DEV_ALIAS used to pass the device ID. This patch fixes it to pass the requester ID. [ Impact: fix setting the wrong req-id in acpi-table parsing ] Signed-off-by: Neil Turton <nturton@solarflare.com> Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
* | amd-iommu: fix an off-by-one error in the AMD IOMMU driver.Neil Turton2009-05-28
|/ | | | | | | | | | | | | The variable amd_iommu_last_bdf holds the maximum bdf of any device controlled by an IOMMU, so the number of device entries needed is amd_iommu_last_bdf+1. The function tbl_size used amd_iommu_last_bdf instead. This would be a problem if the last device were a large enough power of 2. [ Impact: fix amd_iommu_last_bdf off-by-one error ] Signed-off-by: Neil Turton <nturton@solarflare.com> Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
* amd-iommu: fix iommu flag masksJoerg Roedel2009-05-04
| | | | | | | | | | The feature bits should be set via bitmasks, not via feature IDs. [ Impact: fix feature enabling in newer IOMMU versions ] Signed-off-by: Joerg Roedel <joerg.roedel@amd.com> LKML-Reference: <20090504102028.GA30307@amd.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
* Merge branch 'for-linus' of ↵Linus Torvalds2009-01-03
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | git://git.kernel.org/pub/scm/linux/kernel/git/joro/linux-2.6-iommu * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/joro/linux-2.6-iommu: (89 commits) AMD IOMMU: remove now unnecessary #ifdefs AMD IOMMU: prealloc_protection_domains should be static kvm/iommu: fix compile warning AMD IOMMU: add statistics about total number of map requests AMD IOMMU: add statistics about allocated io memory AMD IOMMU: add stats counter for domain tlb flushes AMD IOMMU: add stats counter for single iommu domain tlb flushes AMD IOMMU: add stats counter for cross-page request AMD IOMMU: add stats counter for free_coherent requests AMD IOMMU: add stats counter for alloc_coherent requests AMD IOMMU: add stats counter for unmap_sg requests AMD IOMMU: add stats counter for map_sg requests AMD IOMMU: add stats counter for unmap_single requests AMD IOMMU: add stats counter for map_single requests AMD IOMMU: add stats counter for completion wait events AMD IOMMU: add init code for statistic collection AMD IOMMU: add necessary header defines for stats counting AMD IOMMU: add Kconfig entry for statistic collection code AMD IOMMU: use dev_name in iommu_enable function AMD IOMMU: use calc_devid in prealloc_protection_domains ...
| * AMD IOMMU: use dev_name in iommu_enable functionJoerg Roedel2009-01-03
| | | | | | | | | | | | Impact: cleanup Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
| * AMD IOMMU: convert amd_iommu_isolate to boolJoerg Roedel2009-01-03
| | | | | | | | | | | | Impact: cleanup Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
* | x86: amd_iommu_init.c: iommu_enable and iommu_enable_event_logging should be ↵Jaswinder Singh Rajput2008-12-30
|/ | | | | | | | | | | | | static Impact: cleanup, reduce kernel size a bit, avoid sparse warning Fixes sparse warning: arch/x86/kernel/amd_iommu_init.c:246:13: warning: symbol 'iommu_enable' was not declared. Should it be static? arch/x86/kernel/amd_iommu_init.c:259:13: warning: symbol 'iommu_enable_event_logging' was not declared. Should it be static? Signed-off-by: Jaswinder Singh Rajput <jaswinderrajput@gmail.com> Signed-off-by: H. Peter Anvin <hpa@zytor.com>
* Merge branch 'x86/iommu' into x86/coreIngo Molnar2008-12-23
|\
| * Merge branch 'x86/urgent' into x86/iommuIngo Molnar2008-12-01
| |\
| * | x86: move GART specific stuff from iommu.h to gart.hJoerg Roedel2008-11-28
| | | | | | | | | | | | | | | | | | | | | Impact: cleanup Signed-off-by: Joerg Roedel <joerg.roedel@amd.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
* | | AMD IOMMU: set cmd buffer pointers to zero manuallyJoerg Roedel2008-12-17
| | | | | | | | | | | | | | | | | | Impact: set cmd buffer head and tail pointers to zero in case nobody else did Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
* | | AMD IOMMU: allocate rlookup_table with __GFP_ZEROJoerg Roedel2008-12-16
| |/ |/| | | | | | | | | Impact: fix bug which can lead to panic in prealloc_protection_domains() Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
* | AMD IOMMU: fix fullflush comparison lengthJoerg Roedel2008-11-18
| | | | | | | | | | | | Impact: fix comparison length for 'fullflush' Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
* | AMD IOMMU: enable device isolation per defaultJoerg Roedel2008-11-18
| | | | | | | | | | | | | | | | | | | | | | Impact: makes device isolation the default for AMD IOMMU Some device drivers showed double-free bugs of DMA memory while testing them with AMD IOMMU. If all devices share the same protection domain this can lead to data corruption and data loss. Prevent this by putting each device into its own protection domain per default. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
* | AMD IOMMU: add parameter to disable device isolationJoerg Roedel2008-11-18
|/ | | | | | Impact: add a new AMD IOMMU kernel command line parameter Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
* amd_iommu: fix nasty bug that caused ILLEGAL_DEVICE_TABLE_ENTRY errorsAndreas Herrmann2008-10-18
| | | | | | | | | | | | | | | | | | | | | We are on 64-bit so better use u64 instead of u32 to deal with addresses: static void __init iommu_set_device_table(struct amd_iommu *iommu) { u64 entry; ... entry = virt_to_phys(amd_iommu_dev_table); ... (I am wondering why gcc 4.2.x did not warn about the assignment between u32 and unsigned long.) Cc: iommu@lists.linux-foundation.org Cc: stable@kernel.org Signed-off-by: Andreas Herrmann <andreas.herrmann3@amd.com> Signed-off-by: Joerg Roedel <joerg.roedel@amd.com> Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
* x86, amd-iommu: propagate PCI device enabling errorIngo Molnar2008-10-12
| | | | | | | | | | | propagate an error in enabling the PCI device. Also eliminates this warning: arch/x86/kernel/amd_iommu_init.c: In function ‘init_iommu_one’: arch/x86/kernel/amd_iommu_init.c:726: warning: ignoring return value of ‘pci_enable_device’, declared with attribute warn_unused_result Signed-off-by: Ingo Molnar <mingo@elte.hu>
* iommu: remove fullflush and nofullflush in IOMMU generic optionFUJITA Tomonori2008-09-22
| | | | | | | | | | | | | | | | | This patch against tip/x86/iommu virtually reverts 2842e5bf3115193f05dc9dac20f940e7abf44c1a. But just reverting the commit breaks AMD IOMMU so this patch also includes some fixes. The above commit adds new two options to x86 IOMMU generic kernel boot options, fullflush and nofullflush. But such change that affects all the IOMMUs needs more discussion (all IOMMU parties need the chance to discuss it): http://lkml.org/lkml/2008/9/19/106 Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> Acked-by: Joerg Roedel <joerg.roedel@amd.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
* AMD IOMMU: use cmd_buf_size when freeing the command bufferJoerg Roedel2008-09-19
| | | | | | | | | The command buffer release function uses the CMD_BUF_SIZE macro for get_order. Replace this with iommu->cmd_buf_size which is more reliable about the actual size of the buffer. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
* AMD IOMMU: calculate IVHD size with a functionJoerg Roedel2008-09-19
| | | | | | | | | The current calculation of the IVHD entry size is hard to read. So move this code to a seperate function to make it more clear what this calculation does. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>