lkml.org 
[lkml]   [2013]   [Aug]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH RFC 44/51] DMA-API: dcdbas: update DMA mask handing
    Date
    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.

    Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
    ---
    drivers/firmware/dcdbas.c | 23 ++++++++++++-----------
    1 files changed, 12 insertions(+), 11 deletions(-)

    diff --git a/drivers/firmware/dcdbas.c b/drivers/firmware/dcdbas.c
    index 8e77c02..61969cd 100644
    --- a/drivers/firmware/dcdbas.c
    +++ b/drivers/firmware/dcdbas.c
    @@ -548,8 +548,9 @@ static int dcdbas_probe(struct platform_device *dev)
    * BIOS SMI calls require buffer addresses be in 32-bit address space.
    * This is done by setting the DMA mask below.
    */
    - dcdbas_pdev->dev.coherent_dma_mask = DMA_BIT_MASK(32);
    - dcdbas_pdev->dev.dma_mask = &dcdbas_pdev->dev.coherent_dma_mask;
    + error = dma_set_coherent_mask(&dcdbas_pdev->dev, DMA_BIT_MASK(32));
    + if (error)
    + return error;

    error = sysfs_create_group(&dev->dev.kobj, &dcdbas_attr_group);
    if (error)
    @@ -596,6 +597,12 @@ static struct platform_driver dcdbas_driver = {
    .remove = dcdbas_remove,
    };

    +static const struct platform_device_info dcdbas_dev_info __initdata = {
    + .name = DRIVER_NAME,
    + .id = -1,
    + .dma_mask = DMA_BIT_MASK(32),
    +};
    +
    /**
    * dcdbas_init: initialize driver
    */
    @@ -607,20 +614,14 @@ static int __init dcdbas_init(void)
    if (error)
    return error;

    - dcdbas_pdev = platform_device_alloc(DRIVER_NAME, -1);
    - if (!dcdbas_pdev) {
    - error = -ENOMEM;
    + dcdbas_pdev = platform_device_register_full(&dcdbas_dev_info);
    + if (IS_ERR(dcdbas_pdev)) {
    + error = PTR_ERR(dcdbas_pdev);
    goto err_unregister_driver;
    }

    - error = platform_device_add(dcdbas_pdev);
    - if (error)
    - goto err_free_device;
    -
    return 0;

    - err_free_device:
    - platform_device_put(dcdbas_pdev);
    err_unregister_driver:
    platform_driver_unregister(&dcdbas_driver);
    return error;
    --
    1.7.4.4


    \
     
     \ /
      Last update: 2013-08-02 01:01    [W:4.145 / U:0.052 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site