]> Pileus Git - ~andy/linux/blobdiff - arch/arm/mach-omap2/prm_common.c
Merge tag 'virtio-next-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[~andy/linux] / arch / arm / mach-omap2 / prm_common.c
index 945b4ad6ab84c4605ee7d4cdcdd1fac512035824..228b850e632f6be77894b9d75a7162a105fd6889 100644 (file)
 #include <linux/interrupt.h>
 #include <linux/slab.h>
 
-#include <plat/prcm.h>
-
 #include "prm2xxx_3xxx.h"
 #include "prm2xxx.h"
 #include "prm3xxx.h"
 #include "prm44xx.h"
+#include "common.h"
 
 /*
  * OMAP_PRCM_MAX_NR_PENDING_REG: maximum number of PRM_IRQ*_MPU regs
@@ -54,6 +53,9 @@ static struct irq_chip_generic **prcm_irq_chips;
  */
 static struct omap_prcm_irq_setup *prcm_irq_setup;
 
+/* prm_base: base virtual address of the PRM IP block */
+void __iomem *prm_base;
+
 /*
  * prm_ll_data: function pointers to SoC-specific implementations of
  * common PRM functions
@@ -327,6 +329,17 @@ err:
        return -ENOMEM;
 }
 
+/**
+ * omap2_set_globals_prm - set the PRM base address (for early use)
+ * @prm: PRM base virtual address
+ *
+ * XXX Will be replaced when the PRM/CM drivers are completed.
+ */
+void __init omap2_set_globals_prm(void __iomem *prm)
+{
+       prm_base = prm;
+}
+
 /**
  * prm_read_reset_sources - return the sources of the SoC's last reset
  *
@@ -351,6 +364,51 @@ u32 prm_read_reset_sources(void)
        return ret;
 }
 
+/**
+ * prm_was_any_context_lost_old - was device context lost? (old API)
+ * @part: PRM partition ID (e.g., OMAP4430_PRM_PARTITION)
+ * @inst: PRM instance offset (e.g., OMAP4430_PRM_MPU_INST)
+ * @idx: CONTEXT register offset
+ *
+ * Return 1 if any bits were set in the *_CONTEXT_* register
+ * identified by (@part, @inst, @idx), which means that some context
+ * was lost for that module; otherwise, return 0.  XXX Deprecated;
+ * callers need to use a less-SoC-dependent way to identify hardware
+ * IP blocks.
+ */
+bool prm_was_any_context_lost_old(u8 part, s16 inst, u16 idx)
+{
+       bool ret = true;
+
+       if (prm_ll_data->was_any_context_lost_old)
+               ret = prm_ll_data->was_any_context_lost_old(part, inst, idx);
+       else
+               WARN_ONCE(1, "prm: %s: no mapping function defined\n",
+                         __func__);
+
+       return ret;
+}
+
+/**
+ * prm_clear_context_lost_flags_old - clear context loss flags (old API)
+ * @part: PRM partition ID (e.g., OMAP4430_PRM_PARTITION)
+ * @inst: PRM instance offset (e.g., OMAP4430_PRM_MPU_INST)
+ * @idx: CONTEXT register offset
+ *
+ * Clear hardware context loss bits for the module identified by
+ * (@part, @inst, @idx).  No return value.  XXX Deprecated; callers
+ * need to use a less-SoC-dependent way to identify hardware IP
+ * blocks.
+ */
+void prm_clear_context_loss_flags_old(u8 part, s16 inst, u16 idx)
+{
+       if (prm_ll_data->clear_context_loss_flags_old)
+               prm_ll_data->clear_context_loss_flags_old(part, inst, idx);
+       else
+               WARN_ONCE(1, "prm: %s: no mapping function defined\n",
+                         __func__);
+}
+
 /**
  * prm_register - register per-SoC low-level data with the PRM
  * @pld: low-level per-SoC OMAP PRM data & function pointers to register