Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

clk: qcom: Add support for NSS/GMAC clocks and resets

Add the NSS/GMAC clocks and the TCM clock and NSS resets.

Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
Signed-off-by: Mathieu Olivari <mathieu@codeaurora.org>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Stephen Boyd and committed by
David S. Miller
f7b81d67 a74eab63

+638 -1
+593 -1
drivers/clk/qcom/gcc-ipq806x.c
··· 140 140 }, 141 141 }; 142 142 143 + #define NSS_PLL_RATE(f, _l, _m, _n, i) \ 144 + { \ 145 + .freq = f, \ 146 + .l = _l, \ 147 + .m = _m, \ 148 + .n = _n, \ 149 + .ibits = i, \ 150 + } 151 + 152 + static struct pll_freq_tbl pll18_freq_tbl[] = { 153 + NSS_PLL_RATE(550000000, 44, 0, 1, 0x01495625), 154 + NSS_PLL_RATE(733000000, 58, 16, 25, 0x014b5625), 155 + }; 156 + 157 + static struct clk_pll pll18 = { 158 + .l_reg = 0x31a4, 159 + .m_reg = 0x31a8, 160 + .n_reg = 0x31ac, 161 + .config_reg = 0x31b4, 162 + .mode_reg = 0x31a0, 163 + .status_reg = 0x31b8, 164 + .status_bit = 16, 165 + .post_div_shift = 16, 166 + .post_div_width = 1, 167 + .freq_tbl = pll18_freq_tbl, 168 + .clkr.hw.init = &(struct clk_init_data){ 169 + .name = "pll18", 170 + .parent_names = (const char *[]){ "pxo" }, 171 + .num_parents = 1, 172 + .ops = &clk_pll_ops, 173 + }, 174 + }; 175 + 143 176 enum { 144 177 P_PXO, 145 178 P_PLL8, 146 179 P_PLL3, 147 180 P_PLL0, 148 181 P_CXO, 182 + P_PLL14, 183 + P_PLL18, 149 184 }; 150 185 151 186 static const struct parent_map gcc_pxo_pll8_map[] = { ··· 230 195 "pxo", 231 196 "pll8_vote", 232 197 "pll0_vote", 198 + }; 199 + 200 + static const struct parent_map gcc_pxo_pll8_pll14_pll18_pll0_map[] = { 201 + { P_PXO, 0 }, 202 + { P_PLL8, 4 }, 203 + { P_PLL0, 2 }, 204 + { P_PLL14, 5 }, 205 + { P_PLL18, 1 } 206 + }; 207 + 208 + static const char *gcc_pxo_pll8_pll14_pll18_pll0[] = { 209 + "pxo", 210 + "pll8_vote", 211 + "pll0_vote", 212 + "pll14", 213 + "pll18", 233 214 }; 234 215 235 216 static struct freq_tbl clk_tbl_gsbi_uart[] = { ··· 2253 2202 }, 2254 2203 }; 2255 2204 2205 + static const struct freq_tbl clk_tbl_gmac[] = { 2206 + { 133000000, P_PLL0, 1, 50, 301 }, 2207 + { 266000000, P_PLL0, 1, 127, 382 }, 2208 + { } 2209 + }; 2210 + 2211 + static struct clk_dyn_rcg gmac_core1_src = { 2212 + .ns_reg[0] = 0x3cac, 2213 + .ns_reg[1] = 0x3cb0, 2214 + .md_reg[0] = 0x3ca4, 2215 + .md_reg[1] = 0x3ca8, 2216 + .bank_reg = 0x3ca0, 2217 + .mn[0] = { 2218 + .mnctr_en_bit = 8, 2219 + .mnctr_reset_bit = 7, 2220 + .mnctr_mode_shift = 5, 2221 + .n_val_shift = 16, 2222 + .m_val_shift = 16, 2223 + .width = 8, 2224 + }, 2225 + .mn[1] = { 2226 + .mnctr_en_bit = 8, 2227 + .mnctr_reset_bit = 7, 2228 + .mnctr_mode_shift = 5, 2229 + .n_val_shift = 16, 2230 + .m_val_shift = 16, 2231 + .width = 8, 2232 + }, 2233 + .s[0] = { 2234 + .src_sel_shift = 0, 2235 + .parent_map = gcc_pxo_pll8_pll14_pll18_pll0_map, 2236 + }, 2237 + .s[1] = { 2238 + .src_sel_shift = 0, 2239 + .parent_map = gcc_pxo_pll8_pll14_pll18_pll0_map, 2240 + }, 2241 + .p[0] = { 2242 + .pre_div_shift = 3, 2243 + .pre_div_width = 2, 2244 + }, 2245 + .p[1] = { 2246 + .pre_div_shift = 3, 2247 + .pre_div_width = 2, 2248 + }, 2249 + .mux_sel_bit = 0, 2250 + .freq_tbl = clk_tbl_gmac, 2251 + .clkr = { 2252 + .enable_reg = 0x3ca0, 2253 + .enable_mask = BIT(1), 2254 + .hw.init = &(struct clk_init_data){ 2255 + .name = "gmac_core1_src", 2256 + .parent_names = gcc_pxo_pll8_pll14_pll18_pll0, 2257 + .num_parents = 5, 2258 + .ops = &clk_dyn_rcg_ops, 2259 + }, 2260 + }, 2261 + }; 2262 + 2263 + static struct clk_branch gmac_core1_clk = { 2264 + .halt_reg = 0x3c20, 2265 + .halt_bit = 4, 2266 + .hwcg_reg = 0x3cb4, 2267 + .hwcg_bit = 6, 2268 + .clkr = { 2269 + .enable_reg = 0x3cb4, 2270 + .enable_mask = BIT(4), 2271 + .hw.init = &(struct clk_init_data){ 2272 + .name = "gmac_core1_clk", 2273 + .parent_names = (const char *[]){ 2274 + "gmac_core1_src", 2275 + }, 2276 + .num_parents = 1, 2277 + .ops = &clk_branch_ops, 2278 + .flags = CLK_SET_RATE_PARENT, 2279 + }, 2280 + }, 2281 + }; 2282 + 2283 + static struct clk_dyn_rcg gmac_core2_src = { 2284 + .ns_reg[0] = 0x3ccc, 2285 + .ns_reg[1] = 0x3cd0, 2286 + .md_reg[0] = 0x3cc4, 2287 + .md_reg[1] = 0x3cc8, 2288 + .bank_reg = 0x3ca0, 2289 + .mn[0] = { 2290 + .mnctr_en_bit = 8, 2291 + .mnctr_reset_bit = 7, 2292 + .mnctr_mode_shift = 5, 2293 + .n_val_shift = 16, 2294 + .m_val_shift = 16, 2295 + .width = 8, 2296 + }, 2297 + .mn[1] = { 2298 + .mnctr_en_bit = 8, 2299 + .mnctr_reset_bit = 7, 2300 + .mnctr_mode_shift = 5, 2301 + .n_val_shift = 16, 2302 + .m_val_shift = 16, 2303 + .width = 8, 2304 + }, 2305 + .s[0] = { 2306 + .src_sel_shift = 0, 2307 + .parent_map = gcc_pxo_pll8_pll14_pll18_pll0_map, 2308 + }, 2309 + .s[1] = { 2310 + .src_sel_shift = 0, 2311 + .parent_map = gcc_pxo_pll8_pll14_pll18_pll0_map, 2312 + }, 2313 + .p[0] = { 2314 + .pre_div_shift = 3, 2315 + .pre_div_width = 2, 2316 + }, 2317 + .p[1] = { 2318 + .pre_div_shift = 3, 2319 + .pre_div_width = 2, 2320 + }, 2321 + .mux_sel_bit = 0, 2322 + .freq_tbl = clk_tbl_gmac, 2323 + .clkr = { 2324 + .enable_reg = 0x3cc0, 2325 + .enable_mask = BIT(1), 2326 + .hw.init = &(struct clk_init_data){ 2327 + .name = "gmac_core2_src", 2328 + .parent_names = gcc_pxo_pll8_pll14_pll18_pll0, 2329 + .num_parents = 5, 2330 + .ops = &clk_dyn_rcg_ops, 2331 + }, 2332 + }, 2333 + }; 2334 + 2335 + static struct clk_branch gmac_core2_clk = { 2336 + .halt_reg = 0x3c20, 2337 + .halt_bit = 5, 2338 + .hwcg_reg = 0x3cd4, 2339 + .hwcg_bit = 6, 2340 + .clkr = { 2341 + .enable_reg = 0x3cd4, 2342 + .enable_mask = BIT(4), 2343 + .hw.init = &(struct clk_init_data){ 2344 + .name = "gmac_core2_clk", 2345 + .parent_names = (const char *[]){ 2346 + "gmac_core2_src", 2347 + }, 2348 + .num_parents = 1, 2349 + .ops = &clk_branch_ops, 2350 + .flags = CLK_SET_RATE_PARENT, 2351 + }, 2352 + }, 2353 + }; 2354 + 2355 + static struct clk_dyn_rcg gmac_core3_src = { 2356 + .ns_reg[0] = 0x3cec, 2357 + .ns_reg[1] = 0x3cf0, 2358 + .md_reg[0] = 0x3ce4, 2359 + .md_reg[1] = 0x3ce8, 2360 + .bank_reg = 0x3ce0, 2361 + .mn[0] = { 2362 + .mnctr_en_bit = 8, 2363 + .mnctr_reset_bit = 7, 2364 + .mnctr_mode_shift = 5, 2365 + .n_val_shift = 16, 2366 + .m_val_shift = 16, 2367 + .width = 8, 2368 + }, 2369 + .mn[1] = { 2370 + .mnctr_en_bit = 8, 2371 + .mnctr_reset_bit = 7, 2372 + .mnctr_mode_shift = 5, 2373 + .n_val_shift = 16, 2374 + .m_val_shift = 16, 2375 + .width = 8, 2376 + }, 2377 + .s[0] = { 2378 + .src_sel_shift = 0, 2379 + .parent_map = gcc_pxo_pll8_pll14_pll18_pll0_map, 2380 + }, 2381 + .s[1] = { 2382 + .src_sel_shift = 0, 2383 + .parent_map = gcc_pxo_pll8_pll14_pll18_pll0_map, 2384 + }, 2385 + .p[0] = { 2386 + .pre_div_shift = 3, 2387 + .pre_div_width = 2, 2388 + }, 2389 + .p[1] = { 2390 + .pre_div_shift = 3, 2391 + .pre_div_width = 2, 2392 + }, 2393 + .mux_sel_bit = 0, 2394 + .freq_tbl = clk_tbl_gmac, 2395 + .clkr = { 2396 + .enable_reg = 0x3ce0, 2397 + .enable_mask = BIT(1), 2398 + .hw.init = &(struct clk_init_data){ 2399 + .name = "gmac_core3_src", 2400 + .parent_names = gcc_pxo_pll8_pll14_pll18_pll0, 2401 + .num_parents = 5, 2402 + .ops = &clk_dyn_rcg_ops, 2403 + }, 2404 + }, 2405 + }; 2406 + 2407 + static struct clk_branch gmac_core3_clk = { 2408 + .halt_reg = 0x3c20, 2409 + .halt_bit = 6, 2410 + .hwcg_reg = 0x3cf4, 2411 + .hwcg_bit = 6, 2412 + .clkr = { 2413 + .enable_reg = 0x3cf4, 2414 + .enable_mask = BIT(4), 2415 + .hw.init = &(struct clk_init_data){ 2416 + .name = "gmac_core3_clk", 2417 + .parent_names = (const char *[]){ 2418 + "gmac_core3_src", 2419 + }, 2420 + .num_parents = 1, 2421 + .ops = &clk_branch_ops, 2422 + .flags = CLK_SET_RATE_PARENT, 2423 + }, 2424 + }, 2425 + }; 2426 + 2427 + static struct clk_dyn_rcg gmac_core4_src = { 2428 + .ns_reg[0] = 0x3d0c, 2429 + .ns_reg[1] = 0x3d10, 2430 + .md_reg[0] = 0x3d04, 2431 + .md_reg[1] = 0x3d08, 2432 + .bank_reg = 0x3d00, 2433 + .mn[0] = { 2434 + .mnctr_en_bit = 8, 2435 + .mnctr_reset_bit = 7, 2436 + .mnctr_mode_shift = 5, 2437 + .n_val_shift = 16, 2438 + .m_val_shift = 16, 2439 + .width = 8, 2440 + }, 2441 + .mn[1] = { 2442 + .mnctr_en_bit = 8, 2443 + .mnctr_reset_bit = 7, 2444 + .mnctr_mode_shift = 5, 2445 + .n_val_shift = 16, 2446 + .m_val_shift = 16, 2447 + .width = 8, 2448 + }, 2449 + .s[0] = { 2450 + .src_sel_shift = 0, 2451 + .parent_map = gcc_pxo_pll8_pll14_pll18_pll0_map, 2452 + }, 2453 + .s[1] = { 2454 + .src_sel_shift = 0, 2455 + .parent_map = gcc_pxo_pll8_pll14_pll18_pll0_map, 2456 + }, 2457 + .p[0] = { 2458 + .pre_div_shift = 3, 2459 + .pre_div_width = 2, 2460 + }, 2461 + .p[1] = { 2462 + .pre_div_shift = 3, 2463 + .pre_div_width = 2, 2464 + }, 2465 + .mux_sel_bit = 0, 2466 + .freq_tbl = clk_tbl_gmac, 2467 + .clkr = { 2468 + .enable_reg = 0x3d00, 2469 + .enable_mask = BIT(1), 2470 + .hw.init = &(struct clk_init_data){ 2471 + .name = "gmac_core4_src", 2472 + .parent_names = gcc_pxo_pll8_pll14_pll18_pll0, 2473 + .num_parents = 5, 2474 + .ops = &clk_dyn_rcg_ops, 2475 + }, 2476 + }, 2477 + }; 2478 + 2479 + static struct clk_branch gmac_core4_clk = { 2480 + .halt_reg = 0x3c20, 2481 + .halt_bit = 7, 2482 + .hwcg_reg = 0x3d14, 2483 + .hwcg_bit = 6, 2484 + .clkr = { 2485 + .enable_reg = 0x3d14, 2486 + .enable_mask = BIT(4), 2487 + .hw.init = &(struct clk_init_data){ 2488 + .name = "gmac_core4_clk", 2489 + .parent_names = (const char *[]){ 2490 + "gmac_core4_src", 2491 + }, 2492 + .num_parents = 1, 2493 + .ops = &clk_branch_ops, 2494 + .flags = CLK_SET_RATE_PARENT, 2495 + }, 2496 + }, 2497 + }; 2498 + 2499 + static const struct freq_tbl clk_tbl_nss_tcm[] = { 2500 + { 266000000, P_PLL0, 3, 0, 0 }, 2501 + { 400000000, P_PLL0, 2, 0, 0 }, 2502 + { } 2503 + }; 2504 + 2505 + static struct clk_dyn_rcg nss_tcm_src = { 2506 + .ns_reg[0] = 0x3dc4, 2507 + .ns_reg[1] = 0x3dc8, 2508 + .bank_reg = 0x3dc0, 2509 + .s[0] = { 2510 + .src_sel_shift = 0, 2511 + .parent_map = gcc_pxo_pll8_pll14_pll18_pll0_map, 2512 + }, 2513 + .s[1] = { 2514 + .src_sel_shift = 0, 2515 + .parent_map = gcc_pxo_pll8_pll14_pll18_pll0_map, 2516 + }, 2517 + .p[0] = { 2518 + .pre_div_shift = 3, 2519 + .pre_div_width = 4, 2520 + }, 2521 + .p[1] = { 2522 + .pre_div_shift = 3, 2523 + .pre_div_width = 4, 2524 + }, 2525 + .mux_sel_bit = 0, 2526 + .freq_tbl = clk_tbl_nss_tcm, 2527 + .clkr = { 2528 + .enable_reg = 0x3dc0, 2529 + .enable_mask = BIT(1), 2530 + .hw.init = &(struct clk_init_data){ 2531 + .name = "nss_tcm_src", 2532 + .parent_names = gcc_pxo_pll8_pll14_pll18_pll0, 2533 + .num_parents = 5, 2534 + .ops = &clk_dyn_rcg_ops, 2535 + }, 2536 + }, 2537 + }; 2538 + 2539 + static struct clk_branch nss_tcm_clk = { 2540 + .halt_reg = 0x3c20, 2541 + .halt_bit = 14, 2542 + .clkr = { 2543 + .enable_reg = 0x3dd0, 2544 + .enable_mask = BIT(6) | BIT(4), 2545 + .hw.init = &(struct clk_init_data){ 2546 + .name = "nss_tcm_clk", 2547 + .parent_names = (const char *[]){ 2548 + "nss_tcm_src", 2549 + }, 2550 + .num_parents = 1, 2551 + .ops = &clk_branch_ops, 2552 + .flags = CLK_SET_RATE_PARENT, 2553 + }, 2554 + }, 2555 + }; 2556 + 2557 + static const struct freq_tbl clk_tbl_nss[] = { 2558 + { 110000000, P_PLL18, 1, 1, 5 }, 2559 + { 275000000, P_PLL18, 2, 0, 0 }, 2560 + { 550000000, P_PLL18, 1, 0, 0 }, 2561 + { 733000000, P_PLL18, 1, 0, 0 }, 2562 + { } 2563 + }; 2564 + 2565 + static struct clk_dyn_rcg ubi32_core1_src_clk = { 2566 + .ns_reg[0] = 0x3d2c, 2567 + .ns_reg[1] = 0x3d30, 2568 + .md_reg[0] = 0x3d24, 2569 + .md_reg[1] = 0x3d28, 2570 + .bank_reg = 0x3d20, 2571 + .mn[0] = { 2572 + .mnctr_en_bit = 8, 2573 + .mnctr_reset_bit = 7, 2574 + .mnctr_mode_shift = 5, 2575 + .n_val_shift = 16, 2576 + .m_val_shift = 16, 2577 + .width = 8, 2578 + }, 2579 + .mn[1] = { 2580 + .mnctr_en_bit = 8, 2581 + .mnctr_reset_bit = 7, 2582 + .mnctr_mode_shift = 5, 2583 + .n_val_shift = 16, 2584 + .m_val_shift = 16, 2585 + .width = 8, 2586 + }, 2587 + .s[0] = { 2588 + .src_sel_shift = 0, 2589 + .parent_map = gcc_pxo_pll8_pll14_pll18_pll0_map, 2590 + }, 2591 + .s[1] = { 2592 + .src_sel_shift = 0, 2593 + .parent_map = gcc_pxo_pll8_pll14_pll18_pll0_map, 2594 + }, 2595 + .p[0] = { 2596 + .pre_div_shift = 3, 2597 + .pre_div_width = 2, 2598 + }, 2599 + .p[1] = { 2600 + .pre_div_shift = 3, 2601 + .pre_div_width = 2, 2602 + }, 2603 + .mux_sel_bit = 0, 2604 + .freq_tbl = clk_tbl_nss, 2605 + .clkr = { 2606 + .enable_reg = 0x3d20, 2607 + .enable_mask = BIT(1), 2608 + .hw.init = &(struct clk_init_data){ 2609 + .name = "ubi32_core1_src_clk", 2610 + .parent_names = gcc_pxo_pll8_pll14_pll18_pll0, 2611 + .num_parents = 5, 2612 + .ops = &clk_dyn_rcg_ops, 2613 + .flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE, 2614 + }, 2615 + }, 2616 + }; 2617 + 2618 + static struct clk_dyn_rcg ubi32_core2_src_clk = { 2619 + .ns_reg[0] = 0x3d4c, 2620 + .ns_reg[1] = 0x3d50, 2621 + .md_reg[0] = 0x3d44, 2622 + .md_reg[1] = 0x3d48, 2623 + .bank_reg = 0x3d40, 2624 + .mn[0] = { 2625 + .mnctr_en_bit = 8, 2626 + .mnctr_reset_bit = 7, 2627 + .mnctr_mode_shift = 5, 2628 + .n_val_shift = 16, 2629 + .m_val_shift = 16, 2630 + .width = 8, 2631 + }, 2632 + .mn[1] = { 2633 + .mnctr_en_bit = 8, 2634 + .mnctr_reset_bit = 7, 2635 + .mnctr_mode_shift = 5, 2636 + .n_val_shift = 16, 2637 + .m_val_shift = 16, 2638 + .width = 8, 2639 + }, 2640 + .s[0] = { 2641 + .src_sel_shift = 0, 2642 + .parent_map = gcc_pxo_pll8_pll14_pll18_pll0_map, 2643 + }, 2644 + .s[1] = { 2645 + .src_sel_shift = 0, 2646 + .parent_map = gcc_pxo_pll8_pll14_pll18_pll0_map, 2647 + }, 2648 + .p[0] = { 2649 + .pre_div_shift = 3, 2650 + .pre_div_width = 2, 2651 + }, 2652 + .p[1] = { 2653 + .pre_div_shift = 3, 2654 + .pre_div_width = 2, 2655 + }, 2656 + .mux_sel_bit = 0, 2657 + .freq_tbl = clk_tbl_nss, 2658 + .clkr = { 2659 + .enable_reg = 0x3d40, 2660 + .enable_mask = BIT(1), 2661 + .hw.init = &(struct clk_init_data){ 2662 + .name = "ubi32_core2_src_clk", 2663 + .parent_names = gcc_pxo_pll8_pll14_pll18_pll0, 2664 + .num_parents = 5, 2665 + .ops = &clk_dyn_rcg_ops, 2666 + .flags = CLK_SET_RATE_PARENT | CLK_GET_RATE_NOCACHE, 2667 + }, 2668 + }, 2669 + }; 2670 + 2256 2671 static struct clk_regmap *gcc_ipq806x_clks[] = { 2257 2672 [PLL0] = &pll0.clkr, 2258 2673 [PLL0_VOTE] = &pll0_vote, ··· 2728 2211 [PLL8_VOTE] = &pll8_vote, 2729 2212 [PLL14] = &pll14.clkr, 2730 2213 [PLL14_VOTE] = &pll14_vote, 2214 + [PLL18] = &pll18.clkr, 2731 2215 [GSBI1_UART_SRC] = &gsbi1_uart_src.clkr, 2732 2216 [GSBI1_UART_CLK] = &gsbi1_uart_clk.clkr, 2733 2217 [GSBI2_UART_SRC] = &gsbi2_uart_src.clkr, ··· 2825 2307 [USB_FS1_SYSTEM_CLK] = &usb_fs1_sys_clk.clkr, 2826 2308 [EBI2_CLK] = &ebi2_clk.clkr, 2827 2309 [EBI2_AON_CLK] = &ebi2_aon_clk.clkr, 2310 + [GMAC_CORE1_CLK_SRC] = &gmac_core1_src.clkr, 2311 + [GMAC_CORE1_CLK] = &gmac_core1_clk.clkr, 2312 + [GMAC_CORE2_CLK_SRC] = &gmac_core2_src.clkr, 2313 + [GMAC_CORE2_CLK] = &gmac_core2_clk.clkr, 2314 + [GMAC_CORE3_CLK_SRC] = &gmac_core3_src.clkr, 2315 + [GMAC_CORE3_CLK] = &gmac_core3_clk.clkr, 2316 + [GMAC_CORE4_CLK_SRC] = &gmac_core4_src.clkr, 2317 + [GMAC_CORE4_CLK] = &gmac_core4_clk.clkr, 2318 + [UBI32_CORE1_CLK_SRC] = &ubi32_core1_src_clk.clkr, 2319 + [UBI32_CORE2_CLK_SRC] = &ubi32_core2_src_clk.clkr, 2320 + [NSSTCM_CLK_SRC] = &nss_tcm_src.clkr, 2321 + [NSSTCM_CLK] = &nss_tcm_clk.clkr, 2828 2322 }; 2829 2323 2830 2324 static const struct qcom_reset_map gcc_ipq806x_resets[] = { ··· 2955 2425 [USB30_1_PHY_RESET] = { 0x3b58, 0 }, 2956 2426 [NSSFB0_RESET] = { 0x3b60, 6 }, 2957 2427 [NSSFB1_RESET] = { 0x3b60, 7 }, 2428 + [UBI32_CORE1_CLKRST_CLAMP_RESET] = { 0x3d3c, 3}, 2429 + [UBI32_CORE1_CLAMP_RESET] = { 0x3d3c, 2 }, 2430 + [UBI32_CORE1_AHB_RESET] = { 0x3d3c, 1 }, 2431 + [UBI32_CORE1_AXI_RESET] = { 0x3d3c, 0 }, 2432 + [UBI32_CORE2_CLKRST_CLAMP_RESET] = { 0x3d5c, 3 }, 2433 + [UBI32_CORE2_CLAMP_RESET] = { 0x3d5c, 2 }, 2434 + [UBI32_CORE2_AHB_RESET] = { 0x3d5c, 1 }, 2435 + [UBI32_CORE2_AXI_RESET] = { 0x3d5c, 0 }, 2436 + [GMAC_CORE1_RESET] = { 0x3cbc, 0 }, 2437 + [GMAC_CORE2_RESET] = { 0x3cdc, 0 }, 2438 + [GMAC_CORE3_RESET] = { 0x3cfc, 0 }, 2439 + [GMAC_CORE4_RESET] = { 0x3d1c, 0 }, 2440 + [GMAC_AHB_RESET] = { 0x3e24, 0 }, 2441 + [NSS_CH0_RST_RX_CLK_N_RESET] = { 0x3b60, 0 }, 2442 + [NSS_CH0_RST_TX_CLK_N_RESET] = { 0x3b60, 1 }, 2443 + [NSS_CH0_RST_RX_125M_N_RESET] = { 0x3b60, 2 }, 2444 + [NSS_CH0_HW_RST_RX_125M_N_RESET] = { 0x3b60, 3 }, 2445 + [NSS_CH0_RST_TX_125M_N_RESET] = { 0x3b60, 4 }, 2446 + [NSS_CH1_RST_RX_CLK_N_RESET] = { 0x3b60, 5 }, 2447 + [NSS_CH1_RST_TX_CLK_N_RESET] = { 0x3b60, 6 }, 2448 + [NSS_CH1_RST_RX_125M_N_RESET] = { 0x3b60, 7 }, 2449 + [NSS_CH1_HW_RST_RX_125M_N_RESET] = { 0x3b60, 8 }, 2450 + [NSS_CH1_RST_TX_125M_N_RESET] = { 0x3b60, 9 }, 2451 + [NSS_CH2_RST_RX_CLK_N_RESET] = { 0x3b60, 10 }, 2452 + [NSS_CH2_RST_TX_CLK_N_RESET] = { 0x3b60, 11 }, 2453 + [NSS_CH2_RST_RX_125M_N_RESET] = { 0x3b60, 12 }, 2454 + [NSS_CH2_HW_RST_RX_125M_N_RESET] = { 0x3b60, 13 }, 2455 + [NSS_CH2_RST_TX_125M_N_RESET] = { 0x3b60, 14 }, 2456 + [NSS_CH3_RST_RX_CLK_N_RESET] = { 0x3b60, 15 }, 2457 + [NSS_CH3_RST_TX_CLK_N_RESET] = { 0x3b60, 16 }, 2458 + [NSS_CH3_RST_RX_125M_N_RESET] = { 0x3b60, 17 }, 2459 + [NSS_CH3_HW_RST_RX_125M_N_RESET] = { 0x3b60, 18 }, 2460 + [NSS_CH3_RST_TX_125M_N_RESET] = { 0x3b60, 19 }, 2461 + [NSS_RST_RX_250M_125M_N_RESET] = { 0x3b60, 20 }, 2462 + [NSS_RST_TX_250M_125M_N_RESET] = { 0x3b60, 21 }, 2463 + [NSS_QSGMII_TXPI_RST_N_RESET] = { 0x3b60, 22 }, 2464 + [NSS_QSGMII_CDR_RST_N_RESET] = { 0x3b60, 23 }, 2465 + [NSS_SGMII2_CDR_RST_N_RESET] = { 0x3b60, 24 }, 2466 + [NSS_SGMII3_CDR_RST_N_RESET] = { 0x3b60, 25 }, 2467 + [NSS_CAL_PRBS_RST_N_RESET] = { 0x3b60, 26 }, 2468 + [NSS_LCKDT_RST_N_RESET] = { 0x3b60, 27 }, 2469 + [NSS_SRDS_N_RESET] = { 0x3b60, 28 }, 2958 2470 }; 2959 2471 2960 2472 static const struct regmap_config gcc_ipq806x_regmap_config = { ··· 3025 2453 { 3026 2454 struct clk *clk; 3027 2455 struct device *dev = &pdev->dev; 2456 + struct regmap *regmap; 2457 + int ret; 3028 2458 3029 2459 /* Temporary until RPM clocks supported */ 3030 2460 clk = clk_register_fixed_rate(dev, "cxo", NULL, CLK_IS_ROOT, 25000000); ··· 3037 2463 if (IS_ERR(clk)) 3038 2464 return PTR_ERR(clk); 3039 2465 3040 - return qcom_cc_probe(pdev, &gcc_ipq806x_desc); 2466 + ret = qcom_cc_probe(pdev, &gcc_ipq806x_desc); 2467 + if (ret) 2468 + return ret; 2469 + 2470 + regmap = dev_get_regmap(dev, NULL); 2471 + if (!regmap) 2472 + return -ENODEV; 2473 + 2474 + /* Setup PLL18 static bits */ 2475 + regmap_update_bits(regmap, 0x31a4, 0xffffffc0, 0x40000400); 2476 + regmap_write(regmap, 0x31b0, 0x3080); 2477 + 2478 + /* Set GMAC footswitch sleep/wakeup values */ 2479 + regmap_write(regmap, 0x3cb8, 8); 2480 + regmap_write(regmap, 0x3cd8, 8); 2481 + regmap_write(regmap, 0x3cf8, 8); 2482 + regmap_write(regmap, 0x3d18, 8); 2483 + 2484 + return 0; 3041 2485 } 3042 2486 3043 2487 static int gcc_ipq806x_remove(struct platform_device *pdev)
+2
include/dt-bindings/clock/qcom,gcc-ipq806x.h
··· 289 289 #define UBI32_CORE1_CLK 279 290 290 #define UBI32_CORE2_CLK 280 291 291 #define EBI2_AON_CLK 281 292 + #define NSSTCM_CLK_SRC 282 293 + #define NSSTCM_CLK 283 292 294 293 295 #endif
+43
include/dt-bindings/reset/qcom,gcc-ipq806x.h
··· 129 129 #define USB30_1_PHY_RESET 112 130 130 #define NSSFB0_RESET 113 131 131 #define NSSFB1_RESET 114 132 + #define UBI32_CORE1_CLKRST_CLAMP_RESET 115 133 + #define UBI32_CORE1_CLAMP_RESET 116 134 + #define UBI32_CORE1_AHB_RESET 117 135 + #define UBI32_CORE1_AXI_RESET 118 136 + #define UBI32_CORE2_CLKRST_CLAMP_RESET 119 137 + #define UBI32_CORE2_CLAMP_RESET 120 138 + #define UBI32_CORE2_AHB_RESET 121 139 + #define UBI32_CORE2_AXI_RESET 122 140 + #define GMAC_CORE1_RESET 123 141 + #define GMAC_CORE2_RESET 124 142 + #define GMAC_CORE3_RESET 125 143 + #define GMAC_CORE4_RESET 126 144 + #define GMAC_AHB_RESET 127 145 + #define NSS_CH0_RST_RX_CLK_N_RESET 128 146 + #define NSS_CH0_RST_TX_CLK_N_RESET 129 147 + #define NSS_CH0_RST_RX_125M_N_RESET 130 148 + #define NSS_CH0_HW_RST_RX_125M_N_RESET 131 149 + #define NSS_CH0_RST_TX_125M_N_RESET 132 150 + #define NSS_CH1_RST_RX_CLK_N_RESET 133 151 + #define NSS_CH1_RST_TX_CLK_N_RESET 134 152 + #define NSS_CH1_RST_RX_125M_N_RESET 135 153 + #define NSS_CH1_HW_RST_RX_125M_N_RESET 136 154 + #define NSS_CH1_RST_TX_125M_N_RESET 137 155 + #define NSS_CH2_RST_RX_CLK_N_RESET 138 156 + #define NSS_CH2_RST_TX_CLK_N_RESET 139 157 + #define NSS_CH2_RST_RX_125M_N_RESET 140 158 + #define NSS_CH2_HW_RST_RX_125M_N_RESET 141 159 + #define NSS_CH2_RST_TX_125M_N_RESET 142 160 + #define NSS_CH3_RST_RX_CLK_N_RESET 143 161 + #define NSS_CH3_RST_TX_CLK_N_RESET 144 162 + #define NSS_CH3_RST_RX_125M_N_RESET 145 163 + #define NSS_CH3_HW_RST_RX_125M_N_RESET 146 164 + #define NSS_CH3_RST_TX_125M_N_RESET 147 165 + #define NSS_RST_RX_250M_125M_N_RESET 148 166 + #define NSS_RST_TX_250M_125M_N_RESET 149 167 + #define NSS_QSGMII_TXPI_RST_N_RESET 150 168 + #define NSS_QSGMII_CDR_RST_N_RESET 151 169 + #define NSS_SGMII2_CDR_RST_N_RESET 152 170 + #define NSS_SGMII3_CDR_RST_N_RESET 153 171 + #define NSS_CAL_PRBS_RST_N_RESET 154 172 + #define NSS_LCKDT_RST_N_RESET 155 173 + #define NSS_SRDS_N_RESET 156 174 + 132 175 #endif