1d2912cb1SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 269d88a00SPaul Walmsley /* 359fb659bSPaul Walmsley * OMAP2+ Clock Management prototypes 469d88a00SPaul Walmsley * 5d9a16f9aSPaul Walmsley * Copyright (C) 2007-2009, 2012 Texas Instruments, Inc. 69b47267fSRajendra Nayak * Copyright (C) 2007-2009 Nokia Corporation 769d88a00SPaul Walmsley * 869d88a00SPaul Walmsley * Written by Paul Walmsley 969d88a00SPaul Walmsley */ 1059fb659bSPaul Walmsley #ifndef __ARCH_ASM_MACH_OMAP2_CM_H 1159fb659bSPaul Walmsley #define __ARCH_ASM_MACH_OMAP2_CM_H 1269d88a00SPaul Walmsley 13d9e6625cSBenoit Cousson /* 14d9e6625cSBenoit Cousson * MAX_MODULE_READY_TIME: max duration in microseconds to wait for the 15d9e6625cSBenoit Cousson * PRCM to request that a module exit the inactive state in the case of 16d9e6625cSBenoit Cousson * OMAP2 & 3. 17d9e6625cSBenoit Cousson * In the case of OMAP4 this is the max duration in microseconds for the 18d9e6625cSBenoit Cousson * module to reach the functionnal state from an inactive state. 19d9e6625cSBenoit Cousson */ 20d9e6625cSBenoit Cousson #define MAX_MODULE_READY_TIME 2000 21d9e6625cSBenoit Cousson 22d9a16f9aSPaul Walmsley # ifndef __ASSEMBLER__ 236c0afb50STero Kristo #include <linux/clk/ti.h> 2490129336STero Kristo 2590129336STero Kristo #include "prcm-common.h" 2690129336STero Kristo 2790129336STero Kristo extern struct omap_domain_base cm_base; 2890129336STero Kristo extern struct omap_domain_base cm2_base; 29d9a16f9aSPaul Walmsley # endif 30d9a16f9aSPaul Walmsley 31b8f15b7eSPaul Walmsley /* 32b8f15b7eSPaul Walmsley * MAX_MODULE_DISABLE_TIME: max duration in microseconds to wait for 33b8f15b7eSPaul Walmsley * the PRCM to request that a module enter the inactive state in the 34b8f15b7eSPaul Walmsley * case of OMAP2 & 3. In the case of OMAP4 this is the max duration 35b8f15b7eSPaul Walmsley * in microseconds for the module to reach the inactive state from 36b8f15b7eSPaul Walmsley * a functional state. 37b8f15b7eSPaul Walmsley * XXX FSUSB on OMAP4430 takes ~4ms to idle after reset during 38b8f15b7eSPaul Walmsley * kernel init. 39b8f15b7eSPaul Walmsley */ 40b8f15b7eSPaul Walmsley #define MAX_MODULE_DISABLE_TIME 5000 41b8f15b7eSPaul Walmsley 4221325b25SPaul Walmsley # ifndef __ASSEMBLER__ 4321325b25SPaul Walmsley 4421325b25SPaul Walmsley /** 4521325b25SPaul Walmsley * struct cm_ll_data - fn ptrs to per-SoC CM function implementations 46c4ceedcbSPaul Walmsley * @split_idlest_reg: ptr to the SoC CM-specific split_idlest_reg impl 47c4ceedcbSPaul Walmsley * @wait_module_ready: ptr to the SoC CM-specific wait_module_ready impl 48a8ae5afaSTero Kristo * @wait_module_idle: ptr to the SoC CM-specific wait_module_idle impl 49128603f0STero Kristo * @module_enable: ptr to the SoC CM-specific module_enable impl 50128603f0STero Kristo * @module_disable: ptr to the SoC CM-specific module_disable impl 515fa4a3ccSTero Kristo * @xlate_clkctrl: ptr to the SoC CM-specific clkctrl xlate addr impl 5221325b25SPaul Walmsley */ 53c4ceedcbSPaul Walmsley struct cm_ll_data { 546c0afb50STero Kristo int (*split_idlest_reg)(struct clk_omap_reg *idlest_reg, s16 *prcm_inst, 55c4ceedcbSPaul Walmsley u8 *idlest_reg_id); 56021b6ff0STero Kristo int (*wait_module_ready)(u8 part, s16 prcm_mod, u16 idlest_reg, 57021b6ff0STero Kristo u8 idlest_shift); 58a8ae5afaSTero Kristo int (*wait_module_idle)(u8 part, s16 prcm_mod, u16 idlest_reg, 59a8ae5afaSTero Kristo u8 idlest_shift); 60128603f0STero Kristo void (*module_enable)(u8 mode, u8 part, u16 inst, u16 clkctrl_offs); 61128603f0STero Kristo void (*module_disable)(u8 part, u16 inst, u16 clkctrl_offs); 625fa4a3ccSTero Kristo u32 (*xlate_clkctrl)(u8 part, u16 inst, u16 clkctrl_offs); 63c4ceedcbSPaul Walmsley }; 64c4ceedcbSPaul Walmsley 656c0afb50STero Kristo extern int cm_split_idlest_reg(struct clk_omap_reg *idlest_reg, s16 *prcm_inst, 66c4ceedcbSPaul Walmsley u8 *idlest_reg_id); 67021b6ff0STero Kristo int omap_cm_wait_module_ready(u8 part, s16 prcm_mod, u16 idlest_reg, 68021b6ff0STero Kristo u8 idlest_shift); 69a8ae5afaSTero Kristo int omap_cm_wait_module_idle(u8 part, s16 prcm_mod, u16 idlest_reg, 70a8ae5afaSTero Kristo u8 idlest_shift); 71128603f0STero Kristo int omap_cm_module_enable(u8 mode, u8 part, u16 inst, u16 clkctrl_offs); 72128603f0STero Kristo int omap_cm_module_disable(u8 part, u16 inst, u16 clkctrl_offs); 735fa4a3ccSTero Kristo u32 omap_cm_xlate_clkctrl(u8 part, u16 inst, u16 clkctrl_offs); 74a529f8deSBhumika Goyal extern int cm_register(const struct cm_ll_data *cld); 75a529f8deSBhumika Goyal extern int cm_unregister(const struct cm_ll_data *cld); 76fe87414fSTero Kristo int omap_cm_init(void); 775970ca2dSTero Kristo int omap2_cm_base_init(void); 7821325b25SPaul Walmsley 7921325b25SPaul Walmsley # endif 8021325b25SPaul Walmsley 8169d88a00SPaul Walmsley #endif 82