Add support for ipq60xx based devices

Well, your own link is very specific about 128 MB flash and 256 MB RAM (which is not unexpected for ipq6000, but too little to work with ath11k).

Yes, but I got a customized hardware. there is no link for this customized version of hw. so I shared the closest one.

Here is also another one with 512MB RAM, but different supplier: IPQ6000 model (GL-AX1800 Flint)

Latvian folks are realy tempting with new mikrotik hap ax both ceiling and desk version, 1gig of ram is good leverage , i had hap ax2 in hands but hesitating a bit to grab him , if they made 4x4 stream with 6 gigz radio then i'll cant't stop myself to buy one.

I'm working together with Wallystech to add some boards that also interest my employer.
6018v4 is one of them.

Did you try the dts's which are available on wallystech github?

I'm willing to help out here :slight_smile:

Please dont even try to use the QSDK DTS-es, easier to just write them from scratch for the upstream kernel.

BTW, I am also working on IPQ60xx support in OpenWrt now that I got it semi-decent upstream thanks to it sharing a lot of parts with IPQ807x.
I am planning to add a new target for all Qualcomm AX SoC-s and then just have them as subtargets as they share a lot of stuff and it doesn't make sense to copy/paste new targets

4 Likes

Can you share the source code and DTS/DTSI?!

Not yet, its not yet usable as OpenWrt

Finally :slightly_smiling_face: I can test on Linksys MR7350. For now, it works perfectly fine on 5.15 except partially broken USB and not working reboot. Also, I compiled the kernel 6.1 without a problem, but it's better to wait for your work.

Hi robimarko, how is the progress going with IPQ60xx development?

Slowly as WCSS clocks are fully broken

do you think it is related to q6v5-wcss driver?

No, the clocks are broken

You mean physically broken?

I mean broken in the GCC driver, they are usually FW controlled but here they just add like 20 clocks and set them to never be disabled which is obviously not the right thing to do, not to mention they dont exist upstream.

it is clear now, Thanks

which openwrt you are using to compile the firmware?

Playing with 6.1 on Linksys MR7350. Added all patches from robimarco's ipq60xx-next-20230606 and ipq807x-next-20230908 (latest 3 commits) branches.
Works fine except for broken cpufreq. With CONFIG_REGULATOR_CPR4_APSS I have this:

[    1.521700] qcom,cpr4-apss-regulator b018000.cpr4-ctrl: CPR valid fuse count: 4
[    1.528628] cpr4_ipq807x_apss_read_fuse_data: apc_corner: speed bin = 0
[    1.535535] cpr4_ipq807x_apss_read_fuse_data: apc_corner: CPR fusing revision = 2
[    1.542137] cpr4_ipq807x_apss_read_fuse_data: apc_corner: CPR misc fuse value = 0
[    1.549744] cpr4_ipq807x_apss_read_fuse_data: apc_corner: Voltage boost fuse config = 0 boost = disable
[    1.557250] cpr3_mem_acc_init: apc: not using memory accelerator regulator
[    1.566382] cpr4_ipq807x_apss_calculate_open_loop_voltages: apc_corner: fused      SVS: open-loop= 675000 uV
[    1.573334] cpr4_ipq807x_apss_calculate_open_loop_voltages: apc_corner: fused      NOM: open-loop= 787500 uV
[    1.583317] cpr4_ipq807x_apss_calculate_open_loop_voltages: apc_corner: fused    TURBO: open-loop= 850000 uV
[    1.593125] cpr4_ipq807x_apss_calculate_open_loop_voltages: apc_corner: fused   STURBO: open-loop= 900000 uV
[    1.602963] cpr4_ipq807x_apss_calculate_target_quotients: apc_corner: fused      SVS: quot[ 7]= 597, quot_offset[ 7]=   0
[    1.612748] cpr4_ipq807x_apss_calculate_target_quotients: apc_corner: fused      NOM: quot[ 7]= 800, quot_offset[ 7]= 200
[    1.623596] cpr4_ipq807x_apss_calculate_target_quotients: apc_corner: fused    TURBO: quot[ 7]= 905, quot_offset[ 7]= 105
[    1.634534] cpr4_ipq807x_apss_calculate_target_quotients: apc_corner: fused   STURBO: quot[ 7]= 980, quot_offset[ 7]=  75
[    1.645783] cpr3_regulator_init_ctrl: apc: Default CPR mode = closed-loop
[    1.646218] cpr3_regulator_debugfs_ctrl_add: apc: cpr3-regulator debugfs base directory creation failed

And no cpufreq entries in dmesg.
Without CONFIG_REGULATOR_CPR4_APSS:

[   28.128487] platform cpufreq-dt: deferred probe pending

Maybe robimarko can tell something about it if have time. (Don't want to ping him with stuff like this).
On 5.15 with cpufreq fixes, router hangs:

[    0.000000] Booting Linux on physical CPU 0x0000000000 [0x51af8014]
[    0.000000] Linux version 5.15.131 (vladdrako@Vladdrako-PC) (aarch64-openwrt-linux-musl-gcc (OpenWrt GCC 13.2.0 r25684-a06be59f0b) 13.2.0, GNU ld (GNU Binutils) 2.41) #0 SMP PREEMPT Tue Sep 12 04:18:26 2023
[    0.000000] Machine model: Linksys MR7350
[    0.000000] Zone ranges:
[    0.000000]   DMA      [mem 0x0000000040000000-0x000000005fffffff]
[    0.000000]   DMA32    empty
[    0.000000]   Normal   empty
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000040000000-0x0000000040ffffff]
[    0.000000]   node   0: [mem 0x0000000041000000-0x000000004a5fffff]
[    0.000000]   node   0: [mem 0x000000004a600000-0x000000004e3fffff]
[    0.000000]   node   0: [mem 0x000000004e400000-0x000000005fffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000040000000-0x000000005fffffff]
[    0.000000] psci: probing for conduit method from DT.
[    0.000000] psci: PSCIv1.0 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.0
[    0.000000] percpu: Embedded 18 pages/cpu s36120 r8192 d29416 u73728
[    0.000000] Detected VIPT I-cache on CPU0
[    0.000000] CPU features: detected: Spectre-v4
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 129024
[    0.000000] Kernel command line: init=/sbin/init rootfstype=squashfs ubi.mtd=rootfs root=mtd:squashfs rootwait ubi.block=0,rootfs root=/dev/ubiblock0_1 swiotlb=1 coherent_pool=2M
[    0.000000] Dentry cache hash table entries: 65536 (order: 7, 524288 bytes, linear)
[    0.000000] Inode-cache hash table entries: 32768 (order: 6, 262144 bytes, linear)
[    0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[    0.000000] Memory: 419452K/524288K available (9280K kernel code, 1144K rwdata, 2240K rodata, 1472K init, 341K bss, 104836K reserved, 0K cma-reserved)
[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1
[    0.000000] rcu: Preemptible hierarchical RCU implementation.
[    0.000000]  Trampoline variant of Tasks RCU enabled.
[    0.000000]  Tracing variant of Tasks RCU enabled.
[    0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 100 jiffies.
[    0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
[    0.000000] Root IRQ handler: 0xffffffc0084b00b0
[    0.000000] arch_timer: cp15 and mmio timer(s) running at 24.00MHz (virt/virt).
[    0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x588fe9dc0, max_idle_ns: 440795202592 ns
[    0.000000] sched_clock: 56 bits at 24MHz, resolution 41ns, wraps every 4398046511097ns
[    0.000300] Console: colour dummy device 80x25
[    0.000696] printk: console [tty0] enabled
[    0.000737] Calibrating delay loop (skipped), value calculated using timer frequency.. 48.00 BogoMIPS (lpj=24000)
[    0.000769] pid_max: default: 32768 minimum: 301
[    0.001024] Mount-cache hash table entries: 1024 (order: 1, 8192 bytes, linear)
[    0.001054] Mountpoint-cache hash table entries: 1024 (order: 1, 8192 bytes, linear)
[    0.002927] rcu: Hierarchical SRCU implementation.
[    0.003540] smp: Bringing up secondary CPUs ...
[    0.004242] Detected VIPT I-cache on CPU1
[    0.004308] CPU1: Booted secondary processor 0x0000000001 [0x51af8014]
[    0.004992] Detected VIPT I-cache on CPU2
[    0.005037] CPU2: Booted secondary processor 0x0000000002 [0x51af8014]
[    0.005669] Detected VIPT I-cache on CPU3
[    0.005710] CPU3: Booted secondary processor 0x0000000003 [0x51af8014]
[    0.005798] smp: Brought up 1 node, 4 CPUs
[    0.005877] SMP: Total of 4 processors activated.
[    0.005892] CPU features: detected: 32-bit EL0 Support
[    0.005907] CPU features: detected: CRC32 instructions
[    0.005995] CPU features: emulated: Privileged Access Never (PAN) using TTBR0_EL1 switching
[    0.006223] CPU: All CPU(s) started at EL1
[    0.006257] alternatives: patching kernel code
[    0.012983] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 1911260446275000 ns
[    0.013059] futex hash table entries: 1024 (order: 4, 65536 bytes, linear)
[    0.013272] pinctrl core: initialized pinctrl subsystem
[    0.014155] NET: Registered PF_NETLINK/PF_ROUTE protocol family
[    0.015061] DMA: preallocated 2048 KiB GFP_KERNEL pool for atomic allocations
[    0.015364] DMA: preallocated 2048 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations
[    0.015663] DMA: preallocated 2048 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations
[    0.016149] thermal_sys: Registered thermal governor 'step_wise'
[    0.016156] thermal_sys: Registered thermal governor 'user_space'
[    0.016530] cpuidle: using governor menu
[    0.016732] NET: Registered PF_QIPCRTR protocol family
[    0.016985] ASID allocator initialised with 65536 entries
[    0.087551] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages
[    0.087592] HugeTLB registered 32.0 MiB page size, pre-allocated 0 pages
[    0.087611] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages
[    0.087629] HugeTLB registered 64.0 KiB page size, pre-allocated 0 pages
[    0.091660] cryptd: max_cpu_qlen set to 1000
[    0.097072] raid6: skip pq benchmark and using algorithm neonx8
[    0.097113] raid6: using neon recovery algorithm
[    0.098726] SCSI subsystem initialized
[    0.098969] usbcore: registered new interface driver usbfs
[    0.099031] usbcore: registered new interface driver hub
[    0.099081] usbcore: registered new device driver usb
[    0.099511] qcom_scm firmware:scm: IRQ index 0 not found
[    0.099613] qcom_scm: convention: smc arm 64
[    0.100591] Bluetooth: Core ver 2.22
[    0.100627] NET: Registered PF_BLUETOOTH protocol family
[    0.100644] Bluetooth: HCI device and connection manager initialized
[    0.100666] Bluetooth: HCI socket layer initialized
[    0.100683] Bluetooth: L2CAP socket layer initialized
[    0.101188] clocksource: Switched to clocksource arch_sys_counter
[    0.105812] NET: Registered PF_INET protocol family
[    0.105940] IP idents hash table entries: 8192 (order: 4, 65536 bytes, linear)
[    0.106730] tcp_listen_portaddr_hash hash table entries: 256 (order: 0, 4096 bytes, linear)
[    0.106771] Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear)
[    0.106800] TCP established hash table entries: 4096 (order: 3, 32768 bytes, linear)
[    0.106863] TCP bind hash table entries: 4096 (order: 4, 65536 bytes, linear)
[    0.106954] TCP: Hash tables configured (established 4096 bind 4096)
[    0.107049] UDP hash table entries: 256 (order: 1, 8192 bytes, linear)
[    0.107088] UDP-Lite hash table entries: 256 (order: 1, 8192 bytes, linear)
[    0.107292] NET: Registered PF_UNIX/PF_LOCAL protocol family
[    0.107339] PCI: CLS 0 bytes, default 64
[    0.115349] workingset: timestamp_bits=46 max_order=17 bucket_order=0
[    0.120907] zblock: loaded
[    0.121440] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[    0.121903] ksmbd: The ksmbd server is experimental, use at your own risk.
[    0.121927] jffs2: version 2.2 (NAND) (SUMMARY) (ZLIB) (CMODE_SIZE) (c) 2001-2006 Red Hat, Inc.
[    0.177189] xor: measuring software checksum speed
[    0.183500]    8regs           :  1567 MB/sec
[    0.188818]    32regs          :  1859 MB/sec
[    0.195212]    arm64_neon      :  1544 MB/sec
[    0.195229] xor: using function: 32regs (1859 MB/sec)
[    0.195251] Key type asymmetric registered
[    0.195418] io scheduler kyber registered
[    0.195616] io scheduler bfq registered
[    0.196870] qcom-qmp-phy 78000.ssphy: supply vdda-phy not found, using dummy regulator
[    0.197012] qcom-qmp-phy 78000.ssphy: supply vdda-pll not found, using dummy regulator
[    0.198026] qcom-qmp-phy 78000.ssphy: Registered Qcom-QMP phy
[    0.198765] qcom-qusb2-phy 79000.qusb: supply vdda-pll not found, using dummy regulator
[    0.198883] qcom-qusb2-phy 79000.qusb: supply vdda-phy-dpdm not found, using dummy regulator
[    0.199053] qcom-qusb2-phy 79000.qusb: Registered Qcom-QUSB2 phy
[    0.203793] bam-dma-engine 704000.dma-controller: num-channels unspecified in dt
[    0.203837] bam-dma-engine 704000.dma-controller: num-ees unspecified in dt
[    0.210235] Serial: 8250/16550 driver, 2 ports, IRQ sharing disabled
[    0.211232] msm_serial 78b1000.serial: msm_serial: detected port #0
[    0.211296] msm_serial 78b1000.serial: uartclk = 1843200
[    0.211359] 78b1000.serial: ttyMSM0 at MMIO 0x78b1000 (irq = 20, base_baud = 115200) is a MSM
[    0.211406] msm_serial: console setup on port #0
[    0.971337] printk: console [ttyMSM0] enabled
[    0.976588] msm_serial: driver initialized
[    1.250228] lrng_selftest: LRNG self-tests passed
[    1.251405] loop: module loaded
[    1.255770] nand: device found, Manufacturer ID: 0xc2, Chip ID: 0xaa
[    1.256888] nand: Macronix MX30UF2G18AC
[    1.263467] nand: 256 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64
[    1.267056] Block protection check failed
[    1.296989] i2c_dev: i2c /dev entries driver
[    1.302922] Bluetooth: HCI UART driver ver 2.3
[    1.302981] Bluetooth: HCI UART protocol H4 registered
[    1.306320] Bluetooth: HCI UART protocol BCSP registered
[    1.312456] sdhci: Secure Digital Host Controller Interface driver
[    1.316924] sdhci: Copyright(c) Pierre Ossman
[    1.322893] sdhci-pltfm: SDHCI platform and OF driver helper
[    1.332787] remoteproc remoteproc0: releasing cd00000.remoteproc
[    1.336666] NET: Registered PF_INET6 protocol family
[    1.340031] Segment Routing with IPv6
[    1.343991] In-situ OAM (IOAM) with IPv6
[    1.347688] NET: Registered PF_PACKET protocol family
[    1.351575] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.
[    1.356641] 8021q: 802.1Q VLAN Support v1.8
[    1.372760] zswap: loaded using pool zstd/zblock
[    1.375437] Btrfs loaded, crc32c=crc32c-generic, zoned=no, fsverity=no
[    1.378441] lrng_drng_mgr: Initial DRNG initialized triggering first seeding
[    1.401453] lrng_es_mgr: LRNG initial entropy level 52 bits of entropy
[    1.401524] lrng_hash_kcapi: Hash sha512 allocated
[    1.406904] lrng_switch: Conditioning function allocated for DRNG for NUMA node 0
[    1.414097] nand: device found, Manufacturer ID: 0xc2, Chip ID: 0xaa
[    1.419238] nand: Macronix MX30UF2G18AC
[    1.425629] nand: 256 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64
[    1.429219] Block protection check failed
[    1.436897] 20 qcomsmem partitions found on MTD device qcom_nand.0
[    1.440916] Creating 20 MTD partitions on "qcom_nand.0":
[    1.446990] 0x000000000000-0x000000180000 : "0:sbl1"
[    1.454249] 0x000000180000-0x000000280000 : "0:mibib"
[    1.458689] 0x000000280000-0x000000600000 : "0:qsee"
[    1.465626] 0x000000600000-0x000000680000 : "0:devcfg"
[    1.468276] 0x000000680000-0x000000700000 : "0:rpm"
[    1.473254] 0x000000700000-0x000000780000 : "0:cdt"
[    1.478011] 0x000000780000-0x000000800000 : "0:appsblenv"
[    1.482841] 0x000000800000-0x000000980000 : "0:appsbl"
[    1.489229] 0x000000980000-0x000000a00000 : "0:art"
[    1.489817] lrng_es_mgr: LRNG minimally seeded with 133 bits of entropy
[    1.493431] 0x000000a00000-0x000001300000 : "0:wififw"
[    1.511668] 0x000001300000-0x000001380000 : "0:ethphyfw"
[    1.512605] 0x000001380000-0x000001400000 : "u_env"
[    1.516983] 0x000001400000-0x000001440000 : "s_env"
[    1.521340] 0x000001440000-0x000001480000 : "devinfo"
[    1.526223] 0x000001480000-0x000001c80000 : "kernel"
[    1.550174] lrng_es_mgr: LRNG fully operational
[    1.550254] lrng_es_mgr: LRNG fully seeded with 272 bits of entropy
[    1.557750] 0x000001c80000-0x000006680000 : "rootfs"
[    1.636319] mtd: setting mtd15 (rootfs) as root device
[    1.636618] mtdsplit: no squashfs found in "rootfs"
[    1.640417] 0x000006680000-0x000006e80000 : "alt_kernel"
[    1.651947] 0x000006e80000-0x00000b880000 : "alt_rootfs"
[    1.711669] 0x00000b880000-0x00000ba80000 : "sysdiag"
[    1.713747] 0x00000ba80000-0x00000fe80000 : "syscfg"
[    1.778665]▒,ՙɕ▒▒ cpufreq▒ˋ+˫▒ CPU0: Running at▒]▒+kѕ▒Ainitial frequency: 799999 KHz, changing to: 864000 KHz
[▒▒ 1.780825] remoteproc remoteproc0: cd00000.remoteproc is availabl4▒ev▒d▒E▒A[+Q▒▒▒mtX▒d▒(▒▒C[E▒J▒▒▒Е.▒▒▒q▒▒2▒c▒<SpAIYUEI8▒#▒ʔS▒Q▒\ֱ▒▒▒▒5
                                                         [    1.795772] ubi0 warning: 0xffffffc0086129fc: error -74 (ECC▒Y.▒K▒ while reading 64▒▒ѕ▒Afrom PEB 1:0, read only 64 bytes, retry
Aerror)▒+▒▒Areading 64 bytes from PEB 1:0, read only 64 bytes, retry
[   ▒&)▒▒▒▒▒▒Aubi0:▒▒▒▒▒▒▒▒Ais finished
[    R▒JRB▒BZ▒▒▒Z+▒U▒▒Z+UP▒XU
                             IYuh[W▒eTW
                                       Z*UTTTEAP▒▒J▒U▒BZ▒!Z▒RuTW▒A▒%▒▒H▒h▒▒▒MBU▒▒▒R▒▒W▒jMJMխ▒▒U]QT▒BHӔ▒▒L▒B▒▒▒
                              ▒Tu]▒pWJ▒O unit sizes: 2048/2048,▒▒▒▒page size 2048
[  ▒▒r▒▒▒▒▒▒▒Aubi0: VID header offset: 2048 (aligned 2048),▒VхAoffset: 4096
[    2.156132] ubi0:▒▒▒APEBs: 592, bad▒U        ▒▒ 0, corrupted PEBs: 0
[▒▒ 2.162401]▒]▒
                ҂user volume: 3, internal volumes: 1, max. volumes count: 128
[   ▒&)▒�ʚ▒Aubi0: max/mean erase counter: 1/0, WL threshold: 4096, image sequence number: 1694492306
[  ▒▒rJ+▒▒▒PVU(
               E[T▒XJ▒▒RT5P▒iW+▒i▒jY▒▒▒RT▒▒LKA▒▒▒▒UW▒▒▒▒▒IP
                                                           ▒R▒P▒▒▒mM▒EBHjV▒▒RV▒▒*▒JX▒▒▒U▒
         ▒TW+▒▒V▒J[
                   i)▒ZThZJA▒▒A598
[    2.183961] block ubiblock0▒L'ɕ▒ѕ▒Afrom▒]▒
                                             ҊB▒▒▒љͥ
▒[  ▒▒r▒▒▒▒ʢ▒AVFS: Mounted root (squashfs▒V▒▒▒▒▒ѕ▒▒▒▒V▒▒▒▒▒Aon device 254:0.
[    2.207840] Freeing unused kernel▒[Y[K▒▒ 1472K
[    2.218276] Run /sbin/init as init process
▒▒TQQe@▒*Z▒▒Q
             +▒DP▒R%▒▒TQU▒>▒E▒▒▒▒[▒QP"▒рA▒tH>▒a▒▒▒EYI▒▒.▒▒▒
                                                           EÖD:
wCCuAA[QZEI8▒▒▒FPEV     pAY3[▒▒:▒▒▒Mq▒T▒(▒▒C[▒▒▒▒YI▒▒
▒▒
  q▒c4▒▒sCuAA[\
I8:▒▒FPEV       pA▒c:"▒\▒U▒MV▒A▒▒>▒J(▒Ք▒k
                                         E▒4▒▒w▒#uAA[\
I8:▒▒FPEV       pA[3[▒▒"▒\▒]U▒S9s▒▒▒[E▒▒▒JQԑ▒.#▒Oh▒▒d:

Full 6.1 dmesg here

1 Like

Cool. I got one ipq6018 6E device, but still haven’t figured out how to enable boot menu and bootdelay is 0.

I have a mr7500 which is ipq60x 6e, I have a nand dump of the firmware and serial access to it. if there's anything I can do to help let me know. I am going to start looking through the dump because it has all that would be needed to boot it, on the mr7500 the bootloader isn't locked and doesn't require signed images so this should be straight forwards.