From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1Vtkgj-0004ov-Vp for mharc-grub-devel@gnu.org; Thu, 19 Dec 2013 15:59:21 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50476) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vtkga-0004ej-J1 for grub-devel@gnu.org; Thu, 19 Dec 2013 15:59:19 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VtkgT-0001UP-5k for grub-devel@gnu.org; Thu, 19 Dec 2013 15:59:12 -0500 Received: from mail-wi0-f170.google.com ([209.85.212.170]:62431) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VtkgS-0001UC-W9 for grub-devel@gnu.org; Thu, 19 Dec 2013 15:59:05 -0500 Received: by mail-wi0-f170.google.com with SMTP id hq4so7152072wib.5 for ; Thu, 19 Dec 2013 12:59:04 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=KNRETwlYfTQCiK4qeXTsxbwaA5Yj22vyKfNKS9rPPVs=; b=k+Qc4XxvX4G1q8Gf3pJR7WLWtHJPgRTthX46stLbJfJ+zhjXOZzfoa8G3tl1E6QYpo IRfKjvL+3Icnwz5YmPFYLhyzV2EYa/biarIGBfMgmAoi1aUf7ACoAoaU/VdSNEW/kZI7 t4BIxCc2K07K7rWSFxYmtlsaO5m+NqumIuBiix1BJoM+NaXXSJor9getGYpoi44b9Luy ra+rdp8dfHX7pydpE8x7LKL2FRuNxRM3DNQK+qcQazo0aG1MYv4TvB8+wYRD0jlAdsYY AdIHg5LBqQcCH82rqyHLkJ5OAul2V2O/SjXf4XUqtN1e94bjpi0EH4lwA4hLRa6qI8vT 0lJA== X-Gm-Message-State: ALoCoQlJvLEFDABBGQEm6LriyCVpLvdvw45t7EceGAjRmGhrl7q0AvWarHUE56OMFH9aU37Pybgq X-Received: by 10.194.93.193 with SMTP id cw1mr3617962wjb.38.1387486743949; Thu, 19 Dec 2013 12:59:03 -0800 (PST) Received: from mohikan.mushroom.smurfnet.nu (cpc4-cmbg17-2-0-cust71.5-4.cable.virginm.net. [86.14.224.72]) by mx.google.com with ESMTPSA id pl7sm931190wjc.16.2013.12.19.12.59.02 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 19 Dec 2013 12:59:02 -0800 (PST) From: Leif Lindholm To: grub-devel@gnu.org Subject: [PATCH v2 1/2] fdt: additions required for arm64 Linux loader Date: Thu, 19 Dec 2013 20:58:54 +0000 Message-Id: <1387486735-13461-1-git-send-email-leif.lindholm@linaro.org> X-Mailer: git-send-email 1.7.10.4 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.85.212.170 Cc: Leif Lindholm , patches@linaro.org X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: The development of GNU GRUB List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 19 Dec 2013 20:59:20 -0000 - Add grub_fdt_create_empty_tree() function. - Add 64-bit setprop. --- grub-core/lib/fdt.c | 29 +++++++++++++++++++++++++++++ include/grub/fdt.h | 20 ++++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/grub-core/lib/fdt.c b/grub-core/lib/fdt.c index 9f34dc7..57d6f30 100644 --- a/grub-core/lib/fdt.c +++ b/grub-core/lib/fdt.c @@ -423,3 +423,32 @@ int grub_fdt_set_prop (void *fdt, unsigned int nodeoffset, const char *name, grub_memcpy (prop + 3, val, len); return 0; } + +int +grub_fdt_create_empty_tree (void *fdt, unsigned int size) +{ + struct grub_fdt_empty_tree *et; + + if (size < GRUB_FDT_EMPTY_TREE_SZ) + return -1; + + grub_memset (fdt, 0, size); + et = fdt; + + et->empty_node.tree_end = grub_cpu_to_be32_compile_time (FDT_END); + et->empty_node.node_end = grub_cpu_to_be32_compile_time (FDT_END_NODE); + et->empty_node.node_start = grub_cpu_to_be32_compile_time (FDT_BEGIN_NODE); + ((struct grub_fdt_empty_tree *) fdt)->header.off_mem_rsvmap = + grub_cpu_to_be32 (ALIGN_UP (sizeof (grub_fdt_header_t), 8)); + + grub_fdt_set_off_dt_strings (fdt, sizeof (*et)); + grub_fdt_set_off_dt_struct (fdt, + sizeof (et->header) + sizeof (et->empty_rsvmap)); + grub_fdt_set_version (fdt, FDT_SUPPORTED_VERSION); + grub_fdt_set_last_comp_version (fdt, FDT_SUPPORTED_VERSION); + grub_fdt_set_size_dt_struct (fdt, sizeof (et->empty_node)); + grub_fdt_set_totalsize (fdt, size); + grub_fdt_set_magic (fdt, FDT_MAGIC); + + return 0; +} diff --git a/include/grub/fdt.h b/include/grub/fdt.h index 2ad0536..fae322e 100644 --- a/include/grub/fdt.h +++ b/include/grub/fdt.h @@ -36,6 +36,19 @@ typedef struct { grub_uint32_t size_dt_struct; } grub_fdt_header_t; +struct grub_fdt_empty_tree { + grub_fdt_header_t header; + grub_uint64_t empty_rsvmap[2]; + struct { + grub_uint32_t node_start; + grub_uint8_t name[1]; + grub_uint32_t node_end; + grub_uint32_t tree_end; + } empty_node; +}; + +#define GRUB_FDT_EMPTY_TREE_SZ sizeof (struct grub_fdt_empty_tree) + #define grub_fdt_get_header(fdt, field) \ grub_be_to_cpu32(((const grub_fdt_header_t *)(fdt))->field) #define grub_fdt_set_header(fdt, field, value) \ @@ -82,6 +95,7 @@ typedef struct { #define grub_fdt_set_size_dt_struct(fdt, value) \ grub_fdt_set_header(fdt, size_dt_struct, value) +int grub_fdt_create_empty_tree (void *fdt, unsigned int size); int grub_fdt_check_header (void *fdt, unsigned int size); int grub_fdt_find_subnode (const void *fdt, unsigned int parentoffset, const char *name); @@ -96,4 +110,10 @@ int grub_fdt_set_prop (void *fdt, unsigned int nodeoffset, const char *name, grub_fdt_set_prop ((fdt), (nodeoffset), (name), &_val, 4); \ }) +#define grub_fdt_set_prop64(fdt, nodeoffset, name, val) \ +({ \ + grub_uint64_t _val = grub_cpu_to_be64(val); \ + grub_fdt_set_prop ((fdt), (nodeoffset), (name), &_val, 8); \ +}) + #endif /* ! GRUB_FDT_HEADER */ -- 1.7.10.4