aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/ramips
Commit message (Collapse)AuthorAgeFilesLines
...
* ramips: fix mt76x8 dependenciesJohn Crispin2017-09-051-4/+4
| | | | | | | The commit merging mt7628 and mt7688 failed to update some dependencies. Signed-off-by: John Crispin <john@phrozen.org>
* ramips: provide get_port_stats() on mt7530/762x switchesThibaut VARENE2017-09-011-0/+36
| | | | | | | | | | This patch provides a generic switch_dev_ops 'get_port_stats()' callback by taping into the relevant port MIB counters. This callback is used by swconfig_leds led trigger to blink LEDs with port network traffic. Signed-off-by: Thibaut VARENE <hacks@slashdirt.org>
* ramips: merge mt7628/mt7688 into mt76x8L. D. Pinney2017-08-3010-354/+103
| | | | | | | | | | The ramips subtargets of mt7628 and mt7688 dts files all #include "mt7628an.dtsi" They are essentially a single subtarget. This patch merges the ramips subtargets mt7628 and mt7688 into a single subtarget mt76x8. Signed-off-by: L. D. Pinney <ldpinney@gmail.com>
* kernel: update 4.9 to 4.9.45Koen Vandeputte2017-08-302-16/+8
| | | | | | | | Refreshed all patches Compiled & run-tested on targets: cns3xxx, imx6 Signed-off-by: Koen Vandeputte <koen.vandeputte@ncentric.com>
* ramips: refresh kernel patchesJohn Crispin2017-08-242-10/+16
| | | | | | the reordering patch fixes random kernel hangs. bug/fix was reported by MTK/WCN. Signed-off-by: John Crispin <john@phrozen.org>
* ramips: make mt7621 select WEAK_REORDERING_BEYOND_LLSCJohn Crispin2017-08-241-0/+12
| | | | Signed-off-by: John Crispin <john@phrozen.org>
* ramips: set ethernet mac address for VoCore2L. D. Pinney2017-08-231-0/+4
| | | | | | This patch sets the mac address for the VoCore2 devices. Signed-off-by: L. D. Pinney <ldpinney@gmail.com>
* ramips: add Xiaomi Mi Router 3G supportPavel Kubelun2017-08-237-0/+202
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit adds support for Xiaomi Mi WiFi Router 3G. Short specification: - MT7621AT + MT7603EN + 7612EN - 256MB DDR3 RAM - 128MB NAND flash - 1+2 x 1000M Ethernet - 1x USB 3.0 port - reset button - yellow, blue, red leds Installation through telnet/ssh: - copy lede-ramips-mt7621-mir3g-squashfs-kernel1.bin and lede-ramips-mt7621-mir3g-squashfs-rootfs0.bin to usb disk or wget it from LEDE download site to /tmp - switch to /extdisks/sda1/ (if copied to USB drive) or to /tmp if wgetted from LEDE download site - run: mtd write lede-ramips-mt7621-mir3g-squashfs-kernel1.bin kernel1 - run: mtd write lede-ramips-mt7621-mir3g-squashfs-rootfs0.bin rootfs0 - run: mtd erase kernel0 - run: reboot Originally stock firmware has following partitions: - ... - kernel0 (primary kernel image) - kernel1 (secondary kernel image, used by u-boot in failsafe routine) - rootfs0 (primary rootfs) - rootfs1 (secondary rootfs in case primary fails) - overlay (used as ubi overlay) This commit squashes rootfs0, rootfs1 and overlay partitions into 1, so it can be used by LEDE fully for package installation, resulting in 117,5MiB. This device lacks hw watchdog, so adding softdog instead (stock does the same). Signed-off-by: Pavel Kubelun <be.dissent@gmail.com>
* kernel: update 4.9 to 4.9.44Stijn Tintel2017-08-176-19/+13
| | | | | | | | | | | | | | | Refresh patches. Adapt 704-phy-no-genphy-soft-reset.patch. Remove brcm2708/950-0005-mm-Remove-the-PFN-busy-warning.patch. Compile-tested on brcm2708/bcm2708 and x86/64. Runtime-tested on brcm2708/bcm2708 and x86/64. Fixes the following vulnerabilities: - CVE-2017-7533 - CVE-2017-1000111 - CVE-2017-1000112 Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
* ramips: add support for the VoCore2 LiteL. D. Pinney2017-08-119-51/+125
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | The VoCore2 Lite uses the same PCB as the Vocore2. This patch moves the common VoCore2 parts into dtsi. Removed memory node in the device tree source file. Memory is detected automatically. http://vocore.io/ http://vonger.net/ http://vonger.cn/ Specifications: - SoC: MediaTek MT7688AN - RAM: 64MB DDR2 EtronTech EM68B16CWQH-25H - Flash: 8MB NOR SPI Flash GigaDevice GD25Q64CWIG - Wireless: Built into MT7688AN with onboard IPEX connector Firmware installation: - VoCore2-Lite ships with firmware forked from OpenWrt. - Installation from the bootloader is recommended. - If using luci/sysupgrade use the -n option (do not keep settings) original firmware uses a modified proprietary MediaTek wireless driver. - The wireless is disabled by default in LEDE. - If reverting to factory firmware using the bootloader is recommended. Signed-off-by: L. D. Pinney <ldpinney@gmail.com> Tested by: Noble Pepper <noblepepper@gmail.com>
* ramips: fix WHR-1166D WAN portMathias Kresin2017-08-111-1/+1
| | | | | | | | | | | | By adding the ICPlus IP1001 phy driver an already set RGMII delay mode is reset during driver load. Set the rgmii rx delay to fix corrupt/no packages in case the WAN port negotiates to 1000MBit. Fixes: FS#670 Signed-off-by: Mathias Kresin <dev@kresin.me>
* ramips: ArcherC50v1: fix wlan2g MAC addressThibaut VARENE2017-08-061-0/+2
| | | | | | | | | | By default the wlan eprom contains the generic ralink MAC which is not the vendor (TP-Link) one. Based on OFW bootlog, it appears that addresses are decremented from the ethernet MAC. This patch fixes the MAC address for wlan2g in line with OFW. Signed-off-by: Thibaut VARENE <hacks@slashdirt.org>
* ramips: fix cd-poll sd card remove randomlyQin Wie2017-08-041-0/+4
| | | | | | | Fix when add 'mediatek,cd-poll' to dts cause the sd card be removed randomly. Special for the device without card-detect pin. Signed-off-by: Qin Wie <me@vonger.cn>
* ramips: move common parts into dtsiMathias Kresin2017-08-0315-690/+379
| | | | | | | Move the common parts of boards with multiple flash size variants into dtsi files. Signed-off-by: Mathias Kresin <dev@kresin.me>
* ramips: update device tree source filesL. D. Pinney2017-08-03212-1103/+1343
| | | | | | | | Use the GPIO dt-bindings macros and add compatible strings in the ramips device tree source files. Signed-off-by: L. D. Pinney <ldpinney@gmail.com> Signed-off-by: Mathias Kresin <dev@kresin.me>
* ramips: Add support for Netgear EX3800Thibaut VARENE2017-08-033-5/+6
| | | | | | | | | | | | The Netgear EX3800 is essentially an EX3700 with a mains output socket. Both devices use the exact same firmware image (original firmware is named EX3700-EX3800-version.chk). This patch adds suport by renaming the EX3700 device to EX3700/EX3800 and updating the necessary glue. Signed-off-by: Thibaut VARENE <hacks@slashdirt.org>
* ramips: EX3700: rename factory.bin to factory.chkThibaut VARENE2017-08-031-2/+2
| | | | | | | The stock firmware upgrade interface requires the file to end with a .chk extension. Signed-off-by: Thibaut VARENE <hacks@slashdirt.org>
* ramips: cleanup EX2700 and WN3000RPv3 LEDsThibaut VARENE2017-08-032-5/+4
| | | | | | | | | | | | | | | This patch cleans up the WN3000RPv3 and EX2700 setup, bringing it in line with other similar devices: The power led is a bicolor one. The bootloader brings the red side on at powerup. Instead of blinking the red side in diag.sh and need to forcefully turn it off in 01_leds, this patch simplifies the setup by relying on the default off state of the gpio-led driver for the red side and blinking the green side as with other devices. Signed-off-by: Thibaut VARENE <hacks@slashdirt.org>
* ramips: cleanup AsiaRF AWM002 eval board supportMathias Kresin2017-08-037-162/+130
| | | | | | | | | | | Cleanup the dtsi files and remove one layer of dtsi. Set the size of the firmware partition to a value matching the flash size from the board (variant) name. Remove the usb led trigger. There is neither a default config for the usb led trigger nor a LED for usb activity indication. Signed-off-by: Mathias Kresin <dev@kresin.me>
* ramips: drop AsiaRF AWM003 eval boardMathias Kresin2017-08-035-77/+1
| | | | | | | Everything is identical to the AWM002 8m eval board. No need to duplicate it once more. Signed-off-by: Mathias Kresin <dev@kresin.me>
* ramips: fix Omnima MiniEMBWiFi imageMathias Kresin2017-08-031-0/+1
| | | | | | | Reference the Omnima MiniEMBWiFi device tree source file in the image build code. Otherwise the dts of the image processed before is used. Signed-off-by: Mathias Kresin <dev@kresin.me>
* ramips: build HuaWei HG255D imageMathias Kresin2017-08-031-0/+7
| | | | | | | The code to build an image was disabled some time ago for unknown reasons albeit the image looks fine. Signed-off-by: Mathias Kresin <dev@kresin.me>
* ramips: drop Edimax BR-6425 supportMathias Kresin2017-08-034-80/+0
| | | | | | Code to build an image for the Edimax BR-6425 never existed. Signed-off-by: Mathias Kresin <dev@kresin.me>
* ramips: add missing partitionsMathias Kresin2017-08-032-9/+57
| | | | | | The partitions were lost during migration to device tree. Signed-off-by: Mathias Kresin <dev@kresin.me>
* ramips: fix PCI init on MT7620 with Linux 4.9+Ilya Katsnelson2017-07-311-0/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | So, this is kind of complicated. This has been upstream for a while, imported from OpenWRT/LEDE with some cleanups. LEDE ramips has stayed on linux-4.4 this whole time, with the old(er) version of the patch that had correct behavior[0], while upstream got changed[1]. When LEDE updated to kernel 4.9, the older version of the code from the patch got replaced with the upstream version containing the bug. The original behavior, however, seems to be correct here, as the official programming guide[2] indicates that bit 31 (PDRV_SW_SET) in register PPLL_CFG1 is reserved, but bit 23 (added as PPLL_LD) is the PPLL lock state (which also happens to line up with the error message). The original confusion probably comes from the double definition of PDRV_SW_SET[3, 4] in the upstream code, with one correct definition (31) and one incorrect one (23). I've also used the opportunity to clean up the error message a bit - it's still not really helpful to anyone who doesn't already know what the PPLL is, but at least it's slightly more readable now. This will probably need to be upstreamed as well, since with the way it's currently set up, it's unlikely PCI ever worked for anyone who's running an upstream kernel on that SoC. [0]: https://github.com/lede-project/source/blob/05d6e92594c507dcd1f4be6c1bcb2282fe1abe1f/target/linux/ramips/patches-4.4/0009-PCI-MIPS-adds-mt7620a-pcie-driver.patch#L259 [1]: https://github.com/torvalds/linux/blob/026d15f6b9878794fae1f794cae881ccd65052e5/arch/mips/pci/pci-mt7620.c#L246 [2]: http://www.anz.ru/files/mediatek/MT7620_ProgrammingGuide.pdf [3]: https://github.com/torvalds/linux/blob/026d15f6b9878794fae1f794cae881ccd65052e5/arch/mips/pci/pci-mt7620.c#L36 [4]: https://github.com/torvalds/linux/blob/026d15f6b9878794fae1f794cae881ccd65052e5/arch/mips/pci/pci-mt7620.c#L39 Signed-off-by: Ilya Katsnelson <me@0upti.me>
* ramips: Archer C50v1: fix power ledThibaut VARENE2017-07-292-1/+1
| | | | | | | | | | 01_leds had a workaround for the power led to compensate for the inverted GPIO state. This patch was missing from my previous commit. Signed-off-by: Thibaut VARENE <hacks@slashdirt.org> [add the power led default-state which was omitted in the last commit by me] Signed-off-by: Mathias Kresin <dev@kresin.me>
* ramips: Archer C50v1: fix switch port numberingThibaut VARENE2017-07-291-1/+4
| | | | | | | | Luci shows switch ports in wrong order on that device. This patch fixes switch port numbering and matches them to the device silkscreen. Signed-off-by: Thibaut VARENE <hacks@slashdirt.org>
* ramips: Archer C50v1: fix LEDs active levelsThibaut VARENE2017-07-291-2/+2
| | | | | | | | | | All LEDs GPIOs are active low on this device. WAN and POWER states were inverted. Add default state for power. Tested on Archer C50v1. Signed-off-by: Thibaut VARENE <hacks@slashdirt.org>
* ramips: fix Mercury MAC1200R v2.0 board nameMathias Kresin2017-07-292-1/+2
| | | | | | | | | | | | With d2b6bf141662 ("ramips: fix image validation errors") the board name was changed to fix an image validation error. But this change wasn't applied to all other files using the board name, which broke sysupgrade. Revert this change and use the former board name in the metadata instead. Signed-off-by: Mathias Kresin <dev@kresin.me>
* ramips: mt7621: add compatible stringsL. D. Pinney2017-07-2925-0/+27
| | | | | | | Add compatible strings to all mt7621 based device tree source files to fix formal issues. Signed-off-by: L. D. Pinney <ldpinney@gmail.com>
* ramips: add NULL clock fix send upstreamMathias Kresin2017-07-291-0/+43
| | | | | | | | | | Make the behaviour of clk_get_rate consistent with common clk's clk_get_rate by accepting NULL clocks as parameter. Some device drivers rely on this, and will cause an OOPS otherwise. Fixes: FS#735 Signed-off-by: Mathias Kresin <dev@kresin.me>
* ramips: drop stray kernel 4.4 configsMathias Kresin2017-07-277-1494/+0
| | | | | | | The kernel 4.4 patches where already removed with the bump to 4.9. Drop the the subtarget configs as well. Signed-off-by: Mathias Kresin <dev@kresin.me>
* ramips: add support for Loewe WMDR-143NOliver Fleischmann2017-07-275-1/+79
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The WMDR-143N is a small module originally used as a Wifi client in some Loewe smart TV sets. It is sold cheaply at german surplus shops. The module contains a RT3662 SOC. Specifications: - 500 MHz CPU Clock - 1x 10/100Mbps Ethernet (pin header) - 32 MB of RAM - 8 MB of FLASH - 2T3R 2.4/5 GHz (SOC internal) - 3 Antennas on PCB - UART pads on PCB (J3: 1 = +3.3V, 2 = RX, 3 = TX, 4 = GND), TX and RX are 3,3V only! The square hole is pin 1 - Power supply pads on PCB (J6: 1 and 2 = +5V, 3 and 4 = GND) The square hole is pin 1 The original firmware has two identical kernel/rootfs images and two "Factory" calibration data blocks in flash. The LEDE image leaves only the first "Factory" block in place and uses both "Kernel" blocks and the redundant "Factory" block together to gain enough space for the jffs2 partition. Flash instructions: You need UART and Ethernet connections to flash the board. Use the LEDE "sysupgrade.bin" image with tftp. Apply power to the board and in the first 5 seconds, hit 2 to select TFTP upload. The bootloader asks for board- and server IP addresses and filename. Alternate method: With the vendor firmware running, assign an IP address to the ethernet port, tftp the firmware image to /tmp and write to mtd4 ("KernelA"). Signed-off-by: Oliver Fleischmann <ogf@bnv-bamberg.de> [remove pinctrl node from dts, no pin is used as GPIO] Signed-off-by: Mathias Kresin <dev@kresin.me>
* ramips: pinctrl: return proper error if pinctrl0 is emptyMathias Kresin2017-07-271-1/+1
| | | | | | | | Children of the pinctrl0 node are optional. Return EINVAL (=missing) instead of 0. Fixes a hang if the pinctrl0 has no children. Signed-off-by: Mathias Kresin <dev@kresin.me> Acked-by: John Crispin <john@phrozen.org>
* ramips: refresh the rcu_sched patch and remove debug infoJohn Crispin2017-07-261-27/+6
| | | | Signed-off-by: John Crispin <john@phrozen.org>
* ralink: fix rcu_sched stalls on mt7621John Crispin2017-07-262-0/+132
| | | | | | | | there were 2 bugs *) core1 came up with a bad bogo mips, looks like the clock needed time to stabilize *) HPT frequency was not set making r4k timers not come up properly Signed-off-by: John Crispin <john@phrozen.org>
* ramips: add support for the GnuBee Personal Cloud OneL. D. Pinney2017-07-257-0/+141
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The GnuBee Personal Cloud One crowdfunded on https://www.crowdsupply.com It is a low-cost, low-power, network-attached storage device. Specifications: - SoC: MediaTek MT7621AT - RAM: DDR3 512 MB - Flash: 32 MB - Six SATA ports for 2.5" Drives - One micro SDcard - One USB 3.0 - Two USB 2.0 - Gigabit Ethernet: 1 x WAN and 1 x LAN - UART 3.5mm Audio Jack or 3 pin header - 57600 8N1 - Four GPIOs available on a pin header Flash instructions: The GnuBee Personal Cloud One ships with libreCMC installed. libreCMC is a Free Software Foundation approved fork of LEDE/OpenWrt. As such one can upgrade using the webinterface or sysupgrade. Das U-Boot has multiple options for recovery or updates including : - USB - http - tftp Signed-off-by: L. D. Pinney <ldpinney@gmail.com> [use switchdev led trigger, all interfaces are in vlan1; rename leds according to board.d setting; remove ge2 group from the pinmux, this group doesn't exist in the driver] Signed-off-by: Mathias Kresin <dev@kresin.me>
* ramips: DIR-860L-B1 fix switch port numberingThibaut VARENE2017-07-251-1/+4
| | | | | | | | Luci shows switch ports in inverted order on that device. This patch fixes switch port numbering and matches them to the device silkscreen. Signed-off-by: Thibaut VARENE <hacks@slashdirt.org>
* ramips: fix wps button gpio for DWR-512Giuseppe Lippolis2017-07-251-1/+1
| | | | | | The WPS button is at GPIO#7. Signed-off-by: Giuseppe Lippolis <giu.lippolis@gmail.com>
* ramips: DTS: VoCore2 improvements/fixesPaul Wassi2017-07-251-22/+3
| | | | | | | | | | | The VoCore2 features 128MB of RAM, therefore set memory in DTS to 128*1024*1024 = 0x8000000 The board's LED is connected to GND, set it to ACTIVE_HIGH here. Make serial console working again on kernel 4.9 by change of pinmux configuration. Signed-off-by: Paul Wassi <p.wassi@gmx.at>
* ramips: add support for TP-Link RE350Alex Maclean2017-07-259-0/+207
| | | | | | | | | | | | | | | | | | | | | | | | | | | The TP-Link RE350 is a wall-wart AC1200 range extender/access point with a single gigabit ethernet port and two non-detachable antennas, based on the MT7621A SoC with MT7603E and MT7612E radios. Firmware wise it is very similar to the QCA based RE450. SoC: MediaTek MT7621A (880MHz) Flash: 8MiB (Winbond W25Q64) RAM: 64MiB (DDR2) Ethernet: 1x 1Gbit Wireless: 2T2R 2.4Ghz (MT7603E) and 5GHz (MT7612E) LEDs: Power, 2.4G, 5G (blue), WPS (red and blue), ethernet link/act (green) Buttons: On/off, LED, reset, WPS Serial header at J1, 57600 8n1: Pin 1 TX Pin 2 RX Pin 3 GND Pin 4 3.3V Factory image can be uploaded directly through the stock UI. Signed-off-by: Alex Maclean <monkeh@monkeh.net>
* ramips: add support for Phicomm K2PChuanhong Guo2017-07-206-4/+136
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It uses one MT7615D radio chip with DBDC mode enabled. This mode allows this single chip act as an 2x2 11n radio and an 2x2 11ac radio at the same time. However mt76 doesn't support it currently so there is no wireless available. Specification: - SoC: MediaTek MT7621AT - Flash: 16 MB - RAM: 128 MB - Ethernet: 1 x WAN (10/100/1000Mbps) and 4 x LAN (10/100/1000 Mbps) - Wireless radio: MT7615D on PCIE0 - UART: 1 x UART on PCB - 57600 8N1 Issue: - Wireless radio doesn't work due to the lack of driver. Flash instruction: Using UART: 1. Configure PC with a static IP address and setup an TFTP server. 2. Put the firmware into the tftp directory. 3. Connect the UART line as described on the PCB. 4. Power up the device and press 2,then follow the instruction to set device and tftp server IP address and input the firmware file name.U-boot will then load the firmware and write it into the flash. Signed-off-by: Chuanhong Guo <gch981213@gmail.com>
* treewide: drop target board_name functionsMathias Kresin2017-07-151-9/+0
| | | | | | They are not used any longer. Signed-off-by: Mathias Kresin <dev@kresin.me>
* treewide: use the generic board_name functionMathias Kresin2017-07-1510-26/+17
| | | | | | Use the generic function instead ot the target specific ones. Signed-off-by: Mathias Kresin <dev@kresin.me>
* treewide: populate boardname and model earlierMathias Kresin2017-07-151-0/+0
| | | | | | | | | | | | | For targets using the generic board detection and board specific settings in diag.sh, the board name is still unset at the time the set_state() provided by diag.sh is called by 10_indicate_preinit. Change the execution order to ensure the boardname is populated before required the first time. Do the target specific board detection as early as possible, directly followed by the generic one to allow a seamless switch to the generic function for populating /tmp/sysinfo/. Signed-off-by: Mathias Kresin <dev@kresin.me>
* ramips: fix GL-inet GL-MT300N-V2 WAN/LAN MAC addressJohn Marrett2017-07-152-1/+4
| | | | | | | | | | | | | | Correct MAC address lookup to appropriate offset based on vendor source. Override the WAN MAC to use the same address as LAN. The switch driver increments the base MAC address for the WAN vlan but the stock firmware uses the same MAC address for all interfaces. Based on vendor source commit https://github.com/domino-team/lede-1701/commit/efb0518 Signed-off-by: John Marrett <johnf@zioncluster.ca>
* kernel: update kernel 4.9 to 4.9.37Koen Vandeputte2017-07-151-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | - Refreshed all patches - Removed upstreamed - Adapted 4 patches: 473-fix-marvell-phy-initialization-issues.patch ----------------------------------------------- Removed hunk 5 which got upstreamed 403-net-phy-avoid-setting-unsupported-EEE-advertisments.patch 404-net-phy-restart-phy-autonegotiation-after-EEE-advert.patch -------------------------------------------------------------- Adapted these 2 RFC patches, merging the delta's from an upstream commit (see below) which made it before these 2. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux- stable.git/commit/?h=v4.9.36&id=97ace183074d306942b903a148aebd5d061758f0 180-usb-xhci-add-support-for-performing-fake-doorbell.patch ----------------------------------------------------------- - Moved fake_doorbell bitmask due to new item Compile tested on: cns3xxx, imx6 Run tested on: cns3xxx, imx6 Signed-off-by: Koen Vandeputte <koen.vandeputte@ncentric.com>
* ramips: sound-mt7620: fix dependencies for kernel 4.9Mathias Kresin2017-07-071-0/+2
| | | | | | | With kernel 4.8 common used code was moved to a shared kmod. Add the missing dependency to the shared snd-soc-simple-card-utils.ko. Signed-off-by: Mathias Kresin <dev@kresin.me>
* ramips: simplify ubnt-erx-sfp device definitionMatthias Schiffer2017-07-061-7/+2
| | | | | | | | Most of the ubnt-erx definition can be reused; the package removals in DEVICE_PACKAGES have become redundant after d17cb4a68a45 "ramips: purge default packages on MT7621". Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
* ramips: bump to v4.9John Crispin2017-07-0689-33045/+1
| | | | Signed-off-by: John Crispin <john@phrozen.org>