Path: blob/master/arch/arm/mach-omap2/clockdomains2420_data.c
26292 views
// SPDX-License-Identifier: GPL-2.01/*2* OMAP2420 clockdomains3*4* Copyright (C) 2008-2011 Texas Instruments, Inc.5* Copyright (C) 2008-2010 Nokia Corporation6*7* Paul Walmsley, Jouni Högander8*9* This file contains clockdomains and clockdomain wakeup dependencies10* for OMAP2420 chips. Some notes:11*12* A useful validation rule for struct clockdomain: Any clockdomain13* referenced by a wkdep_srcs must have a dep_bit assigned. So14* wkdep_srcs are really just software-controllable dependencies.15* Non-software-controllable dependencies do exist, but they are not16* encoded below (yet).17*18* 24xx does not support programmable sleep dependencies (SLEEPDEP)19*20* The overly-specific dep_bit names are due to a bit name collision21* with CM_FCLKEN_{DSP,IVA2}. The DSP/IVA2 PM_WKDEP and CM_SLEEPDEP shift22* value are the same for all powerdomains: 223*24* XXX should dep_bit be a mask, so we can test to see if it is 0 as a25* sanity check?26* XXX encode hardware fixed wakeup dependencies -- esp. for 3430 CORE27*/2829/*30* To-Do List31* -> Port the Sleep/Wakeup dependencies for the domains32* from the Power domain framework33*/3435#include <linux/kernel.h>36#include <linux/io.h>3738#include "soc.h"39#include "clockdomain.h"40#include "prm2xxx_3xxx.h"41#include "cm2xxx_3xxx.h"42#include "cm-regbits-24xx.h"43#include "prm-regbits-24xx.h"4445/*46* Clockdomain dependencies for wkdeps47*48* XXX Hardware dependencies (e.g., dependencies that cannot be49* changed in software) are not included here yet, but should be.50*/5152/* Wakeup dependency source arrays */5354/* 2420-specific possible wakeup dependencies */5556/* 2420 PM_WKDEP_MPU: CORE, DSP, WKUP */57static struct clkdm_dep mpu_2420_wkdeps[] = {58{ .clkdm_name = "core_l3_clkdm" },59{ .clkdm_name = "core_l4_clkdm" },60{ .clkdm_name = "dsp_clkdm" },61{ .clkdm_name = "wkup_clkdm" },62{ NULL },63};6465/* 2420 PM_WKDEP_CORE: DSP, GFX, MPU, WKUP */66static struct clkdm_dep core_2420_wkdeps[] = {67{ .clkdm_name = "dsp_clkdm" },68{ .clkdm_name = "gfx_clkdm" },69{ .clkdm_name = "mpu_clkdm" },70{ .clkdm_name = "wkup_clkdm" },71{ NULL },72};7374/*75* 2420-only clockdomains76*/7778static struct clockdomain mpu_2420_clkdm = {79.name = "mpu_clkdm",80.pwrdm = { .name = "mpu_pwrdm" },81.flags = CLKDM_CAN_HWSUP,82.wkdep_srcs = mpu_2420_wkdeps,83.clktrctrl_mask = OMAP24XX_AUTOSTATE_MPU_MASK,84};8586static struct clockdomain iva1_2420_clkdm = {87.name = "iva1_clkdm",88.pwrdm = { .name = "dsp_pwrdm" },89.flags = CLKDM_CAN_HWSUP_SWSUP,90.dep_bit = OMAP24XX_PM_WKDEP_MPU_EN_DSP_SHIFT,91.wkdep_srcs = dsp_24xx_wkdeps,92.clktrctrl_mask = OMAP2420_AUTOSTATE_IVA_MASK,93};9495static struct clockdomain dsp_2420_clkdm = {96.name = "dsp_clkdm",97.pwrdm = { .name = "dsp_pwrdm" },98.flags = CLKDM_CAN_HWSUP_SWSUP,99.clktrctrl_mask = OMAP24XX_AUTOSTATE_DSP_MASK,100};101102static struct clockdomain gfx_2420_clkdm = {103.name = "gfx_clkdm",104.pwrdm = { .name = "gfx_pwrdm" },105.flags = CLKDM_CAN_HWSUP_SWSUP,106.wkdep_srcs = gfx_24xx_wkdeps,107.clktrctrl_mask = OMAP24XX_AUTOSTATE_GFX_MASK,108};109110static struct clockdomain core_l3_2420_clkdm = {111.name = "core_l3_clkdm",112.pwrdm = { .name = "core_pwrdm" },113.flags = CLKDM_CAN_HWSUP,114.wkdep_srcs = core_2420_wkdeps,115.clktrctrl_mask = OMAP24XX_AUTOSTATE_L3_MASK,116};117118static struct clockdomain core_l4_2420_clkdm = {119.name = "core_l4_clkdm",120.pwrdm = { .name = "core_pwrdm" },121.flags = CLKDM_CAN_HWSUP,122.wkdep_srcs = core_2420_wkdeps,123.clktrctrl_mask = OMAP24XX_AUTOSTATE_L4_MASK,124};125126static struct clockdomain dss_2420_clkdm = {127.name = "dss_clkdm",128.pwrdm = { .name = "core_pwrdm" },129.flags = CLKDM_CAN_HWSUP,130.clktrctrl_mask = OMAP24XX_AUTOSTATE_DSS_MASK,131};132133static struct clockdomain *clockdomains_omap242x[] __initdata = {134&wkup_common_clkdm,135&mpu_2420_clkdm,136&iva1_2420_clkdm,137&dsp_2420_clkdm,138&gfx_2420_clkdm,139&core_l3_2420_clkdm,140&core_l4_2420_clkdm,141&dss_2420_clkdm,142NULL,143};144145void __init omap242x_clockdomains_init(void)146{147if (!cpu_is_omap242x())148return;149150clkdm_register_platform_funcs(&omap2_clkdm_operations);151clkdm_register_clkdms(clockdomains_omap242x);152clkdm_complete_init();153}154155156