From: Marcello Sylvester Bauer <[email protected]> Print the product name provided by the Linux device tree during ft_board_setup().
Signed-off-by: Marcello Sylvester Bauer <[email protected]> Signed-off-by: Tan Siewert <[email protected]> --- arch/arm/dts/hpe-gxp.dtsi | 6 ++++-- board/hpe/gxp/gxp_board.c | 39 ++++++++++++++++++++++++++++++++++++--- drivers/sysinfo/gxp.c | 22 +++++++++++++++++++--- 3 files changed, 59 insertions(+), 8 deletions(-) diff --git a/arch/arm/dts/hpe-gxp.dtsi b/arch/arm/dts/hpe-gxp.dtsi index 9c761a675be..66ddbd924f7 100644 --- a/arch/arm/dts/hpe-gxp.dtsi +++ b/arch/arm/dts/hpe-gxp.dtsi @@ -12,8 +12,10 @@ sysinfo { compatible = "hpe,gxp-sysinfo"; - nvmem-cells = <&serial_number>, <&part_number>; - nvmem-cell-names = "serial-number", "part-number"; + nvmem-cells = <&serial_number>, <&part_number>, + <&pca_serial_number>, <&pca_part_number>; + nvmem-cell-names = "serial-number", "part-number", + "pca-serial-number", "pca-part-number"; bootph-all; }; diff --git a/board/hpe/gxp/gxp_board.c b/board/hpe/gxp/gxp_board.c index 4a51ff55797..0cd05c00079 100644 --- a/board/hpe/gxp/gxp_board.c +++ b/board/hpe/gxp/gxp_board.c @@ -73,6 +73,17 @@ int board_fit_config_name_match(const char *name) return -1; } +static void ft_board_show_product(void *blob) +{ + if (CONFIG_IS_ENABLED(DISPLAY_BOARDINFO)) { + const char *model; + + model = fdt_getprop(blob, 0, "model", NULL); + if (model) + printf("Product: %s\n", model); + } +} + int ft_board_setup(void *blob, struct bd_info *bd) { struct udevice *dev; @@ -81,11 +92,11 @@ int ft_board_setup(void *blob, struct bd_info *bd) ret = sysinfo_get(&dev); if (ret) - return 0; + goto skip_sysinfo; ret = sysinfo_detect(dev); if (ret) - return 0; + goto skip_sysinfo; ret = sysinfo_get_str(dev, SYSID_BOARD_MANUFACTURER, sizeof(str), str); if (!ret) @@ -95,10 +106,32 @@ int ft_board_setup(void *blob, struct bd_info *bd) if (!ret) fdt_setprop_string(blob, 0, "serial-number", str); - ret = sysinfo_get_str(dev, SYSID_SM_BASEBOARD_PRODUCT, sizeof(str), str); + ret = sysinfo_get_str(dev, SYSID_SM_SYSTEM_PRODUCT, sizeof(str), str); if (!ret) fdt_setprop_string(blob, 0, "part-number", str); + /* Populate baseboard (PCA) properties in a subnode */ + int bb_off = fdt_add_subnode(blob, 0, "baseboard"); + + if (bb_off >= 0) { + fdt_setprop_string(blob, bb_off, "compatible", + "hpe,gxp-baseboard"); + + ret = sysinfo_get_str(dev, SYSID_SM_BASEBOARD_SERIAL, + sizeof(str), str); + if (!ret) + fdt_setprop_string(blob, bb_off, "serial-number", str); + + ret = sysinfo_get_str(dev, SYSID_SM_BASEBOARD_PRODUCT, + sizeof(str), str); + if (!ret) + fdt_setprop_string(blob, bb_off, "part-number", str); + } + +skip_sysinfo: + if (CONFIG_IS_ENABLED(DISPLAY_BOARDINFO)) + ft_board_show_product(blob); + return 0; } diff --git a/drivers/sysinfo/gxp.c b/drivers/sysinfo/gxp.c index a1f33be11df..1d242239eb4 100644 --- a/drivers/sysinfo/gxp.c +++ b/drivers/sysinfo/gxp.c @@ -15,12 +15,16 @@ /** * struct gxp_sysinfo_priv - GXP sysinfo private data - * @serial_cell: NVMEM cell for serial number - * @part_cell: NVMEM cell for part number + * @serial_cell: NVMEM cell for system serial number + * @part_cell: NVMEM cell for system part number + * @pca_serial_cell: NVMEM cell for baseboard (PCA) serial number + * @pca_part_cell: NVMEM cell for baseboard (PCA) part number */ struct gxp_sysinfo_priv { struct nvmem_cell serial_cell; struct nvmem_cell part_cell; + struct nvmem_cell pca_serial_cell; + struct nvmem_cell pca_part_cell; }; static int gxp_sysinfo_detect(struct udevice *dev) @@ -47,11 +51,21 @@ static int gxp_sysinfo_get_str(struct udevice *dev, int id, size_t size, return -ENODEV; cell = &priv->serial_cell; break; - case SYSID_SM_BASEBOARD_PRODUCT: + case SYSID_SM_SYSTEM_PRODUCT: if (!priv->part_cell.nvmem) return -ENODEV; cell = &priv->part_cell; break; + case SYSID_SM_BASEBOARD_SERIAL: + if (!priv->pca_serial_cell.nvmem) + return -ENODEV; + cell = &priv->pca_serial_cell; + break; + case SYSID_SM_BASEBOARD_PRODUCT: + if (!priv->pca_part_cell.nvmem) + return -ENODEV; + cell = &priv->pca_part_cell; + break; default: return -EINVAL; } @@ -74,6 +88,8 @@ static int gxp_sysinfo_probe(struct udevice *dev) nvmem_cell_get_by_name(dev, "serial-number", &priv->serial_cell); nvmem_cell_get_by_name(dev, "part-number", &priv->part_cell); + nvmem_cell_get_by_name(dev, "pca-serial-number", &priv->pca_serial_cell); + nvmem_cell_get_by_name(dev, "pca-part-number", &priv->pca_part_cell); return 0; } -- 2.53.0
