Wind River Support Network


LIN7-6424 : Setting SLCR_LOCK causes Ethernet disconnection

Created: Jun 14, 2016    Updated: Sep 8, 2018
Resolved Date: Nov 15, 2016
Found In Version:
Fix Version:
Severity: Standard
Applicable for: Wind River Linux 7
Component/s: BSP


When locking the SLCR the ethernet port seems out of order, no packet is emitted nor received.
This happens after following this steps :
- unplug Ethernet cable
- Unlock SLCR
- set a value in SLCR_REBOOT_STATUS register
- Lock SLCR
- plug back Ethernet cable

Ethernet port is unusable, no communication can be established.
But if the same steps are followed without the 'lock SLCR' write operation everything will work normally.

Note while the technical reference manual specifies in several places to proceed with:
1. first unlock the SLCR module
see for example: Configure Controllers for EMIO
or Configuring Clocks for MIO
10. last lock the SLCR module
the kernel code does not follow that procedure, in particular refer to arch/arm/mach-zynq/slcr.c:

void zynq_slcr_system_reset(void)
        u32 reboot;

         * Unlock the SLCR then reset the system.
         * Note that this seems to require raw i/o
         * functions or there's a lockup?

         * Clear 0x0F000000 bits of reboot status register to workaround
         * the FSBL not loading the bitstream after soft-reboot
         * This is a temporary solution until we know more.
        zynq_slcr_read(&reboot, SLCR_REBOOT_STATUS_OFFSET);
        zynq_slcr_write(reboot & 0xF0FFFFFF, SLCR_REBOOT_STATUS_OFFSET);
        zynq_slcr_write(1, SLCR_PS_RST_CTRL_OFFSET);

Steps to Reproduce

* hardware:
-	ZYNQ ZC702 board:
        Processor:             ZYNQ XC7Z020
        Board Revision:        HW-Z7-ZC702 REV C
        BootLoader:            U-Boot
        BootLoader Version:    U-Boot 2014.01 (Jul 30 2014 - 15:00:11))

VLM barcode 19900


write an application that execute these commands:
RegisterManager::Write(PVALUERegisterId::eCOM_N_SLCR_UNLOCK_KEY, PVALUERegisterManager::SLCR_UNLOCK_KEY_ALL);
RegisterManager::Write(PVALUERegisterId::eCOM_N_REBOOT_REG, customReboot);
RegisterManager::Write(PVALUERegisterId::eCOM_N_SLCR_LOCK_KEY, PVALUERegisterManager::SLCR_LOCK_KEY_ALL);

so we have these steps:
- unplug Ethernet cable

- Unlock SLCR
- set a value in SLCR_REBOOT_STATUS register
- Lock SLCR

- plug back Ethernet cable

no Ethernet communication can be established

Other Downloads

Live chat