Loading...
Note: File does not exist in v3.5.6.
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 */
23static 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
37static 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
51static struct omap_hwmod_rst_info am33xx_wkup_m3_resets[] = {
52 { .name = "wkup_m3", .rst_shift = 3, .st_shift = 5 },
53};
54
55static 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
74static 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 */
89static 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
96static 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
103static 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
110static 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
117static 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
124static 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
131static 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
138static 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_main__gfx,
147 &am33xx_l3_s__l3_main,
148 &am43xx_l3_main__emif,
149 &am43xx_wkup_m3__l4_wkup,
150 &am33xx_gfx__l3_main,
151 &am43xx_l4_wkup__wkup_m3,
152 &am43xx_l4_wkup__control,
153 &am43xx_l4_wkup__smartreflex0,
154 &am43xx_l4_wkup__smartreflex1,
155 &am33xx_l3_s__gpmc,
156 &am33xx_l3_main__ocmc,
157 NULL,
158};
159
160static struct omap_hwmod_ocp_if *am43xx_rtc_hwmod_ocp_ifs[] __initdata = {
161 &am33xx_l4_wkup__rtc,
162 NULL,
163};
164
165int __init am43xx_hwmod_init(void)
166{
167 int ret;
168
169 omap_hwmod_am43xx_reg();
170 omap_hwmod_init();
171 ret = omap_hwmod_register_links(am43xx_hwmod_ocp_ifs);
172
173 if (!ret && of_machine_is_compatible("ti,am4372"))
174 ret = omap_hwmod_register_links(am43xx_rtc_hwmod_ocp_ifs);
175
176 return ret;
177}