[dt] Add DT_ROM() and DT_ID() macros

Add DT_ROM() and DT_ID() macros following the pattern for PCI_ROM()
and PCI_ID(), to allow for the possibility of including devicetree
network devices within the "all-drivers" build of iPXE.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown
2026-02-12 13:26:12 +00:00
parent 5669c4d52e
commit 81da1a1b6c
7 changed files with 33 additions and 9 deletions
+2 -2
View File
@@ -105,7 +105,7 @@ static void dwgpio_group_remove ( struct dt_device *dt ) {
/** DesignWare GPIO port group compatible model identifiers */
static const char * dwgpio_group_ids[] = {
"snps,dw-apb-gpio",
DT_ID ( "snps,dw-apb-gpio", "DesignWare GPIO" ),
};
/** DesignWare GPIO port group devicetree driver */
@@ -320,7 +320,7 @@ static void dwgpio_remove ( struct dt_device *dt ) {
/** DesignWare GPIO port compatible model identifiers */
static const char * dwgpio_ids[] = {
"snps,dw-apb-gpio-port",
DT_ID ( "snps,dw-apb-gpio-port", "DesignWare GPIO port" ),
};
/** DesignWare GPIO port devicetree driver */
+1 -1
View File
@@ -698,7 +698,7 @@ static void cgem_remove ( struct dt_device *dt ) {
/** Cadence GEM compatible model identifiers */
static const char * cgem_ids[] = {
"sifive,fu540-c000-gem",
DT_ROM ( "sifive,fu540-c000-gem", "SiFive GEM" ),
};
/** Cadence GEM devicetree driver */
+2 -2
View File
@@ -649,8 +649,8 @@ static void dwmac_remove ( struct dt_device *dt ) {
/** DesignWare MAC compatible model identifiers */
static const char * dwmac_ids[] = {
"thead,light-dwmac",
"snps,dwmac",
DT_ROM ( "thead,light-dwmac", "T-Head MAC" ),
DT_ROM ( "snps,dwmac", "DesignWare MAC" ),
};
/** DesignWare MAC devicetree driver */
+2 -2
View File
@@ -115,8 +115,8 @@ static void dwuart_remove ( struct dt_device *dt ) {
/** DesignWare UART compatible model identifiers */
static const char * dwuart_ids[] = {
"snps,dw-apb-uart",
"ns16550a",
DT_ID ( "snps,dw-apb-uart", "DesignWare UART" ),
DT_ID ( "ns16550a", "NS16550-compatible" ),
};
/** DesignWare UART devicetree driver */
+1 -1
View File
@@ -118,7 +118,7 @@ static void dwusb_remove ( struct dt_device *dt ) {
/** DesignWare USB3 compatible model identifiers */
static const char * dwusb_ids[] = {
"snps,dwc3",
DT_ID ( "snps,dwc3", "DesignWare USB3" ),
};
/** DesignWare USB3 devicetree driver */
+6
View File
@@ -27,6 +27,12 @@ struct dt_device {
void *priv;
};
/* Define a devicetree device ID */
#define DT_ID( _name, _desc ) _name
/* Define a devicetree device ID with a corresponding build rule */
#define DT_ROM( _name, _desc ) DT_ID ( _name, _desc )
/** A devicetree driver */
struct dt_driver {
/** Driver name */
+19 -1
View File
@@ -36,7 +36,7 @@ if ( $debug ) {
my %RE = (
'parse_driver_class' => qr{ drivers/ (\w+?) / }x,
'parse_family' => qr{^ (?:\./)? (.*) \..+? $}x,
'find_rom_line' => qr/^ \s* ( (PCI|ISA|USB)_ROM \s*
'find_rom_line' => qr/^ \s* ( (PCI|ISA|USB|DT)_ROM \s*
\( \s* (.*?) \s* \) \s* ) [,;]/msx,
'find_secboot' => qr/^ \s* FILE_SECBOOT \s*
\( \s* PERMITTED \s* \) \s* ; \s* $/mx,
@@ -121,6 +121,7 @@ sub process_rom_decl {
return process_pci_rom($state, $rom_decl) if $rom_type eq "PCI";
return process_isa_rom($state, $rom_decl) if $rom_type eq "ISA";
return process_usb_rom($state, $rom_decl) if $rom_type eq "USB";
return process_dt_rom($state, $rom_decl) if $rom_type eq "DT";
return;
}
@@ -180,6 +181,23 @@ sub process_usb_rom {
return 1;
}
# Extract values from DT_ROM declaration lines and dispatch to
# Makefile rule generator
sub process_dt_rom {
my ($state, $decl) = @_;
return unless defined $decl;
return unless length $decl;
(my $image, $decl) = extract_quoted_string($decl, 'IMAGE');
(my $desc, $decl) = extract_quoted_string($decl, 'DESCRIPTION');
$image =~ s/,/-/;
if ( $image and $desc ) {
print_make_rules( $state, $image, $desc );
} else {
log_debug("WARNING", "Malformed DT_ROM macro on line $. of $state->{source_file}");
}
return 1;
}
# Output Makefile rules for the specified ROM declarations
sub print_make_rules {
my ( $state, $image, $desc, $vendor, $device, $dup ) = @_;