* __spi_alloc_controller - allocate an SPI master or slave controller
  * @dev: the controller, possibly using the platform_bus
  * @size: how much zeroed driver-private data to allocate; the pointer to this
- *     memory is in the driver_data field of the returned device,
- *     accessible with spi_controller_get_devdata().
+ *     memory is in the driver_data field of the returned device, accessible
+ *     with spi_controller_get_devdata(); the memory is cacheline aligned;
+ *     drivers granting DMA access to portions of their private data need to
+ *     round up @size using ALIGN(size, dma_get_cache_alignment()).
  * @slave: flag indicating whether to allocate an SPI master (false) or SPI
  *     slave (true) controller
  * Context: can sleep
                                              unsigned int size, bool slave)
 {
        struct spi_controller   *ctlr;
+       size_t ctlr_size = ALIGN(sizeof(*ctlr), dma_get_cache_alignment());
 
        if (!dev)
                return NULL;
 
-       ctlr = kzalloc(size + sizeof(*ctlr), GFP_KERNEL);
+       ctlr = kzalloc(size + ctlr_size, GFP_KERNEL);
        if (!ctlr)
                return NULL;
 
                ctlr->dev.class = &spi_master_class;
        ctlr->dev.parent = dev;
        pm_suspend_ignore_children(&ctlr->dev, true);
-       spi_controller_set_devdata(ctlr, &ctlr[1]);
+       spi_controller_set_devdata(ctlr, (void *)ctlr + ctlr_size);
 
        return ctlr;
 }