blob: 910d3bb8382973baa1d34934f7ae3082e1fc55c0 [file] [log] [blame]
/*
* Copyright 2019 The Hafnium Authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "hf/layout.h"
#include "hf/plat/boot_flow.h"
/**
* FDT was compiled into Hafnium. Return physical address of the `.plat.fdt`
* section of Hafnium image.
*/
paddr_t plat_boot_flow_get_fdt_addr(void)
{
return layout_fdt_begin();
}
/**
* Android boot flow does not use kernel arguments. Pass zero.
*/
uintreg_t plat_boot_flow_get_kernel_arg(void)
{
return 0;
}
/**
* Return the memory range of the RAM disk. This can be either:
* (a) the range of the '.plat.initrd' section, if it was compiled into the
* Hafnium image (INITRD_ADDR and INITRD_SIZE are zero), or
* (b) a fixed address range known at build time (INITRD_ADDR and INITRD_SIZE
* are not zero).
*/
bool plat_boot_flow_get_initrd_range(const struct fdt *fdt, paddr_t *begin,
paddr_t *end)
{
(void)fdt;
uintpaddr_t initrd_addr = (uintpaddr_t)(INITRD_ADDR);
size_t initrd_size = (size_t)(INITRD_SIZE);
if (initrd_addr == 0 || initrd_size == 0) {
*begin = layout_initrd_begin();
*end = layout_initrd_end();
} else {
*begin = pa_init(initrd_addr);
*end = pa_add(*begin, initrd_size);
}
return true;
}
/**
* Android boot flow does not change based on the updates.
*/
bool plat_boot_flow_update(struct mm_stage1_locked stage1_locked,
const struct manifest *manifest,
struct boot_params_update *p, struct memiter *cpio,
struct mpool *ppool)
{
(void)stage1_locked;
(void)manifest;
(void)p;
(void)cpio;
(void)ppool;
return true;
}