From 727cb3d3a04201f74cbeb60ed99335b6d5f28c2f Mon Sep 17 00:00:00 2001 From: =Dale Weber <=geekguy.wy@gmail.com> Date: Fri, 15 May 2020 21:07:02 -0700 Subject: [PATCH 1/6] First try at detecting an UDOO Bolt. There will probably be more. --- adafruit_platformdetect/__init__.py | 26 +++++++++++++++++++-- adafruit_platformdetect/board.py | 3 +++ adafruit_platformdetect/chip.py | 2 ++ adafruit_platformdetect/constants/boards.py | 2 ++ adafruit_platformdetect/constants/chips.py | 1 + 5 files changed, 32 insertions(+), 2 deletions(-) diff --git a/adafruit_platformdetect/__init__.py b/adafruit_platformdetect/__init__.py index 2b465b3d..7b99a630 100644 --- a/adafruit_platformdetect/__init__.py +++ b/adafruit_platformdetect/__init__.py @@ -75,6 +75,7 @@ def get_armbian_release_field(self, field): value, if found, otherwise None. """ field_value = None + pattern = r"^" + field + r"=(.*)" try: with open("/etc/armbian-release", "r") as release_file: @@ -93,20 +94,41 @@ def get_device_model(self): Search /proc/device-tree/model for the device model and return its value, if found, otherwise None. """ + model = None + try: with open("/proc/device-tree/model", "r") as model_file: model = model_file.read() - return model except FileNotFoundError: pass + return model + def get_device_compatible(self): """ Search /proc/device-tree/compatible for the compatible chip name. """ + model = None + try: with open("/proc/device-tree/compatible", "r") as model_file: model = model_file.read() - return model except FileNotFoundError: pass + + return model + + def get_board_asset_tag(self): + """ + Search /proc/device-tree/model for the device model and return its value, if found, + otherwise None. + """ + tag = None + + try: + with open("/sys/devices/virtual/dmi/id/board_asset_tag", "r") as tag_file: + tag = tag_file.read() + except FileNotFoundError: + pass + + return tag diff --git a/adafruit_platformdetect/board.py b/adafruit_platformdetect/board.py index 29c4edad..f5e2bd2d 100644 --- a/adafruit_platformdetect/board.py +++ b/adafruit_platformdetect/board.py @@ -117,6 +117,9 @@ def id(self): board_id = self._clockwork_pi_id() elif chip_id == chips.RK3308: board_id = self._rock_pi_id() + elif chip_id == chips.RYZEN_V1605B + board_id == boards.UDOO_BOLT + return board_id # pylint: enable=invalid-name diff --git a/adafruit_platformdetect/chip.py b/adafruit_platformdetect/chip.py index afbde2a3..bd595bf4 100644 --- a/adafruit_platformdetect/chip.py +++ b/adafruit_platformdetect/chip.py @@ -211,6 +211,8 @@ def _linux_id(self): elif isinstance(hardware, list): if {model.upper() for model in hardware} & chips.BCM_RANGE: linux_id = chips.BCM2XXX + elif get_board_asset_tag() == "SC40-2000-0000-C0|C" + linux_id = chips.RYZEN_V1605B return linux_id diff --git a/adafruit_platformdetect/constants/boards.py b/adafruit_platformdetect/constants/boards.py index 1282e869..bf9b947f 100644 --- a/adafruit_platformdetect/constants/boards.py +++ b/adafruit_platformdetect/constants/boards.py @@ -95,6 +95,8 @@ GREATFET_ONE = "GREATFET_ONE" +UDOO_BOLT = "UDOO_BOLT" + # pylint: enable=bad-whitespace # OrangePI diff --git a/adafruit_platformdetect/constants/chips.py b/adafruit_platformdetect/constants/chips.py index eb0c74bd..59fdc7be 100644 --- a/adafruit_platformdetect/constants/chips.py +++ b/adafruit_platformdetect/constants/chips.py @@ -3,6 +3,7 @@ IMX8MX = "IMX8MX" BCM2XXX = "BCM2XXX" ESP8266 = "ESP8266" +RYZEN_V1605B = "RYZEN_V1605B" SAMD21 = "SAMD21" STM32 = "STM32" SUN8I = "SUN8I" From 7d1f6696ca5558b3a8e58a160c80a16aab65dd60 Mon Sep 17 00:00:00 2001 From: =Dale Weber <=geekguy.wy@gmail.com> Date: Fri, 15 May 2020 21:23:04 -0700 Subject: [PATCH 2/6] Fixed a one-off space and added two ':' in comparisons --- adafruit_platformdetect/__init__.py | 2 +- adafruit_platformdetect/board.py | 2 +- adafruit_platformdetect/chip.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/adafruit_platformdetect/__init__.py b/adafruit_platformdetect/__init__.py index 7b99a630..2fef38e5 100644 --- a/adafruit_platformdetect/__init__.py +++ b/adafruit_platformdetect/__init__.py @@ -102,7 +102,7 @@ def get_device_model(self): except FileNotFoundError: pass - return model + return model def get_device_compatible(self): """ diff --git a/adafruit_platformdetect/board.py b/adafruit_platformdetect/board.py index f5e2bd2d..c6684da5 100644 --- a/adafruit_platformdetect/board.py +++ b/adafruit_platformdetect/board.py @@ -117,7 +117,7 @@ def id(self): board_id = self._clockwork_pi_id() elif chip_id == chips.RK3308: board_id = self._rock_pi_id() - elif chip_id == chips.RYZEN_V1605B + elif chip_id == chips.RYZEN_V1605B: board_id == boards.UDOO_BOLT return board_id diff --git a/adafruit_platformdetect/chip.py b/adafruit_platformdetect/chip.py index bd595bf4..28c584df 100644 --- a/adafruit_platformdetect/chip.py +++ b/adafruit_platformdetect/chip.py @@ -211,7 +211,7 @@ def _linux_id(self): elif isinstance(hardware, list): if {model.upper() for model in hardware} & chips.BCM_RANGE: linux_id = chips.BCM2XXX - elif get_board_asset_tag() == "SC40-2000-0000-C0|C" + elif get_board_asset_tag() == "SC40-2000-0000-C0|C": linux_id = chips.RYZEN_V1605B return linux_id From e9f6442b06919f6735a4f59c9f4eb77fe6ed567d Mon Sep 17 00:00:00 2001 From: =Dale Weber <=geekguy.wy@gmail.com> Date: Fri, 15 May 2020 21:26:46 -0700 Subject: [PATCH 3/6] Fixed the last one-off space I missed last time. --- adafruit_platformdetect/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/adafruit_platformdetect/__init__.py b/adafruit_platformdetect/__init__.py index 2fef38e5..c0b565ec 100644 --- a/adafruit_platformdetect/__init__.py +++ b/adafruit_platformdetect/__init__.py @@ -116,7 +116,7 @@ def get_device_compatible(self): except FileNotFoundError: pass - return model + return model def get_board_asset_tag(self): """ From ca21ef9e02841db6b66e1977f6c3a49faf2c600c Mon Sep 17 00:00:00 2001 From: =Dale Weber <=geekguy.wy@gmail.com> Date: Sat, 16 May 2020 11:47:45 -0700 Subject: [PATCH 4/6] Fixed the way I am calling get_board_asset_tag() --- adafruit_platformdetect/chip.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/adafruit_platformdetect/chip.py b/adafruit_platformdetect/chip.py index 28c584df..c01becc5 100644 --- a/adafruit_platformdetect/chip.py +++ b/adafruit_platformdetect/chip.py @@ -211,7 +211,7 @@ def _linux_id(self): elif isinstance(hardware, list): if {model.upper() for model in hardware} & chips.BCM_RANGE: linux_id = chips.BCM2XXX - elif get_board_asset_tag() == "SC40-2000-0000-C0|C": + elif self.detectget_board_asset_tag() == "SC40-2000-0000-C0|C": linux_id = chips.RYZEN_V1605B return linux_id From 7de55e27b6cd30eae809616fb989f4025e51fcb2 Mon Sep 17 00:00:00 2001 From: =Dale Weber <=geekguy.wy@gmail.com> Date: Sat, 16 May 2020 11:51:55 -0700 Subject: [PATCH 5/6] Fixed statement has no effect for PyLint --- adafruit_platformdetect/board.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/adafruit_platformdetect/board.py b/adafruit_platformdetect/board.py index c6684da5..eae2868c 100644 --- a/adafruit_platformdetect/board.py +++ b/adafruit_platformdetect/board.py @@ -118,7 +118,7 @@ def id(self): elif chip_id == chips.RK3308: board_id = self._rock_pi_id() elif chip_id == chips.RYZEN_V1605B: - board_id == boards.UDOO_BOLT + board_id = boards.UDOO_BOLT return board_id From 8285f64c2a110a993b2279834ec2533f5b129788 Mon Sep 17 00:00:00 2001 From: =Dale Weber <=geekguy.wy@gmail.com> Date: Sun, 17 May 2020 02:47:46 -0700 Subject: [PATCH 6/6] The chip (Ryzen V1605B) and board *UDOO_BOLT) are now correctly detected by PlatformDetect. --- adafruit_platformdetect/__init__.py | 2 +- adafruit_platformdetect/chip.py | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/adafruit_platformdetect/__init__.py b/adafruit_platformdetect/__init__.py index c0b565ec..3e7090df 100644 --- a/adafruit_platformdetect/__init__.py +++ b/adafruit_platformdetect/__init__.py @@ -118,7 +118,7 @@ def get_device_compatible(self): return model - def get_board_asset_tag(self): + def check_board_asset_tag_value(self): """ Search /proc/device-tree/model for the device model and return its value, if found, otherwise None. diff --git a/adafruit_platformdetect/chip.py b/adafruit_platformdetect/chip.py index c01becc5..485629ba 100644 --- a/adafruit_platformdetect/chip.py +++ b/adafruit_platformdetect/chip.py @@ -135,7 +135,13 @@ def _linux_id(self): if hardware is None: vendor_id = self.detector.get_cpuinfo_field("vendor_id") - if vendor_id in ("GenuineIntel", "AuthenticAMD"): + if vendor_id == "AuthenticAMD": + model_name = self.detector.get_cpuinfo_field("model name").upper() + if "RYZEN EMBEDDED V1605B" in model_name: + linux_id = chips.RYZEN_V1605B + else: + linux_id = chips.GENERIC_X86 + elif vendor_id == "GenuineIntel": linux_id = chips.GENERIC_X86 compatible = self.detector.get_device_compatible() @@ -211,8 +217,6 @@ def _linux_id(self): elif isinstance(hardware, list): if {model.upper() for model in hardware} & chips.BCM_RANGE: linux_id = chips.BCM2XXX - elif self.detectget_board_asset_tag() == "SC40-2000-0000-C0|C": - linux_id = chips.RYZEN_V1605B return linux_id