Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 172739
b: refs/heads/master
c: f2d1185
h: refs/heads/master
i:
  172737: e1dc872
  172735: 93974aa
v: v3
  • Loading branch information
Tero Kristo authored and Kevin Hilman committed Nov 11, 2009
1 parent 76e7978 commit 83c82ad
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 2f5939c3ec9440a9c3a0baf4d0e1b2cc043aad46
refs/heads/master: f2d1185824fd3ed631f3164daeff59d0b4e55d79
3 changes: 3 additions & 0 deletions trunk/arch/arm/mach-omap2/pm34xx.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
#include <plat/sdrc.h>
#include <plat/prcm.h>
#include <plat/gpmc.h>
#include <plat/dma.h>

#include <asm/tlbflush.h>

Expand Down Expand Up @@ -95,6 +96,7 @@ static void omap3_core_save_context(void)
omap3_gpmc_save_context();
/* Save the system control module context, padconf already save above*/
omap3_control_save_context();
omap_dma_global_context_save();
}

static void omap3_core_restore_context(void)
Expand All @@ -105,6 +107,7 @@ static void omap3_core_restore_context(void)
omap3_gpmc_restore_context();
/* Restore the interrupt controller context */
omap_intc_restore_context();
omap_dma_global_context_restore();
}

/*
Expand Down
39 changes: 39 additions & 0 deletions trunk/arch/arm/plat-omap/dma.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,12 @@ enum { DMA_CHAIN_STARTED, DMA_CHAIN_NOTSTARTED };

static int enable_1510_mode;

static struct omap_dma_global_context_registers {
u32 dma_irqenable_l0;
u32 dma_ocp_sysconfig;
u32 dma_gcr;
} omap_dma_global_context;

struct omap_dma_lch {
int next_lch;
int dev_id;
Expand Down Expand Up @@ -2341,6 +2347,39 @@ void omap_stop_lcd_dma(void)
}
EXPORT_SYMBOL(omap_stop_lcd_dma);

void omap_dma_global_context_save(void)
{
omap_dma_global_context.dma_irqenable_l0 =
dma_read(IRQENABLE_L0);
omap_dma_global_context.dma_ocp_sysconfig =
dma_read(OCP_SYSCONFIG);
omap_dma_global_context.dma_gcr = dma_read(GCR);
}

void omap_dma_global_context_restore(void)
{
dma_write(0x2, OCP_SYSCONFIG);
while (!__raw_readl(omap_dma_base + OMAP_DMA4_SYSSTATUS))
;
dma_write(omap_dma_global_context.dma_gcr, GCR);
dma_write(omap_dma_global_context.dma_ocp_sysconfig,
OCP_SYSCONFIG);
dma_write(omap_dma_global_context.dma_irqenable_l0,
IRQENABLE_L0);
}

void omap_dma_disable_irq(int lch)
{
u32 val;

if (cpu_class_is_omap2()) {
/* Disable interrupts */
val = dma_read(IRQENABLE_L0);
val &= ~(1 << lch);
dma_write(val, IRQENABLE_L0);
}
}

/*----------------------------------------------------------------------------*/

static int __init omap_init_dma(void)
Expand Down
5 changes: 5 additions & 0 deletions trunk/arch/arm/plat-omap/include/plat/dma.h
Original file line number Diff line number Diff line change
Expand Up @@ -633,6 +633,11 @@ extern void omap_set_dma_dst_endian_type(int lch, enum end_type etype);
extern void omap_set_dma_src_endian_type(int lch, enum end_type etype);
extern int omap_get_dma_index(int lch, int *ei, int *fi);

void omap_dma_global_context_save(void);
void omap_dma_global_context_restore(void);

extern void omap_dma_disable_irq(int lch);

/* Chaining APIs */
#ifndef CONFIG_ARCH_OMAP1
extern int omap_request_dma_chain(int dev_id, const char *dev_name,
Expand Down

0 comments on commit 83c82ad

Please sign in to comment.