[PATCH v2 6/8] powerpc: introduce early_get_first_memblock_info
Kevin Hao
haokexin at gmail.com
Sun Aug 4 10:45:32 EST 2013
On Fri, Jul 26, 2013 at 07:18:01PM -0500, Scott Wood wrote:
> >+ * This function run before early_init_devtree, so we have to init
> >+ * initial_boot_params. Since early_init_dt_scan_memory_ppc will be
> >+ * executed again in early_init_devtree, we have to reinitialize the
> >+ * memblock data before return.
> >+ */
> >+void __init early_get_first_memblock_info(void *params,
> >phys_addr_t *size)
> >+{
> >+ /* Setup flat device-tree pointer */
> >+ initial_boot_params = params;
> >+
> >+ /* Scan memory nodes and rebuild MEMBLOCKs */
> >+ of_scan_flat_dt(early_init_dt_scan_root, NULL);
> >+ of_scan_flat_dt(early_init_dt_scan_memory_ppc, NULL);
> >+
> >+ if (size)
> >+ *size = first_memblock_size;
> >+
> >+ /* Undo what early_init_dt_scan_memory_ppc does to memblock */
> >+ memblock_reinit();
> >+}
> >+#endif
>
> Wouldn't it be simpler to set a flag so that
> early_init_dt_add_memory_arch() doesn't mess with memblocks on the
> first pass?
Do you mean something like this?
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c
index 9a69d2d..e861394 100644
--- a/arch/powerpc/kernel/prom.c
+++ b/arch/powerpc/kernel/prom.c
@@ -523,6 +523,10 @@ static int __init early_init_dt_scan_memory_ppc(unsigned long node,
void __init early_init_dt_add_memory_arch(u64 base, u64 size)
{
+#if defined(CONFIG_RELOCATABLE) && defined(CONFIG_FSL_BOOKE)
+ static int first_time = 1;
+#endif
+
#ifdef CONFIG_PPC64
if (iommu_is_off) {
if (base >= 0x80000000ul)
@@ -541,6 +545,13 @@ void __init early_init_dt_add_memory_arch(u64 base, u64 size)
}
/* Add the chunk to the MEMBLOCK list */
+
+#if defined(CONFIG_RELOCATABLE) && defined(CONFIG_FSL_BOOKE)
+ if (first_time) {
+ first_time = 0;
+ return;
+ }
+#endif
memblock_add(base, size);
}
Thanks,
Kevin
>
> -Scott
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 490 bytes
Desc: not available
URL: <http://lists.ozlabs.org/pipermail/linuxppc-dev/attachments/20130804/35ac179a/attachment-0001.sig>
More information about the Linuxppc-dev
mailing list