Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Request for support of FS2500 dtcpatch #11

Closed
PeterSuh-Q3 opened this issue Jul 12, 2022 · 13 comments
Closed

Request for support of FS2500 dtcpatch #11

PeterSuh-Q3 opened this issue Jul 12, 2022 · 13 comments

Comments

@PeterSuh-Q3
Copy link
Contributor

As you can see in the sample, the FS2500 uses a pattern value of mv14xx instead of ahci, phy instead of ata_port.

Can you include this new pattern in the dtb patch utility as well?

syno_block_info is the same as before.

( And during testing with pocopico, DS2422+ also found a peculiarity of the contents of the dtb file. dts file and I will request more. )

SynologyNAS> cat /sys/block/*/device/syno_block_info
pciepath=00:1f.2
ata_port_no=0
driver=ahci
pciepath=00:1f.2
ata_port_no=1
driver=ahci
pciepath=00:1f.2
ata_port_no=3
driver=ahci

SynologyNAS> cat output.dts.out
/dts-v1/;
/ {
        compatible = "Synology";
        model = "synology_v1000_fs2500";
        version = <0x01>;
        syno_hdd_powerup_seq = "true";
        syno_smbus_hdd_type = "microp";
        syno_smbus_hdd_adapter = <0x01>;
        syno_smbus_hdd_address = <0x47>;
        syno_cmos_reg_secure_flash = <0xe0>;
        syno_cmos_reg_secure_boot = <0xe2>;
        syno_uart_logout_gpio = <0x07 0x01>;
        internal_slot@1 {
                protocol_type = "sata";
                led_type = "1475";
                mv14xx {
                        pcie_root = "00:01.1,00.0";
                        phy = <0x00>;
                };
        };
        internal_slot@2 {
                protocol_type = "sata";
                led_type = "1475";
                mv14xx {
                        pcie_root = "00:01.1,00.0";
                        phy = <0x01>;
                };
        };
        internal_slot@3 {
                protocol_type = "sata";
                led_type = "1475";
                mv14xx {
                        pcie_root = "00:01.1,00.0";
                        phy = <0x02>;
                };
        };
        internal_slot@4 {
                protocol_type = "sata";
                led_type = "1475";
                mv14xx {
                        pcie_root = "00:01.1,00.0";
                        phy = <0x03>;
                };
        };
        internal_slot@5 {
                protocol_type = "sata";
                led_type = "1475";
                mv14xx {
                        pcie_root = "00:01.1,00.0";
                        phy = <0x04>;
                };
        };
        internal_slot@6 {
                protocol_type = "sata";
                led_type = "1475";
                mv14xx {
                        pcie_root = "00:01.1,00.0";
                        phy = <0x05>;
                };
        };
        internal_slot@7 {
                protocol_type = "sata";
                led_type = "1475";
                mv14xx {
                        pcie_root = "00:01.1,00.0";
                        phy = <0x06>;
                };
        };
        internal_slot@8 {
                protocol_type = "sata";
                led_type = "1475";
                mv14xx {
                        pcie_root = "00:01.1,00.0";
                        phy = <0x07>;
                };
        };
        internal_slot@9 {
                protocol_type = "sata";
                led_type = "1475";
                mv14xx {
                        pcie_root = "00:01.1,00.0";
                        phy = <0x08>;
                };
        };
        internal_slot@10 {
                protocol_type = "sata";
                led_type = "1475";
                mv14xx {
                        pcie_root = "00:01.1,00.0";
                        phy = <0x09>;
                };
        };
        internal_slot@11 {
                protocol_type = "sata";
                led_type = "1475";
                mv14xx {
                        pcie_root = "00:01.1,00.0";
                        phy = <0x0a>;
                };
        };
        internal_slot@12 {
                protocol_type = "sata";
                led_type = "1475";
                mv14xx {
                        pcie_root = "00:01.1,00.0";
                        phy = <0x0b>;
                };
        };
        pcie_slot@1 {
                pcie_root = "00:01.2";
        };
        usb_slot@1 {
                vbus {
                        syno_gpio = <0x2a 0x01>;
                };
                usb2 {
                        usb_port = "1-2";
                };
                usb3 {
                        usb_port = "2-2";
                };
        };
        usb_slot@2 {
                vbus {
                        syno_gpio = <0x0b 0x01>;
                };
                usb2 {
                        usb_port = "1-3";
                };
                usb3 {
                        usb_port = "2-3";
                };
        };
};

@fbelavenuto
Copy link
Owner

Ready for tests:
099df79

@PeterSuh-Q3
Copy link
Contributor Author

I am also ready to try at TC.
install.sh with help from pocopico and
Is it correct to replace with your dtbpatch?

https://github.com/PeterSuh-Q3/rp-ext/tree/main/dtbpatch/releases

@fbelavenuto
Copy link
Owner

Yep, replace only dtbpatch binary

@PeterSuh-Q3
Copy link
Contributor Author

The patched dtb file was converted to dts again and the contents were examined.
There doesn't seem to be any problem,
Why can't even one of the three discs be recognized?

SynologyNAS> ./dtc -I dtb -O dts -o output.dts output.dtb
output.dts: Warning (unit_address_vs_reg): /pcie_slot@1: node has a unit name, but no reg or ranges property
output.dts: Warning (unit_address_vs_reg): /usb_slot@1: node has a unit name, but no reg or ranges property
output.dts: Warning (unit_address_vs_reg): /usb_slot@2: node has a unit name, but no reg or ranges property
output.dts: Warning (unit_address_vs_reg): /internal_slot@1: node has a unit name, but no reg or ranges property
output.dts: Warning (unit_address_vs_reg): /internal_slot@2: node has a unit name, but no reg or ranges property
output.dts: Warning (unit_address_vs_reg): /internal_slot@3: node has a unit name, but no reg or ranges property
SynologyNAS> ll
drwxr-sr-x 2 root root 0 Jul 12 13:16 .
drwxr-sr-x 8 root root 0 Jul 12 13:08 ..
-rw-r--r-- 1 root root 130824 Jul 12 13:02 dtbpatch
-rwxr-xr-x 1 root root 150200 Jul 12 13:02 dtc
-rw-r--r-- 1 root root 1105 Jul 12 13:02 install.sh
-rw-r--r-- 1 root root 1143 Jul 12 13:09 output.dtb
-rw-r--r-- 1 root root 1049 Jul 12 13:17 output.dts
SynologyNAS> cat output.dts
/dts-v1/;

/ {
compatible = "Synology";
model = "synology_v1000_fs2500";
version = <0x01>;
syno_hdd_powerup_seq = "true";
syno_smbus_hdd_type = "microp";
syno_smbus_hdd_adapter = <0x01>;
syno_smbus_hdd_address = <0x47>;
syno_cmos_reg_secure_flash = <0xe0>;
syno_cmos_reg_secure_boot = <0xe2>;
syno_uart_logout_gpio = <0x07 0x01>;

    pcie_slot@1 {
            pcie_root = "00:01.2";
    };

    usb_slot@1 {

            vbus {
                    syno_gpio = <0x2a 0x01>;
            };

            usb2 {
                    usb_port = "1-2";
            };

            usb3 {
                    usb_port = "2-2";
            };
    };

    usb_slot@2 {

            vbus {
                    syno_gpio = <0x0b 0x01>;
            };

            usb2 {
                    usb_port = "1-3";
            };

            usb3 {
                    usb_port = "2-3";
            };
    };

    internal_slot@1 {
            protocol_type = "sata";
            led_type = "1475";

            mv14xx {
                    pcie_root = "00:1f.2";
                    phy = <0x00>;
            };
    };

    internal_slot@2 {
            protocol_type = "sata";
            led_type = "1475";

            mv14xx {
                    pcie_root = "00:1f.2";
                    phy = <0x01>;
            };
    };

    internal_slot@3 {
            protocol_type = "sata";
            led_type = "1475";

            mv14xx {
                    pcie_root = "00:1f.2";
                    phy = <0x03>;
            };
    };

};

@PeterSuh-Q3
Copy link
Contributor Author

Maybe model_r2.dtb or a model using a different name?

@fbelavenuto
Copy link
Owner

Sorry for delay! I've study the DSM scripts and adapted the dtbpatch, please test with pocopico extension:
https://github.com/fbelavenuto/arpl-addons/blob/main/dtbpatch/install.sh

@PeterSuh-Q3
Copy link
Contributor Author

PeterSuh-Q3 commented Aug 10, 2022

That's OK.

The ext of pocopico and the script you provided are merged as follows.

https://github.com/PeterSuh-Q3/rp-ext/blob/main/dtbpatch/releases/install.sh

This is first test result.

It seems that HW revision information cannot be found in FS2500.
There was no problem in a separate test of DS920+.

SynologyNAS> cd /var/log
SynologyNAS> ll
drwxr-xr-x 2 root root 0 Aug 10 08:38 .
drwxr-xr-x 9 root root 0 Aug 10 08:38 ..
-rw-r--r-- 1 root root 40 Aug 10 08:38 junior_reason
-rw-r--r-- 1 root root 2410 Aug 10 08:38 linuxrc.syno.log
-rw-r--r-- 1 root root 45873 Aug 10 08:38 messages
SynologyNAS> cat linuxrc.syno.log
START /linuxrc.syno.impl
'/etc.defaults/model.dtb' -> '/var/run/model.dtb'
Insert Marvell 1475 SATA controller driver
Insert basic USB modules...
:: Loading module usb-common ... [ OK ]
:: Loading module usbcore ... [ OK ]
:: Loading module ehci-hcd ... [ OK ]
:: Loading module ehci-pci ... [ OK ]
:: Loading module uhci-hcd ... [ OK ]
:: Loading module xhci-hcd ... [ OK ]
:: Loading module xhci-pci ... [ OK ]
:: Loading module usb-storage ... [ OK ]
:: Loading kernel modules from extensions ...
Loading kmod #0 "e1000.ko" for PeterSuh-Q3.e1000 (args: )
Checking if kmods for thethorgroup.virtio should run using check-virtio.sh script
Checking for VirtIO
VirtIO hypervisor detected
Loading kmod #0 "virtio.ko" for thethorgroup.virtio (args: )
Loading kmod #1 "virtio_ring.ko" for thethorgroup.virtio (args: )
Loading kmod #2 "virtio_mmio.ko" for thethorgroup.virtio (args: )
Loading kmod #3 "virtio_pci.ko" for thethorgroup.virtio (args: )
Loading kmod #4 "virtio_blk.ko" for thethorgroup.virtio (args: )
Loading kmod #5 "virtio_net.ko" for thethorgroup.virtio (args: )
Loading kmod #6 "virtio_scsi.ko" for thethorgroup.virtio (args: )
:: Loading kernel modules from extensions ... [ OK ]
:: Executing "on_boot" custom scripts ...
Running "check-e1000.sh" for PeterSuh-Q3.e1000->on_boot
Loading module e1000 -> Module e1000 loaded succesfully
Ran "check-e1000.sh" for PeterSuh-Q3.e1000->on_boot - exit=0
Running "install.sh" for dtbpatch->on_boot
System is booting
dtbpatch - early
Patching /etc.defaults/model.dtb
/sys/block/sata1/device/syno_block_info
00:0d.0 - 1
/sys/block/sata2/device/syno_block_info
00:0d.0 - 2
Ran "install.sh" for dtbpatch->on_boot - exit=0
Running "install_rd.sh" for redpill-misc->on_boot
Starting ttyd, listening on port: 7681
Ran "install_rd.sh" for redpill-misc->on_boot - exit=0
Running "boot-wait.sh" for thethorgroup.boot-wait->on_boot
Confirmed a valid-looking /dev/synoboot device
Ran "boot-wait.sh" for thethorgroup.boot-wait->on_boot - exit=0
:: Executing "on_boot" custom scripts ... [ OK ]
Extensions processed
insmod: can't insert '/lib/modules/etxhci-hcd.ko': No such file or directory
Insert net driver(Mindspeed only)...
Starting /usr/syno/bin/synocfgen...
/usr/syno/bin/synocfgen returns 0
All disk ready or timeout execeed
Exit on error [1] DISK NOT INSTALLED...
Wed Aug 10 08:38:06 UTC 2022
none /sys/kernel/debug debugfs rw,relatime 0 0
SynologyNAS> cat /proc/sys/kernel/syno_hw_revision

SynologyNAS> cd /proc/sys/kernel/
SynologyNAS> ll syno*
-rw-r--r-- 1 root root 0 Aug 10 08:47 syno_CPU_info_clock
-rw-r--r-- 1 root root 0 Aug 10 08:47 syno_CPU_info_core
-rw-r--r-- 1 root root 0 Aug 10 08:47 syno_ata_debug
-r--r--r-- 1 root root 0 Aug 10 08:47 syno_custom_serial
-rw-r--r-- 1 root root 0 Aug 10 08:47 syno_debug_flag
-rw-r--r-- 1 root root 0 Aug 10 08:47 syno_deno_of_spinup_time
-r--r--r-- 1 root root 0 Aug 10 08:47 syno_disable_usb3
-r--r--r-- 1 root root 0 Aug 10 08:47 syno_disk_eh_flag
-r--r--r-- 1 root root 0 Aug 10 08:38 syno_disk_ready_check
-rw-r--r-- 1 root root 0 Aug 10 08:47 syno_disk_seq_valid_bytes_threshold
-rw-r--r-- 1 root root 0 Aug 10 08:47 syno_disk_seq_valid_skip_bytes
-rw-r--r-- 1 root root 0 Aug 10 08:47 syno_disks_group
-r--r--r-- 1 root root 0 Aug 10 08:47 syno_dyn_module
-rw-r--r-- 1 root root 0 Aug 10 08:47 syno_forbid_console
-rw-r--r-- 1 root root 0 Aug 10 08:47 syno_forbid_usb
-rw-r--r-- 1 root root 0 Aug 10 08:47 syno_fs_pattern_check_flag
-rw-r--r-- 1 root root 0 Aug 10 08:47 syno_hibernation_log_level
-r--r--r-- 1 root root 0 Aug 10 08:38 syno_hw_revision
-r--r--r-- 1 root root 0 Aug 10 08:38 syno_hw_version
-rw-r--r-- 1 root root 0 Aug 10 08:45 syno_install_flag
-rw-r--r-- 1 root root 0 Aug 10 08:38 syno_internal_netif_num
-r--r--r-- 1 root root 0 Aug 10 08:47 syno_mac_address1
-r--r--r-- 1 root root 0 Aug 10 08:47 syno_mac_address2
-r--r--r-- 1 root root 0 Aug 10 08:47 syno_mac_address3
-r--r--r-- 1 root root 0 Aug 10 08:47 syno_mac_address4
-r--r--r-- 1 root root 0 Aug 10 08:38 syno_mac_addresses
-rw-r--r-- 1 root root 0 Aug 10 08:47 syno_page_alloc_failed_log
-rw-r--r-- 1 root root 0 Aug 10 08:47 syno_pattern_check_character
-rw-r--r-- 1 root root 0 Aug 10 08:47 syno_raid_sync_flag
-r--r--r-- 1 root root 0 Aug 10 08:47 syno_reset_flag
-r--r--r-- 1 root root 0 Aug 10 08:38 syno_serial
-r--r--r-- 1 root root 0 Aug 10 08:38 syno_skip_vender_mac_interfaces
-rw-r--r-- 1 root root 0 Aug 10 08:47 syno_spinup_group_debug
-rw-r--r-- 1 root root 0 Aug 10 08:47 syno_spinup_group_delay
-rw-r--r-- 1 root root 0 Aug 10 08:47 syno_swap_flag
-rw-r--r-- 1 root root 0 Aug 10 08:47 syno_unsupported_sfp_notify
-r--r--r-- 1 root root 0 Aug 10 08:47 syno_usb_fast_reset
-r--r--r-- 1 root root 0 Aug 10 08:45 syno_vender_format_version

@PeterSuh-Q3
Copy link
Contributor Author

Since I gave an example of ds920+, I don't know if it will be helpful, but pocopico once mentioned the following.

Well that is not true, the original file has single digit values for port numbers. Bellow the snip taken from original /etc/model.dtb

  ahci {
                    pcie_root = "00:13.0,00.0";
                    ata_port = <0x2>;
            };

Also the linuxrc.syno.impl refers to two different hardware revisions of ds920p. Depends on HW_VERSION and HW_REVISION

linuxrc.syno.impl- HW_VERSION=cat /proc/sys/kernel/syno_hw_version
linuxrc.syno.impl- HW_REVISION=cat /proc/sys/kernel/syno_hw_revision
linuxrc.syno.impl-
linuxrc.syno.impl- if [ "xr1" = "x${HW_REVISION}" ] && [ -e /etc.defaults/model_r1.dtb ]; then
linuxrc.syno.impl: cp -vf /etc.defaults/model_r1.dtb /var/run/model.dtb
linuxrc.syno.impl- else
linuxrc.syno.impl: cp -vf /etc.defaults/model.dtb /var/run/
linuxrc.syno.impl- fi


More on that issue. /proc/sys/kernel/syno_hw_revision is empty so the /etc.defaults/model.dtb is always copied to /var/run.

Jumkeys extension should work as designed.

@fbelavenuto
Copy link
Owner

fbelavenuto commented Aug 11, 2022

@fbelavenuto
Copy link
Owner

I got this messages below (no relative to the discs), maybe some work is necessary yet?
image

@PeterSuh-Q3
Copy link
Contributor Author

PeterSuh-Q3 commented Aug 12, 2022

Like the RS4021xs+, the FS2500 is a dual PSU system.

RS4021xs+ has the same PSU warning issue.

A Korean user shares his analysis regarding REDPILL PSU.

After installing Proxmox on the Dell r720, I uploaded the 4021xs+ model, but a PSU warning popped up even though it was a server device, so I looked for the related code and data.

  • Problems are listed in /var/log/scemd.log

2022-08-09T17:26:24+09:00 rs4021_test scemd[13512]: scemd_connector.c:142 scemd connector thread start.

2022-08-09T17:26:24+09:00 rs4021_test scemd[13512]: manage_services.c:503 sys raid adjust thread 139872253769472 created

2022-08-09T17:26:24+09:00 rs4021_test scemd[13512]: scemd_status/scemd_set_status.c:23 Scemd is abnormal restart...

2022-08-09T17:26:24+09:00 rs4021_test scemd[13512]: redundant_power_check.c:359 Initialize the dual power cpld

2022-08-09T17:26:24+09:00 rs4021_test scemd[13512]: raid_sys_volume_check.c:153 MD0 active disks 1, designed disks 12

2022-08-09T17:26:24+09:00 rs4021_test scemd[13512]: raid_sys_volume_check.c:153 MD1 active disks 1, designed disks 12

2022-08-09T17:26:24+09:00 rs4021_test scemd[13512]: system_status.c:274 Hibernation timer:-1 min(s)

2022-08-09T17:26:24+09:00 rs4021_test scemd[13512]: system_status.c:278 Deep sleep timer:-1 min(s)

2022-08-09T17:26:28+09:00 rs4021_test scemd[13512]: led.c:334 Enable power & phy LED

2022-08-09T17:26:30+09:00 rs4021_test scemd[13512]: redundant_power_check.c:366 Redundant power 1 fail

2022-08-09T17:26:30+09:00 rs4021_test scemd[13512]: sysnotify_send_notification.c:393 SYSNOTIFY: [RedundantPowerStopProvide] was sent to desktop,mobile

2022-08-09T17:26:30+09:00 rs4021_test scemd[13547]: plugin_action.c:319 synoplugin: [13512][POST][notification][synomibclient_event.sh][13547] ExitCode: 0

2022-08-09T17:26:30+09:00 rs4021_test scemd[13547]: plugin_action.c:319 synoplugin: [13512][POST][notification][synomibclient_event.sh][13547] Runtime: 0.047s

2022-08-09T17:26:30+09:00 rs4021_test scemd[13512]: plugin_action.c:317 synoplugin: [13512][POST][notification][MAIN] Runtime: 0.051s

2022-08-09T17:26:30+09:00 rs4021_test scemd[13512]: redundant_power_check.c:385 Redundant power 2 fail

2022-08-09T17:26:30+09:00 rs4021_test scemd[13540]: pushservice_update_ds_token.c:52 fgets failed

2022-08-09T17:26:30+09:00 rs4021_test scemd[13540]: pushservice_update_ds_token.c:147 Can't set api key

2022-08-09T17:26:30+09:00 rs4021_test scemd[13540]: pushservice_utils.c:325 SYNOPushserviceUpdateDsToken failed.

2022-08-09T17:26:30+09:00 rs4021_test scemd[13540]: pushservice_utils.c:387 GenerateDsToken Failed


So I was looking for what that part was.

Inside the file ds.broadwellnk-70.dev/usr/local/include/hwctl/ebox.h
there is something like this
/**
* Get the status of redundant power units
*
* @param pHandle [IN] chip handle. Should not be NULL.
* pPSUStat [OUT] The bit map of redundant power status,
* bit [n...0] stands for power [(n-1)...1].
* 0 is failed, 1 is ok.
*
* @return >0: supporting redundants power,
* the number of working power units.
* 0: no redundant power units.
* -1: failed
*/
int (*RedundantPowerStatGet)(struct _tag_EBOX_HANDLE *pHandle, int *pPSUStat);

These things also exist.
in ds.broadwellnk-70.dev/usr/local/include/synobios/synobios.h

typedef enum {
POWER_STATUS_BAD = 0,
POWER_STATUS_GOOD,
} SYNO_POWER_STATUS;
.
.
.
typedef struct _tag_POWER_INFO {
SYNO_POWER_STATUS power_1;
SYNO_POWER_STATUS power_2;
} POWER_INFO;

Above all, it seems that the power-related part in the redpill-lkm -> hwmon part is incomplete.

https://github.com/PeterSuh-Q3/redpill-lkm/blob/master/shim/bios/bios_hwmon_shim.c#L298

  • hwmon description

https://github.com/RedPill-TTG/dsm-research/blob/master/quirks/hwmon.md

@Puri12
Copy link

Puri12 commented Aug 12, 2022

hello,
I am the Korean user mentioned above by @PeterSuh-Q3.
First of all, I apologize for my poor English skills.

There are a few more items I found related to PSUs, so I'll share them with you.

location: Synology NAS GPL Source/25426branch/broadwellnk-source/linux-4.4.x.txz/arch/x86/kernel/setup.c:530

static u8 SYNO_GET_RP_POWERGOOD_PIN(const int index)
{
	u8 ret = GPIO_UNDEF;

	if (0 == g_syno_rp_detect_no) {
		goto END;
	}

	if (1 > index || g_syno_rp_detect_no < index) {
		printk("%s(%d) is illegal", __func__, index);
		WARN_ON(1);
		goto END;
	}

	ret = g_syno_rp_detect_list[index-1];

END:
	return ret;
}

int SYNO_CHECK_RP_POWERGOOD(int index)
{
	int iPrzVal = 1;  
	u8 iPin = SYNO_GET_RP_POWERGOOD_PIN(index);

	if (GPIO_UNDEF == iPin) {
		goto END;
	}

	iPrzVal = SYNO_X86_GPIO_PIN_GET(iPin);
END:
	return iPrzVal;
}
EXPORT_SYMBOL(SYNO_CHECK_RP_POWERGOOD);
int SynoHaveRPDetectPin(void)
{
	if (2 == g_syno_rp_detect_no) {
		return 1;
	}
	return 0;
}
EXPORT_SYMBOL(SynoHaveRPDetectPin);
int SynoAllRedundantPowerDetected(void)
{
	if (2 == g_syno_rp_detect_no &&
			!(SYNO_CHECK_RP_POWERGOOD(1) ^ SYNO_CHECK_RP_POWERGOOD(2))) {
		return 1;
	}
	return 0;
}
EXPORT_SYMBOL(SynoAllRedundantPowerDetected);
extern int giSynoSpinupGroupDebug;
void DBG_SpinupGroupListGpio(void)
{
	int i = 0;

	if (0 == giSynoSpinupGroupDebug) {
		return;
	}

	for (i = 1; i <= g_syno_rp_detect_no; ++i) {
		printk("gpio debug: redundant power #%d, value= %d\n", i, SYNO_CHECK_RP_POWERGOOD(i));
	}
	for (i = 1; i <= g_syno_hdd_detect_no; ++i) {
		printk("gpio debug: HDD #%d detect, value= %d\n", i, SYNO_CHECK_HDD_PRESENT(i));
	}
	for (i = 1; i <= g_syno_hdd_enable_no; ++i) {
		printk("gpio debug: HDD #%d enable, value= %d\n", i, SYNO_X86_GPIO_PIN_GET(SYNO_GET_HDD_ENABLE_PIN(i)));
	}
}

It is very complex and difficult to understand, but it is shown as a code that checks the status of the PSU.
I hope it will be of help!
And thank you for always working hard for xpenology!

@fbelavenuto
Copy link
Owner

Thanks for the information about PSUs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants