* [Patch v3 1/1] Add Odroid-XU (Exynos5410)
@ 2014-08-14 3:12 Suriyan Ramasami
2014-08-18 19:07 ` Julien Grall
0 siblings, 1 reply; 4+ messages in thread
From: Suriyan Ramasami @ 2014-08-14 3:12 UTC (permalink / raw)
To: xen-devel
Cc: keir, ian.campbell, tim, julien.grall, ian.jackson, jbeulich,
Suriyan Ramasami
XEN/ARM: Add Odroid-XU support
The Odroid-XU from hardkernel is an Exynos 5410 based board.
This patch adds support to the above said board.
Signed-off-by: Suriyan Ramasami <suriyan.r@gmail.com>
---
Changes between versions as follows:
v3:
a. Separate commit message and change log.
b. Define odroid-xu as a separate platform API.
c. Use mainline linux's way of retrieving sysram from DT.
d. Use mainline linux's way of bringing up secondary CPUs.
e. Keep the #defines in the local C file.
f. Bringing up newer Exynos platforms should be easier.
v2:
a. Set startup address in exynos5_smp_init() only once.
b. Turn on power to each core in exynos5_cpu_up().
c. Create single PLATFORM with smp_init, and cpu_up which dispatches
to correct code.
d. Check return code of io_remap for power.
e. Use read* write* calls for MMIO mapped addresses.
f. Xen coding style changes.
v1: Add Odroid-XU board support
---
xen/arch/arm/platforms/exynos5.c | 167 ++++++++++++++++++++++++++++++++++++---
1 file changed, 154 insertions(+), 13 deletions(-)
diff --git a/xen/arch/arm/platforms/exynos5.c b/xen/arch/arm/platforms/exynos5.c
index b65c2c2..965ac8e 100644
--- a/xen/arch/arm/platforms/exynos5.c
+++ b/xen/arch/arm/platforms/exynos5.c
@@ -23,10 +23,16 @@
#include <xen/domain_page.h>
#include <xen/mm.h>
#include <xen/vmap.h>
+#include <xen/delay.h>
#include <asm/platforms/exynos5.h>
#include <asm/platform.h>
#include <asm/io.h>
+#define EXYNOS_ARM_CORE0_CONFIG 0x2000
+#define EXYNOS_ARM_CORE_CONFIG(_nr) (0x80 * (_nr))
+#define EXYNOS_ARM_CORE_STATUS(_nr) (EXYNOS_ARM_CORE_CONFIG(_nr) + 0x4)
+#define S5P_CORE_LOCAL_PWR_EN 0x3
+
static int exynos5_init_time(void)
{
uint32_t reg;
@@ -51,7 +57,7 @@ static int exynos5_init_time(void)
}
/* Additional mappings for dom0 (Not in the DTS) */
-static int exynos5_specific_mapping(struct domain *d)
+static int exynos5250_specific_mapping(struct domain *d)
{
/* Map the chip ID */
map_mmio_regions(d, paddr_to_pfn(EXYNOS5_PA_CHIPID), 1,
@@ -64,11 +70,16 @@ static int exynos5_specific_mapping(struct domain *d)
return 0;
}
-static int __init exynos5_smp_init(void)
+static int __init exynos5250_cpu_up(int cpu)
+{
+ return cpu_up_send_sgi(cpu);
+}
+
+static int __init exynos_smp_init(unsigned long pa_sysram)
{
void __iomem *sysram;
- sysram = ioremap_nocache(S5P_PA_SYSRAM, PAGE_SIZE);
+ sysram = ioremap_nocache(pa_sysram, PAGE_SIZE);
if ( !sysram )
{
dprintk(XENLOG_ERR, "Unable to map exynos5 MMIO\n");
@@ -84,6 +95,121 @@ static int __init exynos5_smp_init(void)
return 0;
}
+static int __init exynos5250_smp_init(void)
+{
+ return exynos_smp_init(S5P_PA_SYSRAM);
+}
+
+static int __init exynos5_smp_init(void)
+{
+ struct dt_device_node *node;
+ u64 sysram_ns_base_addr = 0;
+ u64 size;
+ int rc;
+
+ node = dt_find_compatible_node(NULL, NULL, "samsung,exynos4210-sysram-ns");
+ if ( !node ) {
+ dprintk(XENLOG_ERR, "samsung,exynos4210-sysram-ns missing in DT\n");
+ return -ENXIO;
+ }
+
+ rc = dt_device_get_address(node, 0, &sysram_ns_base_addr, &size);
+ if (rc) {
+ dprintk(XENLOG_ERR, "Error in \"samsung,exynos4210-sysram-ns\"\n");
+ return -ENXIO;
+ }
+
+ dprintk(XENLOG_INFO, "sysram_ns_base_addr: %08x size: %08x\n",
+ (unsigned int) sysram_ns_base_addr, (unsigned int) size);
+
+ return exynos_smp_init(sysram_ns_base_addr + 0x1c);
+}
+
+static int exynos_cpu_power_state(void __iomem *power, int cpu)
+{
+ return readl(power + EXYNOS_ARM_CORE_STATUS(cpu)) &
+ S5P_CORE_LOCAL_PWR_EN;
+}
+
+static void exynos_cpu_set_power_up(void __iomem *power, int cpu)
+{
+ writel(S5P_CORE_LOCAL_PWR_EN,
+ power + EXYNOS_ARM_CORE_CONFIG(cpu));
+}
+
+static int exynos_cpu_power_up(void __iomem *power, int cpu)
+{
+ int timeout;
+
+ if ( !exynos_cpu_power_state(power, cpu) ) {
+ exynos_cpu_set_power_up(power, cpu);
+ timeout = 10;
+
+ /* wait max 10 ms until cpu is on */
+ while (exynos_cpu_power_state(power, cpu) != S5P_CORE_LOCAL_PWR_EN) {
+ if (timeout-- == 0)
+ break;
+
+ mdelay(1);
+ }
+
+ if (timeout == 0) {
+ dprintk(XENLOG_ERR, "CPU%d power enable failed", cpu);
+ return -ETIMEDOUT;
+ }
+ }
+ return 0;
+}
+
+static int exynos5_cpu_up(int cpu)
+{
+ static const struct dt_device_match exynos_dt_pmu_matches[] __initconst =
+ {
+ DT_MATCH_COMPATIBLE("samsung,exynos5250-pmu"),
+ DT_MATCH_COMPATIBLE("samsung,exynos5410-pmu"),
+ DT_MATCH_COMPATIBLE("samsung,exynos5420-pmu"),
+ DT_MATCH_COMPATIBLE("samsung,exynos5422-pmu"),
+ { /*sentinel*/ },
+ };
+ void __iomem *power;
+ u64 power_base_addr = 0;
+ u64 size;
+ struct dt_device_node *node;
+ int rc;
+
+ node = dt_find_matching_node(NULL, exynos_dt_pmu_matches);
+ if ( !node ) {
+ dprintk(XENLOG_ERR, "samsung,exynos5XXX-pmu missing in DT\n");
+ return -ENXIO;
+ }
+
+ rc = dt_device_get_address(node, 0, &power_base_addr, &size);
+ if ( rc ) {
+ dprintk(XENLOG_ERR, "Error in \"samsung,exynos5XXXX-pmu\"\n");
+ return -ENXIO;
+ }
+
+ dprintk(XENLOG_INFO, "power_base_addr: %08x size: %08x\n",
+ (unsigned int) power_base_addr, (unsigned int) size);
+
+ power = ioremap_nocache(power_base_addr +
+ EXYNOS_ARM_CORE0_CONFIG, PAGE_SIZE);
+ if ( !power )
+ {
+ dprintk(XENLOG_ERR, "Unable to map power MMIO\n");
+ return -EFAULT;
+ }
+
+ rc = exynos_cpu_power_up(power, cpu);
+ if ( rc ) {
+ return -ETIMEDOUT;
+ }
+
+ iounmap(power);
+
+ return cpu_up_send_sgi(cpu);
+}
+
static void exynos5_reset(void)
{
void __iomem *pmu;
@@ -101,12 +227,6 @@ static void exynos5_reset(void)
iounmap(pmu);
}
-static const char * const exynos5_dt_compat[] __initconst =
-{
- "samsung,exynos5250",
- NULL
-};
-
static const struct dt_device_match exynos5_blacklist_dev[] __initconst =
{
/* Multi core Timer
@@ -117,12 +237,33 @@ static const struct dt_device_match exynos5_blacklist_dev[] __initconst =
{ /* sentinel */ },
};
-PLATFORM_START(exynos5, "SAMSUNG EXYNOS5")
- .compatible = exynos5_dt_compat,
+static const char * const exynos5250_dt_compat[] __initconst =
+{
+ "samsung,exynos5250",
+ NULL
+};
+
+static const char * const exynos5410_dt_compat[] __initconst =
+{
+ "samsung,exynos5410",
+ NULL
+};
+
+PLATFORM_START(exynos5250, "SAMSUNG EXYNOS5250")
+ .compatible = exynos5250_dt_compat,
+ .init_time = exynos5_init_time,
+ .specific_mapping = exynos5250_specific_mapping,
+ .smp_init = exynos5250_smp_init,
+ .cpu_up = exynos5250_cpu_up,
+ .reset = exynos5_reset,
+ .blacklist_dev = exynos5_blacklist_dev,
+PLATFORM_END
+
+PLATFORM_START(exynos5410, "SAMSUNG EXYNOS5410")
+ .compatible = exynos5410_dt_compat,
.init_time = exynos5_init_time,
- .specific_mapping = exynos5_specific_mapping,
.smp_init = exynos5_smp_init,
- .cpu_up = cpu_up_send_sgi,
+ .cpu_up = exynos5_cpu_up,
.reset = exynos5_reset,
.blacklist_dev = exynos5_blacklist_dev,
PLATFORM_END
--
1.9.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [Patch v3 1/1] Add Odroid-XU (Exynos5410)
2014-08-14 3:12 [Patch v3 1/1] Add Odroid-XU (Exynos5410) Suriyan Ramasami
@ 2014-08-18 19:07 ` Julien Grall
2014-08-18 22:21 ` Suriyan Ramasami
0 siblings, 1 reply; 4+ messages in thread
From: Julien Grall @ 2014-08-18 19:07 UTC (permalink / raw)
To: Suriyan Ramasami, xen-devel
Cc: keir, ian.jackson, ian.campbell, jbeulich, tim
Hello Suriyan,
On 13/08/14 22:12, Suriyan Ramasami wrote:
> -static int __init exynos5_smp_init(void)
> +static int __init exynos5250_cpu_up(int cpu)
> +{
> + return cpu_up_send_sgi(cpu);
> +}
> +
This is not necessary. You can directly assign cpu_up_send_sgi to the
cpu_up callback of the platform structure.
> +static int __init exynos_smp_init(unsigned long pa_sysram)
paddr_t pa_sysram
> {
> void __iomem *sysram;
>
> - sysram = ioremap_nocache(S5P_PA_SYSRAM, PAGE_SIZE);
> + sysram = ioremap_nocache(pa_sysram, PAGE_SIZE);
> if ( !sysram )
> {
> dprintk(XENLOG_ERR, "Unable to map exynos5 MMIO\n");
> @@ -84,6 +95,121 @@ static int __init exynos5_smp_init(void)
> return 0;
> }
>
> +static int __init exynos5250_smp_init(void)
> +{
> + return exynos_smp_init(S5P_PA_SYSRAM);
> +}
I would rename S5P_PA_SYSRAM and EXYNOS5_* to something specific to
exynos 5250. It would make clear that new platform should use the device
tree to get information.
> +static int __init exynos5_smp_init(void)
> +{
> + struct dt_device_node *node;
> + u64 sysram_ns_base_addr = 0;
> + u64 size;
> + int rc;
> +
> + node = dt_find_compatible_node(NULL, NULL, "samsung,exynos4210-sysram-ns");
> + if ( !node ) {
Coding style:
if ( !node )
{
> + dprintk(XENLOG_ERR, "samsung,exynos4210-sysram-ns missing in DT\n");
The coding style doesn't allow to use hard tab.
> + return -ENXIO;
> + }
> +
> + rc = dt_device_get_address(node, 0, &sysram_ns_base_addr, &size);
> + if (rc) {
Coding style:
if ( rc )
{
> + dprintk(XENLOG_ERR, "Error in \"samsung,exynos4210-sysram-ns\"\n");
> + return -ENXIO;
> + }
> +
> + dprintk(XENLOG_INFO, "sysram_ns_base_addr: %08x size: %08x\n",
> + (unsigned int) sysram_ns_base_addr, (unsigned int) size);
Why do you cast to unsigned int rather than right printf format?
> +
> + return exynos_smp_init(sysram_ns_base_addr + 0x1c);
> +}
> +
> +static int exynos_cpu_power_state(void __iomem *power, int cpu)
> +{
> + return readl(power + EXYNOS_ARM_CORE_STATUS(cpu)) &
> + S5P_CORE_LOCAL_PWR_EN;
Please correctly align the second line to the open branch. I.e:
return readl(power ....
S5P_CORE_...
Also, why did you replace the __raw_readl by a readl? The former one
doesn't use barrier while the latter does.
As Linux is using the former one, I don't understand why we would
require barrier on Xen.
> +}
> +
> +static void exynos_cpu_set_power_up(void __iomem *power, int cpu)
> +{
> + writel(S5P_CORE_LOCAL_PWR_EN,
> + power + EXYNOS_ARM_CORE_CONFIG(cpu));
Same here for both coding style and writel.
> +}
> +
> +static int exynos_cpu_power_up(void __iomem *power, int cpu)
> +{
> + int timeout;
unsigned int.
> +
> + if ( !exynos_cpu_power_state(power, cpu) ) {
Coding style:
if ( ... )
{
> + exynos_cpu_set_power_up(power, cpu);
I would keep the same name as Linux ie exynos_cpu_power_up to avoid
confusion and make backporting easier.
> + timeout = 10;
> +
> + /* wait max 10 ms until cpu is on */
> + while (exynos_cpu_power_state(power, cpu) != S5P_CORE_LOCAL_PWR_EN) {
Coding style:
while ( ... )
{
> + if (timeout-- == 0)
> + break;
Coding style:
if ( ... )
> +
> + mdelay(1);
> + }
> +
> + if (timeout == 0) {
Coding style:
if ( ... )
{
> + dprintk(XENLOG_ERR, "CPU%d power enable failed", cpu);
> + return -ETIMEDOUT;
> + }
> + }
> + return 0;
> +}
> +
> +static int exynos5_cpu_up(int cpu)
> +{
> + static const struct dt_device_match exynos_dt_pmu_matches[] __initconst =
> + {
[..]
> + DT_MATCH_COMPATIBLE("samsung,exynos5422-pmu"),
Where does this compatible come from? I don't find any reference in
Linux upstream documentation
(Documentation/devicetree/bindings/arm/samsung/pmu.txt).
> + { /*sentinel*/ },
> + };
> + void __iomem *power;
> + u64 power_base_addr = 0;
> + u64 size;
> + struct dt_device_node *node;
> + int rc;
> +
> + node = dt_find_matching_node(NULL, exynos_dt_pmu_matches);
> + if ( !node ) {
Coding style:
if ( !node )
{
> + dprintk(XENLOG_ERR, "samsung,exynos5XXX-pmu missing in DT\n");
> + return -ENXIO;
> + }
> +
> + rc = dt_device_get_address(node, 0, &power_base_addr, &size);
> + if ( rc ) {
Coding style
if ( rc )
{
> + dprintk(XENLOG_ERR, "Error in \"samsung,exynos5XXXX-pmu\"\n");
> + return -ENXIO;
> + }
> +
> + dprintk(XENLOG_INFO, "power_base_addr: %08x size: %08x\n",
I would use XENLOG_DEBUG
> + (unsigned int) power_base_addr, (unsigned int) size);
> +
> + power = ioremap_nocache(power_base_addr +
> + EXYNOS_ARM_CORE0_CONFIG, PAGE_SIZE);
> + if ( !power )
> + {
> + dprintk(XENLOG_ERR, "Unable to map power MMIO\n");
> + return -EFAULT;
> + }
> +
> + rc = exynos_cpu_power_up(power, cpu);
> + if ( rc ) {
> + return -ETIMEDOUT;
If exynos_cpu_power_up is failing you never unmap the power region.
> +PLATFORM_START(exynos5410, "SAMSUNG EXYNOS5410")
Nothing looks 5410 specific in structure. I would rename it to exynos5,
"SAMSUNG EXYNOS5". So if someone want to add a new exynos5 (such as the
octa) it wouldn't have to rename this platform.
Regards,
--
Julien Grall
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Patch v3 1/1] Add Odroid-XU (Exynos5410)
2014-08-18 19:07 ` Julien Grall
@ 2014-08-18 22:21 ` Suriyan Ramasami
2014-08-19 21:46 ` Julien Grall
0 siblings, 1 reply; 4+ messages in thread
From: Suriyan Ramasami @ 2014-08-18 22:21 UTC (permalink / raw)
To: Julien Grall
Cc: keir, Ian Campbell, ian.jackson, Tim Deegan,
xen-devel@lists.xen.org, Jan Beulich
Thank you Julien for your review, much appreciated!
On Mon, Aug 18, 2014 at 12:07 PM, Julien Grall <julien.grall@linaro.org> wrote:
> Hello Suriyan,
>
>
> On 13/08/14 22:12, Suriyan Ramasami wrote:
>>
>> -static int __init exynos5_smp_init(void)
>> +static int __init exynos5250_cpu_up(int cpu)
>> +{
>> + return cpu_up_send_sgi(cpu);
>> +}
>> +
>
>
> This is not necessary. You can directly assign cpu_up_send_sgi to the cpu_up
> callback of the platform structure.
>
I shall do that.
>
>> +static int __init exynos_smp_init(unsigned long pa_sysram)
>
>
> paddr_t pa_sysram
>
>
>> {
>> void __iomem *sysram;
>>
>> - sysram = ioremap_nocache(S5P_PA_SYSRAM, PAGE_SIZE);
>> + sysram = ioremap_nocache(pa_sysram, PAGE_SIZE);
>> if ( !sysram )
>> {
>> dprintk(XENLOG_ERR, "Unable to map exynos5 MMIO\n");
>> @@ -84,6 +95,121 @@ static int __init exynos5_smp_init(void)
>> return 0;
>> }
>>
>> +static int __init exynos5250_smp_init(void)
>> +{
>> + return exynos_smp_init(S5P_PA_SYSRAM);
>> +}
>
>
> I would rename S5P_PA_SYSRAM and EXYNOS5_* to something specific to exynos
> 5250. It would make clear that new platform should use the device tree to
> get information.
>
I shall rename S5P_PA_SYSRAM to EXYNOS5250_PA_SYSRAM.
Do you also want me to rename the other ones, like EXYNOS5_MCT_*
defines in the exynos5.h header file as well?
If so, do you want me to get rid of exynos5.h and dump all the defines
in exynos5.c ?
>
>> +static int __init exynos5_smp_init(void)
>> +{
>> + struct dt_device_node *node;
>> + u64 sysram_ns_base_addr = 0;
>> + u64 size;
>> + int rc;
>> +
>> + node = dt_find_compatible_node(NULL, NULL,
>> "samsung,exynos4210-sysram-ns");
>> + if ( !node ) {
>
>
> Coding style:
>
>
> if ( !node )
> {
>
I shall correct this.
>> + dprintk(XENLOG_ERR, "samsung,exynos4210-sysram-ns missing in
>> DT\n");
>
>
> The coding style doesn't allow to use hard tab.
>
>
I shall correct this too.
>> + return -ENXIO;
>> + }
>> +
>> + rc = dt_device_get_address(node, 0, &sysram_ns_base_addr, &size);
>> + if (rc) {
>
>
> Coding style:
>
> if ( rc )
> {
>
and this one as well.
>> + dprintk(XENLOG_ERR, "Error in
>> \"samsung,exynos4210-sysram-ns\"\n");
>>
>> + return -ENXIO;
>> + }
>> +
>> + dprintk(XENLOG_INFO, "sysram_ns_base_addr: %08x size: %08x\n",
>> + (unsigned int) sysram_ns_base_addr, (unsigned int) size);
>
>
> Why do you cast to unsigned int rather than right printf format?
>
Cause I am an idiot :-) I shall correct this to use %016llx.
>
>> +
>> + return exynos_smp_init(sysram_ns_base_addr + 0x1c);
>> +}
>> +
>> +static int exynos_cpu_power_state(void __iomem *power, int cpu)
>> +{
>> + return readl(power + EXYNOS_ARM_CORE_STATUS(cpu)) &
>> + S5P_CORE_LOCAL_PWR_EN;
>
>
> Please correctly align the second line to the open branch. I.e:
>
> return readl(power ....
> S5P_CORE_...
>
I shall do so.
> Also, why did you replace the __raw_readl by a readl? The former one doesn't
> use barrier while the latter does.
>
> As Linux is using the former one, I don't understand why we would require
> barrier on Xen.
>
I shall use __raw_readl()
>
>> +}
>> +
>> +static void exynos_cpu_set_power_up(void __iomem *power, int cpu)
>> +{
>> + writel(S5P_CORE_LOCAL_PWR_EN,
>> + power + EXYNOS_ARM_CORE_CONFIG(cpu));
>
>
> Same here for both coding style and writel.
>
Shall correct them both.
>
>> +}
>> +
>> +static int exynos_cpu_power_up(void __iomem *power, int cpu)
>> +{
>> + int timeout;
>
>
> unsigned int.
>
>
I shall correct this one too.
>> +
>> + if ( !exynos_cpu_power_state(power, cpu) ) {
>
>
> Coding style:
>
> if ( ... )
> {
>
This one as well.
>> + exynos_cpu_set_power_up(power, cpu);
>
>
> I would keep the same name as Linux ie exynos_cpu_power_up to avoid
> confusion and make backporting easier.
>
OK, I shall make it exynos_cpu_power_up() like in linux, and the
caller exynos5_cpu_powerup().
>
>> + timeout = 10;
>> +
>> + /* wait max 10 ms until cpu is on */
>> + while (exynos_cpu_power_state(power, cpu) !=
>> S5P_CORE_LOCAL_PWR_EN) {
>
>
> Coding style:
>
> while ( ... )
>
> {
>
Shall correct this.
>> + if (timeout-- == 0)
>> + break;
>
>
> Coding style:
>
> if ( ... )
>
>
>> +
>> + mdelay(1);
>> + }
>> +
>> + if (timeout == 0) {
>
>
> Coding style:
>
> if ( ... )
>
> {
>
Sorry about so many coding style errors. Shall correct this.
>> + dprintk(XENLOG_ERR, "CPU%d power enable failed", cpu);
>> + return -ETIMEDOUT;
>> + }
>> + }
>> + return 0;
>> +}
>> +
>> +static int exynos5_cpu_up(int cpu)
>> +{
>> + static const struct dt_device_match exynos_dt_pmu_matches[]
>> __initconst =
>> + {
>
>
> [..]
>
>> + DT_MATCH_COMPATIBLE("samsung,exynos5422-pmu"),
>
>
> Where does this compatible come from? I don't find any reference in Linux
> upstream documentation
> (Documentation/devicetree/bindings/arm/samsung/pmu.txt).
>
This was my wrong assumption. I wanted to add odroid xu3's pmu in
this, but as you pointed out there is no exynos5422-pmu. Odroid XU3
uses the "exysno5420-pmu" compatibility strings. I shall remove this
line.
>
>> + { /*sentinel*/ },
>> + };
>> + void __iomem *power;
>> + u64 power_base_addr = 0;
>> + u64 size;
>> + struct dt_device_node *node;
>> + int rc;
>> +
>> + node = dt_find_matching_node(NULL, exynos_dt_pmu_matches);
>> + if ( !node ) {
>
>
> Coding style:
>
>
> if ( !node )
> {
>
Shall correct it.
>> + dprintk(XENLOG_ERR, "samsung,exynos5XXX-pmu missing in DT\n");
>> + return -ENXIO;
>> + }
>> +
>> + rc = dt_device_get_address(node, 0, &power_base_addr, &size);
>> + if ( rc ) {
>
>
> Coding style
>
> if ( rc )
> {
>
Shall correct this one too.
>> + dprintk(XENLOG_ERR, "Error in \"samsung,exynos5XXXX-pmu\"\n");
>> + return -ENXIO;
>> + }
>> +
>> + dprintk(XENLOG_INFO, "power_base_addr: %08x size: %08x\n",
>
>
> I would use XENLOG_DEBUG
>
>
Shall change it.
>> + (unsigned int) power_base_addr, (unsigned int) size);
>> +
>> + power = ioremap_nocache(power_base_addr +
>> + EXYNOS_ARM_CORE0_CONFIG, PAGE_SIZE);
>> + if ( !power )
>> + {
>> + dprintk(XENLOG_ERR, "Unable to map power MMIO\n");
>> + return -EFAULT;
>> + }
>> +
>> + rc = exynos_cpu_power_up(power, cpu);
>> + if ( rc ) {
>> + return -ETIMEDOUT;
>
>
> If exynos_cpu_power_up is failing you never unmap the power region.
>
I shall add a iounmap(power) on failure.
>> +PLATFORM_START(exynos5410, "SAMSUNG EXYNOS5410")
>
>
> Nothing looks 5410 specific in structure. I would rename it to exynos5,
> "SAMSUNG EXYNOS5". So if someone want to add a new exynos5 (such as the
> octa) it wouldn't have to rename this platform.
>
Shall rename it
> Regards,
>
> --
> Julien Grall
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Patch v3 1/1] Add Odroid-XU (Exynos5410)
2014-08-18 22:21 ` Suriyan Ramasami
@ 2014-08-19 21:46 ` Julien Grall
0 siblings, 0 replies; 4+ messages in thread
From: Julien Grall @ 2014-08-19 21:46 UTC (permalink / raw)
To: Suriyan Ramasami
Cc: keir, Ian Campbell, ian.jackson, Tim Deegan,
xen-devel@lists.xen.org, Jan Beulich
Hello,
On 18/08/14 17:21, Suriyan Ramasami wrote:
>> I would rename S5P_PA_SYSRAM and EXYNOS5_* to something specific to exynos
>> 5250. It would make clear that new platform should use the device tree to
>> get information.
>>
> I shall rename S5P_PA_SYSRAM to EXYNOS5250_PA_SYSRAM.
> Do you also want me to rename the other ones, like EXYNOS5_MCT_*
> defines in the exynos5.h header file as well?
You are using EXYNOS5_MCT_* on both board so I don't think you have to
rename it. The best things would be using the device tree rather than an
hardcoded value.
But it's not the scope of this patch :).
> If so, do you want me to get rid of exynos5.h and dump all the defines
> in exynos5.c ?
It would be nice but not necessary for this patch.
Regards,
--
Julien Grall
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2014-08-19 21:46 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-08-14 3:12 [Patch v3 1/1] Add Odroid-XU (Exynos5410) Suriyan Ramasami
2014-08-18 19:07 ` Julien Grall
2014-08-18 22:21 ` Suriyan Ramasami
2014-08-19 21:46 ` Julien Grall
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).