devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
  • * [PATCH 68/75] ARM: l2c: add L2C-310 power control DT properties
           [not found] <20140328151249.GJ7528@n2100.arm.linux.org.uk>
           [not found] ` <20140328151249.GJ7528-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
    @ 2014-03-28 15:20 ` Russell King
      2014-03-28 15:20 ` [PATCH 74/75] ARM: l2c: always enable low power modes Russell King
      2 siblings, 0 replies; 11+ messages in thread
    From: Russell King @ 2014-03-28 15:20 UTC (permalink / raw)
      To: linux-arm-kernel
      Cc: Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala,
    	Rob Landley, Shawn Guo, Sascha Hauer, devicetree, linux-doc
    
    Add two new properties for setting thte L3 power control register.  Two
    new properties are added:
    
    	arm,dynamic-clk-gating
    	arm,standby-mode
    
    iMX6 sets both these, add the properties there.
    
    Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
    ---
     Documentation/devicetree/bindings/arm/l2cc.txt |  2 ++
     arch/arm/boot/dts/imx6qdl.dtsi                 |  2 ++
     arch/arm/boot/dts/imx6sl.dtsi                  |  2 ++
     arch/arm/mm/cache-l2x0.c                       | 10 ++++++++++
     4 files changed, 16 insertions(+)
    
    diff --git a/Documentation/devicetree/bindings/arm/l2cc.txt b/Documentation/devicetree/bindings/arm/l2cc.txt
    index b513cb8196fe..e0dd400ecea6 100644
    --- a/Documentation/devicetree/bindings/arm/l2cc.txt
    +++ b/Documentation/devicetree/bindings/arm/l2cc.txt
    @@ -40,6 +40,8 @@ implementations of the L2 cache controller with compatible programming models.
     - arm,filter-ranges : <start length> Starting address and length of window to
       filter. Addresses in the filter window are directed to the M1 port. Other
       addresses will go to the M0 port.
    +- arm,dynamic-clk-gating : Enables dynamic clock gating (PL310)
    +- arm,standby-mode : Enables standby mode (PL310)
     - interrupts : 1 combined interrupt.
     - cache-id-part: cache id part number to be used if it is not present
       on hardware
    diff --git a/arch/arm/boot/dts/imx6qdl.dtsi b/arch/arm/boot/dts/imx6qdl.dtsi
    index fb28b2ecb1db..dea6ee66a01e 100644
    --- a/arch/arm/boot/dts/imx6qdl.dtsi
    +++ b/arch/arm/boot/dts/imx6qdl.dtsi
    @@ -114,6 +114,8 @@
     			cache-level = <2>;
     			arm,tag-latency = <4 2 3>;
     			arm,data-latency = <4 2 3>;
    +			arm,dynamic-clk-gating;
    +			arm,standby-mode;
     		};
     
     		pcie: pcie@0x01000000 {
    diff --git a/arch/arm/boot/dts/imx6sl.dtsi b/arch/arm/boot/dts/imx6sl.dtsi
    index 28558f1aaf2d..8094ac1cedc5 100644
    --- a/arch/arm/boot/dts/imx6sl.dtsi
    +++ b/arch/arm/boot/dts/imx6sl.dtsi
    @@ -81,6 +81,8 @@
     			cache-level = <2>;
     			arm,tag-latency = <4 2 3>;
     			arm,data-latency = <4 2 3>;
    +			arm,dynamic-clk-gating;
    +			arm,standby-mode;
     		};
     
     		pmu {
    diff --git a/arch/arm/mm/cache-l2x0.c b/arch/arm/mm/cache-l2x0.c
    index 462675847cb7..655a363918f5 100644
    --- a/arch/arm/mm/cache-l2x0.c
    +++ b/arch/arm/mm/cache-l2x0.c
    @@ -906,6 +906,7 @@ static void __init l2c310_of_parse(const struct device_node *np,
     	u32 data[3] = { 0, 0, 0 };
     	u32 tag[3] = { 0, 0, 0 };
     	u32 filter[2] = { 0, 0 };
    +	u32 val;
     
     	of_property_read_u32_array(np, "arm,tag-latency", tag, ARRAY_SIZE(tag));
     	if (tag[0] && tag[1] && tag[2])
    @@ -932,6 +933,15 @@ static void __init l2c310_of_parse(const struct device_node *np,
     		writel_relaxed((filter[0] & ~(SZ_1M - 1)) | L310_ADDR_FILTER_EN,
     			       l2x0_base + L310_ADDR_FILTER_START);
     	}
    +
    +	val = 0;
    +	if (of_property_read_bool(np, "arm,dynamic-clk-gating"))
    +		val |= L310_DYNAMIC_CLK_GATING_EN;
    +	if (of_property_read_bool(np, "arm,standby-mode"))
    +		val |= L310_STNDBY_MODE_EN;
    +
    +	if (val)
    +		l2c_write_sec(val, l2x0_base, L310_POWER_CTRL);
     }
     
     static const struct l2c_init_data of_l2c310_data __initconst = {
    -- 
    1.8.3.1
    
    
    ^ permalink raw reply related	[flat|nested] 11+ messages in thread
  • * [PATCH 74/75] ARM: l2c: always enable low power modes
           [not found] <20140328151249.GJ7528@n2100.arm.linux.org.uk>
           [not found] ` <20140328151249.GJ7528-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
      2014-03-28 15:20 ` [PATCH 68/75] ARM: l2c: add L2C-310 power control DT properties Russell King
    @ 2014-03-28 15:20 ` Russell King
      2014-03-28 15:42   ` Rob Herring
      2 siblings, 1 reply; 11+ messages in thread
    From: Russell King @ 2014-03-28 15:20 UTC (permalink / raw)
      To: linux-arm-kernel
      Cc: Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala,
    	Rob Landley, devicetree, linux-doc
    
    Always enable the L2C low power modes on L2C-310 R3P0 and newer parts.
    
    Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
    ---
     Documentation/devicetree/bindings/arm/l2cc.txt |  2 --
     arch/arm/mm/cache-l2x0.c                       | 22 ++++++++++++----------
     2 files changed, 12 insertions(+), 12 deletions(-)
    
    diff --git a/Documentation/devicetree/bindings/arm/l2cc.txt b/Documentation/devicetree/bindings/arm/l2cc.txt
    index e0dd400ecea6..b513cb8196fe 100644
    --- a/Documentation/devicetree/bindings/arm/l2cc.txt
    +++ b/Documentation/devicetree/bindings/arm/l2cc.txt
    @@ -40,8 +40,6 @@ implementations of the L2 cache controller with compatible programming models.
     - arm,filter-ranges : <start length> Starting address and length of window to
       filter. Addresses in the filter window are directed to the M1 port. Other
       addresses will go to the M0 port.
    -- arm,dynamic-clk-gating : Enables dynamic clock gating (PL310)
    -- arm,standby-mode : Enables standby mode (PL310)
     - interrupts : 1 combined interrupt.
     - cache-id-part: cache id part number to be used if it is not present
       on hardware
    diff --git a/arch/arm/mm/cache-l2x0.c b/arch/arm/mm/cache-l2x0.c
    index 700a66260f94..b1f103d402be 100644
    --- a/arch/arm/mm/cache-l2x0.c
    +++ b/arch/arm/mm/cache-l2x0.c
    @@ -752,6 +752,18 @@ static void __init l2c310_enable(void __iomem *base, u32 aux, unsigned num_lock)
     			1 + (prefetch & L310_PREFETCH_CTRL_OFFSET_MASK));
     	}
     
    +	/* r3p0 or later has power control register */
    +	if (rev >= L310_CACHE_ID_RTL_R3P0) {
    +		u32 power_ctrl;
    +
    +		l2c_write_sec(L310_DYNAMIC_CLK_GATING_EN | L310_STNDBY_MODE_EN,
    +			      base, L310_POWER_CTRL);
    +		power_ctrl = readl_relaxed(base + L310_POWER_CTRL);
    +		pr_info("L2C-310: dynamic clock gating %sabled, standby mode %sabled\n",
    +			power_ctrl & L310_DYNAMIC_CLK_GATING_EN ? "en" : "dis",
    +			power_ctrl & L310_STNDBY_MODE_EN ? "en" : "dis");
    +	}
    +
     	l2c_enable(base, aux, num_lock);
     
     	if (aux & L310_AUX_CTRL_FULL_LINE_ZERO) {
    @@ -1033,7 +1045,6 @@ static void __init l2c310_of_parse(const struct device_node *np,
     	u32 data[3] = { 0, 0, 0 };
     	u32 tag[3] = { 0, 0, 0 };
     	u32 filter[2] = { 0, 0 };
    -	u32 val;
     
     	of_property_read_u32_array(np, "arm,tag-latency", tag, ARRAY_SIZE(tag));
     	if (tag[0] && tag[1] && tag[2])
    @@ -1060,15 +1071,6 @@ static void __init l2c310_of_parse(const struct device_node *np,
     		writel_relaxed((filter[0] & ~(SZ_1M - 1)) | L310_ADDR_FILTER_EN,
     			       l2x0_base + L310_ADDR_FILTER_START);
     	}
    -
    -	val = 0;
    -	if (of_property_read_bool(np, "arm,dynamic-clk-gating"))
    -		val |= L310_DYNAMIC_CLK_GATING_EN;
    -	if (of_property_read_bool(np, "arm,standby-mode"))
    -		val |= L310_STNDBY_MODE_EN;
    -
    -	if (val)
    -		l2c_write_sec(val, l2x0_base, L310_POWER_CTRL);
     }
     
     static const struct l2c_init_data of_l2c310_data __initconst = {
    -- 
    1.8.3.1
    
    
    ^ permalink raw reply related	[flat|nested] 11+ messages in thread

  • end of thread, other threads:[~2014-04-04 20:47 UTC | newest]
    
    Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
    -- links below jump to the message on this page --
         [not found] <20140328151249.GJ7528@n2100.arm.linux.org.uk>
         [not found] ` <20140328151249.GJ7528-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
    2014-03-28 15:19   ` [PATCH 59/75] ARM: l2c: prima2: remove cache size override Russell King
         [not found]     ` <E1WTYZ6-0007Gr-6r-eh5Bv4kxaXIANfyc6IWni62ZND6+EDdj@public.gmane.org>
    2014-04-04 13:40       ` Barry Song
         [not found]         ` <CAGsJ_4yUNET5mWEUH-KEtA1ei49Fo2aC20Wmb-jXhs0vF7HSYw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
    2014-04-04 14:10           ` Russell King - ARM Linux
         [not found]             ` <20140404141034.GC7528-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
    2014-04-04 14:56               ` Barry Song
    2014-03-28 15:20 ` [PATCH 68/75] ARM: l2c: add L2C-310 power control DT properties Russell King
    2014-03-28 15:20 ` [PATCH 74/75] ARM: l2c: always enable low power modes Russell King
    2014-03-28 15:42   ` Rob Herring
    2014-03-28 15:51     ` Russell King - ARM Linux
    2014-04-04 16:53       ` Sören Brinkmann
    2014-04-04 19:17         ` Russell King - ARM Linux
    2014-04-04 20:47           ` Sören Brinkmann
    

    This is a public inbox, see mirroring instructions
    for how to clone and mirror all data and code used for this inbox;
    as well as URLs for NNTP newsgroup(s).