xref: /OK3568_Linux_fs/kernel/arch/arm/mach-omap2/omap_hwmod_43xx_data.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Copyright (C) 2013 Texas Instruments Incorporated
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * Hwmod present only in AM43x and those that differ other than register
5*4882a593Smuzhiyun  * offsets as compared to AM335x.
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  * This program is free software; you can redistribute it and/or
8*4882a593Smuzhiyun  * modify it under the terms of the GNU General Public License as
9*4882a593Smuzhiyun  * published by the Free Software Foundation version 2.
10*4882a593Smuzhiyun  *
11*4882a593Smuzhiyun  * This program is distributed "as is" WITHOUT ANY WARRANTY of any
12*4882a593Smuzhiyun  * kind, whether express or implied; without even the implied warranty
13*4882a593Smuzhiyun  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14*4882a593Smuzhiyun  * GNU General Public License for more details.
15*4882a593Smuzhiyun  */
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun #include "omap_hwmod.h"
18*4882a593Smuzhiyun #include "omap_hwmod_33xx_43xx_common_data.h"
19*4882a593Smuzhiyun #include "prcm43xx.h"
20*4882a593Smuzhiyun #include "omap_hwmod_common_data.h"
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun /* IP blocks */
23*4882a593Smuzhiyun static struct omap_hwmod am43xx_emif_hwmod = {
24*4882a593Smuzhiyun 	.name		= "emif",
25*4882a593Smuzhiyun 	.class		= &am33xx_emif_hwmod_class,
26*4882a593Smuzhiyun 	.clkdm_name	= "emif_clkdm",
27*4882a593Smuzhiyun 	.flags		= HWMOD_INIT_NO_IDLE,
28*4882a593Smuzhiyun 	.main_clk	= "dpll_ddr_m2_ck",
29*4882a593Smuzhiyun 	.prcm		= {
30*4882a593Smuzhiyun 		.omap4	= {
31*4882a593Smuzhiyun 			.clkctrl_offs	= AM43XX_CM_PER_EMIF_CLKCTRL_OFFSET,
32*4882a593Smuzhiyun 			.modulemode	= MODULEMODE_SWCTRL,
33*4882a593Smuzhiyun 		},
34*4882a593Smuzhiyun 	},
35*4882a593Smuzhiyun };
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun static struct omap_hwmod am43xx_l4_hs_hwmod = {
38*4882a593Smuzhiyun 	.name		= "l4_hs",
39*4882a593Smuzhiyun 	.class		= &am33xx_l4_hwmod_class,
40*4882a593Smuzhiyun 	.clkdm_name	= "l3_clkdm",
41*4882a593Smuzhiyun 	.flags		= HWMOD_INIT_NO_IDLE,
42*4882a593Smuzhiyun 	.main_clk	= "l4hs_gclk",
43*4882a593Smuzhiyun 	.prcm		= {
44*4882a593Smuzhiyun 		.omap4	= {
45*4882a593Smuzhiyun 			.clkctrl_offs	= AM43XX_CM_PER_L4HS_CLKCTRL_OFFSET,
46*4882a593Smuzhiyun 			.modulemode	= MODULEMODE_SWCTRL,
47*4882a593Smuzhiyun 		},
48*4882a593Smuzhiyun 	},
49*4882a593Smuzhiyun };
50*4882a593Smuzhiyun 
51*4882a593Smuzhiyun static struct omap_hwmod_rst_info am33xx_wkup_m3_resets[] = {
52*4882a593Smuzhiyun 	{ .name = "wkup_m3", .rst_shift = 3, .st_shift = 5 },
53*4882a593Smuzhiyun };
54*4882a593Smuzhiyun 
55*4882a593Smuzhiyun static struct omap_hwmod am43xx_wkup_m3_hwmod = {
56*4882a593Smuzhiyun 	.name		= "wkup_m3",
57*4882a593Smuzhiyun 	.class		= &am33xx_wkup_m3_hwmod_class,
58*4882a593Smuzhiyun 	.clkdm_name	= "l4_wkup_aon_clkdm",
59*4882a593Smuzhiyun 	/* Keep hardreset asserted */
60*4882a593Smuzhiyun 	.flags		= HWMOD_INIT_NO_RESET | HWMOD_NO_IDLEST,
61*4882a593Smuzhiyun 	.main_clk	= "sys_clkin_ck",
62*4882a593Smuzhiyun 	.prcm		= {
63*4882a593Smuzhiyun 		.omap4	= {
64*4882a593Smuzhiyun 			.clkctrl_offs	= AM43XX_CM_WKUP_WKUP_M3_CLKCTRL_OFFSET,
65*4882a593Smuzhiyun 			.rstctrl_offs	= AM43XX_RM_WKUP_RSTCTRL_OFFSET,
66*4882a593Smuzhiyun 			.rstst_offs	= AM43XX_RM_WKUP_RSTST_OFFSET,
67*4882a593Smuzhiyun 			.modulemode	= MODULEMODE_SWCTRL,
68*4882a593Smuzhiyun 		},
69*4882a593Smuzhiyun 	},
70*4882a593Smuzhiyun 	.rst_lines	= am33xx_wkup_m3_resets,
71*4882a593Smuzhiyun 	.rst_lines_cnt	= ARRAY_SIZE(am33xx_wkup_m3_resets),
72*4882a593Smuzhiyun };
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun static struct omap_hwmod am43xx_control_hwmod = {
75*4882a593Smuzhiyun 	.name		= "control",
76*4882a593Smuzhiyun 	.class		= &am33xx_control_hwmod_class,
77*4882a593Smuzhiyun 	.clkdm_name	= "l4_wkup_clkdm",
78*4882a593Smuzhiyun 	.flags		= HWMOD_INIT_NO_IDLE,
79*4882a593Smuzhiyun 	.main_clk	= "sys_clkin_ck",
80*4882a593Smuzhiyun 	.prcm		= {
81*4882a593Smuzhiyun 		.omap4	= {
82*4882a593Smuzhiyun 			.clkctrl_offs	= AM43XX_CM_WKUP_CONTROL_CLKCTRL_OFFSET,
83*4882a593Smuzhiyun 			.modulemode	= MODULEMODE_SWCTRL,
84*4882a593Smuzhiyun 		},
85*4882a593Smuzhiyun 	},
86*4882a593Smuzhiyun };
87*4882a593Smuzhiyun 
88*4882a593Smuzhiyun /* Interfaces */
89*4882a593Smuzhiyun static struct omap_hwmod_ocp_if am43xx_l3_main__emif = {
90*4882a593Smuzhiyun 	.master		= &am33xx_l3_main_hwmod,
91*4882a593Smuzhiyun 	.slave		= &am43xx_emif_hwmod,
92*4882a593Smuzhiyun 	.clk		= "dpll_core_m4_ck",
93*4882a593Smuzhiyun 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
94*4882a593Smuzhiyun };
95*4882a593Smuzhiyun 
96*4882a593Smuzhiyun static struct omap_hwmod_ocp_if am43xx_l3_main__l4_hs = {
97*4882a593Smuzhiyun 	.master		= &am33xx_l3_main_hwmod,
98*4882a593Smuzhiyun 	.slave		= &am43xx_l4_hs_hwmod,
99*4882a593Smuzhiyun 	.clk		= "l3s_gclk",
100*4882a593Smuzhiyun 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
101*4882a593Smuzhiyun };
102*4882a593Smuzhiyun 
103*4882a593Smuzhiyun static struct omap_hwmod_ocp_if am43xx_wkup_m3__l4_wkup = {
104*4882a593Smuzhiyun 	.master		= &am43xx_wkup_m3_hwmod,
105*4882a593Smuzhiyun 	.slave		= &am33xx_l4_wkup_hwmod,
106*4882a593Smuzhiyun 	.clk		= "sys_clkin_ck",
107*4882a593Smuzhiyun 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
108*4882a593Smuzhiyun };
109*4882a593Smuzhiyun 
110*4882a593Smuzhiyun static struct omap_hwmod_ocp_if am43xx_l4_wkup__wkup_m3 = {
111*4882a593Smuzhiyun 	.master		= &am33xx_l4_wkup_hwmod,
112*4882a593Smuzhiyun 	.slave		= &am43xx_wkup_m3_hwmod,
113*4882a593Smuzhiyun 	.clk		= "sys_clkin_ck",
114*4882a593Smuzhiyun 	.user		= OCP_USER_MPU | OCP_USER_SDMA,
115*4882a593Smuzhiyun };
116*4882a593Smuzhiyun 
117*4882a593Smuzhiyun static struct omap_hwmod_ocp_if am43xx_l4_wkup__smartreflex0 = {
118*4882a593Smuzhiyun 	.master		= &am33xx_l4_wkup_hwmod,
119*4882a593Smuzhiyun 	.slave		= &am33xx_smartreflex0_hwmod,
120*4882a593Smuzhiyun 	.clk		= "sys_clkin_ck",
121*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
122*4882a593Smuzhiyun };
123*4882a593Smuzhiyun 
124*4882a593Smuzhiyun static struct omap_hwmod_ocp_if am43xx_l4_wkup__smartreflex1 = {
125*4882a593Smuzhiyun 	.master		= &am33xx_l4_wkup_hwmod,
126*4882a593Smuzhiyun 	.slave		= &am33xx_smartreflex1_hwmod,
127*4882a593Smuzhiyun 	.clk		= "sys_clkin_ck",
128*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
129*4882a593Smuzhiyun };
130*4882a593Smuzhiyun 
131*4882a593Smuzhiyun static struct omap_hwmod_ocp_if am43xx_l4_wkup__control = {
132*4882a593Smuzhiyun 	.master		= &am33xx_l4_wkup_hwmod,
133*4882a593Smuzhiyun 	.slave		= &am43xx_control_hwmod,
134*4882a593Smuzhiyun 	.clk		= "sys_clkin_ck",
135*4882a593Smuzhiyun 	.user		= OCP_USER_MPU,
136*4882a593Smuzhiyun };
137*4882a593Smuzhiyun 
138*4882a593Smuzhiyun static struct omap_hwmod_ocp_if *am43xx_hwmod_ocp_ifs[] __initdata = {
139*4882a593Smuzhiyun 	&am33xx_mpu__l3_main,
140*4882a593Smuzhiyun 	&am33xx_mpu__prcm,
141*4882a593Smuzhiyun 	&am33xx_l3_s__l4_ls,
142*4882a593Smuzhiyun 	&am33xx_l3_s__l4_wkup,
143*4882a593Smuzhiyun 	&am43xx_l3_main__l4_hs,
144*4882a593Smuzhiyun 	&am33xx_l3_main__l3_s,
145*4882a593Smuzhiyun 	&am33xx_l3_main__l3_instr,
146*4882a593Smuzhiyun 	&am33xx_l3_s__l3_main,
147*4882a593Smuzhiyun 	&am43xx_l3_main__emif,
148*4882a593Smuzhiyun 	&am43xx_wkup_m3__l4_wkup,
149*4882a593Smuzhiyun 	&am43xx_l4_wkup__wkup_m3,
150*4882a593Smuzhiyun 	&am43xx_l4_wkup__control,
151*4882a593Smuzhiyun 	&am43xx_l4_wkup__smartreflex0,
152*4882a593Smuzhiyun 	&am43xx_l4_wkup__smartreflex1,
153*4882a593Smuzhiyun 	&am33xx_l3_s__gpmc,
154*4882a593Smuzhiyun 	&am33xx_l3_main__ocmc,
155*4882a593Smuzhiyun 	NULL,
156*4882a593Smuzhiyun };
157*4882a593Smuzhiyun 
am43xx_hwmod_init(void)158*4882a593Smuzhiyun int __init am43xx_hwmod_init(void)
159*4882a593Smuzhiyun {
160*4882a593Smuzhiyun 	int ret;
161*4882a593Smuzhiyun 
162*4882a593Smuzhiyun 	omap_hwmod_am43xx_reg();
163*4882a593Smuzhiyun 	omap_hwmod_init();
164*4882a593Smuzhiyun 	ret = omap_hwmod_register_links(am43xx_hwmod_ocp_ifs);
165*4882a593Smuzhiyun 
166*4882a593Smuzhiyun 	return ret;
167*4882a593Smuzhiyun }
168