Meraki MX64 and MX64W

Under Construction!
This page is currently under construction. You can edit the article to help completing it.

Meraki MX64

A Cisco cloud based firewall with 250 Mbps throughput1), small form factor fanless design with aluminium case. There are two variants of this device, the MX64 and MX64W, the latter of which features two unsupported Broadcom wireless BCM43520KMLG chips but otherwise exactly the same hardware. As a result the MX64W can only be supported to the same extent as the MX64.

The MX64 features a dual-core Broadcom BCM58525 first announced in mid-20132)3) but early MX64 devices use an A0 variant of the BCM58625 SoC, which does not feature coherency capability and a different secondary cpu boot reg. While both the older and newer devices are supported, the user must check which device they have and use a corresponding image.

Timeline

First Announced Feb 5, 20154)
End-of-Sales Announcement Jan 26, 2022
End-of-Sales Date July 26, 2022
End-of-Support Date July 26, 2027

Merged. ?p=openwrt/openwrt.git;a=commit;h=7ad9988287965be2119df320cfc645b0a8b9d94e

Two versions of squashfs sysupgrade Firmware.

A0 Variant A0 Variant

Release Variant Release

Describe if there are any ongoing activities that might lead to OpenWrt support.

Wireless is not supported.

Devices with Broadcom WiFi chipsets have limited OpenWrt supportability (due to limited FLOSS driver availability for Broadcom chips). Consider this when choosing a device to buy, or when deciding to flash OpenWrt on your device because it is listed as supported. See Broadcom WiFi for details.

CPU CPU MHz Ram Flash Network WLAN USB Serial JTag
Broadcom BCM58625BBOKF12G StrataGX™ 1200 2 GB 1 GB 5x 10/100/1000 None 1x 2.0 Yes ?
Architecture Arm cortex a9
Vendor Cisco Meraki
Bootloader U-Boot
System-On-Chip Broadcom StrataGX™ Communications Processor
CPU/Speed 1.2 GHz
Flash-Chip Micron MT29F8G08ABACA
Flash size 1 GB
RAM 2 GB (4 x 4Gb H5TC4G83CFR)
Wireless N/A
Ethernet 5x 10/100/1000 Mbit/s
Switch 1x BCM58625 (5 Ports)
USB 1x 2.0
Serial YES - on board header
JTAG Yes - not populated

The front light is lit by three discrete LEDs, depending on device status.

LED Color Notes
LED1 White Flashes when entering diagnostic mode. (stock firmware)
Solid when booted and connected to the cloud. (stock firmware)
Flashes when entering USB boot. (clayface U-Boot)
LED2 Orange Lights up at boot.
LED3 RGB Solid green once successfully booted. (OpenWrt)
Rainbow when booted and attempting to reach the cloud. (stock firmware)
Red when booted and failed to reach the cloud. (stock firmware)

The Meraki MX64/MX64W has the following buttons:

BUTTON Event
Reset reset
# cat /proc/mtd
dev: size erasesize name
mtd0: 00100000 00040000 “boot”
mtd1: 00080000 00040000 “shmoo”
mtd2: 00300000 00040000 “bootkernel1”
mtd3: 00100000 00040000 “nvram”
mtd4: 00300000 00040000 “bootkernel2”
mtd5: 3f700000 00040000 “ubi”
mtd6: 40000000 00040000 “all”

Note: This depends on the Unit Itself.

Switched Ethernet layout:

eth0-> wan1
       lan2
       lan3
       lan4
       lan5
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host proto kernel_lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether brd ff:ff:ff:ff:ff:ff
       valid_lft forever preferred_lft forever
3: lan1@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-lan state UP group default qlen 1000
    link/ether brd ff:ff:ff:ff:ff:ff
4: lan2@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-lan state UP group default qlen 1000
    link/ether brd ff:ff:ff:ff:ff:ff
5: lan3@eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether brd ff:ff:ff:ff:ff:ff
6: lan4@eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state LOWERLAYERDOWN group default qlen 1000
    link/ether brd ff:ff:ff:ff:ff:ff
7: wan@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether brd ff:ff:ff:ff:ff:ff
8: br-lan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.1/24 brd 192.168.0.255 scope global br-lan
       valid_lft forever preferred_lft forever
    inet6 scope global noprefixroute
       valid_lft forever preferred_lft forever
    inet6 scope link proto kernel_ll
       valid_lft forever preferred_lft forever

Preparation and Setup

  1. Prepare a USB disk with the DOS partitioning scheme and a 128MB FAT16 partition. On Windows, choose the FAT file system.
    • If one USB disk doesn't work, try a different one, and/or a FAT32 partition.
  2. Compile or obtain OpenWrt files for the MX64, including u-boot, initramfs and sysupgrade images, and copy them to the USB disk.
  3. Plug the USB disk into the device.
  4. On the device, boot into diagnostic mode by holding reset when powering on the device. The front light will turn orange.
    Continue to hold reset until it starts blink-blink'ing white.
    • On used units, the white flash may be difficult or even impossible to see without first opening up the device.
      If no white flash is visible, skip confirming it visually and simply hold reset for ~15 seconds when booting.
    • An ethernet cable can be plugged into any LAN port before powering the device on.
  5. Release the reset button, and wait another ~15 seconds for the light to turn off, then turn green.
    If it goes rainbow instead, unplug the device and try again.
    • If an ethernet cable has already been plugged in, its LAN port should now light up.
      Otherwise, plug an ethernet cable into a LAN port.
  6. On another device, set the client IP to 192.168.1.2, and telnet to 192.168.1.1.
    • Instead of telnet, the serial connection may be used.
    • Note: If connecting by serial, certain USB serial adapters may prevent the device from booting. If that happens, connect to device TXD after the front light starts blinking white.
  7. Continue to U-Boot Installation
  • Using a USB disk can be skipped in the next (u-boot install) section by instead running a webserver on the client device, e.g. python -m http.server, and then running wget for the uboot_mx64 and sha512sum files in a shell on the device.
  • A USB disk will be required to boot an initramfs image.

U-Boot installation

1. Newer fw versions require extra steps to support OpenWrt. To check, please connect via telnet and run: cat /sys/block/mtdblock0/ro If the result is 1, your mtd0 is locked will need to perform extra steps 4 and 5 in this section. If the result is 0 then skip these.

2. Check which SoC is in use by running the following command: devmem 0x18000000 If devmem is not found then try: devmem2 0x18000000 If the output begins with anything between 0x3F00-0x3F03 you will need to use the A0 release. For any other output, eg 0x3F04 or higher, use the regular MX64 image.

3 Confirm the size of the device's boot(mtd0) partition. In most cases it should be 0x100000 or larger. If this is the case, please proceed to use the uboot_mx64 image. If the reported size is 0x80000, please use the uboot_mx64_small image, then follow the later guide to change to the larger image.

cat /proc/mtd

Example output:

# cat /proc/mtd cat /proc/mtd dev:    size   erasesize  name mtd0: 00100000 00040000 "boot" mtd1: 00080000 00040000 "shmoo" mtd2: 00300000 00040000 "bootkernel1" mtd3: 00100000 00040000 "nvram" mtd4: 00300000 00040000 "bootkernel2" mtd5: 3f700000 00040000 "ubi" mtd6: 40000000 00040000 "all"

4. Set up a webserver to serve the appropriate uboot_mx64 from the following location and verify the SHA512: https://github.com/clayface/U-boot-MX64-20190430_MX64

5. (Only if mtd0 is locked) You will also need the mtd-rw.ko kernel module to unlock the partition from the same repo. An mtd executable is also needed to write the mtd block. Place these on the web server as well.

6. (Only if mtd0 is locked) Use wget to retrieve the files on the MX64: wget [http://192.168.1.2/mtd-rw.ko](http://192.168.1.2/mtd-rw.ko%60) insmod mtd-rw.ko i_want_a_brick=1 and confirm the unlock is set with dmesg mtd-rw: mtd0: setting writeable flag

7. Download the appropriate u-boot image according to step 3. If you did not need to unlock the mtd0 partition then use dd to write the file, with caution: wget [http://192.168.1.2/uboot_mx64](http://192.168.1.2/uboot_mx64%60) dd if=uboot_mx64 of=/dev/mtdblock0 If you needed to unlock the mtd0 partition using the mtd-rw module, run these commands instead to install u-boot instead:

wget [http://192.168.1.2/mtd](http://192.168.1.2/mtd%60)
chmod +x mtd
wget [http://192.168.1.2/uboot_mx64](http://192.168.1.2/uboot_mx64%60)
./mtd write uboot_mx64 /dev/mtd0

8. Once this has successfully completed, power off the device. If you did not need to install the small u-boot image, proceed to OpenWrt Installation. Otherwise proceed to UBI supporting bootloader installation

UBI supporting bootloader installation

These steps need to be followed if the older u-boot image was installed, either because the Meraki diagnostic partition scheme used 0x80000 as the mtd0 size, or because you installed the u-boot provided while OpenWrt support was still under development. If using OpenWrt, make a backup before proceeding.

  1. Download the openwrt-bcm5862x-generic-meraki_mx64-initramfs-kernel.bin image from clayface's U-Boot repo onto the USB disk.
  2. With the prepared USB drive already inserted, power on the device while holding the reset button. A white/orange flashing pattern will occur shortly after power on. Let go of the reset button. The device is now booting into OpenWrt initramfs stored on the USB disk.
  3. Connect by SSH to 192.168.1.1 and flash the embedded u-boot image: mtd write /root/uboot_mx64 /dev/mtd0
    You do not need to reboot as this image can handle “Kernel-in-UBI” OpenWrt installation.
  4. Proceed to obtain and flash the appropriate OpenWrt image at OpenWrt Installation step 4.
  5. Reboot will take significantly longer due to Shmoo calibration.
    In case the device does not come online after several minutes, power-cycle the device and see if it boots.
    If you see an orange/white flashing pattern, this indicates UBI booting was not successful, and you will need to copy a new bcm53xx image to a USB disk before booting it and attempting to install OpenWrt again - refer to OpenWrt Installation step 1. Do not attempt to reflash u-boot in this scenario.

OpenWrt Installation

  1. Having obtained an OpenWrt initramfs image, copy the openwrt-bcm53xx-generic-meraki_mx64-initramfs.bin file to the base directory of the USB disk.
    • It must have this name to boot!5)
    • If using an initramfs image with USB storage support, copy a sysupgrade image over too.
  2. With the USB drive already inserted, power on the device.
    • When the device enters USB boot, it will blink white 3x.
      Even on used units, this white blink should be visible, as the orange LED will turn off when it does.
    • The device will now boot from the image. Its light will stay solid orange during this.
    • Eventually it will start blinking green--first fast, then slow. Once the light is solid green, OpenWrt has finished booting.
    • This should take about a minute total.
    • If it does not boot into the initramfs image, delete and recopy the file to the USB disk and try again.
      If that still doesn't work, try a different USB disk, or delete the other partition(s) on it (if you had created other partitions), and try again.
      If boot issues persist, a serial connection may help here.
  3. Connect to the device over LAN. See Preparation and Setup step 6.
  4. If not using an initramfs image with USB storage support, use scp to copy the sysupgrade file to 192.168.1.1:/tmp.
    • Example: scp -O openwrt-bcm53xx-generic-meraki_mx64-squashfs.sysupgrade.bin root@192.168.1.1:/tmp
    • If scp complains about the host key being different because a different key for 192.168.1.1 is saved, ignore it by inserting -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null after scp.
  5. SSH to 192.168.1.1.
  6. If using an initramfs image with USB storage support, mount the USB disk with mkdir /mnt/usb && mount /dev/sda1 /mnt/usb.
  7. Run sysupgrade.
    • Example: sysupgrade /tmp/openwrt-bcm53xx-generic-meraki_mx64-squashfs.sysupgrade.bin
    • It will reboot.
  8. OpenWrt should now be installed on the device.

Optional: Recovering Flash Space

Forum Post

⚠️ Proceed with caution!

Most of the 1GiB space is filled with factory Cisco volumes, and are not necessary if installing OpenWrt.

Without deleting these volumes, OpenWrt will only be able to access ~370MiB.

After the initial installation, or even before installation (but after booting from initramfs),

  1. Copy a squashfs.sysupgrade.bin to /tmp
  2. Run ubinfo -a to get a list of volumes.
  3. Delete the unnecessary volumes:
    • ubirmvol /dev/ubi0 -N part.old
    • ubirmvol /dev/ubi0 -N storage
    • ubirmvol /dev/ubi0 -N diagnostic1
    • ubirmvol /dev/ubi0 -N part.safe
    • DO NOT DELETE board-config!6)
  4. Apply the sysupgrade sysupgrade openwrt-xx.xx.x-bcm53xx-generic-meraki_mx64-squashfs.sysupgrade.bin.
    • It will reboot itself.
  5. Run ubinfo -a again and verify that the rootfs_data volume is now much larger.

Installation Files

U-Boot
  1. From clayface's U-Boot repo, download the two uboot_mx64 files.
  2. Verify the SHA512 of these two files after they have been written to the USB disk!
    • Compare each to the contents of its .sha512 file.
Initramfs
Download Link Author Notes
Google Drive Leo-PL OpenWrt SNAPSHOT, r27578+130-23ac1ad95155. Kernel 6.6.54. Pre-24.10.0-rc1
GitHub DimmaDont/openwrt DimmaDont v24.10.4, with USB storage

* Do not rename the initramfs image file!

Checksum
  1. From DimmaDont's busybox releases, download the sha512sum binary.
    • This will be used to verify the u-boot image again later.
Sysupgrade

For official images, see Firmware Links.
Installation for both of the units (MX64 and MX65): Github Pull Request 16634

Still working on it.

  • Remove 4 rubber feet on underside of the case.
  • Remove 4 hidden screws from under rubber feet.
  • Lift off black underside. Slide out PCB

port.serial general information about the serial port, serial port cable, etc.

How to connect to the Serial Port of this specific device:

Set of 4 pins labeled J1

  • Pin 1 - (has a small triangle symbol under it) closest to the main processor (3.3v) DO NOT CONNECT!
  • Pin 2 - connected to RX on my USB adapter
  • Pin 3 - connected to TX on my USB adapter
  • Pin 4 - (closest to the LED) connected to Ground on my USB adapter
Serial connection parameters
for Meraki MX64
115200, 8N1

No info about JTAG-ing the unit atm

20 Pin JTAG port

Insert Meraki MX64 OEM bootlog here


root@OpenWrt:~# dmesg [ 0.000000] Booting Linux on physical CPU 0x0 [ 0.000000] Linux version 5.10.23 (root@cluster5) (arm-openwrt-linux-muslgnueabi-gcc (OpenWrt GCC 8.4.0 r16206-bb95be9265) 8.4.0, GNU ld (GNU Binutils) 2.34) #0 SMP Mon Mar 15 05:32:30 2021 [ 0.000000] CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=10c5387d [ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache [ 0.000000] OF: fdt: Machine model: Cisco Meraki MX64(A0) [ 0.000000] Memory policy: Data cache writealloc [ 0.000000] Hit pending asynchronous external abort (FSR=0x00001c06) during first unmask, this is most likely caused by a firmware/bootloader bug. [ 0.000000] Zone ranges: [ 0.000000] Normal [mem 0x0000000060000000-0x00000000dfffffff] [ 0.000000] Movable zone start for each node [ 0.000000] Early memory node ranges [ 0.000000] node 0: [mem 0x0000000060000000-0x00000000dfffffff] [ 0.000000] Initmem setup node 0 [mem 0x0000000060000000-0x00000000dfffffff] [ 0.000000] On node 0 totalpages: 524288 [ 0.000000] Normal zone: 4608 pages used for memmap [ 0.000000] Normal zone: 0 pages reserved [ 0.000000] Normal zone: 524288 pages, LIFO batch:63 [ 0.000000] percpu: Embedded 14 pages/cpu s27148 r8192 d22004 u57344 [ 0.000000] pcpu-alloc: s27148 r8192 d22004 u57344 alloc=14*4096 [ 0.000000] pcpu-alloc: [0] 0 [0] 1 [ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 519680 [ 0.000000] Kernel command line: console=ttyS0,115200n8 earlyprintk [ 0.000000] Dentry cache hash table entries: 262144 (order: 8, 1048576 bytes, linear) [ 0.000000] Inode-cache hash table entries: 131072 (order: 7, 524288 bytes, linear) [ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off [ 0.000000] Memory: 2037780K/2097152K available (5542K kernel code, 968K rwdata, 1372K rodata, 30720K init, 334K bss, 59372K reserved, 0K cma-reserved) [ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1 [ 0.000000] rcu: Hierarchical RCU implementation. [ 0.000000] Tracing variant of Tasks RCU enabled. [ 0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies. [ 0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16 [ 0.000000] L2C: DT/platform modifies aux control register: 0x0a150000 -> 0x3a150000 [ 0.000000] L2C-310 enabling early BRESP for Cortex-A9 [ 0.000000] L2C-310 full line of zeros enabled for Cortex-A9 [ 0.000000] L2C-310 ID prefetch enabled, offset 1 lines [ 0.000000] L2C-310 dynamic clock gating enabled, standby mode enabled [ 0.000000] L2C-310 Coherent cache controller enabled, 16 ways, 512 kB [ 0.000000] L2C-310 Coherent: CACHE_ID 0x410000c8, AUX_CTRL 0x7e150001 [ 0.000000] random: get_random_bytes called from start_kernel+0x358/0x508 with crng_init=0 [ 0.000007] sched_clock: 64 bits at 600MHz, resolution 1ns, wraps every 2199023255551ns [ 0.000025] clocksource: arm_global_timer: mask: 0xffffffffffffffff max_cycles: 0x8a60dddf76, max_idle_ns: 440795229572 ns [ 0.000043] Switching to timer-based delay loop, resolution 1ns [ 0.000209] clocksource: arm,sp804: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 15290083572 ns [ 0.000336] Calibrating delay loop (skipped), value calculated using timer frequency.. 1200.00 BogoMIPS (lpj=6000000) [ 0.000348] pid_max: default: 32768 minimum: 301 [ 0.000443] Mount-cache hash table entries: 4096 (order: 2, 16384 bytes, linear) [ 0.000454] Mountpoint-cache hash table entries: 4096 (order: 2, 16384 bytes, linear) [ 0.000971] CPU: Testing write buffer coherency: ok [ 0.000993] CPU0: Spectre v2: using BPIALL workaround [ 0.001121] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000 [ 0.001480] Setting up static identity map for 0x60100000 - 0x6010003c [ 0.001565] rcu: Hierarchical SRCU implementation. [ 0.001671] dyndbg: Ignore empty _ddebug table in a CONFIG_DYNAMIC_DEBUG_CORE build [ 0.001763] smp: Bringing up secondary CPUs ... [ 0.002263] CPU1: thread -1, cpu 1, socket 0, mpidr 80000001 [ 0.002269] CPU1: Spectre v2: using BPIALL workaround [ 0.002348] smp: Brought up 1 node, 2 CPUs [ 0.002357] SMP: Total of 2 processors activated (2400.00 BogoMIPS). [ 0.002362] CPU: All CPU(s) started in SVC mode. [ 0.004582] VFP support v0.3: implementor 41 architecture 3 part 30 variant 9 rev 4 [ 0.004680] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns [ 0.004695] futex hash table entries: 512 (order: 3, 32768 bytes, linear) [ 0.004805] pinctrl core: initialized pinctrl subsystem [ 0.005033] NET: Registered protocol family 16 [ 0.005713] DMA: preallocated 256 KiB pool for atomic coherent allocations [ 0.006360] thermal_sys: Registered thermal governor 'step_wise' [ 0.019572] cryptd: max_cpu_qlen set to 1000 [ 0.021632] workqueue: max_active 576 requested for napi_workq is out of range, clamping between 1 and 512 [ 0.023191] clocksource: Switched to clocksource arm_global_timer [ 0.023808] NET: Registered protocol family 2 [ 0.024203] tcp_listen_portaddr_hash hash table entries: 1024 (order: 1, 12288 bytes, linear) [ 0.024245] TCP established hash table entries: 16384 (order: 4, 65536 bytes, linear) [ 0.024342] TCP bind hash table entries: 16384 (order: 5, 131072 bytes, linear) [ 0.024506] TCP: Hash tables configured (established 16384 bind 16384) [ 0.024631] UDP hash table entries: 1024 (order: 3, 32768 bytes, linear) [ 0.024721] UDP-Lite hash table entries: 1024 (order: 3, 32768 bytes, linear) [ 0.024959] NET: Registered protocol family 1 [ 0.024986] PCI: CLS 0 bytes, default 64 [ 0.166525] workingset: timestamp_bits=14 max_order=19 bucket_order=5 [ 0.168610] squashfs: version 4.0 (2009/01/31) Phillip Lougher [ 0.168620] jffs2: version 2.2 (NAND) (SUMMARY) (LZMA) (RTIME) (CMODE_PRIORITY) (c) 2001-2006 Red Hat, Inc. [ 0.169721] Serial: 8250/16550 driver, 2 ports, IRQ sharing disabled [ 0.170190] printk: console [ttyS0] disabled [ 0.170255] 18000300.serial: ttyS0 at MMIO 0x18000300 (irq = 30, base_baud = 3906250) is a 16550A [ 0.691108] printk: console [ttyS0] enabled [ 0.696500] nand: device found, Manufacturer ID: 0x2c, Chip ID: 0xd3 [ 0.702868] nand: Micron MT29F8G08ABACAWP [ 0.706902] nand: 1024 MiB, SLC, erase size: 256 KiB, page size: 4096, OOB size: 224 [ 0.714682] iproc_nand 18026000.nand: detected 1024MiB total, 256KiB blocks, 4KiB pages, 27B OOB, 8-bit, BCH-24 (1KiB sector) [ 0.726682] Bad block table found at page 262080, version 0x01 [ 0.733149] Bad block table found at page 262016, version 0x01 [ 0.745309] 6 fixed-partitions partitions found on MTD device brcmnand.0 [ 0.752029] Creating 6 MTD partitions on "brcmnand.0": [ 0.757217] 0x000000000000-0x000000080000 : "U-boot" [ 0.762794] 0x000000080000-0x000000100000 : "Shmoo" [ 0.768246] 0x000000100000-0x000000400000 : "bootkernel1" [ 0.774195] 0x000000400000-0x000000500000 : "senao_nvram" [ 0.780181] 0x000000500000-0x000000800000 : "bootkernel2" [ 0.786144] 0x000000800000-0x00003ff00000 : "ubi" [ 0.793121] libphy: Fixed MDIO Bus: probed [ 0.797691] b53-srab-switch 18036000.srab: Port 5 mode: internal [ 0.803745] b53-srab-switch 18036000.srab: found switch: BCM585xx/586xx/88312, rev 0 [ 0.811693] bgmac-enet 18024000.ethernet: MAC address not present in device tree [ 0.819160] bgmac-enet 18024000.ethernet: Invalid MAC addr: 00:00:00:00:00:00 [ 0.826322] bgmac-enet 18024000.ethernet: Using random MAC: a2:c7:c4:11:c1:23 [ 0.838990] bcm-iproc-i2c 18038000.i2c: bus set to 100000 Hz [ 0.845554] at24 0-0050: 8192 byte 24c64 EEPROM, writable, 32 bytes/write [ 0.852804] sp805-wdt 18039000.watchdog: registration successful [ 0.859949] NET: Registered protocol family 10 [ 0.865048] Segment Routing with IPv6 [ 0.868766] NET: Registered protocol family 17 [ 0.873356] 8021q: 802.1Q VLAN Support v1.8 [ 0.877587] Registering SWP/SWPB emulation handler [ 0.894470] b53-srab-switch 18036000.srab: Port 5 mode: internal [ 0.900532] b53-srab-switch 18036000.srab: found switch: BCM585xx/586xx/88312, rev 0 [ 1.028005] libphy: dsa slave smi: probed [ 1.032557] b53-srab-switch 18036000.srab lan1 (uninitialized): PHY [dsa-0.0:00] driver [Generic PHY] (irq=POLL) [ 1.043770] b53-srab-switch 18036000.srab lan2 (uninitialized): PHY [dsa-0.0:01] driver [Generic PHY] (irq=POLL) [ 1.055012] b53-srab-switch 18036000.srab lan3 (uninitialized): PHY [dsa-0.0:02] driver [Generic PHY] (irq=POLL) [ 1.066186] b53-srab-switch 18036000.srab lan4 (uninitialized): PHY [dsa-0.0:03] driver [Generic PHY] (irq=POLL) [ 1.077475] b53-srab-switch 18036000.srab wan0 (uninitialized): PHY [dsa-0.0:04] driver [Generic PHY] (irq=POLL) [ 1.088204] b53-srab-switch 18036000.srab: Using legacy PHYLIB callbacks. Please migrate to PHYLINK! [ 1.102262] ------------[ cut here ]------------ [ 1.106909] WARNING: CPU: 0 PID: 5 at kernel/irq/manage.c:1751 free_irq+0xd8/0x3d8 [ 1.114496] Trying to free already-free IRQ 0 [ 1.118857] Modules linked in: [ 1.121925] CPU: 0 PID: 5 Comm: kworker/0:0 Not tainted 5.10.23 #0 [ 1.128118] Hardware name: Broadcom Northstar Plus SoC [ 1.133270] Workqueue: events deferred_probe_work_func [ 1.138431] [<4010d5c4>] (unwind_backtrace) from [<40109e14>] (show_stack+0x10/0x14) [ 1.146194] [<40109e14>] (show_stack) from [<403e2c24>] (dump_stack+0x9c/0xb0) [ 1.153439] [<403e2c24>] (dump_stack) from [<40128a60>] (__warn+0xc0/0xd8) [ 1.160328] [<40128a60>] (__warn) from [<40128afc>] (warn_slowpath_fmt+0x84/0x94) [ 1.167830] [<40128afc>] (warn_slowpath_fmt) from [<40177c88>] (free_irq+0xd8/0x3d8) [ 1.175602] [<40177c88>] (free_irq) from [<404c2fbc>] (b53_srab_irq_disable+0x30/0x3c) [ 1.183541] [<404c2fbc>] (b53_srab_irq_disable) from [<404bf64c>] (b53_disable_port+0x98/0xa0) [ 1.192181] [<404bf64c>] (b53_disable_port) from [<406597ac>] (dsa_port_disable+0x14/0x1c) [ 1.200462] [<406597ac>] (dsa_port_disable) from [<40658650>] (dsa_register_switch+0x900/0xcbc) [ 1.209184] [<40658650>] (dsa_register_switch) from [<404c1dc0>] (b53_switch_register+0x204/0x344) [ 1.218172] [<404c1dc0>] (b53_switch_register) from [<4045add0>] (platform_drv_probe+0x34/0x70) [ 1.226888] [<4045add0>] (platform_drv_probe) from [<4045918c>] (really_probe+0xfc/0x3cc) [ 1.235086] [<4045918c>] (really_probe) from [<404577e0>] (bus_for_each_drv+0x70/0x94) [ 1.243023] [<404577e0>] (bus_for_each_drv) from [<40459044>] (__device_attach+0xa8/0xec) [ 1.251223] [<40459044>] (__device_attach) from [<404583e8>] (bus_probe_device+0x84/0x8c) [ 1.259421] [<404583e8>] (bus_probe_device) from [<40458878>] (deferred_probe_work_func+0x68/0x94) [ 1.268409] [<40458878>] (deferred_probe_work_func) from [<40140148>] (process_one_work+0x218/0x470) [ 1.277562] [<40140148>] (process_one_work) from [<40140648>] (worker_thread+0x2a8/0x5d0) [ 1.285761] [<40140648>] (worker_thread) from [<40146234>] (kthread+0x14c/0x150) [ 1.293177] [<40146234>] (kthread) from [<40100128>] (ret_from_fork+0x14/0x2c) [ 1.300414] Exception stack(0x42883fb0 to 0x42883ff8) [ 1.305473] 3fa0: 00000000 00000000 00000000 00000000 [ 1.313665] 3fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 1.321863] 3fe0: 00000000 00000000 00000000 00000000 00000013 00000000 [ 1.328494] ---[ end trace d10b21362587b673 ]--- [ 1.333355] DSA: tree 0 setup [ 1.337161] UBI: auto-attach mtd5 [ 1.340493] ubi0: attaching mtd5 [ 1.360566] random: fast init done [ 2.386610] random: crng init done [ 6.413236] ubi0: scanning is finished [ 6.428589] ubi0: attached mtd5 (name "ubi", size 1015 MiB) [ 6.434205] ubi0: PEB size: 262144 bytes (256 KiB), LEB size: 253952 bytes [ 6.441094] ubi0: min./max. I/O unit sizes: 4096/4096, sub-page size 4096 [ 6.447910] ubi0: VID header offset: 4096 (aligned 4096), data offset: 8192 [ 6.454895] ubi0: good PEBs: 4060, bad PEBs: 0, corrupted PEBs: 0 [ 6.461000] ubi0: user volume: 5, internal volumes: 1, max. volumes count: 128 [ 6.468238] ubi0: max/mean erase counter: 280/208, WL threshold: 4096, image sequence number: 1260248521 [ 6.477746] ubi0: available PEBs: 1611, total reserved PEBs: 2449, PEBs reserved for bad PEB handling: 80 [ 6.487344] ubi0: background thread "ubi_bgt0d" started, PID 407 [ 6.512258] Freeing unused kernel memory: 30720K [ 6.533338] Run /init as init process [ 6.537011] with arguments: [ 6.537014] /init [ 6.537017] earlyprintk [ 6.537020] with environment: [ 6.537022] HOME=/ [ 6.537025] TERM=linux [ 6.869967] init: Console is alive [ 6.873498] init: - watchdog - [ 6.881776] kmodloader: loading kernel modules from /etc/modules-boot.d/* [ 6.892508] usbcore: registered new interface driver usbfs [ 6.898111] usbcore: registered new interface driver hub [ 6.903533] usbcore: registered new device driver usb [ 6.910561] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver [ 6.917657] ehci-fsl: Freescale EHCI Host controller driver [ 6.924799] ehci-platform: EHCI generic platform driver [ 6.930250] ehci-platform 1802a000.usb: EHCI Host Controller [ 6.935986] ehci-platform 1802a000.usb: new USB bus registered, assigned bus number 1 [ 6.944626] ehci-platform 1802a000.usb: irq 34, io mem 0x1802a000 [ 6.973201] ehci-platform 1802a000.usb: USB 2.0 started, EHCI 1.00 [ 6.979846] hub 1-0:1.0: USB hub found [ 6.983663] hub 1-0:1.0: 2 ports detected [ 6.989486] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver [ 6.996293] ohci-platform: OHCI generic platform driver [ 7.001645] ohci-platform 1802b000.usb: Generic Platform OHCI controller [ 7.008394] ohci-platform 1802b000.usb: new USB bus registered, assigned bus number 2 [ 7.016304] ohci-platform 1802b000.usb: irq 34, io mem 0x1802b000 [ 7.097691] hub 2-0:1.0: USB hub found [ 7.102022] hub 2-0:1.0: 2 ports detected [ 7.108925] kmodloader: done loading kernel modules from /etc/modules-boot.d/* [ 7.116700] init: - preinit - [ 7.373324] usb 1-2: new high-speed USB device number 2 using ehci-platform [ 11.505368] procd: - early - [ 11.508294] procd: - watchdog - [ 12.026107] procd: - watchdog - [ 12.029441] procd: - ubus - [ 12.082949] procd: - init - [ 12.257172] kmodloader: loading kernel modules from /etc/modules.d/* [ 12.257360] urngd: v1.0.2 started. [ 12.367778] i2c /dev entries driver [ 12.467919] xt_time: kernel timezone is -0000 [ 12.481064] PPP generic driver version 2.4.2 [ 12.487725] NET: Registered protocol family 24 [ 12.536602] kmodloader: done loading kernel modules from /etc/modules.d/* [ 28.299045] bgmac-enet 18024000.ethernet eth0: Link is Up - 1Gbps/Full - flow control off [ 28.308378] device eth0 entered promiscuous mode [ 28.321142] b53-srab-switch 18036000.srab lan1: configuring for phy/gmii link mode [ 28.331282] 8021q: adding VLAN 0 to HW filter on device lan1 [ 28.339319] b53-srab-switch 18036000.srab lan1: Link is Up - 1Gbps/Full - flow control rx/tx [ 28.393530] br-lan: port 1(lan1) entered blocking state [ 28.398788] br-lan: port 1(lan1) entered disabled state [ 28.404298] device lan1 entered promiscuous mode [ 28.495343] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready [ 28.527536] br-lan: port 1(lan1) entered blocking state [ 28.532795] br-lan: port 1(lan1) entered forwarding state [ 28.545312] b53-srab-switch 18036000.srab lan2: configuring for phy/gmii link mode [ 28.557326] 8021q: adding VLAN 0 to HW filter on device lan2 [ 28.613652] br-lan: port 2(lan2) entered blocking state [ 28.618917] br-lan: port 2(lan2) entered disabled state [ 28.624568] device lan2 entered promiscuous mode [ 28.714578] b53-srab-switch 18036000.srab lan3: configuring for phy/gmii link mode [ 28.722430] 8021q: adding VLAN 0 to HW filter on device lan3 [ 28.813235] br-lan: port 3(lan3) entered blocking state [ 28.818481] br-lan: port 3(lan3) entered disabled state [ 28.823997] device lan3 entered promiscuous mode [ 28.943601] b53-srab-switch 18036000.srab lan4: configuring for phy/gmii link mode [ 28.951388] 8021q: adding VLAN 0 to HW filter on device lan4 [ 29.013418] br-lan: port 4(lan4) entered blocking state [ 29.018655] br-lan: port 4(lan4) entered disabled state [ 29.024192] device lan4 entered promiscuous mode [ 29.146467] b53-srab-switch 18036000.srab wan0: configuring for phy/gmii link mode [ 29.154297] 8021q: adding VLAN 0 to HW filter on device wan0 [ 29.353291] IPv6: ADDRCONF(NETDEV_CHANGE): br-lan: link becomes ready


- The Meraki provided GPL source are available at 7).

- Wireless capability on the MX64W and MX65W exists in the form of 2x Broadcom BCM43520KMLG, which is not supported. These devices will work otherwise as standard MX64 or MX65 devices.

- Early MX64 units use an A0 variant of the BCM958625 SoC which lacks cache coherency and uses a different “secondary-boot-reg”. As a consequence a different device tree is needed.

- Installation of OpenWrt requires changing u-boot to a custom version. This is due to the stock u-boot “nand read” command being limited to load only 2MB, in spite of the bootkernel1 and bootkernel2 partitions both being 3MB in the stock layout. It is also required to allow booting via USB, enabling cache coherency and setting up the QCA switches and Serdes link on the MX65. The modified sources for U-boot are available for the MX648) and MX659).

- Initial work on this device used a small bootloader within the OEM partition scheme. To allow booting of larger kernels, UBI and bootm support has been added, along with ability to store env variables to the NAND. The Shmoo and newly created env partitions have been moved to the extra space available after the nvram data.

- Users who installed the previous non-UBI supporting bootloader will need to convert to the new one before flashing a compatible image.

  • When booted into diagnostic mode, the Broadcom reference web UI can be accessed at 192.168.1.1 with (blank username):admin

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also you acknowledge that you have read and understand our Privacy Policy. If you do not agree leave the website.More information about cookies
  • Last modified: 2026/02/16 07:05
  • by unscathedfrfrcmd
  • Currently locked by: unscathedfrfrcmd