123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- From f7e48669bb75f3b52e9f3ce1a5d885c49b7c4712 Mon Sep 17 00:00:00 2001
- From: Cristian Sovaiala <cristian.sovaiala@freescale.com>
- Date: Thu, 4 Jun 2015 18:27:20 +0300
- Subject: [PATCH 32/70] arm64: Add pdev_archdata for dmamask
- The dma_mask for a device structure is a pointer. This pointer
- needs to be set up before the dma mask can actually be set. Most
- frameworks in the kernel take care of setting this up properly but
- platform devices that don't follow a regular bus structure may not
- ever have this set. As a result, checks such as dma_capable will
- always return false on a raw platform device and dma_set_mask will
- always return -EIO. Fix this by adding a dma_mask in the
- platform_device archdata and setting it to be the dma_mask. Devices
- used in other frameworks can change this as needed.
- Signed-off-by: Laura Abbott <lauraa@codeaurora.org>
- ---
- arch/arm64/include/asm/device.h | 1 +
- arch/arm64/kernel/setup.c | 7 +++++++
- 2 files changed, 8 insertions(+)
- --- a/arch/arm64/include/asm/device.h
- +++ b/arch/arm64/include/asm/device.h
- @@ -25,6 +25,7 @@ struct dev_archdata {
- };
-
- struct pdev_archdata {
- + u64 dma_mask;
- };
-
- #endif
- --- a/arch/arm64/kernel/setup.c
- +++ b/arch/arm64/kernel/setup.c
- @@ -44,6 +44,7 @@
- #include <linux/of_platform.h>
- #include <linux/efi.h>
- #include <linux/psci.h>
- +#include <linux/dma-mapping.h>
-
- #include <asm/acpi.h>
- #include <asm/fixmap.h>
- @@ -381,3 +382,9 @@ static int __init topology_init(void)
- return 0;
- }
- subsys_initcall(topology_init);
- +
- +void arch_setup_pdev_archdata(struct platform_device *pdev)
- +{
- + pdev->archdata.dma_mask = DMA_BIT_MASK(32);
- + pdev->dev.dma_mask = &pdev->archdata.dma_mask;
- +}
|