[PATCH 0/8] arm: kirkwood: Add support for Pogoplug V4

Pogoplug V4 specifications:
Kirkwood 88F6192 SoC 800 MHz CPU 1Gbs Ethernet 128 MB RAM 128 MB NAND 1x USB 2.0 2x USB 3.0 (on PCIe bus) 1 SDHC slot 1x External SATA port (USM enclosure form factor slot)
Tony Dinh (8): arm: kirkwood: Pogoplug-V4 : Add DTS files arm: kirkwood: Pogoplug V4 : Add board defconfig file arm: kirkwood: Pogoplug-V4 : Add Kconfig files arm: kirkwood: Pogoplug-V4 : Add board include configs file arm: kirkwood: Pogoplug-V4 : Add board kwbimage file arm: kirkwood: Pogoplug-V4 : Add board implementation header arm: kirkwood: Pogoplug-V4 : Add board implementation arm: kirkwood: Pogoplug-V4 : Add board maintainer
arch/arm/dts/Makefile | 1 + arch/arm/dts/kirkwood-pogoplug_v4.dts | 145 +++++++++++++++++ arch/arm/mach-kirkwood/Kconfig | 4 + board/cloudengines/pogo_v4/Kconfig | 16 ++ board/cloudengines/pogo_v4/MAINTAINERS | 6 + board/cloudengines/pogo_v4/Makefile | 10 ++ board/cloudengines/pogo_v4/kwbimage.cfg | 148 +++++++++++++++++ board/cloudengines/pogo_v4/pogo_v4.c | 204 ++++++++++++++++++++++++ board/cloudengines/pogo_v4/pogo_v4.h | 36 +++++ configs/pogo_v4_defconfig | 97 +++++++++++ include/configs/pogo_v4.h | 94 +++++++++++ 11 files changed, 761 insertions(+) create mode 100644 arch/arm/dts/kirkwood-pogoplug_v4.dts create mode 100644 board/cloudengines/pogo_v4/Kconfig create mode 100644 board/cloudengines/pogo_v4/MAINTAINERS create mode 100644 board/cloudengines/pogo_v4/Makefile create mode 100644 board/cloudengines/pogo_v4/kwbimage.cfg create mode 100644 board/cloudengines/pogo_v4/pogo_v4.c create mode 100644 board/cloudengines/pogo_v4/pogo_v4.h create mode 100644 configs/pogo_v4_defconfig create mode 100644 include/configs/pogo_v4.h

Add DTS files for Pogoplug V4 board
Signed-off-by: Tony Dinh mibodhi@gmail.com ---
arch/arm/dts/Makefile | 1 + arch/arm/dts/kirkwood-pogoplug_v4.dts | 145 ++++++++++++++++++++++++++ 2 files changed, 146 insertions(+) create mode 100644 arch/arm/dts/kirkwood-pogoplug_v4.dts
diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile index 7f622fedbd..716c6c0ed2 100644 --- a/arch/arm/dts/Makefile +++ b/arch/arm/dts/Makefile @@ -68,6 +68,7 @@ dtb-$(CONFIG_ARCH_KIRKWOOD) += \ kirkwood-openrd-client.dtb \ kirkwood-openrd-ultimate.dtb \ kirkwood-pogo_e02.dtb \ + kirkwood-pogoplug_v4.dtb \ kirkwood-sheevaplug.dtb
dtb-$(CONFIG_MACH_S900) += \ diff --git a/arch/arm/dts/kirkwood-pogoplug_v4.dts b/arch/arm/dts/kirkwood-pogoplug_v4.dts new file mode 100644 index 0000000000..b4754f600e --- /dev/null +++ b/arch/arm/dts/kirkwood-pogoplug_v4.dts @@ -0,0 +1,145 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright (C) 2014-2021 Tony Dinh mibodhi@gmail.com + * + * Device tree file for the Pogoplug V4/Mobile + * + */ + +/dts-v1/; + +#include "kirkwood.dtsi" +#include "kirkwood-6192.dtsi" + +/ { + model = "Pogoplug v4"; + compatible = "cloudengines,pogoplug-v4", "cloudengines,pogoplug-mobile", + "marvell,kirkwood-88f6192", "marvell,kirkwood"; + + memory { + device_type = "memory"; + reg = <0x00000000 0x8000000>; + }; + + chosen { + bootargs = "console=ttyS0,115200"; + stdout-path = &uart0; + }; + + ocp@f1000000 { + pinctrl: pin-controller@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_button_eject: pmx-button-eject { + marvell,pins = "mpp29"; + marvell,function = "gpio"; + }; + }; + + serial@12000 { + status = "ok"; + }; + + sata@80000 { + status = "okay"; + nr-ports = <2>; + }; + + mvsdio@90000 { + pinctrl-0 = <&pmx_sdio>; + pinctrl-names = "default"; + status = "okay"; + cd-gpios = <&gpio0 27 GPIO_ACTIVE_HIGH>; + /* No WP GPIO */ + }; + }; + + gpio-leds { + compatible = "gpio-leds"; + pinctrl-0 = <&pmx_led_red &pmx_led_green>; + pinctrl-names = "default"; + + health { + label = "status:green:health"; + gpios = <&gpio0 22 GPIO_ACTIVE_LOW>; + default-state = "keep"; + }; + fault { + label = "status:red:fault"; + gpios = <&gpio0 24 GPIO_ACTIVE_LOW>; + }; + }; + + 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 GPIO_ACTIVE_LOW>; + }; + }; + +}; + +&nand { + status = "okay"; + + partition@0 { + label = "u-boot"; + reg = <0x0000000 0x200000>; + }; + + partition@200000 { + label = "uImage"; + reg = <0x200000 0x300000>; + }; + + partition@500000 { + label = "uImage2"; + reg = <0x500000 0x300000>; + }; + + partition@800000 { + label = "failsafe"; + reg = <0x800000 0x800000>; + }; + + partition@1000000 { + label = "root"; + reg = <0x1000000 0x7000000>; + }; +}; + +&mdio { + status = "okay"; + + ethphy0: ethernet-phy@0 { + reg = <0>; + }; +}; + +ð0 { + status = "okay"; + ethernet0-port@0 { + phy-handle = <ðphy0>; + }; +}; + +&pciec { + status = "okay"; +}; + +&pcie0 { + status = "okay"; +};

On Fri, 17 Dec 2021 20:23:27 -0800 Tony Dinh mibodhi@gmail.com wrote:
Hi,
Add DTS files for Pogoplug V4 board
is there any reason you didn't take the kirkwood-pogoplug-series-4.dts file from the Linux tree? That is the same device, isn't it?
Tom will ask you about the upstream status anyway...
Cheers, Andre
Signed-off-by: Tony Dinh mibodhi@gmail.com
arch/arm/dts/Makefile | 1 + arch/arm/dts/kirkwood-pogoplug_v4.dts | 145 ++++++++++++++++++++++++++ 2 files changed, 146 insertions(+) create mode 100644 arch/arm/dts/kirkwood-pogoplug_v4.dts
diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile index 7f622fedbd..716c6c0ed2 100644 --- a/arch/arm/dts/Makefile +++ b/arch/arm/dts/Makefile @@ -68,6 +68,7 @@ dtb-$(CONFIG_ARCH_KIRKWOOD) += \ kirkwood-openrd-client.dtb \ kirkwood-openrd-ultimate.dtb \ kirkwood-pogo_e02.dtb \
- kirkwood-pogoplug_v4.dtb \ kirkwood-sheevaplug.dtb
dtb-$(CONFIG_MACH_S900) += \ diff --git a/arch/arm/dts/kirkwood-pogoplug_v4.dts b/arch/arm/dts/kirkwood-pogoplug_v4.dts new file mode 100644 index 0000000000..b4754f600e --- /dev/null +++ b/arch/arm/dts/kirkwood-pogoplug_v4.dts @@ -0,0 +1,145 @@ +// SPDX-License-Identifier: GPL-2.0+ +/*
- Copyright (C) 2014-2021 Tony Dinh mibodhi@gmail.com
- Device tree file for the Pogoplug V4/Mobile
- */
+/dts-v1/;
+#include "kirkwood.dtsi" +#include "kirkwood-6192.dtsi"
+/ {
- model = "Pogoplug v4";
- compatible = "cloudengines,pogoplug-v4", "cloudengines,pogoplug-mobile",
"marvell,kirkwood-88f6192", "marvell,kirkwood";
- memory {
device_type = "memory";
reg = <0x00000000 0x8000000>;
- };
- chosen {
bootargs = "console=ttyS0,115200";
stdout-path = &uart0;
- };
- ocp@f1000000 {
pinctrl: pin-controller@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_button_eject: pmx-button-eject {
marvell,pins = "mpp29";
marvell,function = "gpio";
};
};
serial@12000 {
status = "ok";
};
sata@80000 {
status = "okay";
nr-ports = <2>;
};
mvsdio@90000 {
pinctrl-0 = <&pmx_sdio>;
pinctrl-names = "default";
status = "okay";
cd-gpios = <&gpio0 27 GPIO_ACTIVE_HIGH>;
/* No WP GPIO */
};
- };
- gpio-leds {
compatible = "gpio-leds";
pinctrl-0 = <&pmx_led_red &pmx_led_green>;
pinctrl-names = "default";
health {
label = "status:green:health";
gpios = <&gpio0 22 GPIO_ACTIVE_LOW>;
default-state = "keep";
};
fault {
label = "status:red:fault";
gpios = <&gpio0 24 GPIO_ACTIVE_LOW>;
};
- };
- 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 GPIO_ACTIVE_LOW>;
};
- };
+};
+&nand {
- status = "okay";
- partition@0 {
label = "u-boot";
reg = <0x0000000 0x200000>;
- };
- partition@200000 {
label = "uImage";
reg = <0x200000 0x300000>;
- };
- partition@500000 {
label = "uImage2";
reg = <0x500000 0x300000>;
- };
- partition@800000 {
label = "failsafe";
reg = <0x800000 0x800000>;
- };
- partition@1000000 {
label = "root";
reg = <0x1000000 0x7000000>;
- };
+};
+&mdio {
- status = "okay";
- ethphy0: ethernet-phy@0 {
reg = <0>;
- };
+};
+ð0 {
- status = "okay";
- ethernet0-port@0 {
phy-handle = <ðphy0>;
- };
+};
+&pciec {
- status = "okay";
+};
+&pcie0 {
- status = "okay";
+};

HI Andre,
On Sat, Dec 18, 2021 at 8:38 AM Andre Przywara andre.przywara@arm.com wrote:
On Fri, 17 Dec 2021 20:23:27 -0800 Tony Dinh mibodhi@gmail.com wrote:
Hi,
Add DTS files for Pogoplug V4 board
is there any reason you didn't take the kirkwood-pogoplug-series-4.dts file from the Linux tree? That is the same device, isn't it?
Tom will ask you about the upstream status anyway...
There were some differences that I dislike about the Linux tree version. Such as the NAND mtd0 is read-only, but we store the envs in mtd0 (a few blocks after the u-boot image). It seems we both created this DTS about the same time back then in early 2010's using the same source as a base. Both versions are identical in substance, but the node placements are different.
I'm not familiar with the thinking here. If we take the Linux upstream version, are we allowed to modify it? please advise.
Thanks, Tony
Cheers, Andre
Signed-off-by: Tony Dinh mibodhi@gmail.com
arch/arm/dts/Makefile | 1 + arch/arm/dts/kirkwood-pogoplug_v4.dts | 145 ++++++++++++++++++++++++++ 2 files changed, 146 insertions(+) create mode 100644 arch/arm/dts/kirkwood-pogoplug_v4.dts
diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile index 7f622fedbd..716c6c0ed2 100644 --- a/arch/arm/dts/Makefile +++ b/arch/arm/dts/Makefile @@ -68,6 +68,7 @@ dtb-$(CONFIG_ARCH_KIRKWOOD) += \ kirkwood-openrd-client.dtb \ kirkwood-openrd-ultimate.dtb \ kirkwood-pogo_e02.dtb \
kirkwood-pogoplug_v4.dtb \ kirkwood-sheevaplug.dtb
dtb-$(CONFIG_MACH_S900) += \ diff --git a/arch/arm/dts/kirkwood-pogoplug_v4.dts b/arch/arm/dts/kirkwood-pogoplug_v4.dts new file mode 100644 index 0000000000..b4754f600e --- /dev/null +++ b/arch/arm/dts/kirkwood-pogoplug_v4.dts @@ -0,0 +1,145 @@ +// SPDX-License-Identifier: GPL-2.0+ +/*
- Copyright (C) 2014-2021 Tony Dinh mibodhi@gmail.com
- Device tree file for the Pogoplug V4/Mobile
- */
+/dts-v1/;
+#include "kirkwood.dtsi" +#include "kirkwood-6192.dtsi"
+/ {
model = "Pogoplug v4";
compatible = "cloudengines,pogoplug-v4", "cloudengines,pogoplug-mobile",
"marvell,kirkwood-88f6192", "marvell,kirkwood";
memory {
device_type = "memory";
reg = <0x00000000 0x8000000>;
};
chosen {
bootargs = "console=ttyS0,115200";
stdout-path = &uart0;
};
ocp@f1000000 {
pinctrl: pin-controller@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_button_eject: pmx-button-eject {
marvell,pins = "mpp29";
marvell,function = "gpio";
};
};
serial@12000 {
status = "ok";
};
sata@80000 {
status = "okay";
nr-ports = <2>;
};
mvsdio@90000 {
pinctrl-0 = <&pmx_sdio>;
pinctrl-names = "default";
status = "okay";
cd-gpios = <&gpio0 27 GPIO_ACTIVE_HIGH>;
/* No WP GPIO */
};
};
gpio-leds {
compatible = "gpio-leds";
pinctrl-0 = <&pmx_led_red &pmx_led_green>;
pinctrl-names = "default";
health {
label = "status:green:health";
gpios = <&gpio0 22 GPIO_ACTIVE_LOW>;
default-state = "keep";
};
fault {
label = "status:red:fault";
gpios = <&gpio0 24 GPIO_ACTIVE_LOW>;
};
};
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 GPIO_ACTIVE_LOW>;
};
};
+};
+&nand {
status = "okay";
partition@0 {
label = "u-boot";
reg = <0x0000000 0x200000>;
};
partition@200000 {
label = "uImage";
reg = <0x200000 0x300000>;
};
partition@500000 {
label = "uImage2";
reg = <0x500000 0x300000>;
};
partition@800000 {
label = "failsafe";
reg = <0x800000 0x800000>;
};
partition@1000000 {
label = "root";
reg = <0x1000000 0x7000000>;
};
+};
+&mdio {
status = "okay";
ethphy0: ethernet-phy@0 {
reg = <0>;
};
+};
+ð0 {
status = "okay";
ethernet0-port@0 {
phy-handle = <ðphy0>;
};
+};
+&pciec {
status = "okay";
+};
+&pcie0 {
status = "okay";
+};

On Sat, 18 Dec 2021 14:05:39 -0800 Tony Dinh mibodhi@gmail.com wrote:
Hi Tony,
On Sat, Dec 18, 2021 at 8:38 AM Andre Przywara andre.przywara@arm.com wrote:
On Fri, 17 Dec 2021 20:23:27 -0800 Tony Dinh mibodhi@gmail.com wrote:
Hi,
Add DTS files for Pogoplug V4 board
is there any reason you didn't take the kirkwood-pogoplug-series-4.dts file from the Linux tree? That is the same device, isn't it?
Tom will ask you about the upstream status anyway...
There were some differences that I dislike about the Linux tree version. Such as the NAND mtd0 is read-only, but we store the envs in mtd0 (a few blocks after the u-boot image). It seems we both created this DTS about the same time back then in early 2010's using the same source as a base. Both versions are identical in substance, but the node placements are different.
I'm not familiar with the thinking here. If we take the Linux upstream version, are we allowed to modify it? please advise.
In general the rule is to only take verbatim copies from the Linux tree. The DT describes the hardware, so there should be no change needed between U-Boot and Linux. The kernel has more reviewers for DT changes, so their DTs are of better quality.
So if you think the DT in the kernel tree is wrong or missing out, you should try to send a patch to Linux to get this fixed, then sync the change into the U-Boot tree.
There is a way to make small changes to the DT that U-Boot sees: You create a file with the same stub name, but add "-u-boot.dtsi", and put your changes in there. Look into arch/arm/dts, there are plenty of examples. However you should have a good reason for doing that, and ideally would not need that at all.
Your case is somewhat interesting: the partition isn't technically write-protected, I guess, it's probably just some Linux safe guarding measure to prevent accidental overwrites of the firmware. So read-only in there is strictly speaking not correct, so you should try to get this fixed in Linux. Ideally U-Boot would add the read-only property, after it consumed the node, so that the kernel does not stomp over it (unless you want U-Boot environment access from Linux).
So in your case you should copy the existing kernel DT, and then put: "/delete-property/ read-only;" in *-u-boot.dtsi. What DT do you typically give to the kernel? Something loaded along with the kernel? Or just the U-Boot DT, using $fdtcontroladdr?
Cheers, Andre
Signed-off-by: Tony Dinh mibodhi@gmail.com
arch/arm/dts/Makefile | 1 + arch/arm/dts/kirkwood-pogoplug_v4.dts | 145 ++++++++++++++++++++++++++ 2 files changed, 146 insertions(+) create mode 100644 arch/arm/dts/kirkwood-pogoplug_v4.dts
diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile index 7f622fedbd..716c6c0ed2 100644 --- a/arch/arm/dts/Makefile +++ b/arch/arm/dts/Makefile @@ -68,6 +68,7 @@ dtb-$(CONFIG_ARCH_KIRKWOOD) += \ kirkwood-openrd-client.dtb \ kirkwood-openrd-ultimate.dtb \ kirkwood-pogo_e02.dtb \
kirkwood-pogoplug_v4.dtb \ kirkwood-sheevaplug.dtb
dtb-$(CONFIG_MACH_S900) += \ diff --git a/arch/arm/dts/kirkwood-pogoplug_v4.dts b/arch/arm/dts/kirkwood-pogoplug_v4.dts new file mode 100644 index 0000000000..b4754f600e --- /dev/null +++ b/arch/arm/dts/kirkwood-pogoplug_v4.dts @@ -0,0 +1,145 @@ +// SPDX-License-Identifier: GPL-2.0+ +/*
- Copyright (C) 2014-2021 Tony Dinh mibodhi@gmail.com
- Device tree file for the Pogoplug V4/Mobile
- */
+/dts-v1/;
+#include "kirkwood.dtsi" +#include "kirkwood-6192.dtsi"
+/ {
model = "Pogoplug v4";
compatible = "cloudengines,pogoplug-v4", "cloudengines,pogoplug-mobile",
"marvell,kirkwood-88f6192", "marvell,kirkwood";
memory {
device_type = "memory";
reg = <0x00000000 0x8000000>;
};
chosen {
bootargs = "console=ttyS0,115200";
stdout-path = &uart0;
};
ocp@f1000000 {
pinctrl: pin-controller@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_button_eject: pmx-button-eject {
marvell,pins = "mpp29";
marvell,function = "gpio";
};
};
serial@12000 {
status = "ok";
};
sata@80000 {
status = "okay";
nr-ports = <2>;
};
mvsdio@90000 {
pinctrl-0 = <&pmx_sdio>;
pinctrl-names = "default";
status = "okay";
cd-gpios = <&gpio0 27 GPIO_ACTIVE_HIGH>;
/* No WP GPIO */
};
};
gpio-leds {
compatible = "gpio-leds";
pinctrl-0 = <&pmx_led_red &pmx_led_green>;
pinctrl-names = "default";
health {
label = "status:green:health";
gpios = <&gpio0 22 GPIO_ACTIVE_LOW>;
default-state = "keep";
};
fault {
label = "status:red:fault";
gpios = <&gpio0 24 GPIO_ACTIVE_LOW>;
};
};
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 GPIO_ACTIVE_LOW>;
};
};
+};
+&nand {
status = "okay";
partition@0 {
label = "u-boot";
reg = <0x0000000 0x200000>;
};
partition@200000 {
label = "uImage";
reg = <0x200000 0x300000>;
};
partition@500000 {
label = "uImage2";
reg = <0x500000 0x300000>;
};
partition@800000 {
label = "failsafe";
reg = <0x800000 0x800000>;
};
partition@1000000 {
label = "root";
reg = <0x1000000 0x7000000>;
};
+};
+&mdio {
status = "okay";
ethphy0: ethernet-phy@0 {
reg = <0>;
};
+};
+ð0 {
status = "okay";
ethernet0-port@0 {
phy-handle = <ðphy0>;
};
+};
+&pciec {
status = "okay";
+};
+&pcie0 {
status = "okay";
+};

Hi Andre,
On Sat, Dec 18, 2021 at 4:03 PM Andre Przywara andre.przywara@arm.com wrote:
On Sat, 18 Dec 2021 14:05:39 -0800 Tony Dinh mibodhi@gmail.com wrote:
Hi Tony,
On Sat, Dec 18, 2021 at 8:38 AM Andre Przywara andre.przywara@arm.com wrote:
On Fri, 17 Dec 2021 20:23:27 -0800 Tony Dinh mibodhi@gmail.com wrote:
Hi,
Add DTS files for Pogoplug V4 board
is there any reason you didn't take the kirkwood-pogoplug-series-4.dts file from the Linux tree? That is the same device, isn't it?
Tom will ask you about the upstream status anyway...
There were some differences that I dislike about the Linux tree version. Such as the NAND mtd0 is read-only, but we store the envs in mtd0 (a few blocks after the u-boot image). It seems we both created this DTS about the same time back then in early 2010's using the same source as a base. Both versions are identical in substance, but the node placements are different.
I'm not familiar with the thinking here. If we take the Linux upstream version, are we allowed to modify it? please advise.
In general the rule is to only take verbatim copies from the Linux tree. The DT describes the hardware, so there should be no change needed between U-Boot and Linux. The kernel has more reviewers for DT changes, so their DTs are of better quality.
Definitely, I've also noticed now that the author's name is Linus Walleij.
So if you think the DT in the kernel tree is wrong or missing out, you should try to send a patch to Linux to get this fixed, then sync the change into the U-Boot tree. There is a way to make small changes to the DT that U-Boot sees: You create a file with the same stub name, but add "-u-boot.dtsi", and put your changes in there. Look into arch/arm/dts, there are plenty of examples. However you should have a good reason for doing that, and ideally would not need that at all.
Cool! But I hope we are keeping this approach? I recalled there are some discussions about the FDT and "-u-boot.dtsi" might go away.
Your case is somewhat interesting: the partition isn't technically write-protected, I guess, it's probably just some Linux safe guarding measure to prevent accidental overwrites of the firmware. So read-only in there is strictly speaking not correct, so you should try to get this fixed in Linux. Ideally U-Boot would add the read-only property, after it consumed the node, so that the kernel does not stomp over it (unless you want U-Boot environment access from Linux).
So in your case you should copy the existing kernel DT, and then put: "/delete-property/ read-only;" in *-u-boot.dtsi.
Sounds like the best way to do it.
What DT do you typically give to the kernel? Something loaded along with the kernel? Or just the U-Boot DT, using $fdtcontroladdr?
(A little bit of history: I've been maintaining the Kirkwood u-boots and Linux kernel for a hobbyist community for many years). The approach we take is to load the kernel uImage, uInitrd, and DTB separately from the rootfs. And also let users access the u-boot envs with fw_setenv and fw_printenv in Debian. Basically, we want users to have maximum flexibility about how u-boot starts the kernel. For example, for whatever reason, the users can also choose to load uImage with appended DTB, then the mtd0 in NAND must be writable, i.e. to allow flashing new u-boot and/or envs image in Linux shell.
Thanks, Tony
Cheers, Andre
Signed-off-by: Tony Dinh mibodhi@gmail.com
arch/arm/dts/Makefile | 1 + arch/arm/dts/kirkwood-pogoplug_v4.dts | 145 ++++++++++++++++++++++++++ 2 files changed, 146 insertions(+) create mode 100644 arch/arm/dts/kirkwood-pogoplug_v4.dts
diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile index 7f622fedbd..716c6c0ed2 100644 --- a/arch/arm/dts/Makefile +++ b/arch/arm/dts/Makefile @@ -68,6 +68,7 @@ dtb-$(CONFIG_ARCH_KIRKWOOD) += \ kirkwood-openrd-client.dtb \ kirkwood-openrd-ultimate.dtb \ kirkwood-pogo_e02.dtb \
kirkwood-pogoplug_v4.dtb \ kirkwood-sheevaplug.dtb
dtb-$(CONFIG_MACH_S900) += \ diff --git a/arch/arm/dts/kirkwood-pogoplug_v4.dts b/arch/arm/dts/kirkwood-pogoplug_v4.dts new file mode 100644 index 0000000000..b4754f600e --- /dev/null +++ b/arch/arm/dts/kirkwood-pogoplug_v4.dts @@ -0,0 +1,145 @@ +// SPDX-License-Identifier: GPL-2.0+ +/*
- Copyright (C) 2014-2021 Tony Dinh mibodhi@gmail.com
- Device tree file for the Pogoplug V4/Mobile
- */
+/dts-v1/;
+#include "kirkwood.dtsi" +#include "kirkwood-6192.dtsi"
+/ {
model = "Pogoplug v4";
compatible = "cloudengines,pogoplug-v4", "cloudengines,pogoplug-mobile",
"marvell,kirkwood-88f6192", "marvell,kirkwood";
memory {
device_type = "memory";
reg = <0x00000000 0x8000000>;
};
chosen {
bootargs = "console=ttyS0,115200";
stdout-path = &uart0;
};
ocp@f1000000 {
pinctrl: pin-controller@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_button_eject: pmx-button-eject {
marvell,pins = "mpp29";
marvell,function = "gpio";
};
};
serial@12000 {
status = "ok";
};
sata@80000 {
status = "okay";
nr-ports = <2>;
};
mvsdio@90000 {
pinctrl-0 = <&pmx_sdio>;
pinctrl-names = "default";
status = "okay";
cd-gpios = <&gpio0 27 GPIO_ACTIVE_HIGH>;
/* No WP GPIO */
};
};
gpio-leds {
compatible = "gpio-leds";
pinctrl-0 = <&pmx_led_red &pmx_led_green>;
pinctrl-names = "default";
health {
label = "status:green:health";
gpios = <&gpio0 22 GPIO_ACTIVE_LOW>;
default-state = "keep";
};
fault {
label = "status:red:fault";
gpios = <&gpio0 24 GPIO_ACTIVE_LOW>;
};
};
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 GPIO_ACTIVE_LOW>;
};
};
+};
+&nand {
status = "okay";
partition@0 {
label = "u-boot";
reg = <0x0000000 0x200000>;
};
partition@200000 {
label = "uImage";
reg = <0x200000 0x300000>;
};
partition@500000 {
label = "uImage2";
reg = <0x500000 0x300000>;
};
partition@800000 {
label = "failsafe";
reg = <0x800000 0x800000>;
};
partition@1000000 {
label = "root";
reg = <0x1000000 0x7000000>;
};
+};
+&mdio {
status = "okay";
ethphy0: ethernet-phy@0 {
reg = <0>;
};
+};
+ð0 {
status = "okay";
ethernet0-port@0 {
phy-handle = <ðphy0>;
};
+};
+&pciec {
status = "okay";
+};
+&pcie0 {
status = "okay";
+};

Add board defconfig file for Pogoplug V4 board
Signed-off-by: Tony Dinh mibodhi@gmail.com ---
configs/pogo_v4_defconfig | 97 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 configs/pogo_v4_defconfig
diff --git a/configs/pogo_v4_defconfig b/configs/pogo_v4_defconfig new file mode 100644 index 0000000000..b183c9c46f --- /dev/null +++ b/configs/pogo_v4_defconfig @@ -0,0 +1,97 @@ +# SPDX-License-Identifier: GPL-2.0+ +# +# (C) Copyright 2017-2021 Tony Dinh mibodhi@gmail.com +# +CONFIG_ARM=y +CONFIG_SKIP_LOWLEVEL_INIT=y +CONFIG_SYS_DCACHE_OFF=y +CONFIG_ARCH_CPU_INIT=y +CONFIG_SYS_THUMB_BUILD=y +CONFIG_ARCH_KIRKWOOD=y +CONFIG_SYS_TEXT_BASE=0x600000 +CONFIG_TARGET_POGO_V4=y +CONFIG_ENV_SIZE=0x20000 +CONFIG_ENV_OFFSET=0xC0000 +CONFIG_DEFAULT_DEVICE_TREE="kirkwood-pogoplug_v4" +CONFIG_BOOTDELAY=10 +CONFIG_BOOTSTAGE=y +CONFIG_SHOW_BOOT_PROGRESS=y +CONFIG_USE_PREBOOT=y +CONFIG_HUSH_PARSER=y +CONFIG_SYS_PROMPT="Pogo_V4> " +CONFIG_IDENT_STRING="\nPogoplug V4" +CONFIG_SYS_LOAD_ADDR=0x800000 +CONFIG_VERSION_VARIABLE=y +# CONFIG_CMD_FLASH is not set +CONFIG_CMD_SETEXPR=y +CONFIG_CMD_NAND=y +CONFIG_CMD_MMC=y +CONFIG_CMD_USB=y +CONFIG_CMD_DHCP=y +CONFIG_CMD_MII=y +CONFIG_CMD_PING=y +CONFIG_CMD_EXT2=y +CONFIG_CMD_EXT4=y +CONFIG_CMD_FAT=y +CONFIG_CMD_JFFS2=y +CONFIG_CMD_FS_GENERIC=y +CONFIG_CMD_MTDPARTS=y +CONFIG_MTDPARTS_DEFAULT="mtdparts=orion_nand:2M(u-boot),3M(uImage),3M(uImage2),8M(failsafe),112M(root)" +CONFIG_MTDIDS_DEFAULT="nand0=orion_nand" +CONFIG_CMD_UBI=y +CONFIG_ISO_PARTITION=y +CONFIG_EFI_PARTITION=y +CONFIG_PARTITION_UUIDS=y +CONFIG_PARTITION_TYPE_GUID=y +CONFIG_ENV_OVERWRITE=y +CONFIG_ENV_IS_IN_NAND=y +CONFIG_SYS_NS16550=y +CONFIG_USB=y +CONFIG_USB_STORAGE=y +CONFIG_USB_EHCI_HCD=y +CONFIG_OF_LIBFDT=y +CONFIG_CMD_FDT=y +CONFIG_CMD_BOOTZ=y +CONFIG_NETCONSOLE=y +CONFIG_MTD=y +CONFIG_MTD_RAW_NAND=y +CONFIG_CMD_MTD=y +CONFIG_MTD_PARTITIONS=y +CONFIG_MTD_DEVICE=y +CONFIG_NET=y +CONFIG_NETDEVICES=y +CONFIG_MVGBE=y +CONFIG_MII=y +CONFIG_DM=y +CONFIG_DM_USB=y +CONFIG_OF_CONTROL=y +CONFIG_DM_ETH=y +CONFIG_NET_RANDOM_ETHADDR=y +CONFIG_BLK=y +CONFIG_CMD_SATA=y +CONFIG_SATA_MV=y +CONFIG_DM_MMC=y +CONFIG_MVEBU_MMC=y +CONFIG_CMD_PCI=y +CONFIG_PCI=y +CONFIG_PCI_MVEBU=y +CONFIG_PCI_PNP=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_PCI=y +CONFIG_BOARD_LATE_INIT=y +# +# RTC emulation +# +CONFIG_CMD_DATE=y +CONFIG_PROT_UDP=y +CONFIG_CMD_SNTP=y +CONFIG_CMD_DNS=y +CONFIG_DM_RTC=y +CONFIG_RTC_EMULATION=y +# +# Turn off unused capabilities to save space +# +# CONFIG_BOOTM_PLAN9 is not set +# CONFIG_BOOTM_RTEMS is not set +# CONFIG_BOOTM_VXWORKS is not set +# CONFIG_MMC_HW_PARTITIONING is not set

On Friday 17 December 2021 20:23:28 Tony Dinh wrote:
Add board defconfig file for Pogoplug V4 board
Signed-off-by: Tony Dinh mibodhi@gmail.com
configs/pogo_v4_defconfig | 97 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 configs/pogo_v4_defconfig
diff --git a/configs/pogo_v4_defconfig b/configs/pogo_v4_defconfig new file mode 100644 index 0000000000..b183c9c46f --- /dev/null +++ b/configs/pogo_v4_defconfig @@ -0,0 +1,97 @@ +# SPDX-License-Identifier: GPL-2.0+ +# +# (C) Copyright 2017-2021 Tony Dinh mibodhi@gmail.com +# +CONFIG_ARM=y +CONFIG_SKIP_LOWLEVEL_INIT=y +CONFIG_SYS_DCACHE_OFF=y +CONFIG_ARCH_CPU_INIT=y +CONFIG_SYS_THUMB_BUILD=y +CONFIG_ARCH_KIRKWOOD=y +CONFIG_SYS_TEXT_BASE=0x600000 +CONFIG_TARGET_POGO_V4=y +CONFIG_ENV_SIZE=0x20000 +CONFIG_ENV_OFFSET=0xC0000 +CONFIG_DEFAULT_DEVICE_TREE="kirkwood-pogoplug_v4" +CONFIG_BOOTDELAY=10 +CONFIG_BOOTSTAGE=y +CONFIG_SHOW_BOOT_PROGRESS=y +CONFIG_USE_PREBOOT=y +CONFIG_HUSH_PARSER=y +CONFIG_SYS_PROMPT="Pogo_V4> " +CONFIG_IDENT_STRING="\nPogoplug V4" +CONFIG_SYS_LOAD_ADDR=0x800000 +CONFIG_VERSION_VARIABLE=y +# CONFIG_CMD_FLASH is not set +CONFIG_CMD_SETEXPR=y +CONFIG_CMD_NAND=y +CONFIG_CMD_MMC=y +CONFIG_CMD_USB=y +CONFIG_CMD_DHCP=y +CONFIG_CMD_MII=y +CONFIG_CMD_PING=y +CONFIG_CMD_EXT2=y +CONFIG_CMD_EXT4=y +CONFIG_CMD_FAT=y +CONFIG_CMD_JFFS2=y +CONFIG_CMD_FS_GENERIC=y +CONFIG_CMD_MTDPARTS=y +CONFIG_MTDPARTS_DEFAULT="mtdparts=orion_nand:2M(u-boot),3M(uImage),3M(uImage2),8M(failsafe),112M(root)" +CONFIG_MTDIDS_DEFAULT="nand0=orion_nand" +CONFIG_CMD_UBI=y +CONFIG_ISO_PARTITION=y +CONFIG_EFI_PARTITION=y +CONFIG_PARTITION_UUIDS=y +CONFIG_PARTITION_TYPE_GUID=y +CONFIG_ENV_OVERWRITE=y +CONFIG_ENV_IS_IN_NAND=y +CONFIG_SYS_NS16550=y +CONFIG_USB=y +CONFIG_USB_STORAGE=y +CONFIG_USB_EHCI_HCD=y +CONFIG_OF_LIBFDT=y +CONFIG_CMD_FDT=y +CONFIG_CMD_BOOTZ=y +CONFIG_NETCONSOLE=y +CONFIG_MTD=y +CONFIG_MTD_RAW_NAND=y +CONFIG_CMD_MTD=y +CONFIG_MTD_PARTITIONS=y +CONFIG_MTD_DEVICE=y +CONFIG_NET=y +CONFIG_NETDEVICES=y +CONFIG_MVGBE=y +CONFIG_MII=y +CONFIG_DM=y +CONFIG_DM_USB=y +CONFIG_OF_CONTROL=y +CONFIG_DM_ETH=y +CONFIG_NET_RANDOM_ETHADDR=y +CONFIG_BLK=y +CONFIG_CMD_SATA=y +CONFIG_SATA_MV=y +CONFIG_DM_MMC=y +CONFIG_MVEBU_MMC=y +CONFIG_CMD_PCI=y +CONFIG_PCI=y +CONFIG_PCI_MVEBU=y +CONFIG_PCI_PNP=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_PCI=y +CONFIG_BOARD_LATE_INIT=y +# +# RTC emulation +# +CONFIG_CMD_DATE=y +CONFIG_PROT_UDP=y +CONFIG_CMD_SNTP=y +CONFIG_CMD_DNS=y +CONFIG_DM_RTC=y +CONFIG_RTC_EMULATION=y +# +# Turn off unused capabilities to save space +# +# CONFIG_BOOTM_PLAN9 is not set +# CONFIG_BOOTM_RTEMS is not set +# CONFIG_BOOTM_VXWORKS is not set
+# CONFIG_MMC_HW_PARTITIONING is not set
2.20.1
Hello! Please regenerate this defconfig file to its canonical form. You can do it by commands:
make pogo_v4_defconfig make savedefconfig mv defconfig configs/pogo_v4_defconfig

Hi Pali,
On Sat, Dec 18, 2021 at 5:17 AM Pali Rohár pali@kernel.org wrote:
On Friday 17 December 2021 20:23:28 Tony Dinh wrote:
Add board defconfig file for Pogoplug V4 board
Signed-off-by: Tony Dinh mibodhi@gmail.com
configs/pogo_v4_defconfig | 97 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 configs/pogo_v4_defconfig
diff --git a/configs/pogo_v4_defconfig b/configs/pogo_v4_defconfig new file mode 100644 index 0000000000..b183c9c46f --- /dev/null +++ b/configs/pogo_v4_defconfig @@ -0,0 +1,97 @@ +# SPDX-License-Identifier: GPL-2.0+ +# +# (C) Copyright 2017-2021 Tony Dinh mibodhi@gmail.com +# +CONFIG_ARM=y +CONFIG_SKIP_LOWLEVEL_INIT=y +CONFIG_SYS_DCACHE_OFF=y +CONFIG_ARCH_CPU_INIT=y +CONFIG_SYS_THUMB_BUILD=y +CONFIG_ARCH_KIRKWOOD=y +CONFIG_SYS_TEXT_BASE=0x600000 +CONFIG_TARGET_POGO_V4=y +CONFIG_ENV_SIZE=0x20000 +CONFIG_ENV_OFFSET=0xC0000 +CONFIG_DEFAULT_DEVICE_TREE="kirkwood-pogoplug_v4" +CONFIG_BOOTDELAY=10 +CONFIG_BOOTSTAGE=y +CONFIG_SHOW_BOOT_PROGRESS=y +CONFIG_USE_PREBOOT=y +CONFIG_HUSH_PARSER=y +CONFIG_SYS_PROMPT="Pogo_V4> " +CONFIG_IDENT_STRING="\nPogoplug V4" +CONFIG_SYS_LOAD_ADDR=0x800000 +CONFIG_VERSION_VARIABLE=y +# CONFIG_CMD_FLASH is not set +CONFIG_CMD_SETEXPR=y +CONFIG_CMD_NAND=y +CONFIG_CMD_MMC=y +CONFIG_CMD_USB=y +CONFIG_CMD_DHCP=y +CONFIG_CMD_MII=y +CONFIG_CMD_PING=y +CONFIG_CMD_EXT2=y +CONFIG_CMD_EXT4=y +CONFIG_CMD_FAT=y +CONFIG_CMD_JFFS2=y +CONFIG_CMD_FS_GENERIC=y +CONFIG_CMD_MTDPARTS=y +CONFIG_MTDPARTS_DEFAULT="mtdparts=orion_nand:2M(u-boot),3M(uImage),3M(uImage2),8M(failsafe),112M(root)" +CONFIG_MTDIDS_DEFAULT="nand0=orion_nand" +CONFIG_CMD_UBI=y +CONFIG_ISO_PARTITION=y +CONFIG_EFI_PARTITION=y +CONFIG_PARTITION_UUIDS=y +CONFIG_PARTITION_TYPE_GUID=y +CONFIG_ENV_OVERWRITE=y +CONFIG_ENV_IS_IN_NAND=y +CONFIG_SYS_NS16550=y +CONFIG_USB=y +CONFIG_USB_STORAGE=y +CONFIG_USB_EHCI_HCD=y +CONFIG_OF_LIBFDT=y +CONFIG_CMD_FDT=y +CONFIG_CMD_BOOTZ=y +CONFIG_NETCONSOLE=y +CONFIG_MTD=y +CONFIG_MTD_RAW_NAND=y +CONFIG_CMD_MTD=y +CONFIG_MTD_PARTITIONS=y +CONFIG_MTD_DEVICE=y +CONFIG_NET=y +CONFIG_NETDEVICES=y +CONFIG_MVGBE=y +CONFIG_MII=y +CONFIG_DM=y +CONFIG_DM_USB=y +CONFIG_OF_CONTROL=y +CONFIG_DM_ETH=y +CONFIG_NET_RANDOM_ETHADDR=y +CONFIG_BLK=y +CONFIG_CMD_SATA=y +CONFIG_SATA_MV=y +CONFIG_DM_MMC=y +CONFIG_MVEBU_MMC=y +CONFIG_CMD_PCI=y +CONFIG_PCI=y +CONFIG_PCI_MVEBU=y +CONFIG_PCI_PNP=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_PCI=y +CONFIG_BOARD_LATE_INIT=y +# +# RTC emulation +# +CONFIG_CMD_DATE=y +CONFIG_PROT_UDP=y +CONFIG_CMD_SNTP=y +CONFIG_CMD_DNS=y +CONFIG_DM_RTC=y +CONFIG_RTC_EMULATION=y +# +# Turn off unused capabilities to save space +# +# CONFIG_BOOTM_PLAN9 is not set +# CONFIG_BOOTM_RTEMS is not set +# CONFIG_BOOTM_VXWORKS is not set
+# CONFIG_MMC_HW_PARTITIONING is not set
2.20.1
Hello! Please regenerate this defconfig file to its canonical form. You can do it by commands:
make pogo_v4_defconfig make savedefconfig mv defconfig configs/pogo_v4_defconfig
Yes, it's a bit harder to read, but it should be done.
Thanks, Tony

Hi Tony,
On 12/18/21 22:41, Tony Dinh wrote:
Hi Pali,
On Sat, Dec 18, 2021 at 5:17 AM Pali Rohár pali@kernel.org wrote:
On Friday 17 December 2021 20:23:28 Tony Dinh wrote:
Add board defconfig file for Pogoplug V4 board
Signed-off-by: Tony Dinh mibodhi@gmail.com
configs/pogo_v4_defconfig | 97 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 configs/pogo_v4_defconfig
diff --git a/configs/pogo_v4_defconfig b/configs/pogo_v4_defconfig new file mode 100644 index 0000000000..b183c9c46f --- /dev/null +++ b/configs/pogo_v4_defconfig @@ -0,0 +1,97 @@ +# SPDX-License-Identifier: GPL-2.0+ +# +# (C) Copyright 2017-2021 Tony Dinh mibodhi@gmail.com +# +CONFIG_ARM=y +CONFIG_SKIP_LOWLEVEL_INIT=y +CONFIG_SYS_DCACHE_OFF=y +CONFIG_ARCH_CPU_INIT=y +CONFIG_SYS_THUMB_BUILD=y +CONFIG_ARCH_KIRKWOOD=y +CONFIG_SYS_TEXT_BASE=0x600000 +CONFIG_TARGET_POGO_V4=y +CONFIG_ENV_SIZE=0x20000 +CONFIG_ENV_OFFSET=0xC0000 +CONFIG_DEFAULT_DEVICE_TREE="kirkwood-pogoplug_v4" +CONFIG_BOOTDELAY=10 +CONFIG_BOOTSTAGE=y +CONFIG_SHOW_BOOT_PROGRESS=y +CONFIG_USE_PREBOOT=y +CONFIG_HUSH_PARSER=y +CONFIG_SYS_PROMPT="Pogo_V4> " +CONFIG_IDENT_STRING="\nPogoplug V4" +CONFIG_SYS_LOAD_ADDR=0x800000 +CONFIG_VERSION_VARIABLE=y +# CONFIG_CMD_FLASH is not set +CONFIG_CMD_SETEXPR=y +CONFIG_CMD_NAND=y +CONFIG_CMD_MMC=y +CONFIG_CMD_USB=y +CONFIG_CMD_DHCP=y +CONFIG_CMD_MII=y +CONFIG_CMD_PING=y +CONFIG_CMD_EXT2=y +CONFIG_CMD_EXT4=y +CONFIG_CMD_FAT=y +CONFIG_CMD_JFFS2=y +CONFIG_CMD_FS_GENERIC=y +CONFIG_CMD_MTDPARTS=y +CONFIG_MTDPARTS_DEFAULT="mtdparts=orion_nand:2M(u-boot),3M(uImage),3M(uImage2),8M(failsafe),112M(root)" +CONFIG_MTDIDS_DEFAULT="nand0=orion_nand" +CONFIG_CMD_UBI=y +CONFIG_ISO_PARTITION=y +CONFIG_EFI_PARTITION=y +CONFIG_PARTITION_UUIDS=y +CONFIG_PARTITION_TYPE_GUID=y +CONFIG_ENV_OVERWRITE=y +CONFIG_ENV_IS_IN_NAND=y +CONFIG_SYS_NS16550=y +CONFIG_USB=y +CONFIG_USB_STORAGE=y +CONFIG_USB_EHCI_HCD=y +CONFIG_OF_LIBFDT=y +CONFIG_CMD_FDT=y +CONFIG_CMD_BOOTZ=y +CONFIG_NETCONSOLE=y +CONFIG_MTD=y +CONFIG_MTD_RAW_NAND=y +CONFIG_CMD_MTD=y +CONFIG_MTD_PARTITIONS=y +CONFIG_MTD_DEVICE=y +CONFIG_NET=y +CONFIG_NETDEVICES=y +CONFIG_MVGBE=y +CONFIG_MII=y +CONFIG_DM=y +CONFIG_DM_USB=y +CONFIG_OF_CONTROL=y +CONFIG_DM_ETH=y +CONFIG_NET_RANDOM_ETHADDR=y +CONFIG_BLK=y +CONFIG_CMD_SATA=y +CONFIG_SATA_MV=y +CONFIG_DM_MMC=y +CONFIG_MVEBU_MMC=y +CONFIG_CMD_PCI=y +CONFIG_PCI=y +CONFIG_PCI_MVEBU=y +CONFIG_PCI_PNP=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_PCI=y +CONFIG_BOARD_LATE_INIT=y +# +# RTC emulation +# +CONFIG_CMD_DATE=y +CONFIG_PROT_UDP=y +CONFIG_CMD_SNTP=y +CONFIG_CMD_DNS=y +CONFIG_DM_RTC=y +CONFIG_RTC_EMULATION=y +# +# Turn off unused capabilities to save space +# +# CONFIG_BOOTM_PLAN9 is not set +# CONFIG_BOOTM_RTEMS is not set +# CONFIG_BOOTM_VXWORKS is not set
+# CONFIG_MMC_HW_PARTITIONING is not set
2.20.1
Hello! Please regenerate this defconfig file to its canonical form. You can do it by commands:
make pogo_v4_defconfig make savedefconfig mv defconfig configs/pogo_v4_defconfig
Yes, it's a bit harder to read, but it should be done.
It's not a matter of "harder to read". It's the only way, this file should be generated. Otherwise this will very likely generate merge problems when other changes might get introduced to the config files (e.g. by using moveconfig.py).
Thanks, Stefan

On Sun, Dec 19, 2021 at 11:18 PM Stefan Roese sr@denx.de wrote:
Hi Tony,
On 12/18/21 22:41, Tony Dinh wrote:
Hi Pali,
On Sat, Dec 18, 2021 at 5:17 AM Pali Rohár pali@kernel.org wrote:
On Friday 17 December 2021 20:23:28 Tony Dinh wrote:
Add board defconfig file for Pogoplug V4 board
Signed-off-by: Tony Dinh mibodhi@gmail.com
configs/pogo_v4_defconfig | 97 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 configs/pogo_v4_defconfig
diff --git a/configs/pogo_v4_defconfig b/configs/pogo_v4_defconfig new file mode 100644 index 0000000000..b183c9c46f --- /dev/null +++ b/configs/pogo_v4_defconfig @@ -0,0 +1,97 @@ +# SPDX-License-Identifier: GPL-2.0+ +# +# (C) Copyright 2017-2021 Tony Dinh mibodhi@gmail.com +# +CONFIG_ARM=y +CONFIG_SKIP_LOWLEVEL_INIT=y +CONFIG_SYS_DCACHE_OFF=y +CONFIG_ARCH_CPU_INIT=y +CONFIG_SYS_THUMB_BUILD=y +CONFIG_ARCH_KIRKWOOD=y +CONFIG_SYS_TEXT_BASE=0x600000 +CONFIG_TARGET_POGO_V4=y +CONFIG_ENV_SIZE=0x20000 +CONFIG_ENV_OFFSET=0xC0000 +CONFIG_DEFAULT_DEVICE_TREE="kirkwood-pogoplug_v4" +CONFIG_BOOTDELAY=10 +CONFIG_BOOTSTAGE=y +CONFIG_SHOW_BOOT_PROGRESS=y +CONFIG_USE_PREBOOT=y +CONFIG_HUSH_PARSER=y +CONFIG_SYS_PROMPT="Pogo_V4> " +CONFIG_IDENT_STRING="\nPogoplug V4" +CONFIG_SYS_LOAD_ADDR=0x800000 +CONFIG_VERSION_VARIABLE=y +# CONFIG_CMD_FLASH is not set +CONFIG_CMD_SETEXPR=y +CONFIG_CMD_NAND=y +CONFIG_CMD_MMC=y +CONFIG_CMD_USB=y +CONFIG_CMD_DHCP=y +CONFIG_CMD_MII=y +CONFIG_CMD_PING=y +CONFIG_CMD_EXT2=y +CONFIG_CMD_EXT4=y +CONFIG_CMD_FAT=y +CONFIG_CMD_JFFS2=y +CONFIG_CMD_FS_GENERIC=y +CONFIG_CMD_MTDPARTS=y +CONFIG_MTDPARTS_DEFAULT="mtdparts=orion_nand:2M(u-boot),3M(uImage),3M(uImage2),8M(failsafe),112M(root)" +CONFIG_MTDIDS_DEFAULT="nand0=orion_nand" +CONFIG_CMD_UBI=y +CONFIG_ISO_PARTITION=y +CONFIG_EFI_PARTITION=y +CONFIG_PARTITION_UUIDS=y +CONFIG_PARTITION_TYPE_GUID=y +CONFIG_ENV_OVERWRITE=y +CONFIG_ENV_IS_IN_NAND=y +CONFIG_SYS_NS16550=y +CONFIG_USB=y +CONFIG_USB_STORAGE=y +CONFIG_USB_EHCI_HCD=y +CONFIG_OF_LIBFDT=y +CONFIG_CMD_FDT=y +CONFIG_CMD_BOOTZ=y +CONFIG_NETCONSOLE=y +CONFIG_MTD=y +CONFIG_MTD_RAW_NAND=y +CONFIG_CMD_MTD=y +CONFIG_MTD_PARTITIONS=y +CONFIG_MTD_DEVICE=y +CONFIG_NET=y +CONFIG_NETDEVICES=y +CONFIG_MVGBE=y +CONFIG_MII=y +CONFIG_DM=y +CONFIG_DM_USB=y +CONFIG_OF_CONTROL=y +CONFIG_DM_ETH=y +CONFIG_NET_RANDOM_ETHADDR=y +CONFIG_BLK=y +CONFIG_CMD_SATA=y +CONFIG_SATA_MV=y +CONFIG_DM_MMC=y +CONFIG_MVEBU_MMC=y +CONFIG_CMD_PCI=y +CONFIG_PCI=y +CONFIG_PCI_MVEBU=y +CONFIG_PCI_PNP=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_PCI=y +CONFIG_BOARD_LATE_INIT=y +# +# RTC emulation +# +CONFIG_CMD_DATE=y +CONFIG_PROT_UDP=y +CONFIG_CMD_SNTP=y +CONFIG_CMD_DNS=y +CONFIG_DM_RTC=y +CONFIG_RTC_EMULATION=y +# +# Turn off unused capabilities to save space +# +# CONFIG_BOOTM_PLAN9 is not set +# CONFIG_BOOTM_RTEMS is not set +# CONFIG_BOOTM_VXWORKS is not set
+# CONFIG_MMC_HW_PARTITIONING is not set
2.20.1
Hello! Please regenerate this defconfig file to its canonical form. You can do it by commands:
make pogo_v4_defconfig make savedefconfig mv defconfig configs/pogo_v4_defconfig
Yes, it's a bit harder to read, but it should be done.
It's not a matter of "harder to read". It's the only way, this file should be generated. Otherwise this will very likely generate merge problems when other changes might get introduced to the config files (e.g. by using moveconfig.py).
I see. Thanks for the explanation!
Tony
Thanks, Stefan

Add Kconfig files for Pogoplug V4 board
Signed-off-by: Tony Dinh mibodhi@gmail.com ---
arch/arm/mach-kirkwood/Kconfig | 4 ++++ board/cloudengines/pogo_v4/Kconfig | 16 ++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 board/cloudengines/pogo_v4/Kconfig
diff --git a/arch/arm/mach-kirkwood/Kconfig b/arch/arm/mach-kirkwood/Kconfig index cb4e9f29ef..e8ea4a9956 100644 --- a/arch/arm/mach-kirkwood/Kconfig +++ b/arch/arm/mach-kirkwood/Kconfig @@ -25,6 +25,9 @@ config TARGET_LSXL config TARGET_POGO_E02 bool "pogo_e02 Board"
+config TARGET_POGO_V4 + bool "Pogoplug V4 Board" + config TARGET_DNS325 bool "dns325 Board"
@@ -74,6 +77,7 @@ source "board/Marvell/guruplug/Kconfig" source "board/Marvell/sheevaplug/Kconfig" source "board/buffalo/lsxl/Kconfig" source "board/cloudengines/pogo_e02/Kconfig" +source "board/cloudengines/pogo_v4/Kconfig" source "board/d-link/dns325/Kconfig" source "board/iomega/iconnect/Kconfig" source "board/keymile/Kconfig" diff --git a/board/cloudengines/pogo_v4/Kconfig b/board/cloudengines/pogo_v4/Kconfig new file mode 100644 index 0000000000..db3b76b4d4 --- /dev/null +++ b/board/cloudengines/pogo_v4/Kconfig @@ -0,0 +1,16 @@ +# SPDX-License-Identifier: GPL-2.0+ +# +# (C) Copyright 2014-2021 Tony Dinh mibodhi@gmail.com +# +if TARGET_POGO_V4 + +config SYS_BOARD + default "pogo_v4" + +config SYS_VENDOR + default "cloudengines" + +config SYS_CONFIG_NAME + default "pogo_v4" + +endif

Add include configs file for Pogoplug V4 board
Signed-off-by: Tony Dinh mibodhi@gmail.com ---
include/configs/pogo_v4.h | 94 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 include/configs/pogo_v4.h
diff --git a/include/configs/pogo_v4.h b/include/configs/pogo_v4.h new file mode 100644 index 0000000000..b449986e8c --- /dev/null +++ b/include/configs/pogo_v4.h @@ -0,0 +1,94 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Copyright (C) 2014-2021 Tony Dinh mibodhi@gmail.com + * + * Based on + * Copyright (C) 2012 + * David Purdy david.c.purdy@gmail.com + * + * Based on Kirkwood support: + * (C) Copyright 2009 + * Marvell Semiconductor <www.marvell.com> + * Written-by: Prafulla Wadaskar prafulla@marvell.com + */ + +#ifndef _CONFIG_POGO_V4_H +#define _CONFIG_POGO_V4_H + +/* + * Machine type definition and ID + */ +#define MACH_TYPE_POGO_V4 3960 +#define CONFIG_MACH_TYPE MACH_TYPE_POGO_V4 + +/* + * High Level Configuration Options (easy to change) + */ +#define CONFIG_FEROCEON_88FR131 /* #define CPU Core subversion */ +#define CONFIG_KW88F6192 /* SOC Name */ + +/* + * Commands configuration + */ +#define CONFIG_SYS_NO_FLASH /* Declare no flash (NOR/SPI) */ +#define CONFIG_SYS_PROMPT_HUSH_PS2 "> " + +/* + * mv-common.h should be defined after CMD configs since it used them + * to enable certain macros + */ +#include "mv-common.h" + +/* + * Default environment variables + */ +#define CONFIG_BOOTCOMMAND \ + "setenv bootargs $(bootargs_console); " \ + "run bootcmd_usb; " \ + "bootm 0x00800000 0x01100000 0x2c00000" + +#define CONFIG_EXTRA_ENV_SETTINGS \ + "dtb_file=/boot/dts/" CONFIG_DEFAULT_DEVICE_TREE ".dtb\0" \ + "mtdparts=" CONFIG_MTDPARTS_DEFAULT "\0"\ + "mtdids=nand0=orion_nand\0"\ + "bootargs_console=console=ttyS0,115200\0" \ + "bootcmd_usb=usb start; load usb 0:1 0x00800000 /boot/uImage; " \ + "load usb 0:1 0x01100000 /boot/uInitrd; " \ + "load usb 0:1 0x2c00000 $dtb_file\0" + +/* + * Ethernet Driver configuration + */ +#ifdef CONFIG_CMD_NET +#define CONFIG_FEATURE_COMMAND_EDITING /* for netconsole */ +#define CONFIG_MVGBE_PORTS {1, 0} /* enable port 0 only */ +#define CONFIG_PHY_BASE_ADR 0 +#endif /* CONFIG_CMD_NET */ + +/* + * File system + */ +#ifdef CONFIG_CMD_JFFS2 +#define CONFIG_JFFS2_NAND +#define CONFIG_JFFS2_LZO +#endif /* CONFIG_CMD_JFFS2 */ + +/* + * SATA Driver configuration + */ +#ifdef CONFIG_SATA +#define CONFIG_SYS_SATA_MAX_DEVICE 1 +#endif /* CONFIG_SATA */ + +/* + * Support large disk for SATA and USB + */ +#define CONFIG_SYS_64BIT_LBA +#define CONFIG_LBA48 + +/* + * Kirkwood GPIO + */ +#define CONFIG_KIRKWOOD_GPIO + +#endif /* _CONFIG_POGO_V4_H */

On Friday 17 December 2021 20:23:30 Tony Dinh wrote:
Add include configs file for Pogoplug V4 board
Signed-off-by: Tony Dinh mibodhi@gmail.com
include/configs/pogo_v4.h | 94 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 include/configs/pogo_v4.h
diff --git a/include/configs/pogo_v4.h b/include/configs/pogo_v4.h new file mode 100644 index 0000000000..b449986e8c --- /dev/null +++ b/include/configs/pogo_v4.h @@ -0,0 +1,94 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/*
- Copyright (C) 2014-2021 Tony Dinh mibodhi@gmail.com
- Based on
- Copyright (C) 2012
- David Purdy david.c.purdy@gmail.com
- Based on Kirkwood support:
- (C) Copyright 2009
- Marvell Semiconductor <www.marvell.com>
- Written-by: Prafulla Wadaskar prafulla@marvell.com
- */
+#ifndef _CONFIG_POGO_V4_H +#define _CONFIG_POGO_V4_H
+/*
- Machine type definition and ID
- */
+#define MACH_TYPE_POGO_V4 3960 +#define CONFIG_MACH_TYPE MACH_TYPE_POGO_V4
+/*
- High Level Configuration Options (easy to change)
- */
+#define CONFIG_FEROCEON_88FR131 /* #define CPU Core subversion */ +#define CONFIG_KW88F6192 /* SOC Name */
+/*
- Commands configuration
- */
+#define CONFIG_SYS_NO_FLASH /* Declare no flash (NOR/SPI) */ +#define CONFIG_SYS_PROMPT_HUSH_PS2 "> "
+/*
- mv-common.h should be defined after CMD configs since it used them
- to enable certain macros
- */
+#include "mv-common.h"
+/*
- Default environment variables
- */
+#define CONFIG_BOOTCOMMAND \
- "setenv bootargs $(bootargs_console); " \
- "run bootcmd_usb; " \
- "bootm 0x00800000 0x01100000 0x2c00000"
+#define CONFIG_EXTRA_ENV_SETTINGS \
- "dtb_file=/boot/dts/" CONFIG_DEFAULT_DEVICE_TREE ".dtb\0" \
- "mtdparts=" CONFIG_MTDPARTS_DEFAULT "\0"\
- "mtdids=nand0=orion_nand\0"\
- "bootargs_console=console=ttyS0,115200\0" \
- "bootcmd_usb=usb start; load usb 0:1 0x00800000 /boot/uImage; " \
- "load usb 0:1 0x01100000 /boot/uInitrd; " \
- "load usb 0:1 0x2c00000 $dtb_file\0"
Have you tried to use new standard distroboot? It generates standard boot commands, so there is no need to specify them manually with hardcoded addresses.
+/*
- Ethernet Driver configuration
- */
+#ifdef CONFIG_CMD_NET +#define CONFIG_FEATURE_COMMAND_EDITING /* for netconsole */ +#define CONFIG_MVGBE_PORTS {1, 0} /* enable port 0 only */ +#define CONFIG_PHY_BASE_ADR 0 +#endif /* CONFIG_CMD_NET */
+/*
- File system
- */
+#ifdef CONFIG_CMD_JFFS2 +#define CONFIG_JFFS2_NAND +#define CONFIG_JFFS2_LZO +#endif /* CONFIG_CMD_JFFS2 */
+/*
- SATA Driver configuration
- */
+#ifdef CONFIG_SATA +#define CONFIG_SYS_SATA_MAX_DEVICE 1 +#endif /* CONFIG_SATA */
+/*
- Support large disk for SATA and USB
- */
+#define CONFIG_SYS_64BIT_LBA +#define CONFIG_LBA48
+/*
- Kirkwood GPIO
- */
+#define CONFIG_KIRKWOOD_GPIO
+#endif /* _CONFIG_POGO_V4_H */
2.20.1

Hi Pali,
On Sat, Dec 18, 2021 at 5:12 AM Pali Rohár pali@kernel.org wrote:
On Friday 17 December 2021 20:23:30 Tony Dinh wrote:
Add include configs file for Pogoplug V4 board
Signed-off-by: Tony Dinh mibodhi@gmail.com
include/configs/pogo_v4.h | 94 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 include/configs/pogo_v4.h
diff --git a/include/configs/pogo_v4.h b/include/configs/pogo_v4.h new file mode 100644 index 0000000000..b449986e8c --- /dev/null +++ b/include/configs/pogo_v4.h @@ -0,0 +1,94 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/*
- Copyright (C) 2014-2021 Tony Dinh mibodhi@gmail.com
- Based on
- Copyright (C) 2012
- David Purdy david.c.purdy@gmail.com
- Based on Kirkwood support:
- (C) Copyright 2009
- Marvell Semiconductor <www.marvell.com>
- Written-by: Prafulla Wadaskar prafulla@marvell.com
- */
+#ifndef _CONFIG_POGO_V4_H +#define _CONFIG_POGO_V4_H
+/*
- Machine type definition and ID
- */
+#define MACH_TYPE_POGO_V4 3960 +#define CONFIG_MACH_TYPE MACH_TYPE_POGO_V4
+/*
- High Level Configuration Options (easy to change)
- */
+#define CONFIG_FEROCEON_88FR131 /* #define CPU Core subversion */ +#define CONFIG_KW88F6192 /* SOC Name */
+/*
- Commands configuration
- */
+#define CONFIG_SYS_NO_FLASH /* Declare no flash (NOR/SPI) */ +#define CONFIG_SYS_PROMPT_HUSH_PS2 "> "
+/*
- mv-common.h should be defined after CMD configs since it used them
- to enable certain macros
- */
+#include "mv-common.h"
+/*
- Default environment variables
- */
+#define CONFIG_BOOTCOMMAND \
"setenv bootargs $(bootargs_console); " \
"run bootcmd_usb; " \
"bootm 0x00800000 0x01100000 0x2c00000"
+#define CONFIG_EXTRA_ENV_SETTINGS \
"dtb_file=/boot/dts/" CONFIG_DEFAULT_DEVICE_TREE ".dtb\0" \
"mtdparts=" CONFIG_MTDPARTS_DEFAULT "\0"\
"mtdids=nand0=orion_nand\0"\
"bootargs_console=console=ttyS0,115200\0" \
"bootcmd_usb=usb start; load usb 0:1 0x00800000 /boot/uImage; " \
"load usb 0:1 0x01100000 /boot/uInitrd; " \
"load usb 0:1 0x2c00000 $dtb_file\0"
Have you tried to use new standard distroboot? It generates standard boot commands, so there is no need to specify them manually with hardcoded addresses.
This was the old style that we've been using for many years. Since Simon has introduced the approach of using board envs text file, I'd prefer to keep the default envs the same for now, because it will be moved out to text file and revised anyway.
Thanks, Tony
+/*
- Ethernet Driver configuration
- */
+#ifdef CONFIG_CMD_NET +#define CONFIG_FEATURE_COMMAND_EDITING /* for netconsole */ +#define CONFIG_MVGBE_PORTS {1, 0} /* enable port 0 only */ +#define CONFIG_PHY_BASE_ADR 0 +#endif /* CONFIG_CMD_NET */
+/*
- File system
- */
+#ifdef CONFIG_CMD_JFFS2 +#define CONFIG_JFFS2_NAND +#define CONFIG_JFFS2_LZO +#endif /* CONFIG_CMD_JFFS2 */
+/*
- SATA Driver configuration
- */
+#ifdef CONFIG_SATA +#define CONFIG_SYS_SATA_MAX_DEVICE 1 +#endif /* CONFIG_SATA */
+/*
- Support large disk for SATA and USB
- */
+#define CONFIG_SYS_64BIT_LBA +#define CONFIG_LBA48
+/*
- Kirkwood GPIO
- */
+#define CONFIG_KIRKWOOD_GPIO
+#endif /* _CONFIG_POGO_V4_H */
2.20.1

Add board kwbimage file for Pogoplug V4 board
Signed-off-by: Tony Dinh mibodhi@gmail.com ---
board/cloudengines/pogo_v4/kwbimage.cfg | 148 ++++++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 board/cloudengines/pogo_v4/kwbimage.cfg
diff --git a/board/cloudengines/pogo_v4/kwbimage.cfg b/board/cloudengines/pogo_v4/kwbimage.cfg new file mode 100644 index 0000000000..f6294fe313 --- /dev/null +++ b/board/cloudengines/pogo_v4/kwbimage.cfg @@ -0,0 +1,148 @@ +# SPDX-License-Identifier: GPL-2.0+ +# +# Copyright (C) 2012 +# David Purdy david.c.purdy@gmail.com +# +# Based on Kirkwood support: +# (C) Copyright 2009 +# Marvell Semiconductor <www.marvell.com> +# Written-by: Prafulla Wadaskar <prafulla <at> marvell.com> + +# Boot Media configurations (DONE) +BOOT_FROM nand +NAND_ECC_MODE default +NAND_PAGE_SIZE 0x0800 + +# SOC registers configuration using bootrom header extension +# Maximum KWBIMAGE_MAX_CONFIG configurations allowed + +# Configure RGMII-0 interface pad voltage to 1.8V (SHOULD BE SAME) +DATA 0xffd100e0 0x1b1b1b9b + +#Dram initalization for SINGLE x16 CL=3 @ 200MHz (need CL=3 @ 200MHz?) +DATA 0xffd01400 0x43000618 # DDR Configuration register +# bit13-0: 0x200 (200 DDR2 clks refresh rate) +# bit23-14: zero +# bit24: 1= enable exit self refresh mode on DDR access +# bit25: 1 required +# bit29-26: zero +# bit31-30: 01 + +DATA 0xffd01404 0x34143000 # DDR Controller Control Low +# bit 4: 0=addr/cmd in smame cycle +# bit 5: 0=clk is driven during self refresh, we don't care for APX +# bit 6: 0=use recommended falling edge of clk for addr/cmd +# bit14: 0=input buffer always powered up +# bit18: 1=cpu lock transaction enabled +# bit23-20: 3=recommended value for CL=3 and STARTBURST_DEL disabled bit31=0 +# bit27-24: 6= CL+3, STARTBURST sample stages, for freqs 400MHz, unbuffered DIMM +# bit30-28: 3 required +# bit31: 0=no additional STARTBURST delay + +DATA 0xffd01408 0x11012227 # DDR Timing (Low) (active cycles value +1) +# bit3-0: TRAS lsbs +# bit7-4: TRCD +# bit11- 8: TRP +# bit15-12: TWR +# bit19-16: TWTR +# bit20: TRAS msb +# bit23-21: 0x0 +# bit27-24: TRRD +# bit31-28: TRTP + +DATA 0xffd0140c 0x00000819 # DDR Timing (High) +# bit6-0: TRFC +# bit8-7: TR2R +# bit10-9: TR2W +# bit12-11: TW2W +# bit31-13: zero required + +DATA 0xffd01410 0x00000001 # DDR Address Control (changed to Dockstar vals) +# bit1-0: 00, Cs0width=x16 +# bit3-2: 10, Cs0size=512Mb +# bit5-4: 00, Cs2width=nonexistent +# bit7-6: 00, Cs1size =nonexistent +# bit9-8: 00, Cs2width=nonexistent +# bit11-10: 00, Cs2size =nonexistent +# bit13-12: 00, Cs3width=nonexistent +# bit15-14: 00, Cs3size =nonexistent +# bit16: 0, Cs0AddrSel +# bit17: 0, Cs1AddrSel +# bit18: 0, Cs2AddrSel +# bit19: 0, Cs3AddrSel +# bit31-20: 0 required + +DATA 0xffd01414 0x00000000 # DDR Open Pages Control +# bit0: 0, OpenPage enabled +# bit31-1: 0 required + +DATA 0xffd01418 0x00000000 # DDR Operation +# bit3-0: 0x0, DDR cmd +# bit31-4: 0 required + +DATA 0xffd0141c 0x00000632 # DDR Mode +# bit2-0: 2, BurstLen=2 required +# bit3: 0, BurstType=0 required +# bit6-4: 4, CL=5 (<===== change to CL=3 ?) +# bit7: 0, TestMode=0 normal +# bit8: 0, DLL reset=0 normal +# bit11-9: 6, auto-precharge write recovery ???????????? +# bit12: 0, PD must be zero +# bit31-13: 0 required + +DATA 0xffd01420 0x00000040 # DDR Extended Mode +# bit0: 0, DDR DLL enabled +# bit1: 0, DDR drive strenght normal +# bit2: 0, DDR ODT control lsd (disabled) +# bit5-3: 000, required +# bit6: 1, DDR ODT control msb, (disabled) +# bit9-7: 000, required +# bit10: 0, differential DQS enabled +# bit11: 0, required +# bit12: 0, DDR output buffer enabled +# bit31-13: 0 required + +DATA 0xffd01424 0x0000F07F # DDR Controller Control High +# bit2-0: 111, required +# bit3 : 1 , MBUS Burst Chop disabled +# bit6-4: 111, required +# bit7 : 0 +# bit8 : 0 , no sample stage +# bit9 : 0 , no half clock cycle addition to dataout +# bit10 : 0 , 1/4 clock cycle skew enabled for addr/ctl signals +# bit11 : 0 , 1/4 clock cycle skew disabled for write mesh +# bit15-12: 1111 required +# bit31-16: 0 required + +DATA 0xffd01428 0x00085520 # DDR2 ODT Read Timing (default values) +DATA 0xffd0147c 0x00008552 # DDR2 ODT Write Timing (default values) + +DATA 0xFFD01500 0x00000000 # CS[0]n Base address to 0x0 +DATA 0xFFD01504 0x07FFFFF1 # CS[0]n Size +# bit0: 1, Window enabled +# bit1: 0, Write Protect disabled +# bit3-2: 00, CS0 hit selected +# bit23-4: ones, required +# bit31-24: 0x07, Size (i.e. 128MB) + +DATA 0xFFD0150C 0x00000000 # CS[1]n Size, window disabled +DATA 0xFFD01514 0x00000000 # CS[2]n Size, window disabled +DATA 0xFFD0151C 0x00000000 # CS[3]n Size, window disabled + +DATA 0xffd01494 0x00030000 # DDR ODT Control (Low) (DONE) +# bit3-0: 2, ODT0Rd, MODT[0] asserted during read from DRAM CS1 +# bit7-4: 1, ODT0Rd, MODT[0] asserted during read from DRAM CS0 +# bit19-16:2, ODT0Wr, MODT[0] asserted during write to DRAM CS1 +# bit23-20:1, ODT0Wr, MODT[0] asserted during write to DRAM CS0 + +DATA 0xffd01498 0x00000000 # DDR ODT Control (High) (DONE) +# bit1-0: 00, ODT0 controlled by ODT Control (low) register above +# bit3-2: 01, ODT1 active NEVER! +# bit31-4: zero, required + +DATA 0xffd0149c 0x0000e803 # CPU ODT Control (DONE) +DATA 0xffd01480 0x00000001 # DDR Initialization Control (DONE) +#bit0=1, enable DDR init upon this register write + +# End of Header extension +DATA 0x0 0x0

Add board implementation header and Makefile for Pogoplug V4
Signed-off-by: Tony Dinh mibodhi@gmail.com ---
board/cloudengines/pogo_v4/Makefile | 10 ++++++++ board/cloudengines/pogo_v4/pogo_v4.h | 36 ++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 board/cloudengines/pogo_v4/Makefile create mode 100644 board/cloudengines/pogo_v4/pogo_v4.h
diff --git a/board/cloudengines/pogo_v4/Makefile b/board/cloudengines/pogo_v4/Makefile new file mode 100644 index 0000000000..511bf5ff7e --- /dev/null +++ b/board/cloudengines/pogo_v4/Makefile @@ -0,0 +1,10 @@ +# SPDX-License-Identifier: GPL-2.0+ +# +# (C) Copyright 2014-2021 Tony Dinh mibodhi@gmail.com +# +# Based on +# Marvell Semiconductor <www.marvell.com> +# Written-by: Prafulla Wadaskar prafulla@marvell.com +# + +obj-y := pogo_v4.o diff --git a/board/cloudengines/pogo_v4/pogo_v4.h b/board/cloudengines/pogo_v4/pogo_v4.h new file mode 100644 index 0000000000..bf3060de60 --- /dev/null +++ b/board/cloudengines/pogo_v4/pogo_v4.h @@ -0,0 +1,36 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Copyright (C) 2014-2021 Tony Dinh mibodhi@gmail.com + * + * Based on + * Copyright (C) 2012 David Purdy david.c.purdy@gmail.com + * + * Based on Kirkwood support: + * (C) Copyright 2009 + * Marvell Semiconductor <www.marvell.com> + * Written-by: Prafulla Wadaskar prafulla@marvell.com + */ + +#ifndef __POGO_V4_H +#define __POGO_V4_H + +#include <linux/bitops.h> + +/* GPIO configuration */ +#define POGO_V4_OE_LOW (~(0)) +#define POGO_V4_OE_HIGH (~(0)) +#define POGO_V4_OE_VAL_LOW BIT(29) +#define POGO_V4_OE_VAL_HIGH 0 + +/* PHY related */ +#define MV88E1116_LED_FCTRL_REG 10 +#define MV88E1116_CPRSP_CR3_REG 21 +#define MV88E1116_MAC_CTRL_REG 21 +#define MV88E1116_PGADR_REG 22 +#define MV88E1116_RGMII_TXTM_CTRL BIT(4) +#define MV88E1116_RGMII_RXTM_CTRL BIT(5) + +/* button */ +#define BTN_EJECT 29 + +#endif /* __POGO_V4_H */

On Friday 17 December 2021 20:23:32 Tony Dinh wrote:
Add board implementation header and Makefile for Pogoplug V4
Signed-off-by: Tony Dinh mibodhi@gmail.com
board/cloudengines/pogo_v4/Makefile | 10 ++++++++ board/cloudengines/pogo_v4/pogo_v4.h | 36 ++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 board/cloudengines/pogo_v4/Makefile create mode 100644 board/cloudengines/pogo_v4/pogo_v4.h
diff --git a/board/cloudengines/pogo_v4/Makefile b/board/cloudengines/pogo_v4/Makefile new file mode 100644 index 0000000000..511bf5ff7e --- /dev/null +++ b/board/cloudengines/pogo_v4/Makefile @@ -0,0 +1,10 @@ +# SPDX-License-Identifier: GPL-2.0+ +# +# (C) Copyright 2014-2021 Tony Dinh mibodhi@gmail.com +# +# Based on +# Marvell Semiconductor <www.marvell.com> +# Written-by: Prafulla Wadaskar prafulla@marvell.com +#
+obj-y := pogo_v4.o diff --git a/board/cloudengines/pogo_v4/pogo_v4.h b/board/cloudengines/pogo_v4/pogo_v4.h new file mode 100644 index 0000000000..bf3060de60 --- /dev/null +++ b/board/cloudengines/pogo_v4/pogo_v4.h @@ -0,0 +1,36 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/*
- Copyright (C) 2014-2021 Tony Dinh mibodhi@gmail.com
- Based on
- Copyright (C) 2012 David Purdy david.c.purdy@gmail.com
- Based on Kirkwood support:
- (C) Copyright 2009
- Marvell Semiconductor <www.marvell.com>
- Written-by: Prafulla Wadaskar prafulla@marvell.com
- */
+#ifndef __POGO_V4_H +#define __POGO_V4_H
+#include <linux/bitops.h>
+/* GPIO configuration */ +#define POGO_V4_OE_LOW (~(0)) +#define POGO_V4_OE_HIGH (~(0)) +#define POGO_V4_OE_VAL_LOW BIT(29) +#define POGO_V4_OE_VAL_HIGH 0
+/* PHY related */ +#define MV88E1116_LED_FCTRL_REG 10 +#define MV88E1116_CPRSP_CR3_REG 21 +#define MV88E1116_MAC_CTRL_REG 21 +#define MV88E1116_PGADR_REG 22 +#define MV88E1116_RGMII_TXTM_CTRL BIT(4) +#define MV88E1116_RGMII_RXTM_CTRL BIT(5)
+/* button */ +#define BTN_EJECT 29
+#endif /* __POGO_V4_H */
Hello! As this pogo_v4.h include file is used only in pogo_v4.c source file and contains only few defines, you can move all these defines directly into pogo_v4.c source file. There is no need to export these constants if they are not used by other files or modules.
-- 2.20.1

Hi Pali,
On Sat, Dec 18, 2021 at 5:09 AM Pali Rohár pali@kernel.org wrote:
On Friday 17 December 2021 20:23:32 Tony Dinh wrote:
Add board implementation header and Makefile for Pogoplug V4
Signed-off-by: Tony Dinh mibodhi@gmail.com
board/cloudengines/pogo_v4/Makefile | 10 ++++++++ board/cloudengines/pogo_v4/pogo_v4.h | 36 ++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 board/cloudengines/pogo_v4/Makefile create mode 100644 board/cloudengines/pogo_v4/pogo_v4.h
diff --git a/board/cloudengines/pogo_v4/Makefile b/board/cloudengines/pogo_v4/Makefile new file mode 100644 index 0000000000..511bf5ff7e --- /dev/null +++ b/board/cloudengines/pogo_v4/Makefile @@ -0,0 +1,10 @@ +# SPDX-License-Identifier: GPL-2.0+ +# +# (C) Copyright 2014-2021 Tony Dinh mibodhi@gmail.com +# +# Based on +# Marvell Semiconductor <www.marvell.com> +# Written-by: Prafulla Wadaskar prafulla@marvell.com +#
+obj-y := pogo_v4.o diff --git a/board/cloudengines/pogo_v4/pogo_v4.h b/board/cloudengines/pogo_v4/pogo_v4.h new file mode 100644 index 0000000000..bf3060de60 --- /dev/null +++ b/board/cloudengines/pogo_v4/pogo_v4.h @@ -0,0 +1,36 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/*
- Copyright (C) 2014-2021 Tony Dinh mibodhi@gmail.com
- Based on
- Copyright (C) 2012 David Purdy david.c.purdy@gmail.com
- Based on Kirkwood support:
- (C) Copyright 2009
- Marvell Semiconductor <www.marvell.com>
- Written-by: Prafulla Wadaskar prafulla@marvell.com
- */
+#ifndef __POGO_V4_H +#define __POGO_V4_H
+#include <linux/bitops.h>
+/* GPIO configuration */ +#define POGO_V4_OE_LOW (~(0)) +#define POGO_V4_OE_HIGH (~(0)) +#define POGO_V4_OE_VAL_LOW BIT(29) +#define POGO_V4_OE_VAL_HIGH 0
+/* PHY related */ +#define MV88E1116_LED_FCTRL_REG 10 +#define MV88E1116_CPRSP_CR3_REG 21 +#define MV88E1116_MAC_CTRL_REG 21 +#define MV88E1116_PGADR_REG 22 +#define MV88E1116_RGMII_TXTM_CTRL BIT(4) +#define MV88E1116_RGMII_RXTM_CTRL BIT(5)
+/* button */ +#define BTN_EJECT 29
+#endif /* __POGO_V4_H */
Hello! As this pogo_v4.h include file is used only in pogo_v4.c source file and contains only few defines, you can move all these defines directly into pogo_v4.c source file. There is no need to export these constants if they are not used by other files or modules.
Sure, but that'll make the .c file harder to read? We've been using the .h file since the old days, I think mostly for readability. This is a small header file, but for some other boards, the header file is quite large.
Thanks, Tony
-- 2.20.1

Hi Tony,
On 12/18/21 22:47, Tony Dinh wrote:
Hi Pali,
On Sat, Dec 18, 2021 at 5:09 AM Pali Rohár pali@kernel.org wrote:
On Friday 17 December 2021 20:23:32 Tony Dinh wrote:
Add board implementation header and Makefile for Pogoplug V4
Signed-off-by: Tony Dinh mibodhi@gmail.com
board/cloudengines/pogo_v4/Makefile | 10 ++++++++ board/cloudengines/pogo_v4/pogo_v4.h | 36 ++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 board/cloudengines/pogo_v4/Makefile create mode 100644 board/cloudengines/pogo_v4/pogo_v4.h
diff --git a/board/cloudengines/pogo_v4/Makefile b/board/cloudengines/pogo_v4/Makefile new file mode 100644 index 0000000000..511bf5ff7e --- /dev/null +++ b/board/cloudengines/pogo_v4/Makefile @@ -0,0 +1,10 @@ +# SPDX-License-Identifier: GPL-2.0+ +# +# (C) Copyright 2014-2021 Tony Dinh mibodhi@gmail.com +# +# Based on +# Marvell Semiconductor <www.marvell.com> +# Written-by: Prafulla Wadaskar prafulla@marvell.com +#
+obj-y := pogo_v4.o diff --git a/board/cloudengines/pogo_v4/pogo_v4.h b/board/cloudengines/pogo_v4/pogo_v4.h new file mode 100644 index 0000000000..bf3060de60 --- /dev/null +++ b/board/cloudengines/pogo_v4/pogo_v4.h @@ -0,0 +1,36 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/*
- Copyright (C) 2014-2021 Tony Dinh mibodhi@gmail.com
- Based on
- Copyright (C) 2012 David Purdy david.c.purdy@gmail.com
- Based on Kirkwood support:
- (C) Copyright 2009
- Marvell Semiconductor <www.marvell.com>
- Written-by: Prafulla Wadaskar prafulla@marvell.com
- */
+#ifndef __POGO_V4_H +#define __POGO_V4_H
+#include <linux/bitops.h>
+/* GPIO configuration */ +#define POGO_V4_OE_LOW (~(0)) +#define POGO_V4_OE_HIGH (~(0)) +#define POGO_V4_OE_VAL_LOW BIT(29) +#define POGO_V4_OE_VAL_HIGH 0
+/* PHY related */ +#define MV88E1116_LED_FCTRL_REG 10 +#define MV88E1116_CPRSP_CR3_REG 21 +#define MV88E1116_MAC_CTRL_REG 21 +#define MV88E1116_PGADR_REG 22 +#define MV88E1116_RGMII_TXTM_CTRL BIT(4) +#define MV88E1116_RGMII_RXTM_CTRL BIT(5)
+/* button */ +#define BTN_EJECT 29
+#endif /* __POGO_V4_H */
Hello! As this pogo_v4.h include file is used only in pogo_v4.c source file and contains only few defines, you can move all these defines directly into pogo_v4.c source file. There is no need to export these constants if they are not used by other files or modules.
Sure, but that'll make the .c file harder to read? We've been using the .h file since the old days, I think mostly for readability. This is a small header file, but for some other boards, the header file is quite large.
I fail to see why moving these few lines from the header to the .c file makes the code harder to read. Especially if the macros / defines are only used in one specific file, it makes sense to place them in this file IMHO.
Thanks, Stefan

On Sun, Dec 19, 2021 at 11:23 PM Stefan Roese sr@denx.de wrote:
Hi Tony,
On 12/18/21 22:47, Tony Dinh wrote:
Hi Pali,
On Sat, Dec 18, 2021 at 5:09 AM Pali Rohár pali@kernel.org wrote:
On Friday 17 December 2021 20:23:32 Tony Dinh wrote:
Add board implementation header and Makefile for Pogoplug V4
Signed-off-by: Tony Dinh mibodhi@gmail.com
board/cloudengines/pogo_v4/Makefile | 10 ++++++++ board/cloudengines/pogo_v4/pogo_v4.h | 36 ++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 board/cloudengines/pogo_v4/Makefile create mode 100644 board/cloudengines/pogo_v4/pogo_v4.h
diff --git a/board/cloudengines/pogo_v4/Makefile b/board/cloudengines/pogo_v4/Makefile new file mode 100644 index 0000000000..511bf5ff7e --- /dev/null +++ b/board/cloudengines/pogo_v4/Makefile @@ -0,0 +1,10 @@ +# SPDX-License-Identifier: GPL-2.0+ +# +# (C) Copyright 2014-2021 Tony Dinh mibodhi@gmail.com +# +# Based on +# Marvell Semiconductor <www.marvell.com> +# Written-by: Prafulla Wadaskar prafulla@marvell.com +#
+obj-y := pogo_v4.o diff --git a/board/cloudengines/pogo_v4/pogo_v4.h b/board/cloudengines/pogo_v4/pogo_v4.h new file mode 100644 index 0000000000..bf3060de60 --- /dev/null +++ b/board/cloudengines/pogo_v4/pogo_v4.h @@ -0,0 +1,36 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/*
- Copyright (C) 2014-2021 Tony Dinh mibodhi@gmail.com
- Based on
- Copyright (C) 2012 David Purdy david.c.purdy@gmail.com
- Based on Kirkwood support:
- (C) Copyright 2009
- Marvell Semiconductor <www.marvell.com>
- Written-by: Prafulla Wadaskar prafulla@marvell.com
- */
+#ifndef __POGO_V4_H +#define __POGO_V4_H
+#include <linux/bitops.h>
+/* GPIO configuration */ +#define POGO_V4_OE_LOW (~(0)) +#define POGO_V4_OE_HIGH (~(0)) +#define POGO_V4_OE_VAL_LOW BIT(29) +#define POGO_V4_OE_VAL_HIGH 0
+/* PHY related */ +#define MV88E1116_LED_FCTRL_REG 10 +#define MV88E1116_CPRSP_CR3_REG 21 +#define MV88E1116_MAC_CTRL_REG 21 +#define MV88E1116_PGADR_REG 22 +#define MV88E1116_RGMII_TXTM_CTRL BIT(4) +#define MV88E1116_RGMII_RXTM_CTRL BIT(5)
+/* button */ +#define BTN_EJECT 29
+#endif /* __POGO_V4_H */
Hello! As this pogo_v4.h include file is used only in pogo_v4.c source file and contains only few defines, you can move all these defines directly into pogo_v4.c source file. There is no need to export these constants if they are not used by other files or modules.
Sure, but that'll make the .c file harder to read? We've been using the .h file since the old days, I think mostly for readability. This is a small header file, but for some other boards, the header file is quite large.
I fail to see why moving these few lines from the header to the .c file makes the code harder to read. Especially if the macros / defines are only used in one specific file, it makes sense to place them in this file IMHO.
Concur with you and Pali! Will merge the constants to .c file.
Thanks, Tony
Thanks, Stefan

Add board implementation for Pogoplug V4
Note: currently the fdt_get_phy_addr function in this file is duplicate in this board and many other Kirkwood boards (eg. Sheevaplug, GoFlex Home, etc.). This function is being factored out into common area by another patch. And because it was written for flattree only, the patch is being rewritten to use livetree calls.
Signed-off-by: Tony Dinh mibodhi@gmail.com ---
board/cloudengines/pogo_v4/pogo_v4.c | 204 +++++++++++++++++++++++++++ 1 file changed, 204 insertions(+) create mode 100644 board/cloudengines/pogo_v4/pogo_v4.c
diff --git a/board/cloudengines/pogo_v4/pogo_v4.c b/board/cloudengines/pogo_v4/pogo_v4.c new file mode 100644 index 0000000000..55fc9d69e4 --- /dev/null +++ b/board/cloudengines/pogo_v4/pogo_v4.c @@ -0,0 +1,204 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright (C) 2014-2021 Tony Dinh mibodhi@gmail.com + * + * Based on + * Copyright (C) 2012 David Purdy david.c.purdy@gmail.com + * + * Based on Kirkwood support: + * (C) Copyright 2009 + * Marvell Semiconductor <www.marvell.com> + * Written-by: Prafulla Wadaskar prafulla@marvell.com + */ + +#include <common.h> +#include <miiphy.h> +#include <asm/arch/cpu.h> +#include <asm/arch/soc.h> +#include <asm/arch/mpp.h> +#include <asm/io.h> +#include "pogo_v4.h" +#include <asm/arch/gpio.h> +#include <asm/mach-types.h> +#include <bootstage.h> +#include <command.h> +#include <init.h> +#include "pogo_v4.h" + +DECLARE_GLOBAL_DATA_PTR; + +int board_early_init_f(void) +{ + /* + * default gpio configuration + * There are maximum 64 gpios controlled through 2 sets of registers + * the below configuration configures mainly initial LED status + */ + mvebu_config_gpio(POGO_V4_OE_VAL_LOW, + POGO_V4_OE_VAL_HIGH, + POGO_V4_OE_LOW, POGO_V4_OE_HIGH); + + /* Multi-Purpose Pins Functionality configuration */ + u32 kwmpp_config[] = { + MPP0_NF_IO2, + MPP1_NF_IO3, + MPP2_NF_IO4, + MPP3_NF_IO5, + MPP4_NF_IO6, + MPP5_NF_IO7, + MPP6_SYSRST_OUTn, + MPP7_GPO, + MPP8_TW_SDA, + MPP9_TW_SCK, + MPP10_UART0_TXD, + MPP11_UART0_RXD, + MPP12_SD_CLK, + MPP13_SD_CMD, + MPP14_SD_D0, + MPP15_SD_D1, + MPP16_SD_D2, + MPP17_SD_D3, + MPP18_NF_IO0, + MPP19_NF_IO1, + MPP20_SATA1_ACTn, + MPP21_SATA0_ACTn, + MPP22_GPIO, /* Green LED */ + MPP23_GPIO, + MPP24_GPIO, /* Red LED */ + MPP25_GPIO, + MPP26_GPIO, + MPP27_GPIO, + MPP28_GPIO, + MPP29_GPIO, /* Eject button */ + MPP30_GPIO, + MPP31_GPIO, + MPP32_GPIO, + MPP33_GPIO, + MPP34_GPIO, + MPP35_GPIO, /* FR6192 has only 36 GPIOs */ + 0 + }; + kirkwood_mpp_conf(kwmpp_config, NULL); + + return 0; +} + +int board_late_init(void) +{ + /* Do late init to ensure successful enumeration of XHCI devices */ + pci_init(); + return 0; +} + +int board_init(void) +{ + /* Boot parameters address */ + gd->bd->bi_boot_params = mvebu_sdram_bar(0) + 0x100; + + return 0; +} + +int fdt_get_phy_addr(const char *path) +{ + const void *fdt = gd->fdt_blob; + const u32 *reg; + const u32 *val; + int node, phandle, addr; + + /* Find the node by its full path */ + node = fdt_path_offset(fdt, path); + if (node >= 0) { + /* Look up phy-handle */ + val = fdt_getprop(fdt, node, "phy-handle", NULL); + if (!val) { + /* Look up phy (deprecated property for phy handle) */ + val = fdt_getprop(fdt, node, "phy", NULL); + } + if (val) { + phandle = fdt32_to_cpu(*val); + if (!phandle) + return -FDT_ERR_NOTFOUND; + + /* Follow it to its node */ + node = fdt_node_offset_by_phandle(fdt, phandle); + if (node) { + /* Look up reg */ + reg = fdt_getprop(fdt, node, "reg", NULL); + if (reg) { + addr = fdt32_to_cpu(*reg); + return addr; + } + } + } + } + return -FDT_ERR_NOTFOUND; +} + +#if defined(CONFIG_RESET_PHY_R) +/* Configure and initialize PHY */ +void reset_phy(void) +{ + u16 reg; + int phyaddr; + char *name = "ethernet-controller@72000"; + char *eth0_path = "/ocp@f1000000/ethernet-controller@72000"; + + if (miiphy_set_current_dev(name)) + return; + + phyaddr = fdt_get_phy_addr(eth0_path); + if (phyaddr < 0) + return; + + /* + * Enable RGMII delay on Tx and Rx for CPU port + * Ref: sec 4.7.2 of chip datasheet + */ + miiphy_write(name, phyaddr, MV88E1116_PGADR_REG, 2); + miiphy_read(name, phyaddr, MV88E1116_MAC_CTRL_REG, ®); + reg |= (MV88E1116_RGMII_RXTM_CTRL | MV88E1116_RGMII_TXTM_CTRL); + miiphy_write(name, phyaddr, MV88E1116_MAC_CTRL_REG, reg); + miiphy_write(name, phyaddr, MV88E1116_PGADR_REG, 0); + + /* reset the phy */ + miiphy_reset(name, phyaddr); + + printf("88E1116 Initialized on %s\n", name); +} +#endif /* CONFIG_RESET_PHY_R */ + +#if CONFIG_IS_ENABLED(BOOTSTAGE) +#define GREEN_LED BIT(22) +#define RED_LED BIT(24) +#define BOTH_LEDS (GREEN_LED | RED_LED) +#define NEITHER_LED 0 + +static void set_leds(u32 leds, u32 blinking) +{ + struct kwgpio_registers *r; + u32 oe; + u32 bl; + + r = (struct kwgpio_registers *)MVEBU_GPIO0_BASE; + oe = readl(&r->oe) | BOTH_LEDS; + writel(oe & ~leds, &r->oe); /* active low */ + bl = readl(&r->blink_en) & ~BOTH_LEDS; + writel(bl | blinking, &r->blink_en); +} + +void show_boot_progress(int val) +{ + switch (val) { + case BOOTSTAGE_ID_RUN_OS: /* booting Linux */ + set_leds(BOTH_LEDS, NEITHER_LED); + break; + case BOOTSTAGE_ID_NET_ETH_START: /* Ethernet initialization */ + set_leds(GREEN_LED, GREEN_LED); + break; + default: + if (val < 0) /* error */ + set_leds(RED_LED, RED_LED); + break; + } +} +#endif

+#if defined(CONFIG_RESET_PHY_R) +/* Configure and initialize PHY */ +void reset_phy(void) +{
- u16 reg;
- int phyaddr;
- char *name = "ethernet-controller@72000";
- char *eth0_path = "/ocp@f1000000/ethernet-controller@72000";
- if (miiphy_set_current_dev(name))
return;
- phyaddr = fdt_get_phy_addr(eth0_path);
- if (phyaddr < 0)
return;
- /*
* Enable RGMII delay on Tx and Rx for CPU port
* Ref: sec 4.7.2 of chip datasheet
*/
- miiphy_write(name, phyaddr, MV88E1116_PGADR_REG, 2);
- miiphy_read(name, phyaddr, MV88E1116_MAC_CTRL_REG, ®);
- reg |= (MV88E1116_RGMII_RXTM_CTRL | MV88E1116_RGMII_TXTM_CTRL);
- miiphy_write(name, phyaddr, MV88E1116_MAC_CTRL_REG, reg);
- miiphy_write(name, phyaddr, MV88E1116_PGADR_REG, 0);
- /* reset the phy */
- miiphy_reset(name, phyaddr);
- printf("88E1116 Initialized on %s\n", name);
+}
This PHY has a driver in U-Boot, drivers/net/phy/marvell.c, structure M88E1118_driver.
There the m88e1118_config() method already does one thing of what you are doing here: enabling rgmii delays. It also sets LED config, but does not reset the PHY. You can add call to phy_reset() there...
Marek

Hi Marek,
On Sat, Dec 18, 2021 at 2:59 PM Marek Behún marek.behun@nic.cz wrote:
+#if defined(CONFIG_RESET_PHY_R) +/* Configure and initialize PHY */ +void reset_phy(void) +{
u16 reg;
int phyaddr;
char *name = "ethernet-controller@72000";
char *eth0_path = "/ocp@f1000000/ethernet-controller@72000";
if (miiphy_set_current_dev(name))
return;
phyaddr = fdt_get_phy_addr(eth0_path);
if (phyaddr < 0)
return;
/*
* Enable RGMII delay on Tx and Rx for CPU port
* Ref: sec 4.7.2 of chip datasheet
*/
miiphy_write(name, phyaddr, MV88E1116_PGADR_REG, 2);
miiphy_read(name, phyaddr, MV88E1116_MAC_CTRL_REG, ®);
reg |= (MV88E1116_RGMII_RXTM_CTRL | MV88E1116_RGMII_TXTM_CTRL);
miiphy_write(name, phyaddr, MV88E1116_MAC_CTRL_REG, reg);
miiphy_write(name, phyaddr, MV88E1116_PGADR_REG, 0);
/* reset the phy */
miiphy_reset(name, phyaddr);
printf("88E1116 Initialized on %s\n", name);
+}
This PHY has a driver in U-Boot, drivers/net/phy/marvell.c, structure M88E1118_driver.
There the m88e1118_config() method already does one thing of what you are doing here: enabling rgmii delays. It also sets LED config, but does not reset the PHY. You can add call to phy_reset() there...
Thanks for the advice! That would be best.
Will look into this for another separate patch, to see if it is possible to factor out similar code in other Kirkwood boards too.
Thanks, Tony
Marek

On Sat, 18 Dec 2021 15:28:49 -0800 Tony Dinh mibodhi@gmail.com wrote:
Hi Marek,
On Sat, Dec 18, 2021 at 2:59 PM Marek Behún marek.behun@nic.cz wrote:
+#if defined(CONFIG_RESET_PHY_R) +/* Configure and initialize PHY */ +void reset_phy(void) +{
u16 reg;
int phyaddr;
char *name = "ethernet-controller@72000";
char *eth0_path = "/ocp@f1000000/ethernet-controller@72000";
if (miiphy_set_current_dev(name))
return;
phyaddr = fdt_get_phy_addr(eth0_path);
if (phyaddr < 0)
return;
/*
* Enable RGMII delay on Tx and Rx for CPU port
* Ref: sec 4.7.2 of chip datasheet
*/
miiphy_write(name, phyaddr, MV88E1116_PGADR_REG, 2);
miiphy_read(name, phyaddr, MV88E1116_MAC_CTRL_REG, ®);
reg |= (MV88E1116_RGMII_RXTM_CTRL | MV88E1116_RGMII_TXTM_CTRL);
miiphy_write(name, phyaddr, MV88E1116_MAC_CTRL_REG, reg);
miiphy_write(name, phyaddr, MV88E1116_PGADR_REG, 0);
/* reset the phy */
miiphy_reset(name, phyaddr);
printf("88E1116 Initialized on %s\n", name);
+}
This PHY has a driver in U-Boot, drivers/net/phy/marvell.c, structure M88E1118_driver.
There the m88e1118_config() method already does one thing of what you are doing here: enabling rgmii delays. It also sets LED config, but does not reset the PHY. You can add call to phy_reset() there...
Thanks for the advice! That would be best.
Will look into this for another separate patch, to see if it is possible to factor out similar code in other Kirkwood boards too.
Also implement the .readext and .writeext methods as M88E151x_driver and you won't need to alwyas change page by hand.
Marek

Add board maintainer for Pogoplug V4 board
Signed-off-by: Tony Dinh mibodhi@gmail.com ---
board/cloudengines/pogo_v4/MAINTAINERS | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 board/cloudengines/pogo_v4/MAINTAINERS
diff --git a/board/cloudengines/pogo_v4/MAINTAINERS b/board/cloudengines/pogo_v4/MAINTAINERS new file mode 100644 index 0000000000..35fd7858b7 --- /dev/null +++ b/board/cloudengines/pogo_v4/MAINTAINERS @@ -0,0 +1,6 @@ +POGO_V4 BOARD +M: Tony Dinh mibodhi@gmail.com +S: Maintained +F: board/cloudengines/pogo_v4/ +F: include/configs/pogo_v4.h +F: configs/pogo_v4_defconfig
participants (5)
-
Andre Przywara
-
Marek Behún
-
Pali Rohár
-
Stefan Roese
-
Tony Dinh