Where is the correct correct Place in the U-boot directory to configurate a GPIO?

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Where is the correct correct Place in the U-boot directory to configurate a GPIO?

Jump to solution
955 Views
breixolopezgarc
Contributor II

Hi Community,

I´m a newbei in the U-boot development, nowadays I try to create a U-boot for a custom board based in iMX6Q from freescale. I have been understanding the IOMUX files and program and also the GPIO register in that board, because I would like to set a led during the U-boot connected in the GPIO5_15 in the board like it is in the SabreAI Card as default.

I have configured the Iomux to select the GPIO function in the ball T20 of the iMX6Q with the following description in the PAD_DISP0_DAT21:

  writel((SION_DISABLED & 0x1) << 4 | (ALT5 & 0x7), IOMUXC_SW_MUX_CTL_PAD_DISP0_DAT21);

  writel((HYS_ENABLED & 0x1) << 16 | (PUS_100KOHM_PU & 0x3) << 14 | (PUE_PULL & 0x1) << 13 |

           (PKE_ENABLED & 0x1) << 12 | (ODE_DISABLED & 0x1) << 11 | (SPD_100MHZ & 0x3) << 6 |

           (DSE_40OHM & 0x7) << 3 | (SRE_SLOW & 0x1), IOMUXC_SW_PAD_CTL_PAD_DISP0_DAT21);

I have seen that when the pins works like a GPIO, they have a extra registers that they are independent of the IOMUX configuration (Reference: Chapter 28 in the iMX6Q Data sheet). If I am not wrong, to work like a output the GPIO5_15 and the led will be on. I need to set the following registers:

  • GPIO5_DR 1 in bit 15 to indicate High level in the output
  • GPIO5_GDIR 1 in bit 15 to indicate output work

My question If it is possible to make in the U-boot and whether it is, which is the correct file to do that. I tried to change the c file from the board in  <u-boot directory>/<board>/<directory of my custom board>/<name_of_the_board>.c.

in the function board_init. The changes in that function are the following:

        writel((1 & 0xffffffff ) << 15, GPIO5_BASE_ADDR + GPIO_GDIR);

       writel((1 & 0xffffffff ) << 15, GPIO5_BASE_ADDR + GPIO_DR);

Although that could be work, I am still thinking that it is a complety wrong system to develop a correct U-boot for my custom board.

Any help will be gratefully,

-Regards

Labels (3)
0 Kudos
1 Solution
668 Views
fabio_estevam
NXP Employee
NXP Employee

You don't need to access the GPIO registers directly. There is a GPIO API you can use.

Check for example: board/wandboard/wandboard.c

static void setup_iomux_enet(void)

{

    imx_iomux_v3_setup_multiple_pads(enet_pads, ARRAY_SIZE(enet_pads));

    /* Reset AR8031 PHY */

    gpio_direction_output(ETH_PHY_RESET, 0);

    udelay(500);

    gpio_set_value(ETH_PHY_RESET, 1);

}

View solution in original post

0 Kudos
2 Replies
669 Views
fabio_estevam
NXP Employee
NXP Employee

You don't need to access the GPIO registers directly. There is a GPIO API you can use.

Check for example: board/wandboard/wandboard.c

static void setup_iomux_enet(void)

{

    imx_iomux_v3_setup_multiple_pads(enet_pads, ARRAY_SIZE(enet_pads));

    /* Reset AR8031 PHY */

    gpio_direction_output(ETH_PHY_RESET, 0);

    udelay(500);

    gpio_set_value(ETH_PHY_RESET, 1);

}

0 Kudos
668 Views
breixolopezgarc
Contributor II


Hi Fabio,

Thanks for your answer, now I have a reference to follow.

-Regards

0 Kudos