[OpenWrt-Devel] Pogoplug V4 support
Luka Perkov
luka at openwrt.org
Mon Nov 10 18:46:01 EST 2014
On Sat, Oct 25, 2014 at 10:00:33PM +0000, nwf wrote:
> 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.
This patch should be split into two. One for the kernel part and one for
the uboot package. Also, don't create a new uboot-kirkwood-mibodhi
package - the existing uboot-kirkwood should be patched instead.
Luka
> --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:=git at 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 <luka at 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 at 1,0 {
> ++ status = "okay";
> ++ };
> ++ };
> ++ };
> ++
> ++ ocp at f1000000 {
> ++ pinctrl: pinctrl at 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 at 10600 {
> ++ status = "okay";
> ++
> ++ m25p05 at 0 {
> ++ compatible = "m25p05-nonjedec";
> ++ reg = <0>;
> ++ spi-max-frequency = <20000000>;
> ++ mode = <0>;
> ++ };
> ++ };
> ++
> ++ serial at 12000 {
> ++ status = "ok";
> ++ };
> ++
> ++ sata at 80000 {
> ++ status = "okay";
> ++ nr-ports = <1>;
> ++ };
> ++
> ++ i2c0: i2c at 11000 {
> ++ status = "ok";
> ++ };
> ++
> ++ mvsdio at 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 at 1 {
> ++ label = "Eject Button";
> ++ linux,code = <KEY_EJECTCD>;
> ++ gpios = <&gpio0 29 1>;
> ++ };
> ++ };
> ++};
> ++
> ++&mdio {
> ++ status = "okay";
> ++
> ++ ethphy0: ethernet-phy at 0 {
> ++ device_type = "ethernet-phy";
> ++ reg = <0>;
> ++ };
> ++};
> ++
> ++ð0 {
> ++ status = "okay";
> ++ ethernet0-port at 0 {
> ++ phy-handle = <ðphy0>;
> ++ };
> ++};
> ++
> ++&nand {
> ++ status = "okay";
> ++
> ++ partition at 0 {
> ++ label = "u-boot";
> ++ reg = <0x0000000 0x200000>;
> ++ read-only;
> ++ };
> ++
> ++ partition at 200000 {
> ++ label = "uImage";
> ++ reg = <0x200000 0x300000>;
> ++ };
> ++
> ++ partition at 500000 {
> ++ label = "uImage2";
> ++ reg = <0x500000 0x300000>;
> ++ };
> ++
> ++ partition at 800000 {
> ++ label = "failsafe";
> ++ reg = <0x800000 0x800000>;
> ++ };
> ++
> ++ partition at 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:= \
> + + at TARGET_ROOTFS_INCLUDE_KERNEL \
> + + at TARGET_ROOTFS_INCLUDE_UIMAGE \
> + + at 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))
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel at lists.openwrt.org
> https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
More information about the openwrt-devel
mailing list