]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/commitdiff
clk: bcm2835: Mark GPIO clocks enabled at boot as critical.
authorEric Anholt <eric@anholt.net>
Tue, 10 May 2016 00:28:18 +0000 (17:28 -0700)
committerKleber Sacilotto de Souza <kleber.souza@canonical.com>
Tue, 19 Sep 2017 10:07:54 +0000 (12:07 +0200)
These divide off of PLLD_PER and are used for the ethernet and wifi
PHYs source PLLs.  Neither of them is currently represented by a phy
device that would grab the clock for us.

This keeps other drivers from killing the networking PHYs when they
disable their own clocks and trigger PLLD_PER's refcount going to 0.

v2: Skip marking as critical if they aren't on at boot.

Signed-off-by: Eric Anholt <eric@anholt.net>
Signed-off-by: Tim Gardner <tim.gardner@canonical.com>
drivers/clk/bcm/clk-bcm2835.c

index 41dccc4ebe6f367054822aed11cb0cd4d985c21a..7ec0e71cbcfbcd6c86e2f6c8080e1d622ca5540a 100644 (file)
@@ -1356,6 +1356,15 @@ static struct clk_hw *bcm2835_register_clock(struct bcm2835_cprman *cprman,
        init.name = data->name;
        init.flags = data->flags | CLK_IGNORE_UNUSED;
 
+       /*
+        * Some GPIO clocks for ethernet/wifi PLLs are marked as
+        * critical (since some platforms use them), but if the
+        * firmware didn't have them turned on then they clearly
+        * aren't actually critical.
+        */
+       if ((cprman_read(cprman, data->ctl_reg) & CM_ENABLE) == 0)
+               init.flags &= ~CLK_IS_CRITICAL;
+
        /*
         * Pass the CLK_SET_RATE_PARENT flag if we are allowed to propagate
         * rate changes on at least of the parents.