Commit 20d897e4 authored by Russell King's avatar Russell King

DMA-API: dcdbas: update DMA mask handing

dcdbas was explicitly initializing DMA masks thusly:
	dcdbas_pdev->dev.coherent_dma_mask = DMA_BIT_MASK(32);
	dcdbas_pdev->dev.dma_mask = &dcdbas_pdev->dev.coherent_dma_mask;
which bypasses the architecture check.  Moreover, it is creating the
dcdbas_pdev device itself, and using the platform_device_register_full()
avoids some of this explicit initialization.

Convert the driver to use platform_device_register_full(), and as it
makes use of coherent DMA, also call dma_set_coherent_mask() to ensure
that the architecture gets to check the mask.
Tested-by: default avatarFengguang Wu <fengguang.wu@intel.com>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 94cb0e79
...@@ -545,12 +545,15 @@ static int dcdbas_probe(struct platform_device *dev) ...@@ -545,12 +545,15 @@ static int dcdbas_probe(struct platform_device *dev)
host_control_action = HC_ACTION_NONE; host_control_action = HC_ACTION_NONE;
host_control_smi_type = HC_SMITYPE_NONE; host_control_smi_type = HC_SMITYPE_NONE;
dcdbas_pdev = dev;
/* /*
* BIOS SMI calls require buffer addresses be in 32-bit address space. * BIOS SMI calls require buffer addresses be in 32-bit address space.
* This is done by setting the DMA mask below. * This is done by setting the DMA mask below.
*/ */
dcdbas_pdev->dev.coherent_dma_mask = DMA_BIT_MASK(32); error = dma_set_coherent_mask(&dcdbas_pdev->dev, DMA_BIT_MASK(32));
dcdbas_pdev->dev.dma_mask = &dcdbas_pdev->dev.coherent_dma_mask; if (error)
return error;
error = sysfs_create_group(&dev->dev.kobj, &dcdbas_attr_group); error = sysfs_create_group(&dev->dev.kobj, &dcdbas_attr_group);
if (error) if (error)
...@@ -581,6 +584,14 @@ static struct platform_driver dcdbas_driver = { ...@@ -581,6 +584,14 @@ static struct platform_driver dcdbas_driver = {
.remove = dcdbas_remove, .remove = dcdbas_remove,
}; };
static const struct platform_device_info dcdbas_dev_info __initdata = {
.name = DRIVER_NAME,
.id = -1,
.dma_mask = DMA_BIT_MASK(32),
};
static struct platform_device *dcdbas_pdev_reg;
/** /**
* dcdbas_init: initialize driver * dcdbas_init: initialize driver
*/ */
...@@ -592,20 +603,14 @@ static int __init dcdbas_init(void) ...@@ -592,20 +603,14 @@ static int __init dcdbas_init(void)
if (error) if (error)
return error; return error;
dcdbas_pdev = platform_device_alloc(DRIVER_NAME, -1); dcdbas_pdev_reg = platform_device_register_full(&dcdbas_dev_info);
if (!dcdbas_pdev) { if (IS_ERR(dcdbas_pdev_reg)) {
error = -ENOMEM; error = PTR_ERR(dcdbas_pdev_reg);
goto err_unregister_driver; goto err_unregister_driver;
} }
error = platform_device_add(dcdbas_pdev);
if (error)
goto err_free_device;
return 0; return 0;
err_free_device:
platform_device_put(dcdbas_pdev);
err_unregister_driver: err_unregister_driver:
platform_driver_unregister(&dcdbas_driver); platform_driver_unregister(&dcdbas_driver);
return error; return error;
...@@ -628,8 +633,9 @@ static void __exit dcdbas_exit(void) ...@@ -628,8 +633,9 @@ static void __exit dcdbas_exit(void)
* all sysfs attributes belonging to this module have been * all sysfs attributes belonging to this module have been
* released. * released.
*/ */
smi_data_buf_free(); if (dcdbas_pdev)
platform_device_unregister(dcdbas_pdev); smi_data_buf_free();
platform_device_unregister(dcdbas_pdev_reg);
platform_driver_unregister(&dcdbas_driver); platform_driver_unregister(&dcdbas_driver);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment