diff options
35 files changed, 1041 insertions, 376 deletions
@@ -2270,9 +2270,10 @@ pylint: $(Q)find tools test -name "*.py" \ | xargs -n1 -P$(shell nproc 2>/dev/null || echo 1) \ sh -c 'pylint --reports=y --exit-zero -f parseable --ignore-imports=yes $$@ > pylint.out/$$(echo $$@ | tr / _ | sed s/.py//)' _ - $(Q)sed -n 's/Your code has been rated at \([-0-9.]*\).*/\1/p; s/\*\** Module \(.*\)/\1/p' pylint.out/* \ - |sed '$!N;s/\n/ /' \ - |sort > $(PYLINT_CUR) + $(Q)rm -f $(PYLINT_CUR) + $(Q)( cd pylint.out; for f in *; do \ + sed -ne "s/Your code has been rated at \([-0-9.]*\).*/$$f \1/p" $$f; \ + done ) | sort > $(PYLINT_CUR) $(Q)base=$$(mktemp) cur=$$(mktemp); cut -d' ' -f1 $(PYLINT_BASE) >$$base; \ cut -d' ' -f1 $(PYLINT_CUR) >$$cur; \ comm -3 $$base $$cur > $(PYLINT_DIFF); \ diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile index ce33202..5d45d19 100644 --- a/arch/arm/dts/Makefile +++ b/arch/arm/dts/Makefile @@ -71,6 +71,7 @@ dtb-$(CONFIG_ARCH_KIRKWOOD) += \ kirkwood-openrd-client.dtb \ kirkwood-openrd-ultimate.dtb \ kirkwood-pogo_e02.dtb \ + kirkwood-pogoplug-series-4.dtb \ kirkwood-sheevaplug.dtb dtb-$(CONFIG_MACH_S900) += \ diff --git a/arch/arm/dts/kirkwood-pogoplug-series-4.dts b/arch/arm/dts/kirkwood-pogoplug-series-4.dts new file mode 100644 index 0000000..5aa4669 --- /dev/null +++ b/arch/arm/dts/kirkwood-pogoplug-series-4.dts @@ -0,0 +1,180 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * kirkwood-pogoplug-series-4.dts - Device tree file for PogoPlug Series 4 + * inspired by the board files made by Kevin Mihelich for ArchLinux, + * and their DTS file. + * + * Copyright (C) 2015 Linus Walleij <linus.walleij@linaro.org> + */ + +/dts-v1/; + +#include "kirkwood.dtsi" +#include "kirkwood-6192.dtsi" +#include <dt-bindings/input/linux-event-codes.h> + +/ { + model = "Cloud Engines PogoPlug Series 4"; + compatible = "cloudengines,pogoplugv4", "marvell,kirkwood-88f6192", + "marvell,kirkwood"; + + memory { + device_type = "memory"; + reg = <0x00000000 0x08000000>; + }; + + chosen { + stdout-path = "uart0:115200n8"; + }; + + gpio_keys { + compatible = "gpio-keys"; + #address-cells = <1>; + #size-cells = <0>; + pinctrl-0 = <&pmx_button_eject>; + pinctrl-names = "default"; + + eject { + debounce-interval = <50>; + wakeup-source; + linux,code = <KEY_EJECTCD>; + label = "Eject Button"; + gpios = <&gpio0 29 GPIO_ACTIVE_LOW>; + }; + }; + + gpio-leds { + compatible = "gpio-leds"; + pinctrl-0 = <&pmx_led_green &pmx_led_red>; + pinctrl-names = "default"; + + health { + label = "pogoplugv4:green:health"; + gpios = <&gpio0 22 GPIO_ACTIVE_LOW>; + default-state = "on"; + }; + fault { + label = "pogoplugv4:red:fault"; + gpios = <&gpio0 24 GPIO_ACTIVE_LOW>; + }; + }; +}; + +&pinctrl { + pmx_sata0: pmx-sata0 { + marvell,pins = "mpp21"; + marvell,function = "sata0"; + }; + + pmx_sata1: pmx-sata1 { + marvell,pins = "mpp20"; + marvell,function = "sata1"; + }; + + 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"; + }; + + pmx_led_green: pmx-led-green { + marvell,pins = "mpp22"; + marvell,function = "gpio"; + }; + + pmx_led_red: pmx-led-red { + marvell,pins = "mpp24"; + marvell,function = "gpio"; + }; +}; + +&uart0 { + status = "okay"; +}; + +/* + * This PCIE controller has a USB 3.0 XHCI controller at 1,0 + */ +&pciec { + status = "okay"; +}; + +&pcie0 { + status = "okay"; +}; + +&sata { + status = "okay"; + pinctrl-0 = <&pmx_sata0 &pmx_sata1>; + pinctrl-names = "default"; + nr-ports = <1>; +}; + +&sdio { + status = "okay"; + pinctrl-0 = <&pmx_sdio &pmx_sdio_cd &pmx_sdio_wp>; + pinctrl-names = "default"; + cd-gpios = <&gpio0 27 GPIO_ACTIVE_LOW>; + wp-gpios = <&gpio0 28 GPIO_ACTIVE_HIGH>; +}; + +&nand { + /* 128 MiB of NAND flash */ + chip-delay = <40>; + status = "okay"; + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + partition@0 { + label = "u-boot"; + reg = <0x00000000 0x200000>; + read-only; + }; + + partition@200000 { + label = "uImage"; + reg = <0x00200000 0x300000>; + }; + + partition@500000 { + label = "uImage2"; + reg = <0x00500000 0x300000>; + }; + + partition@800000 { + label = "failsafe"; + reg = <0x00800000 0x800000>; + }; + + partition@1000000 { + label = "root"; + reg = <0x01000000 0x7000000>; + }; + }; +}; + +&mdio { + status = "okay"; + + ethphy0: ethernet-phy@0 { + reg = <0>; + }; +}; + +ð0 { + status = "okay"; + ethernet0-port@0 { + phy-handle = <ðphy0>; + }; +}; diff --git a/arch/arm/mach-kirkwood/Kconfig b/arch/arm/mach-kirkwood/Kconfig index c060cc8..382b836 100644 --- a/arch/arm/mach-kirkwood/Kconfig +++ b/arch/arm/mach-kirkwood/Kconfig @@ -51,6 +51,11 @@ config TARGET_POGO_E02 select FEROCEON_88FR131 select KW88F6281 +config TARGET_POGO_V4 + bool "Pogoplug V4 Board" + select FEROCEON_88FR131 + select KW88F6192 + config TARGET_DNS325 bool "dns325 Board" select FEROCEON_88FR131 @@ -123,6 +128,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/Marvell/mvebu_armada-37xx/board.c b/board/Marvell/mvebu_armada-37xx/board.c index d7b6eca..6bfec0c 100644 --- a/board/Marvell/mvebu_armada-37xx/board.c +++ b/board/Marvell/mvebu_armada-37xx/board.c @@ -59,11 +59,11 @@ DECLARE_GLOBAL_DATA_PTR; * Memory Controller Registers * * Assembled based on public information: - * https://gitlab.nic.cz/turris/mox-boot-builder/-/blob/master/wtmi/main.c#L332-336 + * https://gitlab.nic.cz/turris/mox-boot-builder/-/blob/v2020.11.26/wtmi/main.c#L332-336 * https://github.com/MarvellEmbeddedProcessors/mv-ddr-marvell/blob/mv_ddr-armada-18.12/drivers/mv_ddr_mc6.h#L309-L332 * * And checked against the written register values for the various topologies: - * https://github.com/MarvellEmbeddedProcessors/mv-ddr-marvell/blob/mv_ddr-armada-atf-mainline/a3700/mv_ddr_tim.h + * https://github.com/MarvellEmbeddedProcessors/mv-ddr-marvell/blob/master/a3700/mv_ddr_tim.h */ #define A3700_CH0_MC_CTRL2_REG MVEBU_REGISTER(0x002c4) #define A3700_MC_CTRL2_SDRAM_TYPE_MASK 0xf diff --git a/board/Seagate/goflexhome/goflexhome.c b/board/Seagate/goflexhome/goflexhome.c index 52be64f..caea89c 100644 --- a/board/Seagate/goflexhome/goflexhome.c +++ b/board/Seagate/goflexhome/goflexhome.c @@ -1,10 +1,7 @@ // SPDX-License-Identifier: GPL-2.0+ /* - * Copyright (C) 2021 - * Tony Dinh <mibodhi@gmail.com> - * Suriyan Ramasami <suriyan.r@gmail.com> - * - * Copyright (C) 2013 Suriyan Ramasami <suriyan.r@gmail.com> + * Copyright (C) 2021-2022 Tony Dinh <mibodhi@gmail.com> + * Copyright (C) 2013-2021 Suriyan Ramasami <suriyan.r@gmail.com> * * Based on dockstar.c originally written by * Copyright (C) 2010 Eric C. Cooper <ecc@cmu.edu> @@ -18,14 +15,14 @@ #include <common.h> #include <bootstage.h> #include <init.h> -#include <miiphy.h> -#include <net.h> +#include <netdev.h> #include <asm/global_data.h> #include <asm/mach-types.h> #include <asm/arch/soc.h> #include <asm/arch/mpp.h> #include <asm/arch/cpu.h> #include <asm/io.h> +#include <linux/bitops.h> DECLARE_GLOBAL_DATA_PTR; @@ -98,6 +95,11 @@ int board_early_init_f(void) return 0; } +int board_eth_init(struct bd_info *bis) +{ + return cpu_eth_init(bis); +} + int board_init(void) { /* @@ -111,73 +113,9 @@ int board_init(void) return 0; } -static 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) { - phandle = fdt32_to_cpu(*val); - if (!phandle) - return -1; - /* 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 -1; -} - -#ifdef CONFIG_RESET_PHY_R -/* Configure and enable MV88E1116 PHY */ -void reset_phy(void) -{ - u16 reg; - int phyaddr; - char *name = "ethernet-controller@72000"; - char *eth0_path = "/ocp@f1000000/ethernet-controller@72000/ethernet0-port@0"; - - 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 (1 << 14) -#define ORANGE_LED (1 << 15) +#define GREEN_LED BIT(14) +#define ORANGE_LED BIT(15) #define BOTH_LEDS (GREEN_LED | ORANGE_LED) #define NEITHER_LED 0 diff --git a/board/cloudengines/pogo_v4/Kconfig b/board/cloudengines/pogo_v4/Kconfig new file mode 100644 index 0000000..db3b76b --- /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 diff --git a/board/cloudengines/pogo_v4/MAINTAINERS b/board/cloudengines/pogo_v4/MAINTAINERS new file mode 100644 index 0000000..35fd785 --- /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 diff --git a/board/cloudengines/pogo_v4/Makefile b/board/cloudengines/pogo_v4/Makefile new file mode 100644 index 0000000..511bf5f --- /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/kwbimage.cfg b/board/cloudengines/pogo_v4/kwbimage.cfg new file mode 100644 index 0000000..f6294fe --- /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 diff --git a/board/cloudengines/pogo_v4/pogo_v4.c b/board/cloudengines/pogo_v4/pogo_v4.c new file mode 100644 index 0000000..61ce0d5 --- /dev/null +++ b/board/cloudengines/pogo_v4/pogo_v4.c @@ -0,0 +1,148 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright (C) 2014-2022 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 <netdev.h> +#include <asm/arch/cpu.h> +#include <asm/arch/soc.h> +#include <asm/arch/mpp.h> +#include <asm/io.h> +#include <asm/arch/gpio.h> +#include <asm/mach-types.h> +#include <bootstage.h> +#include <command.h> +#include <init.h> +#include <linux/bitops.h> + +DECLARE_GLOBAL_DATA_PTR; + +/* 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 + +/* button */ +#define BTN_EJECT 29 + +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_eth_init(struct bd_info *bis) +{ + return cpu_eth_init(bis); +} + +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; +} + +#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 diff --git a/configs/am64x_evm_a53_defconfig b/configs/am64x_evm_a53_defconfig index 77010a3..7397436 100644 --- a/configs/am64x_evm_a53_defconfig +++ b/configs/am64x_evm_a53_defconfig @@ -38,8 +38,8 @@ CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR=y CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR=0x1400 CONFIG_SPL_DMA=y CONFIG_SPL_ENV_SUPPORT=y -CONFIG_SPL_I2C=y CONFIG_SPL_ETH=y +CONFIG_SPL_I2C=y CONFIG_SPL_DM_MAILBOX=y CONFIG_SPL_DM_SPI_FLASH=y CONFIG_SPL_NET=y diff --git a/configs/am64x_evm_r5_defconfig b/configs/am64x_evm_r5_defconfig index e51a251..61138dd 100644 --- a/configs/am64x_evm_r5_defconfig +++ b/configs/am64x_evm_r5_defconfig @@ -40,8 +40,8 @@ CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR=y CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR=0x400 CONFIG_SPL_DMA=y CONFIG_SPL_ENV_SUPPORT=y -CONFIG_SPL_I2C=y CONFIG_SPL_ETH=y +CONFIG_SPL_I2C=y CONFIG_SPL_DM_MAILBOX=y CONFIG_SPL_DM_SPI_FLASH=y CONFIG_SPL_NET=y @@ -111,14 +111,14 @@ CONFIG_MMC_SDHCI_AM654=y CONFIG_DM_SPI_FLASH=y CONFIG_SPI_FLASH_SPANSION=y CONFIG_SPI_FLASH_STMICRO=y +CONFIG_PHY_TI_DP83867=y +CONFIG_DM_ETH=y +CONFIG_TI_AM65_CPSW_NUSS=y CONFIG_PHY=y CONFIG_SPL_PHY=y CONFIG_PHY_CADENCE_SIERRA=y CONFIG_PHY_CADENCE_TORRENT=y CONFIG_PHY_J721E_WIZ=y -CONFIG_PHY_TI_DP83867=y -CONFIG_DM_ETH=y -CONFIG_TI_AM65_CPSW_NUSS=y CONFIG_PINCTRL=y # CONFIG_PINCTRL_GENERIC is not set CONFIG_SPL_PINCTRL=y diff --git a/configs/bayleybay_defconfig b/configs/bayleybay_defconfig index 40743ea..1f72c53 100644 --- a/configs/bayleybay_defconfig +++ b/configs/bayleybay_defconfig @@ -13,7 +13,6 @@ CONFIG_HAVE_VGA_BIOS=y CONFIG_VGA_BIOS_ADDR=0xfffb0000 CONFIG_GENERATE_PIRQ_TABLE=y CONFIG_GENERATE_MP_TABLE=y -CONFIG_GENERATE_ACPI_TABLE=y CONFIG_SEABIOS=y CONFIG_FIT=y CONFIG_BOOTSTAGE=y @@ -60,4 +59,5 @@ CONFIG_USB_KEYBOARD=y CONFIG_FRAMEBUFFER_SET_VESA_MODE=y CONFIG_FRAMEBUFFER_VESA_MODE_11B=y CONFIG_CONSOLE_SCROLL_LINES=5 +CONFIG_GENERATE_ACPI_TABLE=y # CONFIG_GZIP is not set diff --git a/configs/chromebook_coral_defconfig b/configs/chromebook_coral_defconfig index 8a11fec..0cd8f39 100644 --- a/configs/chromebook_coral_defconfig +++ b/configs/chromebook_coral_defconfig @@ -16,7 +16,6 @@ CONFIG_VENDOR_GOOGLE=y CONFIG_TARGET_CHROMEBOOK_CORAL=y CONFIG_DEBUG_UART=y CONFIG_FSP_VERSION2=y -CONFIG_GENERATE_ACPI_TABLE=y CONFIG_HAVE_ACPI_RESUME=y CONFIG_INTEL_CAR_CQOS=y CONFIG_X86_OFFSET_U_BOOT=0xffd00000 @@ -116,6 +115,7 @@ CONFIG_SPL_FS_CBFS=y CONFIG_FAT_WRITE=y # CONFIG_SPL_USE_TINY_PRINTF is not set CONFIG_TPL_USE_TINY_PRINTF=y +CONFIG_GENERATE_ACPI_TABLE=y CONFIG_CMD_DHRYSTONE=y CONFIG_TPM=y # CONFIG_GZIP is not set diff --git a/configs/conga-qeval20-qa3-e3845-internal-uart_defconfig b/configs/conga-qeval20-qa3-e3845-internal-uart_defconfig index d35221c..c1cf8cc 100644 --- a/configs/conga-qeval20-qa3-e3845-internal-uart_defconfig +++ b/configs/conga-qeval20-qa3-e3845-internal-uart_defconfig @@ -16,7 +16,6 @@ CONFIG_HAVE_VGA_BIOS=y CONFIG_VGA_BIOS_ADDR=0xfffb0000 CONFIG_GENERATE_PIRQ_TABLE=y CONFIG_GENERATE_MP_TABLE=y -CONFIG_GENERATE_ACPI_TABLE=y CONFIG_HAVE_ACPI_RESUME=y CONFIG_SEABIOS=y CONFIG_FIT=y @@ -70,4 +69,5 @@ CONFIG_USB_KEYBOARD=y CONFIG_FRAMEBUFFER_SET_VESA_MODE=y CONFIG_FRAMEBUFFER_VESA_MODE_114=y CONFIG_CONSOLE_SCROLL_LINES=5 +CONFIG_GENERATE_ACPI_TABLE=y # CONFIG_GZIP is not set diff --git a/configs/conga-qeval20-qa3-e3845_defconfig b/configs/conga-qeval20-qa3-e3845_defconfig index 98015a8..5cad4d7 100644 --- a/configs/conga-qeval20-qa3-e3845_defconfig +++ b/configs/conga-qeval20-qa3-e3845_defconfig @@ -12,7 +12,6 @@ CONFIG_HAVE_VGA_BIOS=y CONFIG_VGA_BIOS_ADDR=0xfffa0000 CONFIG_GENERATE_PIRQ_TABLE=y CONFIG_GENERATE_MP_TABLE=y -CONFIG_GENERATE_ACPI_TABLE=y CONFIG_HAVE_ACPI_RESUME=y CONFIG_SEABIOS=y CONFIG_FIT=y @@ -66,4 +65,5 @@ CONFIG_USB_KEYBOARD=y CONFIG_FRAMEBUFFER_SET_VESA_MODE=y CONFIG_FRAMEBUFFER_VESA_MODE_114=y CONFIG_CONSOLE_SCROLL_LINES=5 +CONFIG_GENERATE_ACPI_TABLE=y # CONFIG_GZIP is not set diff --git a/configs/dfi-bt700-q7x-151_defconfig b/configs/dfi-bt700-q7x-151_defconfig index 3af6c04..60077ed 100644 --- a/configs/dfi-bt700-q7x-151_defconfig +++ b/configs/dfi-bt700-q7x-151_defconfig @@ -11,7 +11,6 @@ CONFIG_HAVE_VGA_BIOS=y CONFIG_VGA_BIOS_ADDR=0xfffa0000 CONFIG_GENERATE_PIRQ_TABLE=y CONFIG_GENERATE_MP_TABLE=y -CONFIG_GENERATE_ACPI_TABLE=y CONFIG_HAVE_ACPI_RESUME=y CONFIG_SEABIOS=y CONFIG_FIT=y @@ -65,4 +64,5 @@ CONFIG_USB_ETHER_RTL8152=y CONFIG_FRAMEBUFFER_SET_VESA_MODE=y CONFIG_FRAMEBUFFER_VESA_MODE_114=y CONFIG_CONSOLE_SCROLL_LINES=5 +CONFIG_GENERATE_ACPI_TABLE=y # CONFIG_GZIP is not set diff --git a/configs/edison_defconfig b/configs/edison_defconfig index 8f82c2e..be19832 100644 --- a/configs/edison_defconfig +++ b/configs/edison_defconfig @@ -9,7 +9,6 @@ CONFIG_ENV_OFFSET_REDUND=0x600000 CONFIG_VENDOR_INTEL=y CONFIG_TARGET_EDISON=y CONFIG_SMP=y -CONFIG_GENERATE_ACPI_TABLE=y CONFIG_SYS_LOAD_ADDR=0x100000 CONFIG_BOARD_EARLY_INIT_R=y CONFIG_LAST_STAGE_INIT=y @@ -48,4 +47,5 @@ CONFIG_USB_GADGET_PRODUCT_NUM=0x0a99 CONFIG_USB_GADGET_DOWNLOAD=y CONFIG_WDT=y CONFIG_WDT_TANGIER=y +CONFIG_GENERATE_ACPI_TABLE=y CONFIG_SHA1=y diff --git a/configs/galileo_defconfig b/configs/galileo_defconfig index eaa9021..0a4c207 100644 --- a/configs/galileo_defconfig +++ b/configs/galileo_defconfig @@ -9,7 +9,6 @@ CONFIG_VENDOR_INTEL=y CONFIG_TARGET_GALILEO=y CONFIG_GENERATE_PIRQ_TABLE=y CONFIG_GENERATE_MP_TABLE=y -CONFIG_GENERATE_ACPI_TABLE=y CONFIG_FIT=y CONFIG_SHOW_BOOT_PROGRESS=y CONFIG_USE_BOOTARGS=y @@ -49,4 +48,5 @@ CONFIG_CPU=y CONFIG_SPI=y CONFIG_USB_STORAGE=y CONFIG_USB_KEYBOARD=y +CONFIG_GENERATE_ACPI_TABLE=y # CONFIG_GZIP is not set diff --git a/configs/goflexhome_defconfig b/configs/goflexhome_defconfig index ec8b739..e6eb00a 100644 --- a/configs/goflexhome_defconfig +++ b/configs/goflexhome_defconfig @@ -2,6 +2,7 @@ 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_KWD_CONFIG="board/Seagate/goflexhome/kwbimage.cfg" CONFIG_SYS_TEXT_BASE=0x600000 @@ -47,6 +48,7 @@ CONFIG_SATA_MV=y # CONFIG_MMC is not set CONFIG_MTD=y CONFIG_MTD_RAW_NAND=y +CONFIG_PHY_MARVELL=y CONFIG_DM_ETH=y CONFIG_MVGBE=y CONFIG_MII=y diff --git a/configs/minnowmax_defconfig b/configs/minnowmax_defconfig index 83accc3..c4d37db 100644 --- a/configs/minnowmax_defconfig +++ b/configs/minnowmax_defconfig @@ -16,7 +16,6 @@ CONFIG_HAVE_VGA_BIOS=y CONFIG_VGA_BIOS_ADDR=0xfffb0000 CONFIG_GENERATE_PIRQ_TABLE=y CONFIG_GENERATE_MP_TABLE=y -CONFIG_GENERATE_ACPI_TABLE=y CONFIG_HAVE_ACPI_RESUME=y CONFIG_SEABIOS=y CONFIG_FIT=y @@ -65,4 +64,5 @@ CONFIG_USB_STORAGE=y CONFIG_USB_KEYBOARD=y CONFIG_VIDEO_COPY=y CONFIG_FRAMEBUFFER_SET_VESA_MODE=y +CONFIG_GENERATE_ACPI_TABLE=y # CONFIG_GZIP is not set diff --git a/configs/pogo_v4_defconfig b/configs/pogo_v4_defconfig new file mode 100644 index 0000000..1cf409c --- /dev/null +++ b/configs/pogo_v4_defconfig @@ -0,0 +1,80 @@ +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_KWD_CONFIG="board/cloudengines/pogo_v4/kwbimage.cfg" +CONFIG_SYS_TEXT_BASE=0x600000 +CONFIG_TARGET_POGO_V4=y +CONFIG_ENV_SIZE=0x20000 +CONFIG_ENV_OFFSET=0xC0000 +CONFIG_DEFAULT_DEVICE_TREE="kirkwood-pogoplug-series-4" +CONFIG_IDENT_STRING="\nPogoplug V4" +CONFIG_SYS_LOAD_ADDR=0x800000 +CONFIG_BOOTSTAGE=y +CONFIG_SHOW_BOOT_PROGRESS=y +CONFIG_BOOTDELAY=10 +CONFIG_USE_BOOTCOMMAND=y +CONFIG_BOOTCOMMAND="setenv bootargs ${bootargs_console}; run bootcmd_usb; bootm 0x00800000 0x01100000 0x2c00000" +CONFIG_USE_PREBOOT=y +CONFIG_BOARD_LATE_INIT=y +CONFIG_HUSH_PARSER=y +CONFIG_SYS_PROMPT="Pogo_V4> " +CONFIG_CMD_BOOTZ=y +# CONFIG_BOOTM_PLAN9 is not set +# CONFIG_BOOTM_RTEMS is not set +# CONFIG_BOOTM_VXWORKS is not set +# CONFIG_CMD_FLASH is not set +CONFIG_CMD_MMC=y +CONFIG_CMD_MTD=y +CONFIG_CMD_NAND=y +CONFIG_CMD_PCI=y +CONFIG_CMD_SATA=y +CONFIG_CMD_USB=y +CONFIG_CMD_DHCP=y +CONFIG_CMD_MII=y +CONFIG_CMD_PING=y +CONFIG_CMD_SNTP=y +CONFIG_CMD_DNS=y +CONFIG_CMD_EXT2=y +CONFIG_CMD_EXT4=y +CONFIG_CMD_FAT=y +CONFIG_CMD_FS_GENERIC=y +CONFIG_CMD_JFFS2=y +CONFIG_CMD_MTDPARTS=y +CONFIG_MTDIDS_DEFAULT="nand0=orion_nand" +CONFIG_MTDPARTS_DEFAULT="mtdparts=orion_nand:2M(u-boot),3M(uImage),3M(uImage2),8M(failsafe),112M(root)" +CONFIG_CMD_UBI=y +CONFIG_ISO_PARTITION=y +CONFIG_EFI_PARTITION=y +CONFIG_PARTITION_TYPE_GUID=y +CONFIG_OF_CONTROL=y +CONFIG_ENV_OVERWRITE=y +CONFIG_ENV_IS_IN_NAND=y +CONFIG_VERSION_VARIABLE=y +CONFIG_NET_RANDOM_ETHADDR=y +CONFIG_NETCONSOLE=y +CONFIG_DM=y +CONFIG_SATA_MV=y +CONFIG_KIRKWOOD_GPIO=y +# CONFIG_MMC_HW_PARTITIONING is not set +CONFIG_MVEBU_MMC=y +CONFIG_MTD=y +CONFIG_MTD_RAW_NAND=y +CONFIG_PHY_MARVELL=y +CONFIG_DM_ETH=y +CONFIG_MVGBE=y +CONFIG_MII=y +CONFIG_PCI=y +CONFIG_PCI_MVEBU=y +CONFIG_DM_RTC=y +CONFIG_RTC_EMULATION=y +CONFIG_SYS_NS16550=y +CONFIG_USB=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_PCI=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_STORAGE=y +CONFIG_JFFS2_LZO=y +CONFIG_JFFS2_NAND=y diff --git a/configs/qemu-x86_64_defconfig b/configs/qemu-x86_64_defconfig index 2dfb48b..74beffc 100644 --- a/configs/qemu-x86_64_defconfig +++ b/configs/qemu-x86_64_defconfig @@ -15,7 +15,6 @@ CONFIG_DEBUG_UART=y CONFIG_SMP=y CONFIG_GENERATE_PIRQ_TABLE=y CONFIG_GENERATE_MP_TABLE=y -CONFIG_GENERATE_ACPI_TABLE=y CONFIG_X86_OFFSET_U_BOOT=0xfff00000 CONFIG_DISTRO_DEFAULTS=y CONFIG_FIT=y @@ -64,4 +63,5 @@ CONFIG_FRAMEBUFFER_SET_VESA_MODE=y CONFIG_FRAMEBUFFER_VESA_MODE_USER=y CONFIG_FRAMEBUFFER_VESA_MODE=0x144 CONFIG_CONSOLE_SCROLL_LINES=5 +CONFIG_GENERATE_ACPI_TABLE=y # CONFIG_GZIP is not set diff --git a/configs/qemu-x86_defconfig b/configs/qemu-x86_defconfig index 6be7ce0..9181019 100644 --- a/configs/qemu-x86_defconfig +++ b/configs/qemu-x86_defconfig @@ -8,7 +8,6 @@ CONFIG_DEFAULT_DEVICE_TREE="qemu-x86_i440fx" CONFIG_SMP=y CONFIG_GENERATE_PIRQ_TABLE=y CONFIG_GENERATE_MP_TABLE=y -CONFIG_GENERATE_ACPI_TABLE=y CONFIG_DISTRO_DEFAULTS=y CONFIG_FIT=y CONFIG_BOOTSTAGE=y @@ -46,4 +45,5 @@ CONFIG_FRAMEBUFFER_SET_VESA_MODE=y CONFIG_FRAMEBUFFER_VESA_MODE_USER=y CONFIG_FRAMEBUFFER_VESA_MODE=0x144 CONFIG_CONSOLE_SCROLL_LINES=5 +CONFIG_GENERATE_ACPI_TABLE=y # CONFIG_GZIP is not set diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig index d0886b7..f852743 100644 --- a/configs/sandbox_defconfig +++ b/configs/sandbox_defconfig @@ -301,6 +301,7 @@ CONFIG_CMD_DHRYSTONE=y CONFIG_ECDSA=y CONFIG_ECDSA_VERIFY=y CONFIG_TPM=y +CONFIG_SHA384=y CONFIG_LZ4=y CONFIG_ERRNO_STR=y CONFIG_EFI_RUNTIME_UPDATE_CAPSULE=y @@ -312,4 +313,3 @@ CONFIG_TEST_FDTDEC=y CONFIG_UNIT_TEST=y CONFIG_UT_TIME=y CONFIG_UT_DM=y -CONFIG_SHA384=y diff --git a/configs/som-db5800-som-6867_defconfig b/configs/som-db5800-som-6867_defconfig index 9c9b397..9781b10 100644 --- a/configs/som-db5800-som-6867_defconfig +++ b/configs/som-db5800-som-6867_defconfig @@ -14,7 +14,6 @@ CONFIG_SMP=y CONFIG_HAVE_VGA_BIOS=y CONFIG_GENERATE_PIRQ_TABLE=y CONFIG_GENERATE_MP_TABLE=y -CONFIG_GENERATE_ACPI_TABLE=y CONFIG_SEABIOS=y CONFIG_FIT=y CONFIG_FIT_SIGNATURE=y @@ -61,4 +60,5 @@ CONFIG_USB_KEYBOARD=y CONFIG_FRAMEBUFFER_SET_VESA_MODE=y CONFIG_FRAMEBUFFER_VESA_MODE_11A=y CONFIG_CONSOLE_SCROLL_LINES=5 +CONFIG_GENERATE_ACPI_TABLE=y # CONFIG_GZIP is not set diff --git a/configs/theadorable-x86-conga-qa3-e3845-pcie-x4_defconfig b/configs/theadorable-x86-conga-qa3-e3845-pcie-x4_defconfig index ffe5696..4a9bbef 100644 --- a/configs/theadorable-x86-conga-qa3-e3845-pcie-x4_defconfig +++ b/configs/theadorable-x86-conga-qa3-e3845-pcie-x4_defconfig @@ -15,7 +15,6 @@ CONFIG_HAVE_VGA_BIOS=y CONFIG_VGA_BIOS_ADDR=0xfffb0000 CONFIG_GENERATE_PIRQ_TABLE=y CONFIG_GENERATE_MP_TABLE=y -CONFIG_GENERATE_ACPI_TABLE=y CONFIG_HAVE_ACPI_RESUME=y CONFIG_SEABIOS=y CONFIG_FIT=y @@ -69,4 +68,5 @@ CONFIG_FRAMEBUFFER_SET_VESA_MODE=y CONFIG_FRAMEBUFFER_VESA_MODE_114=y CONFIG_CONSOLE_SCROLL_LINES=5 CONFIG_BMP_16BPP=y +CONFIG_GENERATE_ACPI_TABLE=y # CONFIG_GZIP is not set diff --git a/configs/theadorable-x86-conga-qa3-e3845_defconfig b/configs/theadorable-x86-conga-qa3-e3845_defconfig index ec60abb..66aab79 100644 --- a/configs/theadorable-x86-conga-qa3-e3845_defconfig +++ b/configs/theadorable-x86-conga-qa3-e3845_defconfig @@ -14,7 +14,6 @@ CONFIG_HAVE_VGA_BIOS=y CONFIG_VGA_BIOS_ADDR=0xfffb0000 CONFIG_GENERATE_PIRQ_TABLE=y CONFIG_GENERATE_MP_TABLE=y -CONFIG_GENERATE_ACPI_TABLE=y CONFIG_HAVE_ACPI_RESUME=y CONFIG_SEABIOS=y CONFIG_FIT=y @@ -68,4 +67,5 @@ CONFIG_FRAMEBUFFER_SET_VESA_MODE=y CONFIG_FRAMEBUFFER_VESA_MODE_114=y CONFIG_CONSOLE_SCROLL_LINES=5 CONFIG_BMP_16BPP=y +CONFIG_GENERATE_ACPI_TABLE=y # CONFIG_GZIP is not set diff --git a/configs/theadorable-x86-dfi-bt700_defconfig b/configs/theadorable-x86-dfi-bt700_defconfig index c34fa83..2f87c08 100644 --- a/configs/theadorable-x86-dfi-bt700_defconfig +++ b/configs/theadorable-x86-dfi-bt700_defconfig @@ -13,7 +13,6 @@ CONFIG_HAVE_VGA_BIOS=y CONFIG_VGA_BIOS_ADDR=0xfffb0000 CONFIG_GENERATE_PIRQ_TABLE=y CONFIG_GENERATE_MP_TABLE=y -CONFIG_GENERATE_ACPI_TABLE=y CONFIG_HAVE_ACPI_RESUME=y CONFIG_SEABIOS=y CONFIG_FIT=y @@ -65,4 +64,5 @@ CONFIG_FRAMEBUFFER_SET_VESA_MODE=y CONFIG_FRAMEBUFFER_VESA_MODE_114=y CONFIG_CONSOLE_SCROLL_LINES=5 CONFIG_BMP_16BPP=y +CONFIG_GENERATE_ACPI_TABLE=y # CONFIG_GZIP is not set diff --git a/configs/tools-only_defconfig b/configs/tools-only_defconfig index b78e509..1f8e90a6 100644 --- a/configs/tools-only_defconfig +++ b/configs/tools-only_defconfig @@ -18,7 +18,6 @@ CONFIG_MISC_INIT_F=y CONFIG_OF_CONTROL=y CONFIG_SYS_RELOC_GD_ENV_ADDR=y # CONFIG_NET is not set -# CONFIG_GENERATE_ACPI_TABLE is not set # CONFIG_ACPIGEN is not set CONFIG_AXI=y CONFIG_AXI_SANDBOX=y @@ -33,4 +32,5 @@ CONFIG_I2C_EDID=y # CONFIG_VIRTIO_MMIO is not set # CONFIG_VIRTIO_PCI is not set # CONFIG_VIRTIO_SANDBOX is not set +# CONFIG_GENERATE_ACPI_TABLE is not set # CONFIG_EFI_LOADER is not set diff --git a/include/configs/goflexhome.h b/include/configs/goflexhome.h index 90e37d9..c279579 100644 --- a/include/configs/goflexhome.h +++ b/include/configs/goflexhome.h @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0+ */ /* + * Copyright (C) 2022 Tony Dinh <mibodhi@gmai.com> * Copyright (C) 2013 Suriyan Ramasami <suriyan.r@gmail.com> * * Based on dockstar.h originally written by @@ -14,55 +15,40 @@ #ifndef _CONFIG_GOFLEXHOME_H #define _CONFIG_GOFLEXHOME_H +#include <linux/bitops.h> + /* * Default GPIO configuration and LED status */ #define GOFLEXHOME_OE_LOW (~(0)) #define GOFLEXHOME_OE_HIGH (~(0)) -#define GOFLEXHOME_OE_VAL_LOW (1 << 29) /* USB_PWEN low */ -#define GOFLEXHOME_OE_VAL_HIGH (1 << 17) /* LED pin high */ - -/* 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 (1 << 4) -#define MV88E1116_RGMII_RXTM_CTRL (1 << 5) +#define GOFLEXHOME_OE_VAL_LOW BIT(29) /* USB_PWEN low */ +#define GOFLEXHOME_OE_VAL_HIGH BIT(17) /* LED pin high */ #include "mv-common.h" /* - * Environment variables configurations - */ -/* - * max 4k env size is enough, but in case of nand - * it has to be rounded to sector size - */ - -/* * Default environment variables */ #define CONFIG_EXTRA_ENV_SETTINGS \ "console=console=ttyS0,115200\0" \ "mtdids=nand0=orion_nand\0" \ - "mtdparts="CONFIG_MTDPARTS_DEFAULT \ + "mtdparts=" CONFIG_MTDPARTS_DEFAULT \ "kernel=/boot/uImage\0" \ "bootargs_root=ubi.mtd=root root=ubi0:root rootfstype=ubifs ro\0" /* * Ethernet Driver configuration */ -#ifdef CONFIG_CMD_NET #define CONFIG_MVGBE_PORTS {1, 0} /* enable port 0 only */ #define CONFIG_PHY_BASE_ADR 0 -#endif /* CONFIG_CMD_NET */ +#ifdef CONFIG_RESET_PHY_R +#undef CONFIG_RESET_PHY_R /* remove legacy reset_phy() */ +#endif /* SATA driver configuration */ -#ifdef CONFIG_SATA #define CONFIG_SYS_SATA_MAX_DEVICE 1 #define CONFIG_LBA48 -#endif /* CONFIG_SATA */ #endif /* _CONFIG_GOFLEXHOME_H */ diff --git a/include/configs/pogo_v4.h b/include/configs/pogo_v4.h new file mode 100644 index 0000000..568a936 --- /dev/null +++ b/include/configs/pogo_v4.h @@ -0,0 +1,56 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Copyright (C) 2014-2022 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 + +/* + * 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_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 + */ +#define CONFIG_MVGBE_PORTS {1, 0} /* enable port 0 only */ +#define CONFIG_PHY_BASE_ADR 0 +#ifdef CONFIG_RESET_PHY_R +#undef CONFIG_RESET_PHY_R /* remove legacy reset_phy() */ +#endif + +/* + * SATA Driver configuration + */ +#define CONFIG_SYS_SATA_MAX_DEVICE 1 + +/* + * Support large disk for SATA and USB + */ +#define CONFIG_SYS_64BIT_LBA +#define CONFIG_LBA48 + +#endif /* _CONFIG_POGO_V4_H */ diff --git a/scripts/pylint.base b/scripts/pylint.base index cefdc23..8c650f2 100644 --- a/scripts/pylint.base +++ b/scripts/pylint.base @@ -1,215 +1,226 @@ -_testing 0.83 -atf_bl31 -6.00 -atf_fip 0.29 -binman.cbfs_util 8.38 -binman.cbfs_util_test 9.30 -binman.cmdline 9.09 -binman.control 4.92 -binman.elf 6.73 -binman.elf_test 5.41 -binman.entry 3.38 -binman.entry_test 5.34 -binman.fdt_test 3.23 -binman.fip_util 9.86 -binman.fip_util_test 9.75 -binman.fmap_util 6.88 -binman.ftest 7.46 -binman.image 7.05 -binman.image_test 4.48 -binman.main 5.00 -binman.setup 5.00 -binman.state 4.15 -blob -1.58 -blob_dtb -10.00 -blob_ext -19.09 -blob_ext_list -0.32 -blob_named_by_arg -7.78 -blob_phase -5.00 -buildman.board 7.82 -buildman.bsettings 1.71 -buildman.builder 6.91 -buildman.builderthread 7.39 -buildman.cmdline 9.04 -buildman.control 8.10 -buildman.func_test 7.18 -buildman.kconfiglib 7.49 -buildman.main 1.43 -buildman.test 6.17 -buildman.toolchain 6.55 -capsule_defs 5.00 -cbfs -1.44 -collection 2.67 -concurrencytest 7.26 -conftest -3.29 -conftest 1.88 -conftest 5.13 -conftest 6.56 -cros_ec_rw -6.00 -defs 6.67 -dtoc.dtb_platdata 7.90 -dtoc.fdt 4.50 -dtoc.fdt_util 6.70 -dtoc.main 7.78 -dtoc.setup 5.00 -dtoc.src_scan 8.91 -dtoc.test_dtoc 8.56 -dtoc.test_fdt 6.96 -dtoc.test_src_scan 9.43 -efivar 6.71 -endian-swap 9.29 -fdtmap -3.28 -files -7.43 -fill -6.43 -fit 5.32 -fmap -0.29 -fstest_defs 8.33 -fstest_helpers 4.29 -gbb -0.30 -genboardscfg 7.95 -image_header 5.77 -intel_cmc -12.50 -intel_descriptor 4.62 -intel_fit 0.00 -intel_fit_ptr 2.35 -intel_fsp -12.50 -intel_fsp_m -12.50 -intel_fsp_s -12.50 -intel_fsp_t -12.50 -intel_ifwi 2.71 -intel_me -12.50 -intel_mrc -10.00 -intel_refcode -10.00 -intel_vbt -12.50 -intel_vga -12.50 -microcode-tool 7.25 -mkimage 2.57 -moveconfig 8.32 -multiplexed_log 7.49 -opensbi -6.00 -patman 0.00 -patman.checkpatch 8.04 -patman.command 4.74 -patman.commit 3.25 -patman.control 8.14 -patman.cros_subprocess 7.56 -patman.func_test 8.14 -patman.get_maintainer 6.47 -patman.gitutil 5.62 -patman.main 8.23 -patman.patchstream 9.11 -patman.project 6.67 -patman.series 6.16 -patman.settings 5.89 -patman.setup 5.00 -patman.status 8.62 -patman.terminal 7.05 -patman.test_checkpatch 6.81 -patman.test_util 6.89 -patman.tools 4.31 -patman.tout 3.12 -powerpc_mpc85xx_bootpg_resetvec -10.00 -rkmux 6.90 -rmboard 7.76 -scp -6.00 -section 4.68 -sqfs_common 8.41 -test 8.18 -test_000_version 7.50 -test_ab 6.50 -test_abootimg 6.09 -test_authvar 8.93 -test_avb 5.52 -test_basic 0.60 -test_bind -2.99 -test_button 3.33 -test_capsule_firmware 3.89 -test_dfu 5.45 -test_dm 9.52 -test_efi_fit 8.16 -test_efi_loader 7.38 -test_efi_selftest 6.36 -test_env 7.15 -test_ext 0.00 -test_extension 2.14 -test_fit 6.83 -test_fit_ecdsa 7.94 -test_fit_hashes 7.70 -test_fpga 1.81 -test_fs_cmd 8.00 -test_gpio 6.09 -test_gpt 7.67 -test_handoff 5.00 -test_help 5.00 -test_hush_if_test 9.27 -test_log 8.64 -test_lsblk 8.00 -test_md 3.64 -test_mkdir 1.96 -test_mmc_rd 6.05 -test_mmc_wr 3.33 -test_net 6.84 -test_ofplatdata 5.71 -test_part 8.00 -test_pinmux 3.27 -test_pstore 2.31 -test_qfw 8.75 -test_sandbox_exit 6.50 -test_scp03 3.33 -test_sf 7.13 -test_shell_basics 9.58 -test_signed 8.38 -test_signed_intca 8.10 -test_sleep 7.78 -test_spl 2.22 -test_sqfs_load 7.46 -test_sqfs_ls 8.00 -test_stackprotector 5.71 -test_symlink 1.22 -test_tpm2 8.51 -test_ums 6.32 -test_unknown_cmd 5.00 -test_unlink 2.78 -test_unsigned 8.00 -test_ut 7.06 -test_vboot 6.00 -text -0.48 -u_boot -15.71 -u_boot_console_base 7.08 -u_boot_console_exec_attach 9.23 -u_boot_console_sandbox 8.06 -u_boot_dtb -12.22 -u_boot_dtb_with_ucode 0.39 -u_boot_elf -8.42 -u_boot_env 0.74 -u_boot_expanded -10.00 -u_boot_img -15.71 -u_boot_nodtb -15.71 -u_boot_spawn 7.65 -u_boot_spl -10.91 -u_boot_spl_bss_pad -9.29 -u_boot_spl_dtb -12.22 -u_boot_spl_elf -15.71 -u_boot_spl_expanded -9.09 -u_boot_spl_nodtb -10.91 -u_boot_spl_with_ucode_ptr -5.00 -u_boot_tpl -10.91 -u_boot_tpl_bss_pad -9.29 -u_boot_tpl_dtb -12.22 -u_boot_tpl_dtb_with_ucode -7.50 -u_boot_tpl_elf -15.71 -u_boot_tpl_expanded -9.09 -u_boot_tpl_nodtb -10.91 -u_boot_tpl_with_ucode_ptr -20.83 -u_boot_ucode 1.52 -u_boot_utils 6.94 -u_boot_with_ucode_ptr -0.71 -vblock -1.61 -vboot_evil 8.95 -vboot_forge 9.22 -x86_reset16 -15.71 -x86_reset16_spl -15.71 -x86_reset16_tpl -15.71 -x86_start16 -15.71 -x86_start16_spl -15.71 -x86_start16_tpl -15.71 -zynqmp_pm_cfg_obj_convert 6.67 +test_conftest.py 6.43 +test_multiplexed_log.py 7.20 +test_test.py 8.18 +test_tests_test_000_version.py 7.50 +test_tests_test_android_test_ab.py 6.50 +test_tests_test_android_test_abootimg.py 6.09 +test_tests_test_android_test_avb.py 5.52 +test_tests_test_bind.py -2.99 +test_tests_test_button.py 3.33 +test_tests_test_dfu.py 5.45 +test_tests_test_dm.py 9.52 +test_tests_test_efi_capsule_capsule_defs.py 5.00 +test_tests_test_efi_capsule_conftest.py 1.25 +test_tests_test_efi_capsule_test_capsule_firmware.py 3.89 +test_tests_test_efi_fit.py 7.59 +test_tests_test_efi_loader.py 7.38 +test_tests_test_efi_secboot_conftest.py -3.84 +test_tests_test_efi_secboot_defs.py 6.67 +test_tests_test_efi_secboot_test_authvar.py 8.93 +test_tests_test_efi_secboot_test_signed.py 8.38 +test_tests_test_efi_secboot_test_signed_intca.py 8.10 +test_tests_test_efi_secboot_test_unsigned.py 8.00 +test_tests_test_efi_selftest.py 6.36 +test_tests_test_env.py 7.08 +test_tests_test_extension.py 2.14 +test_tests_test_fit.py 6.20 +test_tests_test_fit_ecdsa.py 7.50 +test_tests_test_fit_hashes.py 7.70 +test_tests_test_fpga.py 1.81 +test_tests_test_fs_conftest.py 4.62 +test_tests_test_fs_fstest_defs.py 8.33 +test_tests_test_fs_fstest_helpers.py 4.29 +test_tests_test_fs_test_basic.py 0.40 +test_tests_test_fs_test_ext.py -0.25 +test_tests_test_fs_test_fs_cmd.py 8.00 +test_tests_test_fs_test_mkdir.py 1.96 +test_tests_test_fs_test_squashfs_sqfs_common.py 8.12 +test_tests_test_fs_test_squashfs_test_sqfs_load.py 7.12 +test_tests_test_fs_test_squashfs_test_sqfs_ls.py 8.00 +test_tests_test_fs_test_symlink.py 0.82 +test_tests_test_fs_test_unlink.py 2.22 +test_tests_test_gpio.py 6.09 +test_tests_test_gpt.py 7.67 +test_tests_test_handoff.py 5.00 +test_tests_test_help.py 5.00 +test_tests_test_hush_if_test.py 9.27 +test_tests_test_log.py 8.64 +test_tests_test_lsblk.py 8.00 +test_tests_test_md.py 3.64 +test_tests_test_mmc_rd.py 6.05 +test_tests_test_mmc_wr.py 3.33 +test_tests_test_net.py 6.84 +test_tests_test_ofplatdata.py 5.71 +test_tests_test_part.py 8.00 +test_tests_test_pinmux.py 3.27 +test_tests_test_pstore.py 2.31 +test_tests_test_qfw.py 8.75 +test_tests_test_sandbox_exit.py 6.50 +test_tests_test_scp03.py 3.33 +test_tests_test_sf.py 7.02 +test_tests_test_shell_basics.py 9.58 +test_tests_test_sleep.py 7.78 +test_tests_test_spl.py 2.22 +test_tests_test_stackprotector.py 5.71 +test_tests_test_tpm2.py 8.51 +test_tests_test_ums.py 6.32 +test_tests_test_unknown_cmd.py 5.00 +test_tests_test_ut.py 7.06 +test_tests_test_vboot.py 6.00 +test_tests_vboot_evil.py 8.95 +test_tests_vboot_forge.py 9.22 +test_u_boot_console_base.py 6.80 +test_u_boot_console_exec_attach.py 8.85 +test_u_boot_console_sandbox.py 7.22 +test_u_boot_spawn.py 7.39 +test_u_boot_utils.py 6.25 +tools_binman_bintool 8.59 +tools_binman_bintool_test 9.87 +tools_binman_btool__testing 6.09 +tools_binman_btool_cbfstool 7.39 +tools_binman_btool_fiptool 7.62 +tools_binman_btool_futility 6.96 +tools_binman_btool_ifwitool 3.33 +tools_binman_btool_lz4 5.93 +tools_binman_btool_lzma_alone 6.67 +tools_binman_btool_mkimage 6.79 +tools_binman_cbfs_util 7.77 +tools_binman_cbfs_util_test 9.27 +tools_binman_cmdline 9.03 +tools_binman_comp_util 6.25 +tools_binman_control 4.60 +tools_binman_elf 6.42 +tools_binman_elf_test 5.41 +tools_binman_entry 2.48 +tools_binman_entry_test 5.34 +tools_binman_etype__testing 0.83 +tools_binman_etype_atf_bl31 -6.00 +tools_binman_etype_atf_fip 0.29 +tools_binman_etype_blob -1.58 +tools_binman_etype_blob_dtb -10.00 +tools_binman_etype_blob_ext -19.09 +tools_binman_etype_blob_ext_list 0.00 +tools_binman_etype_blob_named_by_arg -7.78 +tools_binman_etype_blob_phase -5.00 +tools_binman_etype_cbfs -1.44 +tools_binman_etype_collection 2.33 +tools_binman_etype_cros_ec_rw -6.00 +tools_binman_etype_fdtmap -3.61 +tools_binman_etype_files -7.43 +tools_binman_etype_fill -6.43 +tools_binman_etype_fit 5.18 +tools_binman_etype_fmap -0.59 +tools_binman_etype_gbb 0.83 +tools_binman_etype_image_header 5.58 +tools_binman_etype_intel_cmc -12.50 +tools_binman_etype_intel_descriptor 4.62 +tools_binman_etype_intel_fit 0.00 +tools_binman_etype_intel_fit_ptr 2.35 +tools_binman_etype_intel_fsp -12.50 +tools_binman_etype_intel_fsp_m -12.50 +tools_binman_etype_intel_fsp_s -12.50 +tools_binman_etype_intel_fsp_t -12.50 +tools_binman_etype_intel_ifwi 2.88 +tools_binman_etype_intel_me -12.50 +tools_binman_etype_intel_mrc -10.00 +tools_binman_etype_intel_refcode -10.00 +tools_binman_etype_intel_vbt -12.50 +tools_binman_etype_intel_vga -12.50 +tools_binman_etype_mkimage 2.31 +tools_binman_etype_opensbi -6.00 +tools_binman_etype_powerpc_mpc85xx_bootpg_resetvec -10.00 +tools_binman_etype_scp -6.00 +tools_binman_etype_section 4.12 +tools_binman_etype_text -0.48 +tools_binman_etype_u_boot -15.71 +tools_binman_etype_u_boot_dtb -12.22 +tools_binman_etype_u_boot_dtb_with_ucode 0.39 +tools_binman_etype_u_boot_elf -8.42 +tools_binman_etype_u_boot_env 0.74 +tools_binman_etype_u_boot_expanded -10.00 +tools_binman_etype_u_boot_img -15.71 +tools_binman_etype_u_boot_nodtb -15.71 +tools_binman_etype_u_boot_spl -10.91 +tools_binman_etype_u_boot_spl_bss_pad -9.29 +tools_binman_etype_u_boot_spl_dtb -12.22 +tools_binman_etype_u_boot_spl_elf -15.71 +tools_binman_etype_u_boot_spl_expanded -9.09 +tools_binman_etype_u_boot_spl_nodtb -10.91 +tools_binman_etype_u_boot_spl_with_ucode_ptr -5.00 +tools_binman_etype_u_boot_tpl -10.91 +tools_binman_etype_u_boot_tpl_bss_pad -9.29 +tools_binman_etype_u_boot_tpl_dtb -12.22 +tools_binman_etype_u_boot_tpl_dtb_with_ucode -7.50 +tools_binman_etype_u_boot_tpl_elf -15.71 +tools_binman_etype_u_boot_tpl_expanded -9.09 +tools_binman_etype_u_boot_tpl_nodtb -10.91 +tools_binman_etype_u_boot_tpl_with_ucode_ptr -20.83 +tools_binman_etype_u_boot_ucode 1.52 +tools_binman_etype_u_boot_with_ucode_ptr -0.71 +tools_binman_etype_vblock 0.00 +tools_binman_etype_x86_reset16 -15.71 +tools_binman_etype_x86_reset16_spl -15.71 +tools_binman_etype_x86_reset16_tpl -15.71 +tools_binman_etype_x86_start16 -15.71 +tools_binman_etype_x86_start16_spl -15.71 +tools_binman_etype_x86_start16_tpl -15.71 +tools_binman_fdt_test 3.23 +tools_binman_fip_util 9.85 +tools_binman_fip_util_test 10.00 +tools_binman_fmap_util 6.67 +tools_binman_ftest 7.39 +tools_binman_image 6.48 +tools_binman_image_test 4.48 +tools_binman_main 4.29 +tools_binman_setup 5.00 +tools_binman_state 3.43 +tools_buildman_board 7.11 +tools_buildman_bsettings 0.98 +tools_buildman_builder 6.55 +tools_buildman_builderthread 7.35 +tools_buildman_cmdline 8.85 +tools_buildman_control 7.04 +tools_buildman_func_test 6.38 +tools_buildman_kconfiglib 7.48 +tools_buildman_main 1.43 +tools_buildman_test 6.10 +tools_buildman_toolchain 5.62 +tools_concurrencytest_concurrencytest 6.77 +tools_dtoc_dtb_platdata 7.82 +tools_dtoc_fdt 3.47 +tools_dtoc_fdt_util 5.00 +tools_dtoc_main 7.33 +tools_dtoc_setup 5.00 +tools_dtoc_src_scan 8.75 +tools_dtoc_test_dtoc 8.54 +tools_dtoc_test_fdt 6.92 +tools_dtoc_test_src_scan 9.43 +tools_efivar 6.71 +tools_endian-swap 8.93 +tools_genboardscfg 7.27 +tools_microcode-tool 7.19 +tools_moveconfig 8.11 +tools_patman___init__ 0.00 +tools_patman_checkpatch 7.61 +tools_patman_command 4.23 +tools_patman_commit 2.75 +tools_patman_control 8.14 +tools_patman_cros_subprocess 7.41 +tools_patman_func_test 7.87 +tools_patman_get_maintainer 4.71 +tools_patman_gitutil 4.58 +tools_patman_main 8.23 +tools_patman_patchstream 9.04 +tools_patman_project 3.33 +tools_patman_series 5.95 +tools_patman_settings 5.63 +tools_patman_setup 5.00 +tools_patman_status 8.43 +tools_patman_terminal 6.29 +tools_patman_test_checkpatch 6.81 +tools_patman_test_util 6.51 +tools_patman_tools 3.98 +tools_patman_tout 2.97 +tools_rkmux 6.76 +tools_rmboard 7.76 +tools_zynqmp_pm_cfg_obj_convert 6.67 diff --git a/tools/kwboot.c b/tools/kwboot.c index c3d8ab6..2684f0e 100644 --- a/tools/kwboot.c +++ b/tools/kwboot.c @@ -63,7 +63,6 @@ static unsigned char kwboot_msg_debug[] = { #define EOT 4 /* sender end of block transfer */ #define ACK 6 /* target block ack */ #define NAK 21 /* target block negative ack */ -#define CAN 24 /* target/sender transfer cancellation */ #define KWBOOT_XM_BLKSZ 128 /* xmodem block size */ @@ -75,7 +74,7 @@ struct kwboot_block { uint8_t csum; } __packed; -#define KWBOOT_BLK_RSP_TIMEO 1000 /* ms */ +#define KWBOOT_BLK_RSP_TIMEO 2000 /* ms */ #define KWBOOT_HDR_RSP_TIMEO 10000 /* ms */ /* ARM code to change baudrate */ @@ -293,13 +292,15 @@ static int blk_rsp_timeo = KWBOOT_BLK_RSP_TIMEO; static ssize_t kwboot_write(int fd, const char *buf, size_t len) { - size_t tot = 0; + ssize_t tot = 0; while (tot < len) { ssize_t wr = write(fd, buf + tot, len - tot); - if (wr < 0) - return -1; + if (wr < 0 && errno == EINTR) + continue; + else if (wr < 0) + return wr; tot += wr; } @@ -408,15 +409,19 @@ kwboot_tty_recv(int fd, void *buf, size_t len, int timeo) do { nfds = select(fd + 1, &rfds, NULL, NULL, &tv); - if (nfds < 0) + if (nfds < 0 && errno == EINTR) + continue; + else if (nfds < 0) goto out; - if (!nfds) { + else if (!nfds) { errno = ETIMEDOUT; goto out; } n = read(fd, buf, len); - if (n <= 0) + if (n < 0 && errno == EINTR) + continue; + else if (n <= 0) goto out; buf = (char *)buf + n; @@ -718,6 +723,7 @@ out: static int kwboot_bootmsg(int tty, void *msg) { + struct kwboot_block block; int rc; char c; int count; @@ -748,7 +754,40 @@ kwboot_bootmsg(int tty, void *msg) kwboot_printv("\n"); - return rc; + if (rc) + return rc; + + /* + * At this stage we have sent more boot message patterns and BootROM + * (at least on Armada XP and 385) started interpreting sent bytes as + * part of xmodem packets. If BootROM is expecting SOH byte as start of + * a xmodem packet and it receives byte 0xff, then it throws it away and + * sends a NAK reply to host. If BootROM does not receive any byte for + * 2s when expecting some continuation of the xmodem packet, it throws + * away the partially received xmodem data and sends NAK reply to host. + * + * Therefore for starting xmodem transfer we have two options: Either + * wait 2s or send 132 0xff bytes (which is the size of xmodem packet) + * to ensure that BootROM throws away any partially received data. + */ + + /* flush output queue with remaining boot message patterns */ + tcflush(tty, TCOFLUSH); + + /* send one xmodem packet with 0xff bytes to force BootROM to re-sync */ + memset(&block, 0xff, sizeof(block)); + kwboot_tty_send(tty, &block, sizeof(block), 0); + + /* + * Sending 132 bytes via 115200B/8-N-1 takes 11.45 ms, reading 132 bytes + * takes 11.45 ms, so waiting for 30 ms should be enough. + */ + usleep(30 * 1000); + + /* flush remaining NAK replies from input queue */ + tcflush(tty, TCIFLUSH); + + return 0; } static int @@ -826,7 +865,7 @@ _now(void) static int _is_xm_reply(char c) { - return c == ACK || c == NAK || c == CAN; + return c == ACK || c == NAK; } static int @@ -841,9 +880,6 @@ _xm_reply_to_error(int c) case NAK: errno = EBADMSG; break; - case CAN: - errno = ECANCELED; - break; default: errno = EPROTO; break; @@ -879,7 +915,8 @@ kwboot_baud_magic_handle(int fd, char c, int baudrate) } static int -kwboot_xm_recv_reply(int fd, char *c, int nak_on_non_xm, +kwboot_xm_recv_reply(int fd, char *c, int stop_on_non_xm, + int ignore_nak_reply, int allow_non_xm, int *non_xm_print, int baudrate, int *baud_changed) { @@ -899,8 +936,14 @@ kwboot_xm_recv_reply(int fd, char *c, int nak_on_non_xm, } /* If received xmodem reply, end. */ - if (_is_xm_reply(*c)) + if (_is_xm_reply(*c)) { + if (*c == NAK && ignore_nak_reply) { + timeout = recv_until - _now(); + if (timeout >= 0) + continue; + } break; + } /* * If receiving/printing non-xmodem text output is allowed and @@ -928,10 +971,8 @@ kwboot_xm_recv_reply(int fd, char *c, int nak_on_non_xm, *non_xm_print = 1; } } else { - if (nak_on_non_xm) { - *c = NAK; + if (stop_on_non_xm) break; - } timeout = recv_until - _now(); if (timeout < 0) { errno = ETIMEDOUT; @@ -945,7 +986,7 @@ kwboot_xm_recv_reply(int fd, char *c, int nak_on_non_xm, static int kwboot_xm_sendblock(int fd, struct kwboot_block *block, int allow_non_xm, - int *done_print, int baudrate) + int *done_print, int baudrate, int allow_retries) { int non_xm_print, baud_changed; int rc, err, retries; @@ -959,7 +1000,7 @@ kwboot_xm_sendblock(int fd, struct kwboot_block *block, int allow_non_xm, do { rc = kwboot_tty_send(fd, block, sizeof(*block), 1); if (rc) - return rc; + goto err; if (allow_non_xm && !*done_print) { kwboot_progress(100, '.'); @@ -968,29 +1009,32 @@ kwboot_xm_sendblock(int fd, struct kwboot_block *block, int allow_non_xm, } rc = kwboot_xm_recv_reply(fd, &c, retries < 3, + retries > 8, allow_non_xm, &non_xm_print, baudrate, &baud_changed); if (rc) - goto can; + goto err; - if (!allow_non_xm && c != ACK) - kwboot_progress(-1, '+'); - } while (c == NAK && retries++ < 16); + if (!allow_non_xm && c != ACK) { + if (c == NAK && allow_retries && retries + 1 < 16) + kwboot_progress(-1, '+'); + else + kwboot_progress(-1, 'E'); + } + } while (c == NAK && allow_retries && retries++ < 16); if (non_xm_print) kwboot_printv("\n"); if (allow_non_xm && baudrate && !baud_changed) { fprintf(stderr, "Baudrate was not changed\n"); - rc = -1; errno = EPROTO; - goto can; + return -1; } return _xm_reply_to_error(c); -can: +err: err = errno; - kwboot_tty_send_char(fd, CAN); kwboot_printv("\n"); errno = err; return rc; @@ -1011,6 +1055,7 @@ kwboot_xm_finish(int fd) return rc; rc = kwboot_xm_recv_reply(fd, &c, retries < 3, + retries > 8, 0, NULL, 0, NULL); if (rc) return rc; @@ -1043,8 +1088,30 @@ kwboot_xmodem_one(int tty, int *pnum, int header, const uint8_t *data, last_block = (left <= blksz); + /* + * Handling of repeated xmodem packets is completely broken in + * Armada 385 BootROM - it completely ignores xmodem packet + * numbers, they are only used for checksum verification. + * BootROM can handle a retry of the xmodem packet only during + * the transmission of kwbimage header and only if BootROM + * itself sent NAK response to previous attempt (it does it on + * checksum failure). During the transmission of kwbimage data + * part, BootROM always expects next xmodem packet, even if it + * sent NAK to previous attempt - there is absolutely no way to + * repair incorrectly transmitted xmodem packet during kwbimage + * data part upload. Also, if kwboot receives non-ACK/NAK + * response (meaning that original BootROM response was damaged + * on UART) there is no way to detect if BootROM accepted xmodem + * packet or not and no way to check if kwboot could repeat the + * packet or not. + * + * Stop transfer and return failure if kwboot receives unknown + * reply if non-xmodem reply is not allowed (for all xmodem + * packets except the last header packet) or when non-ACK reply + * is received during data part transfer. + */ rc = kwboot_xm_sendblock(tty, &block, header && last_block, - &done_print, baudrate); + &done_print, baudrate, header); if (rc) goto out; @@ -1081,10 +1148,6 @@ kwboot_xmodem(int tty, const void *_img, size_t size, int baudrate) */ hdrsz += (KWBOOT_XM_BLKSZ - hdrsz % KWBOOT_XM_BLKSZ) % KWBOOT_XM_BLKSZ; - kwboot_printv("Waiting 2s and flushing tty\n"); - sleep(2); /* flush isn't effective without it */ - tcflush(tty, TCIOFLUSH); - pnum = 1; rc = kwboot_xmodem_one(tty, &pnum, 1, img, hdrsz, baudrate); @@ -1568,6 +1631,7 @@ kwboot_img_patch(void *img, size_t *size, int baudrate) * baudrate (which should be 115200) and do not touch * UART MPP configuration. */ + hdr->flags |= 0x1; hdr->options &= ~0x1F; hdr->options |= MAIN_HDR_V1_OPT_BAUD_DEFAULT; hdr->options |= 0 << 3; @@ -1672,6 +1736,8 @@ main(int argc, char **argv) size_t size; size_t after_img_rsv; int baudrate; + int prev_optind; + int c; rv = 1; tty = -1; @@ -1689,22 +1755,32 @@ main(int argc, char **argv) kwboot_verbose = isatty(STDOUT_FILENO); do { - int c = getopt(argc, argv, "hb:ptaB:dD:q:s:o:"); + prev_optind = optind; + c = getopt(argc, argv, "hbptaB:dD:q:s:o:"); if (c < 0) break; switch (c) { case 'b': + if (imgpath || bootmsg || debugmsg) + goto usage; bootmsg = kwboot_msg_boot; - imgpath = optarg; + if (prev_optind == optind) + goto usage; + if (argv[optind] && argv[optind][0] != '-') + imgpath = argv[optind++]; break; case 'D': + if (imgpath || bootmsg || debugmsg) + goto usage; bootmsg = NULL; imgpath = optarg; break; case 'd': + if (imgpath || bootmsg || debugmsg) + goto usage; debugmsg = kwboot_msg_debug; break; @@ -1744,14 +1820,14 @@ main(int argc, char **argv) } } while (1); - if (!bootmsg && !term && !debugmsg) - goto usage; - - if (argc - optind < 1) + if (!bootmsg && !term && !debugmsg && !imgpath) goto usage; ttypath = argv[optind++]; + if (optind != argc) + goto usage; + tty = kwboot_open_tty(ttypath, imgpath ? 115200 : baudrate); if (tty < 0) { perror(ttypath); |