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