[U-Boot] [PATCH u-boot-marvell v3 04/12] board: turris_mox: Fixup U-Boot's device tree if PCIe connected
Stefan Roese
sr at denx.de
Wed Sep 19 12:28:18 UTC 2018
On 21.08.2018 12:22, Marek BehĂșn wrote:
> If PCIe Mox module is connected we want to have PCIe node enabled
> in U-Boot's device tree.
>
> Signed-off-by: Marek Behun <marek.behun at nic.cz>
> ---
> arch/arm/dts/armada-3720-turris-mox.dts | 7 +++
> board/CZ.NIC/turris_mox/turris_mox.c | 82 +++++++++++++++++++++++++++++++++
> configs/turris_mox_defconfig | 1 +
> 3 files changed, 90 insertions(+)
>
> diff --git a/arch/arm/dts/armada-3720-turris-mox.dts b/arch/arm/dts/armada-3720-turris-mox.dts
> index bef100afce..a817f20920 100644
> --- a/arch/arm/dts/armada-3720-turris-mox.dts
> +++ b/arch/arm/dts/armada-3720-turris-mox.dts
> @@ -130,3 +130,10 @@
> vbus-supply = <®_usb3_vbus>;
> status = "okay";
> };
> +
> +&pcie0 {
> + pinctrl-names = "default";
> + pinctrl-0 = <&pcie_pins>;
> + reset-gpio = <&gpiosb 3 GPIO_ACTIVE_HIGH>;
> + status = "disabled";
> +};
> diff --git a/board/CZ.NIC/turris_mox/turris_mox.c b/board/CZ.NIC/turris_mox/turris_mox.c
> index b6a0ca4626..c4622a49c2 100644
> --- a/board/CZ.NIC/turris_mox/turris_mox.c
> +++ b/board/CZ.NIC/turris_mox/turris_mox.c
> @@ -4,17 +4,99 @@
> */
>
> #include <common.h>
> +#include <asm/io.h>
> #include <dm.h>
> #include <clk.h>
> #include <spi.h>
> #include <linux/string.h>
> +#include <linux/libfdt.h>
> +#include <fdt_support.h>
>
> #ifdef CONFIG_WDT_ARMADA_37XX
> #include <wdt.h>
> #endif
>
> +#define MAX_MOX_MODULES 10
> +
> +#define MOX_MODULE_SFP 0x1
> +#define MOX_MODULE_PCI 0x2
> +#define MOX_MODULE_TOPAZ 0x3
> +#define MOX_MODULE_PERIDOT 0x4
> +#define MOX_MODULE_USB3 0x5
> +#define MOX_MODULE_PASSPCI 0x6
> +
> +#define ARMADA_37XX_NB_GPIO_SEL 0xd0013830
> +#define ARMADA_37XX_SPI_CTRL 0xd0010600
> +#define ARMADA_37XX_SPI_CFG 0xd0010604
> +#define ARMADA_37XX_SPI_DOUT 0xd0010608
> +#define ARMADA_37XX_SPI_DIN 0xd001060c
> +
> +#define PCIE_PATH "/soc/pcie at d0070000"
> +
> DECLARE_GLOBAL_DATA_PTR;
>
> +#if defined(CONFIG_OF_BOARD_FIXUP)
> +int board_fix_fdt(void *blob)
> +{
> + u8 topology[MAX_MOX_MODULES];
> + int i, size, node;
> + bool enable;
> +
> + /*
> + * SPI driver is not loaded in driver model yet, but we have to find out
> + * if pcie should be enabled in U-Boot's device tree. Therefore we have
> + * to read SPI by reading/writing SPI registers directly
> + */
> +
> + writel(0x563fa, ARMADA_37XX_NB_GPIO_SEL);
> + writel(0x10df, ARMADA_37XX_SPI_CFG);
> + writel(0x2005b, ARMADA_37XX_SPI_CTRL);
> +
> + while (!(readl(ARMADA_37XX_SPI_CTRL) & 0x2))
> + udelay(1);
> +
> + for (i = 0; i < MAX_MOX_MODULES; ++i) {
> + writel(0x0, ARMADA_37XX_SPI_DOUT);
> +
> + while (!(readl(ARMADA_37XX_SPI_CTRL) & 0x2))
> + udelay(1);
> +
> + topology[i] = readl(ARMADA_37XX_SPI_DIN) & 0xff;
> + if (topology[i] == 0xff)
> + break;
> +
> + topology[i] &= 0xf;
> + }
> +
> + size = i;
> +
> + writel(0x5b, ARMADA_37XX_SPI_CTRL);
> +
> + if (size > 1 && (topology[1] == MOX_MODULE_PCI ||
> + topology[1] == MOX_MODULE_USB3 ||
> + topology[1] == MOX_MODULE_PASSPCI))
> + enable = true;
> + else
> + enable = false;
> +
> + node = fdt_path_offset(blob, PCIE_PATH);
> +
> + if (node < 0) {
> + printf("Cannot find PCIe node in U-Boot's device tree!\n");
> + return 0;
> + }
> +
> + if (fdt_setprop_string(blob, node, "status",
> + enable ? "okay" : "disabled") < 0) {
> + printf("Cannot %s PCIe in U-Boot's device tree!\n",
> + enable ? "enable" : "disable");
> + return 0;
> + }
> +
> + return 0;
> +}
> +#endif
> +
> #ifdef CONFIG_WDT_ARMADA_37XX
> static struct udevice *watchdog_dev;
>
> diff --git a/configs/turris_mox_defconfig b/configs/turris_mox_defconfig
> index de9aedc764..47ab914ce9 100644
> --- a/configs/turris_mox_defconfig
> +++ b/configs/turris_mox_defconfig
> @@ -13,6 +13,7 @@ CONFIG_SYS_CONSOLE_INFO_QUIET=y
> # CONFIG_DISPLAY_CPUINFO is not set
> # CONFIG_DISPLAY_BOARDINFO is not set
> CONFIG_ARCH_EARLY_INIT_R=y
> +CONFIG_OF_BOARD_FIXUP=y
> CONFIG_CMD_CLK=y
> # CONFIG_CMD_FLASH is not set
> CONFIG_CMD_I2C=y
>
Applied to u-boot-marvell/master
Thanks,
Stefan
More information about the U-Boot
mailing list