From 1c1608e0c7afadb926032a0a649f373ce134c06b Mon Sep 17 00:00:00 2001 From: Svyatoslav Ryhel Date: Thu, 1 Aug 2024 16:42:24 +0300 Subject: [PATCH] board: asus: grouper: implement multi-DTB support Use board revision detection mechanism to choose correct DTB. Adjust documentation and build setup accordingly. Signed-off-by: Svyatoslav Ryhel --- board/asus/grouper/MAINTAINERS | 4 +- board/asus/grouper/Makefile | 1 + board/asus/grouper/board-info.c | 84 +++++++++++++++++++ .../asus/grouper/configs/grouper_E1565.config | 6 -- .../asus/grouper/configs/grouper_PM269.config | 6 -- board/asus/grouper/configs/tilapia.config | 7 -- ...per_common_defconfig => grouper_defconfig} | 10 +++ .../asus/{grouper_common.rst => grouper.rst} | 8 +- doc/board/asus/index.rst | 2 +- 9 files changed, 102 insertions(+), 26 deletions(-) create mode 100644 board/asus/grouper/board-info.c delete mode 100644 board/asus/grouper/configs/grouper_E1565.config delete mode 100644 board/asus/grouper/configs/grouper_PM269.config delete mode 100644 board/asus/grouper/configs/tilapia.config rename configs/{grouper_common_defconfig => grouper_defconfig} (85%) rename doc/board/asus/{grouper_common.rst => grouper.rst} (93%) diff --git a/board/asus/grouper/MAINTAINERS b/board/asus/grouper/MAINTAINERS index f4068d8562..3c59632451 100644 --- a/board/asus/grouper/MAINTAINERS +++ b/board/asus/grouper/MAINTAINERS @@ -2,6 +2,6 @@ GROUPER BOARD M: Svyatoslav Ryhel S: Maintained F: board/asus/grouper/ -F: configs/grouper_common_defconfig -F: doc/board/asus/grouper_common.rst +F: configs/grouper_defconfig +F: doc/board/asus/grouper.rst F: include/configs/grouper.h diff --git a/board/asus/grouper/Makefile b/board/asus/grouper/Makefile index c0e84c231f..8a8e6530c8 100644 --- a/board/asus/grouper/Makefile +++ b/board/asus/grouper/Makefile @@ -7,5 +7,6 @@ # Svyatoslav Ryhel obj-$(CONFIG_SPL_BUILD) += grouper-spl.o +obj-$(CONFIG_MULTI_DTB_FIT) += board-info.o obj-y += grouper.o diff --git a/board/asus/grouper/board-info.c b/board/asus/grouper/board-info.c new file mode 100644 index 0000000000..4892accc52 --- /dev/null +++ b/board/asus/grouper/board-info.c @@ -0,0 +1,84 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * (C) Copyright 2024 + * Svyatoslav Ryhel + */ + +#include +#include + +#include +#include + +/* + * PMIC_ID is GMI_CS2_N_PK3 + * MODEM_ID is GMI_CS4_N_PK2 + * + * Extended Project ID + * ==================================== + * MODEM_ID PMIC_ID project name + * 0 0 grouper-E1565 + * 0 1 grouper-PM269 + * 1 0 tilapia + */ +enum project_rev { + E1565, PM269, TILAPIA, COUNT, +}; + +static const char * const project_id_to_fdt[] = { + [E1565] = "tegra30-asus-nexus7-grouper-E1565", + [PM269] = "tegra30-asus-nexus7-grouper-PM269", + [TILAPIA] = "tegra30-asus-nexus7-tilapia-E1565", +}; + +static int id_gpio_get_value(u32 pingrp, u32 pin) +{ + /* Configure pinmux */ + pinmux_set_func(pingrp, PMUX_FUNC_GMI); + pinmux_set_pullupdown(pingrp, PMUX_PULL_DOWN); + pinmux_tristate_enable(pingrp); + pinmux_set_io(pingrp, PMUX_PIN_INPUT); + + /* + * Since this function may be called + * during DM reload we should use SPL + * GPIO functions which do not depend + * on DM. + */ + spl_gpio_input(NULL, pin); + return spl_gpio_get_value(NULL, pin); +} + +static int get_project_id(void) +{ + u32 pmic_id, modem_id, proj_id; + + modem_id = id_gpio_get_value(PMUX_PINGRP_GMI_CS4_N_PK2, + TEGRA_GPIO(K, 2)); + pmic_id = id_gpio_get_value(PMUX_PINGRP_GMI_CS2_N_PK3, + TEGRA_GPIO(K, 3)); + + proj_id = (modem_id << 1 | pmic_id) & COUNT; + + log_debug("[GROUPER]: project id %d (%s)\n", proj_id, + project_id_to_fdt[proj_id]); + + return proj_id; +} + +int board_fit_config_name_match(const char *name) +{ + if (!strcmp(name, project_id_to_fdt[get_project_id()])) + return 0; + + return -1; +} + +void nvidia_board_late_init(void) +{ + char dt_path[64] = { 0 }; + + snprintf(dt_path, sizeof(dt_path), "%s.dtb", + project_id_to_fdt[get_project_id()]); + env_set("fdtfile", dt_path); +} diff --git a/board/asus/grouper/configs/grouper_E1565.config b/board/asus/grouper/configs/grouper_E1565.config deleted file mode 100644 index 265295c8b3..0000000000 --- a/board/asus/grouper/configs/grouper_E1565.config +++ /dev/null @@ -1,6 +0,0 @@ -CONFIG_DEFAULT_DEVICE_TREE="tegra30-asus-nexus7-grouper-E1565" -CONFIG_CMD_POWEROFF=y -# CONFIG_MAX77663_GPIO is not set -CONFIG_DM_PMIC_MAX77663=y -CONFIG_DM_REGULATOR_MAX77663=y -CONFIG_SYSRESET_MAX77663=y diff --git a/board/asus/grouper/configs/grouper_PM269.config b/board/asus/grouper/configs/grouper_PM269.config deleted file mode 100644 index a7ee3587ed..0000000000 --- a/board/asus/grouper/configs/grouper_PM269.config +++ /dev/null @@ -1,6 +0,0 @@ -CONFIG_DEFAULT_DEVICE_TREE="tegra30-asus-nexus7-grouper-PM269" -CONFIG_CMD_POWEROFF=y -CONFIG_DM_PMIC_TPS65910=y -# CONFIG_DM_REGULATOR_TPS65910 is not set -CONFIG_DM_REGULATOR_TPS65911=y -CONFIG_SYSRESET_TPS65910=y diff --git a/board/asus/grouper/configs/tilapia.config b/board/asus/grouper/configs/tilapia.config deleted file mode 100644 index d461b4752a..0000000000 --- a/board/asus/grouper/configs/tilapia.config +++ /dev/null @@ -1,7 +0,0 @@ -CONFIG_DEFAULT_DEVICE_TREE="tegra30-asus-nexus7-tilapia-E1565" -CONFIG_SYS_PROMPT="Tegra30 (Tilapia) # " -CONFIG_CMD_POWEROFF=y -# CONFIG_MAX77663_GPIO is not set -CONFIG_DM_PMIC_MAX77663=y -CONFIG_DM_REGULATOR_MAX77663=y -CONFIG_SYSRESET_MAX77663=y diff --git a/configs/grouper_common_defconfig b/configs/grouper_defconfig similarity index 85% rename from configs/grouper_common_defconfig rename to configs/grouper_defconfig index a7b7209c6a..d07d74025d 100644 --- a/configs/grouper_common_defconfig +++ b/configs/grouper_defconfig @@ -39,6 +39,7 @@ CONFIG_CMD_GPT=y CONFIG_CMD_GPT_RENAME=y CONFIG_CMD_I2C=y CONFIG_CMD_MMC=y +CONFIG_CMD_POWEROFF=y CONFIG_CMD_USB=y CONFIG_CMD_USB_MASS_STORAGE=y CONFIG_CMD_UMS_ABORT_KEYED=y @@ -48,6 +49,9 @@ CONFIG_CMD_REGULATOR=y CONFIG_CMD_EXT4_WRITE=y # CONFIG_SPL_DOS_PARTITION is not set # CONFIG_SPL_EFI_PARTITION is not set +CONFIG_OF_LIST="tegra30-asus-nexus7-grouper-E1565 tegra30-asus-nexus7-grouper-PM269 tegra30-asus-nexus7-tilapia-E1565" +CONFIG_DTB_RESELECT=y +CONFIG_MULTI_DTB_FIT=y CONFIG_ENV_OVERWRITE=y CONFIG_SYS_RELOC_GD_ENV_ADDR=y CONFIG_SYS_MMC_ENV_PART=2 @@ -62,10 +66,16 @@ CONFIG_GPIO_HOG=y CONFIG_SYS_I2C_TEGRA=y CONFIG_BUTTON_KEYBOARD=y CONFIG_DM_PMIC=y +CONFIG_DM_PMIC_MAX77663=y +CONFIG_DM_PMIC_TPS65910=y CONFIG_DM_REGULATOR=y +CONFIG_DM_REGULATOR_MAX77663=y CONFIG_DM_REGULATOR_FIXED=y +CONFIG_DM_REGULATOR_TPS65911=y CONFIG_PWM_TEGRA=y CONFIG_SYS_NS16550=y +CONFIG_SYSRESET_MAX77663=y +CONFIG_SYSRESET_TPS65910=y CONFIG_USB=y CONFIG_USB_EHCI_HCD=y CONFIG_USB_EHCI_TEGRA=y diff --git a/doc/board/asus/grouper_common.rst b/doc/board/asus/grouper.rst similarity index 93% rename from doc/board/asus/grouper_common.rst rename to doc/board/asus/grouper.rst index 47a854e916..d56a9ca392 100644 --- a/doc/board/asus/grouper_common.rst +++ b/doc/board/asus/grouper.rst @@ -19,14 +19,14 @@ Quick Start Build U-Boot ------------ -Device support is implemented by applying config fragment to a generic board -defconfig. Valid fragments are ``tilapia.config``, ``grouper_E1565.config`` -and ``grouper_PM269.config``. +U-Boot features ability to detect grouper board revision on which it is +loaded. Currently are supported both TI and MAXIM based WiFi-only models +along with cellular one. .. code-block:: bash $ export CROSS_COMPILE=arm-linux-gnueabi- - $ make grouper_common_defconfig grouper_E1565.config # For maxim based grouper + $ make grouper_defconfig # For all grouper versions and tilapia $ make After the build succeeds, you will obtain the final ``u-boot-dtb-tegra.bin`` diff --git a/doc/board/asus/index.rst b/doc/board/asus/index.rst index 2b10328790..2cac04ce04 100644 --- a/doc/board/asus/index.rst +++ b/doc/board/asus/index.rst @@ -6,6 +6,6 @@ ASUS .. toctree:: :maxdepth: 2 - grouper_common + grouper transformer_t20 transformer_t30 -- 2.39.5