mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-09-18 02:33:21 +09:00
8dbb7444eb
At present if libfdt is not available binman can't do anything much. Improve the situation a little. Ideally there should be a test to cover this, but I'm not quite sure how to fake this. Signed-off-by: Simon Glass <sjg@chromium.org> (fixed up missing ReadChildData() enty test)
67 lines
2.2 KiB
Python
67 lines
2.2 KiB
Python
# SPDX-License-Identifier: GPL-2.0+
|
|
# Copyright (c) 2018 Google, Inc
|
|
# Written by Simon Glass <sjg@chromium.org>
|
|
#
|
|
# Entry-type module for U-Boot device tree files
|
|
#
|
|
|
|
from entry import Entry
|
|
from blob import Entry_blob
|
|
|
|
class Entry_blob_dtb(Entry_blob):
|
|
"""A blob that holds a device tree
|
|
|
|
This is a blob containing a device tree. The contents of the blob are
|
|
obtained from the list of available device-tree files, managed by the
|
|
'state' module.
|
|
"""
|
|
def __init__(self, section, etype, node):
|
|
# Put this here to allow entry-docs and help to work without libfdt
|
|
global state
|
|
import state
|
|
|
|
Entry_blob.__init__(self, section, etype, node)
|
|
|
|
def ObtainContents(self):
|
|
"""Get the device-tree from the list held by the 'state' module"""
|
|
self._filename = self.GetDefaultFilename()
|
|
self._pathname, _ = state.GetFdtContents(self.GetFdtEtype())
|
|
return Entry_blob.ReadBlobContents(self)
|
|
|
|
def ProcessContents(self):
|
|
"""Re-read the DTB contents so that we get any calculated properties"""
|
|
_, indata = state.GetFdtContents(self.GetFdtEtype())
|
|
data = self.CompressData(indata)
|
|
return self.ProcessContentsUpdate(data)
|
|
|
|
def GetFdtEtype(self):
|
|
"""Get the entry type of this device tree
|
|
|
|
This can be 'u-boot-dtb', 'u-boot-spl-dtb' or 'u-boot-tpl-dtb'
|
|
Returns:
|
|
Entry type if any, e.g. 'u-boot-dtb'
|
|
"""
|
|
return None
|
|
|
|
def GetFdts(self):
|
|
"""Get the device trees used by this entry
|
|
|
|
Returns:
|
|
Dict:
|
|
key: Filename from this entry (without the path)
|
|
value: Tuple:
|
|
Fdt object for this dtb, or None if not available
|
|
Filename of file containing this dtb
|
|
"""
|
|
fname = self.GetDefaultFilename()
|
|
return {self.GetFdtEtype(): [self, fname]}
|
|
|
|
def WriteData(self, data, decomp=True):
|
|
ok = Entry_blob.WriteData(self, data, decomp)
|
|
|
|
# Update the state module, since it has the authoritative record of the
|
|
# device trees used. If we don't do this, then state.GetFdtContents()
|
|
# will still return the old contents
|
|
state.UpdateFdtContents(self.GetFdtEtype(), data)
|
|
return ok
|