sconfig: pass in devicetree filename

Instead of forcing the hardcoded 'devicetree.cb' filename under the
mainboard directory, this allows mainboards to select a filename for
the devicetree file.

This allows mainboard variants that need to use different devicetree
files to live under the same directory.

Change-Id: I761e676ba5d5f70d1fb86656b528f63db169fcef
Signed-off-by: Martin Roth <martinroth@google.com>
Reviewed-on: https://review.coreboot.org/12529
Tested-by: build bot (Jenkins)
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
This commit is contained in:
Martin Roth 2015-11-24 12:34:16 -07:00
parent 052a995567
commit 3205170a2e
3 changed files with 36 additions and 13 deletions

View File

@ -451,10 +451,10 @@ $(obj)/config.h: $(objutil)/kconfig/conf
####################################################################### #######################################################################
# needed objects that every mainboard uses # needed objects that every mainboard uses
# Creation of these is architecture and mainboard independent # Creation of these is architecture and mainboard independent
$(obj)/mainboard/$(MAINBOARDDIR)/static.c: $(src)/mainboard/$(MAINBOARDDIR)/devicetree.cb $(objutil)/sconfig/sconfig $(obj)/mainboard/$(MAINBOARDDIR)/static.c: $(src)/mainboard/$(MAINBOARDDIR)/$(call strip_quotes, $(CONFIG_DEVICETREE)) $(objutil)/sconfig/sconfig
@printf " SCONFIG $(subst $(src)/,,$(<))\n" @printf " SCONFIG $(subst $(src)/,,$(<))\n"
mkdir -p $(obj)/mainboard/$(MAINBOARDDIR) mkdir -p $(obj)/mainboard/$(MAINBOARDDIR)
$(objutil)/sconfig/sconfig $(MAINBOARDDIR) $(obj)/mainboard/$(MAINBOARDDIR) $(objutil)/sconfig/sconfig $(MAINBOARDDIR) $(obj)/mainboard/$(MAINBOARDDIR) $(call strip_quotes, $(CONFIG_DEVICETREE))
ramstage-y+=$(obj)/mainboard/$(MAINBOARDDIR)/static.c ramstage-y+=$(obj)/mainboard/$(MAINBOARDDIR)/static.c
romstage-y+=$(obj)/mainboard/$(MAINBOARDDIR)/static.c romstage-y+=$(obj)/mainboard/$(MAINBOARDDIR)/static.c

View File

@ -358,6 +358,17 @@ config BOARD_ID_STRING
This string is placed in the 'board_id' CBFS file for indicating This string is placed in the 'board_id' CBFS file for indicating
board type. board type.
config DEVICETREE
string
default "devicetree.cb"
help
This symbol allows mainboards to select a different file under their
mainboard directory for the devicetree.cb file. This allows the board
variants that need different devicetrees to be in the same directory.
Examples: "devicetree.variant.cb"
"variant/devicetree.cb"
config RAM_CODE_SUPPORT config RAM_CODE_SUPPORT
bool bool
default n default n

View File

@ -551,7 +551,7 @@ static void inherit_subsystem_ids(FILE *file, struct device *dev)
static void usage(void) static void usage(void)
{ {
printf("usage: sconfig vendor/mainboard outputdir [-{s|b|k} outputfile]\n"); printf("usage: sconfig vendor/mainboard outputdir devicetree [-{s|b|k} outputfile]\n");
printf("\t-s file\tcreate ramstage static device map\n"); printf("\t-s file\tcreate ramstage static device map\n");
printf("\t-b file\tcreate bootblock init_mainboard()\n"); printf("\t-b file\tcreate bootblock init_mainboard()\n");
printf("\t-k file\tcreate Kconfig devicetree section\n"); printf("\t-k file\tcreate Kconfig devicetree section\n");
@ -559,27 +559,39 @@ static void usage(void)
exit (1); exit (1);
} }
enum {
VENDOR_MAINBOARD_ARG = 1,
OUTPUTDIR_ARG,
DEVICEFILE_ARG,
OUTPUTTYPE_ARG,
OUTPUTFILE_ARG
};
#define MIN_ARGS 4
#define MAX_ARGS 6
int main(int argc, char** argv) { int main(int argc, char** argv) {
if (argc != 3 && argc != 5) if (argc != MIN_ARGS && argc != MAX_ARGS)
usage(); usage();
char *mainboard=argv[1]; char *mainboard = argv[VENDOR_MAINBOARD_ARG];
char *outputdir=argv[2]; char *outputdir = argv[OUTPUTDIR_ARG];
char *devtree=malloc(strlen(mainboard)+30); char *devfile = argv[DEVICEFILE_ARG];
sprintf(devtree, "src/mainboard/%s/devicetree.cb", mainboard); char *devtree = malloc(strlen(mainboard) + strlen(devfile) + 30);
sprintf(devtree, "src/mainboard/%s/%s", mainboard, devfile);
char *outputc; char *outputc;
if (argc == 3) { if (argc == MIN_ARGS) {
scan_mode = STATIC_MODE; scan_mode = STATIC_MODE;
outputc=malloc(strlen(outputdir)+20); outputc=malloc(strlen(outputdir)+20);
sprintf(outputc, "%s/static.c", outputdir); sprintf(outputc, "%s/static.c", outputdir);
} else if (argc == 5) { } else if (argc == MAX_ARGS) {
if ((argv[3][0] != '-') || (argv[3][2] == 0)) { if ((argv[OUTPUTTYPE_ARG][0] != '-') ||
(argv[OUTPUTTYPE_ARG][2] == 0)) {
usage(); usage();
} }
switch (argv[3][1]) { switch (argv[OUTPUTTYPE_ARG][1]) {
case 's': case 's':
scan_mode = STATIC_MODE; scan_mode = STATIC_MODE;
break; break;
@ -593,7 +605,7 @@ int main(int argc, char** argv) {
usage(); usage();
break; break;
} }
char *outputfile=argv[4]; char *outputfile = argv[OUTPUTFILE_ARG];
outputc=malloc(strlen(outputdir)+strlen(outputfile)+2); outputc=malloc(strlen(outputdir)+strlen(outputfile)+2);
sprintf(outputc, "%s/%s", outputdir, outputfile); sprintf(outputc, "%s/%s", outputdir, outputfile);