ASUS PN50 with Fedora 32
Table of Contents
Since my ASUS PN50 is planned to be running MythTV, I reinstalled it with Fedora 32 (wiping my RHEL 8 install).
Specs say 115 x 115 x 49 mm (WxDxH). CD case in the picture to give you a rough idea of the size.
Why Fedora
Simply because it is well documented, Fedora is my distyrubution of choice and Fedora release upgrades have been pain free to me for many years now.
Chosen Hardware Model
The specific PN50 I bought is a PN50-BR037MD but do note that ASUS offers a choice of CPUs and you can install up to 64 GiB RAM
Since the platform is new and the intended goal for this one is to be a PVR in the TV room, I went for the 6 core CPU and picked a packaging where 8 GiB RAM and 256 GB NVMe SSD are included.
Simply because I wanted something mid-range for the TV room and because if it turned out to be not working for me I did not want the hassle of shipping back RAM, SSD and machine separately.
No DVB-C Tuner
Note that while you see the word MythTV all over this post, I have no plans to directly connect a DVB-C tuner because I own a VBox network tuner that is supported by MythTV.
Used kickstart File
The kickstart file is minimal, all setup tasks will be done with Ansible.
redacted version of the kickstart file I used, click to expand
#version=DEVEL # Use graphical install graphical # Use network installation url --url="https://download.fedoraproject.org/pub/fedora/linux/releases/32/Everything/x86_64/os/" # https://www.mythtv.org/wiki/Installing_MythTV_on_Fedora # uses the Workstation flavour, so we install that. %packages @^workstation-product-environment %end # Keyboard layouts keyboard --xlayouts='us' # System language lang en_US.UTF-8 # Network information network --bootproto=dhcp --device=enp2s0f0 --ipv6=auto --activate network --hostname=mythtv.example.com # Run the Setup Agent on first boot firstboot --enable # System services services --enabled="chronyd,sshd" # Be sure to only touch the NVMe and the SATA (there might be a medium in the µSD card slot at install time) ignoredisk --only-use=nvme0n1,sda # Partition clearing information clearpart --all --initlabel # Disk partitioning information part /boot --fstype="xfs" --ondisk=nvme0n1 --size=1024 part /boot/efi --fstype="efi" --ondisk=nvme0n1 --size=600 --fsoptions="umask=0077,shortname=winnt" part pv.110 --fstype="lvmpv" --ondisk=nvme0n1 --size=51200 --grow part pv.117 --fstype="lvmpv" --ondisk=sda --size=102400 --grow volgroup VG_mythtv --pesize=4096 pv.110 pv.117 logvol / --fstype="xfs" --size=15360 --name=LV_root --vgname=VG_mythtv logvol /var --fstype="xfs" --size=8192 --name=LV_var --vgname=VG_mythtv logvol /var/log --fstype="xfs" --size=4096 --name=LV_var_log --vgname=VG_mythtv logvol /var/lib/containers --fstype="xfs" --size=10240 --name=LV_containers --vgname=VG_mythtv logvol /var/crash --fstype="xfs" --size=10240 --name=LV_var_crash --vgname=VG_mythtv logvol /home --fstype="xfs" --size=15360 --name=LV_home --vgname=VG_mythtv logvol swap --fstype="swap" --hibernation --name=LV_swap --vgname=VG_mythtv logvol /video --fstype="xfs" --size=102400 --name=LV_video --vgname=VG_mythtv # System timezone, adjust to the server(s) you use timezone Europe/Berlin --utc --ntpservers=ntp-1.example.com,ntp-2.example.com # Root password # see https://pykickstart.readthedocs.io/en/latest/kickstart-docs.html#rootpw for instructions on creating the crypted entry rootpw --iscrypted [REDACTED] # User creation user --name=mythtv --password=[REDACTED] --iscrypted --gecos="mythtv" user --groups=wheel --name=ansible --password=[REDACTED] --iscrypted --gecos="ansible" %addon com_redhat_kdump --enable --reserve-mb='128' %end %anaconda pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty %end %post --log=/root/ks-post.log # dump ssh public key to the root user # obviously change this to your own pubkey mkdir /root/.ssh chown root.root /root/.ssh chmod 700 /root/.ssh cat <>/root/.ssh/authorized_keys ssh-rsa [REDACTED] EOF chown root.root /root/.ssh/authorized_keys chmod 600 /root/.ssh/authorized_keys restorecon /root/.ssh/authorized_keys # dump ssh public key to the ansible user mkdir /home/ansible/.ssh cat < /home/ansible/.ssh/authorized_keys ssh-rsa [REDACTED] EOF chown -R ansible.ansible /home/ansible/.ssh chmod 700 /home/ansible/.ssh chmod 600 /home/ansible/.ssh/authorized_keys restorecon -R /home/ansible/.ssh # allow ansible to use passwordless sudo cat < /etc/sudoers.d/ansible ansible ALL=NOPASSWD: ALL EOF chmod 440 /etc/sudoers.d/ansible echo "kickstarted at `date` for MythTV on Fedora 32 or later" >> /etc/motd echo "remember to move /video off the NVMe (and thus onto the SATA SSD): pvmove -n LV_video /dev/nvme0n1p3" >> /etc/motd %end
As pretty much always, I created one LVM volume group (VG) with two physical volumes (PS) and a bunch of logical volumes (LV). I explicitly left many many physical extents (PE) free. This allows me to extend LVs as needed later (and to create or move LVs onto specific PVs).
If you want, you can also create separate VGs for the SATA HDD and the NVMe, but I invite you to check out LVM in more detail, especially LVM Object Tags in the RHEL 7 LVM Admin guide. Or perhaps this post of mine.
example of settings and using tags on my devices, click to expand
[root@mythtv ~]# pvs -o+tags
PV VG Fmt Attr PSize PFree PV Tags
/dev/nvme0n1p3 VG_mythtv lvm2 a-- <236.89g 160.12g
/dev/sda1 VG_mythtv lvm2 a-- <1.82t 1.72t
[root@mythtv ~]# pvchange --addtag ssd /dev/nvme0n1p3
Physical volume "/dev/nvme0n1p3" changed
1 physical volume changed / 0 physical volumes not changed
[root@mythtv ~]# pvchange --addtag hdd /dev/sda1
Physical volume "/dev/sda1" changed
1 physical volume changed / 0 physical volumes not changed
[root@mythtv ~]# pvs -o+tags
PV VG Fmt Attr PSize PFree PV Tags
/dev/nvme0n1p3 VG_mythtv lvm2 a-- <236.89g 160.12g ssd
/dev/sda1 VG_mythtv lvm2 a-- <1.82t 1.72t hdd
[root@mythtv ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 1.8T 0 disk
└─sda1 8:1 0 1.8T 0 part
└─VG_mythtv-LV_video 253:2 0 100G 0 lvm /video
nvme0n1 259:0 0 238.5G 0 disk
├─nvme0n1p1 259:1 0 600M 0 part /boot/efi
├─nvme0n1p2 259:2 0 1G 0 part /boot
└─nvme0n1p3 259:3 0 236.9G 0 part
├─VG_mythtv-LV_root 253:0 0 15G 0 lvm /
├─VG_mythtv-LV_swap 253:1 0 14.8G 0 lvm [SWAP]
├─VG_mythtv-LV_home 253:3 0 15G 0 lvm /home
├─VG_mythtv-LV_var_crash 253:4 0 10G 0 lvm /var/crash
├─VG_mythtv-LV_containers 253:5 0 10G 0 lvm /var/lib/containers
├─VG_mythtv-LV_var_log 253:6 0 4G 0 lvm /var/log
└─VG_mythtv-LV_var 253:7 0 8G 0 lvm /var
[root@mythtv ~]# lvcreate -L 10G VG_mythtv -n test-hdd @hdd
Logical volume "test-hdd" created.
[root@mythtv ~]# lvcreate -L 10G VG_mythtv -n test-ssd @ssd
Logical volume "test-ssd" created.
[root@mythtv ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 1.8T 0 disk
└─sda1 8:1 0 1.8T 0 part
├─VG_mythtv-LV_video 253:2 0 100G 0 lvm /video
└─VG_mythtv-test--hdd 253:8 0 10G 0 lvm
nvme0n1 259:0 0 238.5G 0 disk
├─nvme0n1p1 259:1 0 600M 0 part /boot/efi
├─nvme0n1p2 259:2 0 1G 0 part /boot
└─nvme0n1p3 259:3 0 236.9G 0 part
├─VG_mythtv-LV_root 253:0 0 15G 0 lvm /
├─VG_mythtv-LV_swap 253:1 0 14.8G 0 lvm [SWAP]
├─VG_mythtv-LV_home 253:3 0 15G 0 lvm /home
├─VG_mythtv-LV_var_crash 253:4 0 10G 0 lvm /var/crash
├─VG_mythtv-LV_containers 253:5 0 10G 0 lvm /var/lib/containers
├─VG_mythtv-LV_var_log 253:6 0 4G 0 lvm /var/log
├─VG_mythtv-LV_var 253:7 0 8G 0 lvm /var
└─VG_mythtv-test--ssd 253:9 0 10G 0 lvm
Post-kickstart General Setup with Ansible
As I mostly do these days, after installing with a minimal kickstart file, I used Ansible to;
- ensure the clock is synchronised
- enable persistent journal logs
- install packages I wanted available
- configure tuned
- configure the host to be monitored by my CheckMK instance
- install cockpit
example playbook, click to expand
- name: "MythTV server for HouseNet general setup"
hosts:
- mythtv
become: yes
vars:
firewalld_zone: FedoraWorkstation
tuned_profile: balanced
tasks:
# ensure time is correct
- name: "CHRONYD | ensure chrony-wait is enabled"
service:
name: chrony-wait
enabled: true
- name: "CHRONYD | ensure chronyd is enabled and running"
service:
name: chronyd
enabled: true
state: started
# enable persistent journal
- name: "JOURNAL | ensure persistent logging for the systemd journal is possible"
file:
path: /var/log/journal
state: directory
owner: root
group: systemd-journal
# These are not needed for MythTV, it's just my usual tools collection
- name: "ensure wanted packages for base OS use are installed"
package:
name:
- powertop
- tuned
- tuned-utils
- mailx
- autofs
- nfs-utils
- hwloc-gui
- numactl
- nvme-cli
state: present
update_cache: no
# ensure tuned is set up as I wish
- name: "TUNED | ensure tuned.service is enabled and running"
systemd:
name: tuned.service
state: started
enabled: true
- name: "TUNED | check which tuned profile is active"
command: tuned-adm active
register: tuned_active_profile
ignore_errors: yes
changed_when: no
- name: "TUNED | activate tuned profile {{ tuned_profile }}"
command: "tuned-adm profile {{ tuned_profile }}"
when: not tuned_active_profile.stdout is search('Current active profile:' ~ ' ' ~ tuned_profile)
# monitoring
# n.b. I manually install the agent with `dnf install http://check-mk.internal.pcfe.net/HouseNet/check_mk/agents/check-mk-agent-1.6.0p9-1.noarch.rpm` instead of pulling it from a repository
- name: "MONITORING | ensure packages for monitoring are installed"
package:
name:
- smartmontools
- hdparm
- check-mk-agent
state: present
- name: "MONITORING | ensure firewalld permits 6556/tcp in zone {{ firewalld_zone }} for check-mk-agent"
firewalld:
port: 6556/tcp
permanent: True
state: enabled
immediate: True
zone: "{{ firewalld_zone }}"
- name: "MONITORING | ensure tarsnap cache is in fileinfo"
lineinfile:
path: /etc/check_mk/fileinfo.cfg
line: "/usr/local/tarsnap-cache/cache"
create: yes
- name: "MONITORING | ensure entropy_avail plugin for Check_MK is present"
template:
src: templates/check-mk-agent-plugin-entropy_avail.j2
dest: /usr/lib/check_mk_agent/plugins/entropy_avail
mode: 0755
group: root
owner: root
- name: "MONITORING | plugins from running CEE instance"
get_url:
url: "http://check-mk.internal.pcfe.net/HouseNet/check_mk/agents/plugins/{{ item }}"
dest: "/usr/lib/check_mk_agent/plugins/{{ item }}"
mode: "0755"
loop:
- smart
- lvm
- name: "MONITORING | ensure check_mk.socket is started and enabled"
systemd:
name: check_mk.socket
state: started
enabled: True
# cockpit make the life on admins easier, give it a try.
# it's on port 9090, example: https://mythtv.internal.pcfe.net:9090/
- name: "COCKPIT | ensure packages for https://cockpit-project.org/ are installed"
package:
name:
- cockpit
- cockpit-selinux
- cockpit-kdump
- cockpit-storaged
- cockpit-networkmanager
- cockpit-system
- cockpit-podman
state: present
update_cache: no
- name: "COCKPIT | Ensure cockpit.socket is started and enabled"
systemd:
name: cockpit.socket
state: started
enabled: True
- name: "COCKPIT | ensure firewalld permits service cockpit in zone {{ firewalld_zone }}"
firewalld:
service: cockpit
zone: "{{ firewalld_zone }}"
permanent: True
state: enabled
immediate: True
# language packs
- name: "PACKAGE | ensure my preferred langpacks are installed"
package:
name:
- langpacks-en
- langpacks-en_GB
- langpacks-de
- langpacks-fr
state: present
update_cache: no
# podman
- name: "PACKAGE | ensure podman is installed"
package:
name:
- podman
- podman-docker
state: present
update_cache: no
# setroubleshoot, see also https://danwalsh.livejournal.com/20931.html
- name: "PACKAGE | ensure setroubleshoot for headless server is installed"
package:
name:
- setroubleshoot-server
- setroubleshoot-plugins
state: present
update_cache: no
# autofs, makes using NFS so much more pleasant
- name: "Ensure autofs.service is started and enabled"
systemd:
name: autofs.service
state: started
enabled: True
# I do want all errata applied
- name: "DNF | ensure all updates are applied"
dnf:
update_cache: yes
name: '*'
state: latest
tags: apply_errata
Feel free to use parts or all of it. Do tell if you have improvements.
Firmware updates
While I was hoping that on a mid-2020 released, UEFI enabled, machine I could comfortably apply vendor “BIOS updates” through fwupd, as of 2020-10-02, ASUS did not (yet) seem to have it in LVFS, but I hope this will improve in the future.
So I updated to the 0416 firmware by;
- downloading a zip from the vendor
- unzipping to
/boot/efi/EFI/
(I could also have extracted it to a USB stick) - entering uefi (aka BIOS) setup by pressing Del during power on self test (POST)
- choosing Tool / Start ASUS EzFlash
- selecting the extracted
PN50-ASUS-0416.CAP
- letting the tool apply the upgrade
Firmware Settings
I changed the following from the shipped defaults (note that some options, e.g. detailed Trusted Computing options, only show up after save & reset of the parent option);
- Advanced / Trusted Computing: Enable
- Advanced / Network Stack Configuration / Network Stack: Enabled
- Advanced / Network Stack Configuration / Ipv4 PXE Suport: Enabled
- Advanced / Network Stack Configuration / Ipv6 PXE Suport: Enabled
- Advanced / Onboard Devices Configuration: all (LAN, WLAN, BT, CIR, HDMI CEC) Enabled
- Advanced / APM / Restore AC Power Loss: Last State
- Advanced / APM / Power On By PCI-E: Enabled
- Advanced / Platform Configuration / PSS Support: Enabled
- Advanced / Platform Configuration / SVM Mode: Enabled
- Boot / Boot Configuration / Boot Logo Display: Full Screen
- Boot / Boot Configuration / Wait for ‘F1’ If Error: Disabled
- Boot / Boot Configuration / Fast Boot: Disabled
- Boot / Secure Boot: Enabled
Some of these are for my comfort (e.g. CEC), others are because I have no plans to run Windows on this hardware and thus no need for Windows specific dumb downs of the options (e.g. boot logo size).
Notes
- Leave Advanced / APM / Power On By RTC set to Disabled if you plan to set the wakeup time from Linux.
- If your PXE setup does not serve signed files, leave Secure Boot disabled until you finished installing. It’s OK to enable this after installation, Fedora has all the needed bits signed.
- MCTP and DASH are off in the default settings, while I did enable them after upgrading to version 0416, these two setting do not seem to stick (others like e.g. enabling PXE boot or setting last state for AC state after power loss do stick). Every time I look on a subsequent visit to the firmware settings they are again Disabled.
Detailed Hardware Info
Memory
SKU PN50-BR037MD came with one Hynix HMA81GS6DJR8N-XN 8 GiB memory module.
[root@mythtv ~]# grep ^MemTotal /proc/meminfo
MemTotal: 7610132 kB
dmidecode -t memory # click to expand
[root@mythtv ~]# dmidecode -t memory
# dmidecode 3.2
Getting SMBIOS data from sysfs.
SMBIOS 3.2.0 present.
Handle 0x0030, DMI type 16, 23 bytes
Physical Memory Array
Location: System Board Or Motherboard
Use: System Memory
Error Correction Type: None
Maximum Capacity: 32 GB
Error Information Handle: 0x002F
Number Of Devices: 2
Handle 0x0037, DMI type 17, 84 bytes
Memory Device
Array Handle: 0x0030
Error Information Handle: 0x0036
Total Width: 64 bits
Data Width: 64 bits
Size: 8 GB
Form Factor: SODIMM
Set: None
Locator: DIMM 0
Bank Locator: P0 CHANNEL A
Type: DDR4
Type Detail: Synchronous Unbuffered (Unregistered)
Speed: 3200 MT/s
Manufacturer: Hynix
Serial Number: [REDACTED]
Asset Tag: Not Specified
Part Number: HMA81GS6DJR8N-XN
Rank: 1
Configured Memory Speed: 3200 MT/s
Minimum Voltage: 1.2 V
Maximum Voltage: 1.2 V
Configured Voltage: 1.2 V
Memory Technology: DRAM
Memory Operating Mode Capability: Volatile memory
Firmware Version: Unknown
Module Manufacturer ID: Bank 1, Hex 0xAD
Module Product ID: Unknown
Memory Subsystem Controller Manufacturer ID: Unknown
Memory Subsystem Controller Product ID: Unknown
Non-Volatile Size: None
Volatile Size: 8 GB
Cache Size: None
Logical Size: None
Handle 0x003A, DMI type 17, 84 bytes
Memory Device
Array Handle: 0x0030
Error Information Handle: 0x0039
Total Width: Unknown
Data Width: Unknown
Size: No Module Installed
Form Factor: Unknown
Set: None
Locator: DIMM 0
Bank Locator: P0 CHANNEL B
Type: Unknown
Type Detail: Unknown
Speed: Unknown
Manufacturer: Unknown
Serial Number: Unknown
Asset Tag: Not Specified
Part Number: Unknown
Rank: Unknown
Configured Memory Speed: Unknown
Minimum Voltage: Unknown
Maximum Voltage: Unknown
Configured Voltage: Unknown
Memory Technology: Unknown
Memory Operating Mode Capability: Unknown
Firmware Version: Unknown
Module Manufacturer ID: Unknown
Module Product ID: Unknown
Memory Subsystem Controller Manufacturer ID: Unknown
Memory Subsystem Controller Product ID: Unknown
Non-Volatile Size: None
Volatile Size: None
Cache Size: None
Logical Size: None
CPU
6 cores, 6 threads, AMD Ryzen 5 4500U
[root@mythtv ~]# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
Address sizes: 48 bits physical, 48 bits virtual
CPU(s): 6
On-line CPU(s) list: 0-5
Thread(s) per core: 1
Core(s) per socket: 6
Socket(s): 1
NUMA node(s): 1
Vendor ID: AuthenticAMD
CPU family: 23
Model: 96
Model name: AMD Ryzen 5 4500U with Radeon Graphics
Stepping: 1
Frequency boost: enabled
CPU MHz: 1397.078
CPU max MHz: 2375.0000
CPU min MHz: 1400.0000
BogoMIPS: 4741.23
Virtualization: AMD-V
L1d cache: 192 KiB
L1i cache: 192 KiB
L2 cache: 3 MiB
L3 cache: 8 MiB
NUMA node0 CPU(s): 0-5
Vulnerability Itlb multihit: Not affected
Vulnerability L1tf: Not affected
Vulnerability Mds: Not affected
Vulnerability Meltdown: Not affected
Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp
Vulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization
Vulnerability Spectre v2: Mitigation; Full AMD retpoline, IBPB conditional, IBRS_FW, STIBP disabled, RSB filling
Vulnerability Srbds: Not affected
Vulnerability Tsx async abort: Not affected
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxs
r sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl n
onstop_tsc cpuid extd_apicid aperfmperf pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse
4_2 movbe popcnt aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy ab
m sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt tce topoext perfctr_core perfctr_
nb bpext perfctr_llc mwaitx cpb cat_l3 cdp_l3 hw_pstate ssbd mba ibrs ibpb stibp vmmcal
l fsgsbase bmi1 avx2 smep bmi2 cqm rdt_a rdseed adx smap clflushopt clwb sha_ni xsaveop
t xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local clzero irperf
xsaveerptr rdpru wbnoinvd arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushb
yasid decodeassists pausefilter pfthreshold avic v_vmsave_vmload vgif umip rdpid overfl
ow_recov succor smca
PCI Devices
[root@mythtv ~]# lspci
00:00.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Renoir Root Complex
00:00.2 IOMMU: Advanced Micro Devices, Inc. [AMD] Renoir IOMMU
00:01.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Renoir PCIe Dummy Host Bridge
00:01.2 PCI bridge: Advanced Micro Devices, Inc. [AMD] Renoir PCIe GPP Bridge
00:02.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Renoir PCIe Dummy Host Bridge
00:02.1 PCI bridge: Advanced Micro Devices, Inc. [AMD] Renoir PCIe GPP Bridge
00:02.2 PCI bridge: Advanced Micro Devices, Inc. [AMD] Renoir PCIe GPP Bridge
00:02.3 PCI bridge: Advanced Micro Devices, Inc. [AMD] Renoir PCIe GPP Bridge
00:08.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Renoir PCIe Dummy Host Bridge
00:08.1 PCI bridge: Advanced Micro Devices, Inc. [AMD] Renoir Internal PCIe GPP Bridge to Bus
00:08.2 PCI bridge: Advanced Micro Devices, Inc. [AMD] Renoir Internal PCIe GPP Bridge to Bus
00:14.0 SMBus: Advanced Micro Devices, Inc. [AMD] FCH SMBus Controller (rev 51)
00:14.3 ISA bridge: Advanced Micro Devices, Inc. [AMD] FCH LPC Bridge (rev 51)
00:18.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Renoir Device 24: Function 0
00:18.1 Host bridge: Advanced Micro Devices, Inc. [AMD] Renoir Device 24: Function 1
00:18.2 Host bridge: Advanced Micro Devices, Inc. [AMD] Renoir Device 24: Function 2
00:18.3 Host bridge: Advanced Micro Devices, Inc. [AMD] Renoir Device 24: Function 3
00:18.4 Host bridge: Advanced Micro Devices, Inc. [AMD] Renoir Device 24: Function 4
00:18.5 Host bridge: Advanced Micro Devices, Inc. [AMD] Renoir Device 24: Function 5
00:18.6 Host bridge: Advanced Micro Devices, Inc. [AMD] Renoir Device 24: Function 6
00:18.7 Host bridge: Advanced Micro Devices, Inc. [AMD] Renoir Device 24: Function 7
01:00.0 USB controller: ASMedia Technology Inc. ASM1042A USB 3.0 Host Controller
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 0e)
02:00.1 Serial controller: Realtek Semiconductor Co., Ltd. Device 816a (rev 0e)
02:00.2 Serial controller: Realtek Semiconductor Co., Ltd. Device 816b (rev 0e)
02:00.3 IPMI Interface: Realtek Semiconductor Co., Ltd. Device 816c (rev 0e)
02:00.4 USB controller: Realtek Semiconductor Co., Ltd. Device 816d (rev 0e)
03:00.0 Network controller: Intel Corporation Wi-Fi 6 AX200 (rev 1a)
04:00.0 Non-Volatile memory controller: SK hynix Device 1527
05:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Renoir (rev c3)
05:00.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Device 1637
05:00.2 Encryption controller: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 10h-1fh) Platform Security Processor
05:00.3 USB controller: Advanced Micro Devices, Inc. [AMD] Renoir USB 3.1
05:00.4 USB controller: Advanced Micro Devices, Inc. [AMD] Renoir USB 3.1
05:00.5 Multimedia controller: Advanced Micro Devices, Inc. [AMD] Raven/Raven2/FireFlight/Renoir Audio Processor (rev 01)
05:00.6 Audio device: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 10h-1fh) HD Audio Controller
05:00.7 Signal processing controller: Advanced Micro Devices, Inc. [AMD] Raven/Raven2/Renoir Sensor Fusion Hub
06:00.0 SATA controller: Advanced Micro Devices, Inc. [AMD] FCH SATA Controller [AHCI mode] (rev 81)
06:00.1 SATA controller: Advanced Micro Devices, Inc. [AMD] FCH SATA Controller [AHCI mode] (rev 81)
For lack of need, I have not yet used
- WLAN
- Bluetooth
FIXME: do a quick smoke test on both.
USB Devices
[root@mythtv ~]# lsusb
Bus 006 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 005 Device 003: ID 8087:0029 Intel Corp. AX200 Bluetooth
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 003: ID 0bda:0129 Realtek Semiconductor Corp. RTS5129 Card Reader Controller
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
[root@mythtv ~]# lsusb -t
/: Bus 06.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 10000M
/: Bus 05.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 480M
|__ Port 3: Dev 3, If 0, Class=Wireless, Driver=btusb, 12M
|__ Port 3: Dev 3, If 1, Class=Wireless, Driver=btusb, 12M
/: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 10000M
/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 480M
|__ Port 4: Dev 3, If 0, Class=Vendor Specific Class, Driver=rtsx_usb, 480M
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 5000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 480M
Wired Network Interface
[root@mythtv ~]# ethtool -i enp2s0f0
driver: r8169
version: 5.8.12-200.fc32.x86_64
firmware-version:
expansion-rom-version:
bus-info: 0000:02:00.0
supports-statistics: yes
supports-test: no
supports-eeprom-access: no
supports-register-dump: yes
supports-priv-flags: no
Wireless Network Interface
[root@mythtv ~]# ethtool -i wlp3s0
driver: iwlwifi
version: 5.8.12-200.fc32.x86_64
firmware-version: 55.d9698065.0 cc-a0-55.ucode
expansion-rom-version:
bus-info: 0000:03:00.0
supports-statistics: yes
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: no
I have no use for it and might remove it to free that M.2 slot.
Topology
[root@mythtv ~]# lstopo
Machine (7432MB total)
Package L#0
NUMANode L#0 (P#0 7432MB)
L3 L#0 (4096KB)
L2 L#0 (512KB) + L1d L#0 (32KB) + L1i L#0 (32KB) + Core L#0 + PU L#0 (P#0)
L2 L#1 (512KB) + L1d L#1 (32KB) + L1i L#1 (32KB) + Core L#1 + PU L#1 (P#1)
L2 L#2 (512KB) + L1d L#2 (32KB) + L1i L#2 (32KB) + Core L#2 + PU L#2 (P#2)
L3 L#1 (4096KB)
L2 L#3 (512KB) + L1d L#3 (32KB) + L1i L#3 (32KB) + Core L#3 + PU L#3 (P#3)
L2 L#4 (512KB) + L1d L#4 (32KB) + L1i L#4 (32KB) + Core L#4 + PU L#4 (P#4)
L2 L#5 (512KB) + L1d L#5 (32KB) + L1i L#5 (32KB) + Core L#5 + PU L#5 (P#5)
HostBridge
PCIBridge
PCI 02:00.0 (Ethernet)
Net "enp2s0f0"
PCIBridge
PCI 03:00.0 (Network)
Net "wlp3s0"
PCIBridge
PCI 04:00.0 (NVMExp)
Block(Disk) "nvme0n1"
PCIBridge
PCI 05:00.0 (VGA)
PCIBridge
PCI 06:00.0 (SATA)
Block(Disk) "sda"
PCI 06:00.1 (SATA)
Misc(MemoryModule)
Misc(MemoryModule)
NVMe
On my PN50-BR037MD, ASUS put in a SK hynix HFS256GD9TNG-62A0A NVMe SSD (238.5GiB aka 256 GB).
The SK hynix specifications say
Performance (up to) | value |
---|---|
Sequential Read | 2500MB/s |
Sequential Write | 770MB/s |
Random Read | 120K IOPS |
Random Write | 170K IOPS |
With the following notes
- performance
- IOmeter1.1 is used for measuring. Measurements are performed on 1GB of LBA range with a queue depth 32.
- System variations may affect results. (Test Pre-condition : Secure erased and NTFS formatted of a secondary drive)
- sequential read or write
- Set to 128KiB alignment
- 1MB/sec = 1,000,000 bytes/sec was used in sequential performances.
- random read or write
- Set to 4KiB alignment, 4 threads condition
SATA bay
The 2.5" SATA bay can accommodate both 7mm and 9,5mm high devices. source; page 33 of the User Manual but not 15mm ones.
2TB HDD Addition
I added a Seagate SATA 6 Gb/s, 2,5", BarraCuda 2 TB (ST2000LM015) HDD.
You can find specifications on the Seagate website.
I expect any 7mm or 9,5mm 2.5" SATA device to work in the slot.
Quick dd Test of the SATA HDD
Since I anyway write spinning rust once full of zeroes after purchasing them
(so that each block has a chance to trigger badblock reallocation),
I might as well paste the numbers I got from dd
, over 100MB/s is
a bit more than will go through the 1Gib/s ethernet connection
and should be more than ample to deal with a few HD video streams
(AFAIR that’s below 20 MB/s but I’m unsure if it was even below 10);
[root@mythtv ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 1.8T 0 disk
└─sda1 8:1 0 1.8T 0 part
└─VG_mythtv-LV_video 253:2 0 100G 0 lvm /video
nvme0n1 259:0 0 238.5G 0 disk
├─nvme0n1p1 259:1 0 600M 0 part /boot/efi
├─nvme0n1p2 259:2 0 1G 0 part /boot
└─nvme0n1p3 259:3 0 236.9G 0 part
├─VG_mythtv-LV_root 253:0 0 15G 0 lvm /
├─VG_mythtv-LV_swap 253:1 0 14.8G 0 lvm [SWAP]
├─VG_mythtv-home 253:3 0 15G 0 lvm /home
├─VG_mythtv-LV_var_crash 253:4 0 10G 0 lvm /var/crash
├─VG_mythtv-LV_containers 253:5 0 10G 0 lvm /var/lib/containers
├─VG_mythtv-LV_var_log 253:6 0 4G 0 lvm /var/log
└─VG_mythtv-LV_var 253:7 0 8G 0 lvm /var
[root@mythtv ~]# dd if=/dev/zero of=/video/banana status=progress
106536235008 bytes (107 GB, 99 GiB) copied, 828 s, 129 MB/s
dd: writing to '/video/banana': No space left on device
208085249+0 records in
208085248+0 records out
106539646976 bytes (107 GB, 99 GiB) copied, 827.585 s, 129 MB/s
[root@mythtv ~]# rm /video/banana
rm: remove regular file '/video/banana'? y
set up an LV with fiolesystem covering the rest of the HDD, click to expand
[root@mythtv ~]# date
Sat Oct 3 20:53:26 CEST 2020
[root@mythtv ~]# lvcreate -l 100%FREE VG_mythtv -n banana /dev/sda1
Logical volume "banana" created.
[root@mythtv ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 1.8T 0 disk
└─sda1 8:1 0 1.8T 0 part
├─VG_mythtv-LV_video 253:2 0 100G 0 lvm /video
└─VG_mythtv-banana 253:8 0 1.7T 0 lvm
nvme0n1 259:0 0 238.5G 0 disk
├─nvme0n1p1 259:1 0 600M 0 part /boot/efi
├─nvme0n1p2 259:2 0 1G 0 part /boot
└─nvme0n1p3 259:3 0 236.9G 0 part
├─VG_mythtv-LV_root 253:0 0 15G 0 lvm /
├─VG_mythtv-LV_swap 253:1 0 14.8G 0 lvm [SWAP]
├─VG_mythtv-LV_home 253:3 0 15G 0 lvm /home
├─VG_mythtv-LV_var_crash 253:4 0 10G 0 lvm /var/crash
├─VG_mythtv-LV_containers 253:5 0 10G 0 lvm /var/lib/containers
├─VG_mythtv-LV_var_log 253:6 0 4G 0 lvm /var/log
└─VG_mythtv-LV_var 253:7 0 8G 0 lvm /var
[root@mythtv ~]# mkfs.xfs /dev/mapper/VG_mythtv-banana
meta-data=/dev/mapper/VG_mythtv-banana isize=512 agcount=4, agsize=115540736 blks
= sectsz=4096 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=462162944, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=225665, version=2
= sectsz=4096 sunit=1 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
Discarding blocks...Done.
[root@mythtv ~]# mkdir /mnt/testing
[root@mythtv ~]# mount /dev/mapper/VG_mythtv-banana /mnt/testing
[root@mythtv ~]# dd if=/dev/zero of=/mnt/testing/fillfile status=progress
1878867808768 bytes (1.9 TB, 1.7 TiB) copied, 18569 s, 101 MB/s
dd: writing to '/mnt/testing/fillfile': No space left on device
3669666553+0 records in
3669666552+0 records out
1878869274624 bytes (1.9 TB, 1.7 TiB) copied, 18568.9 s, 101 MB/s
To be clear, this is not a benchmark, it is a number falling out of a process I do anyway. I mean I did not even stop using the machine for other taskjs, so the above numbers really are nothing more than a rough indication.
FIXME: take the time to do some fio
tests, although there’s already a couple
in my RHEL 8 on PN50 post
and this will be a VDR, not a server.
Disappointments
Note that for a PVR the lack of HW watchdog and IPMI are OK, but this does put a dampener on my plans to buy more of these machines for more important tasks. Shame, with their ability to have 64 GiB RAM and Ryzen 7 CPU models, they had much promise.
The ACPI BIOS Errors are not nice, I expected better from ASUS :-( Then again my past use of ASUS has always been motherboards, never coimplete systems.
Watchdog is Disabled
And I found no option in the UEFI setup to enable it, maybe I overlooked it.
[root@mythtv ~]# journalctl -b --grep "sp5100"
-- Logs begin at Sat 2020-10-03 11:28:33 CEST, end at Sat 2020-10-03 14:55:01 CEST. --
Oct 03 12:44:57 mythtv.[…] kernel: sp5100_tco: SP5100/SB800 TCO WatchDog Timer Driver
Oct 03 12:44:57 mythtv.[…] kernel: sp5100-tco sp5100-tco: Using 0xfed80b00 for watchdog MMIO address
Oct 03 12:44:57 mythtv.[…] kernel: sp5100-tco sp5100-tco: Watchdog hardware is disabled
No IPMI
Not that I expected it to, again revisit firmware setup to be sure.
[root@mythtv ~]# journalctl -b --grep "ipmi"
-- Logs begin at Sat 2020-10-03 11:28:33 CEST, end at Sat 2020-10-03 14:55:01 CEST. --
Oct 03 12:44:57 mythtv.[…] kernel: IPMI message handler: version 39.2
Oct 03 12:44:57 mythtv.[…] kernel: ipmi device interface
Oct 03 12:44:57 mythtv.[…] kernel: ipmi_si: IPMI System Interface driver
Oct 03 12:44:57 mythtv.[…] kernel: ipmi_si: Unable to find any System Interface(s)
BIOS 0416 has ACPI BIOS Errors
Hopefully this will improve with future firmware versions. Another thing that is OKish for the DVR use case but speaks against buying more PN50 for more serious use than watching TV.
I also saw those on RHEL8 with default BIOS options
ACPI BIOS Errors, click to expand
[root@mythtv ~]# uname -r
5.8.12-200.fc32.x86_64
[root@mythtv ~]# journalctl -b --grep "ACPI BIOS"
-- Logs begin at Sat 2020-10-03 11:28:33 CEST, end at Sat 2020-10-03 14:51:57 CEST. --
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\SMIB], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Could not resolve symbol [\_SB.PCI0.M291.WLAN], AE_NOT_FOUND (20200528/dswload2-162)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.VER1], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.CCI0], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.CCI1], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.CCI2], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.CCI3], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.CTL0], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.CTL1], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.CTL2], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.CTL3], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.CTL4], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.CTL5], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.CTL6], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.CTL7], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.MGI0], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.MGI1], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.MGI2], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.MGI3], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.MGI4], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.MGI5], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.MGI6], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.MGI7], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.MGI8], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.MGI9], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.MGIA], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.MGIB], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.MGIC], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.MGID], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.MGIE], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.MGIF], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.MGO0], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.MGO1], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.MGO2], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.MGO3], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.MGO4], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.MGO5], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.MGO6], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.MGO7], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.MGO8], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.MGO9], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.MGOA], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.MGOB], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.MGOC], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.MGOD], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.MGOE], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Failure creating named object [\_SB.PCI0.SBRG.EC0.MGOF], AE_ALREADY_EXISTS (20200528/dsfield-637)
[…] kernel: ACPI BIOS Error (bug): Could not resolve symbol [\_SB.PCI0.SBRG.EC0.OKEC], AE_NOT_FOUND (20200528/psargs-330)
I did expect better from ASUS.
Positive Surprises
The retail package came with, in addition to the items listed in the manual, a complement of
- 2.5" strorage device screws, coated.
- a VESA mount plate with all the screws.
Thank you ASUS, small things like that are appreciated.
Wished Improvements
More appreciated though would be a better job with the firmware.
I’d like to see;
- fewer BIOS errors, ideally none
- details on the BIOS options in the manual (like I am used from ASUS motherboards)
- no to be filled by O.E.M. strings
Links
- ASUS
- Firmware download
- Manual on 2020-10-02 I retrieved and read _E16255, First Edition, July 2020
- EzFlash usage FAQ entry