Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d90f351a authored by Linus Torvalds's avatar Linus Torvalds
Browse files
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
parents c1a198d9 238d1c60
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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 */
+4 −0
Original line number Diff line number Diff line
@@ -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 */
+23 −8
Original line number Diff line number Diff line
@@ -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)))
+17 −1
Original line number Diff line number Diff line
@@ -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);

+3 −1
Original line number Diff line number Diff line
@@ -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];
};

Loading