[Feature]add MT2731_MP2_MR2_SVN388 baseline version

Change-Id: Ief04314834b31e27effab435d3ca8ba33b499059
diff --git a/src/bsp/lk/lib/heap/page_alloc.c b/src/bsp/lk/lib/heap/page_alloc.c
new file mode 100644
index 0000000..15924b1
--- /dev/null
+++ b/src/bsp/lk/lib/heap/page_alloc.c
@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) 2015 Google, Inc. All rights reserved
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#include <lib/page_alloc.h>
+
+#include <debug.h>
+#include <assert.h>
+#include <string.h>
+#include <trace.h>
+#if WITH_KERNEL_VM
+#include <kernel/vm.h>
+#else
+#include <kernel/novm.h>
+#endif
+
+/* A simple page-aligned wrapper around the pmm or novm implementation of
+ * the underlying physical page allocator. Used by system heaps or any
+ * other user that wants pages of memory but doesn't want to use LK
+ * specific apis.
+ */
+#define LOCAL_TRACE 0
+
+#if WITH_STATIC_HEAP
+
+#error "fix static heap post page allocator and novm stuff"
+
+#if !defined(HEAP_START) || !defined(HEAP_LEN)
+#error WITH_STATIC_HEAP set but no HEAP_START or HEAP_LEN defined
+#endif
+
+#endif
+
+void *page_alloc(size_t pages) {
+#if WITH_KERNEL_VM
+    void *result = pmm_alloc_kpages(pages, NULL);
+    return result;
+#else
+    void *result = novm_alloc_pages(pages, NOVM_ARENA_ANY);
+    return result;
+#endif
+}
+
+void page_free(void *ptr, size_t pages) {
+#if WITH_KERNEL_VM
+    DEBUG_ASSERT(IS_PAGE_ALIGNED((uintptr_t)ptr));
+
+    pmm_free_kpages(ptr, pages);
+#else
+    novm_free_pages(ptr, pages);
+#endif
+}
+
+void *page_first_alloc(size_t *size_return) {
+#if WITH_KERNEL_VM
+    *size_return = PAGE_SIZE;
+    return page_alloc(1);
+#else
+    return novm_alloc_unaligned(size_return);
+#endif
+}
+
+#if LK_DEBUGLEVEL > 1
+#if WITH_LIB_CONSOLE
+
+#include <lib/console.h>
+
+static int cmd_page_alloc(int argc, const cmd_args *argv);
+static void page_alloc_dump(void);
+
+STATIC_COMMAND_START
+STATIC_COMMAND("page_alloc", "page allocator debug commands", &cmd_page_alloc)
+STATIC_COMMAND_END(page_alloc);
+
+static int cmd_page_alloc(int argc, const cmd_args *argv)
+{
+    if (argc != 2) {
+notenoughargs:
+        printf("not enough arguments\n");
+usage:
+        printf("usage:\n");
+        printf("\t%s info\n", argv[0].str);
+        return -1;
+    }
+
+    if (strcmp(argv[1].str, "info") == 0) {
+        page_alloc_dump();
+    } else {
+        printf("unrecognized command\n");
+        goto usage;
+    }
+
+    return 0;
+}
+
+static void page_alloc_dump(void)
+{
+#ifdef WITH_KERNEL_VM
+    dprintf(INFO, "Page allocator is based on pmm\n");
+#else
+    dprintf(INFO, "Page allocator is based on novm\n");
+#endif
+}
+
+#endif
+#endif