[U-Boot] [PATCH 23/23] ARM: tegra: Enable PCIe on Jetson TK1
Tuomas Tynkkynen
ttynkkynen at nvidia.com
Tue Aug 26 14:54:50 CEST 2014
On 18/08/14 10:16, Thierry Reding wrote:
[...]
> +static int as3722_gpio_direction_output(u8 gpio, u8 level)
> +{
> + u8 value;
> + int err;
> +
> + if (gpio > 7)
> + return -EINVAL;
> +
> + if (level == 0)
> + value = AS3722_GPIO_CONTROL_MODE_OUTPUT_VDDL;
> + else
> + value = AS3722_GPIO_CONTROL_MODE_OUTPUT_VDDH;
> +
> + err = as3722_write(AS3722_GPIO_CONTROL(gpio), value);
> + if (err) {
> + error("as3722: failed to configure GPIO#%u as output: %d\n",
> + gpio, err);
> + return err;
> + }
> +
> + err = as3722_gpio_set(gpio, level);
> + if (err < 0) {
> + error("as3722: failed to set GPIO#%u high: %d\n", gpio, err);
> + return err;
> + }
> +
> + return 0;
> +}
This function doesn't work correctly if the GPIO was originally configured
as inverted and low, which GPIO#2 seems to be.
(as3722_read(AS3722_GPIO_CONTROL(2), &value) returns value == 0x87)...
> +
> +int tegra_pcie_board_init(void)
> +{
[...]
> +
> + err = as3722_gpio_direction_output(2, 1);
> + if (err < 0) {
> + error("as3722: failed to set GPIO#2 high: %d\n", err);
> + return err;
> + }
[...]
On my board, this call results in UART corruption, like this:
tegra-pcie: non-prefetchable memory: 0x13000000-0x20000000
tegra-pcie: prefetchable memory: 0x20000000-0x40000000
¥É½¥¹½bªÍ¥¹b2x1, 1x1 configuration
¹Í5Rþtegra-pcie: probing port 1, using 1 lanes
Likely because GPIO#2 controls the +3.3V_LP0 rail, which powers the UART
level shifters. Commenting the function call out fixes the corruption and
PCI-E still works fine.
--
nvpublic
More information about the U-Boot
mailing list