]> git.sur5r.net Git - u-boot/blobdiff - cpu/arm926ejs/davinci/psc.c
Merge branch 'master' into next
[u-boot] / cpu / arm926ejs / davinci / psc.c
index 5bb972f186f9a953584048eeefdad2151e2650d0..8273a7fae4e96273cb5cade22f53d5db40a1da41 100644 (file)
@@ -25,6 +25,7 @@
 
 #include <common.h>
 #include <asm/arch/hardware.h>
+#include <asm/io.h>
 
 /*
  * The PSC manages three inputs to a "module" which may be a peripheral or
 /* Works on Always On power domain only (no PD argument) */
 void lpsc_on(unsigned int id)
 {
-       dv_reg_p mdstat, mdctl;
+       dv_reg_p mdstat, mdctl, ptstat, ptcmd;
+#ifdef CONFIG_SOC_DA8XX
+       struct davinci_psc_regs *psc_regs;
+#endif
 
+#ifndef CONFIG_SOC_DA8XX
        if (id >= DAVINCI_LPSC_GEM)
                return;                 /* Don't work on DSP Power Domain */
 
        mdstat = REG_P(PSC_MDSTAT_BASE + (id * 4));
        mdctl = REG_P(PSC_MDCTL_BASE + (id * 4));
+       ptstat = REG_P(PSC_PTSTAT);
+       ptcmd = REG_P(PSC_PTCMD);
+#else
+       if (id < DAVINCI_LPSC_PSC1_BASE) {
+               if (id >= PSC_PSC0_MODULE_ID_CNT)
+                       return;
+               psc_regs = davinci_psc0_regs;
+               mdstat = &psc_regs->psc0.mdstat[id];
+               mdctl = &psc_regs->psc0.mdctl[id];
+       } else {
+               id -= DAVINCI_LPSC_PSC1_BASE;
+               if (id >= PSC_PSC1_MODULE_ID_CNT)
+                       return;
+               psc_regs = davinci_psc1_regs;
+               mdstat = &psc_regs->psc1.mdstat[id];
+               mdctl = &psc_regs->psc1.mdctl[id];
+       }
+       ptstat = &psc_regs->ptstat;
+       ptcmd = &psc_regs->ptcmd;
+#endif
 
-       while (REG(PSC_PTSTAT) & 0x01)
+       while (readl(ptstat) & 0x01)
                continue;
 
-       if ((*mdstat & 0x1f) == 0x03)
-               return;                 /* Already on and enabled */
+       if ((readl(mdstat) & 0x1f) == 0x03)
+               return; /* Already on and enabled */
 
-       *mdctl |= 0x03;
+       writel(readl(mdctl) | 0x03, mdctl);
 
        switch (id) {
 #ifdef CONFIG_SOC_DM644X
@@ -80,16 +105,16 @@ void lpsc_on(unsigned int id)
        case DAVINCI_LPSC_MEMSTICK:
        case DAVINCI_LPSC_McBSP:
        case DAVINCI_LPSC_GPIO:
-               *mdctl |= 0x200;
+               writel(readl(mdctl) | 0x200, mdctl);
                break;
 #endif
        }
 
-       REG(PSC_PTCMD) = 0x01;
+       writel(0x01, ptcmd);
 
-       while (REG(PSC_PTSTAT) & 0x03)
+       while (readl(ptstat) & 0x01)
                continue;
-       while ((*mdstat & 0x1f) != 0x03)        /* Probably an overkill... */
+       while ((readl(mdstat) & 0x1f) != 0x03)
                continue;
 }