freebsd-nq/stand/fdt/fdt_platform.h

57 lines
2.1 KiB
C
Raw Normal View History

/*-
* Copyright (c) 2014 Andrew Turner <andrew@FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD$
*/
#ifndef FDT_PLATFORM_H
#define FDT_PLATFORM_H
struct fdt_header;
struct fdt_mem_region {
unsigned long start;
unsigned long size;
};
#define TMP_MAX_ETH 8
int fdt_copy(vm_offset_t);
void fdt_fixup_cpubusfreqs(unsigned long, unsigned long);
void fdt_fixup_ethernet(const char *, char *, int);
void fdt_fixup_memory(struct fdt_mem_region *, size_t);
void fdt_fixup_stdout(const char *);
Add FDT overlays support to ubldr FDT overlays is de-facto standard for describing expansion boards like Beaglebone capes or Raspberry Pi shields. The ides is to have basic DTB for base board and overlays DTB for shields/capes and to construct final DTB either using human-readable configuration or some self-discovery mechanism. I believe this approach can also be expanded to support dynamically loadable FPGA bitstreams on systems like Zedboard/Zybo. Overlaying process is simmilar to executable link process for binaries: each DTB has "exported" symbols and "undefined" symbols, the latter are resolved using information for the former obtained from base DTB or one of the overlays applied earlier (more rare case). This symbols information is not generated by standard dtc that FreeBSD has in base system, patched[1] version required to produces overlay-compatible blobs. So although DTB files generated by buildkernel do not support overlays there are enough vendor/community-provided DTB blobs ciruclating around to justify committing this change to ubldr. This commit introduces handler for "fdt_overlays" variable that can be defined either as a loader env variable or U-Boot env variable. fdt_overlays is comma-separated list of .dtbo files located in /boot/dtb/ directory along with base .dtb. ubldr loads files and applies them one-by-one to base .dtb and then passes result blob to the kernel. [1] https://github.com/RobertCNelson/dtc/commit/dd6a0533e846e8d5e690a618fa35cc15a6103efb Differential Revision: https://reviews.freebsd.org/D3180
2016-04-29 22:42:59 +00:00
void fdt_apply_overlays(void);
int fdt_load_dtb_addr(struct fdt_header *);
int fdt_load_dtb_file(const char *);
void fdt_load_dtb_overlays(const char *);
int fdt_setup_fdtp(void);
/* The platform library needs to implement these functions */
int fdt_platform_load_dtb(void);
void fdt_platform_fixups(void);
#endif /* FDT_PLATFORM_H */