IoT: Milk-V Duo (RISC-V) eSBC running Linux
- Check this awesome tutorial of Duo! Almost the best I have ever seen(one)
- Almost the best I have ever seen (two)
- Alomst the best I have ever seen (three)
Updates:
- 2023/10/21: released ArchLinux disk image with RNDIS support
- 2023/10/16: creating custom disk images, releasing my own disk image tagged “spiritdude”
- 2023/10/11: 2nd option for swap space, OLED SSD1306 example with TinyCC
- 2023/10/10: adding Resizing Disk, Start Script at Boot, TinyCC, GPIO, Pinpong, Software State update
- 2023/10/05: published
- 2023/10/03: adding printable case and guide to add multiple boards on a host
- 2023/09/21: starting writeup
Table of Contents
- Introduction
- Specification
- Features
- Pinout
- Distributions for Milk-V Duo
- Linux BuildRoot Disk Image
- Multiple Milk-V Duos / Alternative IPs
- Resizing Disk
- Making Swap Space
- ArchLinux Disk Image
- Tips & Examples
- Internet Access for Milk-V Duo
- Custom BuildRoot Milk-V Duo Disk Image
- My BuildRoot Custom Disk Images
- Ethernet Add-On
- Printable Case
- References
Introduction
In 2023/09 I purchased a couple of Milk-V Duo boards at USD 5.00 / piece, which supposed is able to boot and run Linux – a very competitive option.
Milk-V Duo board
Within 3D printing context it can or could serve as:
- real-time motor controller using DMA (see this repo), not yet tested
- tiny AI component to detect failed prints via camera, no reference implementation yet seen
- any kind of quick experimental setup when Linux is a requirement, and Raspberry Pi perhaps overkill already, and ESP32 not powerful enough to run Linux*)
*) as of 2023/09 a few people working on Linux for ESP32-S3
A couple of years ago I used ESP8266 with Lua, and ESP32 with Lua and MicroPython, but the functionality was very limited, although it had WiFi built-in, but barely ran anything more complex or serious – the Milk-V Duo changes this, at the same pricing of USD 5.00-9.00; and I really looking forward to have just a small device running Linux, and competing with Raspberry Pi’s which either hardly were available or sold at 2-3x the announced price.
Milk-V Duo (bare)
Milk-V Duo with USB-C connected and SD card
Milk-V Duo (backside)
CVITEK CV1800B
AA202500 T6N605 2303A
Specification & Features have been partially copied from Milkv.io (2023/09):
Specification
Processor | CVITEK CV1800B (C906@1GHz + C906@700MHz) |
---|---|
Memory | DDR2 64MB RAM |
Storage | 1x Mirco SD slot |
1x SD NAND solder pad | |
USB | 1x USB-C for data and power |
1x USB2 solder pad | |
Camera | 1x 16P FPC connector (MIPI CSI 2-lane) |
GPIO | up to 26 Pins available for general purpose I/O(GPIO) |
Size | 21mm * 51mm (same as Raspberry Pi Pico) |
Features
Processor
- 1GHz and 700MHz RISC-V C906 processors
- Integrated CVITEK TPU for smart detection
- Supports H.264/H.265 video encoding, up to 2880×1620@20fps
- Compatible with high-definition CMOS sensors
- Programmable frequency output for sensor clock
- Comprehensive ISP features for image optimization
- Partial OpenCV library support with CV hardware acceleration
- 16-bit audio codec with built-in mic input and output functions
- Flexible network configurations with 1 Ethernet PHY
CSI-2 (MIPI serial camera)
- Features a 16-pin FPC interface for 2-lane MIPI camera input
- Operates I2C, CLK, and RST signals at a 1.8V voltage level
Ethernet
- Milk-V Duo includes CV1800B chip with a 100Mbps PHY
- PHY is linked to a 5-pin solder pad
- External transformer and RJ45 socket are needed for Ethernet use
USB
- USB 2.0 compliant, backward compatible with USB 1.1
- Supports various speed modes, Host/Device functionality, and transfer protocols
- Expandable interfaces via USB Hub (up to 127 devices)
- Power-saving mode, supports HID devices
- Functions as USB slave device with configurable software
- USB Type-C for storage media access
Micro SD
- SDIO0 is compatible with Secure Digital Memory (SD 3.0) protocol
No WiFi (but Ethernet over USB)
- it has no WiFi (either use ESP8266 or ESP32 at WiFi gateway via UART, but this kind contradicts the entire single board concept)
- USB(-C) connector can be used in double feature mode: as power supply and pseudo network called RNDIS (virtual Ethernet over USB)
No HDMI / Video Out
- it has no video out, at best I2C or SPI-based LCD can be connected, and function as framebuffer (no reference implementation seen yet)
Pinout
- Up to 26 GPIO pins on the MilkV-Duo 40-pin header provide access to internal peripherals such as SDIO, I2C, PWM, SPI, J-TAG, and UART
- Up to 3x I2C
- Up to 5x UART
- Up to 1x SDIO1
- Up to 1x SPI
- Up to 2x ADC
- Up to 7x PWM
- Up to 1x RUN
- Up to 1x JTAG
Distributions for Milk-V Duo
DISTRIBUTION | MATURITY | CAPABILITY | ADVANTAGES | DISADVANTAGES |
---|---|---|---|---|
Duo BuildRoot SDK | ★★★☆☆ | ★★☆☆☆ | works, compact, rndis / usb network | cumbersome bootstrap (make menuconfig), no easy install of apps on live system |
ArchLinux RISCV64 | ★★☆☆☆ | ★★★☆☆ | proper package management (pacman), rootfs 2GB, 960MB used, rndis / usb network | 4GB SD card minimum |
Debian ARM64 | ☆☆☆☆☆ | ★★★☆☆ | package management (apt/dpkg) | no disk image yet |
Fedora RISCV Builder | ☆☆☆☆☆ | ★★★☆☆ | package management (rpm) | haven’t tried it yet, no disk image yet |
Linux BuildRoot Disk Image
Download
- MilkV-Duo BuildRoot SDK (Releases): contains .img.zip to download direct
(login:root
passwd:milkv
)
Install
Attach a SD card to your host, find out which device it became (Linux):
% lsblk
CAUTION: make sure /dev/sdX
(replace X with proper letter) is the SD card and not your other disk(s) as copying the disk image will erase and replace the content of the device you choose with the following command:
% sudo dd if=milkv-duo-v1.0.4-2023-0908.img of=/dev/sdX bs=1M
% sync
then remove SD card from the host*), and insert it to the MilkV-Duo board, and power it on via USB-C.
*) in case you have the wrong /dev/sdX, or write to it if it’s not plugged in, you might struggle to write there again, simply do sudo rm /dev/sdX
and then pull out and plugin the SD card again, and you should be able to write again to it.
Ubuntu 22.04 LTS Network:
automatically starts it USB Ethernet
The client sets the network: 192.168.42.0 and the “host” chooses 192.168.42.100 its own IP.
After ~15 seconds you should be able to login with ssh root@192.168.42.1
into your MilkV-Duo with passwd: milkv
or you attach a UART to USB bridge like that:
- Pin 16/TX: RX/white UART-USB
- Pin 17/RX: TX/green UART-USB
- Pin 18/GND: GND/black UART-USB
- don’t connect 5V/red UART-USB
and use tio /dev/ttyUSB0
(or another number) under Linux to connect via serial port; also useful in case bootup is stuck after doing changes, and ssh
isn’t possible anymore.
Boot dmesg
[ 0.000000] Linux version 5.10.4-tag- (ubuntu@linux) (riscv64-unknown-linux-musl-gcc (Xuantie-900 linux-5.10.4 musl gcc Toolchain V2.6.1 B-20220906) 10.2.0, GNU ld (GNU Binutils) 2.35) #1 PREEMPT Fri Sep 8 17:23:15 CST 2023
[ 0.000000] earlycon: sbi0 at I/O port 0x0 (options '')
[ 0.000000] printk: bootconsole [sbi0] enabled
[ 0.000000] efi: UEFI not found.
[ 0.000000] Ion: Ion memory setup at 0x0000000082473000 size 26 MiB
[ 0.000000] OF: reserved mem: initialized node ion, compatible id ion-region
[ 0.000000] Zone ranges:
[ 0.000000] DMA32 [mem 0x0000000080000000-0x0000000083f3ffff]
[ 0.000000] Normal empty
[ 0.000000] Movable zone start for each node
[ 0.000000] Early memory node ranges
[ 0.000000] node 0: [mem 0x0000000080000000-0x0000000083f3ffff]
[ 0.000000] Initmem setup node 0 [mem 0x0000000080000000-0x0000000083f3ffff]
[ 0.000000] On node 0 totalpages: 16192
[ 0.000000] DMA32 zone: 222 pages used for memmap
[ 0.000000] DMA32 zone: 0 pages reserved
[ 0.000000] DMA32 zone: 16192 pages, LIFO batch:3
[ 0.000000] SBI specification v0.3 detected
[ 0.000000] SBI implementation ID=0x1 Version=0x9
[ 0.000000] SBI v0.2 TIME extension detected
[ 0.000000] SBI v0.2 IPI extension detected
[ 0.000000] SBI v0.2 RFENCE extension detected
[ 0.000000] riscv: ISA extensions acdfimsuv
[ 0.000000] riscv: ELF capabilities acdfimv
[ 0.000000] pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
[ 0.000000] pcpu-alloc: [0] 0
[ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 15970
[ 0.000000] Kernel command line: root=/dev/mmcblk0p2 rootwait rw console=ttyS0,115200 earlycon=sbi loglevel=9 riscv.fwsz=0x80000
[ 0.000000] Dentry cache hash table entries: 8192 (order: 4, 65536 bytes, linear)
[ 0.000000] Inode-cache hash table entries: 4096 (order: 3, 32768 bytes, linear)
[ 0.000000] Sorting __ex_table...
[ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[ 0.000000] Memory: 29360K/64768K available (3671K kernel code, 457K rwdata, 1651K rodata, 144K init, 195K bss, 35408K reserved, 0K cma-reserved)
[ 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] Trampoline variant of Tasks RCU enabled.
[ 0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.
[ 0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
[ 0.000000] riscv-intc: 64 local interrupts mapped
[ 0.000000] plic: interrupt-controller@70000000: mapped 101 interrupts with 1 handlers for 2 contexts.
[ 0.000000] random: get_random_bytes called from start_kernel+0x2e0/0x41c with crng_init=0
[ 0.000000] riscv_timer_init_dt: Registering clocksource cpuid [0] hartid [0]
[ 0.000000] clocksource: riscv_clocksource: mask: 0xffffffffffffffff max_cycles: 0x5c40939b5, max_idle_ns: 440795202646 ns
[ 0.000009] sched_clock: 64 bits at 25MHz, resolution 40ns, wraps every 4398046511100ns
[ 0.008425] Calibrating delay loop (skipped), value calculated using timer frequency.. 50.00 BogoMIPS (lpj=100000)
[ 0.019128] pid_max: default: 4096 minimum: 301
[ 0.024025] Mount-cache hash table entries: 512 (order: 0, 4096 bytes, linear)
[ 0.031444] Mountpoint-cache hash table entries: 512 (order: 0, 4096 bytes, linear)
[ 0.041119] ASID allocator initialised with 65536 entries
[ 0.046849] rcu: Hierarchical SRCU implementation.
[ 0.052223] EFI services will not be available.
[ 0.057313] devtmpfs: initialized
[ 0.066807] early_time_log: do_initcalls: 4548979us
[ 0.072472] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[ 0.082528] futex hash table entries: 16 (order: -4, 384 bytes, linear)
[ 0.089496] pinctrl core: initialized pinctrl subsystem
[ 0.095414] NET: Registered protocol family 16
[ 0.100480] DMA: preallocated 128 KiB GFP_KERNEL pool for atomic allocations
[ 0.107813] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations
[ 0.116713] thermal_sys: Registered thermal governor 'step_wise'
[ 0.132538] OF: /gpio@03020000/gpio-controller@0: could not find phandle
[ 0.145753] OF: /gpio@03021000/gpio-controller@1: could not find phandle
[ 0.152748] OF: /gpio@03022000/gpio-controller@2: could not find phandle
[ 0.159737] OF: /gpio@03023000/gpio-controller@3: could not find phandle
[ 0.166722] OF: /gpio@05021000/gpio-controller@4: could not find phandle
[ 0.175540] clk reset: nr_reset=64 resource_size=8
[ 0.181130] get audio clk=24576000
[ 0.184672] cvitek-i2s-subsys 4108000.i2s_subsys: Set clk_sdma_aud0~3 to 24576000
[ 0.205405] dw_dmac 4330000.dma: CVITEK DMA Controller, 8 channels, probe done!
[ 0.213805] SCSI subsystem initialized
[ 0.218237] usbcore: registered new interface driver usbfs
[ 0.224017] usbcore: registered new interface driver hub
[ 0.229634] usbcore: registered new device driver usb
[ 0.238395] Ion: ion_parse_dt_heap_common: id 0 type 2 name carveout align 1000
[ 0.246344] Ion: rmem_ion_device_init: heap carveout base 0x0000000082473000 size 0x0000000001acd000 dev (____ptrval____)
[ 0.257624] ion_carveout_heap_create, size=0x1acd000
[ 0.262937] cvi_get_rtos_ion_size, rtos ion_size get:0x0
[ 0.398272] platform carveout: [ion] add heap id 0, type 2, base 0x82473000, size 0x1acd000
[ 0.407276] Advanced Linux Sound Architecture Driver Initialized.
[ 0.414938] clocksource: Switched to clocksource riscv_clocksource
[ 0.423536] NET: Registered protocol family 2
[ 0.429180] tcp_listen_portaddr_hash hash table entries: 256 (order: 0, 4096 bytes, linear)
[ 0.437895] TCP established hash table entries: 512 (order: 0, 4096 bytes, linear)
[ 0.445680] TCP bind hash table entries: 512 (order: 0, 4096 bytes, linear)
[ 0.452950] TCP: Hash tables configured (established 512 bind 512)
[ 0.459557] UDP hash table entries: 128 (order: 0, 4096 bytes, linear)
[ 0.466324] UDP-Lite hash table entries: 128 (order: 0, 4096 bytes, linear)
[ 0.473794] NET: Registered protocol family 1
[ 0.479012] RPC: Registered named UNIX socket transport module.
[ 0.485127] RPC: Registered udp transport module.
[ 0.490010] RPC: Registered tcp transport module.
[ 0.494934] RPC: Registered tcp NFSv4.1 backchannel transport module.
[ 0.504220] Initialise system trusted keyrings
[ 0.509141] workingset: timestamp_bits=62 max_order=13 bucket_order=0
[ 0.524041] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[ 0.531324] jffs2: version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
[ 0.538516] Key type asymmetric registered
[ 0.542733] Asymmetric key parser 'x509' registered
[ 0.554087] Serial: 8250/16550 driver, 5 ports, IRQ sharing disabled
[ 0.562710] printk: console [ttyS0] disabled
[ 0.567239] 4140000.serial: ttyS0 at MMIO 0x4140000 (irq = 15, base_baud = 1562500) is a 16550A
[ 0.576276] printk: console [ttyS0] enabled
[ 0.584875] printk: bootconsole [sbi0] disabled
[ 0.595241] 41c0000.serial: ttyS4 at MMIO 0x41c0000 (irq = 16, base_baud = 1562500) is a 16550A
[ 0.607812] cvi-spif 10000000.cvi-spif: unrecognized JEDEC id bytes: 00 00 00 00 00 00
[ 0.616044] cvi-spif 10000000.cvi-spif: device scan failed
[ 0.621769] cvi-spif 10000000.cvi-spif: unable to setup flash chip
[ 0.635092] libphy: Fixed MDIO Bus: probed
[ 0.639938] bm-dwmac 4070000.ethernet: IRQ eth_wake_irq not found
[ 0.646304] bm-dwmac 4070000.ethernet: IRQ eth_lpi not found
[ 0.652286] bm-dwmac 4070000.ethernet: Hash table entries set to unexpected value 0
[ 0.660361] bm-dwmac 4070000.ethernet: no reset control found
[ 0.666605] bm-dwmac 4070000.ethernet: User ID: 0x10, Synopsys ID: 0x37
[ 0.673525] bm-dwmac 4070000.ethernet: DWMAC1000
[ 0.678424] bm-dwmac 4070000.ethernet: DMA HW capability register supported
[ 0.685641] bm-dwmac 4070000.ethernet: RX Checksum Offload Engine supported
[ 0.692858] bm-dwmac 4070000.ethernet: COE Type 2
[ 0.697743] bm-dwmac 4070000.ethernet: TX Checksum insertion supported
[ 0.704512] bm-dwmac 4070000.ethernet: Normal descriptors
[ 0.710115] bm-dwmac 4070000.ethernet: Ring mode enabled
[ 0.715630] bm-dwmac 4070000.ethernet: Enable RX Mitigation via HW Watchdog Timer
[ 0.723389] bm-dwmac 4070000.ethernet: device MAC address 96:8d:89:ed:5b:ca
[ 0.758200] libphy: stmmac: probed
[ 0.763554] bm-dwmac 4070000.ethernet: Cannot get clk_500m_eth!
[ 0.769815] bm-dwmac 4070000.ethernet: Cannot get gate_clk_axi4!
[ 0.777191] dwc2 4340000.usb: axi clk installed
[ 0.781982] dwc2 4340000.usb: apb clk installed
[ 0.786726] dwc2 4340000.usb: 125m clk installed
[ 0.791530] dwc2 4340000.usb: 33k clk installed
[ 0.796239] dwc2 4340000.usb: 12m clk installed
[ 0.801042] dwc2 4340000.usb: EPs: 8, dedicated fifos, 3072 entries in SPRAM
[ 0.808950] dwc2 4340000.usb: DWC OTG Controller
[ 0.813824] dwc2 4340000.usb: new USB bus registered, assigned bus number 1
[ 0.821096] dwc2 4340000.usb: irq 36, io mem 0x04340000
[ 0.827545] hub 1-0:1.0: USB hub found
[ 0.831570] hub 1-0:1.0: 1 port detected
[ 0.837416] usbcore: registered new interface driver usb-storage
[ 0.844106] i2c /dev entries driver
[ 0.849865] sdhci: Secure Digital Host Controller Interface driver
[ 0.856316] sdhci: Copyright(c) Pierre Ossman
[ 0.860841] sdhci-pltfm: SDHCI platform and OF driver helper
[ 0.867007] cvi:sdhci_cvi_probe
[ 0.914963] mmc0: SDHCI controller on 4310000.cv-sd [4310000.cv-sd] using ADMA 64-bit
[ 0.923131] cvi_proc_init cvi_host 0x(____ptrval____)
[ 0.929146] usbcore: registered new interface driver usbhid
[ 0.938965] usbhid: USB HID core driver
[ 0.944921] cvitek-i2s 4100000.i2s: cvi_i2s_probe
[ 0.955198] cvitek-i2s 4130000.i2s: cvi_i2s_probe
[ 0.960922] cviteka-adc sound_adc: cviteka_adc_probe, dev name=sound_adc
[ 0.968044] cviteka-adc sound_adc: cviteka_adc_probe start devm_snd_soc_register_card
[ 0.976650] cvitekaadc 300a100.adc: cvitekaadc_probe
[ 0.987619] cviteka-dac sound_dac: cviteka_dac_probe, dev name=sound_dac
[ 0.995091] cvitekadac 300a000.dac: cvitekadac_probe
[ 1.000685] cvitekadac_probe gpio_is_valid mute_pin_l
[ 1.006585] NET: Registered protocol family 17
[ 1.011477] Loading compiled-in X.509 certificates
[ 1.039015] mmc0: new SDHC card at address 0001
[ 1.051483] mmcblk0: mmc0:0001 MSD20 14.6 GiB
[ 1.061126] cviteka-adc sound_adc: cviteka_adc_probe, dev name=sound_adc
[ 1.068302] cviteka-adc sound_adc: cviteka_adc_probe start devm_snd_soc_register_card
[ 1.080491] mmcblk0: p1 p2 p3
[ 1.088431] cviteka-dac sound_dac: cviteka_dac_probe, dev name=sound_dac
[ 1.101557] cfg80211: Loading compiled-in X.509 certificates for regulatory database
[ 1.112515] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'
[ 1.119630] cfg80211: failed to load regulatory.db
[ 1.124824] ALSA device list:
[ 1.128383] dw-apb-uart 4140000.serial: forbid DMA for kernel console
[ 1.148546] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
[ 1.157087] VFS: Mounted root (ext4 filesystem) on device 179:2.
[ 1.166212] devtmpfs: mounted
[ 1.169547] Freeing unused kernel memory: 144K
[ 1.174226] Kernel memory protection not selected by kernel config.
[ 1.180757] Run /sbin/init as init process
[ 1.185024] with arguments:
[ 1.188116] /sbin/init
[ 1.190917] with environment:
[ 1.194189] HOME=/
[ 1.196652] TERM=linux
[ 1.199477] early_time_log: run_init_process: 5681657us
[ 1.307708] EXT4-fs (mmcblk0p2): re-mounted. Opts: errors=remount-ro
[ 1.395862] random: fast init done
[ 1.511578] random: dd: uninitialized urandom read (512 bytes read)
[ 1.725888] random: dhcpcd: uninitialized urandom read (112 bytes read)
[ 1.817530] bm-dwmac 4070000.ethernet eth0: PHY [stmmac-0:00] driver [Generic PHY] (irq=POLL)
[ 1.839025] dwmac1000: Master AXI performs any burst length
[ 1.845702] bm-dwmac 4070000.ethernet eth0: No Safety Features support found
[ 1.853923] bm-dwmac 4070000.ethernet eth0: IEEE 1588-2002 Timestamp supported
[ 1.862474] bm-dwmac 4070000.ethernet eth0: configuring for phy/rmii link mode
[ 7.195361] random: dnsmasq: uninitialized urandom read (128 bytes read)
[ 7.202528] random: dnsmasq: uninitialized urandom read (48 bytes read)
[ 7.250085] cv180x_sys: bad vermagic: kernel tainted.
[ 7.255425] Disabling lock debugging due to kernel taint
[ 7.261336] cv180x_sys: loading out-of-tree module taints kernel.
[ 7.294527] res-reg: start: 0xa0c8000, end: 0xa0c801f, virt-addr(ffffffd0040c9000).
[ 7.303316] CVITEK CHIP ID = 22
[ 7.318433] cvi_rtos_cmdqu_probe start ---
[ 7.322806] name=1900000.rtos_cmdqu
[ 7.327194] res-reg: start: 0x1900000, end: 0x1900fff, virt-addr(ffffffd004228000).
[ 7.335254] cvi_rtos_cmdqu_probe DONE
[ 7.339691] [cvi_spinlock_init] success
[ 7.377509] cif a0c2000.cif: cam0 clk installed
[ 7.382321] cif a0c2000.cif: cam1 clk installed
[ 7.387481] cif a0c2000.cif: vip_sys_2 clk installed
[ 7.392945] cif a0c2000.cif: clk_mipimpll clk installed (____ptrval____)
[ 7.400203] cif a0c2000.cif: clk_disppll clk installed (____ptrval____)
[ 7.407370] cif a0c2000.cif: clk_fpll clk installed (____ptrval____)
[ 7.414298] cif a0c2000.cif: (0) res-reg: start: 0xa0c2000, end: 0xa0c3fff.
[ 7.421797] cif a0c2000.cif: virt-addr((____ptrval____))
[ 7.427690] cif a0c2000.cif: (1) res-reg: start: 0xa0d0000, end: 0xa0d0fff.
[ 7.435183] cif a0c2000.cif: virt-addr((____ptrval____))
[ 7.441074] cif a0c2000.cif: (2) res-reg: start: 0xa0c4000, end: 0xa0c5fff.
[ 7.448559] cif a0c2000.cif: virt-addr((____ptrval____))
[ 7.454448] cif a0c2000.cif: (3) res-reg: start: 0x3001c30, end: 0x3001c5f.
[ 7.461933] cif a0c2000.cif: virt-addr((____ptrval____))
[ 7.467824] cif a0c2000.cif: no pad_ctrl for cif
[ 7.472974] cif a0c2000.cif: request irq-26 as cif-irq0
[ 7.478759] cif a0c2000.cif: request irq-27 as cif-irq1
[ 7.484514] cif a0c2000.cif: rst_pin = 424, pol = 1
[ 7.499342] snsr_i2c snsr_i2c: i2c:-------hook 0
[ 7.504362] snsr_i2c snsr_i2c: i2c:-------hook 1
[ 7.509771] snsr_i2c snsr_i2c: i2c:-------hook 2
[ 7.515073] snsr_i2c snsr_i2c: i2c:-------hook 3
[ 7.519993] snsr_i2c snsr_i2c: i2c:-------hook 4
[ 7.596322] vi_core_probe:203(): res-reg: start: 0xa000000, end: 0xa07ffff, virt-addr(ffffffd004400000).
[ 7.606219] vi_core_probe:216(): irq(28) for isp get from platform driver.
[ 7.614260] vi_tuning_buf_setup:253(): tuning fe_addr[0]=0x8183f490, be_addr[0]=0x81837290, post_addr[0]=0x81820000
[ 7.625482] vi_tuning_buf_setup:253(): tuning fe_addr[1]=0x8193f490, be_addr[1]=0x81937290, post_addr[1]=0x81920000
[ 7.636654] vi_tuning_buf_setup:253(): tuning fe_addr[2]=0x8185f490, be_addr[2]=0x81857290, post_addr[2]=0x81840000
[ 7.647773] sync_task_init:177(): sync_task_init vi_pipe 0
[ 7.653739] sync_task_init:177(): sync_task_init vi_pipe 1
[ 7.659725] sync_task_init:177(): sync_task_init vi_pipe 2
[ 7.666173] vi_core_probe:252(): isp registered as cvi-vi
[ 7.750302] cvi_dwa_probe:487(): done with rc(0).
[ 7.791388] cv180x-cooling cv180x_cooling: elems of dev-freqs=6
[ 7.797661] cv180x-cooling cv180x_cooling: dev_freqs[0]: 850000000 500000000
[ 7.805487] cv180x-cooling cv180x_cooling: dev_freqs[1]: 425000000 375000000
[ 7.813089] cv180x-cooling cv180x_cooling: dev_freqs[2]: 425000000 300000000
[ 7.820782] cv180x-cooling cv180x_cooling: Cooling device registered: cv180x_cooling
[ 7.866285] jpu ctrl reg pa = 0xb030000, va = (____ptrval____), size = 256
[ 7.873985] end jpu_init result = 0x0
[ 8.065890] cvi_vc_drv_init result = 0x0
[ 8.080795] sh (172): drop_caches: 3
[ 8.261909] using random self ethernet address
[ 8.261928] using random host ethernet address
[ 8.309722] usb0: HOST MAC 6e:54:6b:61:a9:f5
[ 8.312146] usb0: MAC ce:b2:db:da:82:7b
[ 8.312220] dwc2 4340000.usb: bound driver configfs-gadget
[ 8.346187] dwc2 4340000.usb: new device is high-speed
[ 8.391171] dwc2 4340000.usb: new device is high-speed
[ 8.682141] dwc2 4340000.usb: new device is high-speed
[ 8.750359] dwc2 4340000.usb: new address 14
[ 57.067015] random: crng init done