summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorMarcel Ziswiler <marcel.ziswiler@toradex.com>2013-06-07 15:48:23 +0200
committerMarcel Ziswiler <marcel.ziswiler@toradex.com>2013-06-07 15:48:23 +0200
commitbb291d1fd5d89e4f621613a086e19f32d23ed73f (patch)
tree265662d7518f77e340d6a61a583263476f4331e0 /arch
parent98ded38879849b362549ae806902dc25a2210425 (diff)
apalis_t30: fix PCIe reset issue
Implement workaround for PLX PEX 8605 errata 5 (PEX_REFCLK_OUTpx/nx Clock Outputs is not Guaranteed Until 900 us After PEX_PERST# De-assertion) by releasing RESET_MOCI_N 1 ms after releasing PEX_PERST_N.
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/mach-tegra/board-apalis_t30.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/arch/arm/mach-tegra/board-apalis_t30.c b/arch/arm/mach-tegra/board-apalis_t30.c
index 865742a87057..cf9eb5922681 100644
--- a/arch/arm/mach-tegra/board-apalis_t30.c
+++ b/arch/arm/mach-tegra/board-apalis_t30.c
@@ -400,11 +400,19 @@ static struct tegra_pci_platform_data apalis_t30_pci_platform_data = {
static void apalis_t30_pci_init(void)
{
- /* Reset PLX PEX 8605 PCIe Switch on Apalis Evaluation Board */
+ /* Reset PLX PEX 8605 PCIe Switch plus PCIe devices on Apalis Evaluation
+ Board */
gpio_request(PEX_PERST_N, "PEX_PERST_N");
+ gpio_request(RESET_MOCI_N, "RESET_MOCI_N");
gpio_direction_output(PEX_PERST_N, 0);
+ gpio_direction_output(RESET_MOCI_N, 0);
+ /* Must be asserted for 100 ms after power and clocks are stable */
msleep(100);
gpio_set_value(PEX_PERST_N, 1);
+ /* Err_5: PEX_REFCLK_OUTpx/nx Clock Outputs is not Guaranteed Until
+ 900 us After PEX_PERST# De-assertion */
+ msleep(1);
+ gpio_set_value(RESET_MOCI_N, 1);
tegra_pci_device.dev.platform_data = &apalis_t30_pci_platform_data;
platform_device_register(&tegra_pci_device);