Re: [PATCH 1/3] ARM: EXYNOS: pm_domain: Detect domain state on registration from DT
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
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
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
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
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
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
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
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