Salutations openwrt-devel@, I've gotten an initial Pogoplug V4 build into good enough shape that I think it's worth sharing. It uses a lightly-tweaked fork of uBoot for the moment (though I'm hoping the tweaks eventually make it back into mainline) and uses FDT to bring up the kernel. Thoughts are welcome.
--nwf; diff --git a/package/boot/uboot-kirkwood-mibodhi/Makefile b/package/boot/uboot-kirkwood-mibodhi/Makefile new file mode 100644 index 0000000..6855a91 --- /dev/null +++ b/package/boot/uboot-kirkwood-mibodhi/Makefile @@ -0,0 +1,103 @@ +# +# Copyright (C) 2010-2014 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=u-boot +PKG_VERSION:=2014.07-mibodhi +PKG_RELEASE:=1 + +PKG_SOURCE_URL:=g...@github.com:nwf/u-boot-kirkwood.git +PKG_SOURCE_PROTO:=git +PKG_SOURCE_VERSION:=23217407aab5494d7c17b0c5b0b1aabb13e4c26e +PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz + +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION) + +PKG_BUILD_PARALLEL:=1 + +include $(INCLUDE_DIR)/package.mk + +define uboot/Default + TITLE:= + CONFIG:= + IMAGE:= +endef + +define uboot/pogo4 + TITLE:=U-Boot for Cloud Engines Pogoplug V4 + CONFIG:=pogo_v4 +endef + +UBOOTS:= pogo4 + +define Package/uboot/template +define Package/uboot-kirkwood-$(1) + SECTION:=boot + CATEGORY:=Boot Loaders + DEPENDS:=@TARGET_kirkwood + TITLE:=$(2) + URL:=http://www.denx.de/wiki/U-Boot + VARIANT:=$(1) +endef +endef + +define BuildUBootPackage + $(eval $(uboot/Default)) + $(eval $(uboot/$(1))) + $(call Package/uboot/template,$(1),$(TITLE)) +endef + +ifdef BUILD_VARIANT +$(eval $(call uboot/$(BUILD_VARIANT))) +UBOOT_CONFIG:=$(if $(CONFIG),$(CONFIG),$(BUILD_VARIANT)) +UBOOT_IMAGE:=$(if $(IMAGE),$(IMAGE),openwrt-$(BOARD)-$(BUILD_VARIANT)-u-boot.bin) +endif + +define Build/Configure + +$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \ + $(UBOOT_CONFIG)_config +endef + +define Build/Compile + +$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \ + u-boot.kwb \ + CROSS_COMPILE=$(TARGET_CROSS) + mkimage -A $(ARCH) -O linux -T kernel -C none \ + -a 0x600000 -e 0x600000 \ + -n 'OpenWrt Das U-Boot uImage' \ + -d $(PKG_BUILD_DIR)/u-boot.bin $(PKG_BUILD_DIR)/u-boot.img +endef + +define Package/uboot/install/default + $(INSTALL_DIR) $(BIN_DIR)/uboot-$(BOARD)-$(1) + $(CP) $(PKG_BUILD_DIR)/u-boot.bin \ + $(BIN_DIR)/uboot-$(BOARD)-$(1)/openwrt-$(BOARD)-$(1)-u-boot.bin + $(CP) $(PKG_BUILD_DIR)/u-boot.kwb \ + $(BIN_DIR)/uboot-$(BOARD)-$(1)/openwrt-$(BOARD)-$(1)-u-boot.kwb + $(CP) $(PKG_BUILD_DIR)/u-boot.img \ + $(BIN_DIR)/uboot-$(BOARD)-$(1)/openwrt-$(BOARD)-$(1)-u-boot.img + $(INSTALL_DIR) $(BIN_DIR)/u-boot-kwboot/ + $(CP) $(PKG_BUILD_DIR)/tools/kwboot \ + $(BIN_DIR)/u-boot-kwboot/ +endef + +define Package/uboot/install/template +define Package/uboot-kirkwood-$(1)/install + $(call Package/uboot/install/default,$(2)) +endef +endef + +$(foreach u,$(UBOOTS), \ + $(eval $(call Package/uboot/install/template,$(u),$(u))) \ +) + +$(foreach u,$(UBOOTS), \ + $(eval $(call BuildUBootPackage,$(u))) \ + $(eval $(call BuildPackage,uboot-kirkwood-$(u))) \ +) diff --git a/package/boot/uboot-kirkwood-mibodhi/patches/200-openwrt-config.patch b/package/boot/uboot-kirkwood-mibodhi/patches/200-openwrt-config.patch new file mode 100644 index 0000000..8abbfe6 --- /dev/null +++ b/package/boot/uboot-kirkwood-mibodhi/patches/200-openwrt-config.patch @@ -0,0 +1,109 @@ +--- /dev/null ++++ b/include/configs/openwrt-kirkwood-common.h +@@ -0,0 +1,47 @@ ++/* ++ * Copyright (C) 2013 Luka Perkov <l...@openwrt.org> ++ * ++ * SPDX-License-Identifier: GPL-2.0+ ++ */ ++ ++#ifndef __OPENWRT_KIRKWOOD_COMMON_H ++#define __OPENWRT_KIRKWOOD_COMMON_H ++ ++/* Commands */ ++#define CONFIG_CMD_BOOTZ ++ ++#if defined(CONFIG_CMD_NET) ++#define CONFIG_CMD_DHCP ++#define CONFIG_CMD_PING ++#endif ++ ++/* Auto boot */ ++#undef CONFIG_BOOTDELAY ++#define CONFIG_BOOTDELAY 3 ++ ++/* Ethernet */ ++#if defined(CONFIG_CMD_NET) ++#define CONFIG_SERVERIP 192.168.1.2 ++#define CONFIG_IPADDR 192.168.1.1 ++#endif ++ ++/* second stage loader */ ++#if defined(CONFIG_SECOND_STAGE) ++#undef CONFIG_ENV_IS_IN_NAND ++#undef CONFIG_ENV_SECT_SIZE ++#define CONFIG_ENV_IS_NOWHERE ++#endif ++ ++/* Flattened Device Tree */ ++#define CONFIG_OF_LIBFDT ++ ++/* Flattened uImage Tree */ ++#define CONFIG_FIT ++#define CONFIG_FIT_VERBOSE ++ ++/* Various */ ++#define CONFIG_BZIP2 ++#define CONFIG_LZMA ++#define CONFIG_LZO ++ ++#endif /* __OPENWRT_KIRKWOOD_COMMON_H */ +--- a/include/configs/pogo_v4.h ++++ b/include/configs/pogo_v4.h +@@ -94,19 +94,40 @@ + * Default environment variables + */ + #define CONFIG_BOOTCOMMAND \ +- "setenv bootargs ${bootargs_console}; " \ +- "run bootcmd_mmc; " \ +- "bootm 0x00800000 0x01100000" ++ "mmc rescan; usb start;" \ ++ "loaderprefix= ; run boot_try_mmc; run boot_try_usb;" \ ++ "loaderprefix=/boot; run boot_try_mmc; run boot_try_usb; run boot_try_ubi" + + #define CONFIG_EXTRA_ENV_SETTINGS \ +- "mtdparts=mtdparts=orion_nand:2M(u-boot),3M(uImage)," \ +- "3M(uImage2),8M(failsafe),112M(root)\0"\ ++ "mtdparts=mtdparts=orion_nand:1M(u-boot),127M(root)\0"\ + "mtdids=nand0=orion_nand\0"\ ++ \ + "bootargs_console=console=ttyS0,115200\0" \ +- "bootcmd_mmc=mmc init; ext2load mmc 0:1 0x00800000 /uImage; " \ +- "ext2load mmc 0:1 0x01100000 /uInitrd\0" \ +- "bootcmd_usb=usb start; ext2load usb 0:1 0x00800000 /uImage; " \ +- "ext2load usb 0:1 0x01100000 /uInitrd\0" ++ \ ++ "boot_condload=if ${loadercmd} 0x00800000 ${loaderprefix}/uImage; then " \ ++ "if ${loadercmd} 0x01100000 ${loaderprefix}/uInitrd; then " \ ++ "setenv bootmargs 0x00800000 0x01100000; " \ ++ "else setenv bootmargs 0x00800000 -; fi; " \ ++ "if ${loadercmd} 0x00700000 ${loaderprefix}/pogov4.dtb; then " \ ++ "fdt addr 0x00700000; fdt resize; fdt chosen; " \ ++ "setenv bootmargs ${bootmargs} 0x00700000; fi; " \ ++ "run bootcmd_do_bootm; fi\0" \ ++ "bootcmd_do_bootm=" \ ++ "setenv bootargs $bootargs_console $mtdids $mtdparts $loaderbootargs;" \ ++ "bootm ${bootmargs}\0" \ ++ \ ++ "boot_try_mmc=if mmc info; then"\ ++ "setenv loadercmd \"ext4load mmc 0:1\";" \ ++ "setenv loaderbootargs \"root=/dev/mmcblk0p1 rootfstype=ext4 rootwait\";" \ ++ "run boot_condload; fi\0" \ ++ "boot_try_usb=if usb storage; then" \ ++ "setenv loadercmd \"ext4load usb 0:1\";" \ ++ "setenv loaderbootargs \"root=/dev/sda1 rootfstype=ext4 rootwait\";" \ ++ "run boot_condload; fi\0" \ ++ "boot_try_ubi=if ubi part root ; ubifsmount ubi:rootfs ; then"\ ++ "setenv loadercmd \"ubifsload\";" \ ++ "setenv loaderbootargs \"ubi.mtd=1 root=ubi0:rootfs rootfstype=ubifs\";" \ ++ "run boot_condload; fi\0" + + /* + * Ethernet Driver configuration +@@ -167,4 +184,6 @@ + + #define CONFIG_KIRKWOOD_GPIO + ++#include "openwrt-kirkwood-common.h" ++ + #endif /* _CONFIG_POGO_V4_H */ diff --git a/target/linux/kirkwood/image/Makefile b/target/linux/kirkwood/image/Makefile index e3c6f0b..81f86bb 100644 --- a/target/linux/kirkwood/image/Makefile +++ b/target/linux/kirkwood/image/Makefile @@ -132,6 +132,9 @@ Image/InstallKernel/Template/ICONNECT=$(call Image/InstallKernel/Template,iconne Image/BuildKernel/Template/POGOE02=$(call Image/BuildKernel/Template,pogo_e02) Image/InstallKernel/Template/POGOE02=$(call Image/InstallKernel/Template,pogo_e02) +Image/BuildKernel/Template/POGO4=$(call Image/BuildKernel/Template,pogov4) +Image/InstallKernel/Template/POGO4=$(call Image/InstallKernel/Template,pogov4) + define Image/BuildKernel $(call Image/BuildKernel/Template/$(PROFILE)) endef diff --git a/target/linux/kirkwood/patches-3.14/160-pogoplug_v4.patch b/target/linux/kirkwood/patches-3.14/160-pogoplug_v4.patch new file mode 100644 index 0000000..cf3f1e2 --- /dev/null +++ b/target/linux/kirkwood/patches-3.14/160-pogoplug_v4.patch @@ -0,0 +1,179 @@ +With much help from others at https://forum.openwrt.org/viewtopic.php?pid=250745#p250745 + +--- linux-3.14.18/arch/arm/boot/dts/Makefile.orig ++++ linux-3.14.18/arch/arm/boot/dts/Makefile +@@ -114,6 +114,7 @@ + kirkwood-openblocks_a6.dtb \ + kirkwood-openblocks_a7.dtb \ + kirkwood-pogo_e02.dtb \ ++ kirkwood-pogov4.dtb \ + kirkwood-sheevaplug.dtb \ + kirkwood-sheevaplug-esata.dtb \ + kirkwood-topkick.dtb \ + + +--- /dev/null ++++ linux-3.14.18/arch/arm/boot/dts/kirkwood-pogov4.dts +@@ -0,0 +1,161 @@ ++/dts-v1/; ++ ++#include "kirkwood.dtsi" ++#include "kirkwood-6281.dtsi" ++ ++/ { ++ model = "Pogoplug V4"; ++ compatible = "cloudengines,pogoplugv4", "marvell,kirkwood-88f6192", "marvell,kirkwood"; ++ ++ memory { ++ device_type = "memory"; ++ reg = <0x00000000 0x8000000>; ++ }; ++ ++ chosen { ++ bootargs = "console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p1 rootdelay=10"; ++ }; ++ ++ mbus { ++ pcie-controller { ++ status = "okay"; ++ ++ pcie@1,0 { ++ status = "okay"; ++ }; ++ }; ++ }; ++ ++ ocp@f1000000 { ++ pinctrl: pinctrl@10000 { ++ pmx_led_green: pmx-led-green { ++ marvell,pins = "mpp22"; ++ marvell,function = "gpio"; ++ }; ++ pmx_led_red: pmx-led-red { ++ marvell,pins = "mpp24"; ++ marvell,function = "gpio"; ++ }; ++ pmx_sdio_cd: pmx-sdio-cd { ++ marvell,pins = "mpp27"; ++ marvell,function = "gpio"; ++ }; ++ pmx_sdio_wp: pmx-sdio-wp { ++ marvell,pins = "mpp28"; ++ marvell,function = "gpio"; ++ }; ++ pmx_button_eject: pmx-button-eject { ++ marvell,pins = "mpp29"; ++ marvell,function = "gpio"; ++ }; ++ }; ++ ++ spi@10600 { ++ status = "okay"; ++ ++ m25p05@0 { ++ compatible = "m25p05-nonjedec"; ++ reg = <0>; ++ spi-max-frequency = <20000000>; ++ mode = <0>; ++ }; ++ }; ++ ++ serial@12000 { ++ status = "ok"; ++ }; ++ ++ sata@80000 { ++ status = "okay"; ++ nr-ports = <1>; ++ }; ++ ++ i2c0: i2c@11000 { ++ status = "ok"; ++ }; ++ ++ mvsdio@90000 { ++ pinctrl-0 = <&pmx_sdio &pmx_sdio_cd &pmx_sdio_wp>; ++ pinctrl-names = "default"; ++ status = "okay"; ++ cd-gpios = <&gpio0 27 1>; ++ wp-gpios = <&gpio0 28 1>; ++ }; ++ }; ++ ++ gpio-leds { ++ compatible = "gpio-leds"; ++ pinctrl-0 = <&pmx_led_green &pmx_led_red>; ++ pinctrl-names = "default"; ++ health { ++ label = "status:green:health"; ++ gpios = <&gpio0 22 1>; ++ linux,default-trigger = "default-on"; ++ }; ++ fault { ++ label = "status:red:fault"; ++ gpios = <&gpio0 24 1>; ++ linux,default-trigger = "none"; ++ }; ++ }; ++ ++ gpio_keys { ++ compatible = "gpio-keys"; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ pinctrl-0 = <&pmx_button_eject>; ++ pinctrl-names = "default"; ++ ++ button@1 { ++ label = "Eject Button"; ++ linux,code = <KEY_EJECTCD>; ++ gpios = <&gpio0 29 1>; ++ }; ++ }; ++}; ++ ++&mdio { ++ status = "okay"; ++ ++ ethphy0: ethernet-phy@0 { ++ device_type = "ethernet-phy"; ++ reg = <0>; ++ }; ++}; ++ ++ð0 { ++ status = "okay"; ++ ethernet0-port@0 { ++ phy-handle = <ðphy0>; ++ }; ++}; ++ ++&nand { ++ status = "okay"; ++ ++ partition@0 { ++ label = "u-boot"; ++ reg = <0x0000000 0x200000>; ++ read-only; ++ }; ++ ++ partition@200000 { ++ label = "uImage"; ++ reg = <0x200000 0x300000>; ++ }; ++ ++ partition@500000 { ++ label = "uImage2"; ++ reg = <0x500000 0x300000>; ++ }; ++ ++ partition@800000 { ++ label = "failsafe"; ++ reg = <0x800000 0x800000>; ++ }; ++ ++ partition@2500000 { ++ label = "root"; ++ reg = <0x1000000 0x7000000>; ++ }; ++}; + diff --git a/target/linux/kirkwood/profiles/110-nas.mk b/target/linux/kirkwood/profiles/110-nas.mk index eff5952..a31a7f2 100644 --- a/target/linux/kirkwood/profiles/110-nas.mk +++ b/target/linux/kirkwood/profiles/110-nas.mk @@ -84,3 +84,29 @@ POGOE02_UBIFS_OPTS:="-m 2048 -e 126KiB -c 4096" POGOE02_UBI_OPTS:="-m 2048 -p 128KiB -s 512" $(eval $(call Profile,POGOE02)) + +define Profile/POGO4 + NAME:=Cloud Engines Pogoplug v4 + PACKAGES:= \ + kmod-ata-marvell-sata \ + kmod-crypto-mv-cesa \ + kmod-i2c-mv64xxx \ + kmod-thermal-kirkwood \ + kmod-usb2 kmod-usb3 \ + kmod-usb-storage \ + uboot-kirkwood-pogo4 \ + uboot-envtools + DEPENDS:= \ + +@TARGET_ROOTFS_INCLUDE_KERNEL \ + +@TARGET_ROOTFS_INCLUDE_UIMAGE \ + +@TARGET_ROOTFS_INCLUDE_DTB +endef + +define Profile/POGO4/Description + Package set compatible with Cloud Engines Pogoplug v4 board. +endef + +POGO4_UBIFS_OPTS:="-m 2048 -e 126KiB -c 4096" +POGO4_UBI_OPTS:="-m 2048 -p 128KiB -s 512" + +$(eval $(call Profile,POGO4))
pgpGF6ceyPNvL.pgp
Description: PGP signature
_______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel