aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.inc4
-rw-r--r--src/Kconfig11
-rw-r--r--util/sconfig/main.c34
3 files changed, 36 insertions, 13 deletions
diff --git a/Makefile.inc b/Makefile.inc
index 71213fefc7..46154c6f34 100644
--- a/Makefile.inc
+++ b/Makefile.inc
@@ -451,10 +451,10 @@ $(obj)/config.h: $(objutil)/kconfig/conf
#######################################################################
# needed objects that every mainboard uses
# 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"
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
romstage-y+=$(obj)/mainboard/$(MAINBOARDDIR)/static.c
diff --git a/src/Kconfig b/src/Kconfig
index 3cb012e978..a403c53b20 100644
--- a/src/Kconfig
+++ b/src/Kconfig
@@ -358,6 +358,17 @@ config BOARD_ID_STRING
This string is placed in the 'board_id' CBFS file for indicating
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
bool
default n
diff --git a/util/sconfig/main.c b/util/sconfig/main.c
index a398c0b3d7..316431341a 100644
--- a/util/sconfig/main.c
+++ b/util/sconfig/main.c
@@ -551,7 +551,7 @@ static void inherit_subsystem_ids(FILE *file, struct device *dev)
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-b file\tcreate bootblock init_mainboard()\n");
printf("\t-k file\tcreate Kconfig devicetree section\n");
@@ -559,27 +559,39 @@ static void usage(void)
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) {
- if (argc != 3 && argc != 5)
+ if (argc != MIN_ARGS && argc != MAX_ARGS)
usage();
- char *mainboard=argv[1];
- char *outputdir=argv[2];
- char *devtree=malloc(strlen(mainboard)+30);
- sprintf(devtree, "src/mainboard/%s/devicetree.cb", mainboard);
+ char *mainboard = argv[VENDOR_MAINBOARD_ARG];
+ char *outputdir = argv[OUTPUTDIR_ARG];
+ char *devfile = argv[DEVICEFILE_ARG];
+ char *devtree = malloc(strlen(mainboard) + strlen(devfile) + 30);
+ sprintf(devtree, "src/mainboard/%s/%s", mainboard, devfile);
char *outputc;
- if (argc == 3) {
+ if (argc == MIN_ARGS) {
scan_mode = STATIC_MODE;
outputc=malloc(strlen(outputdir)+20);
sprintf(outputc, "%s/static.c", outputdir);
- } else if (argc == 5) {
- if ((argv[3][0] != '-') || (argv[3][2] == 0)) {
+ } else if (argc == MAX_ARGS) {
+ if ((argv[OUTPUTTYPE_ARG][0] != '-') ||
+ (argv[OUTPUTTYPE_ARG][2] == 0)) {
usage();
}
- switch (argv[3][1]) {
+ switch (argv[OUTPUTTYPE_ARG][1]) {
case 's':
scan_mode = STATIC_MODE;
break;
@@ -593,7 +605,7 @@ int main(int argc, char** argv) {
usage();
break;
}
- char *outputfile=argv[4];
+ char *outputfile = argv[OUTPUTFILE_ARG];
outputc=malloc(strlen(outputdir)+strlen(outputfile)+2);
sprintf(outputc, "%s/%s", outputdir, outputfile);