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

Commit 8a1c049a authored by Paul Mundt's avatar Paul Mundt
Browse files

Merge branch 'rmobile/dma' into rmobile-fixes-for-linus

parents fe437561 afe48049
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -509,7 +509,7 @@ enum { MSTP001,
       MSTP118, MSTP117, MSTP116, MSTP113,
       MSTP106, MSTP101, MSTP100,
       MSTP223,
       MSTP218, MSTP217, MSTP216,
       MSTP214, MSTP218, MSTP217, MSTP216,
       MSTP207, MSTP206, MSTP204, MSTP203, MSTP202, MSTP201, MSTP200,
       MSTP328, MSTP323, MSTP322, MSTP314, MSTP313, MSTP312,
       MSTP423, MSTP415, MSTP413, MSTP411, MSTP410, MSTP406, MSTP403, MSTP400,
@@ -538,6 +538,7 @@ static struct clk mstp_clks[MSTP_NR] = {
	[MSTP218] = MSTP(&div4_clks[DIV4_HP], SMSTPCR2, 18, 0), /* DMAC1 */
	[MSTP217] = MSTP(&div4_clks[DIV4_HP], SMSTPCR2, 17, 0), /* DMAC2 */
	[MSTP216] = MSTP(&div4_clks[DIV4_HP], SMSTPCR2, 16, 0), /* DMAC3 */
	[MSTP214] = MSTP(&div4_clks[DIV4_HP], SMSTPCR2, 14, 0), /* USBDMAC */
	[MSTP207] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR2, 7, 0), /* SCIFA5 */
	[MSTP206] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR2, 6, 0), /* SCIFB */
	[MSTP204] = MSTP(&div6_clks[DIV6_SUB], SMSTPCR2, 4, 0), /* SCIFA0 */
@@ -629,6 +630,8 @@ static struct clk_lookup lookups[] = {
	CLKDEV_DEV_ID("sh-dma-engine.0", &mstp_clks[MSTP218]), /* DMAC1 */
	CLKDEV_DEV_ID("sh-dma-engine.1", &mstp_clks[MSTP217]), /* DMAC2 */
	CLKDEV_DEV_ID("sh-dma-engine.2", &mstp_clks[MSTP216]), /* DMAC3 */
	CLKDEV_DEV_ID("sh-dma-engine.3", &mstp_clks[MSTP214]), /* USB-DMAC0 */
	CLKDEV_DEV_ID("sh-dma-engine.4", &mstp_clks[MSTP214]), /* USB-DMAC1 */
	CLKDEV_DEV_ID("sh-sci.5", &mstp_clks[MSTP207]), /* SCIFA5 */
	CLKDEV_DEV_ID("sh-sci.6", &mstp_clks[MSTP206]), /* SCIFB */
	CLKDEV_DEV_ID("sh-sci.0", &mstp_clks[MSTP204]), /* SCIFA0 */
+4 −0
Original line number Diff line number Diff line
@@ -459,6 +459,10 @@ enum {
	SHDMA_SLAVE_SDHI2_TX,
	SHDMA_SLAVE_MMCIF_RX,
	SHDMA_SLAVE_MMCIF_TX,
	SHDMA_SLAVE_USB0_TX,
	SHDMA_SLAVE_USB0_RX,
	SHDMA_SLAVE_USB1_TX,
	SHDMA_SLAVE_USB1_RX,
};

extern struct clk sh7372_extal1_clk;
+146 −0
Original line number Diff line number Diff line
@@ -602,6 +602,150 @@ static struct platform_device dma2_device = {
	},
};

/*
 * USB-DMAC
 */

unsigned int usbts_shift[] = {3, 4, 5};

enum {
	XMIT_SZ_8BYTE		= 0,
	XMIT_SZ_16BYTE		= 1,
	XMIT_SZ_32BYTE		= 2,
};

#define USBTS_INDEX2VAL(i) (((i) & 3) << 6)

static const struct sh_dmae_channel sh7372_usb_dmae_channels[] = {
	{
		.offset = 0,
	}, {
		.offset = 0x20,
	},
};

/* USB DMAC0 */
static const struct sh_dmae_slave_config sh7372_usb_dmae0_slaves[] = {
	{
		.slave_id	= SHDMA_SLAVE_USB0_TX,
		.chcr		= USBTS_INDEX2VAL(XMIT_SZ_8BYTE),
	}, {
		.slave_id	= SHDMA_SLAVE_USB0_RX,
		.chcr		= USBTS_INDEX2VAL(XMIT_SZ_8BYTE),
	},
};

static struct sh_dmae_pdata usb_dma0_platform_data = {
	.slave		= sh7372_usb_dmae0_slaves,
	.slave_num	= ARRAY_SIZE(sh7372_usb_dmae0_slaves),
	.channel	= sh7372_usb_dmae_channels,
	.channel_num	= ARRAY_SIZE(sh7372_usb_dmae_channels),
	.ts_low_shift	= 6,
	.ts_low_mask	= 0xc0,
	.ts_high_shift	= 0,
	.ts_high_mask	= 0,
	.ts_shift	= usbts_shift,
	.ts_shift_num	= ARRAY_SIZE(usbts_shift),
	.dmaor_init	= DMAOR_DME,
	.chcr_offset	= 0x14,
	.chcr_ie_bit	= 1 << 5,
	.dmaor_is_32bit	= 1,
	.needs_tend_set	= 1,
	.no_dmars	= 1,
};

static struct resource sh7372_usb_dmae0_resources[] = {
	{
		/* Channel registers and DMAOR */
		.start	= 0xe68a0020,
		.end	= 0xe68a0064 - 1,
		.flags	= IORESOURCE_MEM,
	},
	{
		/* VCR/SWR/DMICR */
		.start	= 0xe68a0000,
		.end	= 0xe68a0014 - 1,
		.flags	= IORESOURCE_MEM,
	},
	{
		/* IRQ for channels */
		.start	= evt2irq(0x0a00),
		.end	= evt2irq(0x0a00),
		.flags	= IORESOURCE_IRQ,
	},
};

static struct platform_device usb_dma0_device = {
	.name		= "sh-dma-engine",
	.id		= 3,
	.resource	= sh7372_usb_dmae0_resources,
	.num_resources	= ARRAY_SIZE(sh7372_usb_dmae0_resources),
	.dev		= {
		.platform_data	= &usb_dma0_platform_data,
	},
};

/* USB DMAC1 */
static const struct sh_dmae_slave_config sh7372_usb_dmae1_slaves[] = {
	{
		.slave_id	= SHDMA_SLAVE_USB1_TX,
		.chcr		= USBTS_INDEX2VAL(XMIT_SZ_8BYTE),
	}, {
		.slave_id	= SHDMA_SLAVE_USB1_RX,
		.chcr		= USBTS_INDEX2VAL(XMIT_SZ_8BYTE),
	},
};

static struct sh_dmae_pdata usb_dma1_platform_data = {
	.slave		= sh7372_usb_dmae1_slaves,
	.slave_num	= ARRAY_SIZE(sh7372_usb_dmae1_slaves),
	.channel	= sh7372_usb_dmae_channels,
	.channel_num	= ARRAY_SIZE(sh7372_usb_dmae_channels),
	.ts_low_shift	= 6,
	.ts_low_mask	= 0xc0,
	.ts_high_shift	= 0,
	.ts_high_mask	= 0,
	.ts_shift	= usbts_shift,
	.ts_shift_num	= ARRAY_SIZE(usbts_shift),
	.dmaor_init	= DMAOR_DME,
	.chcr_offset	= 0x14,
	.chcr_ie_bit	= 1 << 5,
	.dmaor_is_32bit	= 1,
	.needs_tend_set	= 1,
	.no_dmars	= 1,
};

static struct resource sh7372_usb_dmae1_resources[] = {
	{
		/* Channel registers and DMAOR */
		.start	= 0xe68c0020,
		.end	= 0xe68c0064 - 1,
		.flags	= IORESOURCE_MEM,
	},
	{
		/* VCR/SWR/DMICR */
		.start	= 0xe68c0000,
		.end	= 0xe68c0014 - 1,
		.flags	= IORESOURCE_MEM,
	},
	{
		/* IRQ for channels */
		.start	= evt2irq(0x1d00),
		.end	= evt2irq(0x1d00),
		.flags	= IORESOURCE_IRQ,
	},
};

static struct platform_device usb_dma1_device = {
	.name		= "sh-dma-engine",
	.id		= 4,
	.resource	= sh7372_usb_dmae1_resources,
	.num_resources	= ARRAY_SIZE(sh7372_usb_dmae1_resources),
	.dev		= {
		.platform_data	= &usb_dma1_platform_data,
	},
};

/* VPU */
static struct uio_info vpu_platform_data = {
	.name = "VPU5HG",
@@ -829,6 +973,8 @@ static struct platform_device *sh7372_late_devices[] __initdata = {
	&dma0_device,
	&dma1_device,
	&dma2_device,
	&usb_dma0_device,
	&usb_dma1_device,
	&vpu_device,
	&veu0_device,
	&veu1_device,