arm: rockchip-rk3568-evb: add hardware id detection
Subsystems (2)
PATCH v2 1/1 arm: rockchip-rk3568-evb: add hardware id detection
The RK3568 EVB uses a voltage divider to determine the hardware ID of the board. At the moment, the voltage levels for seven EVB variants are defined. This commit adds a late_initcall to the board code that reads out the voltage and populates the hardware ID as environment variable.
---
v2:
- add compatible check
- return early in case the voltage cannot be read
- populate hardware ID as environment variable
arch/arm/boards/rockchip-rk3568-evb/board.c | 56 +++++++++++++++++++++ 1 file changed, 56 insertions(+)
arch/arm/boards/rockchip-rk3568-evb/board.c +56 -0
@@ -2,7 +2,13 @@#include <common.h> #include <init.h> #include <mach/bbu.h> +#include <aiodev.h> #include <bootsource.h> +#include <environment.h> +#include <globalvar.h> +#include <magicvar.h> + +static bool machine_is_rk3568_evb = false;static int rk3568_evb_probe (struct device_d *dev) {
@@ -11,6 +17,7 @@ static int rk3568_evb_probe(struct device_d *dev)barebox_set_model ("Rockchip RK3568 EVB" );barebox_set_hostname ("rk3568-evb" ); + machine_is_rk3568_evb = true;if (bootsource ==BOOTSOURCE_MMC && instance ==1 )of_device_enable_path ("/chosen/environment-sd" );
@@ -34,3 +41,52 @@ static struct driver_d rk3568_evb_board_driver = { .of_compatible = rk3568_evb_of_match, };coredevice_platform_driver (rk3568_evb_board_driver); + +static int rk3568_evb_detect_hwid (void ) +{ +int ret; +int evb_hwid_voltage; +struct aiochannel *evb_hwid_chan; +char *evb_hwid; + +if (!machine_is_rk3568_evb) +return 0 ; + + evb_hwid_chan =aiochannel_by_name ("aiodev0.in_value1_mV" ); +if (IS_ERR (evb_hwid_chan)) { + ret =PTR_ERR (evb_hwid_chan); + goto err_hwid; + } + + ret =aiochannel_get_value (evb_hwid_chan, &evb_hwid_voltage); +if (ret) + goto err_hwid; + +if (evb_hwid_voltage >1650 ) { + evb_hwid ="1" ; + }else if (evb_hwid_voltage >1350 ) { + evb_hwid ="2" ; + }else if (evb_hwid_voltage >1050 ) { + evb_hwid ="3" ; + }else if (evb_hwid_voltage >750 ) { + evb_hwid ="4" ; + }else if (evb_hwid_voltage >450 ) { + evb_hwid ="5" ; + }else if (evb_hwid_voltage >150 ) { + evb_hwid ="6" ; + }else { + evb_hwid ="7" ; + } +pr_info ("Detected RK3568 EVB%s\n" , evb_hwid); + +globalvar_add_simple ("board.hwid" , evb_hwid); + +return 0 ; + +err_hwid: +pr_err ("couldn't retrieve hardware ID" ); +return ret; +} +late_initcall (rk3568_evb_detect_hwid); + +BAREBOX_MAGICVAR (global.board.hwid,"The board hardware ID" );
Signature · 7 lines
2.20.1 _______________________________________________ barebox mailing list [email protected] http://lists.infradead.org/mailman/listinfo/barebox
PATCH 1/1 fixup! arm: rockchip-rk3568-evb: add hardware id detection
Ensure the pr_err below has a nice prefix, so users have some context about the error message without having to consult the source code.
--- arch/arm/boards/rockchip-rk3568-evb/board.c | 3 +++ 1 file changed, 3 insertions(+)
arch/arm/boards/rockchip-rk3568-evb/board.c +3 -0
@@ -1,4 +1,7 @@// SPDX-License-Identifier: GPL-2.0-only + +#define pr_fmt (fmt) "rk3568-evb: " fmt +#include <common.h> #include <init.h> #include <mach/bbu.h>
Signature · 7 lines
2.30.2 _______________________________________________ barebox mailing list [email protected] http://lists.infradead.org/mailman/listinfo/barebox
Quoted 6 lines · Michael Riesch
The RK3568 EVB uses a voltage divider to determine the hardware ID of the board. At the moment, the voltage levels for seven EVB variants are defined. This commit adds a
late_initcallto the board code that reads out the voltage and populates the hardware ID as environment variable.Signed-off-by Michael Riesch <[email protected]>
I just sent out a fixup that Sascha can squash if both patches are ok with him.
Quoted 89 lines
---
v2:
- add compatible check
- return early in case the voltage cannot be read
- populate hardware ID as environment variablearch/arm/boards/rockchip-rk3568-evb/board.c | 56 +++++++++++++++++++++ 1 file changed, 56 insertions(+)arch/arm/boards/rockchip-rk3568-evb/board.c +56
-0@@ -2,7 +2,13 @@#include <common.h> #include <init.h> #include <mach/bbu.h> +#include <aiodev.h> #include <bootsource.h> +#include <environment.h> +#include <globalvar.h> +#include <magicvar.h> + +static bool machine_is_rk3568_evb = false;static int rk3568_evb_probe (struct device_d *dev) {@@ -11,6 +17,7 @@ static int rk3568_evb_probe(struct device_d *dev)barebox_set_model ("Rockchip RK3568 EVB" );barebox_set_hostname ("rk3568-evb" ); + machine_is_rk3568_evb = true;if (bootsource ==BOOTSOURCE_MMC && instance ==1 )of_device_enable_path ("/chosen/environment-sd" );@@ -34,3 +41,52 @@ static struct driver_d rk3568_evb_board_driver = { .of_compatible = rk3568_evb_of_match, };coredevice_platform_driver (rk3568_evb_board_driver); + +static int rk3568_evb_detect_hwid (void ) +{ +int ret; +int evb_hwid_voltage; +struct aiochannel *evb_hwid_chan; +char *evb_hwid; + +if (!machine_is_rk3568_evb) +return 0 ; + + evb_hwid_chan =aiochannel_by_name ("aiodev0.in_value1_mV" ); +if (IS_ERR (evb_hwid_chan)) { + ret =PTR_ERR (evb_hwid_chan); + goto err_hwid; + } + + ret =aiochannel_get_value (evb_hwid_chan, &evb_hwid_voltage); +if (ret) + goto err_hwid; + +if (evb_hwid_voltage >1650 ) { + evb_hwid ="1" ; + }else if (evb_hwid_voltage >1350 ) { + evb_hwid ="2" ; + }else if (evb_hwid_voltage >1050 ) { + evb_hwid ="3" ; + }else if (evb_hwid_voltage >750 ) { + evb_hwid ="4" ; + }else if (evb_hwid_voltage >450 ) { + evb_hwid ="5" ; + }else if (evb_hwid_voltage >150 ) { + evb_hwid ="6" ; + }else { + evb_hwid ="7" ; + } +pr_info ("Detected RK3568 EVB%s\n" , evb_hwid); + +globalvar_add_simple ("board.hwid" , evb_hwid); + +return 0 ; + +err_hwid: +pr_err ("couldn't retrieve hardware ID" ); +return ret; +} +late_initcall (rk3568_evb_detect_hwid); + +BAREBOX_MAGICVAR (global.board.hwid,"The board hardware ID" );
Signature · 9 lines
Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list [email protected] http://lists.infradead.org/mailman/listinfo/barebox
Quoted 6 lines · Michael Riesch
The RK3568 EVB uses a voltage divider to determine the hardware ID of the board. At the moment, the voltage levels for seven EVB variants are defined. This commit adds a
late_initcallto the board code that reads out the voltage and populates the hardware ID as environment variable.Signed-off-by Michael Riesch <[email protected]>
Quoted 8 lines
---
v2:
- add compatible check
- return early in case the voltage cannot be read
- populate hardware ID as environment variablearch/arm/boards/rockchip-rk3568-evb/board.c | 56 +++++++++++++++++++++ 1 file changed, 56 insertions(+)
Applied with Ahmads fixup, thanks
Sascha
Signature · 9 lines
Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list [email protected] http://lists.infradead.org/mailman/listinfo/barebox
Quoted 47 lines · Michael Riesch
The RK3568 EVB uses a voltage divider to determine the hardware ID of the board. At the moment, the voltage levels for seven EVB variants are defined. This commit adds a
late_initcallto the board code that reads out the voltage and populates the hardware ID as environment variable.Signed-off-by Michael Riesch <[email protected]>---
v2:
- add compatible check
- return early in case the voltage cannot be read
- populate hardware ID as environment variablearch/arm/boards/rockchip-rk3568-evb/board.c | 56 +++++++++++++++++++++ 1 file changed, 56 insertions(+)arch/arm/boards/rockchip-rk3568-evb/board.c +9
-0@@ -2,7 +2,13 @@#include <common.h> #include <init.h> #include <mach/bbu.h> +#include <aiodev.h> #include <bootsource.h> +#include <environment.h> +#include <globalvar.h> +#include <magicvar.h> + +static bool machine_is_rk3568_evb = false;static int rk3568_evb_probe (struct device_d *dev) {@@ -11,6 +17,7 @@ static int rk3568_evb_probe(struct device_d *dev)barebox_set_model ("Rockchip RK3568 EVB" );barebox_set_hostname ("rk3568-evb" ); + machine_is_rk3568_evb = true;if (bootsource ==BOOTSOURCE_MMC && instance ==1 )of_device_enable_path ("/chosen/environment-sd" );@@ -34,3 +41,52 @@ static struct driver_d rk3568_evb_board_driver = { .of_compatible = rk3568_evb_of_match, };coredevice_platform_driver (rk3568_evb_board_driver); + +static int rk3568_evb_detect_hwid (void )
arch/arm/boards/rockchip-rk3568-evb/board.c static struct driver_d rk3568_evb_board_driver = { · line 55
Quoted 10 lines
arch/arm/boards/rockchip-rk3568-evb/board.c +10
-0+{ +int ret; +int evb_hwid_voltage; +struct aiochannel *evb_hwid_chan; +char *evb_hwid; + +if (!machine_is_rk3568_evb) +return 0 ; + + evb_hwid_chan =aiochannel_by_name ("aiodev0.in_value1_mV" );
This fails to link when CONFIG_AIODEV is disabled. I added an early return at the top of this function to fix that.
Sascha
Signature · 9 lines
Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list [email protected] http://lists.infradead.org/mailman/listinfo/barebox