FAILED: patch "[PATCH] ARM: davinci: da850: fix infinite loop in clk_set_rate()" failed to apply to 4.9-stable tree
[email protected]
maintainerThe patch below does not apply to the 4.9-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
5d45b011c14a791ef23555a59ff7a3e6d213530fMon Sep 17 00:00:00 2001
From: Bartosz Golaszewski <[email protected]>
Date: Wed, 7 Dec 2016 16:22:15 +0100
Subject: [PATCH] ARM: davinci: da850: fix infinite loop in clk_set_rate()
The aemif clock is added twice to the lookup table in da850.c. This breaks the children list of pll0_sysclk3 as we're using the same list links in struct clk. When calling clk_set_rate(), we get stuck in propagate_rate().
Create a separate clock for nand, inheriting the rate of the aemif clock and retrieve it in the davinci_nand module.
arch/arm/mach-davinci/da850.c +19 -1
@@ -367,6 +367,16 @@ static struct clk aemif_clk = { .flags = ALWAYS_ENABLED, }; +/* +* In order to avoid adding the aemif_clk to the clock lookup table twice (and +* screwing up the linked list in the process) create a separate clock for +* nand inheriting the rate from aemif_clk. +*/ +static struct clk aemif_nand_clk = { + .name ="nand" , + .parent = &aemif_clk, +}; +static struct clk usb11_clk = { .name ="usb11" , .parent = &pll0_sysclk4,
@@ -537,7 +547,15 @@ static struct clk_lookup da850_clks[] = {CLK ("da830-mmc.0" ,NULL , &mmcsd0_clk),CLK ("da830-mmc.1" ,NULL , &mmcsd1_clk),CLK ("ti-aemif" ,NULL , &aemif_clk), -CLK (NULL ,"aemif" , &aemif_clk), +/* +* The only user of this clock is davinci_nand and it get's it through +* con_id. The nand node itself is created from within the aemif +* driver to guarantee that it's probed after the aemif timing +* parameters are configured. of_dev_auxdata is not accessible from +* the aemif driver and can't be passed to of_platform_populate(). For +* that reason we're leaving the dev_id here as NULL. +*/ +CLK (NULL ,"aemif" , &aemif_nand_clk),CLK ("ohci-da8xx" ,"usb11" , &usb11_clk),CLK ("musb-da8xx" ,"usb20" , &usb20_clk), CLK("spi_davinci.0", NULL, &spi0_clk),