PU0 GPIO not pulling low when level shifted on Tegra 21.4 kernel

I installed a fresh version of the Tegra 21.4 kernel on my Jetson TK1, and I have a level shifting circuit to convert the PU lines from 1.8V up to 3.3 or 5V. I initially tested this on some earlier versions of the kernel and had no problems. When I switched to 21.4 I noticed that the PU0 line was acting funny. Initially I thought I had damaged my GTL2010 chip during reflow of the board. I then rebuilt a bread board of the circuit, and then tried a different circuit using the BSS138 transistor. In all cases I got the same behavior. When I put a volt meter to the PU0 line I can command it to go high and low and it does go from 1.8V to ~10mV. However, when I hook it up to the level shifting circuit it suddenly only goes from 1.8V to about 1.6V. The other PU I/O lines all work fine with the exact same circuit. They go from 1.8V down to a few millivolts still, and I can use them to drive external circuitry. I then switched back to an older Grinch kernel I originally tested with, and the PU0 on it worked fine. Also, the input works fine for PU0 and the other ones on 21.4. So I can use it as an input, but I cannot seem to drive anything with it. It is almost like it has another pull-up resistor in there that is keeping it from going down to ground or something. I compared the dts file for both the 21.4 and Grinch boards and the pinmux definition for both were the same, shown here:

pu0 {
   nvidia,pins = "pu0";
   nvidia,function = "rsvd4";
   nvidia,pull = <0x0>;
   nvidia,tristate = <0x0>;
   nvidia,enable-input = <0x1>;

Tri-state and pull-up are both set to disabled, the same as the other pu lines. The only difference I see between the pu0 and the other lines is that it is the only one with a function of “rsvd4”. Can anyone explain what that function is, or where I can find an explanation for it? I tried looking in the TRM, but did not see anything obvious. Is there someplace else I can look to try and understand why the behavior of the two kernels are acting differently? I also looked to see if anyone else had reported anything similar, but did not see anything similar to this. Has anyone else run into this behavior?


Hello, NeuroBots:
If that GPIO pin can be low-high without external level shifting circuit, configuration should be OK.
But you mentioned the results differ with different kernel, right?
Can you check the running status for different kernels?

sudo su
cat /sys/kernel/debug/tegra_pinctrl_reg |grep pu0

and see whether the register value is different with different kernel (work and does-not-work).


Both systems have the same values:

Bank: 1 Reg: 0x70003184 Val: 0x00000023 -> pu0

My current plan is to upgrade the older grinch to the latest version and see if it still works, then I will try and install that same grinch version on the one that is not working. If it works on one but not the other then there is something wrong with the hardware itself on that board. If it does work then I can re-install a fresh base 21.4 on the old grinch machine. If it stops working there, then something is going on with the kernel. If anyone has a better plan, or additional tests I can run on the systems I am all ears. :)