forked from Minki/linux
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/egtvedt/linux-avr32
Pull AVR32 updates from Hans-Christian Noren Egtvedt. * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/egtvedt/linux-avr32: mmc: atmel: get rid of struct mci_dma_data mmc: atmel-mci: restore dma on AVR32 avr32: wire up missing syscalls avr32: wire up accept4 syscall
This commit is contained in:
commit
d90f351a9b
@ -333,5 +333,9 @@
|
||||
#define __NR_memfd_create 318
|
||||
#define __NR_bpf 319
|
||||
#define __NR_execveat 320
|
||||
#define __NR_accept4 321
|
||||
#define __NR_userfaultfd 322
|
||||
#define __NR_membarrier 323
|
||||
#define __NR_mlock2 324
|
||||
|
||||
#endif /* _UAPI__ASM_AVR32_UNISTD_H */
|
||||
|
@ -334,4 +334,8 @@ sys_call_table:
|
||||
.long sys_memfd_create
|
||||
.long sys_bpf
|
||||
.long sys_execveat /* 320 */
|
||||
.long sys_accept4
|
||||
.long sys_userfaultfd
|
||||
.long sys_membarrier
|
||||
.long sys_mlock2
|
||||
.long sys_ni_syscall /* r8 is saturated at nr_syscalls */
|
||||
|
@ -17,7 +17,6 @@
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/usb/atmel_usba_udc.h>
|
||||
|
||||
#include <linux/platform_data/mmc-atmel-mci.h>
|
||||
#include <linux/atmel-mci.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
@ -1321,11 +1320,26 @@ static struct clk atmel_mci0_pclk = {
|
||||
.index = 9,
|
||||
};
|
||||
|
||||
static bool at32_mci_dma_filter(struct dma_chan *chan, void *pdata)
|
||||
{
|
||||
struct dw_dma_slave *sl = pdata;
|
||||
|
||||
if (!sl)
|
||||
return false;
|
||||
|
||||
if (sl->dma_dev == chan->device->dev) {
|
||||
chan->private = sl;
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
struct platform_device *__init
|
||||
at32_add_device_mci(unsigned int id, struct mci_platform_data *data)
|
||||
{
|
||||
struct platform_device *pdev;
|
||||
struct mci_dma_data *slave;
|
||||
struct dw_dma_slave *slave;
|
||||
u32 pioa_mask;
|
||||
u32 piob_mask;
|
||||
|
||||
@ -1344,17 +1358,18 @@ at32_add_device_mci(unsigned int id, struct mci_platform_data *data)
|
||||
ARRAY_SIZE(atmel_mci0_resource)))
|
||||
goto fail;
|
||||
|
||||
slave = kzalloc(sizeof(struct mci_dma_data), GFP_KERNEL);
|
||||
slave = kzalloc(sizeof(*slave), GFP_KERNEL);
|
||||
if (!slave)
|
||||
goto fail;
|
||||
|
||||
slave->sdata.dma_dev = &dw_dmac0_device.dev;
|
||||
slave->sdata.src_id = 0;
|
||||
slave->sdata.dst_id = 1;
|
||||
slave->sdata.src_master = 1;
|
||||
slave->sdata.dst_master = 0;
|
||||
slave->dma_dev = &dw_dmac0_device.dev;
|
||||
slave->src_id = 0;
|
||||
slave->dst_id = 1;
|
||||
slave->src_master = 1;
|
||||
slave->dst_master = 0;
|
||||
|
||||
data->dma_slave = slave;
|
||||
data->dma_filter = at32_mci_dma_filter;
|
||||
|
||||
if (platform_device_add_data(pdev, data,
|
||||
sizeof(struct mci_platform_data)))
|
||||
|
@ -29,7 +29,6 @@
|
||||
#include <linux/slab.h>
|
||||
#include <linux/stat.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/platform_data/mmc-atmel-mci.h>
|
||||
|
||||
#include <linux/mmc/host.h>
|
||||
#include <linux/mmc/sdio.h>
|
||||
@ -2439,6 +2438,23 @@ static int atmci_configure_dma(struct atmel_mci *host)
|
||||
{
|
||||
host->dma.chan = dma_request_slave_channel_reason(&host->pdev->dev,
|
||||
"rxtx");
|
||||
|
||||
if (PTR_ERR(host->dma.chan) == -ENODEV) {
|
||||
struct mci_platform_data *pdata = host->pdev->dev.platform_data;
|
||||
dma_cap_mask_t mask;
|
||||
|
||||
if (!pdata->dma_filter)
|
||||
return -ENODEV;
|
||||
|
||||
dma_cap_zero(mask);
|
||||
dma_cap_set(DMA_SLAVE, mask);
|
||||
|
||||
host->dma.chan = dma_request_channel(mask, pdata->dma_filter,
|
||||
pdata->dma_slave);
|
||||
if (!host->dma.chan)
|
||||
host->dma.chan = ERR_PTR(-ENODEV);
|
||||
}
|
||||
|
||||
if (IS_ERR(host->dma.chan))
|
||||
return PTR_ERR(host->dma.chan);
|
||||
|
||||
|
@ -2,6 +2,7 @@
|
||||
#define __LINUX_ATMEL_MCI_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/dmaengine.h>
|
||||
|
||||
#define ATMCI_MAX_NR_SLOTS 2
|
||||
|
||||
@ -36,7 +37,8 @@ struct mci_slot_pdata {
|
||||
* @slot: Per-slot configuration data.
|
||||
*/
|
||||
struct mci_platform_data {
|
||||
struct mci_dma_data *dma_slave;
|
||||
void *dma_slave;
|
||||
dma_filter_fn dma_filter;
|
||||
struct mci_slot_pdata slot[ATMCI_MAX_NR_SLOTS];
|
||||
};
|
||||
|
||||
|
@ -1,22 +0,0 @@
|
||||
#ifndef __MMC_ATMEL_MCI_H
|
||||
#define __MMC_ATMEL_MCI_H
|
||||
|
||||
#include <linux/platform_data/dma-atmel.h>
|
||||
#include <linux/platform_data/dma-dw.h>
|
||||
|
||||
/**
|
||||
* struct mci_dma_data - DMA data for MCI interface
|
||||
*/
|
||||
struct mci_dma_data {
|
||||
#ifdef CONFIG_ARM
|
||||
struct at_dma_slave sdata;
|
||||
#else
|
||||
struct dw_dma_slave sdata;
|
||||
#endif
|
||||
};
|
||||
|
||||
/* accessor macros */
|
||||
#define slave_data_ptr(s) (&(s)->sdata)
|
||||
#define find_slave_dev(s) ((s)->sdata.dma_dev)
|
||||
|
||||
#endif /* __MMC_ATMEL_MCI_H */
|
Loading…
Reference in New Issue
Block a user