@@ -444,6 +444,9 @@ static int clk_pll_enable(struct clk_hw *hw)
444
444
unsigned long flags = 0 ;
445
445
int ret ;
446
446
447
+ if (clk_pll_is_enabled (hw ))
448
+ return 0 ;
449
+
447
450
if (pll -> lock )
448
451
spin_lock_irqsave (pll -> lock , flags );
449
452
@@ -940,11 +943,16 @@ static int clk_plle_training(struct tegra_clk_pll *pll)
940
943
static int clk_plle_enable (struct clk_hw * hw )
941
944
{
942
945
struct tegra_clk_pll * pll = to_clk_pll (hw );
943
- unsigned long input_rate = clk_hw_get_rate (clk_hw_get_parent (hw ));
944
946
struct tegra_clk_pll_freq_table sel ;
947
+ unsigned long input_rate ;
945
948
u32 val ;
946
949
int err ;
947
950
951
+ if (clk_pll_is_enabled (hw ))
952
+ return 0 ;
953
+
954
+ input_rate = clk_hw_get_rate (clk_hw_get_parent (hw ));
955
+
948
956
if (_get_table_rate (hw , & sel , pll -> params -> fixed_rate , input_rate ))
949
957
return - EINVAL ;
950
958
@@ -1355,6 +1363,9 @@ static int clk_pllc_enable(struct clk_hw *hw)
1355
1363
int ret ;
1356
1364
unsigned long flags = 0 ;
1357
1365
1366
+ if (clk_pll_is_enabled (hw ))
1367
+ return 0 ;
1368
+
1358
1369
if (pll -> lock )
1359
1370
spin_lock_irqsave (pll -> lock , flags );
1360
1371
@@ -1567,7 +1578,12 @@ static int clk_plle_tegra114_enable(struct clk_hw *hw)
1567
1578
u32 val ;
1568
1579
int ret ;
1569
1580
unsigned long flags = 0 ;
1570
- unsigned long input_rate = clk_hw_get_rate (clk_hw_get_parent (hw ));
1581
+ unsigned long input_rate ;
1582
+
1583
+ if (clk_pll_is_enabled (hw ))
1584
+ return 0 ;
1585
+
1586
+ input_rate = clk_hw_get_rate (clk_hw_get_parent (hw ));
1571
1587
1572
1588
if (_get_table_rate (hw , & sel , pll -> params -> fixed_rate , input_rate ))
1573
1589
return - EINVAL ;
@@ -1704,6 +1720,9 @@ static int clk_pllu_tegra114_enable(struct clk_hw *hw)
1704
1720
return - EINVAL ;
1705
1721
}
1706
1722
1723
+ if (clk_pll_is_enabled (hw ))
1724
+ return 0 ;
1725
+
1707
1726
input_rate = clk_hw_get_rate (__clk_get_hw (osc ));
1708
1727
1709
1728
if (pll -> lock )
@@ -2379,14 +2398,29 @@ struct clk *tegra_clk_register_pllre_tegra210(const char *name,
2379
2398
return clk ;
2380
2399
}
2381
2400
2401
+ static int clk_plle_tegra210_is_enabled (struct clk_hw * hw )
2402
+ {
2403
+ struct tegra_clk_pll * pll = to_clk_pll (hw );
2404
+ u32 val ;
2405
+
2406
+ val = pll_readl_base (pll );
2407
+
2408
+ return val & PLLE_BASE_ENABLE ? 1 : 0 ;
2409
+ }
2410
+
2382
2411
static int clk_plle_tegra210_enable (struct clk_hw * hw )
2383
2412
{
2384
2413
struct tegra_clk_pll * pll = to_clk_pll (hw );
2385
2414
struct tegra_clk_pll_freq_table sel ;
2386
2415
u32 val ;
2387
2416
int ret = 0 ;
2388
2417
unsigned long flags = 0 ;
2389
- unsigned long input_rate = clk_hw_get_rate (clk_hw_get_parent (hw ));
2418
+ unsigned long input_rate ;
2419
+
2420
+ if (clk_plle_tegra210_is_enabled (hw ))
2421
+ return 0 ;
2422
+
2423
+ input_rate = clk_hw_get_rate (clk_hw_get_parent (hw ));
2390
2424
2391
2425
if (_get_table_rate (hw , & sel , pll -> params -> fixed_rate , input_rate ))
2392
2426
return - EINVAL ;
@@ -2497,16 +2531,6 @@ static void clk_plle_tegra210_disable(struct clk_hw *hw)
2497
2531
spin_unlock_irqrestore (pll -> lock , flags );
2498
2532
}
2499
2533
2500
- static int clk_plle_tegra210_is_enabled (struct clk_hw * hw )
2501
- {
2502
- struct tegra_clk_pll * pll = to_clk_pll (hw );
2503
- u32 val ;
2504
-
2505
- val = pll_readl_base (pll );
2506
-
2507
- return val & PLLE_BASE_ENABLE ? 1 : 0 ;
2508
- }
2509
-
2510
2534
static const struct clk_ops tegra_clk_plle_tegra210_ops = {
2511
2535
.is_enabled = clk_plle_tegra210_is_enabled ,
2512
2536
.enable = clk_plle_tegra210_enable ,
0 commit comments