Meraki MX64
A Cisco cloud based firewall with 250 Mbps throughput, 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.
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.
OpenWrt support
Not supported.
Supporting activities
Describe if there are any ongoing activities that might lead to OpenWrt support.
- OpenWrt forum thread: https://forum.openwrt.org/t/cisco-meraki-mx65-image-support/41168?u=tmomas
- Pull request: https://github.com/openwrt/openwrt/pull/3996
Hardware highlights
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 | ? |
Hardware
Info
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 |
Flash Layout
# 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” |
Photos
Opening the case
- Remove 4 rubber feet on underside of the case.
- Remove 4 hidden screws from under rubber feet.
- Lift off black underside. Slide out PCB
Serial
→ 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 |
---|
JTAG
→ port.jtag general information about the JTAG port, JTAG cable, etc.
How to connect to the JTAG Port of this specific device:
un-populated port J8
20 Pin JTAG port
Bootlogs
OEM bootlog
Insert Meraki MX64 OEM bootlog here
OpenWrt bootlog
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