/dev/sda1 /mnt/boot auto defaults 0 0
fpga@debian-fpga:~/debian$ sudo dpkg -i linux-image-5.15.108-zynqmp-fpga-generic_5.15.108-zynqmp-fpga-generic-3_arm64.deb^C
fpga@ddpkg -i linux-headers-5.15.108-zynqmp-fpga-generic_5.15.108-zynqmp-fpga-generic-3_arm64.debp-fpga-gesudo: unable to resolve host debian-fpga: Name or service not known
Selecting previously unselected package linux-headers-5.15.108-zynqmp-fpga-generic.
(Reading database ... 27322 files and directories currently installed.)
Preparing to unpack linux-headers-5.15.108-zynqmp-fpga-generic_5.15.108-zynqmp-fpga-generic-3_arm64.deb ...
Unpacking linux-headers-5.15.108-zynqmp-fpga-generic (5.15.108-zynqmp-fpga-generic-3) ...
Setting up linux-headers-5.15.108-zynqmp-fpga-generic (5.15.108-zynqmp-fpga-generic-3) ...
make: Entering directory '/usr/src/linux-headers-5.15.108-zynqmp-fpga-generic'
SYNC include/config/auto.conf.cmd
HOSTCC scripts/basic/fixdep
HOSTCC scripts/kconfig/conf.o
HOSTCC scripts/kconfig/confdata.o
HOSTCC scripts/kconfig/expr.o
LEX scripts/kconfig/lexer.lex.c
YACC scripts/kconfig/parser.tab.[ch]
HOSTCC scripts/kconfig/lexer.lex.o
HOSTCC scripts/kconfig/menu.o
HOSTCC scripts/kconfig/parser.tab.o
HOSTCC scripts/kconfig/preprocess.o
HOSTCC scripts/kconfig/symbol.o
HOSTCC scripts/kconfig/util.o
HOSTLD scripts/kconfig/conf
*
* Restart config...
*
*
* ARMv8.5 architectural features
*
Branch Target Identification support (ARM64_BTI) [Y/n/?] y
Enable support for E0PD (ARM64_E0PD) [Y/n/?] y
Enable support for random number generation (ARCH_RANDOM) [Y/n/?] y
Memory Tagging Extension support (ARM64_MTE) [Y/n/?] (NEW) y
*
* KASAN: runtime memory debugger
*
KASAN: runtime memory debugger (KASAN) [N/y/?] (NEW) y
KASAN mode
> 1. Generic mode (KASAN_GENERIC) (NEW)
choice[1]: 1
Instrumentation type
> 1. Outline instrumentation (KASAN_OUTLINE) (NEW)
2. Inline instrumentation (KASAN_INLINE) (NEW)
choice[1-2?]:
Back mappings in vmalloc space with real shadow memory (KASAN_VMALLOC) [Y/?] (NEW) y
KUnit-incompatible tests of KASAN bug detection capabilities (KASAN_MODULE_TEST) [N/m/?] (NEW)
*
* Restart config...
*
*
* Library routines
*
Automatically choose fastest RAID6 PQ functions (RAID6_PQ_BENCHMARK) [Y/n/?] y
Generic bitfield packing and unpacking (PACKING) [N/y/?] n
CORDIC algorithm (CORDIC) [N/m/y/?] n
Simple prime number generator for testing (PRIME_NUMBERS) [N/m/y/?] n
Access I/O in non-MMIO mode (INDIRECT_PIO) [N/y/?] n
CRC-CCITT functions (CRC_CCITT) [Y/?] y
CRC16 functions (CRC16) [Y/?] y
CRC calculation for the T10 Data Integrity Field (CRC_T10DIF) [N/m/y/?] n
CRC ITU-T V.41 functions (CRC_ITU_T) [M/y/?] m
CRC32/CRC32c functions (CRC32) [Y/?] y
CRC32 perform self test on init (CRC32_SELFTEST) [N/m/y/?] n
CRC32 implementation
> 1. Slice by 8 bytes (CRC32_SLICEBY8)
2. Slice by 4 bytes (CRC32_SLICEBY4)
3. Sarwate's Algorithm (one byte at a time) (CRC32_SARWATE)
4. Classic Algorithm (one bit at a time) (CRC32_BIT)
choice[1-4?]: 1
CRC64 functions (CRC64) [N/m/y/?] n
CRC4 functions (CRC4) [N/m/y/?] n
CRC7 functions (CRC7) [Y/?] y
CRC32c (Castagnoli, et al) Cyclic Redundancy-Check (LIBCRC32C) [M/y/?] m
CRC8 function (CRC8) [N/m/y/?] n
PRNG perform self test on init (RANDOM32_SELFTEST) [N/y/?] n
XZ decompression support (XZ_DEC) [Y/?] y
x86 BCJ filter decoder (XZ_DEC_X86) [Y/n/?] y
PowerPC BCJ filter decoder (XZ_DEC_POWERPC) [Y/n/?] y
IA-64 BCJ filter decoder (XZ_DEC_IA64) [Y/n/?] y
ARM BCJ filter decoder (XZ_DEC_ARM) [Y/n/?] y
ARM-Thumb BCJ filter decoder (XZ_DEC_ARMTHUMB) [Y/n/?] y
SPARC BCJ filter decoder (XZ_DEC_SPARC) [Y/n/?] y
XZ decompressor tester (XZ_DEC_TEST) [N/m/y/?] n
DMA Restricted Pool (DMA_RESTRICTED_POOL) [N/y/?] n
DMA Contiguous Memory Allocator (DMA_CMA) [Y/n/?] y
Enable separate DMA Contiguous Memory Area for each NUMA Node (DMA_PERNUMA_CMA) [N/y/?] n
*
* Default contiguous memory area size:
*
Size in Mega Bytes (CMA_SIZE_MBYTES) [256] 256
Selected region size
> 1. Use mega bytes value only (CMA_SIZE_SEL_MBYTES)
2. Use percentage value only (CMA_SIZE_SEL_PERCENTAGE)
3. Use lower value (minimum) (CMA_SIZE_SEL_MIN)
4. Use higher value (maximum) (CMA_SIZE_SEL_MAX)
choice[1-4?]: 1
Maximum PAGE_SIZE order of alignment for contiguous buffers (CMA_ALIGNMENT) [8] 8
Enable debugging of DMA-API usage (DMA_API_DEBUG) [N/y/?] n
Enable benchmarking of streaming DMA mapping (DMA_MAP_BENCHMARK) [N/y/?] n
glob self-test on init (GLOB_SELFTEST) [N/m/y/?] n
IRQ polling library (IRQ_POLL) [N/y/?] n
stack depot hash size (12 => 4KB, 20 => 1024KB) (STACK_HASH_ORDER) [20] (NEW) [ 313.470093] macb ff0c0000.ethernet eth0: Link is Down
[ 314.494902] macb ff0c0000.ethernet eth0: Link is Up - 1Gbps/Full - flow control off
HOSTCC scripts/dtc/dtc.o
HOSTCC scripts/dtc/flattree.o
HOSTCC scripts/dtc/fstree.o
HOSTCC scripts/dtc/data.o
HOSTCC scripts/dtc/livetree.o
HOSTCC scripts/dtc/treesource.o
HOSTCC scripts/dtc/srcpos.o
HOSTCC scripts/dtc/checks.o
HOSTCC scripts/dtc/util.o
HOSTCC scripts/dtc/dtc-lexer.lex.o
HOSTCC scripts/dtc/dtc-parser.tab.o
HOSTLD scripts/dtc/dtc
HOSTCC scripts/dtc/libfdt/fdt.o
HOSTCC scripts/dtc/libfdt/fdt_ro.o
HOSTCC scripts/dtc/libfdt/fdt_wip.o
HOSTCC scripts/dtc/libfdt/fdt_sw.o
HOSTCC scripts/dtc/libfdt/fdt_rw.o
HOSTCC scripts/dtc/libfdt/fdt_strerror.o
HOSTCC scripts/dtc/libfdt/fdt_empty_tree.o
HOSTCC scripts/dtc/libfdt/fdt_addresses.o
HOSTCC scripts/dtc/libfdt/fdt_overlay.o
HOSTCC scripts/dtc/fdtoverlay.o
HOSTLD scripts/dtc/fdtoverlay
HOSTCC scripts/selinux/genheaders/genheaders
HOSTCC scripts/selinux/mdp/mdp
HOSTCC scripts/kallsyms
HOSTCC scripts/sorttable
HOSTCC scripts/asn1_compiler
HOSTCC scripts/extract-cert
CC scripts/mod/empty.o
HOSTCC scripts/mod/mk_elfconfig
MKELF scripts/mod/elfconfig.h
CC scripts/mod/devicetable-offsets.s
HOSTCC scripts/mod/modpost.o
HOSTCC scripts/mod/file2alias.o
HOSTCC scripts/mod/sumversion.o
HOSTLD scripts/mod/modpost
scripts/Makefile.build:459: warning: overriding recipe for target 'modules.order'
Makefile:1508: warning: ignoring old recipe for target 'modules.order'
make: Leaving directory '/usr/src/linux-headers-5.15.108-zynqmp-fpga-generic'
fpga@debian-fpga:~/debian$
Xilinx Zynq MP First Stage Boot Loader
Release 2022.1 Sep 16 2022 - 04:56:15
MultiBootOffset: 0x1F0
Reset Mode : System Reset
Platform: Silicon (4.0), Running on A53-0 (64-bit) Processor, Device Name: XCZUUNKNEG
QSPI 32 bit Boot Mode
FlashID=0x20 0xBB 0x20
Pr�NOTICE: BL31: v2.6(release):0897efd
NOTICE: BL31: Built : 04:58:29, Sep 16 2022
U-Boot 2022.01-g91ad7924-dirty (Sep 15 2022 - 23:00:49 -0600), Build: jenkins-BUILDS-2022.1-som_qspi_generation-131
CPU: ZynqMP
Silicon: v3
Detected name: zynqmp-smk-k26-xcl2g-rev1-sck-kr-g-rev1
Model: ZynqMP SMK-K26 Rev1/B/A
Board: Xilinx ZynqMP
DRAM: 4 GiB
PMUFW: v1.1
Xilinx I2C FRU format at nvmem0:
Manufacturer Name: XILINX
Product Name: SMK-K26-XCL2G
Serial No: XFL1CYY0C2I3
Part Number: 5057-04
File ID: 0x0
Revision Number: 1
Xilinx I2C FRU format at nvmem1:
Manufacturer Name: XILINX
Product Name: SCK-KR-G
Serial No: XFL1V0BJCWOF
Part Number: 5100-01
File ID: 0x0
Revision Number: 1
EL Level: EL2
Chip ID: xck26
NAND: 0 MiB
MMC:
Loading Environment from nowhere... OK
In: serial
Out: serial
Err: serial
Bootmode: QSPI_MODE
Reset reason: SOFT
Net:
ZYNQ GEM: ff0b0000, mdio bus ff0c0000, phyaddr 4, interface sgmii
eth0: ethernet@ff0b0000
ZYNQ GEM: ff0c0000, mdio bus ff0c0000, phyaddr 8, interface rgmii-id
, eth1: ethernet@ff0c0000
starting USB...
Bus usb@fe200000: Register 2000440 NbrPorts 2
Starting the controller
USB XHCI 1.00
Bus usb@fe300000: Register 2000440 NbrPorts 2
Starting the controller
USB XHCI 1.00
scanning bus usb@fe200000 for devices... 5 USB Device(s) found
scanning bus usb@fe300000 for devices... 4 USB Device(s) found
scanning usb for storage devices... 1 Storage Device(s) found
Hit any key to stop autoboot: 0
model=SMK-K26-XCL2G
Device 0: Vendor: Generic Rev: 1.98 Prod: Ultra HS-COMBO
Type: Removable Hard Disk
Capacity: 30474.0 MB = 29.7 GB (62410752 x 512)
... is now current device
Scanning usb 0:1...
Found U-Boot script /boot.scr
2661 bytes read in 2 ms (1.3 MiB/s)
## Executing script at 20000000
Trying to load boot images from usb0
2280 bytes read in 1 ms (2.2 MiB/s)
Importing environment(uEnv.txt) from usb0...
Running uenvcmd ...
23929344 bytes read in 1567 ms (14.6 MiB/s)
44332 bytes read in 4 ms (10.6 MiB/s)
## Flattened Device Tree blob at 00100000
Booting using the fdt blob at 0x100000
Loading Device Tree to 000000000fff2000, end 000000000ffffd2b ... OK
Starting kernel ...
[ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
[ 0.000000] Linux version 5.15.108-zynqmp-fpga-generic (ichiro@Jabberwock) (aarch64-linux-gnu-gcc (Ubuntu/Linaro 7.5.0-3ubuntu1~18.04) 7.5.0, GNU ld (GNU Binutils for Ubuntu) 2.30) #3 SMP Sat Apr 29 05:26:24 JST 2023
[ 0.000000] Machine model: ZynqMP SMK-K26 Rev1/B/A
[ 0.000000] efi: UEFI not found.
[ 0.000000] Zone ranges:
[ 0.000000] DMA32 [mem 0x0000000000000000-0x00000000ffffffff]
[ 0.000000] Normal [mem 0x0000000100000000-0x000000087fffffff]
[ 0.000000] Movable zone start for each node
[ 0.000000] Early memory node ranges
[ 0.000000] node 0: [mem 0x0000000000000000-0x000000007fffffff]
[ 0.000000] node 0: [mem 0x0000000800000000-0x000000087fffffff]
[ 0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x000000087fffffff]
[ 0.000000] cma: Reserved 1000 MiB at 0x0000000041800000
[ 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] percpu: Embedded 27 pages/cpu s73496 r8192 d28904 u110592
[ 0.000000] Detected VIPT I-cache on CPU0
[ 0.000000] CPU features: detected: ARM erratum 845719
[ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 1032192
[ 0.000000] Kernel command line: console=ttyPS1,115200 root=/dev/sda2 rw rootwait systemd.unit=multi-user.target cpuidle.off=1 cma=1000M uio_pdrv_genirq.of_id=generic-uio
[ 0.000000] Dentry cache hash table entries: 524288 (order: 10, 4194304 bytes, linear)
[ 0.000000] Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes, linear)
[ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[ 0.000000] software IO TLB: mapped [mem 0x000000003d800000-0x0000000041800000] (64MB)
[ 0.000000] Memory: 2999408K/4194304K available (14272K kernel code, 1928K rwdata, 3884K rodata, 3136K init, 591K bss, 170896K reserved, 1024000K cma-reserved)
[ 0.000000] trace event string verifier disabled
[ 0.000000] rcu: Hierarchical RCU implementation.
[ 0.000000] rcu: RCU event tracing is enabled.
[ 0.000000] Tracing 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] GIC: Adjusting CPU interface base to 0x00000000f902f000
[ 0.000000] Root IRQ handler: gic_handle_irq
[ 0.000000] GIC: Using split EOI/Deactivate mode
[ 0.000000] arch_timer: cp15 timer(s) running at 99.99MHz (phys).
[ 0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x171015c90f, max_idle_ns: 440795203080 ns
[ 0.000000] sched_clock: 56 bits at 99MHz, resolution 10ns, wraps every 4398046511101ns
[ 0.000394] Console: colour dummy device 80x25
[ 0.000426] Calibrating delay loop (skipped), value calculated using timer frequency.. 199.99 BogoMIPS (lpj=399996)
[ 0.000437] pid_max: default: 32768 minimum: 301
[ 0.000612] LSM: Security Framework initializing
[ 0.000704] AppArmor: AppArmor initialized
[ 0.000790] Mount-cache hash table entries: 8192 (order: 4, 65536 bytes, linear)
[ 0.000809] Mountpoint-cache hash table entries: 8192 (order: 4, 65536 bytes, linear)
[ 0.002000] rcu: Hierarchical SRCU implementation.
[ 0.002285] EFI services will not be available.
[ 0.002460] smp: Bringing up secondary CPUs ...
[ 0.002901] Detected VIPT I-cache on CPU1
[ 0.002942] CPU1: Booted secondary processor 0x0000000001 [0x410fd034]
[ 0.003415] Detected VIPT I-cache on CPU2
[ 0.003438] CPU2: Booted secondary processor 0x0000000002 [0x410fd034]
[ 0.003870] Detected VIPT I-cache on CPU3
[ 0.003892] CPU3: Booted secondary processor 0x0000000003 [0x410fd034]
[ 0.003960] smp: Brought up 1 node, 4 CPUs
[ 0.003976] SMP: Total of 4 processors activated.
[ 0.003981] CPU features: detected: 32-bit EL0 Support
[ 0.003986] CPU features: detected: CRC32 instructions
[ 0.004030] CPU: All CPU(s) started at EL2
[ 0.004045] alternatives: patching kernel code
[ 0.005073] devtmpfs: initialized
[ 0.011279] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[ 0.011296] futex hash table entries: 1024 (order: 4, 65536 bytes, linear)
[ 0.033544] pinctrl core: initialized pinctrl subsystem
[ 0.034494] NET: Registered PF_NETLINK/PF_ROUTE protocol family
[ 0.035603] DMA: preallocated 512 KiB GFP_KERNEL pool for atomic allocations
[ 0.035694] DMA: preallocated 512 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations
[ 0.035725] audit: initializing netlink subsys (disabled)
[ 0.035820] audit: type=2000 audit(0.032:1): state=initialized audit_enabled=0 res=1
[ 0.036270] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.
[ 0.036336] ASID allocator initialised with 65536 entries
[ 0.054005] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages
[ 0.054021] HugeTLB registered 32.0 MiB page size, pre-allocated 0 pages
[ 0.054027] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages
[ 0.054033] HugeTLB registered 64.0 KiB page size, pre-allocated 0 pages
[ 0.055423] cryptd: max_cpu_qlen set to 1000
[ 0.057125] iommu: Default domain type: Translated
[ 0.057132] iommu: DMA domain TLB invalidation policy: strict mode
[ 0.057269] vgaarb: loaded
[ 0.057483] SCSI subsystem initialized
[ 0.057626] usbcore: registered new interface driver usbfs
[ 0.057655] usbcore: registered new interface driver hub
[ 0.057678] usbcore: registered new device driver usb
[ 0.057738] mc: Linux media interface: v0.10
[ 0.057758] videodev: Linux video capture interface: v2.00
[ 0.057793] pps_core: LinuxPPS API ver. 1 registered
[ 0.057799] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[ 0.057811] PTP clock support registered
[ 0.057840] EDAC MC: Ver: 3.0.0
[ 0.058186] zynqmp-ipi-mbox mailbox@ff990400: Registered ZynqMP IPI mbox with TX/RX channels.
[ 0.058362] FPGA manager framework
[ 0.058486] Advanced Linux Sound Architecture Driver Initialized.
[ 0.058819] NetLabel: Initializing
[ 0.058824] NetLabel: domain hash size = 128
[ 0.058828] NetLabel: protocols = UNLABELED CIPSOv4 CALIPSO
[ 0.058876] NetLabel: unlabeled traffic allowed by default
[ 0.059250] clocksource: Switched to clocksource arch_sys_counter
[ 0.086313] VFS: Disk quotas dquot_6.6.0
[ 0.086372] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
[ 0.086728] AppArmor: AppArmor Filesystem Enabled
[ 0.159299] NET: Registered PF_INET protocol family
[ 0.159450] IP idents hash table entries: 65536 (order: 7, 524288 bytes, linear)
[ 0.160956] tcp_listen_portaddr_hash hash table entries: 2048 (order: 3, 32768 bytes, linear)
[ 0.160999] Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear)
[ 0.161011] TCP established hash table entries: 32768 (order: 6, 262144 bytes, linear)
[ 0.161198] TCP bind hash table entries: 32768 (order: 7, 524288 bytes, linear)
[ 0.161560] TCP: Hash tables configured (established 32768 bind 32768)
[ 0.161637] UDP hash table entries: 2048 (order: 4, 65536 bytes, linear)
[ 0.161708] UDP-Lite hash table entries: 2048 (order: 4, 65536 bytes, linear)
[ 0.161847] NET: Registered PF_UNIX/PF_LOCAL protocol family
[ 0.163585] RPC: Registered named UNIX socket transport module.
[ 0.163592] RPC: Registered udp transport module.
[ 0.163596] RPC: Registered tcp transport module.
[ 0.163600] RPC: Registered tcp NFSv4.1 backchannel transport module.
[ 0.164183] PCI: CLS 0 bytes, default 64
[ 0.710077] armv8-pmu pmu: hw perfevents: no interrupt-affinity property, guessing.
[ 0.710249] hw perfevents: enabled with armv8_pmuv3 PMU driver, 7 counters available
[ 0.715039] Initialise system trusted keyrings
[ 0.715166] workingset: timestamp_bits=46 max_order=20 bucket_order=0
[ 0.715891] NFS: Registering the id_resolver key type
[ 0.715911] Key type id_resolver registered
[ 0.715916] Key type id_legacy registered
[ 0.715939] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
[ 0.715945] nfs4flexfilelayout_init: NFSv4 Flexfile Layout Driver Registering...
[ 0.715964] jffs2: version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
[ 0.748476] NET: Registered PF_ALG protocol family
[ 0.748486] Key type asymmetric registered
[ 0.748491] Asymmetric key parser 'x509' registered
[ 0.748534] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 246)
[ 0.748613] io scheduler mq-deadline registered
[ 0.748620] io scheduler kyber registered
[ 0.750088] Error: Driver 'clk-wizard' is already registered, aborting...
[ 0.775916] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
[ 0.779097] cacheinfo: Unable to detect cache hierarchy for CPU 0
[ 0.783726] brd: module loaded
[ 0.787307] loop: module loaded
[ 0.787778] mtdoops: mtd device (mtddev=name/number) must be supplied
[ 0.790185] tun: Universal TUN/TAP device driver, 1.6
[ 0.790788] PPP generic driver version 2.4.2
[ 0.790860] SPI driver wl1271_spi has no spi_device_id for ti,wl1271
[ 0.790867] SPI driver wl1271_spi has no spi_device_id for ti,wl1273
[ 0.790871] SPI driver wl1271_spi has no spi_device_id for ti,wl1281
[ 0.790876] SPI driver wl1271_spi has no spi_device_id for ti,wl1283
[ 0.790881] SPI driver wl1271_spi has no spi_device_id for ti,wl1285
[ 0.790885] SPI driver wl1271_spi has no spi_device_id for ti,wl1801
[ 0.790890] SPI driver wl1271_spi has no spi_device_id for ti,wl1805
[ 0.790894] SPI driver wl1271_spi has no spi_device_id for ti,wl1807
[ 0.790899] SPI driver wl1271_spi has no spi_device_id for ti,wl1831
[ 0.790903] SPI driver wl1271_spi has no spi_device_id for ti,wl1835
[ 0.790908] SPI driver wl1271_spi has no spi_device_id for ti,wl1837
[ 0.791890] usbcore: registered new interface driver uas
[ 0.791922] usbcore: registered new interface driver usb-storage
[ 0.792694] rtc_zynqmp ffa60000.rtc: registered as rtc0
[ 0.792712] rtc_zynqmp ffa60000.rtc: setting system clock to 1970-01-01T00:00:06 UTC (6)
[ 0.792771] i2c_dev: i2c /dev entries driver
[ 0.794150] usbcore: registered new interface driver uvcvideo
[ 0.794844] EDAC MC: ECC not enabled
[ 0.794985] EDAC DEVICE0: Giving out device to module zynqmp-ocm-edac controller zynqmp_ocm: DEV ff960000.memory-controller (INTERRUPT)
[ 0.795364] failed to register cpuidle driver
[ 0.795561] sdhci: Secure Digital Host Controller Interface driver
[ 0.795566] sdhci: Copyright(c) Pierre Ossman
[ 0.795570] sdhci-pltfm: SDHCI platform and OF driver helper
[ 0.795906] ledtrig-cpu: registered to indicate activity on CPUs
[ 0.795985] SMCCC: SOC_ID: ARCH_SOC_ID not implemented, skipping ....
[ 0.796052] zynqmp_firmware_probe Platform Management API v1.1
[ 0.796059] zynqmp_firmware_probe Trustzone version v1.0
[ 0.824993] securefw securefw: securefw probed
[ 0.825089] zynqmp_aes firmware:zynqmp-firmware:zynqmp-aes: The zynqmp-aes driver shall be deprecated in 2022.2 and removed in 2023.1
[ 0.825368] zynqmp_aes firmware:zynqmp-firmware:zynqmp-aes: AES Successfully Registered
[ 0.825482] zynqmp-keccak-384 firmware:zynqmp-firmware:sha384: The zynqmp-sha-deprecated driver shall be deprecated in 2022.2 and removed in 2023.1 release
[ 0.825892] usbcore: registered new interface driver usbhid
[ 0.825899] usbhid: USB HID core driver
[ 0.828801] fpga_manager fpga0: Xilinx ZynqMP FPGA Manager registered
[ 0.829895] drop_monitor: Initializing network drop monitor service
[ 0.830031] Initializing XFRM netlink socket
[ 0.830119] NET: Registered PF_INET6 protocol family
[ 0.830694] Segment Routing with IPv6
[ 0.830721] In-situ OAM (IOAM) with IPv6
[ 0.830763] sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
[ 0.831101] NET: Registered PF_PACKET protocol family
[ 0.831117] NET: Registered PF_KEY protocol family
[ 0.831122] can: controller area network core
[ 0.831153] NET: Registered PF_CAN protocol family
[ 0.831159] can: raw protocol
[ 0.831165] can: broadcast manager protocol
[ 0.831175] can: netlink gateway - max_hops=1
[ 0.831396] 9pnet: Installing 9P2000 support
[ 0.831424] Key type dns_resolver registered
[ 0.831908] registered taskstats version 1
[ 0.831920] Loading compiled-in X.509 certificates
[ 0.832142] AppArmor: AppArmor sha1 policy hashing enabled
[ 0.841162] ff010000.serial: ttyPS1 at MMIO 0xff010000 (irq = 51, base_baud = 6249999) is a xuartps
[ 1.975421] printk: console [ttyPS1] enabled
[ 1.980056] of-fpga-region fpga-full: FPGA Region probed
[ 1.986110] xilinx-zynqmp-dma fd500000.dma-controller: ZynqMP DMA driver Probe success
[ 1.994187] xilinx-zynqmp-dma fd510000.dma-controller: ZynqMP DMA driver Probe success
[ 2.002262] xilinx-zynqmp-dma fd520000.dma-controller: ZynqMP DMA driver Probe success
[ 2.010333] xilinx-zynqmp-dma fd530000.dma-controller: ZynqMP DMA driver Probe success
[ 2.018405] xilinx-zynqmp-dma fd540000.dma-controller: ZynqMP DMA driver Probe success
[ 2.026481] xilinx-zynqmp-dma fd550000.dma-controller: ZynqMP DMA driver Probe success
[ 2.034555] xilinx-zynqmp-dma fd560000.dma-controller: ZynqMP DMA driver Probe success
[ 2.042622] xilinx-zynqmp-dma fd570000.dma-controller: ZynqMP DMA driver Probe success
[ 2.050769] xilinx-zynqmp-dma ffa80000.dma-controller: ZynqMP DMA driver Probe success
[ 2.058837] xilinx-zynqmp-dma ffa90000.dma-controller: ZynqMP DMA driver Probe success
[ 2.066910] xilinx-zynqmp-dma ffaa0000.dma-controller: ZynqMP DMA driver Probe success
[ 2.074980] xilinx-zynqmp-dma ffab0000.dma-controller: ZynqMP DMA driver Probe success
[ 2.083058] xilinx-zynqmp-dma ffac0000.dma-controller: ZynqMP DMA driver Probe success
[ 2.091129] xilinx-zynqmp-dma ffad0000.dma-controller: ZynqMP DMA driver Probe success
[ 2.099197] xilinx-zynqmp-dma ffae0000.dma-controller: ZynqMP DMA driver Probe success
[ 2.107287] xilinx-zynqmp-dma ffaf0000.dma-controller: ZynqMP DMA driver Probe success
[ 2.115693] xilinx-zynqmp-dpdma fd4c0000.dma-controller: Xilinx DPDMA engine is probed
[ 2.126967] zynqmp-display fd4a0000.display: vtc bridge property not present
[ 2.136924] xilinx-dp-snd-codec fd4a0000.display:zynqmp_dp_snd_codec0: Xilinx DisplayPort Sound Codec probed
[ 2.146994] xilinx-dp-snd-pcm zynqmp_dp_snd_pcm0: Xilinx DisplayPort Sound PCM probed
[ 2.155049] xilinx-dp-snd-pcm zynqmp_dp_snd_pcm1: Xilinx DisplayPort Sound PCM probed
[ 2.163897] xilinx-dp-snd-card fd4a0000.display:zynqmp_dp_snd_card: Xilinx DisplayPort Sound Card probed
[ 2.167686] zynqmp_pll_disable() clock disable failed for dpll_int, ret = -13
[ 2.173488] OF: graph: no port node found in /axi/display@fd4a0000
[ 2.187098] xlnx-drm xlnx-drm.0: bound fd4a0000.display (ops 0xffffffc008eadd10)
[ 2.194704] [drm] Initialized xlnx 1.0.0 20130509 for fd4a0000.display on minor 0
[ 2.202211] zynqmp-display fd4a0000.display: ZynqMP DisplayPort Subsystem driver probed
[ 2.212054] spi-nor spi0.0: mt25qu512a (65536 Kbytes)
[ 2.217178] 17 fixed-partitions partitions found on MTD device spi0.0
[ 2.223624] Creating 17 MTD partitions on "spi0.0":
[ 2.228500] 0x000000000000-0x000000080000 : "Image Selector"
[ 2.235027] 0x000000080000-0x000000100000 : "Image Selector Golden"
[ 2.241690] tpm_tis_spi spi2.0: 2.0 TPM (device-id 0x1B, rev-id 22)
[ 2.242097] 0x000000100000-0x000000120000 : "Persistent Register"
[ 2.254825] 0x000000120000-0x000000140000 : "Persistent Register Backup"
[ 2.262317] 0x000000140000-0x000000200000 : "Open_1"
[ 2.267992] 0x000000200000-0x000000f00000 : "Image A (FSBL, PMU, ATF, U-Boot)"
[ 2.275522] tpm tpm0: A TPM error (256) occurred attempting the self test
[ 2.276007] 0x000000f00000-0x000000f80000 : "ImgSel Image A Catch"
[ 2.282305] tpm tpm0: starting up the TPM manually
[ 2.289185] 0x000000f80000-0x000001c80000 : "Image B (FSBL, PMU, ATF, U-Boot)"
[ 2.301269] 0x000001c80000-0x000001d00000 : "ImgSel Image B Catch"
[ 2.308188] 0x000001d00000-0x000001e00000 : "Open_2"
[ 2.313878] 0x000001e00000-0x000002000000 : "Recovery Image"
[ 2.320261] 0x000002000000-0x000002200000 : "Recovery Image Backup"
[ 2.327337] 0x000002200000-0x000002220000 : "U-Boot storage variables"
[ 2.334648] 0x000002220000-0x000002240000 : "U-Boot storage variables backup"
[ 2.342521] 0x000002240000-0x000002280000 : "SHA256"
[ 2.348222] 0x000002280000-0x0000022a0000 : "Secure OS Storage"
[ 2.354876] 0x0000022a0000-0x000004050000 : "User"
[ 2.359666] mtd: partition "User" extends beyond the end of device "spi0.0" -- size truncated to 0x1d60000
[ 2.370592] macb ff0b0000.ethernet: Not enabling partial store and forward
[ 2.378097] macb ff0b0000.ethernet eth0: Defer probe as mdio producer ff0c0000.ethernet is not probed
[ 2.405306] macb ff0c0000.ethernet: Not enabling partial store and forward
[ 2.428169] xilinx-axipmon ffa00000.perf-monitor: Probed Xilinx APM
[ 2.434728] xilinx-axipmon fd0b0000.perf-monitor: Probed Xilinx APM
[ 2.441233] xilinx-axipmon fd490000.perf-monitor: Probed Xilinx APM
[ 2.447727] xilinx-axipmon ffa10000.perf-monitor: Probed Xilinx APM
[ 2.455210] at24 1-0050: supply vcc not found, using dummy regulator
[ 2.461903] at24 1-0050: 8192 byte 24c64 EEPROM, writable, 1 bytes/write
[ 2.468754] at24 1-0051: supply vcc not found, using dummy regulator
[ 2.475406] at24 1-0051: 8192 byte 24c64 EEPROM, writable, 1 bytes/write
[ 2.483502] i2c i2c-1: Added multiplexed i2c bus 3
[ 2.488428] i2c i2c-1: Added multiplexed i2c bus 4
[ 2.493337] i2c i2c-1: Added multiplexed i2c bus 5
[ 2.498253] i2c i2c-1: Added multiplexed i2c bus 6
[ 2.503047] pca954x 1-0074: registered 4 multiplexed busses for I2C switch pca9546
[ 2.510647] cdns-i2c ff030000.i2c: 400 kHz mmio ff030000 irq 40
[ 2.517912] cdns-wdt fd4d0000.watchdog: Xilinx Watchdog Timer with timeout 60s
[ 2.525376] cdns-wdt ff150000.watchdog: Xilinx Watchdog Timer with timeout 10s
[ 2.533695] macb ff0b0000.ethernet: Not enabling partial store and forward
[ 2.540605] macb ff0b0000.ethernet: invalid hw address, using random
[ 2.547532] macb ff0b0000.ethernet eth0: Defer probe as mdio producer ff0c0000.ethernet is not probed
[ 2.581136] macb ff0c0000.ethernet: Not enabling partial store and forward
[ 2.588046] macb ff0c0000.ethernet: invalid hw address, using random
[ 2.600611] macb ff0c0000.ethernet eth0: Cadence GEM rev 0x50070106 at 0xff0c0000 irq 38 (32:a9:fe:9b:55:79)
[ 2.631931] xhci-hcd xhci-hcd.1.auto: xHCI Host Controller
[ 2.637444] xhci-hcd xhci-hcd.1.auto: new USB bus registered, assigned bus number 1
[ 2.645199] xhci-hcd xhci-hcd.1.auto: hcc params 0x0238f625 hci version 0x100 quirks 0x0000000002010890
[ 2.654630] xhci-hcd xhci-hcd.1.auto: irq 57, io mem 0xfe200000
[ 2.660650] xhci-hcd xhci-hcd.1.auto: xHCI Host Controller
[ 2.666137] xhci-hcd xhci-hcd.1.auto: new USB bus registered, assigned bus number 2
[ 2.673792] xhci-hcd xhci-hcd.1.auto: Host supports USB 3.0 SuperSpeed
[ 2.680457] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.15
[ 2.688728] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 2.695948] usb usb1: Product: xHCI Host Controller
[ 2.700824] usb usb1: Manufacturer: Linux 5.15.108-zynqmp-fpga-generic xhci-hcd
[ 2.708132] usb usb1: SerialNumber: xhci-hcd.1.auto
[ 2.713331] hub 1-0:1.0: USB hub found
[ 2.717109] hub 1-0:1.0: 1 port detected
[ 2.721345] usb usb2: New USB device found, idVendor=1d6b, idProduct=0003, bcdDevice= 5.15
[ 2.729610] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 2.736829] usb usb2: Product: xHCI Host Controller
[ 2.741707] usb usb2: Manufacturer: Linux 5.15.108-zynqmp-fpga-generic xhci-hcd
[ 2.749021] usb usb2: SerialNumber: xhci-hcd.1.auto
[ 2.754155] hub 2-0:1.0: USB hub found
[ 2.757930] hub 2-0:1.0: 1 port detected
[ 2.775382] usb5744 3-002d: Sending boot command failed
[ 2.795374] i2c 3-002d: Sending boot command failed
[ 2.839013] xhci-hcd xhci-hcd.2.auto: xHCI Host Controller
[ 2.844513] xhci-hcd xhci-hcd.2.auto: new USB bus registered, assigned bus number 3
[ 2.852269] xhci-hcd xhci-hcd.2.auto: hcc params 0x0238f625 hci version 0x100 quirks 0x0000000002010890
[ 2.861694] xhci-hcd xhci-hcd.2.auto: irq 60, io mem 0xfe300000
[ 2.867718] xhci-hcd xhci-hcd.2.auto: xHCI Host Controller
[ 2.873209] xhci-hcd xhci-hcd.2.auto: new USB bus registered, assigned bus number 4
[ 2.880871] xhci-hcd xhci-hcd.2.auto: Host supports USB 3.0 SuperSpeed
[ 2.887704] usb usb3: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.15
[ 2.895983] usb usb3: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 2.903202] usb usb3: Product: xHCI Host Controller
[ 2.908080] usb usb3: Manufacturer: Linux 5.15.108-zynqmp-fpga-generic xhci-hcd
[ 2.915387] usb usb3: SerialNumber: xhci-hcd.2.auto
[ 2.920577] hub 3-0:1.0: USB hub found
[ 2.924353] hub 3-0:1.0: 1 port detected
[ 2.928631] usb usb4: New USB device found, idVendor=1d6b, idProduct=0003, bcdDevice= 5.15
[ 2.936899] usb usb4: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 2.944131] usb usb4: Product: xHCI Host Controller
[ 2.949006] usb usb4: Manufacturer: Linux 5.15.108-zynqmp-fpga-generic xhci-hcd
[ 2.956319] usb usb4: SerialNumber: xhci-hcd.2.auto
[ 2.961502] hub 4-0:1.0: USB hub found
[ 2.965265] hub 4-0:1.0: 1 port detected
[ 2.983381] usb5744 4-002d: Sending boot command failed
[ 3.003375] i2c 4-002d: Sending boot command failed
[ 3.008692] macb ff0b0000.ethernet: Not enabling partial store and forward
[ 3.015603] macb ff0b0000.ethernet: invalid hw address, using random
[ 3.022754] usb 1-1: new high-speed USB device number 2 using xhci-hcd
[ 3.037805] macb ff0b0000.ethernet eth1: Cadence GEM rev 0x50070106 at 0xff0b0000 irq 37 (76:aa:b7:cb:85:b2)
[ 3.050544] input: gpio-keys as /devices/platform/gpio-keys/input/input0
[ 3.057565] of_cfs_init
[ 3.060025] of_cfs_init: OK
[ 3.062975] cfg80211: Loading compiled-in X.509 certificates for regulatory database
[ 3.071985] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'
[ 3.079569] ALSA device list:
[ 3.082522] #0: DisplayPort monitor
[ 3.086464] platform regulatory.0: Direct firmware load for regulatory.db failed with error -2
[ 3.095079] cfg80211: failed to load regulatory.db
[ 3.100040] Waiting for root device /dev/sda2...
[ 3.179879] usb 1-1: New USB device found, idVendor=0424, idProduct=2744, bcdDevice= 2.21
[ 3.188070] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 3.195202] usb 1-1: Product: USB2744
[ 3.198859] usb 1-1: Manufacturer: Microchip Tech
[ 3.203668] usb 3-1: new high-speed USB device number 2 using xhci-hcd
[ 3.256474] hub 1-1:1.0: USB hub found
[ 3.260252] hub 1-1:1.0: 4 ports detected
[ 3.320351] usb 2-1: new SuperSpeed USB device number 2 using xhci-hcd
[ 3.343622] usb 2-1: New USB device found, idVendor=0424, idProduct=5744, bcdDevice= 2.21
[ 3.351797] usb 2-1: New USB device strings: Mfr=2, Product=3, SerialNumber=0
[ 3.358931] usb 2-1: Product: USB5744
[ 3.362593] usb 2-1: Manufacturer: Microchip Tech
[ 3.367960] usb 3-1: New USB device found, idVendor=0424, idProduct=2744, bcdDevice= 2.21
[ 3.376150] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 3.383285] usb 3-1: Product: USB2744
[ 3.386933] usb 3-1: Manufacturer: Microchip Tech
[ 3.431555] hub 3-1:1.0: USB hub found
[ 3.435430] hub 3-1:1.0: 3 ports detected
[ 3.439503] hub 2-1:1.0: USB hub found
[ 3.443372] hub 2-1:1.0: 3 ports detected
[ 3.495470] usb 4-1: new SuperSpeed USB device number 2 using xhci-hcd
[ 3.519624] usb 4-1: New USB device found, idVendor=0424, idProduct=5744, bcdDevice= 2.21
[ 3.527803] usb 4-1: New USB device strings: Mfr=2, Product=3, SerialNumber=0
[ 3.534934] usb 4-1: Product: USB5744
[ 3.538589] usb 4-1: Manufacturer: Microchip Tech
[ 3.607528] hub 4-1:1.0: USB hub found
[ 3.611430] hub 4-1:1.0: 2 ports detected
[ 3.623257] usb 1-1.1: new high-speed USB device number 3 using xhci-hcd
[ 3.733540] usb 1-1.1: New USB device found, idVendor=0424, idProduct=2240, bcdDevice= 1.98
[ 3.741887] usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 3.749198] usb 1-1.1: Product: Ultra Fast Media
[ 3.753900] usb 1-1.1: Manufacturer: Generic
[ 3.758159] usb 1-1.1: SerialNumber: 000000225001
[ 3.763395] usb-storage 1-1.1:1.0: USB Mass Storage device detected
[ 3.769933] scsi host0: usb-storage 1-1.1:1.0
[ 3.787258] usb 3-1.3: new high-speed USB device number 3 using xhci-hcd
[ 3.851269] usb 1-1.4: new high-speed USB device number 4 using xhci-hcd
[ 3.891934] usb 3-1.3: New USB device found, idVendor=0424, idProduct=2740, bcdDevice= 2.00
[ 3.900281] usb 3-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 3.907589] usb 3-1.3: Product: Hub Controller
[ 3.912023] usb 3-1.3: Manufacturer: Microchip Tech
[ 3.955925] usb 1-1.4: New USB device found, idVendor=0424, idProduct=2740, bcdDevice= 2.00
[ 3.964271] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 3.971578] usb 1-1.4: Product: Hub Controller
[ 3.976013] usb 1-1.4: Manufacturer: Microchip Tech
[ 4.800007] scsi 0:0:0:0: Direct-Access Generic Ultra HS-COMBO 1.98 PQ: 0 ANSI: 0
[ 4.809328] sd 0:0:0:0: [sda] 62410752 512-byte logical blocks: (32.0 GB/29.8 GiB)
[ 4.817459] sd 0:0:0:0: [sda] Write Protect is off
[ 4.822835] sd 0:0:0:0: [sda] No Caching mode page found
[ 4.828141] sd 0:0:0:0: [sda] Assuming drive cache: write through
[ 4.838339] sda: sda1 sda2
[ 4.842928] sd 0:0:0:0: [sda] Attached SCSI removable disk
[ 4.860557] EXT4-fs (sda2): mounted filesystem with ordered data mode. Opts: (null). Quota mode: none.
[ 4.869894] VFS: Mounted root (ext4 filesystem) on device 8:2.
[ 4.877736] devtmpfs: mounted
[ 4.881402] Freeing unused kernel memory: 3136K
[ 4.885999] Run /sbin/init as init process
[ 5.671088] systemd[1]: System time before build time, advancing clock.
[ 5.796860] systemd[1]: systemd 247.3-7+deb11u1 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +ZSTD +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=unified)
[ 5.820185] systemd[1]: Detected architecture arm64.
Welcome to Debian GNU/Linux 11 (bullseye)!
[ 5.848123] systemd[1]: Set hostname to <debian-fpga>.
[ 6.359008] systemd[1]: Queued start job for default target Multi-User System.
[ 6.367726] random: systemd: uninitialized urandom read (16 bytes read)
[ 6.376048] systemd[1]: Created slice system-getty.slice.
[ OK ] Created slice system-getty.slice.
[ 6.399341] random: systemd: uninitialized urandom read (16 bytes read)
[ 6.406702] systemd[1]: Created slice system-modprobe.slice.
[ OK ] Created slice system-modprobe.slice.
[ 6.427329] random: systemd: uninitialized urandom read (16 bytes read)
[ 6.434720] systemd[1]: Created slice system-serial\x2dgetty.slice.
[ OK ] Created slice system-serial\x2dgetty.slice.
[ 6.455906] systemd[1]: Created slice User and Session Slice.
[ OK ] Created slice User and Session Slice.
[ 6.479504] systemd[1]: Started Dispatch Password Requests to Console Directory Watch.
[ OK ] Started Dispatch Password …ts to Console Directory Watch.
[ 6.503445] systemd[1]: Started Forward Password Requests to Wall Directory Watch.
[ OK ] Started Forward Password R…uests to Wall Directory Watch.
[ 6.527422] systemd[1]: Condition check resulted in Arbitrary Executable File Formats File System Automount Point being skipped.
[ 6.539123] systemd[1]: Reached target Local Encrypted Volumes.
[ OK ] Reached target Local Encrypted Volumes.
[ 6.559445] systemd[1]: Reached target Paths.
[ OK ] Reached target Paths.
[ 6.575352] systemd[1]: Reached target Remote File Systems.
[ OK ] Reached target Remote File Systems.
[ 6.595335] systemd[1]: Reached target Slices.
[ OK ] Reached target Slices.
[ 6.611358] systemd[1]: Reached target Swap.
[ OK ] Reached target Swap.
[ 6.628695] systemd[1]: Listening on Syslog Socket.
[ OK ] Listening on Syslog Socket.
[ 6.643517] systemd[1]: Listening on initctl Compatibility Named Pipe.
[ OK ] Listening on initctl Compatibility Named Pipe.
[ 6.667790] systemd[1]: Listening on Journal Audit Socket.
[ OK ] Listening on Journal Audit Socket.
[ 6.687547] systemd[1]: Listening on Journal Socket (/dev/log).
[ OK ] Listening on Journal Socket (/dev/log).
[ 6.707613] systemd[1]: Listening on Journal Socket.
[ OK ] Listening on Journal Socket.
[ 6.723671] systemd[1]: Listening on udev Control Socket.
[ OK ] Listening on udev Control Socket.
[ 6.743543] systemd[1]: Listening on udev Kernel Socket.
[ OK ] Listening on udev Kernel Socket.
[ 6.765598] systemd[1]: Mounting Huge Pages File System...
Mounting Huge Pages File System...
[ 6.785761] systemd[1]: Mounting POSIX Message Queue File System...
Mounting POSIX Message Queue File System...
[ 6.809757] systemd[1]: Mounting Kernel Debug File System...
Mounting Kernel Debug File System...
[ 6.829804] systemd[1]: Mounting Kernel Trace File System...
Mounting Kernel Trace File System...
[ 6.850287] systemd[1]: Starting Create list of static device nodes for the current kernel...
Starting Create list of st…odes for the current kernel...
[ 6.877902] systemd[1]: Starting Load Kernel Module configfs...
Starting Load Kernel Module configfs...
[ 6.897921] systemd[1]: Starting Load Kernel Module drm...
Starting Load Kernel Module drm...
[ 6.917829] systemd[1]: Starting Load Kernel Module fuse...
Starting Load Kernel Module fuse...
[ 6.937685] systemd[1]: Started Nameserver information manager.
[ 6.943920] fuse: init (API version 7.34)
[ OK ] Started Nameserver information manager.
[ 6.963811] systemd[1]: Reached target Network (Pre).
[ OK ] Reached target Network (Pre).
[ 6.990457] systemd[1]: Condition check resulted in Set Up Additional Binary Formats being skipped.
[ 7.003766] systemd[1]: Starting Journal Service...
Starting Journal Service...
[ 7.031691] systemd[1]: Starting Load Kernel Modules...
Starting Load Kernel Modules...
[ 7.050102] systemd[1]: Starting Remount Root and Kernel File Systems...
Starting Remount Root and Kernel File Systems...
[ 7.073860] systemd[1]: Starting Coldplug All udev Devices...
Starting Coldplug All udev Devices...
[ 7.096709] systemd[1]: Mounted Huge Pages File System.
[ OK ] Mounted Huge Pages File System.
[ 7.119755] systemd[1]: Mounted POSIX Message Queue File System.
[ OK ] Mounted POSIX Message Queue File System.
[ 7.143772] systemd[1]: Mounted Kernel Debug File System.
[ OK ] Mounted Kernel Debug File System.
[ 7.163745] systemd[1]: Mounted Kernel Trace File System.
[ OK ] Mounted Kernel Trace File System.
[ 7.184559] systemd[1]: Finished Create list of static device nodes for the current kernel.
[ OK ] Finished Create list of st… nodes for the current kernel.
[ 7.208325] systemd[1]: modprobe@configfs.service: Succeeded.
[ 7.215049] systemd[1]: Finished Load Kernel Module configfs.
[ OK ] Finished Load Kernel Module configfs.
[ 7.235791] systemd[1]: Started Journal Service.
[ OK ] Started Journal Service.
[ OK ] Finished Load Kernel Module drm.
[ OK ] Finished Load Kernel Module fuse.
[ OK ] Finished Load Kernel Modules.
[ OK ] Finished Remount Root and Kernel File Systems.
Mounting FUSE Control File System...
Mounting Kernel Configuration File System...
Starting Flush Journal to Persistent Storage...
[ 7.371753] random: systemd: uninitialized urandom read (16 bytes read)
[ 7.378850] systemd-journald[234]: Received client request to flush runtime journal.
Starting Load/Save Random Seed...
[ 7.395467] random: systemd: uninitialized urandom read (16 bytes read)
Starting Apply Kernel Variables...
[ 7.415615] random: systemd: uninitialized urandom read (16 bytes read)
[ 7.421226] systemd-journald[234]: File /var/log/journal/7cfb0797af654a1e8acd298db8399a1e/system.journal corrupted or uncleanly shut down, renaming and replacing.
Starting Create System Users...
[ OK ] Mounted FUSE Control File System.
[ OK ] Mounted Kernel Configuration File System.
[ OK ] Finished Apply Kernel Variables.
[ OK ] Finished Create System Users.
Starting Create Static Device Nodes in /dev...
[ OK ] Finished Coldplug All udev Devices.
Starting Helper to synchronize boot up for ifupdown...
[ OK ] Finished Create Static Device Nodes in /dev.
[ OK ] Reached target Local File Systems (Pre).
Mounting /config...
Starting Rule-based Manage…for Device Events and Files...
[ OK ] Finished Helper to synchronize boot up for ifupdown.
[ OK ] Mounted /config.
[ OK ] Finished Flush Journal to Persistent Storage.
[ OK ] Started Rule-based Manager for Device Events and Files.
[ OK ] Found device /dev/ttyPS1.
[ 8.159282] random: crng init done
[ 8.162692] random: 67 urandom warning(s) missed due to ratelimiting
[ OK ] Finished Load/Save Random Seed.
[ OK ] Found device Ultra_HS-COMBO boot.
[ OK ] Reached target Sound Card.
[ OK ] Listening on Load/Save RF …itch Status /dev/rfkill Watch.
Mounting /mnt/boot...
[ OK ] Mounted /mnt/boot.
[ OK ] Reached target Local File Systems.
[ OK ] Started ifup for eth0.
Starting Raise network interfaces...
Starting Create Volatile Files and Directories...
[ OK ] Finished Create Volatile Files and Directories.
[ OK ] Started Entropy Daemon based on the HAVEGE algorithm.
Starting Update UTMP about System Boot/Shutdown...
[ OK ] Finished Update UTMP about System Boot/Shutdown.
[ OK ] Reached target System Initialization.
[ OK ] Started Daily apt download activities.
[ OK ] Started Daily apt upgrade and clean activities.
[ OK ] Started Periodic ext4 Onli…ata Check for All Filesystems.
[ OK ] Started Discard unused blocks once a week.
[ OK ] Started Daily rotation of log files.
[ OK ] Started Daily Cleanup of Temporary Directories.
[ OK ] Reached target Timers.
[ OK ] Listening on Avahi mDNS/DNS-SD Stack Activation Socket.
[ OK ] Listening on D-Bus System Message Bus Socket.
[ OK ] Reached target Sockets.
[ OK ] Reached target Basic System.
[ 10.108527] macb ff0c0000.ethernet eth0: PHY [ff0c0000.ethernet-ffffffff:08] driver [TI DP83867] (irq=POLL)
[ 10.119106] macb ff0c0000.ethernet eth0: configuring for phy/rgmii-id link mode
[ 10.127138] pps pps0: new PPS source ptp0
[ 10.131661] macb ff0c0000.ethernet: gem-ptp-timer ptp clock registered.
Starting Avahi mDNS/DNS-SD Stack...
[ OK ] Started Regular background program processing daemon.
[ OK ] Started D-Bus System Message Bus.
Starting System Logging Service...
Starting User Login Management...
Starting WPA supplicant...
[ OK ] Finished Raise network interfaces.
[ OK ] Started System Logging Service.
[ OK ] Started User Login Management.
[ OK ] Started Avahi mDNS/DNS-SD Stack.
[ OK ] Started WPA supplicant.
[ OK ] Reached target Network.
[ OK ] Reached target Network is Online.
Starting Samba NMB Daemon...
Starting Network Time Service...
Starting OpenBSD Secure Shell server...
Starting Permit User Sessions...
[ OK ] Finished Permit User Sessions.
[ OK ] Started Getty on tty1.
[ OK ] Started Serial Getty on ttyPS1.
[ OK ] Reached target Login Prompts.
[ OK ] Started Network Time Service.
[ OK ] Started OpenBSD Secure Shell server.
Debian GNU/Linux 11 debian-fpga ttyPS1
debian-fpga login:
Xilinx Zynq MP First Stage Boot Loader
Release 2022.1 Sep 16 2022 - 04:56:15
MultiBootOffset: 0x1F0
Reset Mode : System Reset
Platform: Silicon (4.0), Running on A53-0 (64-bit) Processor, Device Name: XCZUUNKNEG
QSPI 32 bit Boot Mode
FlashID=0x20 0xBB 0x20
Pr�NOTICE: BL31: v2.6(release):0897efd
NOTICE: BL31: Built : 04:58:29, Sep 16 2022
U-Boot 2022.01-g91ad7924-dirty (Sep 15 2022 - 23:00:49 -0600), Build: jenkins-BUILDS-2022.1-som_qspi_generation-131
CPU: ZynqMP
Silicon: v3
Detected name: zynqmp-smk-k26-xcl2g-rev1-sck-kr-g-rev1
Model: ZynqMP SMK-K26 Rev1/B/A
Board: Xilinx ZynqMP
DRAM: 4 GiB
PMUFW: v1.1
Xilinx I2C FRU format at nvmem0:
Manufacturer Name: XILINX
Product Name: SMK-K26-XCL2G
Serial No: XFL1CYY0C2I3
Part Number: 5057-04
File ID: 0x0
Revision Number: 1
Xilinx I2C FRU format at nvmem1:
Manufacturer Name: XILINX
Product Name: SCK-KR-G
Serial No: XFL1V0BJCWOF
Part Number: 5100-01
File ID: 0x0
Revision Number: 1
EL Level: EL2
Chip ID: xck26
NAND: 0 MiB
MMC:
Loading Environment from nowhere... OK
In: serial
Out: serial
Err: serial
Bootmode: QSPI_MODE
Reset reason: SOFT
Net:
ZYNQ GEM: ff0b0000, mdio bus ff0c0000, phyaddr 4, interface sgmii
eth0: ethernet@ff0b0000
ZYNQ GEM: ff0c0000, mdio bus ff0c0000, phyaddr 8, interface rgmii-id
, eth1: ethernet@ff0c0000
starting USB...
Bus usb@fe200000: Register 2000440 NbrPorts 2
Starting the controller
USB XHCI 1.00
Bus usb@fe300000: Register 2000440 NbrPorts 2
Starting the controller
USB XHCI 1.00
scanning bus usb@fe200000 for devices... 5 USB Device(s) found
scanning bus usb@fe300000 for devices... 4 USB Device(s) found
scanning usb for storage devices... 1 Storage Device(s) found
Hit any key to stop autoboot: 0
model=SMK-K26-XCL2G
Device 0: Vendor: Generic Rev: 1.98 Prod: Ultra HS-COMBO
Type: Removable Hard Disk
Capacity: 30474.0 MB = 29.7 GB (62410752 x 512)
... is now current device
Scanning usb 0:1...
Found U-Boot script /boot.scr
2661 bytes read in 2 ms (1.3 MiB/s)
## Executing script at 20000000
Trying to load boot images from usb0
2280 bytes read in 1 ms (2.2 MiB/s)
Importing environment(uEnv.txt) from usb0...
Running uenvcmd ...
23863808 bytes read in 1561 ms (14.6 MiB/s)
44332 bytes read in 4 ms (10.6 MiB/s)
## Flattened Device Tree blob at 00100000
Booting using the fdt blob at 0x100000
Loading Device Tree to 000000000fff2000, end 000000000ffffd2b ... OK
Starting kernel ...
[ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
[ 0.000000] Linux version 5.15.108-zynqmp-fpga-generic (ichiro@Jabberwock) (aarch64-linux-gnu-gcc (Ubuntu/Linaro 7.5.0-3ubuntu1~18.04) 7.5.0, GNU ld (GNU Binutils for Ubuntu) 2.30) #2 SMP Fri Apr 28 09:35:46 JST 2023
[ 0.000000] Machine model: ZynqMP SMK-K26 Rev1/B/A
[ 0.000000] efi: UEFI not found.
[ 0.000000] Zone ranges:
[ 0.000000] DMA32 [mem 0x0000000000000000-0x00000000ffffffff]
[ 0.000000] Normal [mem 0x0000000100000000-0x000000087fffffff]
[ 0.000000] Movable zone start for each node
[ 0.000000] Early memory node ranges
[ 0.000000] node 0: [mem 0x0000000000000000-0x000000007fffffff]
[ 0.000000] node 0: [mem 0x0000000800000000-0x000000087fffffff]
[ 0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x000000087fffffff]
[ 0.000000] cma: Reserved 1000 MiB at 0x0000000041800000
[ 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] percpu: Embedded 27 pages/cpu s73496 r8192 d28904 u110592
[ 0.000000] Detected VIPT I-cache on CPU0
[ 0.000000] CPU features: detected: ARM erratum 845719
[ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 1032192
[ 0.000000] Kernel command line: console=ttyPS1,115200 root=/dev/sda2 rw rootwait systemd.unit=multi-user.target cpuidle.off=1 cma=1000M uio_pdrv_genirq.of_id=generic-uio
[ 0.000000] Dentry cache hash table entries: 524288 (order: 10, 4194304 bytes, linear)
[ 0.000000] Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes, linear)
[ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[ 0.000000] software IO TLB: mapped [mem 0x000000003d800000-0x0000000041800000] (64MB)
[ 0.000000] Memory: 2999472K/4194304K available (14272K kernel code, 1928K rwdata, 3880K rodata, 3136K init, 591K bss, 170832K reserved, 1024000K cma-reserved)
[ 0.000000] trace event string verifier disabled
[ 0.000000] rcu: Hierarchical RCU implementation.
[ 0.000000] rcu: RCU event tracing is enabled.
[ 0.000000] Tracing 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] GIC: Adjusting CPU interface base to 0x00000000f902f000
[ 0.000000] Root IRQ handler: gic_handle_irq
[ 0.000000] GIC: Using split EOI/Deactivate mode
[ 0.000000] arch_timer: cp15 timer(s) running at 99.99MHz (phys).
[ 0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x171015c90f, max_idle_ns: 440795203080 ns
[ 0.000000] sched_clock: 56 bits at 99MHz, resolution 10ns, wraps every 4398046511101ns
[ 0.000392] Console: colour dummy device 80x25
[ 0.000424] Calibrating delay loop (skipped), value calculated using timer frequency.. 199.99 BogoMIPS (lpj=399996)
[ 0.000435] pid_max: default: 32768 minimum: 301
[ 0.000607] LSM: Security Framework initializing
[ 0.000699] AppArmor: AppArmor initialized
[ 0.000786] Mount-cache hash table entries: 8192 (order: 4, 65536 bytes, linear)
[ 0.000805] Mountpoint-cache hash table entries: 8192 (order: 4, 65536 bytes, linear)
[ 0.002004] rcu: Hierarchical SRCU implementation.
[ 0.002292] EFI services will not be available.
[ 0.002467] smp: Bringing up secondary CPUs ...
[ 0.002909] Detected VIPT I-cache on CPU1
[ 0.002950] CPU1: Booted secondary processor 0x0000000001 [0x410fd034]
[ 0.003425] Detected VIPT I-cache on CPU2
[ 0.003448] CPU2: Booted secondary processor 0x0000000002 [0x410fd034]
[ 0.003884] Detected VIPT I-cache on CPU3
[ 0.003906] CPU3: Booted secondary processor 0x0000000003 [0x410fd034]
[ 0.003987] smp: Brought up 1 node, 4 CPUs
[ 0.004002] SMP: Total of 4 processors activated.
[ 0.004008] CPU features: detected: 32-bit EL0 Support
[ 0.004012] CPU features: detected: CRC32 instructions
[ 0.004055] CPU: All CPU(s) started at EL2
[ 0.004072] alternatives: patching kernel code
[ 0.005101] devtmpfs: initialized
[ 0.011103] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[ 0.011122] futex hash table entries: 1024 (order: 4, 65536 bytes, linear)
[ 0.033351] pinctrl core: initialized pinctrl subsystem
[ 0.034301] NET: Registered PF_NETLINK/PF_ROUTE protocol family
[ 0.035431] DMA: preallocated 512 KiB GFP_KERNEL pool for atomic allocations
[ 0.035521] DMA: preallocated 512 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations
[ 0.035552] audit: initializing netlink subsys (disabled)
[ 0.035645] audit: type=2000 audit(0.032:1): state=initialized audit_enabled=0 res=1
[ 0.036092] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.
[ 0.036157] ASID allocator initialised with 65536 entries
[ 0.053801] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages
[ 0.053817] HugeTLB registered 32.0 MiB page size, pre-allocated 0 pages
[ 0.053823] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages
[ 0.053829] HugeTLB registered 64.0 KiB page size, pre-allocated 0 pages
[ 0.055213] cryptd: max_cpu_qlen set to 1000
[ 0.056906] iommu: Default domain type: Translated
[ 0.056915] iommu: DMA domain TLB invalidation policy: strict mode
[ 0.057048] vgaarb: loaded
[ 0.057266] SCSI subsystem initialized
[ 0.057410] usbcore: registered new interface driver usbfs
[ 0.057438] usbcore: registered new interface driver hub
[ 0.057461] usbcore: registered new device driver usb
[ 0.057523] mc: Linux media interface: v0.10
[ 0.057543] videodev: Linux video capture interface: v2.00
[ 0.057578] pps_core: LinuxPPS API ver. 1 registered
[ 0.057584] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[ 0.057596] PTP clock support registered
[ 0.057625] EDAC MC: Ver: 3.0.0
[ 0.057972] zynqmp-ipi-mbox mailbox@ff990400: Registered ZynqMP IPI mbox with TX/RX channels.
[ 0.058148] FPGA manager framework
[ 0.058271] Advanced Linux Sound Architecture Driver Initialized.
[ 0.058605] NetLabel: Initializing
[ 0.058610] NetLabel: domain hash size = 128
[ 0.058615] NetLabel: protocols = UNLABELED CIPSOv4 CALIPSO
[ 0.058665] NetLabel: unlabeled traffic allowed by default
[ 0.059033] clocksource: Switched to clocksource arch_sys_counter
[ 0.086164] VFS: Disk quotas dquot_6.6.0
[ 0.086221] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
[ 0.086580] AppArmor: AppArmor Filesystem Enabled
[ 0.159068] NET: Registered PF_INET protocol family
[ 0.159224] IP idents hash table entries: 65536 (order: 7, 524288 bytes, linear)
[ 0.160723] tcp_listen_portaddr_hash hash table entries: 2048 (order: 3, 32768 bytes, linear)
[ 0.160764] Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear)
[ 0.160776] TCP established hash table entries: 32768 (order: 6, 262144 bytes, linear)
[ 0.160963] TCP bind hash table entries: 32768 (order: 7, 524288 bytes, linear)
[ 0.161326] TCP: Hash tables configured (established 32768 bind 32768)
[ 0.161404] UDP hash table entries: 2048 (order: 4, 65536 bytes, linear)
[ 0.161474] UDP-Lite hash table entries: 2048 (order: 4, 65536 bytes, linear)
[ 0.161615] NET: Registered PF_UNIX/PF_LOCAL protocol family
[ 0.162097] RPC: Registered named UNIX socket transport module.
[ 0.162104] RPC: Registered udp transport module.
[ 0.162108] RPC: Registered tcp transport module.
[ 0.162112] RPC: Registered tcp NFSv4.1 backchannel transport module.
[ 0.162703] PCI: CLS 0 bytes, default 64
[ 0.709608] armv8-pmu pmu: hw perfevents: no interrupt-affinity property, guessing.
[ 0.709780] hw perfevents: enabled with armv8_pmuv3 PMU driver, 7 counters available
[ 0.714145] Initialise system trusted keyrings
[ 0.714242] workingset: timestamp_bits=46 max_order=20 bucket_order=0
[ 0.714971] NFS: Registering the id_resolver key type
[ 0.714999] Key type id_resolver registered
[ 0.715004] Key type id_legacy registered
[ 0.715042] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
[ 0.715050] nfs4flexfilelayout_init: NFSv4 Flexfile Layout Driver Registering...
[ 0.715070] jffs2: version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
[ 0.747807] NET: Registered PF_ALG protocol family
[ 0.747817] Key type asymmetric registered
[ 0.747823] Asymmetric key parser 'x509' registered
[ 0.747867] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 246)
[ 0.747943] io scheduler mq-deadline registered
[ 0.747950] io scheduler kyber registered
[ 0.749413] Error: Driver 'clk-wizard' is already registered, aborting...
[ 0.775207] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
[ 0.778395] cacheinfo: Unable to detect cache hierarchy for CPU 0
[ 0.783015] brd: module loaded
[ 0.786597] loop: module loaded
[ 0.787071] mtdoops: mtd device (mtddev=name/number) must be supplied
[ 0.789479] tun: Universal TUN/TAP device driver, 1.6
[ 0.790085] PPP generic driver version 2.4.2
[ 0.790160] SPI driver wl1271_spi has no spi_device_id for ti,wl1271
[ 0.790167] SPI driver wl1271_spi has no spi_device_id for ti,wl1273
[ 0.790172] SPI driver wl1271_spi has no spi_device_id for ti,wl1281
[ 0.790177] SPI driver wl1271_spi has no spi_device_id for ti,wl1283
[ 0.790181] SPI driver wl1271_spi has no spi_device_id for ti,wl1285
[ 0.790186] SPI driver wl1271_spi has no spi_device_id for ti,wl1801
[ 0.790190] SPI driver wl1271_spi has no spi_device_id for ti,wl1805
[ 0.790195] SPI driver wl1271_spi has no spi_device_id for ti,wl1807
[ 0.790199] SPI driver wl1271_spi has no spi_device_id for ti,wl1831
[ 0.790204] SPI driver wl1271_spi has no spi_device_id for ti,wl1835
[ 0.790208] SPI driver wl1271_spi has no spi_device_id for ti,wl1837
[ 0.791191] usbcore: registered new interface driver uas
[ 0.791226] usbcore: registered new interface driver usb-storage
[ 0.791996] rtc_zynqmp ffa60000.rtc: registered as rtc0
[ 0.792014] rtc_zynqmp ffa60000.rtc: setting system clock to 1970-01-01T00:00:06 UTC (6)
[ 0.792070] i2c_dev: i2c /dev entries driver
[ 0.793436] usbcore: registered new interface driver uvcvideo
[ 0.794137] EDAC MC: ECC not enabled
[ 0.794275] EDAC DEVICE0: Giving out device to module zynqmp-ocm-edac controller zynqmp_ocm: DEV ff960000.memory-controller (INTERRUPT)
[ 0.794635] failed to register cpuidle driver
[ 0.794833] sdhci: Secure Digital Host Controller Interface driver
[ 0.794838] sdhci: Copyright(c) Pierre Ossman
[ 0.794842] sdhci-pltfm: SDHCI platform and OF driver helper
[ 0.795191] ledtrig-cpu: registered to indicate activity on CPUs
[ 0.795268] SMCCC: SOC_ID: ARCH_SOC_ID not implemented, skipping ....
[ 0.795337] zynqmp_firmware_probe Platform Management API v1.1
[ 0.795345] zynqmp_firmware_probe Trustzone version v1.0
[ 0.824318] securefw securefw: securefw probed
[ 0.824413] zynqmp_aes firmware:zynqmp-firmware:zynqmp-aes: The zynqmp-aes driver shall be deprecated in 2022.2 and removed in 2023.1
[ 0.824601] zynqmp_aes firmware:zynqmp-firmware:zynqmp-aes: AES Successfully Registered
[ 0.824714] zynqmp-keccak-384 firmware:zynqmp-firmware:sha384: The zynqmp-sha-deprecated driver shall be deprecated in 2022.2 and removed in 2023.1 release
[ 0.825128] usbcore: registered new interface driver usbhid
[ 0.825135] usbhid: USB HID core driver
[ 0.828044] fpga_manager fpga0: Xilinx ZynqMP FPGA Manager registered
[ 0.829128] drop_monitor: Initializing network drop monitor service
[ 0.829263] Initializing XFRM netlink socket
[ 0.829356] NET: Registered PF_INET6 protocol family
[ 0.829909] Segment Routing with IPv6
[ 0.829937] In-situ OAM (IOAM) with IPv6
[ 0.829978] sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
[ 0.830307] NET: Registered PF_PACKET protocol family
[ 0.830322] NET: Registered PF_KEY protocol family
[ 0.830328] can: controller area network core
[ 0.830359] NET: Registered PF_CAN protocol family
[ 0.830364] can: raw protocol
[ 0.830371] can: broadcast manager protocol
[ 0.830380] can: netlink gateway - max_hops=1
[ 0.830561] 9pnet: Installing 9P2000 support
[ 0.830591] Key type dns_resolver registered
[ 0.831096] registered taskstats version 1
[ 0.831109] Loading compiled-in X.509 certificates
[ 0.831328] AppArmor: AppArmor sha1 policy hashing enabled
[ 0.840347] ff010000.serial: ttyPS1 at MMIO 0xff010000 (irq = 51, base_baud = 6249999) is a xuartps
[ 1.974449] printk: console [ttyPS1] enabled
[ 1.979104] of-fpga-region fpga-full: FPGA Region probed
[ 1.985138] xilinx-zynqmp-dma fd500000.dma-controller: ZynqMP DMA driver Probe success
[ 1.993214] xilinx-zynqmp-dma fd510000.dma-controller: ZynqMP DMA driver Probe success
[ 2.001296] xilinx-zynqmp-dma fd520000.dma-controller: ZynqMP DMA driver Probe success
[ 2.009372] xilinx-zynqmp-dma fd530000.dma-controller: ZynqMP DMA driver Probe success
[ 2.017449] xilinx-zynqmp-dma fd540000.dma-controller: ZynqMP DMA driver Probe success
[ 2.025523] xilinx-zynqmp-dma fd550000.dma-controller: ZynqMP DMA driver Probe success
[ 2.033600] xilinx-zynqmp-dma fd560000.dma-controller: ZynqMP DMA driver Probe success
[ 2.041664] xilinx-zynqmp-dma fd570000.dma-controller: ZynqMP DMA driver Probe success
[ 2.049804] xilinx-zynqmp-dma ffa80000.dma-controller: ZynqMP DMA driver Probe success
[ 2.057878] xilinx-zynqmp-dma ffa90000.dma-controller: ZynqMP DMA driver Probe success
[ 2.065949] xilinx-zynqmp-dma ffaa0000.dma-controller: ZynqMP DMA driver Probe success
[ 2.074018] xilinx-zynqmp-dma ffab0000.dma-controller: ZynqMP DMA driver Probe success
[ 2.082093] xilinx-zynqmp-dma ffac0000.dma-controller: ZynqMP DMA driver Probe success
[ 2.090180] xilinx-zynqmp-dma ffad0000.dma-controller: ZynqMP DMA driver Probe success
[ 2.098256] xilinx-zynqmp-dma ffae0000.dma-controller: ZynqMP DMA driver Probe success
[ 2.106335] xilinx-zynqmp-dma ffaf0000.dma-controller: ZynqMP DMA driver Probe success
[ 2.114733] xilinx-zynqmp-dpdma fd4c0000.dma-controller: Xilinx DPDMA engine is probed
[ 2.126019] zynqmp-display fd4a0000.display: vtc bridge property not present
[ 2.135969] xilinx-dp-snd-codec fd4a0000.display:zynqmp_dp_snd_codec0: Xilinx DisplayPort Sound Codec probed
[ 2.146039] xilinx-dp-snd-pcm zynqmp_dp_snd_pcm0: Xilinx DisplayPort Sound PCM probed
[ 2.154092] xilinx-dp-snd-pcm zynqmp_dp_snd_pcm1: Xilinx DisplayPort Sound PCM probed
[ 2.162927] xilinx-dp-snd-card fd4a0000.display:zynqmp_dp_snd_card: Xilinx DisplayPort Sound Card probed
[ 2.166729] zynqmp_pll_disable() clock disable failed for dpll_int, ret = -13
[ 2.172514] OF: graph: no port node found in /axi/display@fd4a0000
[ 2.186103] xlnx-drm xlnx-drm.0: bound fd4a0000.display (ops 0xffffffc008eadb40)
[ 2.193709] [drm] Initialized xlnx 1.0.0 20130509 for fd4a0000.display on minor 0
[ 2.201215] zynqmp-display fd4a0000.display: ZynqMP DisplayPort Subsystem driver probed
[ 2.211052] spi-nor spi0.0: mt25qu512a (65536 Kbytes)
[ 2.216168] 17 fixed-partitions partitions found on MTD device spi0.0
[ 2.222609] Creating 17 MTD partitions on "spi0.0":
[ 2.227483] 0x000000000000-0x000000080000 : "Image Selector"
[ 2.234000] 0x000000080000-0x000000100000 : "Image Selector Golden"
[ 2.240677] tpm_tis_spi spi2.0: 2.0 TPM (device-id 0x1B, rev-id 22)
[ 2.247437] 0x000000100000-0x000000120000 : "Persistent Register"
[ 2.254293] 0x000000120000-0x000000140000 : "Persistent Register Backup"
[ 2.261281] tpm tpm0: A TPM error (256) occurred attempting the self test
[ 2.261793] 0x000000140000-0x000000200000 : "Open_1"
[ 2.268071] tpm tpm0: starting up the TPM manually
[ 2.273731] 0x000000200000-0x000000f00000 : "Image A (FSBL, PMU, ATF, U-Boot)"
[ 2.285793] 0x000000f00000-0x000000f80000 : "ImgSel Image A Catch"
[ 2.292714] 0x000000f80000-0x000001c80000 : "Image B (FSBL, PMU, ATF, U-Boot)"
[ 2.300668] 0x000001c80000-0x000001d00000 : "ImgSel Image B Catch"
[ 2.307640] 0x000001d00000-0x000001e00000 : "Open_2"
[ 2.313366] 0x000001e00000-0x000002000000 : "Recovery Image"
[ 2.319794] 0x000002000000-0x000002200000 : "Recovery Image Backup"
[ 2.326794] 0x000002200000-0x000002220000 : "U-Boot storage variables"
[ 2.334036] 0x000002220000-0x000002240000 : "U-Boot storage variables backup"
[ 2.341902] 0x000002240000-0x000002280000 : "SHA256"
[ 2.347608] 0x000002280000-0x0000022a0000 : "Secure OS Storage"
[ 2.354258] 0x0000022a0000-0x000004050000 : "User"
[ 2.359050] mtd: partition "User" extends beyond the end of device "spi0.0" -- size truncated to 0x1d60000
[ 2.369989] macb ff0b0000.ethernet: Not enabling partial store and forward
[ 2.377497] macb ff0b0000.ethernet eth0: Defer probe as mdio producer ff0c0000.ethernet is not probed
[ 2.409088] macb ff0c0000.ethernet: Not enabling partial store and forward
[ 2.439913] xilinx-axipmon ffa00000.perf-monitor: Probed Xilinx APM
[ 2.446468] xilinx-axipmon fd0b0000.perf-monitor: Probed Xilinx APM
[ 2.452960] xilinx-axipmon fd490000.perf-monitor: Probed Xilinx APM
[ 2.459469] xilinx-axipmon ffa10000.perf-monitor: Probed Xilinx APM
[ 2.466948] at24 1-0050: supply vcc not found, using dummy regulator
[ 2.473640] at24 1-0050: 8192 byte 24c64 EEPROM, writable, 1 bytes/write
[ 2.480483] at24 1-0051: supply vcc not found, using dummy regulator
[ 2.487128] at24 1-0051: 8192 byte 24c64 EEPROM, writable, 1 bytes/write
[ 2.495058] i2c i2c-1: Added multiplexed i2c bus 3
[ 2.499980] i2c i2c-1: Added multiplexed i2c bus 4
[ 2.504892] i2c i2c-1: Added multiplexed i2c bus 5
[ 2.509811] i2c i2c-1: Added multiplexed i2c bus 6
[ 2.514609] pca954x 1-0074: registered 4 multiplexed busses for I2C switch pca9546
[ 2.522209] cdns-i2c ff030000.i2c: 400 kHz mmio ff030000 irq 40
[ 2.529460] cdns-wdt fd4d0000.watchdog: Xilinx Watchdog Timer with timeout 60s
[ 2.536925] cdns-wdt ff150000.watchdog: Xilinx Watchdog Timer with timeout 10s
[ 2.545254] macb ff0b0000.ethernet: Not enabling partial store and forward
[ 2.552167] macb ff0b0000.ethernet: invalid hw address, using random
[ 2.559081] macb ff0b0000.ethernet eth0: Defer probe as mdio producer ff0c0000.ethernet is not probed
[ 2.584896] macb ff0c0000.ethernet: Not enabling partial store and forward
[ 2.591801] macb ff0c0000.ethernet: invalid hw address, using random
[ 2.624140] macb ff0b0000.ethernet: Not enabling partial store and forward
[ 2.631064] macb ff0b0000.ethernet: invalid hw address, using random
[ 2.637880] macb ff0b0000.ethernet eth0: Defer probe as mdio producer ff0c0000.ethernet is not probed
[ 2.668859] macb ff0c0000.ethernet: Not enabling partial store and forward
[ 2.675766] macb ff0c0000.ethernet: invalid hw address, using random
[ 2.710546] input: gpio-keys as /devices/platform/gpio-keys/input/input0
[ 2.717587] of_cfs_init
[ 2.717865] macb ff0b0000.ethernet: Not enabling partial store and forward
[ 2.720056] of_cfs_init: OK
[ 2.726949] macb ff0b0000.ethernet: invalid hw address, using random
[ 2.729838] cfg80211: Loading compiled-in X.509 certificates for regulatory database
[ 2.736579] macb ff0b0000.ethernet eth0: Defer probe as mdio producer ff0c0000.ethernet is not probed
[ 2.745104] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'
[ 2.760708] ALSA device list:
[ 2.763666] #0: DisplayPort monitor
[ 2.768052] platform regulatory.0: Direct firmware load for regulatory.db failed with error -2
[ 2.776665] cfg80211: failed to load regulatory.db
[ 2.801110] macb ff0c0000.ethernet: Not enabling partial store and forward
[ 2.808028] macb ff0c0000.ethernet: invalid hw address, using random
[ 2.893669] Waiting for root device /dev/sda2...
[ 2.893858] macb ff0b0000.ethernet: Not enabling partial store and forward
[ 2.905186] macb ff0b0000.ethernet: invalid hw address, using random
[ 2.912012] macb ff0b0000.ethernet eth0: Defer probe as mdio producer ff0c0000.ethernet is not probed
[ 2.936890] macb ff0c0000.ethernet: Not enabling partial store and forward
[ 2.943789] macb ff0c0000.ethernet: invalid hw address, using random
/dev/mmcblk1p1 /mnt/boot auto defaults 0 0
Xilinx Zynq MP First Stage Boot Loader
Release 2022.1 Sep 16 2022 - 04:56:15
MultiBootOffset: 0x1F0
Reset Mode : System Reset
Platform: Silicon (4.0), Running on A53-0 (64-bit) Processor, Device Name: XCZUUNKNEG
QSPI 32 bit Boot Mode
FlashID=0x20 0xBB 0x20
Pr�NOTICE: BL31: v2.6(release):0897efd
NOTICE: BL31: Built : 04:58:29, Sep 16 2022
U-Boot 2022.01-g91ad7924-dirty (Sep 15 2022 - 23:00:49 -0600), Build: jenkins-BUILDS-2022.1-som_qspi_generation-131
CPU: ZynqMP
Silicon: v3
Detected name: zynqmp-smk-k26-xcl2g-rev1-sck-kr-g-rev1
Model: ZynqMP SMK-K26 Rev1/B/A
Board: Xilinx ZynqMP
DRAM: 4 GiB
PMUFW: v1.1
Xilinx I2C FRU format at nvmem0:
Manufacturer Name: XILINX
Product Name: SMK-K26-XCL2G
Serial No: XFL1CYY0C2I3
Part Number: 5057-04
File ID: 0x0
Revision Number: 1
Xilinx I2C FRU format at nvmem1:
Manufacturer Name: XILINX
Product Name: SCK-KR-G
Serial No: XFL1V0BJCWOF
Part Number: 5100-01
File ID: 0x0
Revision Number: 1
EL Level: EL2
Chip ID: xck26
NAND: 0 MiB
MMC:
Loading Environment from nowhere... OK
In: serial
Out: serial
Err: serial
Bootmode: QSPI_MODE
Reset reason: SOFT
Net:
ZYNQ GEM: ff0b0000, mdio bus ff0c0000, phyaddr 4, interface sgmii
eth0: ethernet@ff0b0000
ZYNQ GEM: ff0c0000, mdio bus ff0c0000, phyaddr 8, interface rgmii-id
, eth1: ethernet@ff0c0000
starting USB...
Bus usb@fe200000: Register 2000440 NbrPorts 2
Starting the controller
USB XHCI 1.00
Bus usb@fe300000: Register 2000440 NbrPorts 2
Starting the controller
USB XHCI 1.00
scanning bus usb@fe200000 for devices... 5 USB Device(s) found
scanning bus usb@fe300000 for devices... 4 USB Device(s) found
scanning usb for storage devices... 1 Storage Device(s) found
Hit any key to stop autoboot: 0
model=SMK-K26-XCL2G
Device 0: Vendor: Generic Rev: 1.98 Prod: Ultra HS-COMBO
Type: Removable Hard Disk
Capacity: 30474.0 MB = 29.7 GB (62410752 x 512)
... is now current device
Scanning usb 0:1...
Found U-Boot script /boot.scr
2594 bytes read in 2 ms (1.2 MiB/s)
## Executing script at 20000000
Trying to load boot images from usb0
Trying to load boot images from usb1
Trying to load boot images from usb2
Trying to load boot images from usb3
Trying to load boot images from pxe
Trying to load boot images from dhcp
SCRIPT FAILED: continuing...
Device 1: unknown device
Device 2: unknown device
Device 3: unknown device
BOOTP broadcast 1
BOOTP broadcast 2
DHCP client bound to address 192.168.3.28 (433 ms)
missing environment variable: pxeuuid
Retrieving file: pxelinux.cfg/01-00-0a-35-0f-2b-0e
*** ERROR: `serverip' not set
Retrieving file: pxelinux.cfg/C0A8031C
*** ERROR: `serverip' not set
Retrieving file: pxelinux.cfg/C0A8031
*** ERROR: `serverip' not set
Retrieving file: pxelinux.cfg/C0A803
*** ERROR: `serverip' not set
Retrieving file: pxelinux.cfg/C0A80
*** ERROR: `serverip' not set
Retrieving file: pxelinux.cfg/C0A8
*** ERROR: `serverip' not set
Retrieving file: pxelinux.cfg/C0A
*** ERROR: `serverip' not set
Retrieving file: pxelinux.cfg/C0
*** ERROR: `serverip' not set
Retrieving file: pxelinux.cfg/C
*** ERROR: `serverip' not set
Retrieving file: pxelinux.cfg/default-arm-zynqmp-zynqmp
*** ERROR: `serverip' not set
Retrieving file: pxelinux.cfg/default-arm-zynqmp
*** ERROR: `serverip' not set
Retrieving file: pxelinux.cfg/default-arm
*** ERROR: `serverip' not set
Retrieving file: pxelinux.cfg/default
*** ERROR: `serverip' not set
Config file not found
BOOTP broadcast 1
DHCP client bound to address 192.168.3.28 (185 ms)
## Executing script at 20000000
Trying to load boot images from usb0
Trying to load boot images from usb1
Trying to load boot images from usb2
Trying to load boot images from usb3
Trying to load boot images from pxe
Trying to load boot images from dhcp
BOOTP broadcast 1
DHCP client bound to address 192.168.3.28 (167 ms)
*** ERROR: `serverip' not set
libfdt fdt_check_header(): FDT_ERR_BADMAGIC
Scanning disk usb_mass_storage.lun0...
Found 3 disks
No EFI system partition
tpm_tis_spi_probe: missing reset GPIO
DFU alt info setting: done
SF: Detected mt25qu512a with page size 256 Bytes, erase size 64 KiB, total 64 MiB
No UEFI binary known at 0x18000000
ZynqMP>
// cam_dp_ov5642.cpp (for KR260)
// 2018/12/14 by marsee
//
// This software converts the left and right of the camera image to BMP file.
// -b : bmp file name
// -n : Start File Number
// -h : help
//
// 2018/12/20 : completed.
// I am using the SVGA driver register setting of https://github.com/virajkanwade/rk3188_android_kernel/blob/master/drivers/media/video/ov5642.c
// 2018/12/22 : fixed
// 2018/12/30 : ov5642_inf_axis[0] fixed
// 2019/02/06 : for DisplayPort
// 2023/04/23 : kr260_cam_disp vitis platform
// 2023/04/25 : bug fix. axi_gpio_1-uio IP (active_frame input) is removed.
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <string.h>
#define PIXEL_NUM_OF_BYTES 4
#define NUMBER_OF_WRITE_FRAMES 3
#define SVGA_HORIZONTAL_PIXELS 800
#define SVGA_VERTICAL_LINES 600
#define SVGA_ALL_DISP_ADDRESS (SVGA_HORIZONTAL_PIXELS * SVGA_VERTICAL_LINES * PIXEL_NUM_OF_BYTES)
#define SVGA_3_PICTURES (SVGA_ALL_DISP_ADDRESS * NUMBER_OF_WRITE_FRAMES)
#define XGA_HORIZONTAL_PIXELS 1024
#define XGA_VERTICAL_LINES 768
#define XGA_ALL_DISP_ADDRESS (XGA_HORIZONTAL_PIXELS * XGA_VERTICAL_LINES * PIXEL_NUM_OF_BYTES)
#define XGA_3_PICTURES (XGA_ALL_DISP_ADDRESS * NUMBER_OF_WRITE_FRAMES)
#define HD_HORIZONTAL_PIXELS 1920
#define HD_VERTICAL_LINES 1080
#define HD_ALL_DISP_ADDRESS (HD_HORIZONTAL_PIXELS * HD_VERTICAL_LINES * PIXEL_NUM_OF_BYTES)
#define HD_3_PICTURES (HD_ALL_DISP_ADDRESS * NUMBER_OF_WRITE_FRAMES)
int WriteBMPfile(char *bmp_file, volatile unsigned int *frame_buffer, int active_frame, int resolution);
void cam_i2c_init(volatile unsigned *ov5642_axi_iic) {
ov5642_axi_iic[64] = 0x2; // reset tx fifo ,address is 0x100, i2c_control_reg
ov5642_axi_iic[64] = 0x1; // enable i2c
}
void cam_i2x_write_sync(void) {
// unsigned c;
// c = *cam_i2c_rx_fifo;
// while ((c & 0x84) != 0x80)
// c = *cam_i2c_rx_fifo; // No Bus Busy and TX_FIFO_Empty = 1
usleep(1000);
}
void cam_i2c_write(volatile unsigned *ov5642_axi_iic, unsigned int device_addr, unsigned int write_addr, unsigned int write_data){
ov5642_axi_iic[66] = 0x100 | (device_addr & 0xfe); // Slave IIC Write Address, address is 0x108, i2c_tx_fifo
ov5642_axi_iic[66] = (write_addr >> 8) & 0xff; // address upper byte
ov5642_axi_iic[66] = write_addr & 0xff; // address lower byte
ov5642_axi_iic[66] = 0x200 | (write_data & 0xff); // data
cam_i2x_write_sync();
}
int cam_reg_set(volatile unsigned *axi_iic, unsigned int device_addr);
int main(int argc, char *argv[]){
int opt;
int c, help_flag=0;
char bmp_fn[256] = "bmp_file";
char attr[1024];
unsigned long phys_addr;
int file_no = -1;
int fd1, fd2, fd3, fd4, fd5, fd6, fd10, fd11;
volatile unsigned int *ov5642_inf_axis, *axi_iic, *disp_dmar_axis, *vflip_dma_write;
volatile unsigned int *axi_gpio_0, *axi_gpio_1;
volatile unsigned int *frame_buffer;
int active_frame;
int resolution;
int all_disp_addr;
resolution = 1; // XGA
while ((opt=getopt(argc, argv, "b:n:h:r:")) != -1){
switch (opt){
case 'b':
strcpy(bmp_fn, optarg);
break;
case 'n':
file_no = atoi(optarg);
printf("file_no = %d\n", file_no+1);
break;
case 'r':
resolution = atoi(optarg);
break;
case 'h':
help_flag = 1;
break;
}
}
if(resolution == 0){
printf("SVGA\n");
} else if(resolution == 1){
printf("XGA\n");
} else {
printf("HD\n");
}
if (help_flag == 1){ // help
printf("Usage : cam_capture [-b <bmp file name>] [-n <Start File Number>] [-h]\n");
printf(" -r [0|1|2](0:SVGA, 1:XGA, 2:HD)\n");
exit(0);
}
// all_disp_addr
switch(resolution){
case 0 :
all_disp_addr = SVGA_ALL_DISP_ADDRESS;
break;
case 1 :
all_disp_addr = XGA_ALL_DISP_ADDRESS;
break;
default : // 2
all_disp_addr = HD_ALL_DISP_ADDRESS;
break;
}
// ov5642_inf_axis-uio IP
fd1 = open("/dev/uio6", O_RDWR|O_SYNC); // Read/Write, The chache is disable
if (fd1 < 1){
fprintf(stderr, "/dev/uio6 (ov5642_inf_axis) open error\n");
exit(-1);
}
ov5642_inf_axis = (volatile unsigned *)mmap(NULL, 0x1000, PROT_READ|PROT_WRITE, MAP_SHARED, fd1, 0);
if (!ov5642_inf_axis){
fprintf(stderr, "ov5642_inf_axis mmap error\n");
exit(-1);
}
// axi_iic-uio IP
fd2 = open("/dev/uio4", O_RDWR|O_SYNC); // Read/Write, The chache is disable
if (fd2 < 1){
fprintf(stderr, "/dev/uio4 (axi_iic) open error\n");
exit(-1);
}
axi_iic = (volatile unsigned int *)mmap(NULL, 0x1000, PROT_READ|PROT_WRITE, MAP_SHARED, fd2, 0);
if (!axi_iic){
fprintf(stderr, "axi_iic mmap error\n");
exit(-1);
}
// disp_dmar_axis-uio IP
fd3 = open("/dev/uio9", O_RDWR|O_SYNC); // Read/Write, The chache is disable
if (fd3 < 1){
fprintf(stderr, "/dev/uio9 (disp_dmar_axis) open error\n");
exit(-1);
}
disp_dmar_axis = (volatile unsigned int *)mmap(NULL, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED, fd3, 0);
if (!disp_dmar_axis){
fprintf(stderr, "disp_dmar_axis mmap error\n");
exit(-1);
}
// vflip_dma_write-uio IP
fd4 = open("/dev/uio7", O_RDWR|O_SYNC); // Read/Write, The chache is disable
if (fd4 < 1){
fprintf(stderr, "/dev/uio7 (vflip_dma_write) open error\n");
exit(-1);
}
vflip_dma_write = (volatile unsigned int *)mmap(NULL, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED, fd4, 0);
if (!vflip_dma_write){
fprintf(stderr, "vflip_dma_write mmap error\n");
exit(-1);
}
// axi_gpio_0-uio IP (init_done output)
fd5 = open("/dev/uio8", O_RDWR|O_SYNC); // Read/Write, The chache is disable
if (fd5 < 1){
fprintf(stderr, "/dev/uio8 (axi_gpio_0) open error\n");
exit(-1);
}
axi_gpio_0 = (volatile unsigned int *)mmap(NULL, 0x1000, PROT_READ|PROT_WRITE, MAP_SHARED, fd5, 0);
if (!axi_gpio_0){
fprintf(stderr, "axi_gpio_0 mmap error\n");
exit(-1);
}
// axi_gpio_1-uio IP (active_frame input)
/*fd6 = open("/dev/uio6", O_RDWR|O_SYNC); // Read/Write, The chache is disable
if (fd6 < 1){
fprintf(stderr, "/dev/uio6 (axi_gpio_1) open error\n");
exit(-1);
}
axi_gpio_1 = (volatile unsigned int *)mmap(NULL, 0x1000, PROT_READ|PROT_WRITE, MAP_SHARED, fd6, 0);
if (!axi_gpio_1){
fprintf(stderr, "axi_gpio_1 mmap error\n");
exit(-1);
} */
// udmabuf4
fd10 = open("/dev/udmabuf4", O_RDWR | O_SYNC); // frame_buffer, The chache is disabled.
if (fd10 == -1){
fprintf(stderr, "/dev/udmabuf4 open error\n");
exit(-1);
}
frame_buffer = (volatile unsigned int *)mmap(NULL, all_disp_addr*NUMBER_OF_WRITE_FRAMES, PROT_READ|PROT_WRITE, MAP_SHARED, fd10, 0);
if (!frame_buffer){
fprintf(stderr, "frame_buffer4 mmap error\n");
exit(-1);
}
// phys_addr of udmabuf4
fd11 = open("/sys/class/u-dma-buf/udmabuf4/phys_addr", O_RDONLY);
if (fd11 == -1){
fprintf(stderr, "/sys/class/u-dma-buf/udmabuf4/phys_addr open error\n");
exit(-1);
}
read(fd11, attr, 1024);
sscanf(attr, "%lx", &phys_addr);
close(fd11);
printf("phys_addr = %x\n", (int)phys_addr);
// vflip_dma_write start
vflip_dma_write[6] = phys_addr; // fb0
vflip_dma_write[8] = phys_addr+all_disp_addr; // fb1
vflip_dma_write[10] = phys_addr+2*all_disp_addr; // fb2
vflip_dma_write[12] = resolution;
vflip_dma_write[0] = 0x1; // start
vflip_dma_write[0] = 0x80; // EnableAutoRestart
// CMOS Camera initialize, ov5642
cam_i2c_init(axi_iic);
cam_reg_set(axi_iic, 0x78); // OV5642 register set
ov5642_inf_axis[0] = phys_addr; // ov5642 AXI4-Stream Start
ov5642_inf_axis[1] = 0;
// disp_dmar_axis start
disp_dmar_axis[4] = phys_addr; // fb0
disp_dmar_axis[6] = phys_addr+all_disp_addr; // fb1
disp_dmar_axis[8] = phys_addr+2*all_disp_addr; // fb2
disp_dmar_axis[10] = resolution;
axi_gpio_0[0] = 1; // disp_dmar_axis start(init_done = 1)
char bmp_file[256];
// All 0 set
int all_disp_frame_index = all_disp_addr/PIXEL_NUM_OF_BYTES*NUMBER_OF_WRITE_FRAMES;
for (int i=0; i<all_disp_frame_index; i++){
frame_buffer[i] = 0x0;
}
// w - writed the left and right eye's bmp files. q - exit.
c = getc(stdin);
while(c != 'q'){
switch ((char)c) {
case 'w' : // w - writed a bmp files.
// writed the frame buffer
file_no++;
sprintf(bmp_file, "%s%d.bmp", bmp_fn, file_no);
//active_frame = (int)(axi_gpio_1[0] & 0x3); // Data signal of active_frame_V
active_frame = 0;
WriteBMPfile(bmp_file, frame_buffer, active_frame, resolution);
printf("file No. = %d\n", file_no);
break;
case 'e' : // e - writed a same bmp files.
// writed the frame buffer
if (file_no == -1)
file_no = 0;
sprintf(bmp_file, "%s%d.bmp", bmp_fn, file_no);
active_frame = (int)(axi_gpio_1[0] & 0x3); // Data signal of active_frame_V
WriteBMPfile(bmp_file, frame_buffer, active_frame, resolution);
printf("file No. = %d\n", file_no);
break;
}
c = getc(stdin);
}
munmap((void *)ov5642_inf_axis, 0x1000);
munmap((void *)axi_iic, 0x1000);
munmap((void *)disp_dmar_axis, 0x10000);
munmap((void *)vflip_dma_write, 0x10000);
munmap((void *)axi_gpio_0, 0x1000);
munmap((void *)axi_gpio_1, 0x1000);
munmap((void *)frame_buffer, all_disp_addr*3);
close(fd1);
close(fd2);
close(fd3);
close(fd4);
close(fd5);
close(fd6);
close(fd10);
return(0);
}
int WriteBMPfile(char *bmp_file, volatile unsigned int *frame_buffer, int active_frame, int resolution){
int read_frame;
int img_width, img_height;
if (active_frame == 0)
read_frame = 2;
else if (active_frame == 1)
read_frame = 0;
else // active_frame == 2
read_frame = 1;
switch(resolution){
case 0 :
img_width = SVGA_HORIZONTAL_PIXELS;
img_height = SVGA_VERTICAL_LINES;
break;
case 1 :
img_width = XGA_HORIZONTAL_PIXELS;
img_height = XGA_VERTICAL_LINES;
break;
default : // case 2 :
img_width = HD_HORIZONTAL_PIXELS;
img_height = HD_VERTICAL_LINES;
break;
}
int offset_addr = read_frame * img_width * img_height;
cv::Mat img(img_height, img_width, CV_8UC3);
cv::Mat_<cv::Vec3b> dst_vec3b = cv::Mat_<cv::Vec3b>(img);
for(int y=0; y<img.rows; y++){
for(int x=0; x<img.cols; x++){
cv::Vec3b pixel;
int rgb = frame_buffer[offset_addr+y*img.cols+x];
pixel[0] = (rgb & 0xff); // blue
pixel[1] = (rgb & 0xff00) >> 8; // green
pixel[2] = (rgb & 0xff0000) >> 16; // red
dst_vec3b(y,x) = pixel;
}
}
cv::imwrite(bmp_file, img);
return(0);
}
int cam_reg_set(volatile unsigned *axi_iic, unsigned int device_addr){
cam_i2c_write(axi_iic, device_addr, 0x3103, 0x93);
cam_i2c_write(axi_iic, device_addr, 0x3008, 0x82);
cam_i2c_write(axi_iic, device_addr, 0x3017, 0x7f);
cam_i2c_write(axi_iic, device_addr, 0x3018, 0xfc);
cam_i2c_write(axi_iic, device_addr, 0x3810, 0xc2);
cam_i2c_write(axi_iic, device_addr, 0x3615, 0xf0);
cam_i2c_write(axi_iic, device_addr, 0x3000, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3001, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3002, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3003, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3000, 0xf8);
cam_i2c_write(axi_iic, device_addr, 0x3001, 0x48);
cam_i2c_write(axi_iic, device_addr, 0x3002, 0x5c);
cam_i2c_write(axi_iic, device_addr, 0x3003, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x3004, 0x07);
cam_i2c_write(axi_iic, device_addr, 0x3005, 0xb7);
cam_i2c_write(axi_iic, device_addr, 0x3006, 0x43);
cam_i2c_write(axi_iic, device_addr, 0x3007, 0x37);
cam_i2c_write(axi_iic, device_addr, 0x3011, 0x08); // 0x08 - 15fps, 0x10 - 30fps
cam_i2c_write(axi_iic, device_addr, 0x3010, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x460c, 0x22);
cam_i2c_write(axi_iic, device_addr, 0x3815, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x370d, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x370c, 0xa0);
cam_i2c_write(axi_iic, device_addr, 0x3602, 0xfc);
cam_i2c_write(axi_iic, device_addr, 0x3612, 0xff);
cam_i2c_write(axi_iic, device_addr, 0x3634, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x3613, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3605, 0x7c);
cam_i2c_write(axi_iic, device_addr, 0x3621, 0x09);
cam_i2c_write(axi_iic, device_addr, 0x3622, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3604, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x3603, 0xa7);
cam_i2c_write(axi_iic, device_addr, 0x3603, 0x27);
cam_i2c_write(axi_iic, device_addr, 0x4000, 0x21);
cam_i2c_write(axi_iic, device_addr, 0x401d, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x3600, 0x54);
cam_i2c_write(axi_iic, device_addr, 0x3605, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x3606, 0x3f);
cam_i2c_write(axi_iic, device_addr, 0x3c01, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5000, 0x4f);
cam_i2c_write(axi_iic, device_addr, 0x5020, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x5181, 0x79);
cam_i2c_write(axi_iic, device_addr, 0x5182, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5185, 0x22);
cam_i2c_write(axi_iic, device_addr, 0x5197, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x5001, 0xff);
cam_i2c_write(axi_iic, device_addr, 0x5500, 0x0a);
cam_i2c_write(axi_iic, device_addr, 0x5504, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5505, 0x7f);
cam_i2c_write(axi_iic, device_addr, 0x5080, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x300e, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x4610, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x471d, 0x05);
cam_i2c_write(axi_iic, device_addr, 0x4708, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x3710, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x3632, 0x41);
cam_i2c_write(axi_iic, device_addr, 0x3702, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x3620, 0x37);
cam_i2c_write(axi_iic, device_addr, 0x3631, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x3808, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x3809, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x380a, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x380b, 0xe0);
cam_i2c_write(axi_iic, device_addr, 0x380e, 0x07);
cam_i2c_write(axi_iic, device_addr, 0x380f, 0xd0);
cam_i2c_write(axi_iic, device_addr, 0x501f, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5000, 0x4f);
cam_i2c_write(axi_iic, device_addr, 0x4300, 0x61); // RGB565
cam_i2c_write(axi_iic, device_addr, 0x3503, 0x07);
cam_i2c_write(axi_iic, device_addr, 0x3501, 0x73);
cam_i2c_write(axi_iic, device_addr, 0x3502, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x350b, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3503, 0x07);
cam_i2c_write(axi_iic, device_addr, 0x3824, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x3501, 0x1e);
cam_i2c_write(axi_iic, device_addr, 0x3502, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x350b, 0x7f);
cam_i2c_write(axi_iic, device_addr, 0x380c, 0x0c);
cam_i2c_write(axi_iic, device_addr, 0x380d, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x380e, 0x03);
cam_i2c_write(axi_iic, device_addr, 0x380f, 0xe8);
cam_i2c_write(axi_iic, device_addr, 0x3a0d, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x3a0e, 0x03);
cam_i2c_write(axi_iic, device_addr, 0x3818, 0xc1);
cam_i2c_write(axi_iic, device_addr, 0x3705, 0xdb);
cam_i2c_write(axi_iic, device_addr, 0x370a, 0x81);
cam_i2c_write(axi_iic, device_addr, 0x3801, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x3621, 0xc7);
cam_i2c_write(axi_iic, device_addr, 0x3801, 0x50);
cam_i2c_write(axi_iic, device_addr, 0x3803, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x3827, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x3810, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x3804, 0x05);
cam_i2c_write(axi_iic, device_addr, 0x3805, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5682, 0x05);
cam_i2c_write(axi_iic, device_addr, 0x5683, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3806, 0x03);
cam_i2c_write(axi_iic, device_addr, 0x3807, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x5686, 0x03);
cam_i2c_write(axi_iic, device_addr, 0x5687, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x3a00, 0x78);
cam_i2c_write(axi_iic, device_addr, 0x3a1a, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x3a13, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x3a18, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3a19, 0x7c);
cam_i2c_write(axi_iic, device_addr, 0x3a08, 0x12);
cam_i2c_write(axi_iic, device_addr, 0x3a09, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x3a0a, 0x0f);
cam_i2c_write(axi_iic, device_addr, 0x3a0b, 0xa0);
cam_i2c_write(axi_iic, device_addr, 0x3004, 0xff);
cam_i2c_write(axi_iic, device_addr, 0x350c, 0x07);
cam_i2c_write(axi_iic, device_addr, 0x350d, 0xd0);
cam_i2c_write(axi_iic, device_addr, 0x3500, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3501, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3502, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x350a, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x350b, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3503, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x528a, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x528b, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x528c, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x528d, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x528e, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x528f, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5290, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5292, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5293, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5294, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5295, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5296, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5297, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5298, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5299, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x529a, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529b, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x529c, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529d, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x529e, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529f, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x3a0f, 0x3c);
cam_i2c_write(axi_iic, device_addr, 0x3a10, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x3a1b, 0x3c);
cam_i2c_write(axi_iic, device_addr, 0x3a1e, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x3a11, 0x70);
cam_i2c_write(axi_iic, device_addr, 0x3a1f, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x3030, 0x0b);
cam_i2c_write(axi_iic, device_addr, 0x3a02, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3a03, 0x7d);
cam_i2c_write(axi_iic, device_addr, 0x3a04, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3a14, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3a15, 0x7d);
cam_i2c_write(axi_iic, device_addr, 0x3a16, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3a00, 0x78);
cam_i2c_write(axi_iic, device_addr, 0x3a08, 0x09);
cam_i2c_write(axi_iic, device_addr, 0x3a09, 0x60);
cam_i2c_write(axi_iic, device_addr, 0x3a0a, 0x07);
cam_i2c_write(axi_iic, device_addr, 0x3a0b, 0xd0);
cam_i2c_write(axi_iic, device_addr, 0x3a0d, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x3a0e, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x5193, 0x70);
cam_i2c_write(axi_iic, device_addr, 0x3620, 0x57);
cam_i2c_write(axi_iic, device_addr, 0x3703, 0x98);
cam_i2c_write(axi_iic, device_addr, 0x3704, 0x1c);
cam_i2c_write(axi_iic, device_addr, 0x589b, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x589a, 0xc5);
cam_i2c_write(axi_iic, device_addr, 0x528a, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x528b, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x528c, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x528d, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x528e, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x528f, 0x28);
cam_i2c_write(axi_iic, device_addr, 0x5290, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5292, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5293, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5294, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5295, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5296, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5297, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5298, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5299, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x529a, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529b, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x529c, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529d, 0x28);
cam_i2c_write(axi_iic, device_addr, 0x529e, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529f, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5282, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5300, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5301, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5302, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5303, 0x7c);
cam_i2c_write(axi_iic, device_addr, 0x530c, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x530d, 0x0c);
cam_i2c_write(axi_iic, device_addr, 0x530e, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x530f, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5310, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5311, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5308, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5309, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x5304, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5305, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5306, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5307, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5314, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5315, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5319, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5316, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5317, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5318, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5380, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x5381, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5382, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5383, 0x4e);
cam_i2c_write(axi_iic, device_addr, 0x5384, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5385, 0x0f);
cam_i2c_write(axi_iic, device_addr, 0x5386, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5387, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5388, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x5389, 0x15);
cam_i2c_write(axi_iic, device_addr, 0x538a, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538b, 0x31);
cam_i2c_write(axi_iic, device_addr, 0x538c, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538d, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538e, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538f, 0x0f);
cam_i2c_write(axi_iic, device_addr, 0x5390, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5391, 0xab);
cam_i2c_write(axi_iic, device_addr, 0x5392, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5393, 0xa2);
cam_i2c_write(axi_iic, device_addr, 0x5394, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5480, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5481, 0x21);
cam_i2c_write(axi_iic, device_addr, 0x5482, 0x36);
cam_i2c_write(axi_iic, device_addr, 0x5483, 0x57);
cam_i2c_write(axi_iic, device_addr, 0x5484, 0x65);
cam_i2c_write(axi_iic, device_addr, 0x5485, 0x71);
cam_i2c_write(axi_iic, device_addr, 0x5486, 0x7d);
cam_i2c_write(axi_iic, device_addr, 0x5487, 0x87);
cam_i2c_write(axi_iic, device_addr, 0x5488, 0x91);
cam_i2c_write(axi_iic, device_addr, 0x5489, 0x9a);
cam_i2c_write(axi_iic, device_addr, 0x548a, 0xaa);
cam_i2c_write(axi_iic, device_addr, 0x548b, 0xb8);
cam_i2c_write(axi_iic, device_addr, 0x548c, 0xcd);
cam_i2c_write(axi_iic, device_addr, 0x548d, 0xdd);
cam_i2c_write(axi_iic, device_addr, 0x548e, 0xea);
cam_i2c_write(axi_iic, device_addr, 0x548f, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5490, 0x05);
cam_i2c_write(axi_iic, device_addr, 0x5491, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5492, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x5493, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5494, 0x03);
cam_i2c_write(axi_iic, device_addr, 0x5495, 0x60);
cam_i2c_write(axi_iic, device_addr, 0x5496, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5497, 0xb8);
cam_i2c_write(axi_iic, device_addr, 0x5498, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5499, 0x86);
cam_i2c_write(axi_iic, device_addr, 0x549a, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x549b, 0x5b);
cam_i2c_write(axi_iic, device_addr, 0x549c, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x549d, 0x3b);
cam_i2c_write(axi_iic, device_addr, 0x549e, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x549f, 0x1c);
cam_i2c_write(axi_iic, device_addr, 0x54a0, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x54a1, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x54a2, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54a3, 0xed);
cam_i2c_write(axi_iic, device_addr, 0x54a4, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54a5, 0xc5);
cam_i2c_write(axi_iic, device_addr, 0x54a6, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54a7, 0xa5);
cam_i2c_write(axi_iic, device_addr, 0x54a8, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54a9, 0x6c);
cam_i2c_write(axi_iic, device_addr, 0x54aa, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54ab, 0x41);
cam_i2c_write(axi_iic, device_addr, 0x54ac, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54ad, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x54ae, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x54af, 0x16);
cam_i2c_write(axi_iic, device_addr, 0x3406, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5192, 0x04); // 0x04
cam_i2c_write(axi_iic, device_addr, 0x5191, 0xf8); // 0xf8
cam_i2c_write(axi_iic, device_addr, 0x5193, 0x70);
cam_i2c_write(axi_iic, device_addr, 0x5194, 0xf0);
cam_i2c_write(axi_iic, device_addr, 0x5195, 0xf0);
cam_i2c_write(axi_iic, device_addr, 0x518d, 0x3d);
cam_i2c_write(axi_iic, device_addr, 0x518f, 0x54);
cam_i2c_write(axi_iic, device_addr, 0x518e, 0x3d);
cam_i2c_write(axi_iic, device_addr, 0x5190, 0x54);
cam_i2c_write(axi_iic, device_addr, 0x518b, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x518c, 0xbd);
cam_i2c_write(axi_iic, device_addr, 0x5187, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x5188, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x5189, 0x6e);
cam_i2c_write(axi_iic, device_addr, 0x518a, 0x68);
cam_i2c_write(axi_iic, device_addr, 0x5186, 0x1c);
cam_i2c_write(axi_iic, device_addr, 0x5181, 0x50);
cam_i2c_write(axi_iic, device_addr, 0x5184, 0x25);
cam_i2c_write(axi_iic, device_addr, 0x5182, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x5183, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5184, 0x25);
cam_i2c_write(axi_iic, device_addr, 0x5185, 0x24);
cam_i2c_write(axi_iic, device_addr, 0x5025, 0x82);
cam_i2c_write(axi_iic, device_addr, 0x5583, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x5584, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x5580, 0x02); // 0x02
cam_i2c_write(axi_iic, device_addr, 0x3633, 0x07);
cam_i2c_write(axi_iic, device_addr, 0x3702, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x3703, 0xb2);
cam_i2c_write(axi_iic, device_addr, 0x3704, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x370b, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x370d, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x3620, 0x52);
cam_i2c_write(axi_iic, device_addr, 0x3c00, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x5001, 0xFF);
cam_i2c_write(axi_iic, device_addr, 0x5282, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5300, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5301, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5302, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5303, 0x7c);
cam_i2c_write(axi_iic, device_addr, 0x530c, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x530d, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x530e, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x530f, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5310, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5311, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5308, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5309, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x5304, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5305, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5306, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5307, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5314, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5315, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5319, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5316, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5317, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5318, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5500, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5502, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5503, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x5504, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5505, 0x7f);
cam_i2c_write(axi_iic, device_addr, 0x5025, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5300, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5301, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5302, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5303, 0x7c);
cam_i2c_write(axi_iic, device_addr, 0x530c, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x530d, 0x0c);
cam_i2c_write(axi_iic, device_addr, 0x530e, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x530f, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5310, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5311, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5308, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5309, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x5304, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5305, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5306, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5307, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5314, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5315, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5319, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5316, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5317, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5318, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5380, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x5381, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5382, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5383, 0x1f);
cam_i2c_write(axi_iic, device_addr, 0x5384, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5385, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x5386, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5387, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5388, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5389, 0xE1);
cam_i2c_write(axi_iic, device_addr, 0x538A, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538B, 0x2B);
cam_i2c_write(axi_iic, device_addr, 0x538C, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538D, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538E, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538F, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5390, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5391, 0xB3);
cam_i2c_write(axi_iic, device_addr, 0x5392, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5393, 0xA6);
cam_i2c_write(axi_iic, device_addr, 0x5394, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5480, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x5481, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x5482, 0x2a);
cam_i2c_write(axi_iic, device_addr, 0x5483, 0x49);
cam_i2c_write(axi_iic, device_addr, 0x5484, 0x56);
cam_i2c_write(axi_iic, device_addr, 0x5485, 0x62);
cam_i2c_write(axi_iic, device_addr, 0x5486, 0x6c);
cam_i2c_write(axi_iic, device_addr, 0x5487, 0x76);
cam_i2c_write(axi_iic, device_addr, 0x5488, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5489, 0x88);
cam_i2c_write(axi_iic, device_addr, 0x548a, 0x96);
cam_i2c_write(axi_iic, device_addr, 0x548b, 0xa2);
cam_i2c_write(axi_iic, device_addr, 0x548c, 0xb8);
cam_i2c_write(axi_iic, device_addr, 0x548d, 0xcc);
cam_i2c_write(axi_iic, device_addr, 0x548e, 0xe0);
cam_i2c_write(axi_iic, device_addr, 0x548f, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5490, 0x3);
cam_i2c_write(axi_iic, device_addr, 0x5491, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x5492, 0x3);
cam_i2c_write(axi_iic, device_addr, 0x5493, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5494, 0x2);
cam_i2c_write(axi_iic, device_addr, 0x5495, 0xa0);
cam_i2c_write(axi_iic, device_addr, 0x5496, 0x2);
cam_i2c_write(axi_iic, device_addr, 0x5497, 0x48);
cam_i2c_write(axi_iic, device_addr, 0x5498, 0x2);
cam_i2c_write(axi_iic, device_addr, 0x5499, 0x26);
cam_i2c_write(axi_iic, device_addr, 0x549a, 0x2);
cam_i2c_write(axi_iic, device_addr, 0x549b, 0xb);
cam_i2c_write(axi_iic, device_addr, 0x549c, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x549d, 0xee);
cam_i2c_write(axi_iic, device_addr, 0x549e, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x549f, 0xd8);
cam_i2c_write(axi_iic, device_addr, 0x54a0, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54a1, 0xc7);
cam_i2c_write(axi_iic, device_addr, 0x54a2, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54a3, 0xb3);
cam_i2c_write(axi_iic, device_addr, 0x54a4, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54a5, 0x90);
cam_i2c_write(axi_iic, device_addr, 0x54a6, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54a7, 0x62);
cam_i2c_write(axi_iic, device_addr, 0x54a8, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54a9, 0x27);
cam_i2c_write(axi_iic, device_addr, 0x54aa, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54ab, 0x09);
cam_i2c_write(axi_iic, device_addr, 0x54ac, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54ad, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x54ae, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x54af, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x54b0, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54b1, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x54b2, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54b3, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x54b4, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x54b5, 0xf0);
cam_i2c_write(axi_iic, device_addr, 0x54b6, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54b7, 0xdf);
cam_i2c_write(axi_iic, device_addr, 0x5583, 0x5d);
cam_i2c_write(axi_iic, device_addr, 0x5584, 0x5d);
cam_i2c_write(axi_iic, device_addr, 0x5580, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x5587, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5588, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x558a, 0x09);
cam_i2c_write(axi_iic, device_addr, 0x5589, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5000, 0xcf);
cam_i2c_write(axi_iic, device_addr, 0x5800, 0x48);
cam_i2c_write(axi_iic, device_addr, 0x5801, 0x31);
cam_i2c_write(axi_iic, device_addr, 0x5802, 0x21);
cam_i2c_write(axi_iic, device_addr, 0x5803, 0x1b);
cam_i2c_write(axi_iic, device_addr, 0x5804, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x5805, 0x1e);
cam_i2c_write(axi_iic, device_addr, 0x5806, 0x29);
cam_i2c_write(axi_iic, device_addr, 0x5807, 0x38);
cam_i2c_write(axi_iic, device_addr, 0x5808, 0x26);
cam_i2c_write(axi_iic, device_addr, 0x5809, 0x17);
cam_i2c_write(axi_iic, device_addr, 0x580a, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x580b, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x580c, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x580d, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x580e, 0x13);
cam_i2c_write(axi_iic, device_addr, 0x580f, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x5810, 0x15);
cam_i2c_write(axi_iic, device_addr, 0x5811, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x5812, 0x8);
cam_i2c_write(axi_iic, device_addr, 0x5813, 0x5);
cam_i2c_write(axi_iic, device_addr, 0x5814, 0x4);
cam_i2c_write(axi_iic, device_addr, 0x5815, 0x5);
cam_i2c_write(axi_iic, device_addr, 0x5816, 0x9);
cam_i2c_write(axi_iic, device_addr, 0x5817, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x5818, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x5819, 0xa);
cam_i2c_write(axi_iic, device_addr, 0x581a, 0x4);
cam_i2c_write(axi_iic, device_addr, 0x581b, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x581c, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x581d, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x581e, 0x6);
cam_i2c_write(axi_iic, device_addr, 0x581f, 0x9);
cam_i2c_write(axi_iic, device_addr, 0x5820, 0x12);
cam_i2c_write(axi_iic, device_addr, 0x5821, 0xb);
cam_i2c_write(axi_iic, device_addr, 0x5822, 0x4);
cam_i2c_write(axi_iic, device_addr, 0x5823, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5824, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5825, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x5826, 0x6);
cam_i2c_write(axi_iic, device_addr, 0x5827, 0xa);
cam_i2c_write(axi_iic, device_addr, 0x5828, 0x17);
cam_i2c_write(axi_iic, device_addr, 0x5829, 0xf);
cam_i2c_write(axi_iic, device_addr, 0x582a, 0x9);
cam_i2c_write(axi_iic, device_addr, 0x582b, 0x6);
cam_i2c_write(axi_iic, device_addr, 0x582c, 0x5);
cam_i2c_write(axi_iic, device_addr, 0x582d, 0x6);
cam_i2c_write(axi_iic, device_addr, 0x582e, 0xa);
cam_i2c_write(axi_iic, device_addr, 0x582f, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x5830, 0x28);
cam_i2c_write(axi_iic, device_addr, 0x5831, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x5832, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x5833, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x5834, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x5835, 0xf);
cam_i2c_write(axi_iic, device_addr, 0x5836, 0x15);
cam_i2c_write(axi_iic, device_addr, 0x5837, 0x1d);
cam_i2c_write(axi_iic, device_addr, 0x5838, 0x6e);
cam_i2c_write(axi_iic, device_addr, 0x5839, 0x39);
cam_i2c_write(axi_iic, device_addr, 0x583a, 0x27);
cam_i2c_write(axi_iic, device_addr, 0x583b, 0x1f);
cam_i2c_write(axi_iic, device_addr, 0x583c, 0x1e);
cam_i2c_write(axi_iic, device_addr, 0x583d, 0x23);
cam_i2c_write(axi_iic, device_addr, 0x583e, 0x2f);
cam_i2c_write(axi_iic, device_addr, 0x583f, 0x41);
cam_i2c_write(axi_iic, device_addr, 0x5840, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x5841, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x5842, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x5843, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x5844, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x5845, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x5846, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x5847, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x5848, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x5849, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x584a, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x584b, 0xa);
cam_i2c_write(axi_iic, device_addr, 0x584c, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x584d, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x584e, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x584f, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5850, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x5851, 0xa);
cam_i2c_write(axi_iic, device_addr, 0x5852, 0xf);
cam_i2c_write(axi_iic, device_addr, 0x5853, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x5854, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5855, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5856, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5857, 0xa);
cam_i2c_write(axi_iic, device_addr, 0x5858, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x5859, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x585a, 0xf);
cam_i2c_write(axi_iic, device_addr, 0x585b, 0xf);
cam_i2c_write(axi_iic, device_addr, 0x585c, 0xf);
cam_i2c_write(axi_iic, device_addr, 0x585d, 0xa);
cam_i2c_write(axi_iic, device_addr, 0x585e, 0x9);
cam_i2c_write(axi_iic, device_addr, 0x585f, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x5860, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x5861, 0xb);
cam_i2c_write(axi_iic, device_addr, 0x5862, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x5863, 0x7);
cam_i2c_write(axi_iic, device_addr, 0x5864, 0x17);
cam_i2c_write(axi_iic, device_addr, 0x5865, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5866, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x5867, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x5868, 0x16);
cam_i2c_write(axi_iic, device_addr, 0x5869, 0x12);
cam_i2c_write(axi_iic, device_addr, 0x586a, 0x1b);
cam_i2c_write(axi_iic, device_addr, 0x586b, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x586c, 0x16);
cam_i2c_write(axi_iic, device_addr, 0x586d, 0x16);
cam_i2c_write(axi_iic, device_addr, 0x586e, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x586f, 0x1f);
cam_i2c_write(axi_iic, device_addr, 0x5870, 0x1c);
cam_i2c_write(axi_iic, device_addr, 0x5871, 0x16);
cam_i2c_write(axi_iic, device_addr, 0x5872, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5873, 0xf);
cam_i2c_write(axi_iic, device_addr, 0x5874, 0x13);
cam_i2c_write(axi_iic, device_addr, 0x5875, 0x1c);
cam_i2c_write(axi_iic, device_addr, 0x5876, 0x1e);
cam_i2c_write(axi_iic, device_addr, 0x5877, 0x17);
cam_i2c_write(axi_iic, device_addr, 0x5878, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x5879, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x587a, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x587b, 0x1e);
cam_i2c_write(axi_iic, device_addr, 0x587c, 0x1c);
cam_i2c_write(axi_iic, device_addr, 0x587d, 0x1c);
cam_i2c_write(axi_iic, device_addr, 0x587e, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x587f, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x5880, 0x1b);
cam_i2c_write(axi_iic, device_addr, 0x5881, 0x1f);
cam_i2c_write(axi_iic, device_addr, 0x5882, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5883, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x5884, 0x1d);
cam_i2c_write(axi_iic, device_addr, 0x5885, 0x1e);
cam_i2c_write(axi_iic, device_addr, 0x5886, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x5887, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x528a, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x528b, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x528c, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x528d, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x528e, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x528f, 0x50);
cam_i2c_write(axi_iic, device_addr, 0x5290, 0x60);
cam_i2c_write(axi_iic, device_addr, 0x5292, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5293, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5294, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5295, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x5296, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5297, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5298, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5299, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x529a, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529b, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x529c, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529d, 0x28);
cam_i2c_write(axi_iic, device_addr, 0x529e, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529f, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5282, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5680, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5681, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5682, 0x05);
cam_i2c_write(axi_iic, device_addr, 0x5683, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5684, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5685, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5686, 0x03);
cam_i2c_write(axi_iic, device_addr, 0x5687, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x5180, 0xff);
cam_i2c_write(axi_iic, device_addr, 0x5181, 0x52);
cam_i2c_write(axi_iic, device_addr, 0x5182, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x5183, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5184, 0x25);
cam_i2c_write(axi_iic, device_addr, 0x5185, 0x24);
cam_i2c_write(axi_iic, device_addr, 0x5186, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5187, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5188, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5189, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x518a, 0x60);
cam_i2c_write(axi_iic, device_addr, 0x518b, 0xa2);
cam_i2c_write(axi_iic, device_addr, 0x518c, 0x9c);
cam_i2c_write(axi_iic, device_addr, 0x518d, 0x36);
cam_i2c_write(axi_iic, device_addr, 0x518e, 0x34);
cam_i2c_write(axi_iic, device_addr, 0x518f, 0x54);
cam_i2c_write(axi_iic, device_addr, 0x5190, 0x4c);
cam_i2c_write(axi_iic, device_addr, 0x5191, 0xf8);
cam_i2c_write(axi_iic, device_addr, 0x5192, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x5193, 0x70);
cam_i2c_write(axi_iic, device_addr, 0x5194, 0xf0);
cam_i2c_write(axi_iic, device_addr, 0x5195, 0xf0);
cam_i2c_write(axi_iic, device_addr, 0x5196, 0x03);
cam_i2c_write(axi_iic, device_addr, 0x5197, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x5198, 0x05);
cam_i2c_write(axi_iic, device_addr, 0x5199, 0x2f);
cam_i2c_write(axi_iic, device_addr, 0x519a, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x519b, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x519c, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x519d, 0xa0);
cam_i2c_write(axi_iic, device_addr, 0x519e, 0xa0);
cam_i2c_write(axi_iic, device_addr, 0x3a0f, 0x3c);
cam_i2c_write(axi_iic, device_addr, 0x3a10, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x3a1b, 0x3c);
cam_i2c_write(axi_iic, device_addr, 0x3a1e, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x3a11, 0x70);
cam_i2c_write(axi_iic, device_addr, 0x3a1f, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x3800, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x3801, 0x50);
cam_i2c_write(axi_iic, device_addr, 0x3802, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x3803, 0x8);
cam_i2c_write(axi_iic, device_addr, 0x3804, 0x5);
cam_i2c_write(axi_iic, device_addr, 0x3805, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x3806, 0x3);
cam_i2c_write(axi_iic, device_addr, 0x3807, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x3808, 0x3);
cam_i2c_write(axi_iic, device_addr, 0x3809, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x380a, 0x2);
cam_i2c_write(axi_iic, device_addr, 0x380b, 0x58);
cam_i2c_write(axi_iic, device_addr, 0x380c, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x380d, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x380e, 0x3);
cam_i2c_write(axi_iic, device_addr, 0x380f, 0xe8);
cam_i2c_write(axi_iic, device_addr, 0x5001, 0x7f);
cam_i2c_write(axi_iic, device_addr, 0x5680, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5681, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5682, 0x5);
cam_i2c_write(axi_iic, device_addr, 0x5683, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5684, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5685, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5686, 0x3);
cam_i2c_write(axi_iic, device_addr, 0x5687, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x5687, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x3815, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x3503, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3818, 0x81); // No Mirror
cam_i2c_write(axi_iic, device_addr, 0x3621, 0xa7);
cam_i2c_write(axi_iic, device_addr, 0x4740, 0x21);
cam_i2c_write(axi_iic, device_addr, 0x501e, 0x2a);
cam_i2c_write(axi_iic, device_addr, 0x5002, 0x78);
cam_i2c_write(axi_iic, device_addr, 0x501f, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x4300, 0x61);
return(0);
}
# Declare the variable SOURCE_CORDE and enter the value opencv_test.
# Can be overwritten with cmake -D SOURCE_CODE = (source name)
set(SOURCE_CODE cam_dp_ov5642 CACHE NAME "Target object name")
cmake_minimum_required(VERSION 2.8)
project( ${SOURCE_CODE} )
find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( ${SOURCE_CODE} ${SOURCE_CODE}.cpp )
target_link_libraries( ${SOURCE_CODE} ${OpenCV_LIBS} )
// cam_dp_ov5642.cpp (for KR260)
// 2018/12/14 by marsee
//
// This software converts the left and right of the camera image to BMP file.
// -b : bmp file name
// -n : Start File Number
// -h : help
//
// 2018/12/20 : completed.
// I am using the SVGA driver register setting of https://github.com/virajkanwade/rk3188_android_kernel/blob/master/drivers/media/video/ov5642.c
// 2018/12/22 : fixed
// 2018/12/30 : ov5642_inf_axis[0] fixed
// 2019/02/06 : for DisplayPort
// 2023/04/23 : kr260_cam_disp vitis platform
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <string.h>
#define PIXEL_NUM_OF_BYTES 4
#define NUMBER_OF_WRITE_FRAMES 3
#define SVGA_HORIZONTAL_PIXELS 800
#define SVGA_VERTICAL_LINES 600
#define SVGA_ALL_DISP_ADDRESS (SVGA_HORIZONTAL_PIXELS * SVGA_VERTICAL_LINES * PIXEL_NUM_OF_BYTES)
#define SVGA_3_PICTURES (SVGA_ALL_DISP_ADDRESS * NUMBER_OF_WRITE_FRAMES)
#define XGA_HORIZONTAL_PIXELS 1024
#define XGA_VERTICAL_LINES 768
#define XGA_ALL_DISP_ADDRESS (XGA_HORIZONTAL_PIXELS * XGA_VERTICAL_LINES * PIXEL_NUM_OF_BYTES)
#define XGA_3_PICTURES (XGA_ALL_DISP_ADDRESS * NUMBER_OF_WRITE_FRAMES)
#define HD_HORIZONTAL_PIXELS 1920
#define HD_VERTICAL_LINES 1080
#define HD_ALL_DISP_ADDRESS (HD_HORIZONTAL_PIXELS * HD_VERTICAL_LINES * PIXEL_NUM_OF_BYTES)
#define HD_3_PICTURES (HD_ALL_DISP_ADDRESS * NUMBER_OF_WRITE_FRAMES)
int WriteBMPfile(char *bmp_file, volatile unsigned int *frame_buffer, int active_frame, int resolution);
void cam_i2c_init(volatile unsigned *ov5642_axi_iic) {
ov5642_axi_iic[64] = 0x2; // reset tx fifo ,address is 0x100, i2c_control_reg
ov5642_axi_iic[64] = 0x1; // enable i2c
}
void cam_i2x_write_sync(void) {
// unsigned c;
// c = *cam_i2c_rx_fifo;
// while ((c & 0x84) != 0x80)
// c = *cam_i2c_rx_fifo; // No Bus Busy and TX_FIFO_Empty = 1
usleep(1000);
}
void cam_i2c_write(volatile unsigned *ov5642_axi_iic, unsigned int device_addr, unsigned int write_addr, unsigned int write_data){
ov5642_axi_iic[66] = 0x100 | (device_addr & 0xfe); // Slave IIC Write Address, address is 0x108, i2c_tx_fifo
ov5642_axi_iic[66] = (write_addr >> 8) & 0xff; // address upper byte
ov5642_axi_iic[66] = write_addr & 0xff; // address lower byte
ov5642_axi_iic[66] = 0x200 | (write_data & 0xff); // data
cam_i2x_write_sync();
}
int cam_reg_set(volatile unsigned *axi_iic, unsigned int device_addr);
int main(int argc, char *argv[]){
int opt;
int c, help_flag=0;
char bmp_fn[256] = "bmp_file";
char attr[1024];
unsigned long phys_addr;
int file_no = -1;
int fd1, fd2, fd3, fd4, fd5, fd6, fd10, fd11;
volatile unsigned int *ov5642_inf_axis, *axi_iic, *disp_dmar_axis, *vflip_dma_write;
volatile unsigned int *axi_gpio_0, *axi_gpio_1;
volatile unsigned int *frame_buffer;
int active_frame;
int resolution;
int all_disp_addr;
resolution = 1; // XGA
while ((opt=getopt(argc, argv, "b:n:h:r:")) != -1){
switch (opt){
case 'b':
strcpy(bmp_fn, optarg);
break;
case 'n':
file_no = atoi(optarg);
printf("file_no = %d\n", file_no+1);
break;
case 'r':
resolution = atoi(optarg);
break;
case 'h':
help_flag = 1;
break;
}
}
if(resolution == 0){
printf("SVGA\n");
} else if(resolution == 1){
printf("XGA\n");
} else {
printf("HD\n");
}
if (help_flag == 1){ // help
printf("Usage : cam_capture [-b <bmp file name>] [-n <Start File Number>] [-h]\n");
printf(" -r [0|1|2](0:SVGA, 1:XGA, 2:HD)\n");
exit(0);
}
// all_disp_addr
switch(resolution){
case 0 :
all_disp_addr = SVGA_ALL_DISP_ADDRESS;
break;
case 1 :
all_disp_addr = XGA_ALL_DISP_ADDRESS;
break;
default : // 2
all_disp_addr = HD_ALL_DISP_ADDRESS;
break;
}
// ov5642_inf_axis-uio IP
fd1 = open("/dev/uio6", O_RDWR|O_SYNC); // Read/Write, The chache is disable
if (fd1 < 1){
fprintf(stderr, "/dev/uio6 (ov5642_inf_axis) open error\n");
exit(-1);
}
ov5642_inf_axis = (volatile unsigned *)mmap(NULL, 0x1000, PROT_READ|PROT_WRITE, MAP_SHARED, fd1, 0);
if (!ov5642_inf_axis){
fprintf(stderr, "ov5642_inf_axis mmap error\n");
exit(-1);
}
// axi_iic-uio IP
fd2 = open("/dev/uio4", O_RDWR|O_SYNC); // Read/Write, The chache is disable
if (fd2 < 1){
fprintf(stderr, "/dev/uio4 (axi_iic) open error\n");
exit(-1);
}
axi_iic = (volatile unsigned int *)mmap(NULL, 0x1000, PROT_READ|PROT_WRITE, MAP_SHARED, fd2, 0);
if (!axi_iic){
fprintf(stderr, "axi_iic mmap error\n");
exit(-1);
}
// disp_dmar_axis-uio IP
fd3 = open("/dev/uio9", O_RDWR|O_SYNC); // Read/Write, The chache is disable
if (fd3 < 1){
fprintf(stderr, "/dev/uio9 (disp_dmar_axis) open error\n");
exit(-1);
}
disp_dmar_axis = (volatile unsigned int *)mmap(NULL, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED, fd3, 0);
if (!disp_dmar_axis){
fprintf(stderr, "disp_dmar_axis mmap error\n");
exit(-1);
}
// vflip_dma_write-uio IP
fd4 = open("/dev/uio7", O_RDWR|O_SYNC); // Read/Write, The chache is disable
if (fd4 < 1){
fprintf(stderr, "/dev/uio7 (vflip_dma_write) open error\n");
exit(-1);
}
vflip_dma_write = (volatile unsigned int *)mmap(NULL, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED, fd4, 0);
if (!vflip_dma_write){
fprintf(stderr, "vflip_dma_write mmap error\n");
exit(-1);
}
// axi_gpio_0-uio IP (init_done output)
fd5 = open("/dev/uio8", O_RDWR|O_SYNC); // Read/Write, The chache is disable
if (fd5 < 1){
fprintf(stderr, "/dev/uio8 (axi_gpio_0) open error\n");
exit(-1);
}
axi_gpio_0 = (volatile unsigned int *)mmap(NULL, 0x1000, PROT_READ|PROT_WRITE, MAP_SHARED, fd5, 0);
if (!axi_gpio_0){
fprintf(stderr, "axi_gpio_0 mmap error\n");
exit(-1);
}
// axi_gpio_1-uio IP (active_frame input)
fd6 = open("/dev/uio6", O_RDWR|O_SYNC); // Read/Write, The chache is disable
if (fd6 < 1){
fprintf(stderr, "/dev/uio6 (axi_gpio_1) open error\n");
exit(-1);
}
axi_gpio_1 = (volatile unsigned int *)mmap(NULL, 0x1000, PROT_READ|PROT_WRITE, MAP_SHARED, fd6, 0);
if (!axi_gpio_1){
fprintf(stderr, "axi_gpio_1 mmap error\n");
exit(-1);
}
// udmabuf4
fd10 = open("/dev/udmabuf4", O_RDWR | O_SYNC); // frame_buffer, The chache is disabled.
if (fd10 == -1){
fprintf(stderr, "/dev/udmabuf4 open error\n");
exit(-1);
}
frame_buffer = (volatile unsigned int *)mmap(NULL, all_disp_addr*NUMBER_OF_WRITE_FRAMES, PROT_READ|PROT_WRITE, MAP_SHARED, fd10, 0);
if (!frame_buffer){
fprintf(stderr, "frame_buffer4 mmap error\n");
exit(-1);
}
// phys_addr of udmabuf4
fd11 = open("/sys/class/u-dma-buf/udmabuf4/phys_addr", O_RDONLY);
if (fd11 == -1){
fprintf(stderr, "/sys/class/u-dma-buf/udmabuf4/phys_addr open error\n");
exit(-1);
}
read(fd11, attr, 1024);
sscanf(attr, "%lx", &phys_addr);
close(fd11);
printf("phys_addr = %x\n", (int)phys_addr);
// vflip_dma_write start
vflip_dma_write[6] = phys_addr; // fb0
vflip_dma_write[8] = phys_addr+all_disp_addr; // fb1
vflip_dma_write[10] = phys_addr+2*all_disp_addr; // fb2
vflip_dma_write[12] = resolution;
vflip_dma_write[0] = 0x1; // start
vflip_dma_write[0] = 0x80; // EnableAutoRestart
// CMOS Camera initialize, ov5642
cam_i2c_init(axi_iic);
cam_reg_set(axi_iic, 0x78); // OV5642 register set
ov5642_inf_axis[0] = phys_addr; // ov5642 AXI4-Stream Start
ov5642_inf_axis[1] = 0;
// disp_dmar_axis start
disp_dmar_axis[4] = phys_addr; // fb0
disp_dmar_axis[6] = phys_addr+all_disp_addr; // fb1
disp_dmar_axis[8] = phys_addr+2*all_disp_addr; // fb2
disp_dmar_axis[10] = resolution;
axi_gpio_0[0] = 1; // disp_dmar_axis start(init_done = 1)
char bmp_file[256];
// All 0 set
int all_disp_frame_index = all_disp_addr/PIXEL_NUM_OF_BYTES*NUMBER_OF_WRITE_FRAMES;
for (int i=0; i<all_disp_frame_index; i++){
frame_buffer[i] = 0x0;
}
// w - writed the left and right eye's bmp files. q - exit.
c = getc(stdin);
while(c != 'q'){
switch ((char)c) {
case 'w' : // w - writed a bmp files.
// writed the frame buffer
file_no++;
sprintf(bmp_file, "%s%d.bmp", bmp_fn, file_no);
active_frame = (int)(axi_gpio_1[0] & 0x3); // Data signal of active_frame_V
WriteBMPfile(bmp_file, frame_buffer, active_frame, resolution);
printf("file No. = %d\n", file_no);
break;
case 'e' : // e - writed a same bmp files.
// writed the frame buffer
if (file_no == -1)
file_no = 0;
sprintf(bmp_file, "%s%d.bmp", bmp_fn, file_no);
active_frame = (int)(axi_gpio_1[0] & 0x3); // Data signal of active_frame_V
WriteBMPfile(bmp_file, frame_buffer, active_frame, resolution);
printf("file No. = %d\n", file_no);
break;
}
c = getc(stdin);
}
munmap((void *)ov5642_inf_axis, 0x1000);
munmap((void *)axi_iic, 0x1000);
munmap((void *)disp_dmar_axis, 0x10000);
munmap((void *)vflip_dma_write, 0x10000);
munmap((void *)axi_gpio_0, 0x1000);
munmap((void *)axi_gpio_1, 0x1000);
munmap((void *)frame_buffer, all_disp_addr*3);
close(fd1);
close(fd2);
close(fd3);
close(fd4);
close(fd5);
close(fd6);
close(fd10);
return(0);
}
int WriteBMPfile(char *bmp_file, volatile unsigned int *frame_buffer, int active_frame, int resolution){
int read_frame;
int img_width, img_height;
if (active_frame == 0)
read_frame = 2;
else if (active_frame == 1)
read_frame = 0;
else // active_frame == 2
read_frame = 1;
switch(resolution){
case 0 :
img_width = SVGA_HORIZONTAL_PIXELS;
img_height = SVGA_VERTICAL_LINES;
break;
case 1 :
img_width = XGA_HORIZONTAL_PIXELS;
img_height = XGA_VERTICAL_LINES;
break;
default : // case 2 :
img_width = HD_HORIZONTAL_PIXELS;
img_height = HD_VERTICAL_LINES;
break;
}
int offset_addr = read_frame * img_width * img_height;
cv::Mat img(img_height, img_width, CV_8UC3);
cv::Mat_<cv::Vec3b> dst_vec3b = cv::Mat_<cv::Vec3b>(img);
for(int y=0; y<img.rows; y++){
for(int x=0; x<img.cols; x++){
cv::Vec3b pixel;
int rgb = frame_buffer[offset_addr+y*img.cols+x];
pixel[0] = (rgb & 0xff); // blue
pixel[1] = (rgb & 0xff00) >> 8; // green
pixel[2] = (rgb & 0xff0000) >> 16; // red
dst_vec3b(y,x) = pixel;
}
}
cv::imwrite(bmp_file, img);
return(0);
}
int cam_reg_set(volatile unsigned *axi_iic, unsigned int device_addr){
cam_i2c_write(axi_iic, device_addr, 0x3103, 0x93);
cam_i2c_write(axi_iic, device_addr, 0x3008, 0x82);
cam_i2c_write(axi_iic, device_addr, 0x3017, 0x7f);
cam_i2c_write(axi_iic, device_addr, 0x3018, 0xfc);
cam_i2c_write(axi_iic, device_addr, 0x3810, 0xc2);
cam_i2c_write(axi_iic, device_addr, 0x3615, 0xf0);
cam_i2c_write(axi_iic, device_addr, 0x3000, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3001, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3002, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3003, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3000, 0xf8);
cam_i2c_write(axi_iic, device_addr, 0x3001, 0x48);
cam_i2c_write(axi_iic, device_addr, 0x3002, 0x5c);
cam_i2c_write(axi_iic, device_addr, 0x3003, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x3004, 0x07);
cam_i2c_write(axi_iic, device_addr, 0x3005, 0xb7);
cam_i2c_write(axi_iic, device_addr, 0x3006, 0x43);
cam_i2c_write(axi_iic, device_addr, 0x3007, 0x37);
cam_i2c_write(axi_iic, device_addr, 0x3011, 0x08); // 0x08 - 15fps, 0x10 - 30fps
cam_i2c_write(axi_iic, device_addr, 0x3010, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x460c, 0x22);
cam_i2c_write(axi_iic, device_addr, 0x3815, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x370d, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x370c, 0xa0);
cam_i2c_write(axi_iic, device_addr, 0x3602, 0xfc);
cam_i2c_write(axi_iic, device_addr, 0x3612, 0xff);
cam_i2c_write(axi_iic, device_addr, 0x3634, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x3613, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3605, 0x7c);
cam_i2c_write(axi_iic, device_addr, 0x3621, 0x09);
cam_i2c_write(axi_iic, device_addr, 0x3622, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3604, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x3603, 0xa7);
cam_i2c_write(axi_iic, device_addr, 0x3603, 0x27);
cam_i2c_write(axi_iic, device_addr, 0x4000, 0x21);
cam_i2c_write(axi_iic, device_addr, 0x401d, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x3600, 0x54);
cam_i2c_write(axi_iic, device_addr, 0x3605, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x3606, 0x3f);
cam_i2c_write(axi_iic, device_addr, 0x3c01, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5000, 0x4f);
cam_i2c_write(axi_iic, device_addr, 0x5020, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x5181, 0x79);
cam_i2c_write(axi_iic, device_addr, 0x5182, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5185, 0x22);
cam_i2c_write(axi_iic, device_addr, 0x5197, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x5001, 0xff);
cam_i2c_write(axi_iic, device_addr, 0x5500, 0x0a);
cam_i2c_write(axi_iic, device_addr, 0x5504, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5505, 0x7f);
cam_i2c_write(axi_iic, device_addr, 0x5080, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x300e, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x4610, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x471d, 0x05);
cam_i2c_write(axi_iic, device_addr, 0x4708, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x3710, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x3632, 0x41);
cam_i2c_write(axi_iic, device_addr, 0x3702, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x3620, 0x37);
cam_i2c_write(axi_iic, device_addr, 0x3631, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x3808, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x3809, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x380a, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x380b, 0xe0);
cam_i2c_write(axi_iic, device_addr, 0x380e, 0x07);
cam_i2c_write(axi_iic, device_addr, 0x380f, 0xd0);
cam_i2c_write(axi_iic, device_addr, 0x501f, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5000, 0x4f);
cam_i2c_write(axi_iic, device_addr, 0x4300, 0x61); // RGB565
cam_i2c_write(axi_iic, device_addr, 0x3503, 0x07);
cam_i2c_write(axi_iic, device_addr, 0x3501, 0x73);
cam_i2c_write(axi_iic, device_addr, 0x3502, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x350b, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3503, 0x07);
cam_i2c_write(axi_iic, device_addr, 0x3824, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x3501, 0x1e);
cam_i2c_write(axi_iic, device_addr, 0x3502, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x350b, 0x7f);
cam_i2c_write(axi_iic, device_addr, 0x380c, 0x0c);
cam_i2c_write(axi_iic, device_addr, 0x380d, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x380e, 0x03);
cam_i2c_write(axi_iic, device_addr, 0x380f, 0xe8);
cam_i2c_write(axi_iic, device_addr, 0x3a0d, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x3a0e, 0x03);
cam_i2c_write(axi_iic, device_addr, 0x3818, 0xc1);
cam_i2c_write(axi_iic, device_addr, 0x3705, 0xdb);
cam_i2c_write(axi_iic, device_addr, 0x370a, 0x81);
cam_i2c_write(axi_iic, device_addr, 0x3801, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x3621, 0xc7);
cam_i2c_write(axi_iic, device_addr, 0x3801, 0x50);
cam_i2c_write(axi_iic, device_addr, 0x3803, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x3827, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x3810, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x3804, 0x05);
cam_i2c_write(axi_iic, device_addr, 0x3805, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5682, 0x05);
cam_i2c_write(axi_iic, device_addr, 0x5683, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3806, 0x03);
cam_i2c_write(axi_iic, device_addr, 0x3807, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x5686, 0x03);
cam_i2c_write(axi_iic, device_addr, 0x5687, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x3a00, 0x78);
cam_i2c_write(axi_iic, device_addr, 0x3a1a, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x3a13, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x3a18, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3a19, 0x7c);
cam_i2c_write(axi_iic, device_addr, 0x3a08, 0x12);
cam_i2c_write(axi_iic, device_addr, 0x3a09, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x3a0a, 0x0f);
cam_i2c_write(axi_iic, device_addr, 0x3a0b, 0xa0);
cam_i2c_write(axi_iic, device_addr, 0x3004, 0xff);
cam_i2c_write(axi_iic, device_addr, 0x350c, 0x07);
cam_i2c_write(axi_iic, device_addr, 0x350d, 0xd0);
cam_i2c_write(axi_iic, device_addr, 0x3500, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3501, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3502, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x350a, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x350b, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3503, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x528a, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x528b, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x528c, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x528d, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x528e, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x528f, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5290, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5292, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5293, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5294, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5295, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5296, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5297, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5298, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5299, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x529a, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529b, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x529c, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529d, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x529e, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529f, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x3a0f, 0x3c);
cam_i2c_write(axi_iic, device_addr, 0x3a10, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x3a1b, 0x3c);
cam_i2c_write(axi_iic, device_addr, 0x3a1e, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x3a11, 0x70);
cam_i2c_write(axi_iic, device_addr, 0x3a1f, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x3030, 0x0b);
cam_i2c_write(axi_iic, device_addr, 0x3a02, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3a03, 0x7d);
cam_i2c_write(axi_iic, device_addr, 0x3a04, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3a14, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3a15, 0x7d);
cam_i2c_write(axi_iic, device_addr, 0x3a16, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3a00, 0x78);
cam_i2c_write(axi_iic, device_addr, 0x3a08, 0x09);
cam_i2c_write(axi_iic, device_addr, 0x3a09, 0x60);
cam_i2c_write(axi_iic, device_addr, 0x3a0a, 0x07);
cam_i2c_write(axi_iic, device_addr, 0x3a0b, 0xd0);
cam_i2c_write(axi_iic, device_addr, 0x3a0d, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x3a0e, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x5193, 0x70);
cam_i2c_write(axi_iic, device_addr, 0x3620, 0x57);
cam_i2c_write(axi_iic, device_addr, 0x3703, 0x98);
cam_i2c_write(axi_iic, device_addr, 0x3704, 0x1c);
cam_i2c_write(axi_iic, device_addr, 0x589b, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x589a, 0xc5);
cam_i2c_write(axi_iic, device_addr, 0x528a, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x528b, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x528c, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x528d, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x528e, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x528f, 0x28);
cam_i2c_write(axi_iic, device_addr, 0x5290, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5292, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5293, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5294, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5295, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5296, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5297, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5298, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5299, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x529a, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529b, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x529c, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529d, 0x28);
cam_i2c_write(axi_iic, device_addr, 0x529e, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529f, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5282, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5300, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5301, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5302, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5303, 0x7c);
cam_i2c_write(axi_iic, device_addr, 0x530c, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x530d, 0x0c);
cam_i2c_write(axi_iic, device_addr, 0x530e, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x530f, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5310, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5311, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5308, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5309, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x5304, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5305, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5306, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5307, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5314, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5315, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5319, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5316, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5317, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5318, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5380, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x5381, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5382, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5383, 0x4e);
cam_i2c_write(axi_iic, device_addr, 0x5384, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5385, 0x0f);
cam_i2c_write(axi_iic, device_addr, 0x5386, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5387, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5388, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x5389, 0x15);
cam_i2c_write(axi_iic, device_addr, 0x538a, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538b, 0x31);
cam_i2c_write(axi_iic, device_addr, 0x538c, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538d, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538e, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538f, 0x0f);
cam_i2c_write(axi_iic, device_addr, 0x5390, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5391, 0xab);
cam_i2c_write(axi_iic, device_addr, 0x5392, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5393, 0xa2);
cam_i2c_write(axi_iic, device_addr, 0x5394, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5480, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5481, 0x21);
cam_i2c_write(axi_iic, device_addr, 0x5482, 0x36);
cam_i2c_write(axi_iic, device_addr, 0x5483, 0x57);
cam_i2c_write(axi_iic, device_addr, 0x5484, 0x65);
cam_i2c_write(axi_iic, device_addr, 0x5485, 0x71);
cam_i2c_write(axi_iic, device_addr, 0x5486, 0x7d);
cam_i2c_write(axi_iic, device_addr, 0x5487, 0x87);
cam_i2c_write(axi_iic, device_addr, 0x5488, 0x91);
cam_i2c_write(axi_iic, device_addr, 0x5489, 0x9a);
cam_i2c_write(axi_iic, device_addr, 0x548a, 0xaa);
cam_i2c_write(axi_iic, device_addr, 0x548b, 0xb8);
cam_i2c_write(axi_iic, device_addr, 0x548c, 0xcd);
cam_i2c_write(axi_iic, device_addr, 0x548d, 0xdd);
cam_i2c_write(axi_iic, device_addr, 0x548e, 0xea);
cam_i2c_write(axi_iic, device_addr, 0x548f, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5490, 0x05);
cam_i2c_write(axi_iic, device_addr, 0x5491, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5492, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x5493, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5494, 0x03);
cam_i2c_write(axi_iic, device_addr, 0x5495, 0x60);
cam_i2c_write(axi_iic, device_addr, 0x5496, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5497, 0xb8);
cam_i2c_write(axi_iic, device_addr, 0x5498, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5499, 0x86);
cam_i2c_write(axi_iic, device_addr, 0x549a, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x549b, 0x5b);
cam_i2c_write(axi_iic, device_addr, 0x549c, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x549d, 0x3b);
cam_i2c_write(axi_iic, device_addr, 0x549e, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x549f, 0x1c);
cam_i2c_write(axi_iic, device_addr, 0x54a0, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x54a1, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x54a2, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54a3, 0xed);
cam_i2c_write(axi_iic, device_addr, 0x54a4, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54a5, 0xc5);
cam_i2c_write(axi_iic, device_addr, 0x54a6, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54a7, 0xa5);
cam_i2c_write(axi_iic, device_addr, 0x54a8, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54a9, 0x6c);
cam_i2c_write(axi_iic, device_addr, 0x54aa, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54ab, 0x41);
cam_i2c_write(axi_iic, device_addr, 0x54ac, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54ad, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x54ae, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x54af, 0x16);
cam_i2c_write(axi_iic, device_addr, 0x3406, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5192, 0x04); // 0x04
cam_i2c_write(axi_iic, device_addr, 0x5191, 0xf8); // 0xf8
cam_i2c_write(axi_iic, device_addr, 0x5193, 0x70);
cam_i2c_write(axi_iic, device_addr, 0x5194, 0xf0);
cam_i2c_write(axi_iic, device_addr, 0x5195, 0xf0);
cam_i2c_write(axi_iic, device_addr, 0x518d, 0x3d);
cam_i2c_write(axi_iic, device_addr, 0x518f, 0x54);
cam_i2c_write(axi_iic, device_addr, 0x518e, 0x3d);
cam_i2c_write(axi_iic, device_addr, 0x5190, 0x54);
cam_i2c_write(axi_iic, device_addr, 0x518b, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x518c, 0xbd);
cam_i2c_write(axi_iic, device_addr, 0x5187, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x5188, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x5189, 0x6e);
cam_i2c_write(axi_iic, device_addr, 0x518a, 0x68);
cam_i2c_write(axi_iic, device_addr, 0x5186, 0x1c);
cam_i2c_write(axi_iic, device_addr, 0x5181, 0x50);
cam_i2c_write(axi_iic, device_addr, 0x5184, 0x25);
cam_i2c_write(axi_iic, device_addr, 0x5182, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x5183, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5184, 0x25);
cam_i2c_write(axi_iic, device_addr, 0x5185, 0x24);
cam_i2c_write(axi_iic, device_addr, 0x5025, 0x82);
cam_i2c_write(axi_iic, device_addr, 0x5583, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x5584, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x5580, 0x02); // 0x02
cam_i2c_write(axi_iic, device_addr, 0x3633, 0x07);
cam_i2c_write(axi_iic, device_addr, 0x3702, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x3703, 0xb2);
cam_i2c_write(axi_iic, device_addr, 0x3704, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x370b, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x370d, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x3620, 0x52);
cam_i2c_write(axi_iic, device_addr, 0x3c00, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x5001, 0xFF);
cam_i2c_write(axi_iic, device_addr, 0x5282, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5300, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5301, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5302, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5303, 0x7c);
cam_i2c_write(axi_iic, device_addr, 0x530c, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x530d, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x530e, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x530f, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5310, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5311, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5308, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5309, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x5304, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5305, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5306, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5307, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5314, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5315, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5319, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5316, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5317, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5318, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5500, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5502, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5503, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x5504, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5505, 0x7f);
cam_i2c_write(axi_iic, device_addr, 0x5025, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5300, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5301, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5302, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5303, 0x7c);
cam_i2c_write(axi_iic, device_addr, 0x530c, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x530d, 0x0c);
cam_i2c_write(axi_iic, device_addr, 0x530e, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x530f, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5310, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5311, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5308, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5309, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x5304, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5305, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5306, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5307, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5314, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5315, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x5319, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5316, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5317, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5318, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5380, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x5381, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5382, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5383, 0x1f);
cam_i2c_write(axi_iic, device_addr, 0x5384, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5385, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x5386, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5387, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5388, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5389, 0xE1);
cam_i2c_write(axi_iic, device_addr, 0x538A, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538B, 0x2B);
cam_i2c_write(axi_iic, device_addr, 0x538C, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538D, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538E, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x538F, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5390, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5391, 0xB3);
cam_i2c_write(axi_iic, device_addr, 0x5392, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5393, 0xA6);
cam_i2c_write(axi_iic, device_addr, 0x5394, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5480, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x5481, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x5482, 0x2a);
cam_i2c_write(axi_iic, device_addr, 0x5483, 0x49);
cam_i2c_write(axi_iic, device_addr, 0x5484, 0x56);
cam_i2c_write(axi_iic, device_addr, 0x5485, 0x62);
cam_i2c_write(axi_iic, device_addr, 0x5486, 0x6c);
cam_i2c_write(axi_iic, device_addr, 0x5487, 0x76);
cam_i2c_write(axi_iic, device_addr, 0x5488, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x5489, 0x88);
cam_i2c_write(axi_iic, device_addr, 0x548a, 0x96);
cam_i2c_write(axi_iic, device_addr, 0x548b, 0xa2);
cam_i2c_write(axi_iic, device_addr, 0x548c, 0xb8);
cam_i2c_write(axi_iic, device_addr, 0x548d, 0xcc);
cam_i2c_write(axi_iic, device_addr, 0x548e, 0xe0);
cam_i2c_write(axi_iic, device_addr, 0x548f, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5490, 0x3);
cam_i2c_write(axi_iic, device_addr, 0x5491, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x5492, 0x3);
cam_i2c_write(axi_iic, device_addr, 0x5493, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5494, 0x2);
cam_i2c_write(axi_iic, device_addr, 0x5495, 0xa0);
cam_i2c_write(axi_iic, device_addr, 0x5496, 0x2);
cam_i2c_write(axi_iic, device_addr, 0x5497, 0x48);
cam_i2c_write(axi_iic, device_addr, 0x5498, 0x2);
cam_i2c_write(axi_iic, device_addr, 0x5499, 0x26);
cam_i2c_write(axi_iic, device_addr, 0x549a, 0x2);
cam_i2c_write(axi_iic, device_addr, 0x549b, 0xb);
cam_i2c_write(axi_iic, device_addr, 0x549c, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x549d, 0xee);
cam_i2c_write(axi_iic, device_addr, 0x549e, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x549f, 0xd8);
cam_i2c_write(axi_iic, device_addr, 0x54a0, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54a1, 0xc7);
cam_i2c_write(axi_iic, device_addr, 0x54a2, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54a3, 0xb3);
cam_i2c_write(axi_iic, device_addr, 0x54a4, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54a5, 0x90);
cam_i2c_write(axi_iic, device_addr, 0x54a6, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54a7, 0x62);
cam_i2c_write(axi_iic, device_addr, 0x54a8, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54a9, 0x27);
cam_i2c_write(axi_iic, device_addr, 0x54aa, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54ab, 0x09);
cam_i2c_write(axi_iic, device_addr, 0x54ac, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x54ad, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x54ae, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x54af, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x54b0, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54b1, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x54b2, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54b3, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x54b4, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x54b5, 0xf0);
cam_i2c_write(axi_iic, device_addr, 0x54b6, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x54b7, 0xdf);
cam_i2c_write(axi_iic, device_addr, 0x5583, 0x5d);
cam_i2c_write(axi_iic, device_addr, 0x5584, 0x5d);
cam_i2c_write(axi_iic, device_addr, 0x5580, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x5587, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5588, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x558a, 0x09);
cam_i2c_write(axi_iic, device_addr, 0x5589, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5000, 0xcf);
cam_i2c_write(axi_iic, device_addr, 0x5800, 0x48);
cam_i2c_write(axi_iic, device_addr, 0x5801, 0x31);
cam_i2c_write(axi_iic, device_addr, 0x5802, 0x21);
cam_i2c_write(axi_iic, device_addr, 0x5803, 0x1b);
cam_i2c_write(axi_iic, device_addr, 0x5804, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x5805, 0x1e);
cam_i2c_write(axi_iic, device_addr, 0x5806, 0x29);
cam_i2c_write(axi_iic, device_addr, 0x5807, 0x38);
cam_i2c_write(axi_iic, device_addr, 0x5808, 0x26);
cam_i2c_write(axi_iic, device_addr, 0x5809, 0x17);
cam_i2c_write(axi_iic, device_addr, 0x580a, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x580b, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x580c, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x580d, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x580e, 0x13);
cam_i2c_write(axi_iic, device_addr, 0x580f, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x5810, 0x15);
cam_i2c_write(axi_iic, device_addr, 0x5811, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x5812, 0x8);
cam_i2c_write(axi_iic, device_addr, 0x5813, 0x5);
cam_i2c_write(axi_iic, device_addr, 0x5814, 0x4);
cam_i2c_write(axi_iic, device_addr, 0x5815, 0x5);
cam_i2c_write(axi_iic, device_addr, 0x5816, 0x9);
cam_i2c_write(axi_iic, device_addr, 0x5817, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x5818, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x5819, 0xa);
cam_i2c_write(axi_iic, device_addr, 0x581a, 0x4);
cam_i2c_write(axi_iic, device_addr, 0x581b, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x581c, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x581d, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x581e, 0x6);
cam_i2c_write(axi_iic, device_addr, 0x581f, 0x9);
cam_i2c_write(axi_iic, device_addr, 0x5820, 0x12);
cam_i2c_write(axi_iic, device_addr, 0x5821, 0xb);
cam_i2c_write(axi_iic, device_addr, 0x5822, 0x4);
cam_i2c_write(axi_iic, device_addr, 0x5823, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5824, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5825, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x5826, 0x6);
cam_i2c_write(axi_iic, device_addr, 0x5827, 0xa);
cam_i2c_write(axi_iic, device_addr, 0x5828, 0x17);
cam_i2c_write(axi_iic, device_addr, 0x5829, 0xf);
cam_i2c_write(axi_iic, device_addr, 0x582a, 0x9);
cam_i2c_write(axi_iic, device_addr, 0x582b, 0x6);
cam_i2c_write(axi_iic, device_addr, 0x582c, 0x5);
cam_i2c_write(axi_iic, device_addr, 0x582d, 0x6);
cam_i2c_write(axi_iic, device_addr, 0x582e, 0xa);
cam_i2c_write(axi_iic, device_addr, 0x582f, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x5830, 0x28);
cam_i2c_write(axi_iic, device_addr, 0x5831, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x5832, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x5833, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x5834, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x5835, 0xf);
cam_i2c_write(axi_iic, device_addr, 0x5836, 0x15);
cam_i2c_write(axi_iic, device_addr, 0x5837, 0x1d);
cam_i2c_write(axi_iic, device_addr, 0x5838, 0x6e);
cam_i2c_write(axi_iic, device_addr, 0x5839, 0x39);
cam_i2c_write(axi_iic, device_addr, 0x583a, 0x27);
cam_i2c_write(axi_iic, device_addr, 0x583b, 0x1f);
cam_i2c_write(axi_iic, device_addr, 0x583c, 0x1e);
cam_i2c_write(axi_iic, device_addr, 0x583d, 0x23);
cam_i2c_write(axi_iic, device_addr, 0x583e, 0x2f);
cam_i2c_write(axi_iic, device_addr, 0x583f, 0x41);
cam_i2c_write(axi_iic, device_addr, 0x5840, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x5841, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x5842, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x5843, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x5844, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x5845, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x5846, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x5847, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x5848, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x5849, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x584a, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x584b, 0xa);
cam_i2c_write(axi_iic, device_addr, 0x584c, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x584d, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x584e, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x584f, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5850, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x5851, 0xa);
cam_i2c_write(axi_iic, device_addr, 0x5852, 0xf);
cam_i2c_write(axi_iic, device_addr, 0x5853, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x5854, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5855, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5856, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5857, 0xa);
cam_i2c_write(axi_iic, device_addr, 0x5858, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x5859, 0xe);
cam_i2c_write(axi_iic, device_addr, 0x585a, 0xf);
cam_i2c_write(axi_iic, device_addr, 0x585b, 0xf);
cam_i2c_write(axi_iic, device_addr, 0x585c, 0xf);
cam_i2c_write(axi_iic, device_addr, 0x585d, 0xa);
cam_i2c_write(axi_iic, device_addr, 0x585e, 0x9);
cam_i2c_write(axi_iic, device_addr, 0x585f, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x5860, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x5861, 0xb);
cam_i2c_write(axi_iic, device_addr, 0x5862, 0xd);
cam_i2c_write(axi_iic, device_addr, 0x5863, 0x7);
cam_i2c_write(axi_iic, device_addr, 0x5864, 0x17);
cam_i2c_write(axi_iic, device_addr, 0x5865, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5866, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x5867, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x5868, 0x16);
cam_i2c_write(axi_iic, device_addr, 0x5869, 0x12);
cam_i2c_write(axi_iic, device_addr, 0x586a, 0x1b);
cam_i2c_write(axi_iic, device_addr, 0x586b, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x586c, 0x16);
cam_i2c_write(axi_iic, device_addr, 0x586d, 0x16);
cam_i2c_write(axi_iic, device_addr, 0x586e, 0x18);
cam_i2c_write(axi_iic, device_addr, 0x586f, 0x1f);
cam_i2c_write(axi_iic, device_addr, 0x5870, 0x1c);
cam_i2c_write(axi_iic, device_addr, 0x5871, 0x16);
cam_i2c_write(axi_iic, device_addr, 0x5872, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x5873, 0xf);
cam_i2c_write(axi_iic, device_addr, 0x5874, 0x13);
cam_i2c_write(axi_iic, device_addr, 0x5875, 0x1c);
cam_i2c_write(axi_iic, device_addr, 0x5876, 0x1e);
cam_i2c_write(axi_iic, device_addr, 0x5877, 0x17);
cam_i2c_write(axi_iic, device_addr, 0x5878, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x5879, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x587a, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x587b, 0x1e);
cam_i2c_write(axi_iic, device_addr, 0x587c, 0x1c);
cam_i2c_write(axi_iic, device_addr, 0x587d, 0x1c);
cam_i2c_write(axi_iic, device_addr, 0x587e, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x587f, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x5880, 0x1b);
cam_i2c_write(axi_iic, device_addr, 0x5881, 0x1f);
cam_i2c_write(axi_iic, device_addr, 0x5882, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5883, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x5884, 0x1d);
cam_i2c_write(axi_iic, device_addr, 0x5885, 0x1e);
cam_i2c_write(axi_iic, device_addr, 0x5886, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x5887, 0x1a);
cam_i2c_write(axi_iic, device_addr, 0x528a, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x528b, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x528c, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x528d, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x528e, 0x40);
cam_i2c_write(axi_iic, device_addr, 0x528f, 0x50);
cam_i2c_write(axi_iic, device_addr, 0x5290, 0x60);
cam_i2c_write(axi_iic, device_addr, 0x5292, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5293, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x5294, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5295, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x5296, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5297, 0x08);
cam_i2c_write(axi_iic, device_addr, 0x5298, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5299, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x529a, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529b, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x529c, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529d, 0x28);
cam_i2c_write(axi_iic, device_addr, 0x529e, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x529f, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x5282, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5680, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5681, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5682, 0x05);
cam_i2c_write(axi_iic, device_addr, 0x5683, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5684, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5685, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x5686, 0x03);
cam_i2c_write(axi_iic, device_addr, 0x5687, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x5180, 0xff);
cam_i2c_write(axi_iic, device_addr, 0x5181, 0x52);
cam_i2c_write(axi_iic, device_addr, 0x5182, 0x11);
cam_i2c_write(axi_iic, device_addr, 0x5183, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5184, 0x25);
cam_i2c_write(axi_iic, device_addr, 0x5185, 0x24);
cam_i2c_write(axi_iic, device_addr, 0x5186, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5187, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5188, 0x14);
cam_i2c_write(axi_iic, device_addr, 0x5189, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x518a, 0x60);
cam_i2c_write(axi_iic, device_addr, 0x518b, 0xa2);
cam_i2c_write(axi_iic, device_addr, 0x518c, 0x9c);
cam_i2c_write(axi_iic, device_addr, 0x518d, 0x36);
cam_i2c_write(axi_iic, device_addr, 0x518e, 0x34);
cam_i2c_write(axi_iic, device_addr, 0x518f, 0x54);
cam_i2c_write(axi_iic, device_addr, 0x5190, 0x4c);
cam_i2c_write(axi_iic, device_addr, 0x5191, 0xf8);
cam_i2c_write(axi_iic, device_addr, 0x5192, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x5193, 0x70);
cam_i2c_write(axi_iic, device_addr, 0x5194, 0xf0);
cam_i2c_write(axi_iic, device_addr, 0x5195, 0xf0);
cam_i2c_write(axi_iic, device_addr, 0x5196, 0x03);
cam_i2c_write(axi_iic, device_addr, 0x5197, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x5198, 0x05);
cam_i2c_write(axi_iic, device_addr, 0x5199, 0x2f);
cam_i2c_write(axi_iic, device_addr, 0x519a, 0x04);
cam_i2c_write(axi_iic, device_addr, 0x519b, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x519c, 0x06);
cam_i2c_write(axi_iic, device_addr, 0x519d, 0xa0);
cam_i2c_write(axi_iic, device_addr, 0x519e, 0xa0);
cam_i2c_write(axi_iic, device_addr, 0x3a0f, 0x3c);
cam_i2c_write(axi_iic, device_addr, 0x3a10, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x3a1b, 0x3c);
cam_i2c_write(axi_iic, device_addr, 0x3a1e, 0x30);
cam_i2c_write(axi_iic, device_addr, 0x3a11, 0x70);
cam_i2c_write(axi_iic, device_addr, 0x3a1f, 0x10);
cam_i2c_write(axi_iic, device_addr, 0x3800, 0x1);
cam_i2c_write(axi_iic, device_addr, 0x3801, 0x50);
cam_i2c_write(axi_iic, device_addr, 0x3802, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x3803, 0x8);
cam_i2c_write(axi_iic, device_addr, 0x3804, 0x5);
cam_i2c_write(axi_iic, device_addr, 0x3805, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x3806, 0x3);
cam_i2c_write(axi_iic, device_addr, 0x3807, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x3808, 0x3);
cam_i2c_write(axi_iic, device_addr, 0x3809, 0x20);
cam_i2c_write(axi_iic, device_addr, 0x380a, 0x2);
cam_i2c_write(axi_iic, device_addr, 0x380b, 0x58);
cam_i2c_write(axi_iic, device_addr, 0x380c, 0xc);
cam_i2c_write(axi_iic, device_addr, 0x380d, 0x80);
cam_i2c_write(axi_iic, device_addr, 0x380e, 0x3);
cam_i2c_write(axi_iic, device_addr, 0x380f, 0xe8);
cam_i2c_write(axi_iic, device_addr, 0x5001, 0x7f);
cam_i2c_write(axi_iic, device_addr, 0x5680, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5681, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5682, 0x5);
cam_i2c_write(axi_iic, device_addr, 0x5683, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5684, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5685, 0x0);
cam_i2c_write(axi_iic, device_addr, 0x5686, 0x3);
cam_i2c_write(axi_iic, device_addr, 0x5687, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x5687, 0xc0);
cam_i2c_write(axi_iic, device_addr, 0x3815, 0x02);
cam_i2c_write(axi_iic, device_addr, 0x3503, 0x00);
cam_i2c_write(axi_iic, device_addr, 0x3818, 0x81); // No Mirror
cam_i2c_write(axi_iic, device_addr, 0x3621, 0xa7);
cam_i2c_write(axi_iic, device_addr, 0x4740, 0x21);
cam_i2c_write(axi_iic, device_addr, 0x501e, 0x2a);
cam_i2c_write(axi_iic, device_addr, 0x5002, 0x78);
cam_i2c_write(axi_iic, device_addr, 0x501f, 0x01);
cam_i2c_write(axi_iic, device_addr, 0x4300, 0x61);
return(0);
}
// memread.c
// 2019/07/21 : by marsee
// I referred to http://independence-sys.net/main/?p=2209
//
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <unistd.h>
#define BLOCK_SIZE 4096
volatile uint32_t *reg;
int main(int argc, char **argv){
int fd;
void *memp;
uint32_t phy_addr;
uint32_t phy_addr_base;
uint32_t addr, addr2;
uint32_t write_data;
if (argc != 2){
fprintf(stderr, "Usage : ./memread <address(hex)>\n");
exit(-1);
}
fd = open("/dev/mem", O_RDWR | O_SYNC);
if (fd == -1){
fprintf(stderr, "/dev/mem open error\n");
exit(-1);
}
sscanf(argv[1], "%x", &addr);
phy_addr = (uint32_t)addr;
phy_addr_base = phy_addr & 0xfffff000; // 4k byte boundary
memp = mmap(NULL, BLOCK_SIZE,
PROT_READ | PROT_WRITE, MAP_SHARED,
fd, phy_addr_base );
if ((int64_t)memp == -1){
fprintf(stderr,"/dev/mem map error\n");
exit(-1);
}
close(fd);
reg = (uint32_t *)memp;
int index = (phy_addr & 0xfff)/sizeof(uint32_t);
printf("%0.8x\n", reg[index]);
munmap((void *)memp, BLOCK_SIZE);
return(0);
}
// memwrite.c
// 2018/01/07 : by marsee
// I referred to http://independence-sys.net/main/?p=2209
//
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <unistd.h>
#define BLOCK_SIZE 4096
volatile uint32_t *reg;
int main(int argc, char **argv){
int fd;
void *memp;
uint32_t phy_addr;
uint32_t phy_addr_base;
int addr, wd;
uint32_t write_data;
if (argc != 3){
fprintf(stderr, "Usage : ./memwrite <address(hex)> <write data(hex)>\n");
exit(-1);
}
fd = open("/dev/mem", O_RDWR | O_SYNC);
if (fd == -1){
fprintf(stderr, "/dev/mem open error\n");
exit(-1);
}
sscanf(argv[1], "%x", &addr);
phy_addr = (uint32_t)addr;
phy_addr_base = phy_addr & 0xfffff000; // 4k byte boundary
memp = mmap(NULL, BLOCK_SIZE,
PROT_READ | PROT_WRITE, MAP_SHARED,
fd, phy_addr_base );
if ((int64_t)memp == -1){
fprintf(stderr,"/dev/mem map error\n");
exit(-1);
}
close(fd);
reg = (uint32_t *)memp;
int index = (phy_addr & 0xfff)/sizeof(uint32_t);
sscanf(argv[2], "%x", &wd);
write_data = (uint32_t)wd;
reg[index] = write_data;
munmap((void *)memp, BLOCK_SIZE);
return(0);
}
xilinx-kr260-starterkit-20221:~/examples/mem$ sudo ./memread fd4ab070
00000057
xilinx-kr260-starterkit-20221:~/examples/mem$ sudo ./memread fd4aa00c
000001ff
xilinx-kr260-starterkit-20221:~/examples/mem$ sudo ./memwrite fd4ab070 54
xilinx-kr260-starterkit-20221:~/examples/mem$ sudo ./memwrite fd4aa00c ff
xilinx-kr260-starterkit-20221:~/examples/mem$ sudo ./memread fd4ab070
00000054
xilinx-kr260-starterkit-20221:~/examples/mem$ sudo ./memread fd4aa00c
000000ff
========================== Name Exactly Matched: g++ ===========================
g++.cortexa72_cortexa53 : GNU cc and gcc C compilers
============================== Name Matched: g++ ===============================
g++-symlinks.cortexa72_cortexa53 : GNU cc and gcc C compilers
libconfig++11.cortexa72_cortexa53 : C/C++ Configuration File Library
// laplacian_filter1.cpp
// 2019/12/16 by marsee
int laplacian_fil(int x0y0, int x1y0, int x2y0, int x0y1, int x1y1, int x2y1, int x0y2, int x1y2, int x2y2);
int conv_rgb2y(int rgb);
extern "C" {
void lap_filter_axim(int *cam_fb, int *lap_fb, int x_size, int y_size)
{
#pragma HLS INTERFACE m_axi depth=3072 port=cam_fb offset=slave bundle=gmem
#pragma HLS INTERFACE m_axi depth=3072 port=lap_fb offset=slave bundle=gmem
#pragma HLS INTERFACE s_axilite port = cam_fb bundle = control
#pragma HLS INTERFACE s_axilite port = lap_fb bundle = control
#pragma HLS INTERFACE s_axilite port = x_size bundle = control
#pragma HLS INTERFACE s_axilite port = y_size bundle = control
#pragma HLS INTERFACE s_axilite port=return bundle=control
int line_buf[3][1920]; // supported HD resolution
int x, y;
int lap_fil_val;
int a, b;
int fl, sl, tl;
// RGB値をY(輝度成分)のみに変換し、ラプラシアンフィルタを掛けた。
Loop0: for (y=0; y<y_size; y++){
#pragma HLS LOOP_TRIPCOUNT min=48 max=600
Loop1: for (x=0; x<x_size; x++){
#pragma HLS LOOP_TRIPCOUNT min=64 max=800
if (y==0 || y==y_size-1){ // 縦の境界の時の値は0とする
lap_fil_val = 0;
}else if (x==0 || x==x_size-1){ // 横の境界の時も値は0とする
lap_fil_val = 0;
}else{
if (y == 1 && x == 1){ // 最初のラインの最初のピクセルでは2ライン分の画素を読み出す
Loop3: for (a=0; a<2; a++){ // 2ライン分
Loop4: for (b=0; b<x_size; b++){ // ライン
#pragma HLS LOOP_TRIPCOUNT min=64 max=800
line_buf[a][b] = cam_fb[(a*x_size)+b];
line_buf[a][b] = conv_rgb2y(line_buf[a][b]);
}
}
}
if (x == 1) { // ラインの最初なので、2つのピクセルを読み込む
Loop5: for (b=0; b<2; b++){ // ライン
line_buf[(y+1)%3][b] = cam_fb[((y+1)*x_size)+b];
// (y+1)%3 は、使用済みのラインがに読み込む、y=2 の時 line[0], y=3の時 line[1], y=4の時 line[2]
line_buf[(y+1)%3][b] = conv_rgb2y(line_buf[(y+1)%3][b]);
}
}
// 1つのピクセルを読み込みながらラプラシアン・フィルタを実行する
line_buf[(y+1)%3][x+1] = cam_fb[((y+1)*x_size)+(x+1)];
// (y+1)%3 は、使用済みのラインがに読み込む、y=2 の時 line[0], y=3の時 line[1], y=4の時 line[2]
line_buf[(y+1)%3][x+1] = conv_rgb2y(line_buf[(y+1)%3][x+1]);
fl = (y-1)%3; // 最初のライン, y=1 012, y=2 120, y=3 201, y=4 012
sl = y%3; // 2番めのライン
tl = (y+1)%3; // 3番目のライン
lap_fil_val = laplacian_fil(line_buf[fl][x-1], line_buf[fl][x], line_buf[fl][x+1], line_buf[sl][x-1], line_buf[sl][x], line_buf[sl][x+1], line_buf[tl][x-1], line_buf[tl][x], line_buf[tl][x+1]);
}
// ラプラシアンフィルタ・データの書き込み
lap_fb[(y*x_size)+x] = (lap_fil_val<<16)+(lap_fil_val<<8)+lap_fil_val ;
// printf("x = %d y = %d", x, y);
}
}
}
}
// RGBからYへの変換
// RGBのフォーマットは、{8'd0, R(8bits), G(8bits), B(8bits)}, 1pixel = 32bits
// 輝度信号Yのみに変換する。変換式は、Y = 0.299R + 0.587G + 0.114B
// "YUVフォーマット及び YUV<->RGB変換"を参考にした。http://vision.kuee.kyoto-u.ac.jp/~hiroaki/firewire/yuv.html
// 2013/09/27 : float を止めて、すべてint にした
int conv_rgb2y(int rgb){
int r, g, b, y_f;
int y;
b = rgb & 0xff;
g = (rgb>>8) & 0xff;
r = (rgb>>16) & 0xff;
y_f = 77*r + 150*g + 29*b; //y_f = 0.299*r + 0.587*g + 0.114*b;の係数に256倍した
y = y_f >> 8; // 256で割る
return(y);
}
// ラプラシアンフィルタ
// x0y0 x1y0 x2y0 -1 -1 -1
// x0y1 x1y1 x2y1 -1 8 -1
// x0y2 x1y2 x2y2 -1 -1 -1
int laplacian_fil(int x0y0, int x1y0, int x2y0, int x0y1, int x1y1, int x2y1, int x0y2, int x1y2, int x2y2)
{
int y;
y = -x0y0 -x1y0 -x2y0 -x0y1 +8*x1y1 -x2y1 -x0y2 -x1y2 -x2y2;
if (y<0)
y = -y;
else if (y>255)
y = 255;
return(y);
}
// laplacian_filter1_host.cpp
// 2019/12/09 by marsee
//
// Vitis-Tutorials/docs/mixing-c-rtl-kernels/reference-files/src/host/host_step1.cpp のコードを引用します
// https://github.com/Xilinx/Vitis-Tutorials/blob/master/docs/mixing-c-rtl-kernels/reference-files/src/host/host_step1.cpp
#define CL_HPP_CL_1_2_DEFAULT_BUILD
#define CL_HPP_TARGET_OPENCL_VERSION 120
#define CL_HPP_MINIMUM_OPENCL_VERSION 120
#define CL_HPP_ENABLE_PROGRAM_CONSTRUCTION_FROM_ARRAY_COMPATIBILITY 1
#define CL_USE_DEPRECATED_OPENCL_1_2_APIS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <vector>
#include <CL/cl2.hpp>
#include <iostream>
#include <fstream>
#include <CL/cl_ext_xilinx.h>
#include <unistd.h>
#include <limits.h>
#include <sys/stat.h>
#include "bmp_header.h"
int laplacian_fil_soft(int x0y0, int x1y0, int x2y0, int x0y1, int x1y1, int x2y1, int x0y2, int x1y2, int x2y2);
int conv_rgb2y_soft(int rgb);
int lap_filter_axim(volatile int *cam_fb, volatile int *lap_fb); // hardware
void laplacian_filter_soft(int *cam_fb, int *lap_fb, long width, long height); // software
static const std::string error_message =
"Error: Result mismatch:\n"
"i = %d CPU result = %d Device result = %d\n";
//Some Library functions to be used.
template <typename T>
struct aligned_allocator
{
using value_type = T;
T* allocate(std::size_t num)
{
void* ptr = nullptr;
if (posix_memalign(&ptr,4096,num*sizeof(T)))
throw std::bad_alloc();
return reinterpret_cast<T*>(ptr);
}
void deallocate(T* p, std::size_t num)
{
free(p);
}
};
#define OCL_CHECK(error,call) \
call; \
if (error != CL_SUCCESS) { \
printf("%s:%d Error calling " #call ", error code is: %d\n", \
__FILE__,__LINE__, error); \
exit(EXIT_FAILURE); \
}
namespace xcl {
std::vector<cl::Device> get_devices(const std::string& vendor_name) {
size_t i;
cl_int err;
std::vector<cl::Platform> platforms;
OCL_CHECK(err, err = cl::Platform::get(&platforms));
cl::Platform platform;
for (i = 0 ; i < platforms.size(); i++){
platform = platforms[i];
OCL_CHECK(err, std::string platformName = platform.getInfo<CL_PLATFORM_NAME>(&err));
if (platformName == vendor_name){
std::cout << "Found Platform" << std::endl;
std::cout << "Platform Name: " << platformName.c_str() << std::endl;
break;
}
}
if (i == platforms.size()) {
std::cout << "Error: Failed to find Xilinx platform" << std::endl;
exit(EXIT_FAILURE);
}
//Getting ACCELERATOR Devices and selecting 1st such device
std::vector<cl::Device> devices;
OCL_CHECK(err, err = platform.getDevices(CL_DEVICE_TYPE_ACCELERATOR, &devices));
return devices;
}
std::vector<cl::Device> get_xil_devices() {
return get_devices("Xilinx");
}
char* read_binary_file(const std::string &xclbin_file_name, unsigned &nb)
{
std::cout << "INFO: Reading " << xclbin_file_name << std::endl;
if(access(xclbin_file_name.c_str(), R_OK) != 0) {
printf("ERROR: %s xclbin not available please build\n", xclbin_file_name.c_str());
exit(EXIT_FAILURE);
}
//Loading XCL Bin into char buffer
std::cout << "Loading: '" << xclbin_file_name.c_str() << "'\n";
std::ifstream bin_file(xclbin_file_name.c_str(), std::ifstream::binary);
bin_file.seekg (0, bin_file.end);
nb = bin_file.tellg();
bin_file.seekg (0, bin_file.beg);
char *buf = new char [nb];
bin_file.read(buf, nb);
return buf;
}
};
int main(int argc, char* argv[])
{
long x, y;
BITMAPFILEHEADER bmpfhr; // BMPファイルのファイルヘッダ(for Read)
BITMAPINFOHEADER bmpihr; // BMPファイルのINFOヘッダ(for Read)
FILE *fbmpr, *fbmpw;
int blue, green, red;
const char* xclbinFilename;
if (argc==2) {
xclbinFilename = argv[1];
std::cout <<"Using FPGA binary file specfied through the command line: " << xclbinFilename << std::endl;
}
else {
xclbinFilename = "../lap_filter_axim.xclbin";
std::cout << "No FPGA binary file specified through the command line, using:" << xclbinFilename <<std::endl;
}
if ((fbmpr = fopen("test.bmp", "rb")) == NULL){ // test.bmp をオープン
fprintf(stderr, "Can't open test.bmp by binary read mode\n");
exit(1);
}
// bmpヘッダの読み出し
fread(&bmpfhr.bfType, sizeof(uint16_t), 1, fbmpr);
fread(&bmpfhr.bfSize, sizeof(uint32_t), 1, fbmpr);
fread(&bmpfhr.bfReserved1, sizeof(uint16_t), 1, fbmpr);
fread(&bmpfhr.bfReserved2, sizeof(uint16_t), 1, fbmpr);
fread(&bmpfhr.bfOffBits, sizeof(uint32_t), 1, fbmpr);
fread(&bmpihr, sizeof(BITMAPINFOHEADER), 1, fbmpr);
// ピクセルを入れるメモリをアロケートする
std::vector<int,aligned_allocator<int>> rd_bmp(bmpihr.biWidth * bmpihr.biHeight);
std::vector<int,aligned_allocator<int>> hw_lapd(bmpihr.biWidth * bmpihr.biHeight);
std::vector<int,aligned_allocator<int>> sw_lapd(bmpihr.biWidth * bmpihr.biHeight);
size_t size_in_bytes = (bmpihr.biWidth * bmpihr.biHeight) * sizeof(int);
// rd_bmp にBMPのピクセルを代入。その際に、行を逆転する必要がある
for (y=0; y<bmpihr.biHeight; y++){
for (x=0; x<bmpihr.biWidth; x++){
blue = fgetc(fbmpr);
green = fgetc(fbmpr);
red = fgetc(fbmpr);
rd_bmp[((bmpihr.biHeight-1)-y)*bmpihr.biWidth+x] = (blue & 0xff) | ((green & 0xff)<<8) | ((red & 0xff)<<16);
}
}
fclose(fbmpr);
std::vector<cl::Device> devices = xcl::get_xil_devices();
cl::Device device = devices[0];
devices.resize(1);
// Creating Context and Command Queue for selected device
cl::Context context(device);
cl::CommandQueue q(context, device, CL_QUEUE_PROFILING_ENABLE);
// Load xclbin
std::cout << "Loading: '" << xclbinFilename << "'\n";
std::ifstream bin_file(xclbinFilename, std::ifstream::binary);
bin_file.seekg (0, bin_file.end);
unsigned nb = bin_file.tellg();
bin_file.seekg (0, bin_file.beg);
char *buf = new char [nb];
bin_file.read(buf, nb);
// Creating Program from Binary File
cl::Program::Binaries bins;
bins.push_back({buf,nb});
cl::Program program(context, devices, bins);
// This call will get the kernel object from program. A kernel is an
// OpenCL function that is executed on the FPGA.
cl::Kernel krnl_lap_filter(program,"lap_filter_axim");
// These commands will allocate memory on the Device. The cl::Buffer objects can
// be used to reference the memory locations on the device.
cl::Buffer rd_bmp_buf(context, CL_MEM_USE_HOST_PTR | CL_MEM_READ_ONLY,
size_in_bytes, rd_bmp.data());
cl::Buffer hw_lapd_buf(context, CL_MEM_USE_HOST_PTR | CL_MEM_READ_WRITE,
size_in_bytes, hw_lapd.data());
// Data will be transferred from system memory over PCIe to the FPGA on-board
// DDR memory.
q.enqueueMigrateMemObjects({rd_bmp_buf},0/* 0 means from host*/);
//set the kernel Arguments
krnl_lap_filter.setArg(0,rd_bmp_buf);
krnl_lap_filter.setArg(1,hw_lapd_buf);
krnl_lap_filter.setArg(2,bmpihr.biWidth);
krnl_lap_filter.setArg(3,bmpihr.biHeight);
//Launch the Kernel
q.enqueueTask(krnl_lap_filter);
// The result of the previous kernel execution will need to be retrieved in
// order to view the results. This call will transfer the data from FPGA to
// source_results vector
q.enqueueMigrateMemObjects({hw_lapd_buf},CL_MIGRATE_MEM_OBJECT_HOST);
q.finish();
laplacian_filter_soft(rd_bmp.data(), sw_lapd.data(), bmpihr.biWidth, bmpihr.biHeight); // ソフトウェアのラプラシアン・フィルタ
// ハードウェアとソフトウェアのラプラシアン・フィルタの値のチェック
for (y=0; y<bmpihr.biHeight; y++){
for (x=0; x<bmpihr.biWidth; x++){
if (hw_lapd[y*bmpihr.biWidth+x] != sw_lapd[y*bmpihr.biWidth+x]){
printf("ERROR HW and SW results mismatch x = %ld, y = %ld, HW = %d, SW = %d\n", x, y, hw_lapd[y*bmpihr.biWidth+x], sw_lapd[y*bmpihr.biWidth+x]);
//return(1);
}
}
}
printf("Success HW and SW results match\n");
// ハードウェアのラプラシアンフィルタの結果を temp_lap.bmp へ出力する
if ((fbmpw=fopen("temp_lap.bmp", "wb")) == NULL){
fprintf(stderr, "Can't open temp_lap.bmp by binary write mode\n");
exit(1);
}
// BMPファイルヘッダの書き込み
fwrite(&bmpfhr.bfType, sizeof(uint16_t), 1, fbmpw);
fwrite(&bmpfhr.bfSize, sizeof(uint32_t), 1, fbmpw);
fwrite(&bmpfhr.bfReserved1, sizeof(uint16_t), 1, fbmpw);
fwrite(&bmpfhr.bfReserved2, sizeof(uint16_t), 1, fbmpw);
fwrite(&bmpfhr.bfOffBits, sizeof(uint32_t), 1, fbmpw);
fwrite(&bmpihr, sizeof(BITMAPINFOHEADER), 1, fbmpw);
// RGB データの書き込み、逆順にする
for (y=0; y<bmpihr.biHeight; y++){
for (x=0; x<bmpihr.biWidth; x++){
blue = hw_lapd[((bmpihr.biHeight-1)-y)*bmpihr.biWidth+x] & 0xff;
green = (hw_lapd[((bmpihr.biHeight-1)-y)*bmpihr.biWidth+x] >> 8) & 0xff;
red = (hw_lapd[((bmpihr.biHeight-1)-y)*bmpihr.biWidth+x]>>16) & 0xff;
fputc(blue, fbmpw);
fputc(green, fbmpw);
fputc(red, fbmpw);
}
}
fclose(fbmpw);
return(0);
}
void laplacian_filter_soft(int *cam_fb, int *lap_fb, long width, long height)
{
int **line_buf;
int *lap_buf;
int x, y, i;
int lap_fil_val;
int a, b;
int fl, sl, tl;
// line_buf の1次元目の配列をアロケートする
if ((line_buf =(int **)malloc(sizeof(int *) * 3)) == NULL){
fprintf(stderr, "Can't allocate line_buf[3][]\n");
exit(1);
}
// メモリをアロケートする
for (i=0; i<3; i++){
if ((line_buf[i]=(int *)malloc(sizeof(int) * width)) == NULL){
fprintf(stderr, "Can't allocate line_buf[%d]\n", i);
exit(1);
}
}
if ((lap_buf=(int *)malloc(sizeof(int) * (width))) == NULL){
fprintf(stderr, "Can't allocate lap_buf memory\n");
exit(1);
}
// RGB値をY(輝度成分)のみに変換し、ラプラシアンフィルタを掛けた。
for (y=0; y<height; y++){
for (x=0; x<width; x++){
if (y==0 || y==height-1){ // 縦の境界の時の値は0とする
lap_fil_val = 0;
}else if (x==0 || x==width-1){ // 横の境界の時も値は0とする
lap_fil_val = 0;
}else{
if (y == 1 && x == 1){ // 最初のラインの最初のピクセルでは2ライン分の画素を読み出す
for (a=0; a<2; a++){ // 2ライン分
for (b=0; b<width; b++){ // ライン
line_buf[a][b] = cam_fb[(a*width)+b];
line_buf[a][b] = conv_rgb2y_soft(line_buf[a][b]);
}
}
}
if (x == 1) { // ラインの最初なので、2つのピクセルを読み込む
for (b=0; b<2; b++){ // ライン
line_buf[(y+1)%3][b] = cam_fb[((y+1)*width)+b];
// (y+1)%3 は、使用済みのラインがに読み込む、y=2 の時 line[0], y=3の時 line[1], y=4の時 line[2]
line_buf[(y+1)%3][b] = conv_rgb2y_soft(line_buf[(y+1)%3][b]);
}
}
// 1つのピクセルを読み込みながらラプラシアン・フィルタを実行する
line_buf[(y+1)%3][x+1] = cam_fb[((y+1)*width)+(x+1)];
// (y+1)%3 は、使用済みのラインがに読み込む、y=2 の時 line[0], y=3の時 line[1], y=4の時 line[2]
line_buf[(y+1)%3][x+1] = conv_rgb2y_soft(line_buf[(y+1)%3][x+1]);
fl = (y-1)%3; // 最初のライン, y=1 012, y=2 120, y=3 201, y=4 012
sl = y%3; // 2番めのライン
tl = (y+1)%3; // 3番目のライン
lap_fil_val = laplacian_fil_soft(line_buf[fl][x-1], line_buf[fl][x], line_buf[fl][x+1], line_buf[sl][x-1], line_buf[sl][x], line_buf[sl][x+1], line_buf[tl][x-1], line_buf[tl][x], line_buf[tl][x+1]);
}
// ラプラシアンフィルタ・データの書き込み
lap_fb[(y*width)+x] = (lap_fil_val<<16)+(lap_fil_val<<8)+lap_fil_val ;
}
}
free(lap_buf);
for (i=0; i<3; i++)
free(line_buf[i]);
free(line_buf);
}
// RGBからYへの変換
// RGBのフォーマットは、{8'd0, R(8bits), G(8bits), B(8bits)}, 1pixel = 32bits
// 輝度信号Yのみに変換する。変換式は、Y = 0.299R + 0.587G + 0.114B
// "YUVフォーマット及び YUV<->RGB変換"を参考にした。http://vision.kuee.kyoto-u.ac.jp/~hiroaki/firewire/yuv.html
// 2013/09/27 : float を止めて、すべてint にした
int conv_rgb2y_soft(int rgb){
int r, g, b, y_f;
int y;
b = rgb & 0xff;
g = (rgb>>8) & 0xff;
r = (rgb>>16) & 0xff;
y_f = 77*r + 150*g + 29*b; //y_f = 0.299*r + 0.587*g + 0.114*b;の係数に256倍した
y = y_f >> 8; // 256で割る
return(y);
}
// ラプラシアンフィルタ
// x0y0 x1y0 x2y0 -1 -1 -1
// x0y1 x1y1 x2y1 -1 8 -1
// x0y2 x1y2 x2y2 -1 -1 -1
int laplacian_fil_soft(int x0y0, int x1y0, int x2y0, int x0y1, int x1y1, int x2y1, int x0y2, int x1y2, int x2y2)
{
int y;
y = -x0y0 -x1y0 -x2y0 -x0y1 +8*x1y1 -x2y1 -x0y2 -x1y2 -x2y2;
if (y<0)
y = -y;
else if (y>255)
y = 255;
return(y);
}
uio4 - i2c
uio5 - interrupt-controller
uio6 - mt9d111_inf_axis
uio7 - vflip_dma_write2
uio8 - gpio
uio9 - disp_dmar_axis
{
"shell_type" : "XRT_FLAT",
"num_slots": "1"
}
/*
* CAUTION: This file is automatically generated by Xilinx.
* Version: XSCT 2022.1
* Today is: Fri Apr 14 04:56:06 2023
*/
/dts-v1/;
/plugin/;
/ {
fragment@0 {
target = <&fpga_full>;
overlay0: __overlay__ {
#address-cells = <2>;
#size-cells = <2>;
firmware-name = "kr260_cam_disp.bit.bin";
resets = <&zynqmp_reset 116>, <&zynqmp_reset 117>, <&zynqmp_reset 118>, <&zynqmp_reset 119>;
};
};
fragment@1 {
target = <&amba>;
overlay1: __overlay__ {
afi0: afi0 {
compatible = "xlnx,afi-fpga";
config-afi = < 0 0>, <1 0>, <2 0>, <3 0>, <4 0>, <5 0>, <6 0>, <7 0>, <8 0>, <9 0>, <10 0>, <11 0>, <12 0>, <13 0>, <14 0xa00>, <15 0x000>;
};
clocking0: clocking0 {
#clock-cells = <0>;
assigned-clock-rates = <99999001>;
assigned-clocks = <&zynqmp_clk 71>;
clock-output-names = "fabric_clk";
clocks = <&zynqmp_clk 71>;
compatible = "xlnx,fclk";
};
clocking1: clocking1 {
#clock-cells = <0>;
assigned-clock-rates = <23809286>;
assigned-clocks = <&zynqmp_clk 72>;
clock-output-names = "fabric_clk";
clocks = <&zynqmp_clk 72>;
compatible = "xlnx,fclk";
};
};
};
fragment@2 {
target = <&amba>;
overlay2: __overlay__ {
#address-cells = <2>;
#size-cells = <2>;
axi_intc_0: interrupt-controller@80000000 {
#interrupt-cells = <2>;
clock-names = "s_axi_aclk";
clocks = <&misc_clk_0>;
compatible = "generic-uio";
interrupt-controller ;
interrupt-names = "irq";
interrupt-parent = <&gic>;
interrupts = <0 89 4>;
reg = <0x0 0x80000000 0x0 0x10000>;
xlnx,kind-of-intr = <0x1>;
xlnx,num-intr-inputs = <0x20>;
};
misc_clk_0: misc_clk_0 {
#clock-cells = <0>;
clock-frequency = <199998000>;
compatible = "fixed-clock";
};
camera_axi_iic_0: i2c@80010000 {
#address-cells = <1>;
#size-cells = <0>;
clock-names = "s_axi_aclk";
clocks = <&misc_clk_0>;
compatible = "generic-uio";
reg = <0x0 0x80010000 0x0 0x10000>;
};
camera_mt9d111_inf_axis_0: mt9d111_inf_axis@80020000 {
/* This is a place holder node for a custom IP, user may need to update the entries */
clock-names = "s_axi_lite_aclk", "m_axis_aclk";
clocks = <&misc_clk_0>, <&misc_clk_0>;
compatible = "generic-uio";
reg = <0x0 0x80020000 0x0 0x10000>;
};
camera_vflip_dma_write2_0: vflip_dma_write2@80030000 {
/* This is a place holder node for a custom IP, user may need to update the entries */
clock-names = "ap_clk";
clocks = <&misc_clk_0>;
compatible = "generic-uio";
reg = <0x0 0x80030000 0x0 0x10000>;
xlnx,s-axi-axilites-addr-width = <0x6>;
xlnx,s-axi-axilites-data-width = <0x20>;
};
display_axi_gpio_0: gpio@80040000 {
#gpio-cells = <2>;
clock-names = "s_axi_aclk";
clocks = <&misc_clk_0>;
compatible = "generic-uio";
gpio-controller ;
reg = <0x0 0x80040000 0x0 0x10000>;
xlnx,all-inputs = <0x0>;
xlnx,all-inputs-2 = <0x0>;
xlnx,all-outputs = <0x1>;
xlnx,all-outputs-2 = <0x0>;
xlnx,dout-default = <0x00000000>;
xlnx,dout-default-2 = <0x00000000>;
xlnx,gpio-width = <0x1>;
xlnx,gpio2-width = <0x20>;
xlnx,interrupt-present = <0x0>;
xlnx,is-dual = <0x0>;
xlnx,tri-default = <0xFFFFFFFF>;
xlnx,tri-default-2 = <0xFFFFFFFF>;
};
display_disp_dmar_axis_0: disp_dmar_axis@80050000 {
/* This is a place holder node for a custom IP, user may need to update the entries */
clock-names = "ap_clk";
clocks = <&zynqmp_clk 71>;
compatible = "generic-uio";
reg = <0x0 0x80050000 0x0 0x10000>;
xlnx,s-axi-axilites-addr-width = <0x6>;
xlnx,s-axi-axilites-data-width = <0x20>;
};
zyxclmm_drm {
compatible = "xlnx,zocl";
interrupts-extended = <&axi_intc_0 0 4>, <&axi_intc_0 1 4>, <&axi_intc_0 2 4>, <&axi_intc_0 3 4>, <&axi_intc_0 4 4>, <&axi_intc_0 5 4>, <&axi_intc_0 6 4>, <&axi_intc_0 7 4>, <&axi_intc_0 8 4>, <&axi_intc_0 9 4>,
<&axi_intc_0 10 4>, <&axi_intc_0 11 4>, <&axi_intc_0 12 4>, <&axi_intc_0 13 4>, <&axi_intc_0 14 4>,
<&axi_intc_0 15 4>, <&axi_intc_0 16 4>, <&axi_intc_0 17 4>, <&axi_intc_0 18 4>, <&axi_intc_0 19 4>,
<&axi_intc_0 20 4>, <&axi_intc_0 21 4>, <&axi_intc_0 22 4>, <&axi_intc_0 23 4>, <&axi_intc_0 24 4>,
<&axi_intc_0 25 4>, <&axi_intc_0 26 4>, <&axi_intc_0 27 4>, <&axi_intc_0 28 4>, <&axi_intc_0 29 4>,
<&axi_intc_0 30 4>, <&axi_intc_0 31 4 >;
};
};
};
};
�Xilinx Zynq MP First Stage Boot Loader
Release 2022.1 Sep 16 2022 - 04:56:15
MultiBootOffset: 0x1F0
Reset Mode : System Reset
Platform: Silicon (4.0), Running on A53-0 (64-bit) Processor, Device Name: XCZUUNKNEG
QSPI 32 bit Boot Mode
FlashID=0x20 0xBB 0x20
Pr�NOTICE: BL31: v2.6(release):0897efd
NOTICE: BL31: Built : 04:58:29, Sep 16 2022
U-Boot 2022.01-g91ad7924-dirty (Sep 15 2022 - 23:00:49 -0600), Build: jenkins-BUILDS-2022.1-som_qspi_generation-131
CPU: ZynqMP
Silicon: v3
Detected name: zynqmp-smk-k26-xcl2g-rev1-sck-kr-g-rev1
Model: ZynqMP SMK-K26 Rev1/B/A
Board: Xilinx ZynqMP
DRAM: 4 GiB
PMUFW: v1.1
Xilinx I2C FRU format at nvmem0:
Manufacturer Name: XILINX
Product Name: SMK-K26-XCL2G
Serial No: XFL1CYY0C2I3
Part Number: 5057-04
File ID: 0x0
Revision Number: 1
Xilinx I2C FRU format at nvmem1:
Manufacturer Name: XILINX
Product Name: SCK-KR-G
Serial No: XFL1V0BJCWOF
Part Number: 5100-01
File ID: 0x0
Revision Number: 1
EL Level: EL2
Chip ID: xck26
NAND: 0 MiB
MMC:
Loading Environment from nowhere... OK
In: serial
Out: serial
Err: serial
Bootmode: QSPI_MODE
Reset reason: SOFT
Net:
ZYNQ GEM: ff0b0000, mdio bus ff0c0000, phyaddr 4, interface sgmii
eth0: ethernet@ff0b0000
ZYNQ GEM: ff0c0000, mdio bus ff0c0000, phyaddr 8, interface rgmii-id
, eth1: ethernet@ff0c0000
starting USB...
Bus usb@fe200000: Register 2000440 NbrPorts 2
Starting the controller
USB XHCI 1.00
Bus usb@fe300000: Register 2000440 NbrPorts 2
Starting the controller
USB XHCI 1.00
scanning bus usb@fe200000 for devices... 5 USB Device(s) found
scanning bus usb@fe300000 for devices... 4 USB Device(s) found
scanning usb for storage devices... 1 Storage Device(s) found
Hit any key to stop autoboot: 0
model=SMK-K26-XCL2G
Device 0: Vendor: Generic Rev: 1.98 Prod: Ultra HS-COMBO
Type: Removable Hard Disk
Capacity: 29554.0 MB = 28.8 GB (60526592 x 512)
... is now current device
Scanning usb 0:1...
Found U-Boot script /boot.scr
2777 bytes read in 1 ms (2.6 MiB/s)
## Executing script at 20000000
Trying to load boot images from usb0
22401536 bytes read in 1489 ms (14.3 MiB/s)
46961 bytes read in 6 ms (7.5 MiB/s)
23217328 bytes read in 1542 ms (14.4 MiB/s)
## Loading init Ramdisk from Legacy Image at 04000000 ...
Image Name: petalinux-initramfs-image-xilinx
Created: 2011-04-05 23:00:00 UTC
Image Type: AArch64 Linux RAMDisk Image (uncompressed)
Data Size: 23217264 Bytes = 22.1 MiB
Load Address: 00000000
Entry Point: 00000000
Verifying Checksum ... OK
## Flattened Device Tree blob at 00100000
Booting using the fdt blob at 0x100000
Loading Ramdisk to 779db000, end 78fff470 ... OK
Loading Device Tree to 000000000fff1000, end 000000000ffff770 ... OK
Starting kernel ...
[ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x410fd034]
[ 0.000000] Linux version 5.15.19-xilinx-v2022.1 (oe-user@oe-host) (aarch64-xilinx-linux-gcc (GCC) 11.2.0, GNU ld (GNU Binutils) 2.37.20210721) #1 SMP Thu May 12 09:05:30 UTC 2022
[ 0.000000] Machine model: ZynqMP SMK-K26 Rev1/B/A
[ 0.000000] earlycon: cdns0 at MMIO 0x00000000ff010000 (options '115200n8')
[ 0.000000] printk: bootconsole [cdns0] enabled
[ 0.000000] efi: UEFI not found.
[ 0.000000] Zone ranges:
[ 0.000000] DMA32 [mem 0x0000000000000000-0x00000000ffffffff]
[ 0.000000] Normal [mem 0x0000000100000000-0x000000087fffffff]
[ 0.000000] Movable zone start for each node
[ 0.000000] Early memory node ranges
[ 0.000000] node 0: [mem 0x0000000000000000-0x000000003ecfffff]
[ 0.000000] node 0: [mem 0x000000003ed00000-0x000000003ee47fff]
[ 0.000000] node 0: [mem 0x000000003ee48000-0x000000007fefffff]
[ 0.000000] node 0: [mem 0x0000000800000000-0x000000087fffffff]
[ 0.000000] Initmem setup node 0 [mem 0x0000000000000000-0x000000087fffffff]
[ 0.000000] On node 0, zone Normal: 256 pages in unavailable ranges
[ 0.000000] cma: Reserved 900 MiB at 0x000000003f400000
[ 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] percpu: Embedded 18 pages/cpu s34776 r8192 d30760 u73728
[ 0.000000] Detected VIPT I-cache on CPU0
[ 0.000000] CPU features: detected: ARM erratum 845719
[ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 1031940
[ 0.000000] Kernel command line: earlycon console=ttyPS1,115200 clk_ignore_unused xilinx_tsn_ep.st_pcp=4 init_fatal_sh=1 cma=900M uio_pdrv_genirq.of_id=generic-uio
[ 0.000000] Unknown kernel command line parameters "init_fatal_sh=1", will be passed to user space.
[ 0.000000] Dentry cache hash table entries: 524288 (order: 10, 4194304 bytes, linear)
[ 0.000000] Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes, linear)
[ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[ 0.000000] software IO TLB: mapped [mem 0x000000007bf00000-0x000000007ff00000] (64MB)
[ 0.000000] Memory: 3078456K/4193280K available (14528K kernel code, 1012K rwdata, 4056K rodata, 2176K init, 571K bss, 193224K reserved, 921600K cma-reserved)
[ 0.000000] rcu: Hierarchical RCU implementation.
[ 0.000000] rcu: RCU event tracing is 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] GIC: Adjusting CPU interface base to 0x00000000f902f000
[ 0.000000] Root IRQ handler: gic_handle_irq
[ 0.000000] GIC: Using split EOI/Deactivate mode
[ 0.000000] random: get_random_bytes called from start_kernel+0x474/0x6d4 with crng_init=0
[ 0.000000] arch_timer: cp15 timer(s) running at 99.99MHz (phys).
[ 0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x171015c90f, max_idle_ns: 440795203080 ns
[ 0.000000] sched_clock: 56 bits at 99MHz, resolution 10ns, wraps every 4398046511101ns
[ 0.008304] Console: colour dummy device 80x25
[ 0.012396] Calibrating delay loop (skipped), value calculated using timer frequency.. 199.99 BogoMIPS (lpj=399996)
[ 0.022752] pid_max: default: 32768 minimum: 301
[ 0.027505] Mount-cache hash table entries: 8192 (order: 4, 65536 bytes, linear)
[ 0.034699] Mountpoint-cache hash table entries: 8192 (order: 4, 65536 bytes, linear)
[ 0.043429] rcu: Hierarchical SRCU implementation.
[ 0.047500] EFI services will not be available.
[ 0.051861] smp: Bringing up secondary CPUs ...
[ 0.056573] Detected VIPT I-cache on CPU1
[ 0.056612] CPU1: Booted secondary processor 0x0000000001 [0x410fd034]
[ 0.056981] Detected VIPT I-cache on CPU2
[ 0.057003] CPU2: Booted secondary processor 0x0000000002 [0x410fd034]
[ 0.057342] Detected VIPT I-cache on CPU3
[ 0.057362] CPU3: Booted secondary processor 0x0000000003 [0x410fd034]
[ 0.057402] smp: Brought up 1 node, 4 CPUs
[ 0.091692] SMP: Total of 4 processors activated.
[ 0.096364] CPU features: detected: 32-bit EL0 Support
[ 0.101468] CPU features: detected: CRC32 instructions
[ 0.106605] CPU: All CPU(s) started at EL2
[ 0.110648] alternatives: patching kernel code
[ 0.116060] devtmpfs: initialized
[ 0.123893] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[ 0.128034] futex hash table entries: 1024 (order: 4, 65536 bytes, linear)
[ 0.160402] pinctrl core: initialized pinctrl subsystem
[ 0.160874] DMI not present or invalid.
[ 0.164037] NET: Registered PF_NETLINK/PF_ROUTE protocol family
[ 0.170646] DMA: preallocated 512 KiB GFP_KERNEL pool for atomic allocations
[ 0.176770] DMA: preallocated 512 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations
[ 0.184595] audit: initializing netlink subsys (disabled)
[ 0.189999] audit: type=2000 audit(0.132:1): state=initialized audit_enabled=0 res=1
[ 0.190355] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.
[ 0.204418] ASID allocator initialised with 65536 entries
[ 0.209825] Serial: AMBA PL011 UART driver
[ 0.231798] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages
[ 0.232860] HugeTLB registered 32.0 MiB page size, pre-allocated 0 pages
[ 0.239531] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages
[ 0.246188] HugeTLB registered 64.0 KiB page size, pre-allocated 0 pages
[ 1.215419] cryptd: max_cpu_qlen set to 1000
[ 1.237834] DRBG: Continuing without Jitter RNG
[ 1.337533] raid6: neonx8 gen() 2373 MB/s
[ 1.405581] raid6: neonx8 xor() 1763 MB/s
[ 1.473646] raid6: neonx4 gen() 2422 MB/s
[ 1.541694] raid6: neonx4 xor() 1718 MB/s
[ 1.609750] raid6: neonx2 gen() 2292 MB/s
[ 1.677799] raid6: neonx2 xor() 1578 MB/s
[ 1.745867] raid6: neonx1 gen() 1955 MB/s
[ 1.813919] raid6: neonx1 xor() 1348 MB/s
[ 1.881968] raid6: int64x8 gen() 1518 MB/s
[ 1.950021] raid6: int64x8 xor() 859 MB/s
[ 2.018081] raid6: int64x4 gen() 1775 MB/s
[ 2.086139] raid6: int64x4 xor() 946 MB/s
[ 2.154202] raid6: int64x2 gen() 1552 MB/s
[ 2.222256] raid6: int64x2 xor() 834 MB/s
[ 2.290324] raid6: int64x1 gen() 1148 MB/s
[ 2.358379] raid6: int64x1 xor() 575 MB/s
[ 2.358417] raid6: using algorithm neonx4 gen() 2422 MB/s
[ 2.362374] raid6: .... xor() 1718 MB/s, rmw enabled
[ 2.367305] raid6: using neon recovery algorithm
[ 2.372353] iommu: Default domain type: Translated
[ 2.376738] iommu: DMA domain TLB invalidation policy: strict mode
[ 2.383160] SCSI subsystem initialized
[ 2.386809] usbcore: registered new interface driver usbfs
[ 2.392156] usbcore: registered new interface driver hub
[ 2.397429] usbcore: registered new device driver usb
[ 2.402475] mc: Linux media interface: v0.10
[ 2.406678] videodev: Linux video capture interface: v2.00
[ 2.412142] pps_core: LinuxPPS API ver. 1 registered
[ 2.417044] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[ 2.426134] PTP clock support registered
[ 2.430035] EDAC MC: Ver: 3.0.0
[ 2.433401] zynqmp-ipi-mbox mailbox@ff990400: Registered ZynqMP IPI mbox with TX/RX channels.
[ 2.441799] zynqmp-ipi-mbox mailbox@ff990600: Registered ZynqMP IPI mbox with TX/RX channels.
[ 2.450194] FPGA manager framework
[ 2.453548] Advanced Linux Sound Architecture Driver Initialized.
[ 2.459808] Bluetooth: Core ver 2.22
[ 2.463072] NET: Registered PF_BLUETOOTH protocol family
[ 2.468340] Bluetooth: HCI device and connection manager initialized
[ 2.474656] Bluetooth: HCI socket layer initialized
[ 2.479500] Bluetooth: L2CAP socket layer initialized
[ 2.484520] Bluetooth: SCO socket layer initialized
[ 2.489688] clocksource: Switched to clocksource arch_sys_counter
[ 2.495524] VFS: Disk quotas dquot_6.6.0
[ 2.499340] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
[ 2.510151] NET: Registered PF_INET protocol family
[ 2.511103] IP idents hash table entries: 65536 (order: 7, 524288 bytes, linear)
[ 2.519756] tcp_listen_portaddr_hash hash table entries: 2048 (order: 3, 32768 bytes, linear)
[ 2.526851] TCP established hash table entries: 32768 (order: 6, 262144 bytes, linear)
[ 2.534866] TCP bind hash table entries: 32768 (order: 7, 524288 bytes, linear)
[ 2.542304] TCP: Hash tables configured (established 32768 bind 32768)
[ 2.548504] UDP hash table entries: 2048 (order: 4, 65536 bytes, linear)
[ 2.555164] UDP-Lite hash table entries: 2048 (order: 4, 65536 bytes, linear)
[ 2.562317] NET: Registered PF_UNIX/PF_LOCAL protocol family
[ 2.568109] RPC: Registered named UNIX socket transport module.
[ 2.573707] RPC: Registered udp transport module.
[ 2.578371] RPC: Registered tcp transport module.
[ 2.583039] RPC: Registered tcp NFSv4.1 backchannel transport module.
[ 2.589994] PCI: CLS 0 bytes, default 64
[ 2.593464] Trying to unpack rootfs image as initramfs...
[ 2.599376] armv8-pmu pmu: hw perfevents: no interrupt-affinity property, guessing.
[ 2.606759] hw perfevents: enabled with armv8_pmuv3 PMU driver, 7 counters available
[ 3.593774] Freeing initrd memory: 22672K
[ 3.624603] Initialise system trusted keyrings
[ 3.624726] workingset: timestamp_bits=46 max_order=20 bucket_order=0
[ 3.630509] NFS: Registering the id_resolver key type
[ 3.634901] Key type id_resolver registered
[ 3.638990] Key type id_legacy registered
[ 3.642983] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
[ 3.649630] nfs4flexfilelayout_init: NFSv4 Flexfile Layout Driver Registering...
[ 3.656993] jffs2: version 2.2. (NAND) (SUMMARY) © 2001-2006 Red Hat, Inc.
[ 3.697026] NET: Registered PF_ALG protocol family
[ 3.697075] xor: measuring software checksum speed
[ 3.704684] 8regs : 2626 MB/sec
[ 3.708426] 32regs : 3109 MB/sec
[ 3.713423] arm64_neon : 2563 MB/sec
[ 3.713908] xor: using function: 32regs (3109 MB/sec)
[ 3.718927] Key type asymmetric registered
[ 3.722992] Asymmetric key parser 'x509' registered
[ 3.727867] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 244)
[ 3.735188] io scheduler mq-deadline registered
[ 3.739687] io scheduler kyber registered
[ 3.768738] Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
[ 3.770480] Serial: AMBA driver
[ 3.773333] cacheinfo: Unable to detect cache hierarchy for CPU 0
[ 3.782574] brd: module loaded
[ 3.785772] loop: module loaded
[ 3.786620] mtdoops: mtd device (mtddev=name/number) must be supplied
[ 3.793761] tun: Universal TUN/TAP device driver, 1.6
[ 3.796266] CAN device driver interface
[ 3.800592] SPI driver wl1271_spi has no spi_device_id for ti,wl1271
[ 3.806310] SPI driver wl1271_spi has no spi_device_id for ti,wl1273
[ 3.812626] SPI driver wl1271_spi has no spi_device_id for ti,wl1281
[ 3.818937] SPI driver wl1271_spi has no spi_device_id for ti,wl1283
[ 3.825251] SPI driver wl1271_spi has no spi_device_id for ti,wl1285
[ 3.831565] SPI driver wl1271_spi has no spi_device_id for ti,wl1801
[ 3.837880] SPI driver wl1271_spi has no spi_device_id for ti,wl1805
[ 3.844195] SPI driver wl1271_spi has no spi_device_id for ti,wl1807
[ 3.850509] SPI driver wl1271_spi has no spi_device_id for ti,wl1831
[ 3.856824] SPI driver wl1271_spi has no spi_device_id for ti,wl1835
[ 3.863138] SPI driver wl1271_spi has no spi_device_id for ti,wl1837
[ 3.869541] usbcore: registered new interface driver asix
[ 3.874856] usbcore: registered new interface driver ax88179_178a
[ 3.880889] usbcore: registered new interface driver cdc_ether
[ 3.886684] usbcore: registered new interface driver net1080
[ 3.892307] usbcore: registered new interface driver cdc_subset
[ 3.898191] usbcore: registered new interface driver zaurus
[ 3.903735] usbcore: registered new interface driver cdc_ncm
[ 3.910035] usbcore: registered new interface driver uas
[ 3.914642] usbcore: registered new interface driver usb-storage
[ 3.921173] rtc_zynqmp ffa60000.rtc: registered as rtc0
[ 3.925779] rtc_zynqmp ffa60000.rtc: setting system clock to 1970-01-01T00:00:09 UTC (9)
[ 3.933858] i2c_dev: i2c /dev entries driver
[ 3.939541] usbcore: registered new interface driver uvcvideo
[ 3.944483] Bluetooth: HCI UART driver ver 2.3
[ 3.948174] Bluetooth: HCI UART protocol H4 registered
[ 3.953274] Bluetooth: HCI UART protocol BCSP registered
[ 3.958563] Bluetooth: HCI UART protocol LL registered
[ 3.963660] Bluetooth: HCI UART protocol ATH3K registered
[ 3.969030] Bluetooth: HCI UART protocol Three-wire (H5) registered
[ 3.975280] Bluetooth: HCI UART protocol Intel registered
[ 3.980621] Bluetooth: HCI UART protocol QCA registered
[ 3.985820] usbcore: registered new interface driver bcm203x
[ 3.991443] usbcore: registered new interface driver bpa10x
[ 3.996977] usbcore: registered new interface driver bfusb
[ 4.002431] usbcore: registered new interface driver btusb
[ 4.007891] usbcore: registered new interface driver ath3k
[ 4.013380] EDAC MC: ECC not enabled
[ 4.016988] EDAC DEVICE0: Giving out device to module edac controller cache_err: DEV edac (POLLED)
[ 4.025915] EDAC DEVICE1: Giving out device to module zynqmp-ocm-edac controller zynqmp_ocm: DEV ff960000.memory-controller (INTERRUPT)
[ 4.038247] sdhci: Secure Digital Host Controller Interface driver
[ 4.044019] sdhci: Copyright(c) Pierre Ossman
[ 4.048339] sdhci-pltfm: SDHCI platform and OF driver helper
[ 4.054291] ledtrig-cpu: registered to indicate activity on CPUs
[ 4.060028] SMCCC: SOC_ID: ARCH_SOC_ID not implemented, skipping ....
[ 4.066396] zynqmp_firmware_probe Platform Management API v1.1
[ 4.072129] zynqmp_firmware_probe Trustzone version v1.0
[ 4.105693] securefw securefw: securefw probed
[ 4.105964] alg: No test for xilinx-zynqmp-aes (zynqmp-aes)
[ 4.110154] zynqmp_aes firmware:zynqmp-firmware:zynqmp-aes: AES Successfully Registered
[ 4.118251] alg: No test for xilinx-keccak-384 (zynqmp-keccak-384)
[ 4.124392] alg: No test for xilinx-zynqmp-rsa (zynqmp-rsa)
[ 4.129906] usbcore: registered new interface driver usbhid
[ 4.135300] usbhid: USB HID core driver
[ 4.141897] ARM CCI_400_r1 PMU driver probed
[ 4.142486] fpga_manager fpga0: Xilinx ZynqMP FPGA Manager registered
[ 4.150118] usbcore: registered new interface driver snd-usb-audio
[ 4.156631] pktgen: Packet Generator for packet performance testing. Version: 2.75
[ 4.164113] Initializing XFRM netlink socket
[ 4.167718] NET: Registered PF_INET6 protocol family
[ 4.172999] Segment Routing with IPv6
[ 4.176231] In-situ OAM (IOAM) with IPv6
[ 4.180171] sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver
[ 4.186294] NET: Registered PF_PACKET protocol family
[ 4.191013] NET: Registered PF_KEY protocol family
[ 4.195774] can: controller area network core
[ 4.200117] NET: Registered PF_CAN protocol family
[ 4.204845] can: raw protocol
[ 4.207787] can: broadcast manager protocol
[ 4.211940] can: netlink gateway - max_hops=1
[ 4.216327] Bluetooth: RFCOMM TTY layer initialized
[ 4.221113] Bluetooth: RFCOMM socket layer initialized
[ 4.226219] Bluetooth: RFCOMM ver 1.11
[ 4.229935] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[ 4.235205] Bluetooth: BNEP filters: protocol multicast
[ 4.240398] Bluetooth: BNEP socket layer initialized
[ 4.245325] Bluetooth: HIDP (Human Interface Emulation) ver 1.2
[ 4.251209] Bluetooth: HIDP socket layer initialized
[ 4.256162] 8021q: 802.1Q VLAN Support v1.8
[ 4.260387] 9pnet: Installing 9P2000 support
[ 4.264548] Key type dns_resolver registered
[ 4.268905] registered taskstats version 1
[ 4.272836] Loading compiled-in X.509 certificates
[ 4.278602] Btrfs loaded, crc32c=crc32c-generic, zoned=no, fsverity=no
[ 4.292642] ff010000.serial: ttyPS1 at MMIO 0xff010000 (irq = 48, base_baud = 6249999) is a xuartps
[ 4.301669] printk: console [ttyPS1] enabled
[ 4.301669] printk: console [ttyPS1] enabled
[ 4.305962] printk: bootconsole [cdns0] disabled
[ 4.305962] printk: bootconsole [cdns0] disabled
[ 4.315214] of-fpga-region fpga-full: FPGA Region probed
[ 4.325383] xilinx-zynqmp-dma fd500000.dma-controller: ZynqMP DMA driver Probe success
[ 4.333452] xilinx-zynqmp-dma fd510000.dma-controller: ZynqMP DMA driver Probe success
[ 4.341524] xilinx-zynqmp-dma fd520000.dma-controller: ZynqMP DMA driver Probe success
[ 4.349591] xilinx-zynqmp-dma fd530000.dma-controller: ZynqMP DMA driver Probe success
[ 4.357662] xilinx-zynqmp-dma fd540000.dma-controller: ZynqMP DMA driver Probe success
[ 4.365730] xilinx-zynqmp-dma fd550000.dma-controller: ZynqMP DMA driver Probe success
[ 4.373818] xilinx-zynqmp-dma fd560000.dma-controller: ZynqMP DMA driver Probe success
[ 4.381878] xilinx-zynqmp-dma fd570000.dma-controller: ZynqMP DMA driver Probe success
[ 4.390013] xilinx-zynqmp-dma ffa80000.dma-controller: ZynqMP DMA driver Probe success
[ 4.398079] xilinx-zynqmp-dma ffa90000.dma-controller: ZynqMP DMA driver Probe success
[ 4.406140] xilinx-zynqmp-dma ffaa0000.dma-controller: ZynqMP DMA driver Probe success
[ 4.414205] xilinx-zynqmp-dma ffab0000.dma-controller: ZynqMP DMA driver Probe success
[ 4.422273] xilinx-zynqmp-dma ffac0000.dma-controller: ZynqMP DMA driver Probe success
[ 4.430343] xilinx-zynqmp-dma ffad0000.dma-controller: ZynqMP DMA driver Probe success
[ 4.438407] xilinx-zynqmp-dma ffae0000.dma-controller: ZynqMP DMA driver Probe success
[ 4.446469] xilinx-zynqmp-dma ffaf0000.dma-controller: ZynqMP DMA driver Probe success
[ 4.454844] xilinx-zynqmp-dpdma fd4c0000.dma-controller: Xilinx DPDMA engine is probed
[ 4.465909] zynqmp-display fd4a0000.display: vtc bridge property not present
[ 4.475804] xilinx-dp-snd-codec fd4a0000.display:zynqmp_dp_snd_codec0: Xilinx DisplayPort Sound Codec probed
[ 4.485866] xilinx-dp-snd-pcm zynqmp_dp_snd_pcm0: Xilinx DisplayPort Sound PCM probed
[ 4.490796] zynqmp_pll_disable() clock disable failed for dpll_int, ret = -13
[ 4.493902] xilinx-dp-snd-pcm zynqmp_dp_snd_pcm1: Xilinx DisplayPort Sound PCM probed
[ 4.509608] xilinx-dp-snd-card fd4a0000.display:zynqmp_dp_snd_card: Xilinx DisplayPort Sound Card probed
[ 4.519167] OF: graph: no port node found in /axi/display@fd4a0000
[ 4.525669] xlnx-drm xlnx-drm.0: bound fd4a0000.display (ops 0xffff800008f030e0)
[ 4.696993] Console: switching to colour frame buffer device 240x67
[ 4.719921] zynqmp-display fd4a0000.display: [drm] fb0: xlnxdrmfb frame buffer device
[ 4.727945] [drm] Initialized xlnx 1.0.0 20130509 for fd4a0000.display on minor 0
[ 4.735446] zynqmp-display fd4a0000.display: ZynqMP DisplayPort Subsystem driver probed
[ 4.745145] spi-nor spi0.0: mt25qu512a (65536 Kbytes)
[ 4.746860] tpm_tis_spi spi2.0: 2.0 TPM (device-id 0x1B, rev-id 22)
[ 4.750254] 16 fixed-partitions partitions found on MTD device spi0.0
[ 4.758864] tpm tpm0: A TPM error (256) occurred attempting the self test
[ 4.762884] Creating 16 MTD partitions on "spi0.0":
[ 4.769663] tpm tpm0: starting up the TPM manually
[ 4.772679] random: fast init done
[ 4.774537] 0x000000000000-0x000000080000 : "Image Selector"
[ 4.789147] 0x000000080000-0x000000100000 : "Image Selector Golden"
[ 4.796066] 0x000000100000-0x000000120000 : "Persistent Register"
[ 4.802809] 0x000000120000-0x000000140000 : "Persistent Register Backup"
[ 4.810148] 0x000000140000-0x000000200000 : "Open_1"
[ 4.815782] 0x000000200000-0x000000f00000 : "Image A (FSBL, PMU, ATF, U-Boot)"
[ 4.823640] 0x000000f00000-0x000000f80000 : "ImgSel Image A Catch"
[ 4.830463] 0x000000f80000-0x000001c80000 : "Image B (FSBL, PMU, ATF, U-Boot)"
[ 4.838319] 0x000001c80000-0x000001d00000 : "ImgSel Image B Catch"
[ 4.845144] 0x000001d00000-0x000001e00000 : "Open_2"
[ 4.850754] 0x000001e00000-0x000002000000 : "Recovery Image"
[ 4.857048] 0x000002000000-0x000002200000 : "Recovery Image Backup"
[ 4.863955] 0x000002200000-0x000002220000 : "U-Boot storage variables"
[ 4.871129] 0x000002220000-0x000002240000 : "U-Boot storage variables backup"
[ 4.878914] 0x000002240000-0x000002250000 : "SHA256"
[ 4.884515] 0x000002250000-0x000004000000 : "User"
[ 4.890484] macb ff0b0000.ethernet: Not enabling partial store and forward
[ 4.923258] macb ff0b0000.ethernet eth0: Cadence GEM rev 0x50070106 at 0xff0b0000 irq 38 (00:0a:35:0f:2b:0e)
[ 4.934804] macb ff0c0000.ethernet: Not enabling partial store and forward
[ 4.978651] xilinx-axipmon ffa00000.perf-monitor: Probed Xilinx APM
[ 4.985185] xilinx-axipmon fd0b0000.perf-monitor: Probed Xilinx APM
[ 4.991657] xilinx-axipmon fd490000.perf-monitor: Probed Xilinx APM
[ 4.998119] xilinx-axipmon ffa10000.perf-monitor: Probed Xilinx APM
[ 5.005762] i2c i2c-1: Added multiplexed i2c bus 3
[ 5.010658] i2c i2c-1: Added multiplexed i2c bus 4
[ 5.015543] i2c i2c-1: Added multiplexed i2c bus 5
[ 5.020438] i2c i2c-1: Added multiplexed i2c bus 6
[ 5.025225] pca954x 1-0074: registered 4 multiplexed busses for I2C switch pca9546
[ 5.033772] at24 1-0050: supply vcc not found, using dummy regulator
[ 5.040419] at24 1-0050: 8192 byte 24c64 EEPROM, writable, 1 bytes/write
[ 5.047253] at24 1-0051: supply vcc not found, using dummy regulator
[ 5.053888] at24 1-0051: 8192 byte 24c64 EEPROM, writable, 1 bytes/write
[ 5.060782] cdns-i2c ff030000.i2c: 400 kHz mmio ff030000 irq 41
[ 5.068208] cdns-wdt fd4d0000.watchdog: Xilinx Watchdog Timer with timeout 60s
[ 5.075637] cdns-wdt ff150000.watchdog: Xilinx Watchdog Timer with timeout 10s
[ 5.085040] macb ff0c0000.ethernet: Not enabling partial store and forward
[ 5.091949] macb ff0c0000.ethernet: invalid hw address, using random
[ 5.105726] macb ff0c0000.ethernet eth1: Cadence GEM rev 0x50070106 at 0xff0c0000 irq 39 (62:df:cb:04:f0:35)
[ 5.139584] xhci-hcd xhci-hcd.1.auto: xHCI Host Controller
[ 5.145083] xhci-hcd xhci-hcd.1.auto: new USB bus registered, assigned bus number 1
[ 5.152830] xhci-hcd xhci-hcd.1.auto: hcc params 0x0238f625 hci version 0x100 quirks 0x0000000002010810
[ 5.162260] xhci-hcd xhci-hcd.1.auto: irq 55, io mem 0xfe200000
[ 5.168380] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.15
[ 5.176642] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 5.183864] usb usb1: Product: xHCI Host Controller
[ 5.188742] usb usb1: Manufacturer: Linux 5.15.19-xilinx-v2022.1 xhci-hcd
[ 5.195525] usb usb1: SerialNumber: xhci-hcd.1.auto
[ 5.201842] hub 1-0:1.0: USB hub found
[ 5.205599] hub 1-0:1.0: 1 port detected
[ 5.209726] xhci-hcd xhci-hcd.1.auto: xHCI Host Controller
[ 5.215212] xhci-hcd xhci-hcd.1.auto: new USB bus registered, assigned bus number 2
[ 5.222867] xhci-hcd xhci-hcd.1.auto: Host supports USB 3.0 SuperSpeed
[ 5.229489] usb usb2: New USB device found, idVendor=1d6b, idProduct=0003, bcdDevice= 5.15
[ 5.237751] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 5.244968] usb usb2: Product: xHCI Host Controller
[ 5.249838] usb usb2: Manufacturer: Linux 5.15.19-xilinx-v2022.1 xhci-hcd
[ 5.256615] usb usb2: SerialNumber: xhci-hcd.1.auto
[ 5.261738] hub 2-0:1.0: USB hub found
[ 5.265489] hub 2-0:1.0: 1 port detected
[ 5.293395] xhci-hcd xhci-hcd.2.auto: xHCI Host Controller
[ 5.298890] xhci-hcd xhci-hcd.2.auto: new USB bus registered, assigned bus number 3
[ 5.306625] xhci-hcd xhci-hcd.2.auto: hcc params 0x0238f625 hci version 0x100 quirks 0x0000000002010810
[ 5.316045] xhci-hcd xhci-hcd.2.auto: irq 58, io mem 0xfe300000
[ 5.322139] usb usb3: New USB device found, idVendor=1d6b, idProduct=0002, bcdDevice= 5.15
[ 5.330397] usb usb3: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 5.337609] usb usb3: Product: xHCI Host Controller
[ 5.342478] usb usb3: Manufacturer: Linux 5.15.19-xilinx-v2022.1 xhci-hcd
[ 5.349257] usb usb3: SerialNumber: xhci-hcd.2.auto
[ 5.354371] hub 3-0:1.0: USB hub found
[ 5.358131] hub 3-0:1.0: 1 port detected
[ 5.362417] xhci-hcd xhci-hcd.2.auto: xHCI Host Controller
[ 5.367902] xhci-hcd xhci-hcd.2.auto: new USB bus registered, assigned bus number 4
[ 5.375559] xhci-hcd xhci-hcd.2.auto: Host supports USB 3.0 SuperSpeed
[ 5.382201] usb usb4: New USB device found, idVendor=1d6b, idProduct=0003, bcdDevice= 5.15
[ 5.390470] usb usb4: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 5.397687] usb usb4: Product: xHCI Host Controller
[ 5.402560] usb usb4: Manufacturer: Linux 5.15.19-xilinx-v2022.1 xhci-hcd
[ 5.409342] usb usb4: SerialNumber: xhci-hcd.2.auto
[ 5.414439] hub 4-0:1.0: USB hub found
[ 5.418200] hub 4-0:1.0: 1 port detected
[ 5.425195] gpio-keys gpio-keys: Button without keycode
[ 5.430425] gpio-keys: probe of gpio-keys failed with error -22
[ 5.436425] of_cfs_init
[ 5.438886] of_cfs_init: OK
[ 5.441818] cfg80211: Loading compiled-in X.509 certificates for regulatory database
[ 5.489734] usb 1-1: new high-speed USB device number 2 using xhci-hcd
[ 5.567482] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'
[ 5.574011] clk: Not disabling unused clocks
[ 5.578538] ALSA device list:
[ 5.581489] #0: DisplayPort monitor
[ 5.585412] platform regulatory.0: Direct firmware load for regulatory.db failed with error -2
[ 5.594029] cfg80211: failed to load regulatory.db
[ 5.599315] Freeing unused kernel memory: 2176K
[ 5.617734] Run /init as init process
[ 5.646382] usb 1-1: New USB device found, idVendor=0424, idProduct=2744, bcdDevice= 2.21
[ 5.654586] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 5.661760] usb 1-1: Product: USB2744
[ 5.665417] usb 1-1: Manufacturer: Microchip Tech
[ 5.670242] usb 3-1: new high-speed USB device number 2 using xhci-hcd
[ 5.690406] random: python3: uninitialized urandom read (24 bytes read)
[ 5.709648] hub 1-1:1.0: USB hub found
[ 5.713489] hub 1-1:1.0: 4 ports detected
[ 5.773841] usb 2-1: new SuperSpeed USB device number 2 using xhci-hcd
[ 5.798119] usb 2-1: New USB device found, idVendor=0424, idProduct=5744, bcdDevice= 2.21
[ 5.806315] usb 2-1: New USB device strings: Mfr=2, Product=3, SerialNumber=0
[ 5.813462] usb 2-1: Product: USB5744
[ 5.817136] usb 2-1: Manufacturer: Microchip Tech
[ 5.842360] usb 3-1: New USB device found, idVendor=0424, idProduct=2744, bcdDevice= 2.21
[ 5.850549] usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 5.857686] usb 3-1: Product: USB2744
[ 5.861335] usb 3-1: Manufacturer: Microchip Tech
[ 5.885518] hub 2-1:1.0: USB hub found
[ 5.889415] hub 2-1:1.0: 3 ports detected
[ 5.926323] hub 3-1:1.0: USB hub found
[ 5.930150] hub 3-1:1.0: 3 ports detected
[ 5.990117] usb 4-1: new SuperSpeed USB device number 2 using xhci-hcd
[ 6.014105] usb 4-1: New USB device found, idVendor=0424, idProduct=5744, bcdDevice= 2.21
[ 6.022299] usb 4-1: New USB device strings: Mfr=2, Product=3, SerialNumber=0
[ 6.029436] usb 4-1: Product: USB5744
[ 6.033096] usb 4-1: Manufacturer: Microchip Tech
[ 6.065746] usb 1-1.1: new high-speed USB device number 3 using xhci-hcd
[ 6.102259] hub 4-1:1.0: USB hub found
[ 6.106133] hub 4-1:1.0: 2 ports detected
[ 6.175996] usb 1-1.1: New USB device found, idVendor=0424, idProduct=2240, bcdDevice= 1.98
[ 6.184347] usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 6.191655] usb 1-1.1: Product: Ultra Fast Media
[ 6.196347] usb 1-1.1: Manufacturer: Generic
[ 6.200609] usb 1-1.1: SerialNumber: 000000225001
[ 6.205979] usb-storage 1-1.1:1.0: USB Mass Storage device detected
[ 6.212495] scsi host0: usb-storage 1-1.1:1.0
[ 6.285694] usb 3-1.3: new high-speed USB device number 3 using xhci-hcd
[ 6.293691] usb 1-1.4: new high-speed USB device number 4 using xhci-hcd
[ 6.344751] macb ff0c0000.ethernet eth1: PHY [ff0c0000.ethernet-ffffffff:08] driver [TI DP83867] (irq=POLL)
[ 6.354507] macb ff0c0000.ethernet eth1: configuring for phy/rgmii-id link mode
[ 6.362383] pps pps0: new PPS source ptp0
[ 6.366471] macb ff0c0000.ethernet: gem-ptp-timer ptp clock registered.
MAC address for eth1 is updated to 00:0a:35:0f:40:0f
[ 6.381114] random: python3: uninitialized urandom read (24 bytes read)
[ 6.394442] usb 3-1.3: New USB device found, idVendor=0424, idProduct=2740, bcdDevice= 2.00
[ 6.402831] usb 3-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 6.410177] usb 3-1.3: Product: Hub Controller
[ 6.414623] usb 3-1.3: Manufacturer: Microchip Tech
[ 6.420771] usb 1-1.4: New USB device found, idVendor=0424, idProduct=2740, bcdDevice= 2.00
[ 6.429153] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 6.436473] usb 1-1.4: Product: Hub Controller
[ 6.440925] usb 1-1.4: Manufacturer: Microchip Tech
[ 6.986246] macb ff0b0000.ethernet eth0: PHY [ff0c0000.ethernet-ffffffff:04] driver [TI DP83867] (irq=POLL)
[ 6.996003] macb ff0b0000.ethernet eth0: configuring for phy/sgmii link mode
[ 7.003632] pps pps1: new PPS source ptp1
[ 7.007717] macb ff0b0000.ethernet: gem-ptp-timer ptp clock registered.
MAC address for eth0 is updated to 00:0a:35:0f:2b:0e
[ 7.226496] scsi 0:0:0:0: Direct-Access Generic Ultra HS-COMBO 1.98 PQ: 0 ANSI: 0
[ 7.235944] sd 0:0:0:0: [sda] 60526592 512-byte logical blocks: (31.0 GB/28.9 GiB)
[ 7.244029] sd 0:0:0:0: [sda] Write Protect is off
[ 7.249394] sd 0:0:0:0: [sda] No Caching mode page found
[ 7.254706] sd 0:0:0:0: [sda] Assuming drive cache: write through
[ 7.264511] sda: sda1 sda2
[ 7.269033] sd 0:0:0:0: [sda] Attached SCSI removable disk
root: clean, 70495/524288 files, 420085/1048576 blocks
[ 8.660622] EXT4-fs (sda2): mounted filesystem with ordered data mode. Opts: (null). Quota mode: none.
[ 9.365845] systemd[1]: System time before build time, advancing clock.
[ 9.415775] systemd[1]: systemd 249.7+ running in system mode (+PAM -AUDIT -SELINUX -APPARMOR +IMA -SMACK +SECCOMP -GCRYPT -GNUTLS -OPENSSL +ACL +BLKID -CURL -ELFUTILS -FIDO2 -IDN2 -IDN -IPTC +KMOD -LIBCRYPTSETUP +LIBFDISK -PCRE2 -PWQUALITY -P11KIT -QRENCODE -BZIP2 -LZ4 -XZ -ZLIB +ZSTD +XKBCOMMON +UTMP +SYSVINIT default-hierarchy=hybrid)
[ 9.446276] systemd[1]: Detected architecture arm64.
Welcome to PetaLinux 2022.1_update1_05131710 (honister)!
[ 9.494722] systemd[1]: Hostname set to <xilinx-kr260-starterkit-20221>.
[ 9.516075] random: systemd: uninitialized urandom read (16 bytes read)
[ 9.522708] systemd[1]: Initializing machine ID from random generator.
[ 9.653879] systemd-sysv-generator[521]: SysV service '/etc/init.d/save-rtc.sh' lacks a native systemd unit file. Automatically generating a unit file for compatibility. Please update package to include a native systemd unit file, in order to make it more safe and robust.
[ 9.688215] systemd-sysv-generator[521]: SysV service '/etc/init.d/inetd.busybox' lacks a native systemd unit file. Automatically generating a unit file for compatibility. Please update package to include a native systemd unit file, in order to make it more safe and robust.
[ 9.712920] systemd-sysv-generator[521]: SysV service '/etc/init.d/umountfs' lacks a native systemd unit file. Automatically generating a unit file for compatibility. Please update package to include a native systemd unit file, in order to make it more safe and robust.
[ 9.737804] systemd-sysv-generator[521]: SysV service '/etc/init.d/dropbear' lacks a native systemd unit file. Automatically generating a unit file for compatibility. Please update package to include a native systemd unit file, in order to make it more safe and robust.
[ 9.761834] systemd-sysv-generator[521]: SysV service '/etc/init.d/reboot' lacks a native systemd unit file. Automatically generating a unit file for compatibility. Please update package to include a native systemd unit file, in order to make it more safe and robust.
[ 9.785608] systemd-sysv-generator[521]: SysV service '/etc/init.d/watchdog-init' lacks a native systemd unit file. Automatically generating a unit file for compatibility. Please update package to include a native systemd unit file, in order to make it more safe and robust.
[ 9.812075] systemd-sysv-generator[521]: SysV service '/etc/init.d/halt' lacks a native systemd unit file. Automatically generating a unit file for compatibility. Please update package to include a native systemd unit file, in order to make it more safe and robust.
[ 9.835824] systemd-sysv-generator[521]: SysV service '/etc/init.d/umountnfs.sh' lacks a native systemd unit file. Automatically generating a unit file for compatibility. Please update package to include a native systemd unit file, in order to make it more safe and robust.
[ 9.862834] systemd-sysv-generator[521]: SysV service '/etc/init.d/single' lacks a native systemd unit file. Automatically generating a unit file for compatibility. Please update package to include a native systemd unit file, in order to make it more safe and robust.
[ 9.886590] systemd-sysv-generator[521]: SysV service '/etc/init.d/urandom' lacks a native systemd unit file. Automatically generating a unit file for compatibility. Please update package to include a native systemd unit file, in order to make it more safe and robust.
[ 9.912931] systemd-sysv-generator[521]: SysV service '/etc/init.d/sendsigs' lacks a native systemd unit file. Automatically generating a unit file for compatibility. Please update package to include a native systemd unit file, in order to make it more safe and robust.
[ 10.073989] macb ff0b0000.ethernet eth0: unable to generate target frequency: 125000000 Hz
[ 10.083372] macb ff0b0000.ethernet eth0: Link is Up - 1Gbps/Full - flow control off
[ 10.091065] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[ 10.294702] systemd[1]: Queued start job for default target Graphical Interface.
[ 10.303027] random: systemd: uninitialized urandom read (16 bytes read)
[ 10.337614] systemd[1]: Created slice Slice /system/getty.
[ OK ] Created slice Slice /system/getty.
[ 10.357870] random: systemd: uninitialized urandom read (16 bytes read)
[ 10.365745] systemd[1]: Created slice Slice /system/modprobe.
[ OK ] Created slice Slice /system/modprobe.
[ 10.386945] systemd[1]: Created slice Slice /system/serial-getty.
[ OK ] Created slice Slice /system/serial-getty.
[ 10.410720] systemd[1]: Created slice User and Session Slice.
[ OK ] Created slice User and Session Slice.
[ 10.433949] systemd[1]: Started Dispatch Password Requests to Console Directory Watch.
[ OK ] Started Dispatch Password …ts to Console Directory Watch.
[ 10.457878] systemd[1]: Started Forward Password Requests to Wall Directory Watch.
[ OK ] Started Forward Password R…uests to Wall Directory Watch.
[ 10.482012] systemd[1]: Reached target Path Units.
[ OK ] Reached target Path Units.
[ 10.497796] systemd[1]: Reached target Remote File Systems.
[ OK ] Reached target Remote File Systems.
[ 10.517784] systemd[1]: Reached target Slice Units.
[ OK ] Reached target Slice Units.
[ 10.533796] systemd[1]: Reached target Swaps.
[ OK ] Reached target Swaps.
[ 10.551213] systemd[1]: Listening on RPCbind Server Activation Socket.
[ OK ] Listening on RPCbind Server Activation Socket.
[ 10.573781] systemd[1]: Reached target RPC Port Mapper.
[ OK ] Reached target RPC Port Mapper.
[ 10.594007] systemd[1]: Listening on Syslog Socket.
[ OK ] Listening on Syslog Socket.
[ 10.609899] systemd[1]: Listening on initctl Compatibility Named Pipe.
[ OK ] Listening on initctl Compatibility Named Pipe.
[ 10.634213] systemd[1]: Listening on Journal Audit Socket.
[ OK ] Listening on Journal Audit Socket.
[ 10.653957] systemd[1]: Listening on Journal Socket (/dev/log).
[ OK ] Listening on Journal Socket (/dev/log).
[ 10.674044] systemd[1]: Listening on Journal Socket.
[ OK ] Listening on Journal Socket.
[ 10.690189] systemd[1]: Listening on Network Service Netlink Socket.
[ OK ] Listening on Network Service Netlink Socket.
[ 10.714940] systemd[1]: Listening on udev Control Socket.
[ OK ] Listening on udev Control Socket.
[ 10.737987] systemd[1]: Listening on udev Kernel Socket.
[ OK ] Listening on udev Kernel Socket.
[ 10.757981] systemd[1]: Listening on User Database Manager Socket.
[ OK ] Listening on User Database Manager Socket.
[ 10.784181] systemd[1]: Mounting Huge Pages File System...
Mounting Huge Pages File System...
[ 10.804251] systemd[1]: Mounting POSIX Message Queue File System...
Mounting POSIX Message Queue File System...
[ 10.828313] systemd[1]: Mounting Kernel Debug File System...
Mounting Kernel Debug File System...
[ 10.846086] systemd[1]: Condition check resulted in Kernel Trace File System being skipped.
[ 10.858140] systemd[1]: Mounting Temporary Directory /tmp...
Mounting Temporary Directory /tmp...
[ 10.875471] systemd[1]: Condition check resulted in Create List of Static Device Nodes being skipped.
[ 10.887616] systemd[1]: Starting Load Kernel Module configfs...
Starting Load Kernel Module configfs...
[ 10.908855] systemd[1]: Starting Load Kernel Module drm...
Starting Load Kernel Module drm...
[ 10.928619] systemd[1]: Starting Load Kernel Module fuse...
Starting Load Kernel Module fuse...
[ 10.948648] systemd[1]: Starting RPC Bind...
Starting RPC Bind...
[ 10.961951] systemd[1]: Condition check resulted in File System Check on Root Device being skipped.
[ 10.989649] systemd[1]: Starting Load Kernel Modules...
Starting Load Kernel Modules...
[ 11.008549] systemd[1]: Starting Remount Root and Kernel File Systems...
Starting Remount Root and Kernel File Systems...
[ 11.029655] EXT4-fs (sda2): re-mounted. Opts: (null). Quota mode: none.
[ 11.038909] dmaproxy: loading out-of-tree module taints kernel.
[ 11.048613] systemd[1]: Starting Coldplug All udev Devices...
Starting Coldplug All udev Devices...
[ 11.075737] systemd[1]: Mounted Huge Pages File System.
[ OK ] Mounted Huge Pages File System.
[ 11.098218] systemd[1]: Started RPC Bind.
[ OK ] Started RPC Bind.
[ 11.114255] systemd[1]: Mounted POSIX Message Queue File System.
[ OK ] Mounted POSIX Message Queue File System.
[ 11.138113] systemd[1]: Mounted Kernel Debug File System.
[ OK ] Mounted Kernel Debug File System.
[ 11.158128] systemd[1]: Mounted Temporary Directory /tmp.
[ OK ] Mounted Temporary Directory /tmp[ 11.168793] random: crng init done
[ 11.173114] random: 5 urandom warning(s) missed due to ratelimiting
.
[ 11.194773] systemd[1]: modprobe@configfs.service: Deactivated successfully.
[ 11.203042] systemd[1]: Finished Load Kernel Module configfs.
[ OK ] Finished Load Kernel Module configfs.
[ 11.226703] systemd[1]: modprobe@drm.service: Deactivated successfully.
[ 11.234546] systemd[1]: Finished Load Kernel Module drm.
[ OK ] Finished Load Kernel Module drm.
[ 11.258640] systemd[1]: modprobe@fuse.service: Deactivated successfully.
[ 11.266745] systemd[1]: Finished Load Kernel Module fuse.
[ OK ] Finished Load Kernel Module fuse.
[ 11.291500] systemd[1]: Finished Load Kernel Modules.
[ OK ] Finished Load Kernel Modules.
[ 11.307091] systemd[1]: Finished Remount Root and Kernel File Systems.
[ OK ] Finished Remount Root and Kernel File Systems.
[ 11.334310] systemd[1]: Mounting NFSD configuration filesystem...
Mounting NFSD configuration filesystem...
[ 11.354188] systemd[1]: Condition check resulted in FUSE Control File System being skipped.
[ 11.365202] systemd[1]: Mounting Kernel Configuration File System...
Mounting Kernel Configuration File System...
[ 11.387986] systemd[1]: Condition check resulted in Rebuild Hardware Database being skipped.
[ 11.396750] systemd[1]: Condition check resulted in Platform Persistent Storage Archival being skipped.
[ 11.409060] systemd[1]: Starting Apply Kernel Variables...
Starting Apply Kernel Variables...
Starting Create System Users...
[ 11.451507] systemd[1]: Failed to mount NFSD configuration filesystem.
[FAILED] Failed to mount NFSD configuration filesystem.
See 'systemctl status proc-fs-nfsd.mount' for details.
[DEPEND] Dependency failed for NFS server and services.
[DEPEND] Dependency failed for NFS Mount Daemon.
[ OK ] Mounted Kernel Configuration File System.
[ OK ] Finished Apply Kernel Variables.
[ OK ] Finished Create System Users.
Starting Create Static Device Nodes in /dev...
[ OK ] Finished Create Static Device Nodes in /dev.
[ OK ] Reached target Preparation for Local File Systems.
Mounting /var/volatile...
[ OK ] Started Entropy Daemon based on the HAVEGE algorithm.
Starting Journal Service...
Starting Rule-based Manage…for Device Events and Files...
[ OK ] Mounted /var/volatile.
[ OK ] Finished Coldplug All udev Devices.
Starting Load/Save Random Seed...
[ OK ] Finished Load/Save Random Seed.
[ OK ] Started Journal Service.
Starting Flush Journal to Persistent Storage...
[ OK ] Started Rule-based Manager for Device Events and Files.
[ OK ] Finished Flush Journal to Persistent Storage.
[ OK ] Reached target Sound Card.
[ OK ] Found device Ultra_HS-COMBO boot.
[ OK ] Listening on Load/Save RF …itch Status /dev/rfkill Watch.
Mounting /boot...
[ OK ] Mounted /boot.
[ OK ] Reached target Local File Systems.
Starting Rebuild Dynamic Linker Cache...
Starting Create Volatile Files and Directories...
[ OK ] Finished Create Volatile Files and Directories.
Starting Run pending postinsts...
Starting Rebuild Journal Catalog...
Starting Network Time Synchronization...
Starting Record System Boot/Shutdown in UTMP...
[ OK ] Finished Record System Boot/Shutdown in UTMP.
[ OK ] Finished Rebuild Journal Catalog.
[ OK ] Started Network Time Synchronization.
[ OK ] Reached target System Time Set.
[ OK ] Finished Rebuild Dynamic Linker Cache.
Starting Update is Completed...
[ OK ] Finished Update is Completed.
[ OK ] Finished Run pending postinsts.
[ OK ] Reached target System Initialization.
[ OK ] Started Daily rotation of log files.
[ OK ] Started Daily Cleanup of Temporary Directories.
[ OK ] Reached target Timer Units.
[ OK ] Listening on D-Bus System Message Bus Socket.
[ OK ] Listening on dropbear.socket.
[ OK ] Reached target Socket Units.
[ OK ] Reached target Basic System.
[ OK ] Started archconfig.
[ OK ] Started Job spooling tools.
[ OK ] Started Periodic Command Scheduler.
[ OK ] Started D-Bus System Message Bus.
[ OK ] Started dfx-mgrd Dynamic Function eXchange.
[ OK ] Started Start fan control, if configured.
Starting inetd.busybox.service...
Starting IPv6 Packet Filtering Framework...
Starting IPv4 Packet Filtering Framework...
[ OK ] Started System Logging Service.
Starting User Login Management...
[ OK ] Started Xserver startup without a display manager.
[ OK ] Finished IPv6 Packet Filtering Framework.
[ OK ] Finished IPv4 Packet Filtering Framework.
[ OK ] Reached target Preparation for Network.
Nov 19 09:19:17 xilinx-kr260-starterkit-20221 kernel: GIC: Adjusting CPU interface base to 0x00000000f902f000
Starting Network Configuration...
Nov 19 09:19:19 xilinx-kr260-starterkit-20221 kernel: armv8-pmu pmu: hw perfevents: no interrupt-affinity property, guessing.
Nov 19 09:19:20 xilinx-kr260-starterkit-20221 kernel: cacheinfo: Unable to detect cache hierarchy for CPU 0
Nov 19 09:19:20 xilinx-kr260-starterkit-20221 kernel: mtdoops: mtd device (mtddev=name/number) must be supplied
Nov 19 09:19:20 xilinx-kr260-starterkit-20221 kernel: SPI driver wl1271_spi has no spi_device_id for ti,wl1271
Nov 19 09:19:20 xilinx-kr260-starterkit-20221 kernel: SPI driver wl1271_spi has no spi_device_id for ti,wl1273
Nov 19 09:19:20 xilinx-kr260-starterkit-20221 kernel: SPI driver wl1271_spi has no spi_device_id for ti,wl1281
Nov 19 09:19:20 xilinx-kr260-starterkit-20221 kernel: SPI driver wl1271_spi has no spi_device_id for ti,wl1283
Nov 19 09:19:20 xilinx-kr260-starterkit-20221 kernel: SPI driver wl1271_spi has no spi_device_id for ti,wl1285
Nov 19 09:19:20 xilinx-kr260-starterkit-20221 kernel: SPI driver wl1271_spi has no spi_device_id for ti,wl1801
Nov 19 09:19:20 xilinx-kr260-starterkit-20221 kernel: SPI driver wl1271_spi has no spi_device_id for ti,wl1805
Nov 19 09:19:20 xilinx-kr260-starterkit-20221 kernel: SPI driver wl1271_spi has no spi_device_id for ti,wl1807
Nov 19 09:19:20 xilinx-kr260-starterkit-20221 kernel: SPI driver wl1271_spi has no spi_device_id for ti,wl1831
Nov 19 09:19:20 xilinx-kr260-starterkit-20221 kernel: SPI driver wl1271_spi has no spi_device_id for ti,wl1835
Nov 19 09:19:20 xilinx-kr260-starterkit-20221 kernel: SPI driver wl1271_spi has no spi_device_id for ti,wl1837
Nov 19 09:19:21 xilinx-kr260-starterkit-20221 kernel: zynqmp_pll_disable() clock disable failed for dpll_int, ret = -13
Nov 19 09:19:21 xilinx-kr260-starterkit-20221 kernel: OF: graph: no port node found in /axi/display@fd4a0000
Nov 19 09:19:21 xilinx-kr260-starterkit-20221 kernel: tpm tpm0: A TPM error (256) occurred attempting the self test
Nov 19 09:19:22 xilinx-kr260-starterkit-20221 kernel: at24 1-0050: supply vcc not found, using dummy regulator
Nov 19 09:19:22 xilinx-kr260-starterkit-20221 kernel: at24 1-0051: supply vcc not found, using dummy regulator
Nov 19 09:19:22 xilinx-kr260-starterkit-20221 kernel: gpio-keys gpio-keys: Button without keycode
Nov 19 09:19:22 xilinx-kr260-starterkit-20221 kernel: gpio-keys: probe of gpio-keys failed with error -22
Nov 19 09:19:22 xilinx-kr260-starterkit-20221 kernel: clk: Not disabling unused clocks
Nov 19 09:19:22 xilinx-kr260-starterkit-20221 kernel: platform regulatory.0: Direct firmware load for regulatory.db failed with error -2
Nov 19 09:19:24 xilinx-kr260-starterkit-20221 kernel: sd 0:0:0:0: [sda] No Caching mode page found
Nov 19 09:19:24 xilinx-kr260-starterkit-20221 kernel: sd 0:0:0:0: [sda] Assuming drive cache: write through
Nov 19 09:19:27 xilinx-kr260-starterkit-20221 kernel: macb ff0b0000.ethernet eth0: unable to generate target frequency: 125000000 Hz
Nov 19 09:19:28 xilinx-kr260-starterkit-20221 kernel: dmaproxy: loading out-of-tree module taints kernel.
[ OK ] Started inetd.busybox.service.
[ OK ] Started User Login Management.
[ OK ] Started Network Configuration.
Starting Wait for Network to be Configured...
Starting Network Name Resolution...
[ OK ] Finished Wait for Network to be Configured.
Nov 19 09:19:37 xilinx-kr260-starterkit-20221 kernel: OF: overlay: WARNING: memory leak will occur if overlay removed, property: /fpga-full/firmware-name
Nov 19 09:19:37 xilinx-kr260-starterkit-20221 kernel: OF: overlay: WARNING: memory leak will occur if overlay removed, property: /fpga-full/resets
[ OK ] Started Network Name Resolution.
[ OK ] Reached target Network.
[ OK ] Reached target Network is Online.
[ OK ] Reached target Host and Network Name Lookups.
Starting DNS forwarder and DHCP server...
[ OK ] Started NFS status monitor for NFSv2/3 locking..
[ OK ] Started Respond to IPv6 Node Information Queries.
Starting Network Time Service...
[ OK ] Started Network Router Discovery Daemon.
[ OK ] Started som-dashboard-init.
Starting Permit User Sessions...
Starting Target Communication Framework agent...
[ OK ] Finished Permit User Sessions.
[ OK ] Started Getty on tty1.
[ OK ] Started Serial Getty on ttyPS1.
[ OK ] Reached target Login Prompts.
[ OK ] Started DNS forwarder and DHCP server.
[ OK ] Started Target Communication Framework agent.
[ OK ] Started Network Time Service.
[ OK ] Reached target Multi-User System.
[ OK ] Reached target Graphical Interface.
Starting Record Runlevel Change in UTMP...
[ OK ] Finished Record Runlevel Change in U[ 20.952411] som-dashboard.sh[1261]: SOM Dashboard will be running at http://192.168.3.28:5006/som-dashboard
PetaLinux 2022.1_update1_05131710 xilinx-kr260-starterkit-20221 ttyPS1
xilinx-kr260-starterkit-20221 login: [ 30.112846] som-dashboard.sh[1292]: 2021-11-19 09:19:48,877 Starting Bokeh server version 2.4.2 (running on Tornado 6.1)
[ 30.120355] som-dashboard.sh[1292]: 2021-11-19 09:19:48,885 User authentication hooks NOT provided (default user enabled)
[ 30.144658] som-dashboard.sh[1292]: 2021-11-19 09:19:48,910 Bokeh app running at: http://localhost:5006/som-dashboard
[ 30.144998] som-dashboard.sh[1292]: 2021-11-19 09:19:48,910 Starting Bokeh server with process id: 1292
を追加した。uio_pdrv_genirq.of_id=generic-uio
Filesystem Packages -> base -> dnf -> dnf
Filesystem Packages -> x11 -> base -> libdrm -> libdrm
Filesystem Packages -> x11 -> base -> libdrm -> libdrm-tests
Filesystem Packages -> x11 -> base -> libdrm -> libdrm-kms
Filesystem Packages -> libs -> xrt -> xrt
Filesystem Packages -> libs -> xrt -> xrt-dev
Filesystem Packages -> libs -> zocl -> zocl
Filesystem Packages -> libs -> opencl-headers -> opencl-headers
Filesystem Packages -> libs -> opencl-clhpp -> opencl-clhpp-dev
Petaliunx Package Groups -> packagegroup-petalinux -> packagegroup-petalinux
Petaliunx Package Groups -> packagegroup-petalinux-gstreamer -> packagegroup-petalinux-gstreamer
Petaliunx Package Groups -> packagegroup-petalinux-x11 -> packagegroup-petalinux-x11
Petaliunx Package Groups -> packagegroup-petalinux-opencv -> packagegroup-petalinux-opencv
Petaliunx Package Groups -> packagegroup-petalinux-opencv -> packagegroup-petalinux-opencv-dev
Petaliunx Package Groups -> packagegroup-petalinux-v4lutils -> packagegroup-petalinux-v4lutils
[Place 30-675] Sub-optimal placement for a global clock-capable IO pin and BUFG pair.If this sub optimal condition is acceptable for this design, you may use the CLOCK_DEDICATED_ROUTE constraint in the .xdc file to demote this message to a WARNING. However, the use of this override is highly discouraged. These examples can be used directly in the .xdc file to override this clock rule.
< set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets pclk_IBUF_inst/O] >
pclk_IBUF_inst/IBUFCTRL_INST (IBUFCTRL.O) is locked to IOB_X0Y7
pclk_IBUF_BUFG_inst (BUFGCE.I) is provisionally placed by clockplacer on BUFGCE_X0Y1
The above error could possibly be related to other connected instances. Following is a list of
all the related clock rules and their respective instances.
Clock Rule: rule_bufgce_bufg_conflict
Status: PASS
Rule Description: Only one of the 2 available sites (BUFGCE or BUFGCE_DIV/BUFGCTRL) in a pair can be
used at the same time
and pclk_IBUF_BUFG_inst (BUFGCE.O) is provisionally placed by clockplacer on BUFGCE_X0Y1
を追加した。set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets pclk_IBUF_inst/O]
set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]
#Fan Speed Enable
set_property PACKAGE_PIN A12 [get_ports {fan_enb_b[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {fan_enb_b[0]}]
set_property SLEW SLOW [get_ports {fan_enb_b[0]}]
set_property DRIVE 4 [get_ports {fan_enb_b[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports pclk]
set_property IOSTANDARD LVCMOS33 [get_ports {cam_data[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {cam_data[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {cam_data[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {cam_data[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {cam_data[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {cam_data[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {cam_data[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {cam_data[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports href]
set_property IOSTANDARD LVCMOS33 [get_ports iic_rtl_scl_io]
set_property IOSTANDARD LVCMOS33 [get_ports iic_rtl_sda_io]
set_property IOSTANDARD LVCMOS33 [get_ports standby]
set_property IOSTANDARD LVCMOS33 [get_ports vsync]
set_property IOSTANDARD LVCMOS33 [get_ports xck]
set_property PACKAGE_PIN AF10 [get_ports pclk]
set_property PACKAGE_PIN AE12 [get_ports {cam_data[7]}]
set_property PACKAGE_PIN AF11 [get_ports {cam_data[6]}]
set_property PACKAGE_PIN AF12 [get_ports {cam_data[5]}]
set_property PACKAGE_PIN AG11 [get_ports {cam_data[4]}]
set_property PACKAGE_PIN AG10 [get_ports {cam_data[3]}]
set_property PACKAGE_PIN AH12 [get_ports {cam_data[2]}]
set_property PACKAGE_PIN AH10 [get_ports {cam_data[1]}]
set_property PACKAGE_PIN AH11 [get_ports {cam_data[0]}]
set_property PACKAGE_PIN AD10 [get_ports href]
set_property PACKAGE_PIN AC12 [get_ports iic_rtl_scl_io]
set_property PACKAGE_PIN AD11 [get_ports iic_rtl_sda_io]
set_property PACKAGE_PIN AE10 [get_ports standby]
set_property PACKAGE_PIN AD12 [get_ports vsync]
set_property PACKAGE_PIN AA10 [get_ports xck]
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets pclk_IBUF_inst/O]
set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]
#Fan Speed Enable
set_property PACKAGE_PIN A12 [get_ports {fan_enb_b}]
set_property IOSTANDARD LVCMOS33 [get_ports {fan_enb_b}]
set_property SLEW SLOW [get_ports {fan_enb_b}]
set_property DRIVE 4 [get_ports {fan_enb_b}]
// gyro_test.c
// 2023/04/05 by marsee
//
#include <stdio.h>
#include <stdint.h>
#include "xil_io.h"
#include "xparameters.h"
#include <unistd.h>
#include "xtime_l.h"
#define I2CM_PRER_LO XPAR_I2CM_AXI4LS_0_BASEADDR
#define I2CM_PRER_HI (XPAR_I2CM_AXI4LS_0_BASEADDR+0x4)
#define I2CM_CTR (XPAR_I2CM_AXI4LS_0_BASEADDR+0x8)
#define I2CM_RXR (XPAR_I2CM_AXI4LS_0_BASEADDR+0xc)
#define I2CM_TXR (XPAR_I2CM_AXI4LS_0_BASEADDR+0xc)
#define I2CM_CR (XPAR_I2CM_AXI4LS_0_BASEADDR+0x10)
#define I2CM_SR (XPAR_I2CM_AXI4LS_0_BASEADDR+0x10)
#define CR_STA 0x80 // generate (repeated) start condition
#define CR_STO 0x40 // generate stop condition
#define CR_RD 0x20 // read from slave
#define CR_WR 0x10 // write from slave
#define CR_NACK 0x08 // when a receiver, sent ACK (ACK = ‘0’) or NACK (ACK = ‘1’)
#define CR_IACK 0x01 // Interrupt acknowledge. When set, clears a pending interrupt.
#define SR_RxACK 0x80 // Received acknowledge from slave.This flag represents acknowledge from the addressed slave.
// ‘1’ = No acknowledge received , ‘0’ = Acknowledge received
#define SR_Busy 0x40 // I2C bus busy
// ‘1’ after START signal detected , ‘0’ after STOP signal detected
#define SR_AL 0x20 // Arbitration lost. This bit is set when the core lost arbitration. Arbitration is lost when:
// * a STOP signal is detected, but non requested , * The master drives SDA high, but SDA is low.
#define SR_TIP 0x02 // Transfer in progress.
// ‘1’ when transferring data , ‘0’ when transfer complete
#define SR_IF 0x01 // Interrupt Flag. This bit is set when an interrupt is pending, which
// will cause a processor interrupt request if the IEN bit is set.
// The Interrupt Flag is set when:
// * one byte transfer has been completed , * arbitration is lost
//#define DEBUG
void idle_check(){
while(Xil_In32(I2CM_SR) & SR_TIP); // TIP bit is clear
}
void acc_sensor_write(uint8_t dev_addr, uint8_t waddr, uint8_t wdata){
dev_addr &= 0xfe;
idle_check();
Xil_Out32(I2CM_TXR, (u32)dev_addr);
Xil_Out32(I2CM_CR, (u32)(CR_STA|CR_WR));
idle_check();
Xil_Out32(I2CM_TXR, (u32)waddr);
Xil_Out32(I2CM_CR, (u32)CR_WR);
idle_check();
Xil_Out32(I2CM_TXR, (u32)wdata);
Xil_Out32(I2CM_CR, (u32)(CR_STO|CR_WR));
idle_check();
}
uint8_t acc_sensor_read1(uint8_t dev_addr, uint8_t raddr){
const uint8_t devw_addr = dev_addr & 0xfe;
dev_addr |= 0x01;
idle_check();
Xil_Out32(I2CM_TXR, (u32)devw_addr);
Xil_Out32(I2CM_CR, (u32)(CR_STA|CR_WR));
idle_check();
Xil_Out32(I2CM_TXR, (u32)raddr);
Xil_Out32(I2CM_CR, (u32)CR_WR);
idle_check();
Xil_Out32(I2CM_TXR, (u32)dev_addr);
Xil_Out32(I2CM_CR, (u32)(CR_STA|CR_WR));
idle_check();
Xil_Out32(I2CM_CR, (u32)(CR_STO|CR_RD|CR_NACK));
idle_check();
uint8_t rdata8 = (uint8_t)(Xil_In32(I2CM_RXR) & 0xff);
return(rdata8);
}
void acc_sensor_read2(uint8_t dev_addr, uint8_t raddr, int32_t *rdata){
uint8_t rdata8a[2];
const uint8_t devw_addr = dev_addr & 0xfe;
dev_addr |= 0x01;
idle_check();
Xil_Out32(I2CM_TXR, (u32)devw_addr);
Xil_Out32(I2CM_CR, (u32)(CR_STA|CR_WR));
idle_check();
Xil_Out32(I2CM_TXR, (u32)raddr);
Xil_Out32(I2CM_CR, (u32)CR_WR);
idle_check();
Xil_Out32(I2CM_TXR, (u32)dev_addr);
Xil_Out32(I2CM_CR, (u32)(CR_STA|CR_WR));
idle_check();
Xil_Out32(I2CM_CR, (u32)CR_RD);
idle_check();
rdata8a[0] = (uint8_t)(Xil_In32(I2CM_RXR) & 0xff);
Xil_Out32(I2CM_CR, (u32)(CR_STO|CR_RD|CR_NACK));
idle_check();
rdata8a[1] = (uint8_t)(Xil_In32(I2CM_RXR) & 0xff);
*rdata = (int32_t)rdata8a[0] + (((int32_t)rdata8a[1])<<8);
/*if(*rdata & 0x8000) // Is the 16th bit 1?
*rdata |= 0xffff0000; // sign extension */
}
void initialize_code(){
// I2C I2C operating frequency setting 396KHz/100MHz: I2CM_PRER_LO=0x2c
Xil_Out32(I2CM_PRER_LO, (u32)0x2c);
Xil_Out32(I2CM_PRER_HI, (u32)0x0);
Xil_Out32(I2CM_CTR, 0x80); // enable core
acc_sensor_write(0xd4, 0x20, 0xef);
// CTRL1(20h) : PD = 8:Normal Mode, Zen = 4 : Z axis enable,
// Yen = 2 : Y axis enable, Xen = 1 : X axis enable
// DR = 0xC0 : 11 - 800 Hz, BW = 10 - LPF1 Cut off 211 Hz, LPF2 Cut off -
acc_sensor_write(0xd4, 0x23, 0x00); // CTRL4(23h) 245 dps
//acc_sensor_write(0xd4, 0x23, 0x20); // CTRL4(23h) 2000 dps
//acc_sensor_write(0xd4, 0x39, 0x00); // LOW_ODR(39h) Low_ODR = 0
}
int main(){
int32_t dataX, dataY, dataZ;
int32_t dataXL, dataYL, dataZL;
int32_t dataXH, dataYH, dataZH;
uint8_t read_data, read_rdy;
XTime time;
double time0, timeb;
double past_time;
initialize_code();
XTime_GetTime(&time);
timeb = (double)((long long int)time)/333333.3435; // ms
for(int i=0; i<10000; i++){
do {
read_data = acc_sensor_read1(0xd5, 0x27); // STATUS(27h) read
read_rdy = read_data & 0x08; // XYXDA(X, Y, Z -axis new data available) enable?
}while(read_rdy != 0x08);
dataXL = acc_sensor_read1(0xd5, 0x28);
dataXH = acc_sensor_read1(0xd5, 0x29);
dataX = (dataXH<<8)+dataXL;
dataYL = acc_sensor_read1(0xd5, 0x2a);
dataYH = acc_sensor_read1(0xd5, 0x2b);
dataY = (dataYH<<8)+dataYL;
dataZL = acc_sensor_read1(0xd5, 0x2c);
dataZH = acc_sensor_read1(0xd5, 0x2d);
dataZ = (dataZH<<8)+dataZL;
XTime_GetTime(&time);
time0 = (double)((long long int)time)/333333.3435; // ms
past_time = time0 - timeb;
timeb = time0;
printf("X = %x, Y = %x, Z = %x, %lf\n", (int)dataX, (int)dataY, (int)dataZ, past_time);
usleep(2623);
//usleep(100000);
}
return(0);
}
X = 11e, Y = fe13, Z = 219, 3.338460
X = e1, Y = fe70, Z = 241, 3.338502
X = ee, Y = fe20, Z = 213, 3.339000
X = df, Y = fe8d, Z = 245, 3.339000
X = c1, Y = fe62, Z = 11a, 3.338499
X = be, Y = fe7e, Z = 237, 3.339591
X = f3, Y = fe92, Z = 1d8, 3.338910
X = 15, Y = fe55, Z = 248, 3.339000
X = f5, Y = fe5c, Z = 1e9, 3.338598
X = d1, Y = fe72, Z = 248, 3.338502
X = e0, Y = fe7f, Z = 246, 3.338460
X = da, Y = fe40, Z = 268, 3.338100
X = fa, Y = fe5a, Z = 1f1, 3.338550
X = e7, Y = fe72, Z = 237, 3.339000
X = ea, Y = fe6a, Z = 213, 3.338508
X = ce, Y = fe4a, Z = 291, 3.338901
X = e2, Y = fe59, Z = 1dc, 3.338511
X = bd, Y = fea9, Z = 222, 3.340089
X = bd, Y = fe2b, Z = 1e8, 3.338901
X = d0, Y = fe81, Z = 245, 3.338010
X = f5, Y = fe68, Z = 250, 3.339048
X = c8, Y = fe31, Z = 24b, 3.339000
X = d5, Y = fe8b, Z = 21c, 3.338502
// kr260_ip_vadd2.c
// 2023/03/26 by marsee
// 2023/04/03 : Modified to work on Ubuntu 22.04.
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/mman.h>
int32_t multi_calc(int32_t *multi_axi4ls, int32_t a, int32_t b){
while((multi_axi4ls[0] &4) == 0) ; // wait ap_idle
multi_axi4ls[6] = a; // reg a, 0x18
multi_axi4ls[8] = b; // reg b, 0x20
multi_axi4ls[0] = 1; // ap_start = 1
while((multi_axi4ls[11] & 1) == 0) ; // wait c_ap_vld
return(multi_axi4ls[10]);
}
void main(){
int uio10_fd;
int32_t *multi_axi4ls;
int32_t a, b, c;
int uio5_fd;
volatile int32_t *dma_pow2;
volatile int32_t *data;
int fd_udmabuf0;
u_int32_t fd_paddr;
unsigned long phys_addr;
int uio9_fd;
int32_t *krnl_vadd;
unsigned char attr[1024];
// uio10, multi_axi4ls IP
if((uio10_fd = open("/dev/uio10", O_RDWR)) == -1) {
printf("Can not open /dev/uio10\n");
exit(1);
}
multi_axi4ls = (uint32_t*)mmap(NULL, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED, uio10_fd, 0);
printf("multi_axi4ls\n");
for(a = 0, b = 1; a < 10; a++, b++){
c = multi_calc(multi_axi4ls, a, b);
printf("a = %d, b = %d, c = %d\n", a, b, c);
}
// uio5, DMP_pow2 IP
if((uio5_fd = open("/dev/uio5", O_RDWR)) == -1) {
printf("Can not open /dev/uio5\n");
exit(1);
}
dma_pow2 = (volatile int32_t*)mmap(NULL, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED, uio5_fd, 0);
// udmabuf0
fd_udmabuf0 = open("/dev/udmabuf0", O_RDWR | O_SYNC); // frame_buffer, The chache is disabled.
if (fd_udmabuf0 == -1){
fprintf(stderr, "/dev/udmabuf0 open errorn");
exit(-1);
}
// phys_addr of udmabuf0
fd_paddr = open("/sys/class/u-dma-buf/udmabuf0/phys_addr", O_RDONLY);
if (fd_paddr == -1){
fprintf(stderr, "/sys/class/u-dma-buf/udmabuf0/phys_addr open errorn");
exit(-1);
}
read(fd_paddr, (void *)attr, 1024);
sscanf((const char *)attr, "%lx", &phys_addr);
close(fd_paddr);
printf("phys_addr = %x\n", (unsigned int)phys_addr);
data = (volatile int32_t *)mmap(NULL, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED, fd_udmabuf0, 0);
if (data == MAP_FAILED){
fprintf(stderr, "data mmap error\n");
exit(-1);
}
// data Initialization
for(int i=0; i<10; i++){
data[i] = i;
}
// DMA_pow2 start
while((dma_pow2[0] & 4) == 0) ; // wait ap_idle
dma_pow2[6] = phys_addr; // in_r
dma_pow2[8] = phys_addr + 10 * sizeof(int32_t);
dma_pow2[0] = 1; // ap_start
while((dma_pow2[0] & 2) == 0) ; // wait ap_done
printf("\n DMA_pow2\n");
for(int i=0; i<10; i++){
printf("in = %d, out = %d\n", data[i], data[i+10]);
}
// uio9, krnl_vadd IP
if((uio9_fd = open("/dev/uio9", O_RDWR)) == -1) {
printf("Can not open /dev/uio9\n");
exit(1);
}
krnl_vadd = (uint32_t*)mmap(NULL, 0x10000, PROT_READ|PROT_WRITE, MAP_SHARED, uio9_fd, 0);
for(int i=0; i<10; i++){
data[i+20] = i;
data[i+30] = i+1;
}
// krnl_vadd start
while((krnl_vadd[0] & 4) == 0) ; // wait ap_idle
krnl_vadd[4] = (uint32_t)((phys_addr + 20 * sizeof(int32_t))&0xffffffff); // in1
krnl_vadd[5] = (uint32_t)(((phys_addr + 20 * sizeof(int32_t))&0xffffffff00000000)>>32); // in1
krnl_vadd[7] = (uint32_t)((phys_addr + 30 * sizeof(int32_t))&0xffffffff); // in2
krnl_vadd[8] = (uint32_t)(((phys_addr + 30 * sizeof(int32_t))&0xffffffff00000000)>>32); // in2
krnl_vadd[10] = (uint32_t)((phys_addr + 40 * sizeof(int32_t))&0xffffffff); // out_r
krnl_vadd[11] = (uint32_t)(((phys_addr + 40 * sizeof(int32_t))&0xffffffff00000000)>>32); // out_r
krnl_vadd[13] = 10; // size
krnl_vadd[0] = 1; // ap_start
while((krnl_vadd[0] & 2) == 0) ; // wait ap_done
printf("\nkrnl_vadd\n");
for(int i=0; i<10; i++){
printf("in1 = %d, in2 = %d, out_r = %d\n", data[i+20], data[i+30], data[i+40]);
}
}
日 | 月 | 火 | 水 | 木 | 金 | 土 |
---|---|---|---|---|---|---|
- | - | - | - | - | - | 1 |
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | - | - | - | - | - | - |