2 * linux/arch/arm/mach-omap2/prcm.c
4 * OMAP 24xx Power Reset and Clock Management (PRCM) functions
6 * Copyright (C) 2005 Nokia Corporation
8 * Written by Tony Lindgren <tony.lindgren@nokia.com>
10 * Copyright (C) 2007 Texas Instruments, Inc.
11 * Rajendra Nayak <rnayak@ti.com>
13 * Some pieces of code Copyright (C) 2005 Texas Instruments, Inc.
14 * Upgraded with OMAP4 support by Abhijit Pagare <abhijitpagare@ti.com>
16 * This program is free software; you can redistribute it and/or modify
17 * it under the terms of the GNU General Public License version 2 as
18 * published by the Free Software Foundation.
21 #include <linux/kernel.h>
22 #include <linux/init.h>
23 #include <linux/clk.h>
25 #include <linux/delay.h>
26 #include <linux/export.h>
29 #include <plat/prcm.h>
33 #include "clock2xxx.h"
34 #include "cm2xxx_3xxx.h"
35 #include "prm2xxx_3xxx.h"
37 #include "prminst44xx.h"
38 #include "cminst44xx.h"
39 #include "prm-regbits-24xx.h"
40 #include "prm-regbits-44xx.h"
43 void __iomem *prm_base;
44 void __iomem *cm_base;
45 void __iomem *cm2_base;
46 void __iomem *prcm_mpu_base;
48 #define MAX_MODULE_ENABLE_WAIT 100000
51 * omap2_cm_wait_idlest - wait for IDLEST bit to indicate module readiness
52 * @reg: physical address of module IDLEST register
53 * @mask: value to mask against to determine if the module is active
54 * @idlest: idle state indicator (0 or 1) for the clock
55 * @name: name of the clock (for printk)
57 * Returns 1 if the module indicated readiness in time, or 0 if it
58 * failed to enable in roughly MAX_MODULE_ENABLE_WAIT microseconds.
60 * XXX This function is deprecated. It should be removed once the
61 * hwmod conversion is complete.
63 int omap2_cm_wait_idlest(void __iomem *reg, u32 mask, u8 idlest,
75 omap_test_timeout(((__raw_readl(reg) & mask) == ena),
76 MAX_MODULE_ENABLE_WAIT, i);
78 if (i < MAX_MODULE_ENABLE_WAIT)
79 pr_debug("cm: Module associated with clock %s ready after %d loops\n",
82 pr_err("cm: Module associated with clock %s didn't enable in %d tries\n",
83 name, MAX_MODULE_ENABLE_WAIT);
85 return (i < MAX_MODULE_ENABLE_WAIT) ? 1 : 0;
88 void __init omap2_set_globals_prcm(void __iomem *prm, void __iomem *cm,
89 void __iomem *cm2, void __iomem *prcm_mpu)
94 prcm_mpu_base = prcm_mpu;
96 if (cpu_is_omap44xx() || soc_is_omap54xx()) {
103 * Stubbed functions so that common files continue to build when
104 * custom builds are used
105 * XXX These are temporary and should be removed at the earliest possible
108 int __weak omap4_cminst_wait_module_idle(u8 part, u16 inst, s16 cdoffs,
114 void __weak omap4_cminst_module_enable(u8 mode, u8 part, u16 inst,
115 s16 cdoffs, u16 clkctrl_offs)
119 void __weak omap4_cminst_module_disable(u8 part, u16 inst, s16 cdoffs,