int ps3_repository_read_region_total(u64 *region_total);
 int ps3_repository_read_mm_info(u64 *rm_base, u64 *rm_size,
        u64 *region_total);
+int ps3_repository_read_highmem_region_count(unsigned int *region_count);
+int ps3_repository_read_highmem_base(unsigned int region_index,
+       u64 *highmem_base);
+int ps3_repository_read_highmem_size(unsigned int region_index,
+       u64 *highmem_size);
+int ps3_repository_read_highmem_info(unsigned int region_index,
+       u64 *highmem_base, u64 *highmem_size);
 
 int ps3_repository_write_highmem_region_count(unsigned int region_count);
 int ps3_repository_write_highmem_base(unsigned int region_index,
 
                : ps3_repository_read_region_total(region_total);
 }
 
+/**
+ * ps3_repository_read_highmem_region_count - Read the number of highmem regions
+ *
+ * Bootloaders must arrange the repository nodes such that regions are indexed
+ * with a region_index from 0 to region_count-1.
+ */
+
+int ps3_repository_read_highmem_region_count(unsigned int *region_count)
+{
+       int result;
+       u64 v1 = 0;
+
+       result = read_node(PS3_LPAR_ID_CURRENT,
+               make_first_field("highmem", 0),
+               make_field("region", 0),
+               make_field("count", 0),
+               0,
+               &v1, NULL);
+       *region_count = v1;
+       return result;
+}
+
+
+int ps3_repository_read_highmem_base(unsigned int region_index,
+       u64 *highmem_base)
+{
+       return read_node(PS3_LPAR_ID_CURRENT,
+               make_first_field("highmem", 0),
+               make_field("region", region_index),
+               make_field("base", 0),
+               0,
+               highmem_base, NULL);
+}
+
+int ps3_repository_read_highmem_size(unsigned int region_index,
+       u64 *highmem_size)
+{
+       return read_node(PS3_LPAR_ID_CURRENT,
+               make_first_field("highmem", 0),
+               make_field("region", region_index),
+               make_field("size", 0),
+               0,
+               highmem_size, NULL);
+}
+
+/**
+ * ps3_repository_read_highmem_info - Read high memory region info
+ * @region_index: Region index, {0,..,region_count-1}.
+ * @highmem_base: High memory base address.
+ * @highmem_size: High memory size.
+ *
+ * Bootloaders that preallocate highmem regions must place the
+ * region info into the repository at these well known nodes.
+ */
+
+int ps3_repository_read_highmem_info(unsigned int region_index,
+       u64 *highmem_base, u64 *highmem_size)
+{
+       int result;
+
+       *highmem_base = 0;
+       result = ps3_repository_read_highmem_base(region_index, highmem_base);
+       return result ? result
+               : ps3_repository_read_highmem_size(region_index, highmem_size);
+}
+
 /**
  * ps3_repository_read_num_spu_reserved - Number of physical spus reserved.
  * @num_spu: Number of physical spus.