From: Neil Armstrong <narmstrong@baylibre.com> To: u-boot@lists.denx.de Subject: [U-Boot] [PATCH u-boot 2/2] ARM: meson: Add cpu info display for GX SoCs Date: Wed, 28 Mar 2018 11:54:37 +0200 [thread overview] Message-ID: <1522230877-21267-3-git-send-email-narmstrong@baylibre.com> (raw) In-Reply-To: <1522230877-21267-1-git-send-email-narmstrong@baylibre.com> The Amlogic SoCs have a registers containing the die revision and packaging type to determine the SoC family and package marketing name like S905X for the GXL SoC Family. This code is taken for the Linux meson-gx-socinfo driver and adapted to U-Boot printing. Signed-off-by: Neil Armstrong <narmstrong@baylibre.com> --- arch/arm/include/asm/arch-meson/gx.h | 1 + arch/arm/mach-meson/Makefile | 2 +- arch/arm/mach-meson/cpu_info.c | 105 +++++++++++++++++++++++++++++++++++ configs/khadas-vim_defconfig | 2 +- configs/libretech-cc_defconfig | 2 +- configs/odroid-c2_defconfig | 2 +- configs/odroid_defconfig | 1 + configs/p212_defconfig | 2 +- 8 files changed, 112 insertions(+), 5 deletions(-) create mode 100644 arch/arm/mach-meson/cpu_info.c diff --git a/arch/arm/include/asm/arch-meson/gx.h b/arch/arm/include/asm/arch-meson/gx.h index 7930efd..6d5b4ea 100644 --- a/arch/arm/include/asm/arch-meson/gx.h +++ b/arch/arm/include/asm/arch-meson/gx.h @@ -17,6 +17,7 @@ /* Always-On Peripherals registers */ #define GX_AO_ADDR(off) (GX_AOBUS_BASE + ((off) << 2)) +#define GX_AO_SEC_SD_CFG8 GX_AO_ADDR(0x88) #define GX_AO_SEC_GP_CFG0 GX_AO_ADDR(0x90) #define GX_AO_SEC_GP_CFG3 GX_AO_ADDR(0x93) #define GX_AO_SEC_GP_CFG4 GX_AO_ADDR(0x94) diff --git a/arch/arm/mach-meson/Makefile b/arch/arm/mach-meson/Makefile index b4e8dde..5a01ff0 100644 --- a/arch/arm/mach-meson/Makefile +++ b/arch/arm/mach-meson/Makefile @@ -4,4 +4,4 @@ # SPDX-License-Identifier: GPL-2.0+ # -obj-y += board.o sm.o eth.o +obj-y += board.o sm.o eth.o cpu_info.o diff --git a/arch/arm/mach-meson/cpu_info.c b/arch/arm/mach-meson/cpu_info.c new file mode 100644 index 0000000..657768f --- /dev/null +++ b/arch/arm/mach-meson/cpu_info.c @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2018 BayLibre, SAS + * Author: Neil Armstrong <narmstrong@baylibre.com> + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <common.h> +#include <asm/io.h> +#include <linux/bitfield.h> +#include <asm/arch/gx.h> + +#ifdef CONFIG_DISPLAY_CPUINFO + +#define SOCINFO_MAJOR GENMASK(31, 24) +#define SOCINFO_PACK GENMASK(23, 16) +#define SOCINFO_MINOR GENMASK(15, 8) +#define SOCINFO_MISC GENMASK(7, 0) + +static const struct meson_gx_soc_id { + const char *name; + unsigned int id; +} soc_ids[] = { + { "GXBB", 0x1f }, + { "GXTVBB", 0x20 }, + { "GXL", 0x21 }, + { "GXM", 0x22 }, + { "TXL", 0x23 }, +}; + +static const struct meson_gx_package_id { + const char *name; + unsigned int major_id; + unsigned int pack_id; +} soc_packages[] = { + { "S905", 0x1f, 0 }, + { "S905M", 0x1f, 0x20 }, + { "S905D", 0x21, 0 }, + { "S905X", 0x21, 0x80 }, + { "S905L", 0x21, 0xc0 }, + { "S905M2", 0x21, 0xe0 }, + { "S912", 0x22, 0 }, +}; + +static inline unsigned int socinfo_to_major(u32 socinfo) +{ + return FIELD_GET(SOCINFO_MAJOR, socinfo); +} + +static inline unsigned int socinfo_to_minor(u32 socinfo) +{ + return FIELD_GET(SOCINFO_MINOR, socinfo); +} + +static inline unsigned int socinfo_to_pack(u32 socinfo) +{ + return FIELD_GET(SOCINFO_PACK, socinfo); +} + +static inline unsigned int socinfo_to_misc(u32 socinfo) +{ + return FIELD_GET(SOCINFO_MISC, socinfo); +} + +static const char *socinfo_to_package_id(u32 socinfo) +{ + unsigned int pack = socinfo_to_pack(socinfo) & 0xf0; + unsigned int major = socinfo_to_major(socinfo); + int i; + + for (i = 0 ; i < ARRAY_SIZE(soc_packages) ; ++i) { + if (soc_packages[i].major_id == major && + soc_packages[i].pack_id == pack) + return soc_packages[i].name; + } + + return "Unknown"; +} + +static const char *socinfo_to_soc_id(u32 socinfo) +{ + unsigned int id = socinfo_to_major(socinfo); + int i; + + for (i = 0 ; i < ARRAY_SIZE(soc_ids) ; ++i) { + if (soc_ids[i].id == id) + return soc_ids[i].name; + } + + return "Unknown"; +} + +int print_cpuinfo(void) +{ + u32 socinfo = readl(GX_AO_SEC_SD_CFG8); + printf("CPU: Amlogic Meson %s (%s) rev %x:%x (%x:%x)\n", + socinfo_to_soc_id(socinfo), + socinfo_to_package_id(socinfo), + socinfo_to_major(socinfo), + socinfo_to_minor(socinfo), + socinfo_to_pack(socinfo), + socinfo_to_misc(socinfo)); + return 0; +} +#endif /* CONFIG_DISPLAY_CPUINFO */ diff --git a/configs/khadas-vim_defconfig b/configs/khadas-vim_defconfig index a0b3f8d..970d373 100644 --- a/configs/khadas-vim_defconfig +++ b/configs/khadas-vim_defconfig @@ -7,7 +7,7 @@ CONFIG_IDENT_STRING=" khadas-vim" CONFIG_DEFAULT_DEVICE_TREE="meson-gxl-s905x-khadas-vim" CONFIG_DEBUG_UART=y CONFIG_OF_BOARD_SETUP=y -# CONFIG_DISPLAY_CPUINFO is not set +CONFIG_DISPLAY_CPUINFO=y # CONFIG_DISPLAY_BOARDINFO is not set # CONFIG_CMD_BDI is not set # CONFIG_CMD_IMI is not set diff --git a/configs/libretech-cc_defconfig b/configs/libretech-cc_defconfig index a7177b9..cfbba30 100644 --- a/configs/libretech-cc_defconfig +++ b/configs/libretech-cc_defconfig @@ -7,7 +7,7 @@ CONFIG_IDENT_STRING=" libretech-cc" CONFIG_DEFAULT_DEVICE_TREE="meson-gxl-s905x-libretech-cc" CONFIG_DEBUG_UART=y CONFIG_OF_BOARD_SETUP=y -# CONFIG_DISPLAY_CPUINFO is not set +CONFIG_DISPLAY_CPUINFO=y # CONFIG_DISPLAY_BOARDINFO is not set # CONFIG_CMD_BDI is not set # CONFIG_CMD_IMI is not set diff --git a/configs/odroid-c2_defconfig b/configs/odroid-c2_defconfig index 49461aa..657b647 100644 --- a/configs/odroid-c2_defconfig +++ b/configs/odroid-c2_defconfig @@ -7,7 +7,7 @@ CONFIG_IDENT_STRING=" odroid-c2" CONFIG_DEFAULT_DEVICE_TREE="meson-gxbb-odroidc2" CONFIG_DEBUG_UART=y CONFIG_OF_BOARD_SETUP=y -# CONFIG_DISPLAY_CPUINFO is not set +CONFIG_DISPLAY_CPUINFO=y # CONFIG_DISPLAY_BOARDINFO is not set # CONFIG_CMD_BDI is not set # CONFIG_CMD_IMI is not set diff --git a/configs/odroid_defconfig b/configs/odroid_defconfig index 810874d..251bf38 100644 --- a/configs/odroid_defconfig +++ b/configs/odroid_defconfig @@ -56,3 +56,4 @@ CONFIG_USB_HOST_ETHER=y CONFIG_USB_ETHER_SMSC95XX=y CONFIG_LIB_HW_RAND=y CONFIG_ERRNO_STR=y +CONFIG_DISPLAY_CPUINFO=y diff --git a/configs/p212_defconfig b/configs/p212_defconfig index d276e06..4302977 100644 --- a/configs/p212_defconfig +++ b/configs/p212_defconfig @@ -7,7 +7,7 @@ CONFIG_IDENT_STRING=" p212" CONFIG_DEFAULT_DEVICE_TREE="meson-gxl-s905x-p212" CONFIG_DEBUG_UART=y CONFIG_OF_BOARD_SETUP=y -# CONFIG_DISPLAY_CPUINFO is not set +CONFIG_DISPLAY_CPUINFO=y # CONFIG_DISPLAY_BOARDINFO is not set # CONFIG_CMD_BDI is not set # CONFIG_CMD_IMI is not set -- 2.7.4
WARNING: multiple messages have this Message-ID (diff)
From: narmstrong@baylibre.com (Neil Armstrong) To: linus-amlogic@lists.infradead.org Subject: [PATCH u-boot 2/2] ARM: meson: Add cpu info display for GX SoCs Date: Wed, 28 Mar 2018 11:54:37 +0200 [thread overview] Message-ID: <1522230877-21267-3-git-send-email-narmstrong@baylibre.com> (raw) In-Reply-To: <1522230877-21267-1-git-send-email-narmstrong@baylibre.com> The Amlogic SoCs have a registers containing the die revision and packaging type to determine the SoC family and package marketing name like S905X for the GXL SoC Family. This code is taken for the Linux meson-gx-socinfo driver and adapted to U-Boot printing. Signed-off-by: Neil Armstrong <narmstrong@baylibre.com> --- arch/arm/include/asm/arch-meson/gx.h | 1 + arch/arm/mach-meson/Makefile | 2 +- arch/arm/mach-meson/cpu_info.c | 105 +++++++++++++++++++++++++++++++++++ configs/khadas-vim_defconfig | 2 +- configs/libretech-cc_defconfig | 2 +- configs/odroid-c2_defconfig | 2 +- configs/odroid_defconfig | 1 + configs/p212_defconfig | 2 +- 8 files changed, 112 insertions(+), 5 deletions(-) create mode 100644 arch/arm/mach-meson/cpu_info.c diff --git a/arch/arm/include/asm/arch-meson/gx.h b/arch/arm/include/asm/arch-meson/gx.h index 7930efd..6d5b4ea 100644 --- a/arch/arm/include/asm/arch-meson/gx.h +++ b/arch/arm/include/asm/arch-meson/gx.h @@ -17,6 +17,7 @@ /* Always-On Peripherals registers */ #define GX_AO_ADDR(off) (GX_AOBUS_BASE + ((off) << 2)) +#define GX_AO_SEC_SD_CFG8 GX_AO_ADDR(0x88) #define GX_AO_SEC_GP_CFG0 GX_AO_ADDR(0x90) #define GX_AO_SEC_GP_CFG3 GX_AO_ADDR(0x93) #define GX_AO_SEC_GP_CFG4 GX_AO_ADDR(0x94) diff --git a/arch/arm/mach-meson/Makefile b/arch/arm/mach-meson/Makefile index b4e8dde..5a01ff0 100644 --- a/arch/arm/mach-meson/Makefile +++ b/arch/arm/mach-meson/Makefile @@ -4,4 +4,4 @@ # SPDX-License-Identifier: GPL-2.0+ # -obj-y += board.o sm.o eth.o +obj-y += board.o sm.o eth.o cpu_info.o diff --git a/arch/arm/mach-meson/cpu_info.c b/arch/arm/mach-meson/cpu_info.c new file mode 100644 index 0000000..657768f --- /dev/null +++ b/arch/arm/mach-meson/cpu_info.c @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2018 BayLibre, SAS + * Author: Neil Armstrong <narmstrong@baylibre.com> + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include <common.h> +#include <asm/io.h> +#include <linux/bitfield.h> +#include <asm/arch/gx.h> + +#ifdef CONFIG_DISPLAY_CPUINFO + +#define SOCINFO_MAJOR GENMASK(31, 24) +#define SOCINFO_PACK GENMASK(23, 16) +#define SOCINFO_MINOR GENMASK(15, 8) +#define SOCINFO_MISC GENMASK(7, 0) + +static const struct meson_gx_soc_id { + const char *name; + unsigned int id; +} soc_ids[] = { + { "GXBB", 0x1f }, + { "GXTVBB", 0x20 }, + { "GXL", 0x21 }, + { "GXM", 0x22 }, + { "TXL", 0x23 }, +}; + +static const struct meson_gx_package_id { + const char *name; + unsigned int major_id; + unsigned int pack_id; +} soc_packages[] = { + { "S905", 0x1f, 0 }, + { "S905M", 0x1f, 0x20 }, + { "S905D", 0x21, 0 }, + { "S905X", 0x21, 0x80 }, + { "S905L", 0x21, 0xc0 }, + { "S905M2", 0x21, 0xe0 }, + { "S912", 0x22, 0 }, +}; + +static inline unsigned int socinfo_to_major(u32 socinfo) +{ + return FIELD_GET(SOCINFO_MAJOR, socinfo); +} + +static inline unsigned int socinfo_to_minor(u32 socinfo) +{ + return FIELD_GET(SOCINFO_MINOR, socinfo); +} + +static inline unsigned int socinfo_to_pack(u32 socinfo) +{ + return FIELD_GET(SOCINFO_PACK, socinfo); +} + +static inline unsigned int socinfo_to_misc(u32 socinfo) +{ + return FIELD_GET(SOCINFO_MISC, socinfo); +} + +static const char *socinfo_to_package_id(u32 socinfo) +{ + unsigned int pack = socinfo_to_pack(socinfo) & 0xf0; + unsigned int major = socinfo_to_major(socinfo); + int i; + + for (i = 0 ; i < ARRAY_SIZE(soc_packages) ; ++i) { + if (soc_packages[i].major_id == major && + soc_packages[i].pack_id == pack) + return soc_packages[i].name; + } + + return "Unknown"; +} + +static const char *socinfo_to_soc_id(u32 socinfo) +{ + unsigned int id = socinfo_to_major(socinfo); + int i; + + for (i = 0 ; i < ARRAY_SIZE(soc_ids) ; ++i) { + if (soc_ids[i].id == id) + return soc_ids[i].name; + } + + return "Unknown"; +} + +int print_cpuinfo(void) +{ + u32 socinfo = readl(GX_AO_SEC_SD_CFG8); + printf("CPU: Amlogic Meson %s (%s) rev %x:%x (%x:%x)\n", + socinfo_to_soc_id(socinfo), + socinfo_to_package_id(socinfo), + socinfo_to_major(socinfo), + socinfo_to_minor(socinfo), + socinfo_to_pack(socinfo), + socinfo_to_misc(socinfo)); + return 0; +} +#endif /* CONFIG_DISPLAY_CPUINFO */ diff --git a/configs/khadas-vim_defconfig b/configs/khadas-vim_defconfig index a0b3f8d..970d373 100644 --- a/configs/khadas-vim_defconfig +++ b/configs/khadas-vim_defconfig @@ -7,7 +7,7 @@ CONFIG_IDENT_STRING=" khadas-vim" CONFIG_DEFAULT_DEVICE_TREE="meson-gxl-s905x-khadas-vim" CONFIG_DEBUG_UART=y CONFIG_OF_BOARD_SETUP=y -# CONFIG_DISPLAY_CPUINFO is not set +CONFIG_DISPLAY_CPUINFO=y # CONFIG_DISPLAY_BOARDINFO is not set # CONFIG_CMD_BDI is not set # CONFIG_CMD_IMI is not set diff --git a/configs/libretech-cc_defconfig b/configs/libretech-cc_defconfig index a7177b9..cfbba30 100644 --- a/configs/libretech-cc_defconfig +++ b/configs/libretech-cc_defconfig @@ -7,7 +7,7 @@ CONFIG_IDENT_STRING=" libretech-cc" CONFIG_DEFAULT_DEVICE_TREE="meson-gxl-s905x-libretech-cc" CONFIG_DEBUG_UART=y CONFIG_OF_BOARD_SETUP=y -# CONFIG_DISPLAY_CPUINFO is not set +CONFIG_DISPLAY_CPUINFO=y # CONFIG_DISPLAY_BOARDINFO is not set # CONFIG_CMD_BDI is not set # CONFIG_CMD_IMI is not set diff --git a/configs/odroid-c2_defconfig b/configs/odroid-c2_defconfig index 49461aa..657b647 100644 --- a/configs/odroid-c2_defconfig +++ b/configs/odroid-c2_defconfig @@ -7,7 +7,7 @@ CONFIG_IDENT_STRING=" odroid-c2" CONFIG_DEFAULT_DEVICE_TREE="meson-gxbb-odroidc2" CONFIG_DEBUG_UART=y CONFIG_OF_BOARD_SETUP=y -# CONFIG_DISPLAY_CPUINFO is not set +CONFIG_DISPLAY_CPUINFO=y # CONFIG_DISPLAY_BOARDINFO is not set # CONFIG_CMD_BDI is not set # CONFIG_CMD_IMI is not set diff --git a/configs/odroid_defconfig b/configs/odroid_defconfig index 810874d..251bf38 100644 --- a/configs/odroid_defconfig +++ b/configs/odroid_defconfig @@ -56,3 +56,4 @@ CONFIG_USB_HOST_ETHER=y CONFIG_USB_ETHER_SMSC95XX=y CONFIG_LIB_HW_RAND=y CONFIG_ERRNO_STR=y +CONFIG_DISPLAY_CPUINFO=y diff --git a/configs/p212_defconfig b/configs/p212_defconfig index d276e06..4302977 100644 --- a/configs/p212_defconfig +++ b/configs/p212_defconfig @@ -7,7 +7,7 @@ CONFIG_IDENT_STRING=" p212" CONFIG_DEFAULT_DEVICE_TREE="meson-gxl-s905x-p212" CONFIG_DEBUG_UART=y CONFIG_OF_BOARD_SETUP=y -# CONFIG_DISPLAY_CPUINFO is not set +CONFIG_DISPLAY_CPUINFO=y # CONFIG_DISPLAY_BOARDINFO is not set # CONFIG_CMD_BDI is not set # CONFIG_CMD_IMI is not set -- 2.7.4
next prev parent reply other threads:[~2018-03-28 9:54 UTC|newest] Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-03-28 9:54 [U-Boot] [PATCH u-boot 0/2] Cleanup for Amlogic GX SoCs Neil Armstrong 2018-03-28 9:54 ` Neil Armstrong 2018-03-28 9:54 ` [U-Boot] [PATCH u-boot 1/2] ARM: meson: rename GXBB to GX Neil Armstrong 2018-03-28 9:54 ` Neil Armstrong 2018-04-04 20:40 ` [U-Boot] " Beniamino Galvani 2018-04-04 20:40 ` Beniamino Galvani 2018-04-09 13:48 ` [U-Boot] " Neil Armstrong 2018-04-09 13:48 ` Neil Armstrong 2018-03-28 9:54 ` Neil Armstrong [this message] 2018-03-28 9:54 ` [PATCH u-boot 2/2] ARM: meson: Add cpu info display for GX SoCs Neil Armstrong 2018-04-04 20:49 ` [U-Boot] " Beniamino Galvani 2018-04-04 20:49 ` Beniamino Galvani 2018-04-09 13:47 ` [U-Boot] " Neil Armstrong 2018-04-09 13:47 ` Neil Armstrong 2018-04-08 13:50 ` [U-Boot] " Simon Glass 2018-04-08 13:50 ` Simon Glass 2018-04-09 13:48 ` [U-Boot] " Neil Armstrong 2018-04-09 13:48 ` Neil Armstrong 2018-04-10 13:51 ` [U-Boot] " Neil Armstrong 2018-04-10 13:51 ` Neil Armstrong 2018-04-10 14:37 ` [U-Boot] " Simon Glass 2018-04-10 14:37 ` Simon Glass
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1522230877-21267-3-git-send-email-narmstrong@baylibre.com \ --to=narmstrong@baylibre.com \ --cc=u-boot@lists.denx.de \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.