openswitch-lan969x Part 2: Inital Software Bringup

Inital board bringup on my lan9698-based ethernet switch

openswitch-lan969x Part 2: Inital Software Bringup

The lan969x requires the following main components to boot:

  1. DDR config
  2. U-Boot
  3. Arm Trusted Firmware
  4. The Linux Kernel
  5. A Root Filesystem

At the end of this part the board should be able to boot a linux distro, although, with only the minimum features needed to be able to ssh into the board over the management port.

In the next part I will add support for loading device tree overlays from the carrier eeprom, to enable features specific to each carrier board, such as the 10g sfp+ ethernet ports on this one.

DDR Config

The lan969x platform uses the DesignWare UMcTL2 DDR controller IP. Microchip has a config tool to generate a device tree snipped to configure the controller for a paticular board.

The ddr controller is initialized by ATF in plat/microchip/lan969x/common/ddr_umctl.c using the config parameters given in the devicetree.

To generate the config first clone the ddr-umctl repo: git clone git@github.com:microchip-ung/ddr-umctl.git

Three config files need to be created in the repo:

  1. configs/profiles/openswitch_lan969x.yaml for the top level config which specifies which ddr chip config and which pcb specific config files to use
  2. configs/boards/openswitch_lan969x.yaml for board specific config, such as odt impedance, memory size, clock speed, etc
  3. configs/memory/ddr4_512Mx16_fullbus_2B.yaml for ddr chip specific config (just address map configuration). I am just using this default file because it is already compatable with the ddr4 chip I am using.

for now I am just copying the contents of the board and profile files used by the eval board, and after testing I may need to adjust odt and drive impedance because my ddr layout is very different to the eval board.

After creating the config files, generate the dt config:

./scripts/gen_cfg.rb -f devicetree configs/profiles/openswitch_lan969x.yaml

DDR config device tree output

./scripts/gen_cfg.rb:605: warning: Passing safe_level with the 2nd argument of ERB.new is deprecated. Do not use it, and specify other arguments as keyword arguments.
./scripts/gen_cfg.rb:605: warning: Passing trim_mode with the 3rd argument of ERB.new is deprecated. Use keyword argument like ERB.new(str, trim_mode: ...) instead.
// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*

  • Copyright (C) 2022 Microchip Technology Inc. and its subsidiaries.

*/

&ddr {
microchip,mem-name = "openswitch_lan969x 2025-10-03-23:02:28 665562d";
microchip,mem-speed = <2400>;
microchip,mem-size = <0x38000000>;
microchip,mem-bus-width = <16>;

microchip,main-reg = <
0x00001091 /* crcparctl1 */
0x00000001 /* dbictl */
0x00000040 /* dfimisc */
0x0391820f /* dfitmg0 */
0x00040201 /* dfitmg1 */
0x40400003 /* dfiupd0 */
0x004000ff /* dfiupd1 */
0x003f7f44 /* ecccfg0 */
0x00020248 /* init0 */
0x00e80000 /* init1 */
0x0c340101 /* init3 */
0x10180200 /* init4 */
0x00110000 /* init5 */
0x00000402 /* init6 */
0x00000c19 /* init7 */
0x81040010 /* mstr */
0x00000000 /* pccfg */
0x00000000 /* pwrctl */
0x00210020 /* rfshctl0 */
0x00000000 /* rfshctl3 */
>;

microchip,timing-reg = <
0x17131413 /* dramtmg0 */
0x0007051b /* dramtmg1 */
0x1a000010 /* dramtmg12 */
0x090b0512 /* dramtmg2 */
0x0000400c /* dramtmg3 */
0x08040409 /* dramtmg4 */
0x07070404 /* dramtmg5 */
0x05040c07 /* dramtmg8 */
0x0003040d /* dramtmg9 */
0x07000610 /* odtcfg */
0x004900d3 /* rfshtmg */
>;

microchip,mapping-reg = <
0x0000001f /* addrmap0 */
0x003f0505 /* addrmap1 */
0x01010100 /* addrmap2 */
0x13131303 /* addrmap3 */
0x00001f1f /* addrmap4 */
0x04040404 /* addrmap5 */
0x04040404 /* addrmap6 */
0x00000f0f /* addrmap7 */
0x00003f01 /* addrmap8 */
>;

microchip,phy-reg = <
0x0000040c /* dcr */
0x0064401b /* dsgcr */
0x8000b0cf /* dtcr0 */
0x00010a37 /* dtcr1 */
0x00c01884 /* dxccr */
0x000010ba /* pgcr2 */
0x00000000 /* schcr1 */
0x00079900 /* zq0pr */
0x10077900 /* zq1pr */
0x00000000 /* zq2pr */
0x00058f00 /* zqcr */
>;

microchip,phy_timing-reg = <
0x0827100a /* dtpr0 */
0x28250018 /* dtpr1 */
0x000701b1 /* dtpr2 */
0x03000101 /* dtpr3 */
0x01a50808 /* dtpr4 */
0x00361009 /* dtpr5 */
0x4ae25710 /* ptr0 */
0x74f4950e /* ptr1 */
0x00083def /* ptr2 */
0x1b192000 /* ptr3 */
0x1003a000 /* ptr4 */
>;

};

Later this will be copied into the arm trusted firmware repo.

Porting U-Boot

Mainline u-boot does not support the lan969x yet, so I will use microchips u-boot fork: git clone git@github.com:microchip-ung/u-boot.git u-boot-ung

set the arch and cross compiler path: export ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-

There are 3 main components that need to be created:

  1. a defconfig file configs/qlab_lan969x_openswitch_defconfig which specifies which components to build and a few hardcoded parameters.
  2. board/q-lab/lan969x_openswitch/* for board init files. the eval board does the following here: i) read a gpio pin to decide which device tree to load ii) check if we booted from emmc or spi nor flash to load the u-boot enviroment from the same source iii) setup the ddr memory map iv) reset the ethernet phys and read the mac addresses for each port from otp
  3. the device tree for the board arch/arm/dts/lan969x_openswitch.dts. ideally this should be the same dt as used in linux, but sometimes u-boot drivers expect different properties.

Defconfig

I just copied over the eval board defconfig, and then went though the file and adjusted the config options to fit the board. for example updating CONFIG_DEFAULT_DEVICE_TREE to lan969x_openswitch and removing the dt selection components, since I only need one dt, etc.

I usually start be reading through the file to see what options have been selected, and then I run memuconfig to change them.

make qlab_lan969x_openswitch_defconfig

make menuconfig

after making changes select save in menuconfig, and save to .config, then exit and run make savedefconfig to create a cleaned version of .config, and then copy it back to your defconfig: mv defconfig configs/qlab_lan969x_openswitch_defconfig

Devicetree

I started out by copying the eval board dt arch/arm/dts/lan969x_ev09p11a.dts into a new file arch/arm/dts/lan969x_openswitch.dts and then adding the file into the makefile in arch/arm/dts so it would be built.

I only had to make a few minor changes to the dt for now: setting the model property, updating the management port phy address, and changing the qspi flash config a bit.

Board files

again, based on the eval board code, except I removed all the code for reading the otp fues, and removed the dt selection logic.

I created a new config target: CONFIG_TARGET_OPENSWITCH_LAN969X based on the CONFIG_TARGET_LAN969X kconfig option in arch/arm/Kconfig and then updated my defconfig to select this new target and not the old one.

To get the board code in board/qlab/openswitch_lan969x/openswitch_lan969x.c to build a Kconfig file has to be created in board/qlab/openswitch_lan969x that sets SYS_BOARD and SYS_VENDOR to the names in the board dir path. u-boot uses these variables to decide which board directory to build. The Kconfig file also has to be sourced in arch/arm/Kconfig

Building

# set arch and cross compiler
# no need to do this if already exported in the same terminal session
export ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-

# select defconfig you want to build
make q-lab_openswitch-lan969x_defconfig

# build
make -j$(nproc)

Porting TF-A

First, clone the repo, and setup microchips docker run tool to be able to build:

# setup microchips docker-run tool
cd ~/Software
git clone git@github.com:microchip-ung/docker-run.git
ln -s ~/Software/docker-run/dr ~/.local/bin/dr

# get microchips tfa fork
git clone git@github.com:microchip-ung/arm-trusted-firmware.git atf-ung

usually you can just use a common tfa image per soc, such as on the imx8mm where there is a single tfa image shared by all imx8mm boards, but for the lan969x tf-a does the ddr controller and phy initialization, which needs pcb specific info, so each board needs its own tfa image. Of course if your board has identical layout to the eval board you could just reuse the same image (if you don't care about the board name not matching).

I do care, so I created a new build target for my board.

This involved the following changes:

  1. I copied over the ddr config I generated using ddr-umctl to plat/microchip/lan969x/fdts/lan969x_openswitch-ddr.dtsi
  2. A platform.mk file in plat/microchip/lan969x/lan969x_openswitch which is just a copy-paste of the eval board platform.mk file
  3. a minimal device tree for the board, which only contains the emmc and spi flash nodes, so tfa can load the next bootloader stage: plat/microchip/lan969x/lan969x_openswitch/fdts/lan969x_openswitch_tb_fw_config.dts this was just a copy paste of the eval board device tree
  4. I had to modify microchips build scripts: build.rb build_platform.rb This is not part of upstream tfa, Microchip just hacked these on to the tfa repo. I had to update them to build the new openswitch platform I added
  5. microchip's html5 firmware update tool: scripts/fwu/fwu.js This is another hacked on addition by microchip, It is a very nice tool, but I have no idea why they chose to place it in the tfa repo, but it is used to flash images onto lan969x-based boards over usb. I just had to update a line so I would detect the new build target I created.

To build, first copy over the u-boot image you built, and then build using their dr tool:

cp ../u-boot-ung/u-boot-fit-dtb.bin ./build/

dr ./scripts/build.rb -p lan969x_openswitch --release --bl33_blob build/u-boot-fit-dtb.bin

why can't microchip just be normal and use the standard TF-A build system?

output of build command

The output image build/lan969x_openswitch/release/nor.gpt.gz can then be flashed using fwu.html

BL2U SPI Flash Troubleshooting

When trying to flash the nor.gpt.gz image using fwu.html I kept getting the error: "spi_nor_erase: Erase ready timeout" digging through the tfa source code I found it was coming from spi_nor.c and is caused by:

  1. a sector erase is triggered by calling spi_nor_erase_sector()
  2. spi_nor_wait_ready() is then called to wait for the erase to complete
  3. this polls the spi flash chips status register for SPI_READY_TIMEOUT_US which is set to 40ms
  4. the timeout is exceeded, which returns ETIMEOUT

The SPI flash chip I used has a erase time that is much higher than this (up to 400ms), which was what was causing the timeout:

Updating SPI_READY_TIMEOUT_US (which is defined in spi_nor.c and qspi.c) to 400ms fixed the issue and I was able to flash tfa + u-boot to the spi flash chip and boot the board:

bootlogs of TF-A and u-boot

Flashing u-boot and TF-A

Set the VCORE_[3:0] strapping pins to TF-A monitor mode, 9211600 baud, and connect to the board using fwu.html

Next, click download BL2U

Then go to the upload page and upload nor.gpt.gz from tfa, and click upload file

Then goto the write page, select nor flash, and click write flash image

After this completes set the boot mode switches back to spi nor flash mode:

Porting Linux

As of 7.1 the lan969x family is supported in mainline linux (supported as lan9691) so I don't have to suffer with the vendor kernel. The most important missing feature is sd/emmc support

Since the soc and all the peripherals that I to boot are supported I just need to make a device tree for the som and carrier board. I used the lan9696-ev23x71a eval board dt and soc dtsi (lan9691.dtsi) as a reference.

SGPIO mapping

gpios are grouped into groups of 4 convective input pins and 4 output pins. for example physical port 0 has Q0-Q3 on the output shift register U902 and D to A on the input shift register U911.

the physical ports can then be mapped to logical ports using the microchip,sgpio-port-ranges property (see the microchip,sparx5-sgpio.yaml binding doc). If I wanted the physical ports to map 1:1 to the logical ports I could set the port ranges property to <0 9>. If I wanted to map the last physical port to logical port 30 I could do: microchip,sgpio-port-ranges = <0 8>, <30 30>

changing the logical mapping is needed because the switch and pcs expect the led, rate select, and los pins to be on the same logical port number as the switch port number.

NFS / TFTP Boot

setup a nfs server to share the root file system:

# /etc/exports
#
# See exports(5) for more information.
#
# Use exportfs -r to reread
# /export       192.168.1.10(rw,no_root_squash)
/srv/nfs *(rw,sync,no_root_squash,no_all_squash,no_subtree_check)

and a tftp server to serve the kernel image and devicetree.

next tell u-boot where the server is:

=> env set serverip 10.0.0.75
=> env save
Saving Environment to SPIFlash... Erasing SPI flash...Writing to SPI flash...done
Valid environment: 1
OK
=> 

and a pxelinux file to tell u-boot what kernel image, device tree and cmdline to use:

sudo nano /var/lib/tftp/pxelinux.cfg/0A0000

(0A0000AE is just one of the files u-boot attempts to load on this board, and will fallback to a file named default if it is not found)

DEFAULT openswitch-lan969x-10x10g
PROMPT 1
TIMEOUT 50

MENU TITLE q-pc tftp/nfs

label openswitch-lan969x-10x10g
    kernel Image
    devicetree microchip/lan9698-openswitch-10x10g.dtb
    append root=/dev/nfs rw nfsroot=10.0.0.75:/srv/nfs,v3,tcp ip=dhcp console=ttyS0,115200 earlycon

Getting Linux Booting

The first issue I ran into was that there was zero console output after starting the kernel:

Retrieving file: pxelinux.cfg/0A0000
switch@0 Waiting for PHY auto negotiation to complete....... done
Port  29: Up (internal)
Using switch@0 device
TFTP from server 10.0.0.75; our IP address is 10.0.0.175
Filename 'pxelinux.cfg/0A0000'.
Load address: 0x61000000
Loading: #
         290 KiB/s
done
Bytes transferred = 297 (129 hex)
  1  pxe          ready   ethernet     0  switch@0.bootdev.0        extlinux/extlinux.conf
** Booting bootflow 'switch@0.bootdev.0' with pxe
q-pc tftp/nfs
1:      openswitch-lan969x-10x10g
Enter choice: 1
1:      openswitch-lan969x-10x10g
Retrieving file: Image
switch@0 Waiting for PHY auto negotiation to complete....... done
Port  29: Up (internal)
Using switch@0 device
TFTP from server 10.0.0.75; our IP address is 10.0.0.175
Filename 'Image'.
Load address: 0x64000000
Loading: #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         ########################################
         9.4 MiB/s
done
Bytes transferred = 43518464 (2980a00 hex)
append: root=/dev/nfs rw nfsroot=10.0.0.75:/srv/nfs,v3,tcp ip=dhcp console=ttyS0,115200 earlycon earlyprintk
Retrieving file: microchip/lan9698-openswitch-10x10g.dtb
switch@0 Waiting for PHY auto negotiation to complete....... done
Port  29: Up (internal)
Using switch@0 device
TFTP from server 10.0.0.75; our IP address is 10.0.0.175
Filename 'microchip/lan9698-openswitch-10x10g.dtb'.
Load address: 0x63000000
Loading: ##
         6.6 MiB/s
done
Bytes transferred = 20611 (5083 hex)
## Flattened Device Tree blob at 63000000
   Booting using the fdt blob at 0x63000000
Working FDT set to 63000000
Host not halted after 16000 microseconds.
   Loading Device Tree to 0000000063ff7000, end 0000000063fff082 ... OK
Working FDT set to 63ff7000

Starting kernel ...

this is usually caused by incorrect output console set in the cmdline or device tree, or a missing serial driver, or some other driver needed early in the boot process not being enabled.

after looking through the soc device tree and after:

  • making a list of all the compatibles
  • searching for what driver binds to the hw
  • searching the driver file name in the makefiles to see what kconfig option builds it
  • enabling the option in kconfig

I got this list of options not yet in the arm64 default defconfig:

CONFIG_ARCH_LAN969X=y
CONFIG_SERIAL_ATMEL=y
CONFIG_SERIAL_ATMEL_CONSOLE=y
CONFIG_MFD_ATMEL_FLEXCOM=y
CONFIG_BRIDGE=y
CONFIG_SPARX5_SWITCH=y
CONFIG_LAN969X_SWITCH=y
CONFIG_PINCTRL_OCELOT=y
CONFIG_MDIO_MSCC_MIIM=y
CONFIG_COMMON_CLK_LAN966X=y
CONFIG_PINCTRL_MICROCHIP_SGPIO=y
CONFIG_SPI_ATMEL=y
CONFIG_I2C_AT91=y
CONFIG_CRYPTO_DEV_ATMEL_AES=m
CONFIG_AT_XDMAC=y
CRYPTO_DEV_ATMEL_SHA=m
CONFIG_SENSORS_SPARX5=m
CONFIG_RESET_MCHP_SPARX5=y

after rebuilding console output was working but we still failed to mount the rootfs:

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
[    0.000000] Linux version 7.1.0-rc3 (quentin@q-pc) (aarch64-buildroot-linux-uclibc-gcc.br_real (Buildroot 2026.05-rc1-18-g6b1b1d6380) 14.3.0, GNU ld (GNU Binutils) 2.45.1) #7 SMP PREEMPT Sun May 17 21:04:19 PDT 2026
[    0.000000] KASLR disabled due to lack of seed
[    0.000000] Machine model: q-lab openswitch LAN969x 10x10g
[    0.000000] efi: UEFI not found.
[    0.000000] earlycon: atmel_serial0 at MMIO 0x00000000e0040200 (options '115200n8')
[    0.000000] printk: legacy bootconsole [atmel_serial0] enabled
[    0.000000] OF: reserved mem: Reserved memory: No reserved-memory node in the DT
[    0.000000] NUMA: Faking a node at [mem 0x0000000000100000-0x0000000097ffffff]
[    0.000000] NODE_DATA(0) allocated [mem 0x97e276c0-0x97e29dbf]
[    0.000000] cma: Reserved 32 MiB at 0x0000000095e00000
[    0.000000] psci: probing for conduit method from DT.
[    0.000000] psci: PSCIv1.1 detected in firmware.
[    0.000000] psci: Using standard PSCI v0.2 function IDs
[    0.000000] psci: MIGRATE_INFO_TYPE not supported.
[    0.000000] psci: SMC Calling Convention v1.2
[    0.000000] Zone ranges:
[    0.000000]   DMA      [mem 0x0000000000100000-0x0000000097ffffff]
[    0.000000]   DMA32    empty
[    0.000000]   Normal   empty
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000000100000-0x00000000001fffff]
[    0.000000]   node   0: [mem 0x0000000000220000-0x00000000002fffff]
[    0.000000]   node   0: [mem 0x0000000060000000-0x0000000097ffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000000100000-0x0000000097ffffff]
[    0.000000] On node 0, zone DMA: 256 pages in unavailable ranges
[    0.000000] On node 0, zone DMA: 32 pages in unavailable ranges
[    0.000000] On node 0, zone DMA: 32000 pages in unavailable ranges
[    0.000000] percpu: Embedded 26 pages/cpu s66584 r8192 d31720 u106496
[    0.000000] Detected VIPT I-cache on CPU0
[    0.000000] CPU features: detected: ARM erratum 845719
[    0.000000] alternatives: applying boot alternatives
[    0.000000] Kernel command line: root=/dev/nfs rw nfsroot=10.0.0.75:/srv/nfs,v3,tcp ip=:::::eth10:dhcp  console=ttyS0,115200 earlycon
[    0.000000] random: crng init done
[    0.000000] printk: log buffer data + meta data: 131072 + 458752 = 589824 bytes
[    0.000000] Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes, linear)
[    0.000000] Inode-cache hash table entries: 65536 (order: 7, 524288 bytes, linear)
[    0.000000] software IO TLB: SWIOTLB bounce buffer size adjusted to 0MB
[    0.000000] software IO TLB: area num 1.
[    0.000000] software IO TLB: mapped [mem 0x0000000094b66000-0x0000000094c66000] (1MB)
[    0.000000] Fallback order for Node 0: 0 
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 229856
[    0.000000] Policy zone: DMA
[    0.000000] mem auto-init: stack:all(zero), heap alloc:off, heap free:off
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] rcu: Preemptible hierarchical RCU implementation.
[    0.000000] rcu:     RCU event tracing is enabled.
[    0.000000] rcu:     RCU restricting CPUs from NR_CPUS=512 to nr_cpu_ids=1.
[    0.000000]  Trampoline variant of Tasks RCU enabled.
[    0.000000]  Tracing variant of Tasks RCU enabled.
[    0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.
[    0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1
[    0.000000] RCU Tasks: Setting shift to 0 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=1.
[    0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
[    0.000000] Root IRQ handler: gic_handle_irq
[    0.000000] rcu: srcu_init: Setting srcu_struct sizes based on contention.
[    0.000000] arch_timer: cp15 timer running at 250.00MHz (virt).
[    0.000000] clocksource: arch_sys_counter: mask: 0x7ffffffffffffff max_cycles: 0x7350b89c29, max_idle_ns: 881590431910 ns
[    0.000000] sched_clock: 59 bits at 250MHz, resolution 4ns, wraps every 4398046511102ns
[    0.009126] Console: colour dummy device 80x25
[    0.013529] Calibrating delay loop (skipped), value calculated using timer frequency.. 500.00 BogoMIPS (lpj=1000000)
[    0.023961] pid_max: default: 32768 minimum: 301
[    0.028813] Mount-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)
[    0.036087] Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)
[    0.044267] VFS: Finished mounting rootfs on nullfs
[    0.051018] rcu: Hierarchical SRCU implementation.
[    0.055716] rcu:     Max phase no-delay instances is 1000.
[    0.062776] EFI services will not be available.
[    0.067391] smp: Bringing up secondary CPUs ...
[    0.071814] smp: Brought up 1 node, 1 CPU
[    0.075774] SMP: Total of 1 processors activated.
[    0.080491] CPU: All CPU(s) started at EL1
[    0.084609] CPU features: detected: 32-bit EL0 Support
[    0.089712] CPU features: detected: 32-bit EL1 Support
[    0.094847] CPU features: detected: CRC32 instructions
[    0.099990] CPU features: detected: PMUv3
[    0.104020] alternatives: applying system-wide alternatives
[    0.111214] Memory: 819264K/919424K available (19392K kernel code, 5266K rwdata, 14652K rodata, 3456K init, 774K bss, 64900K reserved, 32768K cma-reserved)
[    0.125583] devtmpfs: initialized
[    0.134841] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[    0.144561] posixtimers hash table entries: 512 (order: 1, 8192 bytes, linear)
[    0.151716] futex hash table entries: 256 (16384 bytes on 1 NUMA nodes, total 16 KiB, linear).
[    0.161106] 21808 pages in range for non-PLT usage
[    0.161127] 513328 pages in range for PLT usage
[    0.168748] DMI: not present or invalid.
[    0.179854] NET: Registered PF_NETLINK/PF_ROUTE protocol family
[    0.186922] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations
[    0.194630] audit: initializing netlink subsys (disabled)
[    0.202250] thermal_sys: Registered thermal governor 'step_wise'
[    0.202268] thermal_sys: Registered thermal governor 'power_allocator'
[    0.208205] audit: type=2000 audit(0.120:1): state=initialized audit_enabled=0 res=1
[    0.222500] cpuidle: using governor menu
[    0.226629] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.
[    0.233332] ASID allocator initialised with 65536 entries
[    0.241887] Serial: AMBA PL011 UART driver
[    0.250211] /axi/interrupt-controller@e8c11000: Fixed dependency cycle(s) with /axi/interrupt-controller@e8c11000
[    0.281953] HugeTLB: registered 1.00 GiB page size, pre-allocated 0 pages
[    0.288662] HugeTLB: 0 KiB vmemmap can be freed for a 1.00 GiB page
[    0.294882] HugeTLB: registered 32.0 MiB page size, pre-allocated 0 pages
[    0.301668] HugeTLB: 0 KiB vmemmap can be freed for a 32.0 MiB page
[    0.307936] HugeTLB: registered 2.00 MiB page size, pre-allocated 0 pages
[    0.314723] HugeTLB: 0 KiB vmemmap can be freed for a 2.00 MiB page
[    0.320992] HugeTLB: registered 64.0 KiB page size, pre-allocated 0 pages
[    0.327779] HugeTLB: 0 KiB vmemmap can be freed for a 64.0 KiB page
[    0.336515] ACPI: Interpreter disabled.
[    0.343422] at_xdmac e0068000.dma-controller: 16 channels, mapped at 0x(____ptrval____)
[    0.352595] iommu: Default domain type: Translated
[    0.357319] iommu: DMA domain TLB invalidation policy: strict mode
[    0.363786] SCSI subsystem initialized
[    0.367922] usbcore: registered new interface driver usbfs
[    0.373317] usbcore: registered new interface driver hub
[    0.378614] usbcore: registered new device driver usb
[    0.384682] pps_core: LinuxPPS API ver. 1 registered
[    0.389514] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[    0.398653] PTP clock support registered
[    0.402727] EDAC MC: Ver: 3.0.0
[    0.406323] scmi_core: SCMI protocol bus registered
[    0.412468] FPGA manager framework
[    0.417173] vgaarb: loaded
[    0.420376] clocksource: Switched to clocksource arch_sys_counter
[    0.426734] VFS: Disk quotas dquot_6.6.0
[    0.430561] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
[    0.437962] pnp: PnP ACPI: disabled
[    0.448542] NET: Registered PF_INET protocol family
[    0.453487] IP idents hash table entries: 16384 (order: 5, 131072 bytes, linear)
[    0.462010] tcp_listen_portaddr_hash hash table entries: 512 (order: 1, 8192 bytes, linear)
[    0.470288] Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear)
[    0.477994] TCP established hash table entries: 8192 (order: 4, 65536 bytes, linear)
[    0.485801] TCP bind hash table entries: 8192 (order: 6, 262144 bytes, linear)
[    0.493215] TCP: Hash tables configured (established 8192 bind 8192)
[    0.499594] UDP hash table entries: 512 (order: 3, 32768 bytes, linear)
[    0.506281] NET: Registered PF_UNIX/PF_LOCAL protocol family
[    0.512314] RPC: Registered named UNIX socket transport module.
[    0.518126] RPC: Registered udp transport module.
[    0.522804] RPC: Registered tcp transport module.
[    0.527503] RPC: Registered tcp-with-tls transport module.
[    0.533011] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    0.539440] PCI: CLS 0 bytes, default 64
[    0.543737] kvm [1]: HYP mode not available
[    0.548902] Initialise system trusted keyrings
[    0.553528] workingset: timestamp_bits=42 (anon: 38) max_order=18 bucket_order=0 (anon: 0)
[    0.562119] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[    0.568278] NFS: Registering the id_resolver key type
[    0.573228] Key type id_resolver registered
[    0.577371] Key type id_legacy registered
[    0.581401] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
[    0.588077] nfs4flexfilelayout_init: NFSv4 Flexfile Layout Driver Registering...
[    0.595755] 9p: Installing v9fs 9p2000 file system support
[    0.601356] Key type asymmetric registered
[    0.605319] Asymmetric key parser 'x509' registered
[    0.610254] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 244)
[    0.617585] io scheduler mq-deadline registered
[    0.622109] io scheduler kyber registered
[    0.626154] io scheduler bfq registered
[    0.639700] pinctrl-ocelot e20100d4.pinctrl: driver registered
[    0.652244] ledtrig-cpu: registered to indicate activity on CPUs
[    0.696620] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
[    0.708828] msm_serial: driver initialized
[    0.713718] SuperH (H)SCI(F) driver initialized
[    0.718384] STM32 USART driver initialized
[    0.732281] loop: module loaded
[    0.742722] at91_i2c e0060600.i2c: using dma0chan0 (tx) and dma0chan1 (rx) for DMA transfers
[    0.751499] at91_i2c e0060600.i2c: HOLD field set to its maximum value (31 instead of 372)
[    0.759679] at91_i2c e0060600.i2c: Filter threshold set to its maximum value (7 instead of 9)
[    0.768379] at91_i2c e0060600.i2c: AT91 i2c bus driver (hw version: 0x820).
[    0.777421] at91_i2c e0064600.i2c: using dma0chan2 (tx) and dma0chan3 (rx) for DMA transfers
[    0.785810] at91_i2c e0064600.i2c: HOLD field set to its maximum value (31 instead of 372)
[    0.794015] at91_i2c e0064600.i2c: Filter threshold set to its maximum value (7 instead of 9)
[    0.803051] at91_i2c e0064600.i2c: AT91 i2c bus driver (hw version: 0x820).
[    0.811178] megasas: 07.734.00.00-rc1
[    0.827535] tun: Universal TUN/TAP device driver, 1.6
[    0.834070] thunder_xcv, ver 1.0
[    0.837343] thunder_bgx, ver 1.0
[    0.840512] nicpf, ver 1.0
[    0.845441] e1000: Intel(R) PRO/1000 Network Driver
[    0.850229] e1000: Copyright (c) 1999-2006 Intel Corporation.
[    0.855992] e1000e: Intel(R) PRO/1000 Network Driver
[    0.860945] e1000e: Copyright(c) 1999 - 2015 Intel Corporation.
[    0.866861] igb: Intel(R) Gigabit Ethernet Network Driver
[    0.872209] igb: Copyright (c) 2007-2014 Intel Corporation.
[    0.877829] igbvf: Intel(R) Gigabit Virtual Function Network Driver
[    0.884046] igbvf: Copyright (c) 2009 - 2012 Intel Corporation.
[    0.890618] sky2: driver version 1.30
[    0.895541] sparx5-switch e00c0000.switch: MAC addr was not set, use random MAC
[    0.911135] debugfs: '(unnamed net_device)' already exists in 'vcaps'
[    0.917463] debugfs: '(unnamed net_device)' already exists in 'vcaps'
[    0.923896] debugfs: '(unnamed net_device)' already exists in 'vcaps'
[    0.930336] debugfs: '(unnamed net_device)' already exists in 'vcaps'
[    0.936777] debugfs: '(unnamed net_device)' already exists in 'vcaps'
[    0.943217] debugfs: '(unnamed net_device)' already exists in 'vcaps'
[    0.949662] debugfs: '(unnamed net_device)' already exists in 'vcaps'
[    0.956100] debugfs: '(unnamed net_device)' already exists in 'vcaps'
[    0.962541] debugfs: '(unnamed net_device)' already exists in 'vcaps'
[    0.968982] debugfs: '(unnamed net_device)' already exists in 'vcaps'
[    0.987582] VFIO - User Level meta-driver version: 0.3
[    1.000228] xhci-hcd xhci-hcd.1.auto: xHCI Host Controller
[    1.005658] xhci-hcd xhci-hcd.1.auto: new USB bus registered, assigned bus number 1
[    1.014448] xhci-hcd xhci-hcd.1.auto: USB0 root hub has no ports
[    1.020324] xhci-hcd xhci-hcd.1.auto: hcc params 0x0220fe6c hci version 0x110 quirks 0x0000808000000010
[    1.029764] xhci-hcd xhci-hcd.1.auto: irq 22, io mem 0x00300000
[    1.036703] hub 1-0:1.0: USB hub found
[    1.040340] hub 1-0:1.0: 1 port detected
[    1.045512] usbcore: registered new interface driver usb-storage
[    1.057307] i2c_dev: i2c /dev entries driver
[    1.065171] pca954x 1-0070: supply vdd not found, using dummy regulator
[    1.073197] i2c i2c-1: Added multiplexed i2c bus 2
[    1.078117] i2c i2c-1: Added multiplexed i2c bus 3
[    1.082982] i2c i2c-1: Added multiplexed i2c bus 4
[    1.087876] i2c i2c-1: Added multiplexed i2c bus 5
[    1.092776] i2c i2c-1: Added multiplexed i2c bus 6
[    1.097660] i2c i2c-1: Added multiplexed i2c bus 7
[    1.102533] i2c i2c-1: Added multiplexed i2c bus 8
[    1.107436] i2c i2c-1: Added multiplexed i2c bus 9
[    1.112099] pca954x 1-0070: registered 8 multiplexed busses for I2C switch tca9548
[    1.119842] pca954x 1-0071: supply vdd not found, using dummy regulator
[    1.127071] i2c i2c-1: Added multiplexed i2c bus 10
[    1.132052] i2c i2c-1: Added multiplexed i2c bus 11
[    1.137017] i2c i2c-1: Added multiplexed i2c bus 12
[    1.141990] i2c i2c-1: Added multiplexed i2c bus 13
[    1.146955] i2c i2c-1: Added multiplexed i2c bus 14
[    1.151959] i2c i2c-1: Added multiplexed i2c bus 15
[    1.156942] i2c i2c-1: Added multiplexed i2c bus 16
[    1.161914] i2c i2c-1: Added multiplexed i2c bus 17
[    1.166664] pca954x 1-0071: registered 8 multiplexed busses for I2C switch tca9548
[    1.194345] SMCCC: SOC_ID: ARCH_SOC_ID not implemented, skipping ....
[    1.202632] usbcore: registered new interface driver usbhid
[    1.208174] usbhid: USB HID core driver
[    1.217931] hw perfevents: enabled with armv8_cortex_a53 PMU driver, 7 (0,8000003f) counters available
[    1.235729] NET: Registered PF_INET6 protocol family
[    1.242587] Segment Routing with IPv6
[    1.246191] In-situ OAM (IOAM) with IPv6
[    1.250136] NET: Registered PF_PACKET protocol family
[    1.255133] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.
[    1.268151] 9pnet: Installing 9P2000 support
[    1.272417] Key type dns_resolver registered
[    1.291612] registered taskstats version 1
[    1.296007] Loading compiled-in X.509 certificates
[    1.312399] Demotion targets for Node 0: null
[    1.325080] leds-gpio leds: Led green:lan-0 renamed to green:lan-0_1 due to name collision
[    1.333494] leds-gpio leds: Led yellow:lan-0 renamed to yellow:lan-0_1 due to name collision
[    1.342475] leds-gpio leds: Led green:lan-3 renamed to green:lan-3_1 due to name collision
[    1.350758] leds-gpio leds: Led yellow:lan-3 renamed to yellow:lan-3_1 due to name collision
[    1.359194] leds-gpio leds: Led green:lan-3 renamed to green:lan-3_2 due to name collision
[    1.367471] leds-gpio leds: Led yellow:lan-3 renamed to yellow:lan-3_2 due to name collision
[    1.375954] leds-gpio leds: Led green:lan-3 renamed to green:lan-3_3 due to name collision
[    1.384234] leds-gpio leds: Led yellow:lan-3 renamed to yellow:lan-3_3 due to name collision
[    1.392688] leds-gpio leds: Led green:lan-3 renamed to green:lan-3_4 due to name collision
[    1.401001] leds-gpio leds: Led yellow:lan-3 renamed to yellow:lan-3_4 due to name collision
[    1.409474] leds-gpio leds: Led green:lan-3 renamed to green:lan-3_5 due to name collision
[    1.417754] leds-gpio leds: Led yellow:lan-3 renamed to yellow:lan-3_5 due to name collision
[    1.448514] sparx5-switch e00c0000.switch eth10: PHY [e20101a8.mdio-mii:01] driver [RTL8211F Gigabit Ethernet] (irq=18)
[    1.459774] sparx5-switch e00c0000.switch eth10: configuring for phy/rgmii-id link mode
[    5.018432] sparx5-switch e00c0000.switch eth10: Link is Up - 1Gbps/Full - flow control rx/tx
[    5.040377] Sending DHCP requests ...... timed out!
[   78.485265] sparx5-switch e00c0000.switch eth10: Link is Down
[   78.491816] IP-Config: Retrying forever (NFS root)...
[   78.520505] sparx5-switch e00c0000.switch eth10: PHY [e20101a8.mdio-mii:01] driver [RTL8211F Gigabit Ethernet] (irq=18)
[   78.531697] sparx5-switch e00c0000.switch eth10: configuring for phy/rgmii-id link mode
[   81.928667] sparx5-switch e00c0000.switch eth10: Link is Up - 1Gbps/Full - flow control rx/tx
[   81.952387] Sending DHCP requests ...... timed out!
[  157.893265] sparx5-switch e00c0000.switch eth10: Link is Down
[  157.899830] IP-Config: Retrying forever (NFS root)...
[  157.928503] sparx5-switch e00c0000.switch eth10: PHY [e20101a8.mdio-mii:01] driver [RTL8211F Gigabit Ethernet] (irq=18)
[  157.939708] sparx5-switch e00c0000.switch eth10: configuring for phy/rgmii-id link mode
[  161.322152] sparx5-switch e00c0000.switch eth10: Link is Up - 1Gbps/Full - flow control rx/tx
[  161.344387] Sending DHCP requests ...... timed out!
[  250.109261] sparx5-switch e00c0000.switch eth10: Link is Down
[  250.115800] IP-Config: Retrying forever (NFS root)...
[  250.144505] sparx5-switch e00c0000.switch eth10: PHY [e20101a8.mdio-mii:01] driver [RTL8211F Gigabit Ethernet] (irq=18)
[  250.155697] sparx5-switch e00c0000.switch eth10: configuring for phy/rgmii-id link mode
[  253.632476] sparx5-switch e00c0000.switch eth10: Link is Up - 1Gbps/Full - flow control rx/tx
[  253.656386] Sending DHCP requests ...... timed out!
[  337.973277] sparx5-switch e00c0000.switch eth10: Link is Down
[  337.980074] IP-Config: Retrying forever (NFS root)...
[  338.008508] sparx5-switch e00c0000.switch eth10: PHY [e20101a8.mdio-mii:01] driver [RTL8211F Gigabit Ethernet] (irq=18)
[  338.019683] sparx5-switch e00c0000.switch eth10: configuring for phy/rgmii-id link mode
[  341.390444] sparx5-switch e00c0000.switch eth10: Link is Up - 1Gbps/Full - flow control rx/tx
[  341.412396] Sending DHCP requests ...... timed out!
[  429.428606] sparx5-switch e00c0000.switch eth10: Link is Down
[  429.435193] IP-Config: Retrying forever (NFS root)...
[  429.464510] sparx5-switch e00c0000.switch eth10: PHY [e20101a8.mdio-mii:01] driver [RTL8211F Gigabit Ethernet] (irq=18)
[  429.475696] sparx5-switch e00c0000.switch eth10: configuring for phy/rgmii-id link mode
[  432.853052] sparx5-switch e00c0000.switch eth10: Link is Up - 1Gbps/Full - flow control rx/tx