F: drivers/media/rc/meson-ir.c
N: meson[x68]
+ ARM/Annapurna Labs ALPINE ARCHITECTURE
+ M: Tsahee Zidenberg <tsahee@annapurnalabs.com>
+ S: Maintained
+ F: arch/arm/mach-alpine/
+
ARM/ATMEL AT91RM9200 AND AT91SAM ARM ARCHITECTURES
- - -M: Andrew Victor <linux@maxim.org.za>
M: Nicolas Ferre <nicolas.ferre@atmel.com>
+ + +M: Alexandre Belloni <alexandre.belloni@free-electrons.com>
M: Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com>
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
- - -W: http://maxim.org.za/at91_26.html
W: http://www.linux4sam.org
S: Supported
F: arch/arm/mach-at91/
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
S: Maintained
F: arch/arm/mach-mvebu/
- F: drivers/rtc/armada38x-rtc
+ F: drivers/rtc/rtc-armada38x.c
++ + +F: arch/arm/boot/dts/armada*
++ + +F: arch/arm/boot/dts/kirkwood*
++ + +
ARM/Marvell Berlin SoC support
M: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
F: drivers/net/ethernet/broadcom/bnx2x/
BROADCOM BCM281XX/BCM11XXX/BCM216XX ARM ARCHITECTURE
- - -M: Christian Daudt <bcm@fixthebug.org>
- M: Matt Porter <mporter@linaro.org>
M: Florian Fainelli <f.fainelli@gmail.com>
+ + +M: Ray Jui <rjui@broadcom.com>
+ + +M: Scott Branden <sbranden@broadcom.com>
L: bcm-kernel-feedback-list@broadcom.com
T: git git://github.com/broadcom/mach-bcm
S: Maintained
L: linux-rdma@vger.kernel.org
W: http://www.openfabrics.org/
Q: http://patchwork.kernel.org/project/linux-rdma/list/
- - -T: git git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git
- T: git git://github.com/dledford/linux.git
++ + +T: git git://git.kernel.org/pub/scm/linux/kernel/git/dledford/rdma.git
S: Supported
F: Documentation/infiniband/
F: drivers/infiniband/
F: drivers/pci/host/pci-exynos.c
PCI DRIVER FOR SYNOPSIS DESIGNWARE
- M: Mohit Kumar <mohit.kumar@st.com>
-- - -M: Jingoo Han <jg1.han@samsung.com>
++ + +M: Jingoo Han <jingoohan1@gmail.com>
+++ +++M: Pratyush Anand <pratyush.anand@gmail.com>
L: linux-pci@vger.kernel.org
S: Maintained
F: drivers/pci/host/*designware*
F: drivers/pci/host/pci-host-generic.c
PCIE DRIVER FOR ST SPEAR13XX
- M: Mohit Kumar <mohit.kumar@st.com>
+++ +++M: Pratyush Anand <pratyush.anand@gmail.com>
L: linux-pci@vger.kernel.org
--- --S: Orphan
+++ ++S: Maintained
F: drivers/pci/host/*spear*
PCMCIA SUBSYSTEM
F: drivers/vhost/
F: include/uapi/linux/vhost.h
- VIA RHINE NETWORK DRIVER
- M: Roger Luethi <rl@hellgate.ch>
+ VIRTIO INPUT DRIVER
+ M: Gerd Hoffmann <kraxel@redhat.com>
S: Maintained
--- --M: Roger Luethi <rl@hellgate.ch>
--- --S: Maintained
+ F: drivers/virtio/virtio_input.c
+ F: include/uapi/linux/virtio_input.h
+
+ VIA RHINE NETWORK DRIVER
+++ +++S: Orphan
F: drivers/net/ethernet/via/via-rhine.c
VIA SD/MMC CARD CONTROLLER DRIVER
return 0;
}
- static int amd_iommu_domain_init(struct iommu_domain *dom)
- {
- struct protection_domain *domain;
-
- domain = protection_domain_alloc();
- if (!domain)
- goto out_free;
- domain->mode = PAGE_MODE_3_LEVEL;
- domain->pt_root = (void *)get_zeroed_page(GFP_KERNEL);
- if (!domain->pt_root)
- goto out_free;
+ static struct iommu_domain *amd_iommu_domain_alloc(unsigned type)
+ {
+ struct protection_domain *pdomain;
+++++ + struct dma_ops_domain *dma_domain;
---- - /* We only support unmanaged domains for now */
---- - if (type != IOMMU_DOMAIN_UNMANAGED)
---- - return NULL;
---- -
---- - pdomain = protection_domain_alloc();
---- - if (!pdomain)
---- - goto out_free;
- domain->iommu_domain = dom;
+++++ + switch (type) {
+++++ + case IOMMU_DOMAIN_UNMANAGED:
+++++ + pdomain = protection_domain_alloc();
+++++ + if (!pdomain)
+++++ + return NULL;
---- - pdomain->mode = PAGE_MODE_3_LEVEL;
---- - pdomain->pt_root = (void *)get_zeroed_page(GFP_KERNEL);
---- - if (!pdomain->pt_root)
---- - goto out_free;
- dom->priv = domain;
+++++ + pdomain->mode = PAGE_MODE_3_LEVEL;
+++++ + pdomain->pt_root = (void *)get_zeroed_page(GFP_KERNEL);
+++++ + if (!pdomain->pt_root) {
+++++ + protection_domain_free(pdomain);
+++++ + return NULL;
+++++ + }
---- - pdomain->domain.geometry.aperture_start = 0;
---- - pdomain->domain.geometry.aperture_end = ~0ULL;
---- - pdomain->domain.geometry.force_aperture = true;
- dom->geometry.aperture_start = 0;
- dom->geometry.aperture_end = ~0ULL;
- dom->geometry.force_aperture = true;
+++++ + pdomain->domain.geometry.aperture_start = 0;
+++++ + pdomain->domain.geometry.aperture_end = ~0ULL;
+++++ + pdomain->domain.geometry.force_aperture = true;
---- - return &pdomain->domain;
- return 0;
+++++ + break;
+++++ + case IOMMU_DOMAIN_DMA:
+++++ + dma_domain = dma_ops_domain_alloc();
+++++ + if (!dma_domain) {
+++++ + pr_err("AMD-Vi: Failed to allocate\n");
+++++ + return NULL;
+++++ + }
+++++ + pdomain = &dma_domain->domain;
+++++ + break;
+++++ + case IOMMU_DOMAIN_IDENTITY:
+++++ + pdomain = protection_domain_alloc();
+++++ + if (!pdomain)
+++++ + return NULL;
----- -out_free:
---- - protection_domain_free(pdomain);
- protection_domain_free(domain);
+++++ + pdomain->mode = PAGE_MODE_NONE;
+++++ + break;
+++++ + default:
+++++ + return NULL;
+++++ + }
---- - return NULL;
- return -ENOMEM;
+++++ + return &pdomain->domain;
}
- static void amd_iommu_domain_destroy(struct iommu_domain *dom)
+ static void amd_iommu_domain_free(struct iommu_domain *dom)
{
- struct protection_domain *domain = dom->priv;
+ struct protection_domain *domain;
- if (!domain)
+ if (!dom)
return;
+ domain = to_pdomain(dom);
+
if (domain->dev_cnt > 0)
cleanup_domain(domain);
return false;
}
+++++ +static void amd_iommu_get_dm_regions(struct device *dev,
+++++ + struct list_head *head)
+++++ +{
+++++ + struct unity_map_entry *entry;
+++++ + u16 devid;
+++++ +
+++++ + devid = get_device_id(dev);
+++++ +
+++++ + list_for_each_entry(entry, &amd_iommu_unity_map, list) {
+++++ + struct iommu_dm_region *region;
+++++ +
+++++ + if (devid < entry->devid_start || devid > entry->devid_end)
+++++ + continue;
+++++ +
+++++ + region = kzalloc(sizeof(*region), GFP_KERNEL);
+++++ + if (!region) {
+++++ + pr_err("Out of memory allocating dm-regions for %s\n",
+++++ + dev_name(dev));
+++++ + return;
+++++ + }
+++++ +
+++++ + region->start = entry->address_start;
+++++ + region->length = entry->address_end - entry->address_start;
+++++ + if (entry->prot & IOMMU_PROT_IR)
+++++ + region->prot |= IOMMU_READ;
+++++ + if (entry->prot & IOMMU_PROT_IW)
+++++ + region->prot |= IOMMU_WRITE;
+++++ +
+++++ + list_add_tail(®ion->list, head);
+++++ + }
+++++ +}
+++++ +
+++++ +static void amd_iommu_put_dm_regions(struct device *dev,
+++++ + struct list_head *head)
+++++ +{
+++++ + struct iommu_dm_region *entry, *next;
+++++ +
+++++ + list_for_each_entry_safe(entry, next, head, list)
+++++ + kfree(entry);
+++++ +}
+++++ +
static const struct iommu_ops amd_iommu_ops = {
.capable = amd_iommu_capable,
- .domain_init = amd_iommu_domain_init,
- .domain_destroy = amd_iommu_domain_destroy,
+ .domain_alloc = amd_iommu_domain_alloc,
+ .domain_free = amd_iommu_domain_free,
.attach_dev = amd_iommu_attach_device,
.detach_dev = amd_iommu_detach_device,
.map = amd_iommu_map,
}
EXPORT_SYMBOL_GPL(iommu_set_fault_handler);
----- -struct iommu_domain *iommu_domain_alloc(struct bus_type *bus)
+++++ +static struct iommu_domain *__iommu_domain_alloc(struct bus_type *bus,
+++++ + unsigned type)
{
struct iommu_domain *domain;
- int ret;
if (bus == NULL || bus->iommu_ops == NULL)
return NULL;
---- - domain = bus->iommu_ops->domain_alloc(IOMMU_DOMAIN_UNMANAGED);
- domain = kzalloc(sizeof(*domain), GFP_KERNEL);
+++++ + domain = bus->iommu_ops->domain_alloc(type);
if (!domain)
return NULL;
- domain->ops = bus->iommu_ops;
-
- ret = domain->ops->domain_init(domain);
- if (ret)
- goto out_free;
+ domain->ops = bus->iommu_ops;
---- - domain->type = IOMMU_DOMAIN_UNMANAGED;
+++++ + domain->type = type;
return domain;
- out_free:
- kfree(domain);
-
- return NULL;
+ }
++++ +
+++++ +struct iommu_domain *iommu_domain_alloc(struct bus_type *bus)
+++++ +{
+++++ + return __iommu_domain_alloc(bus, IOMMU_DOMAIN_UNMANAGED);
++++ +}
EXPORT_SYMBOL_GPL(iommu_domain_alloc);
void iommu_domain_free(struct iommu_domain *domain)