From ebbc0bffc76a7a9fe844a7b9774f7b2395026f53 Mon Sep 17 00:00:00 2001 From: count-doku Date: Thu, 2 Jan 2020 12:38:26 +0100 Subject: [PATCH] Add pcie reset to u-boot dev --- .../do_pcie_reset_during_init.patch | 49 +++++++++++++++++++ .../do_pcie_reset_during_init.patch | 49 +++++++++++++++++++ 2 files changed, 98 insertions(+) create mode 100644 patch/u-boot/u-boot-mvebu-dev/board_clearfogbase/do_pcie_reset_during_init.patch create mode 100644 patch/u-boot/u-boot-mvebu-dev/board_clearfogpro/do_pcie_reset_during_init.patch diff --git a/patch/u-boot/u-boot-mvebu-dev/board_clearfogbase/do_pcie_reset_during_init.patch b/patch/u-boot/u-boot-mvebu-dev/board_clearfogbase/do_pcie_reset_during_init.patch new file mode 100644 index 0000000000..c4681695d5 --- /dev/null +++ b/patch/u-boot/u-boot-mvebu-dev/board_clearfogbase/do_pcie_reset_during_init.patch @@ -0,0 +1,49 @@ +diff --git a/board/solidrun/clearfog/clearfog.c b/board/solidrun/clearfog/clearfog.c +index f644547..f6e8ad5 100644 +--- a/board/solidrun/clearfog/clearfog.c ++++ b/board/solidrun/clearfog/clearfog.c +@@ -10,6 +10,7 @@ + #include + #include + #include ++#include + + #include "../drivers/ddr/marvell/a38x/ddr3_init.h" + #include <../serdes/a38x/high_speed_env_spec.h> +@@ -120,6 +121,36 @@ int board_init(void) + setbits_le32(MVEBU_GPIO0_BASE + 0x0, BIT(19)); + mdelay(10); + ++#ifdef CONFIG_DM_GPIO ++ struct gpio_desc pcie0_reset, ++ pcie1_reset; ++ int res; ++ ++ /* Toogle PERST# on miniPCIe1 (CON2) and miniPCIe0 (CON3) */ ++ res = dm_gpio_lookup_name("gpio@20_1", &pcie0_reset); ++ if (!res) { ++ res = dm_gpio_request(&pcie0_reset, "pcie0-reset"); ++ if (!res) ++ dm_gpio_set_dir_flags(&pcie0_reset,GPIOD_IS_OUT | ++ GPIOD_ACTIVE_LOW); ++ } ++ ++ res = dm_gpio_lookup_name("gpio@20_2", &pcie1_reset); ++ if (!res) { ++ res = dm_gpio_request(&pcie1_reset, "pcie1-reset"); ++ if (!res) ++ dm_gpio_set_dir_flags(&pcie1_reset,GPIOD_IS_OUT | ++ GPIOD_ACTIVE_LOW); ++ } ++ ++ dm_gpio_set_value(&pcie0_reset, 1); ++ dm_gpio_set_value(&pcie1_reset, 1); ++ mdelay(100); ++ dm_gpio_set_value(&pcie0_reset, 0); ++ dm_gpio_set_value(&pcie1_reset, 0); ++ mdelay(100); ++#endif ++ + return 0; + } + diff --git a/patch/u-boot/u-boot-mvebu-dev/board_clearfogpro/do_pcie_reset_during_init.patch b/patch/u-boot/u-boot-mvebu-dev/board_clearfogpro/do_pcie_reset_during_init.patch new file mode 100644 index 0000000000..c4681695d5 --- /dev/null +++ b/patch/u-boot/u-boot-mvebu-dev/board_clearfogpro/do_pcie_reset_during_init.patch @@ -0,0 +1,49 @@ +diff --git a/board/solidrun/clearfog/clearfog.c b/board/solidrun/clearfog/clearfog.c +index f644547..f6e8ad5 100644 +--- a/board/solidrun/clearfog/clearfog.c ++++ b/board/solidrun/clearfog/clearfog.c +@@ -10,6 +10,7 @@ + #include + #include + #include ++#include + + #include "../drivers/ddr/marvell/a38x/ddr3_init.h" + #include <../serdes/a38x/high_speed_env_spec.h> +@@ -120,6 +121,36 @@ int board_init(void) + setbits_le32(MVEBU_GPIO0_BASE + 0x0, BIT(19)); + mdelay(10); + ++#ifdef CONFIG_DM_GPIO ++ struct gpio_desc pcie0_reset, ++ pcie1_reset; ++ int res; ++ ++ /* Toogle PERST# on miniPCIe1 (CON2) and miniPCIe0 (CON3) */ ++ res = dm_gpio_lookup_name("gpio@20_1", &pcie0_reset); ++ if (!res) { ++ res = dm_gpio_request(&pcie0_reset, "pcie0-reset"); ++ if (!res) ++ dm_gpio_set_dir_flags(&pcie0_reset,GPIOD_IS_OUT | ++ GPIOD_ACTIVE_LOW); ++ } ++ ++ res = dm_gpio_lookup_name("gpio@20_2", &pcie1_reset); ++ if (!res) { ++ res = dm_gpio_request(&pcie1_reset, "pcie1-reset"); ++ if (!res) ++ dm_gpio_set_dir_flags(&pcie1_reset,GPIOD_IS_OUT | ++ GPIOD_ACTIVE_LOW); ++ } ++ ++ dm_gpio_set_value(&pcie0_reset, 1); ++ dm_gpio_set_value(&pcie1_reset, 1); ++ mdelay(100); ++ dm_gpio_set_value(&pcie0_reset, 0); ++ dm_gpio_set_value(&pcie1_reset, 0); ++ mdelay(100); ++#endif ++ + return 0; + } +