From: Michael Brown Date: Thu, 12 Feb 2026 13:26:12 +0000 (+0000) Subject: [dt] Add DT_ROM() and DT_ID() macros X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=81da1a1b6cfe8d5667a6386dae3aab68435ef091;p=thirdparty%2Fipxe.git [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 --- diff --git a/src/drivers/gpio/dwgpio.c b/src/drivers/gpio/dwgpio.c index eb3882d08..99e4b5c07 100644 --- a/src/drivers/gpio/dwgpio.c +++ b/src/drivers/gpio/dwgpio.c @@ -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 */ diff --git a/src/drivers/net/cgem.c b/src/drivers/net/cgem.c index c935c8024..26203d7fa 100644 --- a/src/drivers/net/cgem.c +++ b/src/drivers/net/cgem.c @@ -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 */ diff --git a/src/drivers/net/dwmac.c b/src/drivers/net/dwmac.c index f581a48a4..b6986681b 100644 --- a/src/drivers/net/dwmac.c +++ b/src/drivers/net/dwmac.c @@ -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 */ diff --git a/src/drivers/uart/dwuart.c b/src/drivers/uart/dwuart.c index ce08e8ebf..ae8726ebf 100644 --- a/src/drivers/uart/dwuart.c +++ b/src/drivers/uart/dwuart.c @@ -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 */ diff --git a/src/drivers/usb/dwusb.c b/src/drivers/usb/dwusb.c index 1bae2ce74..406a4bca4 100644 --- a/src/drivers/usb/dwusb.c +++ b/src/drivers/usb/dwusb.c @@ -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 */ diff --git a/src/include/ipxe/devtree.h b/src/include/ipxe/devtree.h index 2bf473a3b..2fdfcbd63 100644 --- a/src/include/ipxe/devtree.h +++ b/src/include/ipxe/devtree.h @@ -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 */ diff --git a/src/util/parserom.pl b/src/util/parserom.pl index a42bc2b65..d86be589d 100755 --- a/src/util/parserom.pl +++ b/src/util/parserom.pl @@ -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 ) = @_;