mirror of
https://github.com/ipxe/ipxe
synced 2025-12-11 05:51:37 +03:00
[fdtmem] Record size of accessible physical address space
The size of accessible physical address space will be required for the runtime memory map, not just at relocation time. Make this size an additional parameter to fdt_register() (matching the prototype for fdt_relocate()), and record the value for future reference. Note that we cannot simply store the limit in fdt_relocate() since it is called before .data is writable and before .bss is zeroed. Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
@@ -1088,6 +1088,7 @@ install:
|
||||
|
||||
/* Copy and register system device tree */
|
||||
phys_to_virt a0, s1
|
||||
mv a1, s4
|
||||
call fdtmem_register
|
||||
|
||||
/* Return to a virtual address in the relocated copy */
|
||||
|
||||
@@ -66,6 +66,9 @@ struct fdtmem_region {
|
||||
/** Region is usable as RAM */
|
||||
#define FDTMEM_RAM 0x0001
|
||||
|
||||
/** Size of accessible physical address space (or zero for no limit) */
|
||||
static size_t fdtmem_limit;
|
||||
|
||||
/**
|
||||
* Update memory region descriptor
|
||||
*
|
||||
@@ -360,13 +363,17 @@ physaddr_t fdtmem_relocate ( struct fdt_header *hdr, size_t limit ) {
|
||||
* Copy and register system device tree
|
||||
*
|
||||
* @v hdr FDT header
|
||||
* @v limit Size of accessible physical address space (or zero)
|
||||
* @ret rc Return status code
|
||||
*/
|
||||
int fdtmem_register ( struct fdt_header *hdr ) {
|
||||
int fdtmem_register ( struct fdt_header *hdr, size_t limit ) {
|
||||
struct fdt_header *copy;
|
||||
struct fdt fdt;
|
||||
int rc;
|
||||
|
||||
/* Record size of accessible physical address space */
|
||||
fdtmem_limit = limit;
|
||||
|
||||
/* Parse FDT to obtain length */
|
||||
if ( ( rc = fdt_parse ( &fdt, hdr, -1UL ) ) != 0 ) {
|
||||
DBGC ( colour, "FDTMEM could not parse FDT: %s\n",
|
||||
|
||||
@@ -13,6 +13,6 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
|
||||
#include <ipxe/fdt.h>
|
||||
|
||||
extern physaddr_t fdtmem_relocate ( struct fdt_header *hdr, size_t limit );
|
||||
extern int fdtmem_register ( struct fdt_header *hdr );
|
||||
extern int fdtmem_register ( struct fdt_header *hdr, size_t limit );
|
||||
|
||||
#endif /* _IPXE_FDTMEM_H */
|
||||
|
||||
Reference in New Issue
Block a user