Re: [PATCH 1/3] ARM: EXYNOS: pm_domain: Detect domain state on registration from DT

2012-09-08 Thread Thomas Abraham
On 6 September 2012 15:08, Tomasz Figa t.f...@samsung.com wrote:
 Initial state of power domains might vary on different boards and with
 different bootloaders. This patch adds detection of initial state of
 power domains when being registered from DT.

 Signed-off-by: Tomasz Figa t.f...@samsung.com
 Signed-off-by: Kyungmin Park kyungmin.p...@samsung.com
 ---
  Documentation/devicetree/bindings/arm/exynos/power_domain.txt | 4 
  arch/arm/mach-exynos/pm_domains.c | 8 +---
  2 files changed, 5 insertions(+), 7 deletions(-)

 diff --git a/Documentation/devicetree/bindings/arm/exynos/power_domain.txt 
 b/Documentation/devicetree/bindings/arm/exynos/power_domain.txt
 index 6528e21..843b546 100644
 --- a/Documentation/devicetree/bindings/arm/exynos/power_domain.txt
 +++ b/Documentation/devicetree/bindings/arm/exynos/power_domain.txt
 @@ -9,10 +9,6 @@ Required Properties:
  - reg: physical base address of the controller and length of memory mapped
  region.

 -Optional Properties:
 -- samsung,exynos4210-pd-off: Specifies that the power domain is in turned-off
 -state during boot and remains to be turned-off until explicitly 
 turned-on.
 -
  Example:

 lcd0: power-domain-lcd0 {
 diff --git a/arch/arm/mach-exynos/pm_domains.c 
 b/arch/arm/mach-exynos/pm_domains.c
 index c0bc83a..d1abc1a 100644
 --- a/arch/arm/mach-exynos/pm_domains.c
 +++ b/arch/arm/mach-exynos/pm_domains.c
 @@ -89,6 +89,7 @@ static __init int exynos_pm_dt_parse_domains(void)

 for_each_compatible_node(np, NULL, samsung,exynos4210-pd) {
 struct exynos_pm_domain *pd;
 +   int on;

 pd = kzalloc(sizeof(*pd), GFP_KERNEL);
 if (!pd) {
 @@ -97,14 +98,15 @@ static __init int exynos_pm_dt_parse_domains(void)
 return -ENOMEM;
 }

 -   if (of_get_property(np, samsung,exynos4210-pd-off, NULL))
 -   pd-is_off = true;
 pd-name = np-name;
 pd-base = of_iomap(np, 0);
 pd-pd.power_off = exynos_pd_power_off;
 pd-pd.power_on = exynos_pd_power_on;
 pd-pd.of_node = np;
 -   pm_genpd_init(pd-pd, NULL, false);
 +
 +   on = __raw_readl(pd-base + 0x4)  S5P_INT_LOCAL_PWR_EN;
 +
 +   pm_genpd_init(pd-pd, NULL, !on);
 }
 return 0;
  }

Acked-by: Thomas Abraham thomas.abra...@linaro.org
--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] ARM: dts: exynos4: Enable serial controllers on Origen and SMDKV310

2012-09-08 Thread Tomasz Figa
Hi Kgene,

On Saturday 08 of September 2012 11:36:30 Kukjin Kim wrote:
 Tomasz Figa wrote:
  This patch adds status override of serial nodes to enable used serial
  ports
  on Origen and SMDKV310 board.
 
 Well...I'm not sure about the status of Origen serial, but all of the
 serials are enabled on SMDKV310, is it right?

According to arrays of struct s3c2410_uartcfg in mach-origen.c and mach-
smdkv310.c, all the four serial ports are enabled on both boards.

--
Best regards,
Tomasz Figa

--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/3] ARM: EXYNOS: pm_domain: Fix power domain name initialization

2012-09-08 Thread Thomas Abraham
On 6 September 2012 15:08, Tomasz Figa t.f...@samsung.com wrote:
 This patch adds initialization of name field in generic power domain
 struct.

 Signed-off-by: Tomasz Figa t.f...@samsung.com
 Signed-off-by: Kyungmin Park kyungmin.p...@samsung.com
 ---
  arch/arm/mach-exynos/pm_domains.c | 3 ++-
  1 file changed, 2 insertions(+), 1 deletion(-)

 diff --git a/arch/arm/mach-exynos/pm_domains.c 
 b/arch/arm/mach-exynos/pm_domains.c
 index d1abc1a..5b7ce7e 100644
 --- a/arch/arm/mach-exynos/pm_domains.c
 +++ b/arch/arm/mach-exynos/pm_domains.c
 @@ -98,7 +98,8 @@ static __init int exynos_pm_dt_parse_domains(void)
 return -ENOMEM;
 }

 -   pd-name = np-name;
 +   pd-pd.name = kstrdup(np-name, GFP_KERNEL);
 +   pd-name = pd-pd.name;

Since device tree blob is always resident, why not just use np-name
instead of copying it to a new place?

 pd-base = of_iomap(np, 0);
 pd-pd.power_off = exynos_pd_power_off;
 pd-pd.power_on = exynos_pd_power_on;
 --
 1.7.12

--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2 4/5] ARM: EXYNOS: Increase maximum possible memory bank size to 512MiB

2012-09-08 Thread Tomasz Figa
Hi Kgene,

On Saturday 08 of September 2012 11:41:31 Kukjin Kim wrote:
 Tomasz Figa wrote:
  Some boards have larger memory banks than 256MiB. This patch increses
  maximum bank size for Exynos-based boards to 512MiB.
 
 Well...the meaning of SECTION_SIZE_BITS is a little bit different you
 know.
 
 Please refer to following thread.
 http://lists.infradead.org/pipermail/linux-arm-kernel/2010-July/020184.ht
 ml

Well, I agree, but the effect of this patch is that it is possible to have 
first bank (or rather section) up to 512MiB, in case of CONFIG_SPARSEMEM.

Still, we could go the other way and just define more smaller sections 
instead and simply drop this patch. (Assuming that the correspondence of 
sections and memory banks is irrelevant.)

--
Best regards,
Tomasz Figa

--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 3/3] ARM: EXYNOS: pm_domain: Bind devices to power domains using DT

2012-09-08 Thread Thomas Abraham
On 6 September 2012 15:08, Tomasz Figa t.f...@samsung.com wrote:
 This patch adds a way to specify bindings between devices and power
 domains using device tree.

 A device can be bound to particular power domain by adding a
 power-domain property containing a phandle to the domain. The device
 will be bound to the domain before binding a driver to it and unbound
 after unbinding a driver from it.

 Signed-off-by: Tomasz Figa t.f...@samsung.com
 Signed-off-by: Kyungmin Park kyungmin.p...@samsung.com
 ---
  .../bindings/arm/exynos/power_domain.txt   | 13 +++-
  arch/arm/mach-exynos/pm_domains.c  | 82 
 ++
  2 files changed, 94 insertions(+), 1 deletion(-)

 diff --git a/Documentation/devicetree/bindings/arm/exynos/power_domain.txt 
 b/Documentation/devicetree/bindings/arm/exynos/power_domain.txt
 index 843b546..8ed914f 100644
 --- a/Documentation/devicetree/bindings/arm/exynos/power_domain.txt
 +++ b/Documentation/devicetree/bindings/arm/exynos/power_domain.txt
 @@ -4,14 +4,25 @@ Exynos processors include support for multiple power 
 domains which are used
  to gate power to one or more peripherals on the processor.

  Required Properties:
 -- compatiable: should be one of the following.
 +- compatible: should be one of the following.
  * samsung,exynos4210-pd - for exynos4210 type power domain.
  - reg: physical base address of the controller and length of memory mapped
  region.

 +Node of a device using power domains must have a power-domain property 
 defined
 +with a phandle to respective power domain.
 +
  Example:

 lcd0: power-domain-lcd0 {
 compatible = samsung,exynos4210-pd;
 reg = 0x10023C00 0x10;
 };
 +
 +Example of the node using power domain:
 +
 +   node {
 +   /* ... */
 +   power-domain = lcd0;
 +   /* ... */
 +   };

Since the value of power-domain property is mostly samsung specific,
should this be samsung,power-domain ?

 diff --git a/arch/arm/mach-exynos/pm_domains.c 
 b/arch/arm/mach-exynos/pm_domains.c
 index 5b7ce7e..7b3b8a3 100644
 --- a/arch/arm/mach-exynos/pm_domains.c
 +++ b/arch/arm/mach-exynos/pm_domains.c
 @@ -19,6 +19,8 @@
  #include linux/pm_domain.h
  #include linux/delay.h
  #include linux/of_address.h
 +#include linux/of_platform.h
 +#include linux/sched.h

  #include mach/regs-pmu.h
  #include plat/devs.h
 @@ -83,14 +85,89 @@ static struct exynos_pm_domain PD = { 
   \
  }

  #ifdef CONFIG_OF
 +static void exynos_add_device_to_domain(struct exynos_pm_domain *pd,
 +   struct device *dev)
 +{
 +   int ret;
 +
 +   dev_dbg(dev, adding to power domain %s\n, pd-pd.name);
 +
 +   while(1) {
 +   ret = pm_genpd_add_device(pd-pd, dev);
 +   if (ret != -EAGAIN)
 +   break;
 +   cond_resched();
 +   }
 +
 +   pm_genpd_dev_need_restore(dev, true);
 +}
 +
 +static void exynos_remove_device_from_domain(struct device *dev)
 +{
 +   struct generic_pm_domain *genpd = dev_to_genpd(dev);
 +   int ret;
 +
 +   dev_dbg(dev, removing from power domain %s\n, genpd-name);
 +
 +   while(1) {
 +   ret = pm_genpd_remove_device(genpd, dev);
 +   if (ret != -EAGAIN)
 +   break;
 +   cond_resched();
 +   }
 +}
 +
 +static void exynos_read_domain_from_dt(struct device *dev)
 +{
 +   struct platform_device *pd_pdev;
 +   struct exynos_pm_domain *pd;
 +   struct device_node *node;
 +
 +   node = of_parse_phandle(dev-of_node, power-domain, 0);
 +   if (!node)
 +   return;
 +   pd_pdev = of_find_device_by_node(node);
 +   if (!pd_pdev)
 +   return;
 +   pd = platform_get_drvdata(pd_pdev);
 +   exynos_add_device_to_domain(pd, dev);
 +}

The function exynos_read_domain_from_dt does more than reading the
domain from dt. It associates a device with a power domain. So should
it be renamed accordingly?

 +
 +static int exynos_pm_notifier_call(struct notifier_block *nb,
 +   unsigned long event, void *data)
 +{
 +   struct device *dev = data;
 +
 +   switch (event) {
 +   case BUS_NOTIFY_BIND_DRIVER:
 +   if (dev-of_node)
 +   exynos_read_domain_from_dt(dev);
 +
 +   break;
 +
 +   case BUS_NOTIFY_UNBOUND_DRIVER:
 +   exynos_remove_device_from_domain(dev);
 +
 +   break;
 +   }
 +   return NOTIFY_DONE;
 +}
 +
 +static struct notifier_block platform_nb = {
 +   .notifier_call = exynos_pm_notifier_call,
 +};

All the functions above are so generic (or can be made generic with
minor modifications) that it can be placed outside of mach-exynos. Or
better still, reusable for all platforms.

 +
  static __init int exynos_pm_dt_parse_domains(void)
  {
 +   struct 

Re: [PATCH v2 5/5] ARM: Exynos: Add basic dts file for Samsung Trats board

2012-09-08 Thread Tomasz Figa
Hi Kgene,

On Saturday 08 of September 2012 11:47:15 Kukjin Kim wrote:
+   memory {
+   reg =  0x4000 0x2000
+   0x6000 0x2000;
+   };
   
   Why does this have to be split. Why not have a single entry with the
   size as 0x4000?
  
  The memory node corresponds to struct meminfo and each entry (with two
  values) makes one struct membank defining a memory bank.
 
 Well...
 
  I've been talking with Kyungmin about this. Originally bootloaders used
  to report 4 banks of 256 MiB, but it turned out that real bank
  configuration on Trats is 2 banks of 512 MiB.
 
 I think, following should ok here.
 
 memory {
   reg = 0x4000 0x4000;
 };

This will not boot with CONFIG_SPARSEMEM, unless maximum section size is 
increased to 1024MiB.

   Probably, the interrupts can be listed when we have pinctrl driver
   merged in Samsung tree.
  
  Right.
 
 Note, you can do it on top of samsung tree :-)

OK.

--
Best regards,
Tomasz Figa

--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/3] ARM: EXYNOS: pm_domain: Fix power domain name initialization

2012-09-08 Thread Tomasz Figa
Hi Thomas,

On Saturday 08 of September 2012 13:37:59 Thomas Abraham wrote:
  -   pd-name = np-name;
  +   pd-pd.name = kstrdup(np-name, GFP_KERNEL);
  +   pd-name = pd-pd.name;
 
 Since device tree blob is always resident, why not just use np-name
 instead of copying it to a new place?

The problem is that np-name is const, while pd-pd.name is not.

--
Best regards,
Tomasz Figa

--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 3/3] ARM: EXYNOS: pm_domain: Bind devices to power domains using DT

2012-09-08 Thread Tomasz Figa
Hi Thomas,

On Saturday 08 of September 2012 13:48:24 Thomas Abraham wrote:
  +Example of the node using power domain:
  +
  +   node {
  +   /* ... */
  +   power-domain = lcd0;
  +   /* ... */
  +   };
 
 Since the value of power-domain property is mostly samsung specific,
 should this be samsung,power-domain ?

Is there a convention of naming that defines such scheme? I have seen 
platform-specific properties without a prefix indicating the platform.

  +static void exynos_read_domain_from_dt(struct device *dev)
  +{
  +   struct platform_device *pd_pdev;
  +   struct exynos_pm_domain *pd;
  +   struct device_node *node;
  +
  +   node = of_parse_phandle(dev-of_node, power-domain, 0);
  +   if (!node)
  +   return;
  +   pd_pdev = of_find_device_by_node(node);
  +   if (!pd_pdev)
  +   return;
  +   pd = platform_get_drvdata(pd_pdev);
  +   exynos_add_device_to_domain(pd, dev);
  +}
 
 The function exynos_read_domain_from_dt does more than reading the
 domain from dt. It associates a device with a power domain. So should
 it be renamed accordingly?

Hmm, do you have an idea for a better name? I'm not good at inventing 
names.

  +
  +static int exynos_pm_notifier_call(struct notifier_block *nb,
  +   unsigned long event, void *data)
  +{
  +   struct device *dev = data;
  +
  +   switch (event) {
  +   case BUS_NOTIFY_BIND_DRIVER:
  +   if (dev-of_node)
  +   exynos_read_domain_from_dt(dev);
  +
  +   break;
  +
  +   case BUS_NOTIFY_UNBOUND_DRIVER:
  +   exynos_remove_device_from_domain(dev);
  +
  +   break;
  +   }
  +   return NOTIFY_DONE;
  +}
  +
  +static struct notifier_block platform_nb = {
  +   .notifier_call = exynos_pm_notifier_call,
  +};
 
 All the functions above are so generic (or can be made generic with
 minor modifications) that it can be placed outside of mach-exynos. Or
 better still, reusable for all platforms.

Right, I have considered this and even CC'ed Rafael with this patchset, but 
I forgot to mention about it in patch description.

Maybe I should send a separate RFC with a generic variant?

  
  --
  1.7.12
 
 This patch looks so nice. I learned a thing or two from this patch.
 Reviewed-by: Thomas Abraham thomas.abra...@linaro.org

Thanks ;)

--
Best regards,
Tomasz Figa

--
To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html