openwrt/target/linux
Matthew Hagan 67f5201276 ipq806x: add support for Cisco Meraki MR42/MR52
The MR42 and MR52 are two similar IPQ806x based devices from the Cisco
Meraki "Cryptid" series.

  MR42 main features:
  -  IPQ8068 1.4GHz
  -  512MB RAM
  -  128MB NAND
  -  2x QCA9992 (2.4 & 5GHz)
  -  1x QCA9889 (2.4 & 5GHz)
  -  1x AR8033 PHY
  -  PoE/AC power

  MR52 main features:
  -  IPQ8068 1.4GHz
  -  512MB RAM
  -  128MB NAND
  -  2x QCA9994 (2.4 & 5GHz)
  -  1x QCA9889 (2.4 & 5GHz)
  -  2x AR8033 PHYs
  -  PoE/AC power

(MR42 Only) Installation via diagnostic mode:

If you can successfully complete step 1 then you can continue to install
via this method without having to open the device. Otherwise please use
the standard UART method. Please note that when booting via TFTP, some
Ethernet devices, in particular those on laptops, will not connect in
time, resulting in TFTP boot not succeeding. In this instance it is
advised to connect via a switch.

  1. Hold down reset at power on and keep holding, after around 10 seconds
     if the orange LED changes behaviour to begin flashing, proceed to
     release reset, then press reset two times. Ensure that the LED has
     turned blue. Note that flashing will occur on some devices, but it
     will not be possible to change the LED colour using the reset button.
     In this case it will still be possible to continue with this install
     method.

  2. Set your IP to 192.168.1.250. Set up a TFTP server serving
     mr42_u-boot.mbn and
     openwrt-ipq806x-generic-meraki_mr42-initramfs-fit-uImage.itb, obtained
     from [1].

  3. Use telnet and connect to 192.168.1.1. Run the following commands to
     install u-boot. Note that all these commands are critical, an error
     will likely render the device unusable.

     Option 3.1:
       If you are sure you have set up the TFTP server correctly you can
       run this script on the device. This will download and flash the
       u-boot image immediately:

       `/etc/update_uboot.sh 192.168.1.250 mr42_u-boot.mbn`

       Once completed successfully, power off the device.

     Option 3.2:
       If you are unsure the TFTP server is correctly set up you can
       obtain the image and flash manually:

       3.2.1. `cd /tmp`
       3.2.2. `tftp-hpa 192.168.1.250 -m binary -c get mr42_u-boot.mbn`
       3.2.3. Confirm file has downloaded correctly by comparing the
              md5sum:

            `md5sum mr42_u-boot.mbn`

       3.2.4. The following are the required commands to write the image.

            `echo 1 > /sys/devices/platform/msm_nand/boot_layout
             mtd erase /dev/mtd1
             nandwrite -pam /dev/mtd1 mr42_u-boot.mbn
             echo 0 > /sys/devices/platform/msm_nand/boot_layout`

          Important: You must observe the output of the `nandwrite`
          command. Look for the following to verify writing is occurring:

            `Writing data to block 0 at offset 0x0
             Writing data to block 1 at offset 0x20000
             Writing data to block 2 at offset 0x40000`

          If you do not see this then do not power off the device. Check
          your previous commands and that mr42_u-boot.mbn was downloaded
          correctly. Once you are sure the image has been written you
          can proceed to power off the device.

  4. Hold the reset button and power on the device. This will immediately
     begin downloading the appropriate initramfs image and boot into it.

     Note: If the device does not download the initramfs, this is likely
     due to the interface not being brought up in time. Changing Ethernet
     source to a router or switch will likely resolve this. You can also
     try manually setting the link speed to 10Mb/s Half-Duplex.

  5. Once a solid white LED is displayed on the device, continue to the
     UART installation method, step 6.

Standard installation via UART - MR42 & MR52

  1. Disassemble the device and connect a UART header. The header pinout
     is as follows:

       1 - 3.3v
       2 - TXD
       3 - RXD
       4 - GND

     Important: You should only connect TXD, RXD and GND. Connecting
     3.3v may damage the device.

  2. Set your IP to 192.168.1.250. Set up a TFTP server serving
     openwrt-ipq806x-generic-meraki_(mr42|mr52)-initramfs-fit-uImage.itb.
     Separately obtain the respective sysupgrade image.

  3. Run the following commands, preferably from a Linux host. The
     mentioned files, including ubootwrite.py and u-boot images, can be
     obtained from [1].

       `python ubootwrite.py --write=(mr42|mr52)_u-boot.bin`

     The default for "--serial" option is /dev/ttyUSB0.

  4. Power on the device. The ubootwrite script will upload the image to
     the device and launch it. The second stage u-boot will in turn load
     the initramfs image by TFTP, provided the TFTP server is running
     correctly. This process will take about 13 minutes. Once a solid
     white LED is displayed, the image has successfully finished
     loading. Note: If the image does not load via TFTP, try again with
     the Ethernet link to 10Mb/s Half-Duplex.

  5. (MR42 only) Do not connect over the network. Instead connect over
     the UART using minicom or similar tool. To replace u-boot with
     the network enabled version, please run the following commands.
     Note that in the provided initramfs images, the u-boot.mbn file
     is located in /root:

     If you have not used the provided initramfs, you must ensure you
     are using an image with "boot_layout" ECC configuration enabled in
     the Kernel. This will be version 5.10 or higher. If you do not do
     this correctly the device will be bricked.

       `insmod mtd-rw i_want_a_brick=1
        mtd erase /dev/mtd8
        nandwrite -pam /dev/mtd8 /root/mr42_u-boot.mbn`

     After running nandwrite, ensure you observe the following output:

       `Writing data to block 0 at offset 0x0
        Writing data to block 1 at offset 0x20000
        Writing data to block 2 at offset 0x40000`

  6. (Optional) If you have no further use for the Meraki OS, you can
     remove all other UBI volumes on ubi0 (mtd11), including diagnostic1,
     part.old, storage and part.safe. You must not remove the ubi1 ART
     partition (mtd12).

       `for i in diagnostic1 part.old storage part.safe ; do
        ubirmvol /dev/ubi0 -N $i
        done`

  7. Proceed to flash the sysupgrade image via luci, or else download or
     scp the image to /tmp and use the sysupgrade command.

[1] The mentioned images and ubootwrite.py script can be found in this repo:
    https://github.com/clayface/openwrt-cryptid

[2] The modified u-boot sources for the MR42 and MR52 are available:
    https://github.com/clayface/U-boot-MR52-20200629

Signed-off-by: Matthew Hagan <mnhagan88@gmail.com>
2021-11-28 17:51:52 +01:00
..
apm821xx kernel: bump 5.4 to 5.4.161 2021-11-28 16:32:45 +01:00
arc770 kernel: move two symbols to the generic kconfigs 2021-08-29 17:07:19 +02:00
archs38 archs38: update kernel version to 5.10 2021-11-07 17:12:10 +01:00
armvirt armvirt: enable MMIO_CMDLINE_DEVICES for firecracker support 2021-10-12 19:22:08 -10:00
at91 kernel: Set some options in generic configuration 2021-11-02 23:37:19 +01:00
ath25 kernel: bump 5.4 to 5.4.154 2021-10-21 00:17:36 +02:00
ath79 kernel: bump 5.4 to 5.4.161 2021-11-28 16:32:45 +01:00
bcm27xx kernel: bump 5.10 to 5.10.80 2021-11-19 09:40:29 +00:00
bcm47xx bcm47xx: switch to kernel 5.10 2021-11-08 15:56:39 +01:00
bcm53xx kernel: bump 5.10 to 5.10.82 2021-11-27 19:19:30 +01:00
bcm63xx kernel: bump 5.4 to 5.4.162 2021-11-28 16:32:45 +01:00
bcm4908 bcm4908: build chk image for Netgear RAXE500 2021-11-19 14:49:18 +01:00
bmips kernel: bump 5.10 to 5.10.74 2021-10-21 00:17:36 +02:00
gemini gemini: try fis-index-block with 128 KiB sectors 2021-11-28 01:13:08 +01:00
generic kernel: bump 5.4 to 5.4.162 2021-11-28 16:32:45 +01:00
imx imx: remove obsolete Kernel 5.4 2021-11-03 12:45:40 +01:00
ipq40xx ipq40xx: add support for MikroTik hAP ac3 2021-11-28 17:19:52 +01:00
ipq806x ipq806x: add support for Cisco Meraki MR42/MR52 2021-11-28 17:51:52 +01:00
ipq807x kernel: Set CONFIG_RCU_CPU_STALL_TIMEOUT=21 2021-09-09 20:24:12 +02:00
kirkwood kirkwood: switch to kernel 5.10 2021-10-09 18:44:55 +02:00
lantiq lantiq: set maximum kernel size for P2812HNUF3 2021-11-27 21:45:06 +01:00
layerscape kernel: bump 5.4 to 5.4.162 2021-11-28 16:32:45 +01:00
malta malta: remove obsolete Kernel 5.4 2021-10-02 18:13:46 +02:00
mediatek mediatek/mt7622: unifi-6-lr: fix ucidef network configuration typo 2021-11-19 18:23:25 +00:00
mpc85xx mpc85xx: backport "fix oops when CONFIG_FSL_PMC=n" 2021-11-28 01:13:01 +01:00
mvebu kernel: bump 5.10 to 5.10.81 2021-11-27 19:19:11 +01:00
mxs mxs: drop kernel 5.4 support 2021-11-14 23:32:51 +01:00
octeon octeon: add USB3 support (for Ubiquiti EdgeRouter 6P) 2021-11-20 20:54:26 +01:00
octeontx kernel: bump 5.4 to 5.4.161 2021-11-28 16:32:45 +01:00
omap omap: switch to kernel 5.10 2021-11-20 21:08:25 +01:00
oxnas kernel: bump 5.10 to 5.10.81 2021-11-27 19:19:11 +01:00
pistachio pistachio: drop Kernel 5.4 support 2021-11-07 18:32:21 +01:00
ramips kernel: bump 5.4 to 5.4.162 2021-11-28 16:32:45 +01:00
realtek kernel: bump 5.4 to 5.4.162 2021-11-28 16:32:45 +01:00
rockchip rockchip: move r8152 related patches to generic 2021-10-30 21:17:20 +02:00
sunxi sunxi: build kernel with sun6i-rtc driver 2021-11-21 21:37:56 +00:00
tegra tegra: switch to kernel 5.10 2021-10-18 21:32:36 +02:00
uml uml: add Kernel 5.10 support via testing 2021-11-02 10:04:50 -10:00
x86 x86: sort alphabetically default packages 2021-11-06 23:36:32 +01:00
zynq kernel: Set some options in generic configuration 2021-11-02 23:37:19 +01:00
Makefile target: use SPDX license identifiers on Makefiles 2021-02-10 15:47:18 +01:00