diff options
author | Manoj Kumar <manoj.kumar3@arm.com> | 2020-03-12 16:14:53 +0000 |
---|---|---|
committer | Deepak Pandey <Deepak.Pandey@arm.com> | 2020-03-31 19:54:19 +0530 |
commit | 6689ad4227b3a823a99e74b2368f9a34cc19459b (patch) | |
tree | 95f15e42e0022e3a53108856425c2a1675f95da5 | |
parent | 5ec96cf5f5eddf4837e58b252f14e779f0fc930e (diff) |
n1sdp: add documentation for multichip usecase
Change-Id: I0e5cb10e6340979a9d7d2f4f157f95869b5e66b2
Signed-off-by: Manoj Kumar <manoj.kumar3@arm.com>
-rwxr-xr-x | docs/n1sdp/multichip.rst | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/docs/n1sdp/multichip.rst b/docs/n1sdp/multichip.rst new file mode 100755 index 0000000..685d3af --- /dev/null +++ b/docs/n1sdp/multichip.rst @@ -0,0 +1,117 @@ +Multichip SMP boot on Neoverse N1 SDP with CCIX +=============================================== + +.. section-numbering:: + :suffix: . + +.. contents:: + + +Introduction +------------ +The Neoverse N1 System Development Platform (N1SDP) supports dual socket operation wherein +two N1SDP boards are connected over a CCIX enabled PCIe link. One board is designated as the +master board whose CCIX enabled PCIe controller is configured in root port mode and the other +board is configured as slave board whose CCIX enabled PCIe controller is configured in +endpoint mode. Linux boots in the master board and powers ON the slave board cores such that +the operating system sees CPU cores and memories from both master and slave boards in separate +NUMA nodes making a dual socket SMP configuration. + +Note: +Only cores and DDR memory from slave chip are exposed to the operating system. No I/O peripherals +from slave chip are exposed to the operating system. + +Connection Details +------------------ +For the purpose of connecting two N1SDP boards over PCIe link, a specialized PCIe riser card +(Part No: V2M-N1SDP-0343A) has to be used. The riser card package includes two PCIe form factor +riser cards, two high speed low latency PCIe cables and one USB cable (for PCIe REFCLK). +A 20-pin flat ribbon cable that comes along with N1SDP board accessories should also be used. This +is used for I2C connection between master and slave board SCP & MCP and other timer synchronization +handshake signals. +Setup has to be made following the steps given below: + + 1. Designate one N1SDP board as master board and the other N1SDP board as slave board. + 2. Ensure that both board are powered off. + 3. Plug in the riser cards, one in each board, in the CCIX slot (the last x16 PCIe slot + close to the edge of the board). + 4. Connect the high speed PCIe cables between the riser cards in respective slots + (make one to one connection and not criss-cross connection). + 5. Connect the USB cable between the riser cards. + 6. Connect the 20-pin flat ribbon cable between the boardsto the connector named as 'C2C' + which should be in the back side of the board. + 7. Connect the USB/SATA boot media to the respective slot in the master board. + +Board Files Setup +----------------- + 1. Power ON the master board and open the MCC console of master board using a terminal + application (like minicom or putty). + 2. Run USB_ON command which mounts the micro SD card content of master board in host machine. + 3. Assuming the micro SD card is mounted with the name 'MASTER' in host. Open the file + MASTER/MB/HBI0316A/board.txt file and note the APPFILE name. It should be like 'io_v123f.txt' + or similar. + 4. Now close the board.txt file and open the io_v123f.txt (the one noted in step 3) which will + be in the same folder. + 5. Set the C2C_ENABLE flag as TRUE and C2C_SIDE flag as MASTER. + 6. Set the SCC PLATFORM_CTRL register to enable multichip mode and CHIPID=0. For this, uncomment + the SOCCON with offset 0x1170 and set the value 0x00000100 + The line should now read: **SOCCON: 0x1170 0x00000100 ; SoC SCC PLATFORM_CTRL** + 7. Save and close the file. If the host is Linux run a 'sync' command in one of the terminals to + be safe. + 8. Repeat from step 1 to 4 for slave board. Let's assume host has mounted the slave board's + micro SD card with name 'SLAVE'. + 9. Set the C2C_ENABLE flag as TRUE and C2C_SIDE flag as SLAVE. + 10. Set the PLATFORM_CTRL register to enable multichip mode and CHIPID=1. For this, uncomment + the SOCCON with offset 0x1170 and set the value 0x00000101. Save and close the file. Run + sync command in case of Linux host. + The line should now read: **SOCCON: 0x1170 0x00000101 ; SoC SCC PLATFORM_CTRL** + +Booting the Setup +----------------- + 1. Copy all the firmware binaries to SOFTWARE folder in both master and slave board's micro SD + card. Run sync command in case of Linux host. Note that uefi.bin file is not required to be + copied to slave micro SD card as UEFI will be run only in the master chip. + For getting the sources and building the binaries please refer to `user-guide`_ + 2. Shutdown both the boards. + 3. Reboot the slave board first and let it boot. Then reboot the master board. This is done + because the SCP firmware running in master board expects the slave board to respond to the + I2C command when it boots. If the slave board is not responding for the I2C command then + master assumes that it is running in single chip environment and continues to boot in single + chip mode. This is explicitly done to avoid any delays in waiting for slave to respond that + will affect single chip environment where there is no slave connected at all. + 4. If master SCP finds a slave connected and responding then master SCP will perform several + handshakes with slave SCP to bring-up the CCIX link and boot the slave chip's cores. + +After Booting +------------- + 1. UEFI's Dynamic ACPI framework exposes both master and slave chip's processors and memories to + Linux. Assuming 16GB DDR memory connected each on master and slave boards, Linux will see + 8 cores (4 cores in master chip + 4 cores in slave chip) and 32GB DDR memory space. + 2. Once Linux has booted, /proc/cpuinfo and /proc/meminfo can be dumped to see the total core + and memory information that Linux currently sees. + 3. Also the slave board resources (slave CPUs and slave DDR memory) is treated as separate NUMA + node in Linux which can be seen using the numactl --hardware command. + +Limitations +----------- + 1. Though the multichip high speed connection is made using CCIX enabled PCIe controllers which + supports GEN4 speed, only GEN3 speed has been validated for multichip operation. This affects + the cross-chip memory access latency. + 2. The timer synchronization internal logic doesn't accounted for the external sync signals pad + timings. So the PIK clock for timer synchronization module has to be reduced to 150MHz from + actual 800MHz. + 3. The REFCLK counter values on both master and slave chips has to be reset before starting the + synchronization process. + 4. Timer synchronization interrupt flag has no information on the source of interrupt. So + synchronization is retriggered everytime an interrupt was hit. + +References +---------- +- http://infocenter.arm.com/help/topic/com.arm.doc.101489_0000_01_en/arm_neoverse_n1_system_development_platform_technical_reference_manual_101489_0000_01_en.pdf +- https://www.ccixconsortium.com/ccix-library/ + +---------- + +*Copyright (c) 2020, Arm Limited. All rights reserved.* + +.. _user-guide: ../user-guide.rst |